Thanks, applied to master, branch-2.5, and branch-2.4.
On Mon, Feb 01, 2016 at 10:16:41PM +0100, Dimitri John Ledkov wrote: > lgtm. +1 > > I have came to the same conclusion starring at this code at FOSDEM, > but didn't fix all the tests. > > > > On 1 February 2016 at 21:55, Ben Pfaff <b...@ovn.org> wrote: > > ip_frag_off is an ovs_be16 so it must be converted between host and > > network byte order for parsing and formatting. > > > > Reported-by: Dimitri John Ledkov <x...@ubuntu.com> > > Reported-at: > > http://openvswitch.org/pipermail/discuss/2016-January/020072.html > > Signed-off-by: Ben Pfaff <b...@ovn.org> > > --- > > lib/odp-util.c | 6 ++++-- > > tests/odp.at | 12 ++++++------ > > tests/tunnel-push-pop.at | 10 +++++----- > > 3 files changed, 15 insertions(+), 13 deletions(-) > > > > diff --git a/lib/odp-util.c b/lib/odp-util.c > > index 5cbead8..95e86f2 100644 > > --- a/lib/odp-util.c > > +++ b/lib/odp-util.c > > @@ -475,7 +475,7 @@ format_odp_tnl_push_header(struct ds *ds, struct > > ovs_action_push_tnl *data) > > IP_ARGS(get_16aligned_be32(&ip->ip_dst)), > > ip->ip_proto, ip->ip_tos, > > ip->ip_ttl, > > - ip->ip_frag_off); > > + ntohs(ip->ip_frag_off)); > > l4 = (ip + 1); > > } else { > > const struct ip6_hdr *ip6; > > @@ -1064,16 +1064,18 @@ ovs_parse_tnl_push(const char *s, struct > > ovs_action_push_tnl *data) > > > > if (eth->eth_type == htons(ETH_TYPE_IP)) { > > /* IPv4 */ > > + uint16_t ip_frag_off; > > if (!ovs_scan_len(s, &n, > > "ipv4(src="IP_SCAN_FMT",dst="IP_SCAN_FMT",proto=%"SCNi8 > > ",tos=%"SCNi8",ttl=%"SCNi8",frag=0x%"SCNx16"),", > > IP_SCAN_ARGS(&sip), > > IP_SCAN_ARGS(&dip), > > &ip->ip_proto, &ip->ip_tos, > > - &ip->ip_ttl, &ip->ip_frag_off)) { > > + &ip->ip_ttl, &ip_frag_off)) { > > return -EINVAL; > > } > > put_16aligned_be32(&ip->ip_src, sip); > > put_16aligned_be32(&ip->ip_dst, dip); > > + ip->ip_frag_off = htons(ip_frag_off); > > ip_len = sizeof *ip; > > } else { > > char sip6_s[IPV6_SCAN_LEN + 1]; > > diff --git a/tests/odp.at b/tests/odp.at > > index bc30eba..808a83b 100644 > > --- a/tests/odp.at > > +++ b/tests/odp.at > > @@ -300,12 +300,12 @@ > > sample(sample=9.7%,actions(1,2,3,push_vlan(vid=1,pcp=2))) > > > > set(tunnel(tun_id=0xabcdef1234567890,src=1.1.1.1,dst=2.2.2.2,ttl=64,flags(df|csum|key))) > > > > set(tunnel(tun_id=0xabcdef1234567890,src=1.1.1.1,dst=2.2.2.2,ttl=64,flags(key))) > > tnl_pop(4) > > -tnl_push(tnl_port(4),header(size=42,type=3,eth(dst=f8:bc:12:44:34:b6,src=f8:bc:12:46:58:e0,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=47,tos=0,ttl=64,frag=0x40),gre((flags=0x2000,proto=0x6558),key=0x1e241)),out_port(1)) > > -tnl_push(tnl_port(4),header(size=46,type=3,eth(dst=f8:bc:12:44:34:b6,src=f8:bc:12:46:58:e0,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=47,tos=0,ttl=64,frag=0x40),gre((flags=0xa000,proto=0x6558),csum=0x0,key=0x1e241)),out_port(1)) > > -tnl_push(tnl_port(6),header(size=50,type=4,eth(dst=f8:bc:12:44:34:b6,src=f8:bc:12:46:58:e0,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=17,tos=0,ttl=64,frag=0x40),udp(src=0,dst=4789,csum=0x0),vxlan(flags=0x8000000,vni=0x1c7)),out_port(1)) > > -tnl_push(tnl_port(6),header(size=50,type=5,eth(dst=f8:bc:12:44:34:b6,src=f8:bc:12:46:58:e0,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=17,tos=0,ttl=64,frag=0x40),udp(src=0,dst=6081,csum=0x0),geneve(oam,vni=0x1c7)),out_port(1)) > > -tnl_push(tnl_port(6),header(size=58,type=5,eth(dst=f8:bc:12:44:34:b6,src=f8:bc:12:46:58:e0,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=17,tos=0,ttl=64,frag=0x40),udp(src=0,dst=6081,csum=0x0),geneve(crit,vni=0x1c7,options({class=0xffff,type=0x80,len=4,0xa}))),out_port(1)) > > -tnl_push(tnl_port(6),header(size=50,type=5,eth(dst=f8:bc:12:44:34:b6,src=f8:bc:12:46:58:e0,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=17,tos=0,ttl=64,frag=0x40),udp(src=0,dst=6081,csum=0xffff),geneve(vni=0x1c7)),out_port(1)) > > +tnl_push(tnl_port(4),header(size=42,type=3,eth(dst=f8:bc:12:44:34:b6,src=f8:bc:12:46:58:e0,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x2000,proto=0x6558),key=0x1e241)),out_port(1)) > > +tnl_push(tnl_port(4),header(size=46,type=3,eth(dst=f8:bc:12:44:34:b6,src=f8:bc:12:46:58:e0,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0xa000,proto=0x6558),csum=0x0,key=0x1e241)),out_port(1)) > > +tnl_push(tnl_port(6),header(size=50,type=4,eth(dst=f8:bc:12:44:34:b6,src=f8:bc:12:46:58:e0,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=17,tos=0,ttl=64,frag=0x4000),udp(src=0,dst=4789,csum=0x0),vxlan(flags=0x8000000,vni=0x1c7)),out_port(1)) > > +tnl_push(tnl_port(6),header(size=50,type=5,eth(dst=f8:bc:12:44:34:b6,src=f8:bc:12:46:58:e0,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=17,tos=0,ttl=64,frag=0x4000),udp(src=0,dst=6081,csum=0x0),geneve(oam,vni=0x1c7)),out_port(1)) > > +tnl_push(tnl_port(6),header(size=58,type=5,eth(dst=f8:bc:12:44:34:b6,src=f8:bc:12:46:58:e0,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=17,tos=0,ttl=64,frag=0x4000),udp(src=0,dst=6081,csum=0x0),geneve(crit,vni=0x1c7,options({class=0xffff,type=0x80,len=4,0xa}))),out_port(1)) > > +tnl_push(tnl_port(6),header(size=50,type=5,eth(dst=f8:bc:12:44:34:b6,src=f8:bc:12:46:58:e0,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=17,tos=0,ttl=64,frag=0x4000),udp(src=0,dst=6081,csum=0xffff),geneve(vni=0x1c7)),out_port(1)) > > > > tnl_push(tnl_port(4),header(size=62,type=3,eth(dst=f8:bc:12:44:34:b6,src=f8:bc:12:46:58:e0,dl_type=0x86dd),ipv6(src=2001:cafe::88,dst=2001:cafe::92,label=0,proto=47,tclass=0x0,hlimit=64),gre((flags=0x2000,proto=0x6558),key=0x1e241)),out_port(1)) > > > > tnl_push(tnl_port(4),header(size=66,type=3,eth(dst=f8:bc:12:44:34:b6,src=f8:bc:12:46:58:e0,dl_type=0x86dd),ipv6(src=2001:cafe::88,dst=2001:cafe::92,label=0,proto=47,tclass=0x0,hlimit=64),gre((flags=0xa000,proto=0x6558),csum=0x0,key=0x1e241)),out_port(1)) > > > > tnl_push(tnl_port(6),header(size=70,type=4,eth(dst=f8:bc:12:44:34:b6,src=f8:bc:12:46:58:e0,dl_type=0x86dd),ipv6(src=2001:cafe::88,dst=2001:cafe::92,label=0,proto=17,tclass=0x0,hlimit=64),udp(src=0,dst=4789,csum=0x0),vxlan(flags=0x8000000,vni=0x1c7)),out_port(1)) > > diff --git a/tests/tunnel-push-pop.at b/tests/tunnel-push-pop.at > > index b29b477..842f64c 100644 > > --- a/tests/tunnel-push-pop.at > > +++ b/tests/tunnel-push-pop.at > > @@ -76,28 +76,28 @@ dnl Check VXLAN tunnel push > > AT_CHECK([ovs-ofctl add-flow int-br action=2]) > > AT_CHECK([ovs-appctl ofproto/trace ovs-dummy > > 'in_port(2),eth_type(0x0800),ipv4(src=1.1.3.88,dst=1.1.3.112,proto=47,tos=0,ttl=64,frag=no)'], > > [0], [stdout]) > > AT_CHECK([tail -1 stdout], [0], > > - [Datapath actions: > > tnl_push(tnl_port(4789),header(size=50,type=4,eth(dst=f8:bc:12:44:34:b6,src=aa:55:aa:55:00:00,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=17,tos=0,ttl=64,frag=0x40),udp(src=0,dst=4789,csum=0x0),vxlan(flags=0x8000000,vni=0x7b)),out_port(100)) > > + [Datapath actions: > > tnl_push(tnl_port(4789),header(size=50,type=4,eth(dst=f8:bc:12:44:34:b6,src=aa:55:aa:55:00:00,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=17,tos=0,ttl=64,frag=0x4000),udp(src=0,dst=4789,csum=0x0),vxlan(flags=0x8000000,vni=0x7b)),out_port(100)) > > ]) > > > > dnl Check VXLAN tunnel push set tunnel id by flow and checksum > > AT_CHECK([ovs-ofctl add-flow int-br "actions=set_tunnel:124,4"]) > > AT_CHECK([ovs-appctl ofproto/trace ovs-dummy > > 'in_port(2),eth_type(0x0800),ipv4(src=1.1.3.88,dst=1.1.3.112,proto=47,tos=0,ttl=64,frag=no)'], > > [0], [stdout]) > > AT_CHECK([tail -1 stdout], [0], > > - [Datapath actions: > > tnl_push(tnl_port(4789),header(size=50,type=4,eth(dst=f8:bc:12:44:34:b7,src=aa:55:aa:55:00:00,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.93,proto=17,tos=0,ttl=64,frag=0x40),udp(src=0,dst=4789,csum=0xffff),vxlan(flags=0x8000000,vni=0x7c)),out_port(100)) > > + [Datapath actions: > > tnl_push(tnl_port(4789),header(size=50,type=4,eth(dst=f8:bc:12:44:34:b7,src=aa:55:aa:55:00:00,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.93,proto=17,tos=0,ttl=64,frag=0x4000),udp(src=0,dst=4789,csum=0xffff),vxlan(flags=0x8000000,vni=0x7c)),out_port(100)) > > ]) > > > > dnl Check GRE tunnel push > > AT_CHECK([ovs-ofctl add-flow int-br action=3]) > > AT_CHECK([ovs-appctl ofproto/trace ovs-dummy > > 'in_port(2),eth_type(0x0800),ipv4(src=1.1.3.88,dst=1.1.3.112,proto=47,tos=0,ttl=64,frag=no)'], > > [0], [stdout]) > > AT_CHECK([tail -1 stdout], [0], > > - [Datapath actions: > > tnl_push(tnl_port(3),header(size=42,type=3,eth(dst=f8:bc:12:44:34:b6,src=aa:55:aa:55:00:00,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=47,tos=0,ttl=64,frag=0x40),gre((flags=0x2000,proto=0x6558),key=0x1c8)),out_port(100)) > > + [Datapath actions: > > tnl_push(tnl_port(3),header(size=42,type=3,eth(dst=f8:bc:12:44:34:b6,src=aa:55:aa:55:00:00,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x2000,proto=0x6558),key=0x1c8)),out_port(100)) > > ]) > > > > dnl Check Geneve tunnel push > > AT_CHECK([ovs-ofctl add-flow int-br > > "actions=set_field:1.1.2.92->tun_dst,5"]) > > AT_CHECK([ovs-appctl ofproto/trace ovs-dummy > > 'in_port(2),eth_type(0x0800),ipv4(src=1.1.3.88,dst=1.1.3.112,proto=47,tos=0,ttl=64,frag=no)'], > > [0], [stdout]) > > AT_CHECK([tail -1 stdout], [0], > > - [Datapath actions: > > tnl_push(tnl_port(6081),header(size=50,type=5,eth(dst=f8:bc:12:44:34:b6,src=aa:55:aa:55:00:00,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=17,tos=0,ttl=64,frag=0x40),udp(src=0,dst=6081,csum=0x0),geneve(vni=0x7b)),out_port(100)) > > + [Datapath actions: > > tnl_push(tnl_port(6081),header(size=50,type=5,eth(dst=f8:bc:12:44:34:b6,src=aa:55:aa:55:00:00,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=17,tos=0,ttl=64,frag=0x4000),udp(src=0,dst=6081,csum=0x0),geneve(vni=0x7b)),out_port(100)) > > ]) > > > > dnl Check Geneve tunnel push with options > > @@ -105,7 +105,7 @@ AT_CHECK([ovs-ofctl add-tlv-map int-br > > "{class=0xffff,type=0x80,len=4}->tun_meta > > AT_CHECK([ovs-ofctl add-flow int-br > > "actions=set_field:1.1.2.92->tun_dst,set_field:0xa->tun_metadata0,5"]) > > AT_CHECK([ovs-appctl ofproto/trace ovs-dummy > > 'in_port(2),eth_type(0x0800),ipv4(src=1.1.3.88,dst=1.1.3.112,proto=47,tos=0,ttl=64,frag=no)'], > > [0], [stdout]) > > AT_CHECK([tail -1 stdout], [0], > > - [Datapath actions: > > tnl_push(tnl_port(6081),header(size=58,type=5,eth(dst=f8:bc:12:44:34:b6,src=aa:55:aa:55:00:00,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=17,tos=0,ttl=64,frag=0x40),udp(src=0,dst=6081,csum=0x0),geneve(crit,vni=0x7b,options({class=0xffff,type=0x80,len=4,0xa}))),out_port(100)) > > + [Datapath actions: > > tnl_push(tnl_port(6081),header(size=58,type=5,eth(dst=f8:bc:12:44:34:b6,src=aa:55:aa:55:00:00,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=17,tos=0,ttl=64,frag=0x4000),udp(src=0,dst=6081,csum=0x0),geneve(crit,vni=0x7b,options({class=0xffff,type=0x80,len=4,0xa}))),out_port(100)) > > ]) > > > > dnl Check decapsulation of GRE packet > > -- > > 2.1.3 > > > > > > -- > Regards, > > Dimitri. _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev