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
由 TCP/IP 傳輸設定,以指出傳送封包包含 IPv4 位址。
Transmit.IsIPv6
由 TCP/IP 傳輸設定,以指出傳送封包包含 IPv6 位址。
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 來判斷 TCP 標頭的位置,使其不需要剖析 MAC 和 IP 標頭。
Receive
包含下列成員的結構:
Receive.TcpChecksumFailed
由迷你埠驅動程式設定,表示 NIC 計算的 TCP 總和檢查碼不符合接收封包 TCP 標頭中的總和檢查碼。
Receive.UdpChecksumFailed
由迷你埠驅動程式設定,表示 NIC 計算的 UDP 總和檢查碼不符合接收封包 UDP 標頭中的總和檢查碼。
Receive.IpChecksumFailed
由迷你埠驅動程式設定,表示 NIC 計算的 IP 總和檢查碼不符合接收封包第一個 IP 標頭中的總和檢查碼。 如果接收封包同時包含通道IP標頭和傳輸IP標頭,NIC 會驗證這兩個IP標頭的總和檢查碼。
Receive.TcpChecksumSucceeded
由迷你埠驅動程式設定,表示 NIC 計算的 TCP 總和檢查碼符合接收封包 TCP 標頭中的總和檢查碼。
Receive.UdpChecksumSucceeded
由迷你埠驅動程式設定,表示 NIC 計算的 UDP 總和檢查碼符合接收封包 UDP 標頭中的總和檢查碼。
Receive.IpChecksumSucceeded
由迷你埠驅動程式設定,以指出 NIC 計算的 IP 總和檢查碼符合接收封包第一個 IP 標頭中的總和檢查碼。 如果接收封包同時包含通道IP標頭和傳輸IP標頭,NIC 會驗證這兩個IP標頭的總和檢查碼。
Receive.Loopback
NDIS 會使用此位。 迷你埠驅動程式不得檢查或設定此位;迷你埠驅動程序應該只會忽略這個位。
Receive.TcpChecksumValueInvalid
支援 接收區段聯合的迷你埠驅動程式 (RSC) 設定此旗標,表示 TCP 標頭總和檢查碼已由 NIC 驗證,但封包中的 TCP 標頭總和檢查碼值無效。 如需詳細資訊,請參閱 指出聯合區段。
不支援 RSC 的迷你埠驅動程式應該將此旗標設定為零。
Receive.IpChecksumValueInvalid
支援 RSC 的迷你埠驅動程式會設定此旗標,指出針對 IPv4 封包,IP 標頭總和檢查碼是由 NIC 驗證,但封包中的 IP 標頭總和檢查碼值無效。 對於包含通道和傳輸IP標頭的封包,此位僅適用於通道IP標頭。 如需詳細資訊,請參閱 指出聯合區段。
不支援 RSC 的迷你埠驅動程式應該將此旗標設定為零。
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 傳輸會設定 IsIPv4 或 IsIPv6 旗標,指出傳送封包是 IPv4 或 IPv6 封包。
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 旗標。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | NDIS 6.0 和更新版本支援。 |
標頭 | ndis/nblchecksum.h (include ndis.h) |
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應