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? Maybe adding outer_l4_len makes more sense. Regards, Olivier