NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO 구조체(ndis/nblchecksum.h)

NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO 구조는 TCP/IP 전송에서 NIC로 체크섬 작업을 오프로드하는 데 사용되는 정보를 지정합니다. NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO 구조는 NET_BUFFER_LIST 구조와 연결된 NET_BUFFER_LIST 정보(대역 외 데이터)의 일부입니다.

구문

typedef struct _NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO {
  union {
    struct {
      ULONG IsIPv4 : 1;
      ULONG IsIPv6 : 1;
      ULONG TcpChecksum : 1;
      ULONG UdpChecksum : 1;
      ULONG IpHeaderChecksum : 1;
      ULONG Reserved : 11;
      ULONG TcpHeaderOffset : 10;
    } Transmit;
    struct {
      ULONG TcpChecksumFailed : 1;
      ULONG UdpChecksumFailed : 1;
      ULONG IpChecksumFailed : 1;
      ULONG TcpChecksumSucceeded : 1;
      ULONG UdpChecksumSucceeded : 1;
      ULONG IpChecksumSucceeded : 1;
      ULONG Loopback : 1;
      ULONG TcpChecksumValueInvalid : 1;
      ULONG IpChecksumValueInvalid : 1;
    } Receive;
    PVOID Value;
  };
} NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO, *PNDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO;

멤버

Transmit

다음 멤버를 포함하는 구조체입니다.

Transmit.IsIPv4

전송 패킷에 IPv4 주소가 포함되어 있음을 나타내기 위해 TCP/IP 전송에 의해 설정됩니다.

Transmit.IsIPv6

전송 패킷에 IPv6 주소가 포함되어 있음을 나타내기 위해 TCP/IP 전송에 의해 설정됩니다.

Transmit.TcpChecksum

TCP/IP 전송에 의해 설정되어 NIC가 패킷의 TCP 체크섬을 계산해야 함을 나타냅니다.

Transmit.UdpChecksum

TCP/IP 전송에 의해 설정되어 NIC가 패킷의 UDP 체크섬을 계산해야 함을 나타냅니다.

Transmit.IpHeaderChecksum

TCP/IP 전송에 의해 설정되어 NIC가 패킷의 첫 번째 IP 헤더에 대한 IP 체크섬을 계산해야 함을 나타냅니다. 패킷에 터널 IP 헤더와 전송 IP 헤더가 모두 포함된 경우 NIC는 두 IP 헤더에 대한 체크섬을 계산해야 합니다.

Transmit.Reserved

NDIS용으로 예약되었습니다.

Transmit.TcpHeaderOffset

TCP 패킷에 대한 패킷 시작부터 TCP 헤더의 오프셋(바이트)입니다. 미니포트 드라이버는 TcpHeaderOffset 을 사용하여 MAC 및 IP 헤더를 구문 분석할 필요가 없도록 TCP 헤더의 위치를 확인할 수 있습니다.

Receive

다음 멤버를 포함하는 구조체입니다.

Receive.TcpChecksumFailed

미니포트 드라이버가 NIC에서 계산한 TCP 체크섬이 수신 패킷의 TCP 헤더에 있는 체크섬과 일치하지 않음을 나타내도록 설정합니다.

Receive.UdpChecksumFailed

미니포트 드라이버가 NIC에서 계산한 UDP 체크섬이 수신 패킷의 UDP 헤더에 있는 체크섬과 일치하지 않음을 나타내도록 설정합니다.

Receive.IpChecksumFailed

미니포트 드라이버가 NIC에서 계산한 IP 체크섬이 수신 패킷의 첫 번째 IP 헤더의 체크섬과 일치하지 않음을 나타내도록 설정합니다. 수신 패킷에 터널 IP 헤더와 전송 IP 헤더가 모두 포함된 경우 NIC는 두 IP 헤더에 대한 체크섬의 유효성을 검사합니다.

참고 터널(외부) IPv4 헤더와 전송(내부) IPv4 헤더가 모두 포함된 캡슐화된 패킷의 경우 IP 헤더 체크섬 유효성 검사 중 하나가 실패한 경우 미니포트 드라이버는 이 플래그를 설정해야 합니다.
 

Receive.TcpChecksumSucceeded

미니포트 드라이버가 NIC에서 계산한 TCP 체크섬이 수신 패킷의 TCP 헤더에 있는 체크섬과 일치함을 나타내도록 설정합니다.

Receive.UdpChecksumSucceeded

미니포트 드라이버가 NIC에서 계산한 UDP 체크섬이 수신 패킷의 UDP 헤더에 있는 체크섬과 일치함을 나타내도록 설정합니다.

Receive.IpChecksumSucceeded

미니포트 드라이버가 NIC에서 계산한 IP 체크섬이 수신 패킷의 첫 번째 IP 헤더에 있는 체크섬과 일치함을 나타내도록 설정합니다. 수신 패킷에 터널 IP 헤더와 전송 IP 헤더가 모두 포함된 경우 NIC는 두 IP 헤더에 대한 체크섬의 유효성을 검사합니다.

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

Receive.Loopback

NDIS는 이 비트를 사용합니다. 미니포트 드라이버는 이 비트를 검사하거나 설정해서는 안됩니다. 미니포트 드라이버는 이 비트를 무시하면 됩니다.

Receive.TcpChecksumValueInvalid

RSC(수신 세그먼트 병합)를 지원하는 미니포트 드라이버는 TCP 헤더 체크섬이 NIC에 의해 유효성을 검사했지만 패킷의 TCP 헤더 체크섬 값이 유효하지 않음을 나타내도록 이 플래그를 설정합니다. 자세한 내용은 병합된 세그먼트 표시를 참조하세요.

RSC를 지원하지 않는 미니포트 드라이버는 이 플래그를 0으로 설정해야 합니다.

참고 이 플래그는 Windows 8, Windows Server 2012 이상에서 NDIS 6.30 이상 미니포트 드라이버에서 지원됩니다.
 

Receive.IpChecksumValueInvalid

RSC를 지원하는 미니포트 드라이버는 IPv4 패킷의 경우 IP 헤더 체크섬이 NIC에 의해 유효성을 검사했지만 패킷의 IP 헤더 체크섬 값이 유효하지 않음을 나타내도록 이 플래그를 설정합니다. 터널 및 전송 IP 헤더로 구성된 패킷의 경우 이 비트는 터널 IP 헤더에만 적용됩니다. 자세한 내용은 병합된 세그먼트 표시를 참조하세요.

RSC를 지원하지 않는 미니포트 드라이버는 이 플래그를 0으로 설정해야 합니다.

참고 이 플래그는 Windows 8, Windows Server 2012 이상에서 NDIS 6.30 이상 미니포트 드라이버에서 지원됩니다.
 

Value

체크섬 정보의 PVOID 버전입니다. 미니포트 드라이버는 이 멤버를 사용하여 특정 필드 대신 원시 정보에 액세스할 수 있습니다.

설명

NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO 구조는 TCP/IP 전송에서 NIC로 체크섬 작업을 오프로드하는 데 사용되는 정보를 지정합니다. NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO 구조는 NET_BUFFER_LIST 구조와 연결된 NET_BUFFER_LIST 정보(대역 외 데이터)의 일부입니다.

TCP/IP 전송이 미니포트 드라이버에 체크섬 작업을 수행할 TCP/IP 패킷을 미니포트 드라이버에 전달하기 전에 TCP/IP 전송은 NET_BUFFER_LIST 구조와 연결된 NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO 구조를 업데이트합니다. 특히 TCP/IP 전송은 전송 패킷이 IPv4 또는 IPv6 패킷임을 나타내도록 IsIPv4 또는 IsIPv6 플래그를 설정합니다.

yy TCP/IP 전송이 IsIPv4 또는 IsIPv6 플래그를 설정하지 않으면 미니포트 드라이버는 패킷에 체크섬 작업을 수행해서는 안 됩니다. TCP/IP 전송이 IsIPv4 또는 IsIPv6 플래그를 설정하는 경우 미니포트 드라이버가 패킷에 대해 계산해야 하는 체크섬을 나타내는 데 필요한 적절한 플래그도 설정합니다. IPv4의 경우 IpHeaderChecksum, TcpChecksum 또는 UdpChecksum 플래그가 포함됩니다 . IPv6의 경우 TcpChecksum 또는 UdpChecksum 플래그가 포함됩니다 . 또한 TCP 패킷의 경우 TCP/IP 전송은 IsIPv4 또는 IPv6 플래그가 설정된 경우 TcpHeaderOffset 필드를 설정합니다. 전송은 UDP 패킷에 대해 이 필드를 설정하지 않습니다.

체크섬 작업을 수행하는 수신 TCP/IP 패킷을 표시하기 전에 미니포트 드라이버는 NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO 구조에서 적절한 XxxChecksumFailed 또는 XxxChecksumSucceeded 플래그를 설정합니다.

참고 미니포트가 OID_OFFLOAD_ENCAPSULATION 받을 때까지 체크섬 오프로드가 비활성화됩니다. 이 OID를 수신하면 미니포트가 수신된 일부 패킷에서 체크섬의 유효성 검사를 시작할 수 있습니다. 미니포트는 모든 패킷에서 체크섬의 유효성을 검사할 필요가 없습니다. XxxChecksumFailed 및 XxxChecksumSucceeded 플래그가 모두 명확하면 OS는 소프트웨어의 체크섬 유효성 검사로 대체됩니다. 이 동작은 시스템의 다른 프로토콜 드라이버에 대체 메커니즘이 없을 수 있으므로 미니포트가 모든 패킷에서 체크섬의 유효성을 검사해야 할 수 있는 WHCP 드라이버 인증 요구 사항과 독립적입니다.
 
NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO 구조를 가져오려면 드라이버가 TcpIpChecksumNetBufferListInfo의 _Id 사용하여 NET_BUFFER_LIST_INFO 매크로를 호출해야 합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 NDIS 6.0 이상에서 지원됩니다.
머리글 ndis/nblchecksum.h(ndis.h 포함)

추가 정보

병합된 세그먼트 표시

NET_BUFFER_LIST

NET_BUFFER_LIST_INFO