NDIS 프로토콜 드라이버는 IPv6 NS(인접 요청) 오프로드 요청을 OID_PM_ADD_PROTOCOL_OFFLOAD OID 요청으로 보냅니다. 이러한 NS 오프로드 요청을 지원하려면 미니포트에서 다음을 수행해야 합니다.
미니포트 어댑터가 지원하는 오프로드 요청 수 표시
미니포트 드라이버는 NDIS_PM_CAPABILITIES 구조체의 NumNSOffloadIPv6Addresses 멤버를 설정하여 미니포트 어댑터가 지원하는 NS 오프로드 요청 수를 나타냅니다.
참고 이름에도 불구하고 NumNSOffloadIPv6Addresses 멤버에는 주소 수가 아닌 지원되는 요청 수가 포함됩니다.
참고 Device.Network.LAN.PM.PowMgmtNDIS 및 Device.Network.WLAN.WoWLAN.ImplementWakeOnWLAN같은 일부 Windows 하드웨어 인증 요구 사항은 미니포트 어댑터가 2개 이상의 NS 오프로드 요청을 지원해야 하므로 지정합니다. 즉, 이러한 요구 사항을 충족하려면 NumNSOffloadIPv6Addresses 값이 2 이상이어야 합니다. 자세한 내용은 Windows 8 하드웨어 인증 요구 사항참조하세요.
각 NS 오프로드 요청에는 1개 또는 2개의 대상 주소가 포함될 수 있습니다.
또한 유니캐스트 및 멀티캐스트의 두 가지 유형의 NS 메시지가 있습니다. 미니포트 드라이버는 각 대상 주소에 대한 두 가지 유형의 NS 메시지와 일치하도록 준비해야 합니다.
예시
미니포트 드라이버가 NumNSOffloadIPv6Addresses 구조체의 NDIS_PM_CAPABILITIES 멤버를 3으로 설정하는 경우 NDIS는 NdisPMProtocolOffloadIdIPv6NS 형식의 OID_PM_ADD_PROTOCOL_OFFLOAD 요청을 최대 3개까지 보낼 수 있습니다. 각 OID_PM_ADD_PROTOCOL_OFFLOAD 요청에는 NDIS_PM_PROTOCOL_OFFLOAD 구조의 TargetIPv6Addresses 멤버에 정확히 1 또는 2개의 주소가 있을 수 있습니다. 따라서 미니포트는 3 x 2 = 6개의 대상 주소를 지원해야 합니다.
미니포트는 각 대상 주소에 대한 유니캐스트 및 멀티캐스트 NS 메시지와 모두 일치해야 하므로 미니포트는 총 6 x 2 = 12 NS 메시지 패턴을 일치시킬 수 있어야 합니다.
NS 메시지 일치
NS 메시지 형식은 RFC 4861 섹션 4.3, "인접 요청 메시지 형식"에 지정됩니다. 미니포트는 다음 표의 필드와 일치해야 합니다.
| 필드 | 일치하는 값 | 노트 |
|---|---|---|
| 이더넷.EtherType | 0x86dd(IPv6) |
이더넷이 아닌 미디어 형식에 대해 필요에 따라 조정합니다. |
| IPv6.Version | 6 |
|
| IPv6.NextHeader | 58(ICMPv6) |
|
| IPv6.HopLimit | 255 |
|
| IPv6.Destination | OID.TargetIPv6Addresses[x] 또는 OID.SolicitedNodeIPv6Address |
미니포트는 이 필드의 두 옵션, OID.TargetIPv6Addresses[x] 및 OID.SolicitedNodeIPv6Address와 일치해야 합니다. 이 필드가 OID.TargetIPv6Addresses[x]인 경우, NS 메시지는 유니캐스트 메시지입니다. 이 필드가 OID.SolicitedNodeIPv6Address일 경우, NS 메시지는 멀티캐스트 메시지입니다. OID. TargetIPv6Addresses 1개 또는 2개의 주소를 포함할 수 있는 배열입니다. 주소가 2개인 경우 미니포트가 둘 다 일치해야 합니다. 두 번째 주소가 "0::0"이면 무시해야 하며 두 번째 일치 패턴을 만들지 않아야 합니다. |
| IPv6.ICMPv6.Type | 135(NS) |
|
| IPv6.ICMPv6.Code | 0 |
|
| IPv6.ICMPv6.TargetAddress | OID.TargetIPv6Addresses[x] |
OID. TargetIPv6Addresses[x] 1개 또는 2개의 주소를 포함할 수 있는 배열입니다. |
| IPv6.Source | OID.RemoteIPv6Address |
OID.RemoteIPv6Address가 "0::0"인 경우, 이 필드는 무시되어야 합니다. |
NA 메시지 보내기
NS 메시지를 받으면 디바이스 펌웨어는 체크섬 유효성 검사를 포함하여 rfC 4861 섹션 7.1에서 호출된 유효성 검사 단계를 수행해야 합니다. 들어오는 NS 메시지가 모든 유효성 검사를 통과하면 NA 메시지가 생성되어 회신으로 전송되어야 합니다. 해당 형식은 RFC 4861 섹션 4.4, "인접 광고 메시지 형식"에 지정됩니다. 미니포트는 다음 표의 필드를 설정해야 합니다.
| 필드 | 값 | 노트 |
|---|---|---|
| Ethernet.Destination | 이더넷.소스 | NS 프레임에서 이 값을 복사합니다. 이더넷이 아닌 미디어 형식에 대해 필요에 따라 조정합니다. |
| 이더넷.소스 | 미니포트의 현재 MAC 주소 |
|
| IPv6.HopLimit | 255 |
|
| IPv6.Source | IPv6.ICMPv6.TargetAddress | NS 프레임에서 이 값을 복사합니다. |
| IPv6.Destination | IPv6.Source | IPv6.Source 값이 "0::0"이 아니면 NS 프레임에서 이 값을 복사합니다. IPv6.Source 값이 "0::0"인 경우 이 필드를 "FF02::1"로 설정합니다. |
| IPv6.ICMPv6.Type | 136(없음) |
|
| IPv6.ICMPv6.Code | 0 |
|
| IPv6.ICMPv6.RouterFlag | 0 |
|
| IPv6.ICMPv6.SolicitedFlag | 0 |
NS 프레임의 IPv6.Source 값이 "0::0"인 경우 이 필드를 1로 설정합니다. |
| IPv6.ICMPv6.OverrideFlag | 1 |
|
| IPv6.ICMPv6.TargetAddress | IPv6.ICMPv6.TargetAddress | NS 프레임에서 이 값을 복사합니다. |
| IPv6.ICMPv6.TLLAOption.Type | 2(대상 링크 계층 주소) |
|
| IPv6.ICMPv6.TLLAOption.Length | 1 |
|
| IPv6.ICMPv6.TLLAOption.LinkLayerAddress | OID.MacAddress |