수신 경로에서 캡슐화된 패킷에 대한 전송 헤더 찾기
패킷을 수신할 때 NVGRE(제네릭 라우팅 캡슐화) 사용하여 네트워크 가상화를 지원하는 NIC는 먼저 패킷이 캡슐화되었는지 여부와 캡슐화 유형이 결정되어야 합니다.
참고 송신 경로에서NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO가IsEncapsulatedPacket이 TRUE인 경우 패킷이 캡슐화됩니다.
수신 경로에서 NIC는 IPv4 터널(외부) 헤더의 프로토콜 필드 또는 IPv6 터널(외부) 헤더의 NextHeader 필드에서 프로토콜 번호를 확인하여 패킷이 캡슐화되는지 여부를 결정해야 합니다. 할당된 프로토콜 번호 목록은 https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xml찾을 수 있습니다.
패킷이 캡슐화된 패킷으로 확인되면 NIC는 캡슐화된 패킷의 프로토콜을 구문 분석하여 전송(내부) IP 헤더에 대한 오프셋을 결정해야 합니다.
NDIS 6.30(Windows Server 2012) 이상에서는 GRE IP 캡슐화만 지원됩니다. 따라서 NIC는 명시된 기능에 따라 다음을 해석할 수 있어야 합니다.
- GRE(RFC 2784: GRE(일반 라우팅 캡슐화)) 헤더
- RFC 2890: GRE에 대한 키 및 시퀀스 번호 확장
- IPv4(RFC 791: 인터넷 프로토콜) 헤더
- IPv6(RFC 2460: 인터넷 프로토콜, 버전 6(IPv6)) 헤더
NIC가 알 수 없거나 지원되지 않는 캡슐화 프로토콜을 찾은 경우 변경되지 않은 패킷을 호스트 스택에 전달해야 합니다.
따라서 수신 경로에서 미니포트는 전송(내부) IP 헤더를 구문 분석하여 IP 버전을 확인하고 TCP 또는 UDP 헤더로 이동해야 합니다. 이는 NDIS 6.30(Windows Server 2012) 이상에 대한 새로운 요구 사항입니다.