UDP 구분 오프로드에서 NVGRE 지원(USO)
NDIS 6.85에서는 UDP 구분 오프로드(USO )와 함께 NVGRE(일반 라우팅 캡슐화)를 사용하는 네트워크 가상화를 도입했습니다. NDIS 미니포트, 프로토콜 및 필터 드라이버와 USO를 수행하는 NIC는 NVGRE 및 VXLAN 캡슐화를 지원해야 합니다.
참고: 이 문서에서는 UDP 구분 오프로드(USO)의 정보를 잘 알고 있다고 가정합니다.
NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO 경우. IsEncapsulatedPacket은 TRUE이고 UdpSegmentationOffloadInfo OOB(out-of-band) 정보는 유효하며 NVGRE 및 VXLAN 지원이 필요합니다. NIC는 다음 조건으로 NVGRE/VXLAN 캡슐화된 패킷에서 USO 오프로드를 수행해야 합니다.
- NDIS_UDP_SEGMENTATION_OFFLOAD_NET_BUFFER_LIST_INFO. 전송. UdpHeaderOffset 멤버에는 올바른 오프셋 값이 없으며 NIC 또는 미니포트 드라이버에서 사용해서는 안 됩니다.
USO에서 NVGRE를 지원하려면 프로토콜 및 필터 드라이버가 다음을 수행해야 합니다.
- 캡슐화 헤더를 고려하도록 NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO 구조에서 InnerFrameOffset, TransportIpHeaderRelativeOffset 및 TcpHeaderRelativeOffset 값을 조정합니다. TcpHeaderRelativeOffset은 UDP 헤더를 참조합니다.
NIC 및 미니포트 드라이버는 NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO 구조에 제공된 InnerFrameOffset, TransportIpHeaderRelativeOffset 및 TcpHeaderRelativeOffset 값을 사용할 수 있습니다. NIC 또는 미니포트 드라이버는 터널(외부) IP 헤더 또는 후속 헤더에서 필요한 헤더 검사를 수행하여 이러한 오프셋의 유효성을 검사할 수 있습니다.
미니포트 드라이버는 NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO 경우를 처리해야 합니다. InnerFrameOffset 은 패킷의 시작 부분과 다른 분산형 수집 목록에 있을 수 있습니다. 프로토콜 드라이버는 앞에 추가된 모든 캡슐화 헤더(ETH, IP, GRE/VXLAN)가 물리적으로 연속되고 패킷의 첫 번째 MDL에 포함되도록 보장합니다.
프로토콜 및 필터 드라이버는 UdpSegmentation.SubMssFinalSegmentSupported가 NDIS_OFFLOAD 기능에 설정된 경우 총 UDP 페이로드 길이가 감소된 MSS 값의 정확한 배수인지 보장하지 않습니다. 이러한 이유로 SubMssFinalSegmentSupported 를 사용하는 미니포트 드라이버 및 NIC는 터널(외부) IP 헤더를 업데이트해야 합니다. NIC는 NDIS_UDP_SEGMENTATION_OFFLOAD_NET_BUFFER_LIST_INFO 축소된 MSS 값에 따라 가능한 한 많은 전체 크기의 세그먼트를 생성해야 합니다. 전송 OOB 정보입니다. LSOv2 전송당 하나의 하위 MSS 세그먼트만 생성될 수 있습니다.
미니포트 드라이버는 다음을 수행해야 합니다.
- 터널(외부) IP 헤더에 대한 체크섬을 계산합니다.
- 모든 패킷에 대해 터널(외부) IP 헤더의 IP ID(IP ID) 값을 증분합니다. 첫 번째 패킷은 원래 터널(외부) IP 헤더에서 IP ID를 사용해야 합니다.
- 모든 패킷에 대한 전송(내부) IP 헤더의 IP ID를 증분합니다. 첫 번째 패킷은 원래 전송(내부) IP 헤더에서 IP ID를 사용해야 합니다.
- UDP 헤더 및 전송(내부) IP 헤더에 대한 체크섬을 계산합니다.
- 캡슐화 터널(외부) 헤더를 포함한 전체 헤더가 생성된 모든 패킷에 추가되었는지 확인합니다.