TCP_OFFLOAD_STATE_CACHED 结构 (ndischimney.h)
[TCP 烟囱卸载功能已弃用,不应使用。]
TCP_OFFLOAD_STATE_CACHED 结构包含 TCP 连接状态对象的缓存变量。
语法
typedef struct _TCP_OFFLOAD_STATE_CACHED {
OFFLOAD_STATE_HEADER Header;
USHORT Flags;
ULONG InitialRcvWnd;
ULONG RcvIndicationSize;
UCHAR KaProbeCount;
ULONG KaTimeout;
ULONG KaInterval;
ULONG MaxRT;
ULONG FlowLabel : 20;
UCHAR TtlOrHopLimit;
UCHAR TosOrTrafficClass;
UCHAR UserPriority : 3;
} TCP_OFFLOAD_STATE_CACHED, *PTCP_OFFLOAD_STATE_CACHED;
成员
Header
OFFLOAD_STATE_HEADER 结构。 NDIS 将 Header 的 Length 成员设置为TCP_OFFLOAD_STATE_CACHED结构的大小(以字节为单位)。 保留 Header 的 RecognizedOptions 成员。
Flags
可设置为零或以下任意标志的位掩码,与按位 OR 结合使用:
TCP_FLAG_KEEP_ALIVE_ENABLED
主机堆栈设置此标志以在连接上启用 keepalive 选项。 主机堆栈清除此标志以禁用连接上的 keepalive 选项。 有关 keepalive 选项的详细信息,请参阅 RFC 1122。
TCP_FLAG_NAGLING_ENABLED
主机堆栈设置此标志以在连接上启用 Nagle 算法。 主机堆栈清除此标志以禁用连接上的 Nagle 算法。 有关 Nagle 算法的详细信息,请参阅 RFC 896。
TCP_FLAG_KEEP_ALIVE_RESTART
主机堆栈设置此标志,使卸载目标将其 keepalive 计时器重置为零。
TCP_FLAG_MAX_RT_RESTART
主机堆栈将此标志设置为使卸载目标将连接处于 TCP 委托状态的 TotalRT 变量重置为零。
TCP_FLAG_UPDATE_RCV_WND
主机堆栈设置此标志以指示TCP_OFFLOAD_STATE_CACHED结构 (InitialRcvWnd 的默认接收窗口大小) 已更改。 如果 InitialRcvWnd 的值不同于TCP_OFFLOAD_STATE_DELEGATED结构) 中卸载目标的当前接收窗口大小 (RcvWnd,则卸载目标必须向对等方播发新的接收窗口大小。
InitialRcvWnd
从套接字选项SO_RCVBUF) (的默认接收窗口。
RcvIndicationSize
当非 NULL 时,卸载目标应在对 的单个调用中提供的最佳数据字节数 NdisTcpOffloadReceiveHandler 函数。 此数字通常介于数十到数百个字节之间,是一个建议,而不是一个要求。 卸载目标可以指示大于或小于 RcvIndicationSize 数据字节。 但是,为了获得最佳性能,卸载目标应指示
RcvIndicationSize 数据字节。 有关详细信息,请参阅 NdisTcpOffloadReceiveHandler。
如果 为 NULL,则未指定 RcvIndicationSize 。 在这种情况下,卸载目标应忽略 RcvIndicationSize ,并在调用 NdisTcpOffloadReceiveHandler 函数时指示尽可能多的数据。
KaProbeCount
卸载目标应发送的 keepalive 探测数,以确定 TCP 连接是否保持不变 (请参阅 RFC 1122) 。
KaTimeout
此成员指定在发送 keepalive 探测 (请参阅 RFC 1122) 之前处于非活动状态的超时间隔(以时钟刻度为单位)。
KaInterval
此成员以时钟计时周期为单位指定在未收到对 keepalive 探测的响应时重新传输 keepalive 帧的超时, (请参阅 RFC 1122) 。
MaxRT
此成员以时钟计时周期为单位指定卸载目标应重新传输段的最长时间。 如果 MaxRT 的值为非零,则 MaxRT 将替代 中的 TcpMaximumRetransmissions NDIS_TASK_TCP_CONNECTION_OFFLOAD 结构。 的默认值为 MaxRT 为零,这意味着 TcpMaximumRetransmissions 设置卸载目标应在 TCP 连接上重新传输段的最大次数。 如果 MaxRT 的值为 FFFFFFFF (或 -1) ,则最大重新传输数没有限制。 当 MaxRT 不为零时,卸载目标应重置连接处于 TCP 委托状态的 TotalRT 变量。 TotalRT 指示卸载目标重新传输当前 TCP 段所用的总时间(以时钟计时周期为单位)。
FlowLabel
此成员通过干预路由器标记主机标记的数据包进行特殊处理,例如,非默认 QoS 或“实时”服务 (请参阅 RFC 2460) 。 此变量通过套接字选项设置,在 TCP 连接的生存期内可能会有所不同。 仅当 TCP 连接通过 IPv6 时,此变量才有意义。
TtlOrHopLimit
如果 TCP 连接通过 IPv4,则此成员指定生存时间 (请参阅 RFC 791) 。 此变量通过套接字选项设置,在 TCP 连接的生存期内可能会有所不同。
如果 TCP 连接通过 IPv6,则此成员指定数据包可以通过的路由器数 (请参阅 RFC 2460) 。 此变量通过套接字选项设置,在 TCP 连接的生存期内可能会有所不同。
TosOrTrafficClass
如果 TCP 连接通过 IPv4,则此成员指定用于路由数据包的服务类型 (请参阅 RFC 2474) 。 此变量通过套接字选项设置,在 TCP 连接的生存期内可能会有所不同。
如果 TCP 连接通过 IPv6,则此成员根据流量类型确定数据包值的优先级,指示发送方愿意放弃数据包 (请参阅 RFC 2460) 。 此变量通过套接字选项设置,在 TCP 连接的生存期内可能会有所不同。
UserPriority
3 位优先级值。 如果卸载目标支持 802.1p 数据包信息,则必须将此优先级值插入到它在卸载的 TCP 连接上传输的所有数据包的 标记标头 中。 如果卸载目标不支持 802.1p 数据包信息,则应忽略 UserPriority 。 有关支持 802.1p 数据包信息的详细信息,请参阅 卸载 TCP 连接上的 802.1Q 和 802.1p 处理。
注解
缓存变量由主机堆栈拥有和维护。 卸载目标不得更改缓存变量的值,除非主机堆栈请求这样做。 如果缓存变量的值发生更改,主机堆栈会请求更新变量,这会导致 NDIS 调用卸载目标的 MiniportUpdateOffload 函数。 当主机堆栈通过导致 NDIS 调用卸载目标的 来终止一个或多个状态对象的卸载时 MiniportTerminateOffload 函数,卸载目标不会将卸载的常量变量的值返回到主机堆栈。
请注意,如果设置了卸载 TCP 连接的TCP_FLAG_MAX_RT_RESTART标志,则卸载目标必须:
- 当主机堆栈更新该连接的缓存 KaProbeCount 变量时,重置该连接的委托 KeepaliveProbeCount 变量。
- 当主机堆栈更新该连接的缓存 KaTimeout 和/或 KaInterval 变量时,重置该连接的委托 KeepaliveTimeoutDelta 变量。
要求
要求 | 值 |
---|---|
Header | ndischimney.h (包括 Ndischimney.h) |