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 将 标头长度 成员设置为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 收到其连接终止请求的确认。
请注意,当连接处于除 tcpConnectionClosed 、tcpConnectionListen tcpConnectionListen、TcpConnectionSynRcvd之外,主机堆栈可以卸载 TCP 连接。
TcpConnectionSynSent或 TcpConnectionTimeWait 状态。 无论连接状态如何,主机堆栈都可以查询、更新、失效或终止 TCP 连接。
Flags
保留供系统使用。
RcvNxt
下一个接收段的序列号(请参阅 RCV。下一步在 RFC 793 中)。
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结构位于NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构的 NetBufferListChain 成员指向的链接列表中,该成员紧邻TCP_OFFLOAD_STATE_DELEGATED结构。 如果 NetBufferListChain 指针 NULL,则 SendDataTail 并不重要。
SendDataTail 指针指向最后一个NET_BUFFER_LIST结构,其NET_BUFFER结构已缓冲与其关联的发送数据。
此变量仅在启动卸载或终止卸载作中使用。 有关如何使用此变量的详细信息,请参阅 处理卸载作期间和卸载作 之后处理未完成的发送数据,在终止卸载作期间处理未完成的发送数据
SendBacklogSize
卸载目标指定此值,以指示主机堆栈在卸载目标上应具有未完成的数据字节数,以实现最佳性能。 (这是已传递到卸载目标的发送字节数,但尚未由卸载目标完成)。卸载目标用于计算发送积压工作大小的特定变量和算法特定于实现。 发送积压工作大小可以是连接、接口带宽和其他参数往返时间(RTT)的函数。 例如,卸载目标可以使用最小带宽/延迟产品和播发的接收窗口。 但是,请注意,发送积压工作大小不会因当前在连接上传输而发布的数据字节数而有所不同。
主机堆栈可以查询 TCP 委托状态,以获取发送积压工作大小。 此外,卸载目标还可以通过调用
如果卸载目标不支持发送积压工作大小功能,则必须在查询连接的 TCP 委托状态时,将 0xFFFFFFFF 的值写入 SendBacklogSize。 终止卸载作中不使用 SendBacklogSize 变量。
BufferedData
指向缓冲接收数据的指针。 卸载 TCP 连接时,主机堆栈可以将此类数据传递到卸载目标。 (有关详细信息,请参阅 处理卸载作期间和之后的缓冲接收数据。卸载目标可以在上传 TCP 连接时将此类数据传递到主机堆栈。 (有关详细信息,请参阅在终止卸载作 期间处理缓冲接收数据。
ReceiveBacklogSize
卸载目标指定此值以指示卸载 TCP 连接的卸载目标中缓冲的接收数据字节数。 主机堆栈可以查询连接的 TCP 委托状态以获取此值。 主机堆栈使用此值在足以容纳所有缓冲数据的连接上发布一个或多个接收请求。
如果卸载目标不支持接收积压工作大小功能,则应将值写入 0xFFFFFFFF 以 ReceiveBacklogSize。
DWnd
言论
主机堆栈在将这些变量卸载到卸载目标时为 TCP 委托变量提供初始值。 卸载后,TCP 委托变量由卸载目标拥有和维护。 只有卸载目标可以更改卸载的 TCP 委托变量的值。 卸载目标不会通知主机堆栈对卸载的 TCP 委托变量的值所做的更改。 但是,主机堆栈可以查询卸载的 TCP 委托变量的值,这会导致 NDIS 调用卸载目标的 MiniportQueryOffload 函数。 当主机堆栈通过导致 NDIS 调用卸载目标的 TCP 连接状态对象终止卸载时 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) |