TCP_OFFLOAD_STATE_DELEGATED結構 (ndischimney.h)
[TCP chimney 卸除功能已被取代,不應使用。]
TCP_OFFLOAD_STATE_DELEGATED 結構包含 TCP 連線狀態物件的委派變數。
語法
typedef struct _TCP_OFFLOAD_STATE_DELEGATED {
OFFLOAD_STATE_HEADER Header;
TCP_OFFLOAD_CONNECTION_STATE State;
USHORT Flags;
ULONG RcvNxt;
ULONG RcvWnd;
ULONG SndUna;
ULONG SndNxt;
ULONG SndMax;
ULONG SndWnd;
ULONG MaxSndWnd;
ULONG SendWL1;
ULONG CWnd;
ULONG SsThresh;
USHORT SRtt;
USHORT RttVar;
ULONG TsRecent;
ULONG TsRecentAge;
ULONG TsTime;
ULONG TotalRT;
UCHAR DupAckCount;
UCHAR SndWndProbeCount;
struct {
UCHAR ProbeCount;
ULONG TimeoutDelta;
} KeepAlive;
struct {
UCHAR Count;
ULONG TimeoutDelta;
} Retransmit;
union {
struct {
PNET_BUFFER_LIST SendDataHead;
PNET_BUFFER_LIST SendDataTail;
};
ULONG SendBacklogSize;
};
union {
PNET_BUFFER_LIST BufferedData;
ULONG ReceiveBacklogSize;
};
ULONG DWnd;
} TCP_OFFLOAD_STATE_DELEGATED, *PTCP_OFFLOAD_STATE_DELEGATED;
成員
Header
OFFLOAD_STATE_HEADER 結構。 NDIS 會將 Header 的 Length 成員設定為TCP_OFFLOAD_STATE_DELEGATED結構的大小,以位元組為單位。 Header 的 RecognizedOptions 成員是保留的。
State
TCP 連線的目前狀態 (請參閱 RFC 793) 作為下列其中一個TCP_OFFLOAD_CONNECTION_STATE值:
TcpConnectionClosed
沒有連線狀態。
TcpConnectionListen
等候來自任何遠端 TCP 和埠的連線要求。
TcpConnectionSynSent
在傳送連線要求之後等候相符的連接要求。
TcpConnectionSynRcvd
在收到並傳送連線要求之後,等候確認連線要求通知。
TcpConnectionEstablished
開啟的連線:接收的數據可以傳遞給使用者。 連線資料傳輸階段的正常狀態。
TcpConnectionFinWait1
等候遠端 TCP 的連線終止要求,或確認先前傳送的連線終止要求。
TcpConnectionFinWait2
等候遠端 TCP 的連線終止要求。
TcpConnectionCloseWait
等候本機用戶的連線終止要求。
TcpConnectionClosing
等候遠端 TCP 的連線終止要求通知。
TcpConnectionLastAck
等候先前傳送至遠端 TCP 之連線終止要求的通知,其中包含其連線終止要求的通知。
TcpConnectionTimeWait
等候足夠的時間傳遞,以確保遠端 TCP 收到其連線終止要求的通知。
請注意,當聯機處於 TcpConnectionClosed、 TcpConnectionListen、TcpConnectionSynRcvd 以外的任何狀態時,主機堆棧可以卸除 TCP 連線。
TcpConnectionSynSent 或 TcpConnectionTimeWait 狀態。 無論連線狀態為何,主機堆疊都可以查詢、更新、失效或終止 TCP 連線。
Flags
保留供系統使用。
RcvNxt
下一個接收區段的序號 (請參閱 RCV。RFC 793 中的 NEXT) 。
RcvWnd
接收視窗大小,以位元組為單位 (請參閱 RCV。RFC 793 中的 WND) 。
SndUna
(請參閱 SND 的第一個未認可數據位元組的序號。RFC 793 中的 UNA) 。 如需詳細資訊,請參閱 傳送包含要重新傳輸之數據的數據。
SndNxt
下一個字節在連線上傳送的序號 (請參閱 SND。RFC 793 中的 NXT) 。 如需詳細資訊,請參閱 傳送包含要重新傳輸之數據的數據。
SndMax
線上上已傳送的最大序號。 如需詳細資訊,請參閱 傳送包含要重新傳輸之數據的數據。
SndWnd
傳送視窗大小,以位元組為單位 (請參閱SND。RFC 793 中的 WND) 。
MaxSndWnd
傳送視窗大小上限,以位元組為單位, (請參閱 RFC 813) 。
SendWL1
用於最後一個視窗更新的區段序號 (請參閱 SND。RFC 793 中的 WL1) 。
CWnd
壅塞視窗大小,以位元組為單位 (請參閱 RFC 2581) 中的 cwnd。
SsThresh
緩慢的開始閾值,以位元組為單位, (RFC 2581) 中看到 ssthresh。
SRtt
以時鐘刻度為單位的平滑來回時間 (請參閱 RFC 793 和 2988) 中的 SRTT。 根據每個連線維護,因為它會考慮路徑、主機和有時應用程式行為。
RttVar
以時鐘刻度為單位的來回時間變化 (請參閱 RFC 2988) 中的 RTTVAR。
TsRecent
在下一個 ACK 中傳送的時間戳值 (請參閱 TS。RFC 1323)
TsRecentAge
自收到最新的時間戳以來,時鐘刻度的時間長度 (請參閱 RFC 1323) 。
TsTime
調整時間戳的目前值。
TotalRT
已重新傳輸目前 TCP 區段的總時間,以時鐘刻度為單位。
DupAckCount
已接受相同序號的 ACK 數目, (請參閱 RFC 1323) 。
SndWndProbeCount
目前的傳送視窗探查會四捨五入。 如需傳送視窗探查回合的描述,請參閱 保存定時器。
KeepAlive
這個成員是由下列成員組成的聯集:
KeepAlive.ProbeCount
尚未收到回應的持續探查數目, (請參閱 RFC 1122) 。
KeepAlive.TimeoutDelta
在時鐘刻度中剩餘的時間,直到下一個持續逾時 (請參閱 RFC 1122) 。 請注意,卸除 TCP 連線之後緊接的 -1 值表示在卸除連線時,保留定時器未執行。 如果卸除目標的保留定時器未執行,當回應 MiniportQueryOffload 函式或 MiniportTerminateOffload 函式的呼叫時,卸除目標應該會在此成員中傳回 -1。
Retransmit
這個成員是由下列成員組成的聯集:
Retransmit.Count
(傳送的重新傳輸數目,請參閱 RFC 2581) 。
Retransmit.TimeoutDelta
時間,以時鐘刻度為單位,剩餘到下一次重新傳輸逾時 (請參閱 RFC 2581) 。 請注意,卸除 TCP 連線之後緊接的 -1 值表示重新傳輸定時器在卸除連線時未執行。 重新傳輸定時器未執行,因為連接卸除時沒有未處理的傳送數據。 如果卸除目標的重新傳輸定時器未執行,卸除目標應該會在回應 MiniportQueryOffload 函式或 MiniportTerminateOffload 函式的呼叫時,在此成員中傳回 -1。
SendDataHead
NET_BUFFER_LIST 結構的指標。 這個NET_BUFFER_LIST結構位於 NetBufferListChain 成員所指向的連結清單中 緊接在TCP_OFFLOAD_STATE_DELEGATED 結構前面的NDIS_MINIPORT_OFFLOAD_BLOCK_LIST結構。 如果 NetBufferListChain 指標為 NULL,SendDataHead 並不重要。
SendDataHead 指標指向第一個NET_BUFFER_LIST結構,其NET_BUFFER結構已緩衝處理與其相關聯的傳送數據。
此變數僅用於起始卸除或終止卸除作業。 如需如何使用這個變數的詳細資訊,請參閱 在卸載作業期間和卸除作業之後處理未 處理傳送的數據,以及在 終止卸載作業期間處理未處理傳送的數據。
SendDataTail
NET_BUFFER_LIST 結構的指標。 這個NET_BUFFER_LIST結構位於鏈接清單中,由緊接在TCP_OFFLOAD_STATE_DELEGATED結構之前之NDIS_MINIPORT_OFFLOAD_BLOCK_LIST結構的 NetBufferListChain 成員所指向。 如果 NetBufferListChain 指標為 NULL,SendDataTail 並不重要。
SendDataTail 指標指向最後一個NET_BUFFER_LIST結構,其NET_BUFFER結構已緩衝處理與其相關聯的傳送數據。
此變數僅用於起始卸除或終止卸除作業。 如需如何使用此變數的詳細資訊,請參閱 在卸載作業期間和卸載作業之後處理未 處理 傳送的數據,以及在終止卸載作業期間處理未處理傳送的數據
SendBacklogSize
卸除目標會指定這個值,指出主機堆疊在卸除目標上應具有未處理的數據位元組數目,以獲得最佳效能。 (這是傳送至卸除目標但尚未由卸除目標完成的傳送位元組數目。) 卸除目標用來計算傳送待辦專案大小的特定變數和演算法是實作特定的。 傳送待辦專案大小可以是連線、介面頻寬和其他參數 (RTT) 往返時間的函式。 例如,卸除目標可以使用頻寬/延遲產品下限和公告的接收視窗。 不過請注意,傳送待辦專案大小不會根據目前在連線上傳送的數據位元組數目而有所不同。
主機堆疊可以查詢連線的 TCP 委派狀態,以取得傳送待辦專案大小。 此外,卸除目標可以藉由呼叫 來指出傳送待處理專案大小的變更 NdisTcpOffloadEventHandler 函 式。
如果卸除目標不支援傳送待辦專案大小功能,則必須在查詢連線的 TCP 委派狀態時,將0xFFFFFFFF的值寫入 SendBacklogSize 。 SendBacklogSize 變數不會用於終止卸載作業中。
BufferedData
緩衝接收數據的指標。 卸除 TCP 連線時,主機堆疊可以將這類數據傳遞至卸除目標。 (如需詳細資訊,請參閱 在卸除作業期間和卸除作業之後處理緩衝接收數據。) 卸除目標可以在上傳 TCP 連線時將這類數據傳遞至主機堆疊。 (如需詳細資訊,請參閱 在終止卸除作業期間處理緩衝接收數據。)
ReceiveBacklogSize
卸除目標會指定這個值,以指出卸除 TCP 連線卸除目標中緩衝的接收數據位元組數目。 主機堆疊可以查詢 TCP 委派狀態,以取得此值。 主機堆疊會使用此值,在聯機上張貼一或多個接收要求,這些要求足以保存所有緩衝的數據。
如果卸除目標不支援接收待辦專案大小功能,它應該將 0xFFFFFFFF 的值寫入 ReceiveBacklogSize 。
DWnd
備註
當主機堆疊將這些變數卸除至卸除目標時,主機堆疊會提供 TCP 委派變數的初始值。 卸除之後,TCP 委派的變數是由卸除目標所擁有和維護。 只有卸除目標可以變更卸除 TCP 委派變數的值。 卸除目標不會通知主機堆疊卸除 TCP 委派變數值的變更。 不過,主機堆疊可以查詢卸除 TCP 委派變數的值,這會導致 NDIS 呼叫卸除目標的 MiniportQueryOffload 函式。 當主機堆疊終止 TCP 連線狀態物件的卸載時,造成 NDIS 呼叫卸除目標的 MiniportTerminateOffload 函式,卸除目標會將終止 TCP 連線狀態物件中的 TCP 委派變數值傳回主機堆棧。
傳遞至卸除目標時,TCP_OFFLOAD_STATE_DELEGATED結構會與 相關聯 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 結構,其中包含格式化為 NDIS_OBJECT_HEADER 結構的標頭。 在此情況下,NDIS_OBJECT_HEADER結構的 Revision 成員會指定TCP_OFFLOAD_STATE_DELEGATED結構的修訂編號。
規格需求
需求 | 值 |
---|---|
標頭 | ndischimney.h (包括 Ndischimney.h) |