Offload State Objects

[The TCP chimney offload feature is deprecated and should not be used.]

A state object is one instance of all the state variables of a particular layer of offload state. For example, a TCP connection state object contains all the constant, cached, and delegated variables of the TCP layer.

When offloading state from the host stack, an offload target stores the state for each state object in a context area that is specific to that state object. For more information about storing offloaded state, see Storing and Referencing Offloaded State.

Neighbor State Object

A neighbor state object contains the following constant, cached, and delegated variables.

Constant variable Description

DlSourceAddress

A 32-byte source medium access control (MAC) address. If the offload target supports software-configurable MAC addresses and DISourceAddress is non-NULL, the offload target must set the source MAC address of all packets that it sends on the offloaded connection to the value of DlSourceAddress. If the offload target does not support software-configurable MAC addresses and DISourceAddress is non-NULL, the offload target must fail an attempt to offload the neighbor constant state.

VlanId

An unsigned 12-bit binary number that identifies the virtual LAN (VLAN) to which a packet belongs. This VLAN identifier pertains only to packets that are sent or received by using the neighbor state object. When VlanId is NULL, it is not significant.

Cached variable Description

DestinationAddress

The MAC address of the next hop (neighbor).

HostReachabilityDelta

The host stack's current time minus the value of HostReachabilityDelta, in units of clock ticks, is the last time that the host stack confirmed neighbor reachability (see forward reachability in RFC 2461). For more information about how the offload target uses this variable, see NdisMOffloadEventIndicate.

Delegated variable Description

NicReachabilityDelta

The NIC's current time minus the value of NicReachabilityDelta, in units of clock ticks, is the last time that the offload target confirmed neighbor reachability (see forward reachability in RFC 2461). For more information about how the offload target uses this variable, see NdisMOffloadEventIndicate.

Path State Object

A path state object contains the following constant, cached, and delegated variables.

Constant variable Description

SourceAddress

A pointer to the source IP address of a TCP connection. If the TCP connection is over IPv4, the address is a 4-byte IPv4 address. If the TCP connection is over IPv6, the address is a 16-byte IPv6 address. The source address bytes are always in network byte order.

DestinationAddress

A pointer to the destination IP address of a TCP connection. If the TCP connection is over IPv4, the address is a 4-byte IPv4 address. If the TCP connection is over IPv6, the address is a 16-byte IPv6 address. The destination address bytes are always in network byte order.

Cached variable Description

PathMtu

The maximum transmission unit (MTU) for the path (see RFC 1191 for IPv4 and RFC 1981 for IPv6).

Delegated variable Description

None

Currently there is no delegated path state.

TCP State Object

A TCP state connection object contains the following constant, cached, and delegated variables.

Constant variable Description

Flags

A bitwise OR of the following flags:

TCP_FLAG_TIMESTAMP_ENABLED (see RFC 1323)

TCP_FLAG_SACK_ENABLED (see RFC 2018)

TCP_FLAG_WINDOW_SCALING_ENABLED (see RFCs 2883 and 3517)

RemotePort

The destination port number (see RFC 793)

LocalPort

The source port number (see RFC 793)

SndWindScale

The send window scale factor (see RFC 1323)

RcvWindScale

The receive window scale factor (see RFC 1323)

RemoteMss

The initial maximum segment size (MSS) that is advertised by the remote endpoint during TCP connection setup (RFC 2581)

HashValue

A 32-bit hash value that the offload target uses for Receive Side Scaling processing if the offload target supports RSS

Cached variable Description

Flags

A bitwise OR of the following flags:

TCP_FLAG_KEEP_ALIVE_ENABLED (see RFC 1122)

TCP_FLAG_NAGLING_ENABLED (see RFC 896)

TCP_FLAG_KEEP_ALIVE_RESTART

TCP_FLAG_MAX_RT_RESTART

TCP_FLAG_UPDATE_RCV_WND

InitialRcvWnd

The default receive window (from socket option SO_RCVBUF)

RcvIndicationSize

The optimum number of data bytes that the offload target should supply in a single call to the NdisTcpOffloadReceiveHandler function

KaProbeCount

The number of keepalive probes that the offload target should send to determine whether a TCP connection is intact (see RFC 1122).

KaTimeout

The time-out interval, in clock ticks, for inactivity before sending a keepalive probe (see RFC 1122).

KaInterval

The timeout, in clock ticks, after which to retransmit a keepalive frame if no response is received to a keepalive probe (see RFC 1122).

MaxRT

The maximum time, in clock ticks, that the offload target should spend retransmitting a segment.

FlowLabel

A value that marks host-labeled packets for special handling by intervening routers (for example, nondefault quality of service (QoS) or "real-time" service (see RFC 2460)). This variable is set through a socket option and can vary during the lifetime of the TCP connection. This variable is meaningful only if the TCP connection is over IPv6.

TtlOrHopLimit

If the TCP connection is over IPv4, this variable is the time to live (see RFC 791). If the TCP connection is over IPv6, this variable is the number of routers that the packet can pass through (see RFC 2460).

TosOrTrafficClass

If the TCP connection is over IPv4, this variable is the type of service for routing a packet (see RFC 2474). If the TCP connection is over IPv6, this variable prioritizes values for packets according to traffic types, indicating how willing the sender is to have the packets discarded (see RFC 2460).

UserPriority

A 3-bit 802.1p priority value.

Delegated variable Description

State

The current state of the TCP connection (see RFC 793).

Flags

Reserved for system use.

RcvNxt

The sequence number for the next receive segment (RCV.NEXT in RFC 793).

RcvWnd

The receive window size (RCV.WND in RFC 793).

SndUna

The sequence number for the first byte of unacknowledged data (SND.UNA in RFC 793). For more information, see Send Data That Contains Data to Be Retransmitted.

SndNxt

The sequence number for the next byte to send on the connection (SND.NXT in RFC 793). For more information, see Send Data That Contains Data to Be Retransmitted.

SndMax

The maximum sequence number that has been sent on the connection. For more information, see Send Data That Contains Data to Be Retransmitted.

SndWnd

The send window size (SND.WND in RFC 793).

MaxSndWnd

The maximum send window size (see RFC 813).

SndWL1

The segment sequence number that was used for the last window update (SND.WL1 in RFC 793).

CWnd

The congestion window (cwnd in RFC 2581).

SsThresh

The slow start threshold (ssthresh in RFC 2581).

SRtt

The smoothed round-trip time, in clock ticks (SRTT in RFCs 793 and 2988). This variable is maintained on a per-connection basis because it takes into account path, host, and perhaps application behavior. This variable is passed to an offload target at 8 times its value and must be passed back from an offload target as 8 times its value.

RttVar

The roundtrip time variation, in clock ticks (RTTVAR in RFC 2988). This variable is passed to an offload target as 4 times its value and must be passed back from an offload target as 4 times its value.

TsRecent

The timestamp value to send in the next acknowledgment (ACK ). (TS.Recent in RFC 1323).

TsRecentAge

The amount of time, in clock ticks, since the most recent timestamp was received (see RFC 1323).

TsTime

The current value of the adjusted timestamp.

TotalRT

The total time, in clock ticks, that has been spent transmitting the current TCP segment.

DupAckCount

The number of ACKs that have been accepted for the same sequence number (see RFC 1323).

SndWndProbeCount

The current send window probe round. For a description of the send window probe round, see Persist Timer

Keepalive ProbeCount

The number of keepalive probes that have been sent that have not received a response (see RFC 1122).

Keepalive TimeoutDelta

The time, in clock ticks, that remains until the next keepalive time-out (see RFC 1122).

Retransmit Count

The number of retransmits that have been sent (see RFC 2581).

Retransmit TimeoutDelta

The time that remains until the next retransmit time-out (see RFC 2581).

SendDataHead

A pointer to the first NET_BUFFER_LIST structure whose NET_BUFFER structure has send data associated with it. This variable is used only in an initiate offload or terminate offload operation. For more information about handling such send data, see Handling Outstanding Send Data During and After an Offload Operation and Handling Outstanding Send Data During a Terminate Offload Operation.

SendDataTail

A pointer to the last NET_BUFFER_LIST structure whose NET_BUFFER structure has send data associated with it. This variable is used only in an initiate offload or terminate offload operation. For more information about handling such send data, see Handling Outstanding Send Data During and After an Offload Operation and Handling Outstanding Send Data During a Terminate Offload Operation.

SendBacklogSize

The optimum number of send data bytes that should be outstanding (that is, sent by the host stack and not yet completed by the offload target) at any given time. The offload target should specify a number that maximizes throughput while consuming the least possible amount of resources. The offload target returns a value for this variable in response to a query of delegated state.

BufferedData

A pointer to buffered receive data. The host stack can pass such data to the offload target when offloading a TCP connection. (For more information about handling such buffered receive data, see Handling Buffered Receive Data During and After an Offload Operation.) The offload target can pass such data to the host stack when uploading a TCP connection. (For more information about handling such buffered receive data, see Handling Buffered Receive Data During a Terminate Offload Operation.) This variable is used only in an initiate offload or terminate offload operation.

ReceiveBacklogSize

The number of receive data bytes that are buffered in the offload target for the offloaded TCP connection. The host stack uses this value to post one or more receive requests that are large enough to hold all of the buffered data. The offload target returns a value for this variable only in response to a query of delegated state.