Share via


체크섬 오프로드에서 NVGRE 지원

NDIS 6.30(Windows Server 2012)은 NVGRE(일반 라우팅 캡슐화)를 사용하여 네트워크 가상화를 도입했습니다. 체크섬 작업을 오프로드하는 NDIS 미니포트, 프로토콜 및 필터 드라이버 및 NIC는 NVGRE를 지원하는 방식으로 수행해야 합니다.

참고 이 페이지에서는 체크섬 작업 오프로드의 정보를 잘 알고 있다고 가정합니다.

NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO 경우. IsEncapsulatedPacketTRUE이고 TcpIpChecksumNetBufferListInfo OOB(out-of-band) 정보가 유효합니다. 이는 NVGRE 지원이 필요하고 NIC가 터널(외부) IP 헤더, 전송(내부) IP 헤더 및 TCP 또는 UDP 헤더에 대한 체크섬을 계산해야 했음을 나타냅니다.

NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO 구조의 IsIPv4IsIPv6 플래그는 터널(외부) IP 헤더의 IP 헤더 버전을 나타냅니다. NIC는 전송(내부) IP 헤더를 구문 분석하여 해당 헤더의 IP 버전을 확인해야 합니다. 혼합 모드 패킷이 허용되기 때문에( NDIS_ENCAPSULATED_PACKET_TASK_OFFLOAD 참조) NIC는 내부 및 외부 IP 헤더에 동일한 IP 헤더 버전이 있다고 가정해서는 안 됩니다.

NIC 및 미니포트 드라이버는 NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO 구조에 제공된 InnerFrameOffset, TransportIpHeaderRelativeOffsetTcpHeaderRelativeOffset 값을 사용할 수 있습니다. NIC 또는 미니포트 드라이버는 터널(외부) IP 헤더 또는 후속 헤더에서 필요한 헤더 검사를 수행하여 이러한 오프셋의 유효성을 검사할 수 있습니다.

NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO. IsEncapsulatedPacket은 TRUE이고, 기존 헤더 오프셋 필드는 NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO. LsoV2Transmit.TcpHeaderOffsetNDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO. 전송. TcpHeaderOffset은 올바른 값을 갖지 않으며 NIC 또는 드라이버에서 사용해서는 안 됩니다.

미니포트 드라이버는 NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO 경우를 처리해야 합니다. InnerFrameOffset 은 패킷의 시작 부분과 다른 분산형 수집 목록에 있을 수 있습니다. 프로토콜 드라이버는 앞에 추가된 모든 캡슐화 헤더(ETH, IP, GRE)가 물리적으로 연속되고 패킷의 첫 번째 MDL에 포함되도록 보장합니다.

체크섬 유효성 검사

NVGRE에 대한 체크섬 유효성 검사는 대부분 그렇지 않은 경우와 동일합니다.

미니포트가 OID_TCP_OFFLOAD_PARAMETERS OID 요청을 수신하고 NDIS_ENCAPSULATION_TYPE_GRE_MAC 성공하는 경우( NDIS_OFFLOAD_PARAMETERS 참조) NIC는 터널(외부) IP 헤더, 전송(내부) IP 헤더 및 TCP 또는 UDP 헤더에서 체크섬 유효성 검사를 수행해야 합니다.

IPv4 터널(외부) 헤더와 IPv4 전송(내부) 헤더가 있는 캡슐화된 패킷의 경우 미니포트 드라이버는 두 IP 헤더 체크섬 유효성 검사가 성공한 경우에만 NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO 구조에서 IpChecksumSucceeded 플래그를 설정해야 합니다. 터널(외부) IPv4 헤더와 전송(내부) IPv4 헤더가 모두 포함된 캡슐화된 패킷의 경우 IP 헤더 체크섬 유효성 검사에 실패한 경우 미니포트 드라이버는 IpChecksumFailed 플래그를 설정해야 합니다.