Receive and Transmit Description

TCP with options

UDP with limitations.

UDP (unlike TCP) is not a “reliable protocol”, and fragmentation is not supported at the UDP level. UDP messages that are larger than the MTU size of the given network medium are normally fragmented at the IP layer. This is different from TCP, where large TCP messages can be fragmented at either the IP or TCP layers depending on the software implementation. The Ethernet controller has the ability to segment UDP traffic (in addition to TCP traffic). This process has limited usefulness.

IP tunneled packets are not supported for TCP Segmentation operation1.

3.5.5TCP Segmentation Indication

Software indicates a TCP Segmentation transmission context to the hardware by setting up a TCP/ IP Context Transmit Descriptor. The purpose of this descriptor is to provide information to the hardware to be used during the TCP segmentation offload process. The layout of this descriptor is reproduced in Section 3.3.6.

0

8

63

48

47

40

39

32

31

 

 

 

16

15

8

7

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

TUCSE

 

 

TUCS0

TUCSS

 

IPCSE

 

 

IPCS0

 

IPCSS

 

 

 

 

 

 

 

 

 

 

 

 

MSS

 

HDRLEN

RSV

STA

TUCMD

DTYP

 

 

PAYLEN

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

63

48

47

40

3936

35 32

31

24

23

20

19

 

 

 

0

7

6

5

4

3

2

1

0

IDE

RSV

DEXT

RSV

RS

TSE

IP

TCP

Figure 3-6. TCP/IP Context Transmit Descriptor & Command Layout

Setting the TSE bit in the Command field to 1b indicates that this descriptor refers to the TCP Segmentation context (as opposed to the normal checksum offloading context). This causes the checksum offloading, packet length, header length, and maximum segment size parameters to be loaded from the descriptor into the Ethernet controller.

The TCP Segmentation prototype header is taken from the packet data itself. Software must identity the type of packet that is being sent (IP/TCP, IP/UDP, other), calculate appropriate checksum offloading values for the desired checksums, and calculate the length of the header which is pre-pended. The header may be up to 240 bytes in length.

Once the TCP Segmentation context has been set, the next descriptor provides the initial data to transfer. This first descriptor(s) must point to a packet of the type indicated. Furthermore, the data it points to may need to be modified by software as it serves as the prototype header for all packets within the TCP Segmentation context. The following sections describe the supported packet types and the various updates which are performed by hardware. This should be used as a guide to determine what must be modified in the original packet header to make it a suitable prototype header.

The following summarizes the fields considered by the driver for modification in constructing the prototype header:

58

Software Developer’s Manual

Page 72
Image 72
Intel PCI-X, Intel Gigabit Ethernet Controllers manual TCP Segmentation Indication, 3936