Chapter 16 Task Offload °´Ã¼

´ÙÀ½ Â÷Æ®´Â TCP/IP task-offload ¿¬»êµéÀ» Áö¿øÇÏ´Â OIDµéÀ» ¿ä¾àÇÑ´Ù. ±×·¯ÇÑ ¿¬»êµéÀÇ ¼³¸íÀ» À§ÇØ, Network Design GuideÀÇ Part 2¸¦ ºÁ¶ó.
Length Q S Name
Arr M M OID_TCP_TASK_OFFLOAD

Äõ¸®ÇÒ ¶§, NICÀÇ task-offload ´É·ÂµéÀ» º¸°íÇϱâ À§ÇØ ¹Ì´ÏÆ÷Æ®¿¡°Ô ¿ä±¸ÇÑ´Ù. ¼³Á¤ÇÒ ¶§, ¹Ì´ÏÆ÷Æ®¿¡°Ô NICÀÇ ÁöÁ¤µÈ task-offload ´É·ÂµéÀ» °¡´ÉÇÏ°Ô ¿ä±¸ÇÑ´Ù.

Arr   M OID_TCP_TASK_IPSEC_ADD_SA

¹Ì´ÏÆ÷Æ®¿¡°Ô NIC¿¡ ´ëÇÑ Çϳª ȤÀº ±× ÀÌ»óÀÇ º¸¾È Çùȸ(SA)µéÀ» Ãß°¡Çϱâ À§ÇØ ¿ä±¸ÇÑ´Ù.

4 M OID_TCP_TASK_IPSEC_DELETE_SA

¹Ì´ÏÆ÷Æ®¿¡°Ô NICÀ¸·ÎºÎÅÍ SA¸¦ Áö¿ìµµ·Ï ÇÑ´Ù.


´ÙÀ½Àº ¿ÏÀüÇÏ°Ô ¼±Çà Â÷Æ®¿¡¼­ ¸®½ºÆ®µÈ OID_XXXÀÇ °¢°¢À» ¼³¸íÇÑ´Ù.

OID_TCP_TASK_OFFLOAD

TCP/IP Àü¼Û °èÃþÀº ÀÌ OID¸¦ ¹Ì´ÏÆ÷Æ®ÀÇ NICÀÇ task-offload ´É·ÂµéÀ» °áÁ¤Çϱâ À§ÇØ Äõ¸®ÇÑ´Ù. NICÀÌ Áö¿øÇϴ ŽºÅ©-offload ´É·ÂµéÀÌ ¾î´À°ÍÀÎÁö °áÁ¤ÇÑ ÈÄ, TCP/IP Àü¼Û ÇÁ·ÎÅäÄÝÀº ÀÌ OID¸¦ º¸°íµÈ ´É·ÂµéÀ» °¡´ÉÇϵµ·Ï ¼³Á¤ÇÑ´Ù. TCP/IP ÇÁ·ÎÅäÄÝÀº ¶ÇÇÑ ÀÌ OID¸¦ ¼³Á¤ÇÔÀ¸·Î½á NICÀÇ task-offload ´É·ÂµéÀÇ ¸ðµç °ÍÀ» ºÒ´ÉÀ¸·Î ÇÒ ¼ö ÀÖ´Ù. ´ÜÁö Çѹø¿¡ ÇϳªÀÇ ÇÁ·ÎÅäÄÝÀÌ Æ¯Á¤ NICÀÇ task-offload ´É·ÂµéÀ» °¡´ÉÇÒ ¼ö ÀÖ°Ô ÇÑ´Ù.

Querying a NIC's Task-Offload Capabilities

TCP/IP Àü¼Û °èÃþÀÌ OID_TCP_TASK_OFFLOAD¸¦ Äõ¸®ÇÒ ¶§, NDIS_TASK_OFFLOAD_HEADER ±¸Á¶Ã¼ÀÎ InformationBuffer·Î Á¦°øÇÑ´Ù. ÀÌ ±¸Á¶Ã¼´Â TCP/IP Àü¼Û °èÃþ¿¡ ÀÇÇØ 󸮵ȴÀ ¼Û½Å ¼ö½Å ÆÐŶµéÀ» À§ÇÑ Ä¸½¶È­ Æ÷¸Ë, ±×·¯ÇÑ ÆÐŶµé¿¡¼­ ĸ½¶È­ Çì´õÀÇ Å©±â, TCP/IP Àü¼Û°èÃþ¿¡ ÀÇÇØ Á¦°øµÇ´Â task-offload ¹öÀüÀ» ÁöÁ¤ÇÑ´Ù. ÀÌ·¯ÇÑ Á¤º¸¿¡¼­, ¹Ì´ÏÆ÷Æ® ȤÀº NICÀº offload task¸¦ ÇàÇϱâ À§ÇØ ÇÊ¿äÇÑ °ÍµéÀÎ Àü¼Û ÆÐŶ¿¡¼­ ù IP Çì´õÀÇ ½ÃÀÛÀ» À§Ä¡ÇÒ ¼ö ÀÖ´Ù.

OID_TCP_TASK_OFFLOADÀÇ Äõ¸®¿¡ ÀÀ´äÇÏ¿©, ¹Ì´ÏÆ÷Æ®´Â InformationBuffer·Î Çϳª ȤÀº ±× ÀÌ»óÀÇ NDIS_TASKOFFLOAD ±¸Á¶Ã¼µé¿¡ ÀÇÇØ Àü¿¡ NDIS_TASK_OFFLOAD_HEADER ±¸Á¶Ã¼¸¦ ¸®ÅÏÇÑ´Ù. ¸¸¾à ¹Ì´ÏÆ÷Æ®ÀÇ NICÀº ƯÁ¤ ŽºÅ©-offload ´É·ÂÀÇ ´ÙÁß ¹öÀüµéÀ» Á¦°øÇÑ´Ù¸é, °¢ ¹öÀüÀ» À§ÇØ ÇϳªÀÇ NDIS_TASK_OFFLOAD ±¸Á¶Ã¼¸¦ ¸®ÅÏÇØ¾ß ÇÑ´Ù.

°¢ NDIS_TASK_OFFLOAD ±¸Á¶Ã¼´Â ±¸Á¶Ã¼°¡ Àû¿ëÇϴ ƯÁ¤ offload taskÀ» ÁöÁ¤ÇÏ´Â Task ¸â¹ö¸¦ °¡Áø´Ù. °¢ NDIS_TASK_OFFLOAD ±¸Á¶Ã¼´Â ¶ÇÇÑ Æ¯Áö¾î offload ŽºÅ©¿¡ ¼ÓÇÑ Á¤º¸¸¦ Æ÷ÇÔÇÑ TaskBuffer¸¦ °¡Áø´Ù. TaskBuffer³»¿¡ Á¤º¸´Â ´ÙÀ½ ±¸Á¶Ã¼µéÀÇ Çϳª·Î Æ÷¸ËÈ­µÈ´Ù.

  • NDIS_TASK_TCP_IP_CHECKSUM

    üũ¼¶ offload ´É·ÂµéÀ» ÁöÁ¤ÇÑ´Ù.

  • NDIS_TASK_IPSEC

    IP Security offload ´É·ÂµéÀ» ÁöÁ¤ÇÑ´Ù.

  • NDIS_TASK_TCP_LARGE_SEND

    Å« TCP ÆÐŶ ¼¼±×¸ÕÆ® ´É·ÂµéÀ» ÁöÁ¤ÇÑ´Ù.

Enabling a NIC's Task-Offload Capabilities

NICÀÇ task-offload ´É·ÂµéÀ» Äõ¸®ÇÑ ÈÄ, TCP/IP Àü¼Û °èÃþÀº OID_TCP_TASK_OFFLOAD¸¦ ¼³Á¤ÇÔÀ¸·Î½á Çϳª ȤÀº ±× ÀÌ»óÀÇ ÀÌ·¯ÇÑ ´É·ÂµéÀÌ °¡´ÉÇÏ´Ù. OID_TCP_TASK_OFFLOAD¸¦ ¼³Á¤ÇÒ ¶§, TCP/IP Àü¼Û °èÃþÀº Àü¼Û °èÃþÀÌ °¡´ÉÇÑ °¢ task-offload ´É·ÂÀ» À§ÇÑ NDIS_TASK_OFFLOAD ±¸Á¶Ã¼ Àü¿¡ NDIS_TASK_OFFLOAD_HEADER ±¸Á¶Ã¼ÀÎ InformationBuffer¸¦ Á¦°øÇÑ´Ù.

°¢ NDIS_TASK_OFFLOAD ±¸Á¶Ã¼ÀÎ Task´Â TCP/IP Àü¼Û °èÃþÀÌ °¡´ÉÇÏ´Â offload task¸¦ ÀεðÄÉÀÌÆ®ÇÑ´Ù. TCP/IP Àü¼Û °èÃþÀº ¶ÇÇÑ °¢ NDIS_TASK_OFFLOAD ±¸Á¶Ã¼ÀÇ TaskBuffer³» ±¸Á¶Ã¼ÀÇ ¸â¹öµé(NDIS_TASK_TCP_IP_CHECKSUM, NDIS_TASK_IPSEC, ȤÀº NDIS_TASK_LARGE_SEND) ¼³Á¤ÇÔÀ¸·Î½á ƯÁ¤ offload ŽºÅ©¸¦ À§ÇÑ ´É·ÂµéÀ» °¡´ÉÇÏ°Ô ÇÑ´Ù.

Changing a NIC's Task-Offload Capabilities

NIC¿¡ ÀÇÇØ Á¦°øµÇ´Â ¸ðµç task-offload ´É·ÂµéÀÌ ºÒ´ÉÀ¸·Î Çϱâ À§ÇØ, TCP/IP Àü¼Û °èÃþÀº OID_TCP_TASK_OFFLOAD¸¦ ¼³Á¤ÇÑ´Ù. ¹Ì´ÏÆ÷Æ®´Â ´ÜÁö OID_TCP_TASK_OFFLOADÀÇ °¡Àå ÃÖ±Ù ¼³Á¤¿¡ ÀÇÇØ ÁöÁ¤µÈ ÀÌ·¯ÇÑ task-offload ´É·ÂµéÀ» °¡´ÉÇÏ°Ô ÇØ¾ß ÇÑ´Ù.

Disabling a NIC's Tasl-Offload Capabilities

NIC¿¡ ÀÇÇØ Áö¿øµÈ ¸ðµç task-offload capabilitiesÀ» ºÒ°¡´ÉÇÏ°Ô Çϱâ À§ÇØ, TCP/IP Àü¼Û °èÃþÀº ´ÜÁö 0À¸·Î ¼³Á¤µÈ ÀÌ ±¸Á¶Ã¼ÀÇ OffsetFirstTask ¸â¹ö·Î NDIS_TASK_OFFLOAD_HEADER ±¸Á¶Ã¼ÀÎ InformationBuffer¿¡ Àü´ÞµÇ´Â OID_TCP_TASK_OFFLOAD¸¦ ¼³Á¤ÇÑ´Ù.

OID_TCP_TASK_IPSEC_ADD_SA

Æ®·£½ºÆ÷Æ® ÇÁ·ÎÅäÄÝÀº ÀÌ OID¸¦ ¹Ì´ÏÆ÷Æ®°¡ NIC¿¡´ëÇÑ ÇϳªÈ¤Àº ±×ÀÌ»óÀÇ º¸¾È ¿¬ÇÕ(SAs)À» Ãß°¡ÇÏ´Â ¿äûÀ» ÇϱâÀ§ÇØ ¼³Á¤ÇÑ´Ù.

°¢ SA¿¡´ëÇÑ Á¤º¸´Â ´ÙÀ½°ú°°ÀÌ Á¤ÀÇµÈ OFFLOAD_IPSEC_ADD±¸Á¶Ã¼·Î½á Æ÷¸ËµÈ´Ù.


typedef struct _OFFLOAD_IPSEC_ADD_SA {

    IPAddr                        SrcAddr;

    IPMask                        SrcMask;

    IPAddr                        DestAddr;

    IPMask                        DestMask;

    ULONG                         Protocol;

    USHORT                        SrcPort;

    USHORT                        DestPort;

    IPAddr                        SrcTunnelAddr;

    IPAddr                        DestTunnelAddr;

    USHORT                        Flags;

    SHORT                         NumSAs;

    OFFLOAD_SECURITY_ASSOCIATION  SecAssoc[OFFLOAD_MAX_SAS];

    NDIS_HANDLE                   OffloadHandle;

    ULONG                         KeyLen;

    UCHAR                         KeyMat[1];

} OFFLOAD_IPSEC_ADD_SA, *POFFLOAD_IPSEC_ADD_SA;

ÀÌ ±¸Á¶Ã¼ÀÇ ¸â¹ö´Â ´ÙÀ½ Á¤º¸¸¦ Æ÷ÇÔÇÑ´Ù.

SrcAddr
¼Ò½º È£½ºÆ®(ÆÐŶÀ» º¸³»´Â È£½ºÆ®)ÀÇ IP¾îµå·¹½º¸¦ ÁöÁ¤ÇÑ´Ù.

SrcMask
¼Ò½º IP¾îµå·¹½º¿¡´ëÇÑ ¼­ºê³Ý ¸¶½ºÅ©¸¦ ÁöÁ¤ÇÑ´Ù.

DestAddr
¸ñÀûÁö È£½ºÆ®(ÆÐŶÀ» ¹Þ´Â È£½ºÆ®)ÀÇ IP¾îµå·¹½º¸¦ ÁöÁ¤ÇÑ´Ù.

DestMask
¸ñÀûÁö IP¾îµå·¹½º¿¡´ëÇÑ ¼­ºê³Ý ¸¶½ºÅ©¸¦ ÁöÁ¤ÇÑ´Ù.

Protocol
IPÇÁ·ÎÅäÄÝÀ» ÁöÁ¤ÇÑ´Ù. TCP, UDP, ICMP, IP¿Í °°Àº ÇÁ·ÎÅäÄÝ Å¸ÀÔÀÇ ¾î¶²Á¶È­°¡ ÁöÁ¤µÉ¼ö ÀÖ´Ù. ÇÁ·ÎÅäÄÝÀÇ ¾Ïȣȭ´Â IPÇì´õ³»¿¡ ÇÁ·ÎÅäÄÝ ÇʵåÀÇ °Í°ú µ¿ÀÏÇÏ´Ù. ¸¸¾à ÇÁ·ÎÅäÄÝÀÌ 0À¸·Î ¼³Á¤µÇ¸é, SA´Â ¾î¶² IPÇÁ·ÎÅäÄÝ¿¡ Àû¿ëµÈ´Ù.

SrcPort
¼Ò½º TCPȤÀº UDPÆ÷Æ®¸¦ ÁöÁ¤ÇÑ´Ù. ¸¸¾à SrcPort°¡ 0À¸·Î ¼³Á¤µÇ¸é, SA´Â ¾î¶² ¼Ò½º TCP/UDPÆ÷Æ®¸¦ Àû¿ëÇÑ´Ù.

DestPort
¸ñÀûÁö TCPȤÀº UDPÆ÷Æ®¸¦ ÁöÁ¤ÇÑ´Ù. ¸¸¾à DestPort°¡ 0À¸·Î ¼³Á¤µÇ¸é, SA´Â ¾î¶² ¼Ò½º TCP/UDPÆ÷Æ®¸¦ Àû¿ëÇÑ´Ù.

SrcTunnelAddr
°ÔÀÌÆ® ¿þÀ̿Ͱ°Àº ÅͳÎÀÇ ¼Ò½º ¿£Æ®Æ÷ÀÎÆ®¿¡´ëÇÑ IP¾îµå·¹½º¸¦ ÁöÁ¤ÇÑ´Ù. ¹Ì´ÏÆ÷Æ®´Â SA¿¡ º¸³»´Â ÅͳÎIPÇì´õ ÆÐŶ¿¡´ëÇÑ ¼Ò½º ¾îµå·¹½º¿Í°°Àº SrcTunnelAddr¸¦ »ç¿ëÇÑ´Ù. SrcTunnelAddr´Â ÆÐŶÀÇ ÅͳÎÀ§Ä¡¿¡ Àû¿ëÇÏ´Â SA¿¡´ëÇØ¼­¸¸ ÁöÁ¤µÈ´Ù. SrcTunnelAddr´Â ÆÐŶÀÇ Æ®·£½ºÆ÷Æ® À§Ä¡¿¡ Àû¿ëÇÏ´Â SA¿¡´ëÇØ 0À¸·Î ¼³Á¤ÇÑ´Ù.

DestTunnelAddr
°ÔÀÌÆ®¿þÀÌ¿Í °°Àº ÅͳÎÀÇ ¸ñÀûÁö ¿£µåÆ÷ÀÎÆ®¿¡´ëÇÑ IP¾îµå·¹½º¸¦ ÁöÁ¤ÇÑ´Ù. ¹Ì´ÏÆ÷Æ®´Â SA¿¡ º¸³»´Â ÆÐŶÀÇ ÅͳΠIPÇì´õ¿¡´ëÇÑ ¸ñÀûÁö ¾îµå·¹½º·Î½á DestTunnelAddr¸¦ »ç¿ëÇÑ´Ù. DestTunnelAddr´Â ÆÐŶÀÇ ÅͳÎÀ§Ä¡¿¡ Àû¿ëÇÏ´Â SA¿¡´ëÇØ¼­¸¸ ÁöÁ¤µÈ´Ù. DestTunnelAddr´Â ÆÐŶÀÇ Æ®·£½ºÆ÷Æ® À§Ä¡¿¡ Àû¿ëÇÏ´Â SA¿¡´ëÇØ¼­ 0À¸·Î ¼³Á¤ÇÑ´Ù.

Flags
Ãß°¡µÈ SA°¡ ´ÙÀ½°ú °°ÀÌ ÀιÙÀεù SAÀÎÁö ¾Æ¿ô¹ÙÀεùSAÀÎÁö¸¦ ÀεðÄÉÀÌÆ® ÇÏ´Â ºñÆ®¸¶½ºÅ©.

OFFLOAD_INBOUND_SA
ÀιÙÀεù SA¸¦ ÁöÁ¤ÇÑ´Ù.

OFFLOAD_OUTBOUND_SA
¾Æ¿ô ¹ÙÀεù SA¸¦ ÁöÁ¤ÇÑ´Ù.

NumSAs
SecAssoc¹è¿­³»ÀÇ ¿ä¼Ò¼ö¸¦ ÁöÁ¤ÇÑ´Ù. ¹è¿­³»ÀÇ °¢ ¿ä¼Ò´Â ¾Æ·¡ ¼³¸íµÈ OFFLOAD_SECURITY_ASSOCIATION±¸Á¶Ã¼ÀÌ´Ù.

SecAssoc
SA¿¡´ëÇØ IP Security¿¬»ê(AH and/or ESP)ÀÇ Á¤º¸¸¦ Æ÷ÇÔÇÏ´Â ´Ù¾çÇÑ ±æÀÌÀÇ ¹è¿­À» ÁöÁ¤ÇÑ´Ù. °¢ IP Security¿¬»ê¿¡´ëÇÑ Á¤º¸´Â ¾Æ·¡ ¼³¸íµÈ OFFLOAD_SECURITY_ASSOCIATION±¸Á¶Ã¼·Î½á Æ÷¸ËµÈ´Ù.

TCP/IPÆ®·£½ºÆ÷Æ®´Â SecAssocÀÇ ¹öÆÛ³»¿¡ ÇϳªÈ¤Àº ±×ÀÌ»óÀÇ OFFLOAD_SECURITY_ASSOCIATION±¸Á¶Ã¼¸¦ ÁöÁ¤ÇÑ´Ù. °¢ OFFLOAD_SECURITY_ASSOCIATION±¸Á¶Ã¼´Â ±¸Á¶Ã¼³»¿¡ ÁöÁ¤µÈ SA°¡ »ç¿ëµÈ°Í¿¡´ëÇÑ ¿¬»ê - ÀÎÁõȤÀº ¾Ïȣȭ/º¹È£È­ - ŸÀÔÀ» ÀεðÄÉÀÌÆ®ÇÑ´Ù. ¹è¿­³»ÀÇ OFFLOAD_SECURITY_ASSOCIATION±¸Ã¼ÀÇ ¼ø¼­´Â ¹Ì´ÏÆ÷Æ®°¡ °¢ SA¿¡´ëÇÑ ¿¬»êÀ» ¼öÇàÇØ¾ßÇϴ°Ϳ¡¼­ÀÇ ¼ø¼­¸¦ ÀεðÄÉÀÌÆ®ÇÑ´Ù. ´Ü ÇϳªÀÇ ¿¬»ê Á¶È­¸¸ÀÌ Áö¿øÇÑ´Ù: ÀÎÁõ¿¡ÀÇÇØ (AH)¾Ïȣȭ/º¹È£È­(ESP).

OffloadHandle
»õ·Ó°Ô »ý¼ºµÈ SA¿¡´ëÇÑ ÇÚµéÀ» ÁöÁ¤ÇÑ´Ù. ¹Ì´ÏÆ÷Æ®´Â OID_TCP_TASK_IPSEC_ADD_SA¿äûÀÇ ¿Ï·áÀü¿¡ ÀÌÇÚµéÀ» Á¦°øÇÑ´Ù. TCP/IPÆ®·£½ºÆ÷Æ®´Â ÀÌÇÚµéÀ» ¹Ì´ÏÆ÷Æ®¿¡°Ô ÆÐŶÀ» º¸³»±âÀü¿¡ NDIS_IPSEC_PACKET_INFO±¸Á¶Ã¼³»¿¡ ÁöÁ¤ÇÑ´Ù. TCP/IPÆ®·£½ºÆ÷Æ®´Â ¶ÇÇÑ OID_TCP_TASK_IPSEC_DELETE_SA¿äûÀ¸·Î SA¸¦ Áö¿ï¶§ ÀÌÇÚµéÀ» ÁöÁ¤Çؾ߸¸ ÇÑ´Ù.

KeyLen
KeyMat¿¡ ¹öÆÛÀÇ ¹ÙÀÌÆ® ±æÀ̸¦ ÁöÁ¤ÇÑ´Ù.

KeyMat
SecAssoc¿¡ ¼­¼úµÈ SA¿¡ ´ëÇÑ Å°¸¦ Æ÷ÇÔÇÏ´Â °¡º¯±æÀÌÀÇ ¹è¿­À» ¼­¼úÇÑ´Ù. ¸¸¾à ½Å·Ú¼º(encryption/decryption) ¾Ë°í¸®Áò°ú ¹«°á¼º(authentication) ¾Ë°í¸®ÁòÀÌ OFFLOAD_SECURITY_ASSOCIATION ±¸Á¶Ã¼ÀÇ ConfAlgo¿Í IntegrityAlgo¿¡ ÀÇÇØ¼­ ¼­¼úµÈ´Ù¸é KeyMat¿¡ ¹öÆÛ´Â ¿ì¼± ½Å·Ú¼º ¾Ë°í¸®Áò¿¡ ´ëÇÑ Å° Á¤º¸¸¦ Æ÷ÇÔÇÑ´Ù. À̰ÍÀº ¹«°á¼º ¾Ë°í¸®Áò¿¡ ´ëÇÑ Å° Á¤º¸¿¡ ÀÇÇØ¼­ Áï½Ã µÚµû¸¥´Ù.

KeyMat¿¡ ¹öÆÛ¿¡ ÀÖ´Â °¢°¢ÀÇ Å°¿¡ ´ëÇÑ ±æÀÌ´Â ½Å·Ú¼º°ú ¹«°á¼º ¾Ë°í¸®ÁòÀ» ¼­¼úÇÏ´Â OFFLOAD_ALGO_INFO ±¸Á¶Ã¼ÀÇ algoKeyLen¿¡ ÀÇÇØ¼­ ¼­¼úµÈ´Ù.(OFFLOAD_ALGO_INFO ±¸Á¶Ã¼´Â OFFLOAD_SECURITY_ASSOCIATION ±¸Á¶Ã¼ÀÇ ¸â¹öÀÌ´Ù.)

OFFLOAD_IPSEC_ADD_SA ±¸Á¶Ã¼ÀÇ Ã¹ 7¸â¹öµé(SrcAddr, SrcMask, DestAddr, DestMask, Protocol, SrcPort, DestPort)Àº SAµéÀÌ Àû¿ëÇÏ´Â IP ÇÁ·ÎÅäÄݵé°ú ¸¶Âù°¡Áö·Î ¼Ò½º¿Í ¸ñÀûÁö¸¦ ÁöÁ¤ÇÏ´Â ÇÊÅ͸¦ ±¸¼ºÇÑ´Ù. ÇÊÅÍ´Â Àü¼Û °èÃþ ¸ðµå ¿¬°á¿¡ ¼ÓÇÑ´Ù. Áï, µÎ°³ÀÇ È£½ºÆ®µé »çÀÌ¿¡ end-to-end ¿¬°á. ¸¸¾à ƯÁ¤ ¿¬°áÀÌ ÅͳÎÀ» ÅëÇØ ¸¸µé¾îÁø´Ù¸é, ÅͳÎÀÇ ¼Ò½º¿Í ¸ñÀûÁö ÁÖ¼ÒµéÀº °¢°¢ SrcTunnelAddr°ú DestTunnelAddr¿¡ ÀÇÇØ ÁöÁ¤µÈ´Ù.

¸¸¾à ÇÊÅÍ ¸Å°³º¯¼ö°¡ 0À¸·Î ¼³Á¤µÇ¸é, ±×·¯ÇÏ ¸Å°³º¯¼ö´Â ÁöÁ¤µÈ SAµéÀ» À§ÇÑ ÆÐŶµéÀ» ÇÊÅÍÇϱâ À§ÇØ »ç¿ëµÇÁö ¾Ê´Â´Ù. ¿¹¸¦ µé¾î, ¸¸¾à SrcAddrÀÌ 0À¸·Î ¼³Á¤µÇ¸é, ƯÁ¤ SAµéÀº ¾î¶² ¼Ò½º ÁÖ¼Ò¸¦ Æ÷ÇÔÇÏ´Â ÆÐŶ¿¡ Àû¿ëÇÒ ¼ö ÀÖ´Ù. ÃÖ´ë·Î À̰ÍÀ» °¡Áö±â À§ÇØ, ¸¸¾à ¸ðµç ÇÊÅÍ ¸Å°³º¯¼öµéÀÌ 0À¸·Î ¼³Á¤µÇ¸é, ƯÁ¤ SAµéÀº ¾î¶² ¸ñÀûÁö È£½ºÆ®¿¡ ÆÐŶÀÇ ¾î¶² ŸÀÔÀ» º¸³»´Â ¾î¶² ¼Ò½º È£½ºÆ®¿¡ Àû¿ëÇÑ´Ù.

TCP/IP Àü¼Û °èÃþÀº ƯÁ¤ SAµéÀÌ Æ¯Á¤ ÇÁ·ÎÅäÄÝ Å¸ÀÔÀÇ ÆÐŶµé¿¡ Àû¿ëÇÏ´Â °ÍÀ» ÀεðÄÉÀÌÆ®Çϱâ À§ÇØ Protocol ¸â¹ö³» IP ÇÁ·ÎÅäÄÝÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. ¸¸¾à ProtocolÀÌ 0À¸·Î ¼³Á¤µÇ¸é, ÁöÁ¤µÈ SAµéÀº ÁöÁ¤µÈ ¼Ò½º¿¡¼­ ÁöÁ¤µÈ ¸ñÀûÁö·Î º¸³»¾îÁö´Â ¸ðµç ÆÐŶµé¿¡ Àû¿ëÇÑ´Ù.

OFFLOAD_SECURITY_ASSOCIATION ±¸Á¶Ã¼

OFFLOAD_SECURITY_ASSOCIATION±¸Á¶Ã¼°¡ ´ÜÀÏ º¸¾È ÁýÇÕ(SA)À» ¼­¼úÇÑ´Ù. OFFLOAD_SECURITY_ASSOCIATION±¸Á¶Ã¼´Â SecAssoc º¯¼ö ±æÀÌ ¹è¿­¾ÈÀÇ ¿ä¼ÒÀÌ´Ù. SecAssocÀº Çϳª ¶Ç´Â µÎ°¡ÁöÀÇ OFFLOAD_SECURITY_ASSOCIATION±¸Á¶Ã¼µéÀ» Æ÷ÇÔÇÑ´Ù.

OFFLOAD_SECURITY_ASSOCIATION±¸Á¶Ã¼´Â ´ÙÀ½°ú °°ÀÌ Á¤ÀǵȴÙ.


typedef struct _OFFLOAD_SECURITY_ASSOCIATION 

{

    OFFLOAD_OPERATION_E    Operation;

    SPI_TYPE               SPI;

    OFFLOAD_ALGO_INFO      IntegrityAlgo;

    OFFLOAD_ALGO_INFO      ConfAlgo;

    OFFLOAD_ALGO_INFO      Reserved;

} OFFLOAD_SECURITY_ASSOCIATION, *POFFLOAD_SECURITY_ASSOCIATION;

OFFLOAD_SECURITY_ASSOCIATION±¸Á¶Ã¼ÀÇ ¸â¹öµéÀº ´ÙÀ½ÀÇ Á¤º¸¸¦ Æ÷ÇÔÇÑ´Ù.

Operation
SA°¡ »ç¿ëµÇ´Â °ÍÀ» À§ÇÑ IP º¸¾È ¿¬»êÀ» ¼­¼úÇÑ´Ù. ´ÙÀ½ÀÇ ¿¬»êµéÀÌ Á¦°øµÈ´Ù.

AUTHENTICATE
SA°¡ ÀÔÁõÀ» À§ÇØ »ç¿ëµÇ´Â°ÍÀ» ¼­¼úÇÑ´Ù. (¿Ïº®ÇÑ Ã¼Å·)

ENCRYPT
SA°¡ ¾ÏÈ£/ÇØµ¶À» À§Çؼ­ »ç¿ëµÇ´Â°ÍÀ» ¼­¼úÇÑ´Ù. (ºñ¹Ð¼º)

SPI
SA¸¦ À§ÇÑ º¸¾È ÆÄ¶ó¹Ì³Ê À妽º¸¦ ¼­¼úÇÑ´Ù.

IntegrityAlgo
OFFLOAD_ALGO_INFO±¸Á¶Ã¼·Î Æ÷¸Ë µÈ SA¸¦ À§ÇÑ ¿Ïº®ÇÑ(È®½ÇÇÑ)¾Ë°í¸®ÁòÀ» ¼­¼úÇÑ´Ù. OFFLOAD_ALGO_INFO±¸Á¶Ã¼´Â ¹Ø¿¡¼­ ¼­¼úµÈ´Ù.

ConfAlgo
OFFLOAD_ALGO_INFO±¸Á¶Ã¼·Î Æ÷¸Ë µÈ SA¸¦ À§ÇÑ ºñ¹Ð¼º(¾ÏÈ£/ÇØµ¶)¾Ë°í¸®ÁòÀ» ¼­¼úÇÑ´Ù. OFFLOAD_ALGO_INFO±¸Á¶Ã¼´Â ¹Ø¿¡¼­ ¼­¼úµÈ´Ù.

Reserved
À̰ÍÀº ¿¹¾àµÆ´Ù.

SA´Â ÇÁ·Î¼¼½Ì ¾ÈÀÇ »ç¿ëÀ» À§ÇÏ¿© ¿Ïº®ÇÑ Çì´õ(AH)¸¦ ¼­¼úµÆ°í AUTHENTICATEÀÇ ¿¬»ê ŸÀÔ°ú IntegrityAlgo(¿Ïº®ÇÑ ¾Ë°í¸®Áò)À» °¡Áö°í ÀÖÀ» °ÍÀÌ´Ù. ÀÌ ÄÉÀ̽º¿¡¼­ ¿Ïº®ÇÑ ¾Ë°í¸®ÁòÀº Á¦·Î¸¦ Æ÷ÇÔÇÒ °ÍÀÌ´Ù.

SA´Â ÇÁ·Î¼¼½Ì ¾ÈÀÇ »ç¿ëÀ» À§ÇÏ¿© ĸ½¶È­µÈ º¸¾È ÆäÀ̷εå(ESPs)°¡ ¼­¼úµÆ°í ENCRYPTÀÇ ¿¬»ê ŸÀÔ°ú IntegrityAlgo(¿Ïº®ÇÑ ¾Ë°í¸®Áò)±×¸®°í ConfAlgo(ºñ¹Ð¼ºÀÇ ¾Ë°í¸®Áò)À» °¡Áö°í ÀÖÀ» °ÍÀÌ´Ù.

OFFLOAD_ALGO_INFO ±¸Á¶Ã¼

OFFLOAD_SECURITY_ASSOCIATION ±¸Á¶Ã¼ÀÇ ¸â¹öÀÎ OFFLOAD_ALGO_INFO ±¸Á¶Ã¼´Â º¸¾È°ü°è(SA)¸¦ À§ÇØ »ç¿ëµÇ´Â ¾Ë°í¸®ÁòÀ» ¼­¼úÇÑ´Ù.

OFFLOAD_ALGO_INFO ±¸Á¶Ã¼ÀÇ Á¤ÀÇ´Â ´ÙÀ½°ú °°´Ù:


typedef struct _OFFLOAD_ALGO_INFO {

    ULONG    algoIdentifier;

    ULONG    algoKeylen;

    ULONG    Reserved;

} OFFLOAD_ALGO_INFO, *POFFLOAD_ALGO_INFO;

OFFLOAD_ALGO_INFO ±¸Á¶Ã¼ÀÇ ¸â¹ö´Â ´ÙÀ½ÀÇ Á¤º¸¸¦ Æ÷ÇÔÇÑ´Ù:

algoIdentifier
SA¸¦ À§Çؼ­ »ç¿ëµÇ´Â ½Å·Ú¼º ȤÀº ¹«°á¼º ¾Ë°í¸®ÁòÀ» ¼­¼úÇÑ´Ù.

¾Ë°í¸®ÁòÀÌ ½Å·Ú¼º ¾Ë°í¸®ÁòÀ̶ó¸é (Áï, OFFLOAD_ALGO_INFO ±¸Á¶Ã¼°¡ ConfAlgo¸¦ ¼­¼úÇÑ´Ù¸é), algoIdentifier´Â ´ÙÀ¸ÀÇ °ªÁß¿¡ Çϳª°¡ µÉ ¼ö ÀÖ´Ù:

OFFLOAD_IPSEC_CONF_NONE
½Å·Ú¼º ¾Ë°í¸®ÁòÀÌ ¾Æ´Ï¶ó´Â °ÍÀ» ¼­¼úÇÑ´Ù. NULL ¾Ïȣȭ¸¦ À§Çؼ­ »ç¿ëµÈ´Ù-Áï, ÆÐŶÀÌ ¾Ïȣȭ´Â µÇ¾îÀÖÁö¸¸ ±×°ÍÀÇ ESP Çì´õ´Â ÀÔÁõÀÚ Á¤º¸¸¦ Æ÷ÇÔÇÑ´Ù.

OFFLOAD_IPSEC_CONF_DES
DES ¾Ë°í¸®ÁòÀ» ¼­¼úÇÑ´Ù.

OFFLOAD_IPSEC_CONF_3_DES
Æ®¸®Çà DES ¾Ë°í¸®ÁòÀ» ¼­¼úÇÑ´Ù.

¸¸¾à ¾Ë°í¸®ÁòÀÌ ¹«°á¼º ¾Ë°í¸®ÁòÀ̶ó¸é (Áï, OFFLOAD_ALGO_INFO ±¸Á¶Ã¼°¡ IntegrityAlgo¸¦ ¼­¼úÇÑ´Ù¸é), algoIdentifier´Â ´ÙÀ½Áß ÇϳªÀÇ °ªÀ» ¼­¼úÇÑ´Ù:

OFFLOAD_IPSEC_INTEGRITY_NONE
¹«°á¼º ¾Ë°í¸®ÁòÀÌ ¾Æ´Ï¶ó´Â °ÍÀ» ¼­¼úÇÑ´Ù. ESP Çì´õ°¡ ÀÔÁõÀÚ Á¤º¸¸¦ Æ÷ÇÔÇÏÁö ¾ÊÀ» ¶§ »ç¿ëµÈ´Ù.

OFFLOAD_IPSEC_INTEGRITY_MD5
Áß¿äÇÑ MD5 ¾Ë°í¸®ÁòÀ» ¼­¼úÇÑ´Ù.

OFFLOAD_IPSEC_INTEGRITY_SHA
SHA 1 ¾Ë°í¸®ÁòÀ» ¼­¼úÇÑ´Ù.

algoKeylen
¾Ë°í¸®ÁòÀ» À§Çؼ­ ŰÀÇ ¹ÙÀÌÆ® ±æÀ̸¦ ¼­¼úÇÑ´Ù. Ű´Â OFFLOAD_IPSEC_ADD_SA ±¸Á¶Ã¼¿¡ ¼­¼úµÈ °¡º¯±æÀÌÀÇ ¹è¿­ÀÎ KeyMat¿¡ ¹öÆÛ¿¡ Æ÷ÇԵȴÙ.

¸¸¾à ¹«°á¼º ¾Ë°í¸®ÁòÀÌ(IntegrityAlgo) OFFLOAD_SECURITY_ASSOCIATION ±¸Á¶Ã¼ ¾È¿¡ ¼­¼úµÈ´Ù¸é algoKeylenÀº KeyMat¿¡ ¹öÆÛÀÇ ½ÃÀÛÁ¡À¸·ÎºÎÅÍ ½ÃÀ۵Ǵ ¹«°á¼º ¾Ë°í¸®Áò¿¡ ´ëÇØ¼­ ŰÀÇ ±æÀ̸¦ ¾Ë¸°´Ù.

¸¸¾à ¹«°á¼º ¾Ë°í¸®Áò°ú ½Å·Ú¼º ¾Ë°í¸®ÁòÀÌ µ¿½Ã¿¡ ¼­¼úµÈ´Ù¸é(IntegrityAlgo ¿Í ConfAlgo) ¹«°á¼º ¾Ë°í¸®ÁòÀ» À§ÇÑ algoKeylenÀº KeyMat¿¡ ¹öÆÛÀÇ ½ÃÀÛÁ¡À¸·ÎºÎÅÍ ½ÃÀ۵Ǵ ¹«°á¼º ¾Ë°í¸®ÁòÀ» À§ÇÑ Å°ÀÇ ±æÀ̸¦ ¾Ë¸°´Ù. ½Å·Ú¼º¿¡ ´ëÇÑ algoKeylenÀº ÀÌ·¯ÇÑ °æ¿ì¿¡ ¹«°á¼º ¾Ë°í¸®Áò¿¡ ´ëÇÑ Å°ÀÇ ³¡À¸·ÎºÎÅÍ ½ÃÀ۵Ǵ ½Å·Ú¼º ¾Ë°í¸®Áò¿¡ ´ëÇÑ Å°ÀÇ ±æÀ̸¦ ¾Ë¸°´Ù.

Reserved
¿¹¾à

OID_TCP_TASK_IPSEC_DELETE_SA

Æ®·£½ºÆ÷Æ® ÇÁ·ÎÅäÄÝÀº ¹Ì´ÏÆ÷Æ®°¡ NICÀ¸·ÎºÎÅÍ º¸¾È°ü°è(SA)¸¦ »èÁ¦ÇÏ´Â °ÍÀ» ¸®Äù½ºÆ®Çϱâ À§Çؼ­ ÀÌ OID¸¦ ¼³Á¤ÇÑ´Ù. SA Á¤º¸´Â OFFLOAD_IPSEC_DELETE ±¸Á¶Ã¼·Î½á Æ÷¸ËµÈ´Ù. Á¤ÀÇ´Â ´ÙÀ½°ú °°´Ù:


typedef struct _OFFLOAD_IPSEC_DELETE_SA {

    ULONG    OffloadHandle;

} OFFLOAD_IPSEC_DELETE_SA, *POFFLOAD_IPSEC_DELETE_SA;

ÀÌ ±¸Á¶Ã¼ÀÇ ¸â¹ö´Â ´ÙÀ½ÀÇ Á¤º¸¸¦ Æ÷ÇÔÇÑ´Ù:

OffloadHandle
SA¿¡ ´ëÇØ¼­ »èÁ¦µÇ´Â ÇÚµéÀ» ¼­¼úÇÑ´Ù.

ÀÌ ¸®Äù½ºÆ®ÀÇ ¼ö½Å¿¡¼­ ¹Ì´ÏÆ÷Æ®´Â SA¿¡ ´ëÇØ¼­ NICÀ¸·ÎºÎÅÍ ¸í½ÃµÈ SA¸¦ »èÁ¦Çϰí ÇÒ´çµÈ ¾î¶² ½Ã½ºÅÛ ÀÚ¿øÀ» ÇØÁ¦ÇؾßÇÑ´Ù.