다음을 통해 공유


TCP/IP 오프로드 NET_BUFFER_LIST 정보에 액세스

NDIS 버전 6.0 이상은 NET_BUFFER 구조체의 연결된 목록을 지정하는 NET_BUFFER_LIST 구조체의 NetBufferListInfo 멤버에 TCP/IP 오프로드 OOB(out-of-band) 데이터를 제공합니다. NetBufferListInfo 멤버는 목록의 모든 NET_BUFFER 구조에 공통적인 정보를 포함하는 값의 배열입니다.

다음 식별자를 NET_BUFFER_LIST_INFO 매크로와 함께 사용하여 NetBufferListInfo 배열에서 TCP/IP 오프로드 OOB 데이터를 설정하고 가져옵니다.

TcpIpChecksumNetBufferListInfo
TCP/IP 프로토콜에서 미니포트 드라이버로 체크섬 작업을 오프로드하는 데 사용되는 체크섬 정보를 지정합니다. TcpIpChecksumNetBufferListInfo를 지정하면 NET_BUFFER_LIST_INFO 구조체에 대한 포인터가 아닌 NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO 구조를 반환합니다. 이 구조체에는 체크섬 정보를 단일 PVOID 값 또는 비트 필드로 액세스할 수 있는 공용 구조체가 포함되어 있습니다.

IPsecOffloadV1NetBufferListInfo
TCP/IP 프로토콜에서 미니포트 드라이버로 IPsec 작업을 오프로드하는 데 사용되는 IPsec(인터넷 프로토콜 보안) 오프로드 정보를 지정합니다. IPsecOffloadV1NetBufferListInfo를 지정하면 NET_BUFFER_LIST_INFO NDIS_IPSEC_OFFLOAD_V1_NET_BUFFER_LIST_INFO 구조를 반환합니다.

TcpLargeSendNetBufferListInfo
TCP/IP 프로토콜에서 미니포트 드라이버로 큰 TCP 패킷의 분할을 오프로드하는 데 사용되는 정보를 지정합니다. TcpLargeSendNetBufferListInfo를 지정하면 NET_BUFFER_LIST_INFO 구조체에 대한 포인터가 아닌 NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO 구조를 반환합니다. 이 구조체에는 단일 PVOID 값 또는 비트 필드로 정보에 액세스할 수 있는 공용 구조체가 포함되어 있습니다.

Ieee8021QNetBufferListInfo
패킷에 대한 802.1Q 정보를 지정합니다. Ieee8021QNetBufferListInfo를 지정하면 NET_BUFFER_LIST_INFO NDIS_NET_BUFFER_LIST_8021Q_INFO 구조체의 Value 멤버를 반환합니다. 이 구조는 802.1p 우선 순위 및 VLAN(가상 LAN) 식별자 정보를 지정할 수 있습니다. 802.1p 우선 순위 정보는 공유 미디어 802 네트워크에서 패킷 우선 순위를 설정하는 데 사용됩니다.

미니포트 드라이버가 NDIS_ENCAPSULATION_IEEE_802_3_P_AND_Q_IN_OOB 캡슐화에 대한 지원을 보고하는 경우 Ieee8021QNetBufferListInfo 데이터를 LSOV1(대규모 송신 오프로드 버전 1) 및 LSOV2(대규모 송신 오프로드 버전 2) 이더넷 패킷에 삽입해야 합니다.

TcpOffloadBytesTransferred
TCP 굴뚝 오프로드 전송, 수신 또는 연결 끊기 작업에서 전송된 데이터 바이트 수를 지정합니다.

TcpReceiveNoPush
TCP 굴뚝 오프로드 수신 요청의 푸시 모드를 나타내는 부울 값을 지정합니다. TRUE이면 수신 요청이 푸시가 아닌 모드에 있습니다. 그렇지 않으면 수신 요청이 푸시 모드에 있습니다.

LSOV1, LSOV2, 체크섬 및 IPsec 오프로드 형식의 경우 미니포트 드라이버는 OOB 데이터 형식 및 보고한 오프로드 기능에 따라 작업 오프로드를 수행합니다. 예를 들어 프로토콜 드라이버에 IPv4 패킷에 대한 LSOV1 서비스가 필요한 경우 프로토콜 드라이버가 제공하는 각 송신 요청에는 NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO OOB 데이터의 LsoV1Transmit 멤버의 정보가 포함됩니다. 프로토콜 드라이버는 보내기 요청을 하기 전에 미니포트 드라이버가 지정된 캡슐화 형식의 IPv4를 지원하는지 확인해야 합니다.

NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO 구조체에는 최대 세그먼트 크기(MSS)가 포함됩니다. TcpHeaderOffset 멤버는 미니포트 드라이버가 IP 헤더, IP 옵션 또는 IP 확장 헤더를 구문 분석할 필요가 없도록 TCP 헤더의 위치를 지정합니다.

LSOV2 및 LSOV1을 지원하는 NDIS 6.0 이상 미니포트 드라이버는 NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO Type 멤버를 검사 드라이버 스택이 LSOV2 또는 LSOV1을 사용하는지 여부를 확인하고 적절한 오프로드를 수행해야 합니다.

LSOv1의 경우 미니포트 드라이버가 LSO를 사용하여 더 작은 패킷으로 분할된 큰 TCP 패킷의 전송을 완료하기 전에 드라이버는 NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO TcpPayload 멤버의 분할된 패킷에서 보낸 TCP 페이로드 바이트 수를 기록합니다.

미니포트 드라이버가 해당 기능에 NDIS_ENCAPSULATION_IEEE_802_3_P_AND_Q 플래그를 지정하는 경우 드라이버는 버퍼 데이터에 VLAN 헤더를 포함하는 NET_BUFFER_LIST 구조에 대한 태스크 오프로드 서비스를 수행할 수 있습니다. 수신된 데이터의 경우 이 플래그는 미니포트 드라이버가 수신 체크섬 계산을 수행하고 VLAN 헤더를 이더넷 패킷에 배치한다는 것을 나타냅니다.

미니포트 드라이버가 기능에서 NDIS_ENCAPSULATION_IEEE_802_3_P_AND_Q_IN_OOB 플래그를 지정하는 경우 드라이버는 Ieee8021QnetBufferListInfo OOB 데이터에 VLAN 헤더가 포함된 NET_BUFFER_LIST 구조에서 오프로드를 수행할 수 있습니다. 수신 체크섬 오프로드 사례에서 미니포트는 VLAN 헤더를 Ieee8021QnetBufferListInfo OOB 데이터에 삽입합니다.