TCP Segmentation Offload is supported in Linux by the network device layer. A driver that wants to offer TSO needs to set the NETIF_F_TSO bit in the network device structure. In order for a device to support TSO, it needs to also support Net:TCP checksum offloading and Net:Scatter Gather.

The driver will then receive super-sized skb's. These are indicated to the driver by skb_shinfo(skb)->gso_size being non-zero. The gso_size is the size the hardware should fragment the TCP data. TSO may change how and when TCP decides to send data.

If the driver has setup hooks in ETHTOOL_OPS() than TSO can be disabled with:

 ethtool -K ethX tso off

and enabled with:

 ethtool -K ethX tso on