From f210ce43e01475d9134ac74e78f84cdef45c842c Mon Sep 17 00:00:00 2001 From: Martin Zhang Date: Tue, 24 Sep 2019 01:26:42 +0800 Subject: [PATCH] odp-util: fill IPv4 ver and head length for tnl_push When parse tnl_push, if IPv4 is used, we forget to fill the ipv4 version and ip header length fields. so there is a wrong ip header in the header of "struct ovs_action_push_tnl", which will caused wrong packdet sent by dpcl. test command: ovs-appctl dpctl/add-flow "in_port(1),eth_type(0x0800),ipv4(dst=9.9.9.6)" \ "tnl_push(tnl_port(2),header(size=50,type=4,eth(dst=08:00:27:2e:87:0d,src=98:03:9b:c6:d1:7c,dl_type=0x0800), \ ipv4(src=10.97.240.147,dst=10.96.74.33,proto=17,tos=0,ttl=64,frag=0x4000), \ udp(src=0,dst=4789,csum=0x0),vxlan(flags=0x8000000,vni=0x270f)),out_port(3)),4" Signed-off-by: Martin Zhang Signed-off-by: Dujie Signed-off-by: Ben Pfaff --- lib/odp-util.c | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/odp-util.c b/lib/odp-util.c index 84ea4c148..fe59a5606 100644 --- a/lib/odp-util.c +++ b/lib/odp-util.c @@ -1527,6 +1527,7 @@ ovs_parse_tnl_push(const char *s, struct ovs_action_push_tnl *data) put_16aligned_be32(&ip->ip_src, sip); put_16aligned_be32(&ip->ip_dst, dip); ip->ip_frag_off = htons(ip_frag_off); + ip->ip_ihl_ver = IP_IHL_VER(5, 4); ip_len = sizeof *ip; } else { char sip6_s[IPV6_SCAN_LEN + 1];