ixgbe: fix TSO in IPv6
authorDidier Pallard <didier.pallard@6wind.com>
Mon, 22 Jun 2015 14:21:18 +0000 (16:21 +0200)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Mon, 22 Jun 2015 14:59:08 +0000 (16:59 +0200)
When TSO is used with IPv6, generated frames are incorrect.
L4 frame is OK, but length field of IPv6 header was not populated correctly.

IXGBE_ADVTXD_TUCMD_IPV6 flag is set for better readability, even if it
does nothing.

Signed-off-by: Didier Pallard <didier.pallard@6wind.com>
Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
Acked-by: Helin Zhang <helin.zhang@intel.com>
drivers/net/ixgbe/ixgbe_rxtx.c

index 7cc26ef..3ace8a8 100644 (file)
@@ -375,10 +375,15 @@ ixgbe_set_xmit_ctx(struct ixgbe_tx_queue *txq,
 
        /* check if TCP segmentation required for this packet */
        if (ol_flags & PKT_TX_TCP_SEG) {
-               /* implies IP cksum and TCP cksum */
-               type_tucmd_mlhl = IXGBE_ADVTXD_TUCMD_IPV4 |
-                       IXGBE_ADVTXD_TUCMD_L4T_TCP |
-                       IXGBE_ADVTXD_DTYP_CTXT | IXGBE_ADVTXD_DCMD_DEXT;
+               /* implies IP cksum in IPv4 */
+               if (ol_flags & PKT_TX_IP_CKSUM)
+                       type_tucmd_mlhl = IXGBE_ADVTXD_TUCMD_IPV4 |
+                               IXGBE_ADVTXD_TUCMD_L4T_TCP |
+                               IXGBE_ADVTXD_DTYP_CTXT | IXGBE_ADVTXD_DCMD_DEXT;
+               else
+                       type_tucmd_mlhl = IXGBE_ADVTXD_TUCMD_IPV6 |
+                               IXGBE_ADVTXD_TUCMD_L4T_TCP |
+                               IXGBE_ADVTXD_DTYP_CTXT | IXGBE_ADVTXD_DCMD_DEXT;
 
                tx_offload_mask.l2_len |= ~0;
                tx_offload_mask.l3_len |= ~0;