Data Sheet

Ethernet Controller I210 —Inline Functions
310
IPv6 Header
Payload Length = last frame payload bytes + L4LEN + IPV6_HDR_extension
1
TCP Header
Sequence Number update: Add previous TCP payload size to the previous sequence number value.
This is equivalent to adding the MSS to the previous sequence number.
The flag values of the last frames are set by ANDing the flag word in the pseudo header with the
DTXTCPFLGH.TCP_Flg_lst_seg register field. The default value of the DTXTCPFLGH.TCP_Flg_lst_seg
are set so that if the FIN flag and the PSH flag are set in the last frame.
TCP Checksum
UDP Header
UDP Length = Last frame payload bytes + L4LEN
UDP Checksum
7.2.4.8 Data Flow
The flow used by the I210 to do TCP segmentation is as follows:
1. Get a descriptor with a request for a TSO off-load of a TCP packet.
2. First Segment processing:
a. Fetch all the buffers containing the header as calculated by the MACLEN, IPLEN and L4LEN fields.
Save the addresses and lengths of the buffers containing the header (up to 4 buffers). The
header content is not saved.
b. Fetch data up to the MSS from subsequent buffers & calculate the adequate checksum(s).
c. Update the Header accordingly and update internal state of the packet (next data to fetch and
TCP SN).
d. Send the packet to the network.
e. If total packet was sent, go to step 4. else continue.
3. Next segments
a. Wait for next arbitration of this queue.
b. Fetch all the buffers containing the header from the saved addresses. Subsequent reads of the
header might be done with a no snoop attribute.
c. Fetch data up to the MSS or end of packet from subsequent buffers & calculate the adequate
checksum(s).
d. Update the Header accordingly and update internal state of the packet (next data to fetch and
TCP SN).
e. If total packet was sent, request is done, else restart from step 3.
4. Release all buffers (update head pointer).
Note: Descriptors are fetched in a parallel process according to the consumption of the buffers.
7.2.5 Checksum Offloading in Non-Segmentation Mode
The previous section on TCP Segmentation off-load describes the IP/TCP/UDP checksum off loading
mechanism used in conjunction with TCP Segmentation. The same underlying mechanism can also be
applied as a standalone feature. The main difference in normal packet mode (non-TCP Segmentation) is
that only the checksum fields in the IP/TCP/UDP headers need to be updated.