TCP_OFFLOAD_STATE_DELEGATED結構(ndischimney.h)
[TCP 煙囪卸除功能已被取代,不應使用。]
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 結構的大小,以位元組為單位。 保留 標頭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 已收到其連線終止要求的通知。
請注意,當聯機處於任何狀態時,主機堆棧可以卸除 TCP 連線,但 TcpConnectionClosed、TcpConnectionListen、TcpConnectionSynRcvd、
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 成員所指向的連結清單中 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 結構,緊接在TCP_OFFLOAD_STATE_DELEGATED 結構之前。 如果 netBufferListChain 指標 為 NULL ,SendDataHead 並不重要。
SendDataHead 指標指向第一個NET_BUFFER_LIST結構,其NET_BUFFER結構已緩衝處理與其相關聯的傳送數據。
此變數只會用於起始卸除或終止卸除作業中。 如需如何使用此變數的詳細資訊,請參閱在卸載作業期間和卸載作業之後 處理未完成傳送資料 和 在終止卸除作業期間處理未完成傳送資料。
SendDataTail
NET_BUFFER_LIST 結構的指標。 這個NET_BUFFER_LIST結構位於NDIS_MINIPORT_OFFLOAD_BLOCK_LIST結構之 NetBufferListChain 成員所指向的連結清單中,該成員緊接在TCP_OFFLOAD_STATE_DELEGATED結構之前。 如果 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) |