共用方式為


存取 TCP/IP 卸載 NET_BUFFER_LIST 資訊

NDIS 6.0 版和後續版本在 NetBufferListInfo 成員中提供 TCP/IP 卸載頻外(OOB)數據,該成員屬於 NET_BUFFER_LIST 結構,指定了 NET_BUFFER 結構的連結清單。 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
指定用於將 IPsec 相關任務從 TCP/IP 通訊協定卸載到迷你埠驅動程式的因特網通訊協定安全性 (IPsec) 卸載資訊。 當您指定 IPsecOffloadV1NetBufferListInfo時,NET_BUFFER_LIST_INFO會傳回 NDIS_IPSEC_OFFLOAD_V1_NET_BUFFER_LIST_INFO 結構。

TcpLargeSendNetBufferListInfo
指定用於將大型 TCP 封包的分段任務從 TCP/IP 協議卸載至微型端口驅動程序的信息。 當您指定 TcpLargeSendNetBufferListInfo時,NET_BUFFER_LIST_INFO會傳回 NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO 結構(而非結構的指標)。 此結構包含聯集,可讓資訊以單一 PVOID 值或位字段的形式存取。

Ieee8021Q網路緩衝列表資訊
指定封包中 802.1Q 的資訊。 當您指定 Ieee8021QNetBufferListInfo時,NET_BUFFER_LIST_INFO 會傳回 Value 成員,此成員屬於 NDIS_NET_BUFFER_LIST_8021Q_INFO 結構。 此結構可以指定 802.1p 優先順序和虛擬 LAN (VLAN) 識別碼資訊。 802.1p 優先順序資訊可用來在共享媒體 802 網路中建立封包優先順序。

如果迷你埠驅動程式報告支援 NDIS_ENCAPSULATION_IEEE_802_3_P_AND_Q_IN_OOB 封裝,它必須將 Ieee8021QNetBufferListInfo 數據插入大型傳送卸載第 1 版(LSOV1)和大型傳送卸載第 2 版(LSOV2)乙太網路封包。

TcpOffloadBytesTransferred
指定在 TCP 卸載機制的傳送、接收或中斷連線操作中傳輸的數據位元組數。

TcpReceiveNoPush
指定一個布林值,用來表示 TCP chimney offload 在接收請求時的推送模式。 如果 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 成員會指定 TCP 標頭的位置,讓迷你埠驅動程式不需要剖析 IP 標頭、IP 選項或 IP 擴充功能標頭。

支援 LSOV2 和 LSOV1 的 NDIS 6.0 和往後版本的迷你端口驅動程式必須檢查 類型 成員 NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO,以確定驅動程式堆疊正在使用 LSOV2 還是 LSOV1,然後執行相應的卸載作業。

針對 LSOv1,在迷你埠驅動程式完成傳送大型 TCP 封包之前,它會使用 LSO 將該封包分割成較小的封包,然後將其在這些區隔封包中傳送的 TCP 承載位元組數寫入 TcpPayload NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO 的成員中。

如果迷你埠驅動程式在其功能中指定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 資料。