Hi lads, > -----Original Message----- > From: Liu, Jijiang > Sent: Monday, December 01, 2014 1:08 PM > To: Olivier MATZ; Ananyev, Konstantin > Cc: dev at dpdk.org > Subject: RE: [dpdk-dev] [PATCH 1/3] mbuf:add two TX offload flags and change > three fields > > > > > -----Original Message----- > > From: Olivier MATZ [mailto:olivier.matz at 6wind.com] > > Sent: Monday, December 1, 2014 8:28 PM > > To: Ananyev, Konstantin; Liu, Jijiang > > Cc: dev at dpdk.org > > Subject: Re: [dpdk-dev] [PATCH 1/3] mbuf:add two TX offload flags and change > > three fields > > > > Hi Konstantin, > > > > On 12/01/2014 12:58 PM, Ananyev, Konstantin wrote: > > >> Ether/IP/UDP/vxlan/Ether/IP/UDP/xxx > > >> m->outer_l2_len = sizeof(ether) > > >> m->outer_l3_len = sizeof(ip) > > >> m->l2_len = sizeof(udp) + sizeof(vxlan) + sizeof(ether) > > > > > > I think it should be: > > > m->l2_len = sizeof(vxlan) + sizeof(ether) > > > > > > We don't need to add sizeof(udp) as we already say to the HW that I t > > > will be > > UDP TUNNELING vi the ol_flag: PKT_TX_UDP_TUNNEL_PKT. > > > > > >> m->l3_len = sizeof(ip) > > >> m->l4_len = sizeof(udp) > > > > I would agree if we had a m->outer_l4_len. Maybe we should add it to be > > coherent with lX_len fields? > > > > I think that to process the inner IP checksum, we should be able to use > > these 2 > > notations: > > > > Ether/IP/GRE/IP/UDP/xxx > > m->flags = OUTER_IP_CKSUM > > m->outer_l2_len = sizeof(ether) > > m->outer_l3_len = sizeof(ip) > > m->l2_len = sizeof(gre) > > m->l3_len = sizeof(ip) > > m->l4_len = sizeof(udp) > > > > Ether/IP/GRE/IP/UDP/xxx > > m->flags = IP_CKSUM > > /* sum of all outer_lX_len and l2_len from above: */ > > m->l2_len = sizeof(ether) + sizeof(ip) + sizeof(gre) > > m->l3_len = sizeof(ip) > > m->l4_len = sizeof(udp) > > > > So, in case of vxlan, I suggest that either we include the size of UDP in > > l2_len, or > > we add a outer_l4_len. What do you think? > I agree to include the size of UDP in l2_len, for VXLAN, the UDP header is a > part of VXLAN tunnelling header as the UDP destination > port indicate if a packet is VXLAN packet.
Actually it is my bad. While looking at current implementation, I didn't realise that: ETHER_VXLAN_HLEN == (sizeof(struct udp_hdr) + sizeof(struct vxlan_hdr)). So yes you are right for VXLAN packet it should be: m->l2_len = sizeof(udp) + sizeof(vxlan) + sizeof(ether); Sorry for confusing everyone. Konstantin > > Maybe adding outer_l4_len makes more sense. > > > > > Regards, > > Olivier