[dpdk-dev] ixgbe: fix TSO in IPv6
Commit Message
From: Didier Pallard <didier.pallard@6wind.com>
When TSO is used with IPv6, generated frames are incorrect.
L4 frame is OK, but length field of IPv6 header was not populated correctly.
Signed-off-by: Didier Pallard <didier.pallard@6wind.com>
---
drivers/net/ixgbe/ixgbe_rxtx.c | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
Comments
Any comment?
> When TSO is used with IPv6, generated frames are incorrect.
> L4 frame is OK, but length field of IPv6 header was not populated correctly.
>
> Signed-off-by: Didier Pallard <didier.pallard@6wind.com>
> -----Original Message-----
> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of David Marchand
> Sent: Monday, June 01, 2015 1:11 PM
> To: dev@dpdk.org
> Subject: [dpdk-dev] [PATCH] ixgbe: fix TSO in IPv6
>
> From: Didier Pallard <didier.pallard@6wind.com>
>
> When TSO is used with IPv6, generated frames are incorrect.
> L4 frame is OK, but length field of IPv6 header was not populated correctly.
>
> Signed-off-by: Didier Pallard <didier.pallard@6wind.com>
> ---
> drivers/net/ixgbe/ixgbe_rxtx.c | 13 +++++++++----
> 1 file changed, 9 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/net/ixgbe/ixgbe_rxtx.c b/drivers/net/ixgbe/ixgbe_rxtx.c
> index 4f9ab22..d123612 100644
> --- a/drivers/net/ixgbe/ixgbe_rxtx.c
> +++ b/drivers/net/ixgbe/ixgbe_rxtx.c
> @@ -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_L4T_TCP |
> + IXGBE_ADVTXD_DTYP_CTXT | IXGBE_ADVTXD_DCMD_DEXT;
>
> tx_offload_mask.l2_len |= ~0;
> tx_offload_mask.l3_len |= ~0;
> --
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
> 1.7.10.4
> -----Original Message-----
> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of David Marchand
> Sent: Monday, June 1, 2015 8:11 PM
> To: dev@dpdk.org
> Subject: [dpdk-dev] [PATCH] ixgbe: fix TSO in IPv6
>
> From: Didier Pallard <didier.pallard@6wind.com>
>
> When TSO is used with IPv6, generated frames are incorrect.
> L4 frame is OK, but length field of IPv6 header was not populated correctly.
>
> Signed-off-by: Didier Pallard <didier.pallard@6wind.com>
> ---
> drivers/net/ixgbe/ixgbe_rxtx.c | 13 +++++++++----
> 1 file changed, 9 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/net/ixgbe/ixgbe_rxtx.c b/drivers/net/ixgbe/ixgbe_rxtx.c
> index 4f9ab22..d123612 100644
> --- a/drivers/net/ixgbe/ixgbe_rxtx.c
> +++ b/drivers/net/ixgbe/ixgbe_rxtx.c
> @@ -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 =
I'd prefer to put 'IXGBE_ADVTXD_TUCMD_IPV6' here to indicate it has set for IPV6 specifically,
though they are the same. It is clearer for future readers.
- Helin
> + 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;
> --
> 1.7.10.4
I have replied with its original mail, with minor comment.
- Helin
> -----Original Message-----
> From: Thomas Monjalon [mailto:thomas.monjalon@6wind.com]
> Sent: Monday, June 15, 2015 5:46 PM
> To: Zhang, Helin; Ananyev, Konstantin
> Cc: dev@dpdk.org; David Marchand
> Subject: Re: [dpdk-dev] [PATCH] ixgbe: fix TSO in IPv6
>
> Any comment?
>
> > When TSO is used with IPv6, generated frames are incorrect.
> > L4 frame is OK, but length field of IPv6 header was not populated correctly.
> >
> > Signed-off-by: Didier Pallard <didier.pallard@6wind.com>
@@ -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_L4T_TCP |
+ IXGBE_ADVTXD_DTYP_CTXT | IXGBE_ADVTXD_DCMD_DEXT;
tx_offload_mask.l2_len |= ~0;
tx_offload_mask.l3_len |= ~0;