(ndischimney.h) TCP_OFFLOAD_STATE_DELEGATED 结构
[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 结构的大小(以字节为单位)。 保留 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
已发送但未收到响应的 keepalive 探测的数量 (请参阅 RFC 1122) 。
KeepAlive.TimeoutDelta
下一个 keepalive 超时 (的剩余时间(以时钟计时周期为单位),请参阅 RFC 1122) 。 请注意,在卸载 TCP 连接后立即的值 -1 表示卸载连接时,keepalive 计时器未运行。 如果卸载目标的 keepalive 计时器未运行,则在响应对 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 函数。
如果卸载目标不支持 send-backlog-size 功能,则当查询连接的 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) |