Hi,

This patch is based on Jan Scheurich's patch from previous e-mail in this 
thread. It fixes the PTAP system-userspace tests.
Here comes the patch:


This commit fixes PTAP system-userspace test and a typo
in packet-type-aware.at
---
 tests/packet-type-aware.at                  |   2 +-
 tests/system-userspace-packet-type-aware.at | 101 ++++++++++++++--------------
 2 files changed, 52 insertions(+), 51 deletions(-)

diff --git a/tests/packet-type-aware.at b/tests/packet-type-aware.at
index 578126ed8..110407857 100644
--- a/tests/packet-type-aware.at
+++ b/tests/packet-type-aware.at
@@ -63,7 +63,7 @@ AT_SETUP([ptap - triangle bridge setup with L2 and L3 GRE 
tunnels])
 #      1021   br-in1      gre-12_l3   legacy-l3         same
 #      1030   br-in1      gre-13      legacy-l2   br-in3 3010 (l2)
 #      2010   br-in2      gre-21      ptap        br-in1 1020 (l2), 1021 (l3)
-#      2030   br-in2      gre-13      ptap        br-in3 3020 (l2), 3021 (l3)
+#      2030   br-in2      gre-23      ptap        br-in3 3020 (l2), 3021 (l3)
 #      3010   br-in1      gre-31      legacy-l2   br-in1 1030 (l2)
 #      3020   br-in1      gre-32      legacy-l2   br-in2 2010 (ptap)
 #      3021   br-in1      gre-32_l3   legacy-l3         same
diff --git a/tests/system-userspace-packet-type-aware.at 
b/tests/system-userspace-packet-type-aware.at
index 8ecde6648..ee7ad6eb7 100644
--- a/tests/system-userspace-packet-type-aware.at
+++ b/tests/system-userspace-packet-type-aware.at
@@ -26,15 +26,15 @@ AT_SETUP([ptap - triangle bridge setup with L2 and L3 GRE 
tunnels])
 #       +--------------------------------------------------------+
 #"
 #   GRE tunnel ports:
-#      No     Bridge      Name        Type        Remote bridge & ports
+#      No     Bridge      Name        Packet-type Remote bridge & ports
 #     -----------------------------------------------------------------------
-#      1020   br-in1      gre-12      l2          br-in2 2010 (versatile)
+#      1020   br-in1      gre-12      l2          br-in2 2010 (ptap)
 #      1021   br-in1      gre-12_l3   l3                same
 #      1030   br-in1      gre-13      l2          br-in3 3010 (l2)
-#      2010   br-in2      gre-21      versatile   br-in1 1020 (l2), 1021 (l3)
-#      2030   br-in2      gre-13      versatile   br-in3 3020 (l2), 3021 (l3)
+#      2010   br-in2      gre-21      ptap        br-in1 1020 (l2), 1021 (l3)
+#      2030   br-in2      gre-23      ptap        br-in3 3020 (l2), 3021 (l3)
 #      3010   br-in1      gre-31      l2          br-in1 1030 (l2)
-#      3020   br-in1      gre-32      l2          br-in2 2010 (versatile)
+#      3020   br-in1      gre-32      l2          br-in2 2010 (ptap)
 #      3021   br-in1      gre-32_l3   l3                same
 
 
@@ -72,7 +72,7 @@ AT_CHECK([
     ovs-vsctl add-br br-in1 -- \
         set bridge br-in1 datapath_type=netdev fail-mode=standalone
     ovs-vsctl add-br br-in2 -- \
-        set bridge br-in2 datapath_type=netdev fail-mode=standalone 
other-config:legacy-l3-pipeline=true
+        set bridge br-in2 datapath_type=netdev fail-mode=standalone
     ovs-vsctl add-br br-in3 -- \
         set bridge br-in3 datapath_type=netdev fail-mode=standalone
     ovs-vsctl add-br br-p1 -- \
@@ -113,21 +113,21 @@ AT_CHECK([
     ovs-vsctl add-port br-in1 gre12 -- \
         set interface gre12 type=gre options:remote_ip=10.0.0.2 
ofport_request=1020
     ovs-vsctl add-port br-in1 gre12_l3 -- \
-        set interface gre12_l3 type=gre options:remote_ip=10.0.0.2 
ofport_request=1021 options:layer3=true
+        set interface gre12_l3 type=gre options:remote_ip=10.0.0.2 
ofport_request=1021 options:packet_type=legacy_l3
     ovs-vsctl add-port br-in1 gre13 -- \
         set interface gre13 type=gre options:remote_ip=10.0.0.3 
ofport_request=1030
 
     ovs-vsctl add-port br-in2 gre21 -- \
-        set interface gre21 type=gre options:remote_ip=20.0.0.1 
ofport_request=2010
+        set interface gre21 type=gre options:remote_ip=20.0.0.1 
ofport_request=2010 options:packet_type=ptap
     ovs-vsctl add-port br-in2 gre23 -- \
-        set interface gre23 type=gre options:remote_ip=20.0.0.3 
ofport_request=2030
+        set interface gre23 type=gre options:remote_ip=20.0.0.3 
ofport_request=2030 options:packet_type=ptap
 
     ovs-vsctl add-port br-in3 gre31 -- \
         set interface gre31 type=gre options:remote_ip=30.0.0.1 
ofport_request=3010
     ovs-vsctl add-port br-in3 gre32 -- \
         set interface gre32 type=gre options:remote_ip=30.0.0.2 
ofport_request=3020
     ovs-vsctl add-port br-in3 gre32_l3 -- \
-        set interface gre32_l3 type=gre options:remote_ip=30.0.0.2 
ofport_request=3021 options:layer3=true
+        set interface gre32_l3 type=gre options:remote_ip=30.0.0.2 
ofport_request=3021 options:packet_type=legacy_l3
 ], [0], [stdout])
 
 AT_CHECK([
@@ -262,19 +262,19 @@ AT_CHECK([
     br-in1:
         br-in1 65534/2: (tap)
         gre12 1020/14: (gre: remote_ip=10.0.0.2)
-        gre12_l3 1021/14: (gre: layer3=true, remote_ip=10.0.0.2)
+        gre12_l3 1021/14: (gre: packet_type=legacy_l3, remote_ip=10.0.0.2)
         gre13 1030/14: (gre: remote_ip=10.0.0.3)
         ovs-n1 10/15: (system)
     br-in2:
         br-in2 65534/3: (tap)
-        gre21 2010/14: (gre: remote_ip=20.0.0.1)
-        gre23 2030/14: (gre: remote_ip=20.0.0.3)
+        gre21 2010/14: (gre: packet_type=ptap, remote_ip=20.0.0.1)
+        gre23 2030/14: (gre: packet_type=ptap, remote_ip=20.0.0.3)
         ovs-n2 20/16: (system)
     br-in3:
         br-in3 65534/4: (tap)
         gre31 3010/14: (gre: remote_ip=30.0.0.1)
         gre32 3020/14: (gre: remote_ip=30.0.0.2)
-        gre32_l3 3021/14: (gre: layer3=true, remote_ip=30.0.0.2)
+        gre32_l3 3021/14: (gre: packet_type=legacy_l3, remote_ip=30.0.0.2)
         ovs-n3 30/17: (system)
     br-p1:
         br-p1 65534/5: (tap)
@@ -320,9 +320,9 @@ AT_CHECK([
 AT_CHECK([
     ovs-ofctl dump-flows br-in2 | ofctl_strip | strip_n_packets | 
strip_n_bytes | sort | grep actions
 ], [0], [dnl
- packet_type=(0,0),ip,nw_dst=192.168.10.10 actions=output:2010
- packet_type=(0,0),ip,nw_dst=192.168.10.20 
actions=mod_dl_dst:aa:55:aa:55:00:02,output:20
- packet_type=(0,0),ip,nw_dst=192.168.10.30 actions=output:2010
+ ip,nw_dst=192.168.10.10 actions=output:2010
+ ip,nw_dst=192.168.10.20 actions=mod_dl_dst:aa:55:aa:55:00:02,output:20
+ ip,nw_dst=192.168.10.30 actions=output:2010
  packet_type=(1,0x800),nw_dst=192.168.10.10 actions=output:2010
  packet_type=(1,0x800),nw_dst=192.168.10.30 actions=output:2030
 ])
@@ -337,6 +337,7 @@ AT_CHECK([
 
 
 # Clear up megaflow cache
+sleep 10
 
 # Ping between N1 and N3, via the L2 GRE tunnel between br-in1 and br-in3
 NS_CHECK_EXEC([ns1], [ping -q -c 3 -i 0.3 -w 2 $N3_IP | FORMAT_PING], [0], [dnl
@@ -348,19 +349,19 @@ sleep 1
 AT_CHECK([
     ovs-appctl dpctl/dump-flows | strip_used | grep -v ipv6 | grep -v arp |sort
 ], [0], [flow-dump from non-dpdk interfaces:
-recirc_id(0),in_port(10),eth(dst=aa:55:00:00:00:03),eth_type(0x0800),ipv4(src=10.0.0.1,dst=10.0.0.3,proto=47,frag=no),
 packets:2, bytes:272, used:0.0s, 
actions:set(ipv4(src=30.0.0.1,dst=30.0.0.3)),tnl_pop(14)
-recirc_id(0),in_port(11),eth(dst=aa:55:00:00:00:03),eth_type(0x0800),ipv4(frag=no),
 packets:2, bytes:272, used:0.0s, actions:13
-recirc_id(0),in_port(12),eth(dst=aa:55:00:00:00:01),eth_type(0x0800),ipv4(frag=no),
 packets:2, bytes:244, used:0.0s, actions:11
-recirc_id(0),in_port(13),eth(dst=aa:55:00:00:00:02),eth_type(0x0800),ipv4(frag=no),
 packets:2, bytes:244, used:0.0s, actions:12
-recirc_id(0),in_port(15),eth_type(0x0800),ipv4(dst=192.168.10.30,tos=0/0x3,frag=no),
 packets:2, bytes:196, used:0.0s, 
actions:tnl_push(tnl_port(14),header(size=38,type=3,eth(dst=aa:55:00:00:00:03,src=aa:55:00:00:00:01,dl_type=0x0800),ipv4(src=10.0.0.1,dst=10.0.0.3,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x0,proto=0x6558))),out_port(5))
-recirc_id(0),in_port(17),eth_type(0x0800),ipv4(dst=192.168.10.10,tos=0/0x3,frag=no),
 packets:2, bytes:196, used:0.0s, 
actions:pop_eth,tnl_push(tnl_port(14),header(size=38,type=3,eth(dst=aa:55:00:00:00:02,src=aa:55:00:00:00:03,dl_type=0x0800),ipv4(src=30.0.0.3,dst=30.0.0.2,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x0,proto=0x800))),out_port(7))
-recirc_id(0),in_port(5),eth_type(0x0800),ipv4(frag=no), packets:2, bytes:272, 
used:0.0s, actions:8
-recirc_id(0),in_port(6),eth_type(0x0800),ipv4(frag=no), packets:2, bytes:244, 
used:0.0s, actions:9
-recirc_id(0),in_port(7),eth_type(0x0800),ipv4(frag=no), packets:2, bytes:244, 
used:0.0s, actions:10
-recirc_id(0),in_port(8),eth(dst=aa:55:00:00:00:01),eth_type(0x0800),ipv4(src=20.0.0.2,dst=20.0.0.1,proto=47,frag=no),
 packets:2, bytes:244, used:0.0s, 
actions:set(ipv4(src=10.0.0.2,dst=10.0.0.1)),tnl_pop(14)
-recirc_id(0),in_port(9),eth(dst=aa:55:00:00:00:02),eth_type(0x0800),ipv4(src=30.0.0.3,dst=30.0.0.2,proto=47,frag=no),
 packets:2, bytes:244, used:0.0s, 
actions:set(ipv4(src=20.0.0.3,dst=20.0.0.2)),tnl_pop(14)
-tunnel(src=10.0.0.2,dst=10.0.0.1,flags(-df-csum)),recirc_id(0),in_port(14),packet_type(ns=1,id=0x800),eth_type(0x0800),ipv4(dst=192.168.10.10,frag=no),
 packets:2, bytes:168, used:0.0s, 
actions:push_eth(src=00:00:00:00:00:00,dst=aa:55:aa:55:00:01),15
-tunnel(src=20.0.0.3,dst=20.0.0.2,flags(-df-csum)),recirc_id(0),in_port(14),packet_type(ns=1,id=0x800),eth_type(0x0800),ipv4(dst=192.168.10.10,tos=0/0x3,frag=no),
 packets:2, bytes:168, used:0.0s, 
actions:tnl_push(tnl_port(14),header(size=38,type=3,eth(dst=aa:55:00:00:00:01,src=aa:55:00:00:00:02,dl_type=0x0800),ipv4(src=20.0.0.2,dst=20.0.0.1,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x0,proto=0x800))),out_port(6))
+recirc_id(0),in_port(10),packet_type(ns=0,id=0),eth(dst=aa:55:00:00:00:03),eth_type(0x0800),ipv4(src=10.0.0.1,dst=10.0.0.3,proto=47,frag=no),
 packets:2, bytes:272, used:0.0s, 
actions:set(ipv4(src=30.0.0.1,dst=30.0.0.3)),tnl_pop(14)
+recirc_id(0),in_port(11),packet_type(ns=0,id=0),eth(dst=aa:55:00:00:00:03),eth_type(0x0800),ipv4(frag=no),
 packets:2, bytes:272, used:0.0s, actions:13
+recirc_id(0),in_port(12),packet_type(ns=0,id=0),eth(dst=aa:55:00:00:00:01),eth_type(0x0800),ipv4(frag=no),
 packets:2, bytes:244, used:0.0s, actions:11
+recirc_id(0),in_port(13),packet_type(ns=0,id=0),eth(dst=aa:55:00:00:00:02),eth_type(0x0800),ipv4(frag=no),
 packets:2, bytes:244, used:0.0s, actions:12
+recirc_id(0),in_port(15),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(dst=192.168.10.30,tos=0/0x3,frag=no),
 packets:2, bytes:196, used:0.0s, 
actions:tnl_push(tnl_port(14),header(size=38,type=3,eth(dst=aa:55:00:00:00:03,src=aa:55:00:00:00:01,dl_type=0x0800),ipv4(src=10.0.0.1,dst=10.0.0.3,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x0,proto=0x6558))),out_port(5))
+recirc_id(0),in_port(17),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(dst=192.168.10.10,tos=0/0x3,frag=no),
 packets:2, bytes:196, used:0.0s, 
actions:pop_eth,tnl_push(tnl_port(14),header(size=38,type=3,eth(dst=aa:55:00:00:00:02,src=aa:55:00:00:00:03,dl_type=0x0800),ipv4(src=30.0.0.3,dst=30.0.0.2,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x0,proto=0x800))),out_port(7))
+recirc_id(0),in_port(5),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), 
packets:2, bytes:272, used:0.0s, actions:8
+recirc_id(0),in_port(6),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), 
packets:2, bytes:244, used:0.0s, actions:9
+recirc_id(0),in_port(7),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), 
packets:2, bytes:244, used:0.0s, actions:10
+recirc_id(0),in_port(8),packet_type(ns=0,id=0),eth(dst=aa:55:00:00:00:01),eth_type(0x0800),ipv4(src=20.0.0.2,dst=20.0.0.1,proto=47,frag=no),
 packets:2, bytes:244, used:0.0s, 
actions:set(ipv4(src=10.0.0.2,dst=10.0.0.1)),tnl_pop(14)
+recirc_id(0),in_port(9),packet_type(ns=0,id=0),eth(dst=aa:55:00:00:00:02),eth_type(0x0800),ipv4(src=30.0.0.3,dst=30.0.0.2,proto=47,frag=no),
 packets:2, bytes:244, used:0.0s, 
actions:set(ipv4(src=20.0.0.3,dst=20.0.0.2)),tnl_pop(14)
+tunnel(src=10.0.0.2,dst=10.0.0.1,flags(-df-csum)),recirc_id(0),in_port(14),packet_type(ns=1,id=0x800),ipv4(dst=192.168.10.10,frag=no),
 packets:2, bytes:168, used:0.0s, 
actions:push_eth(src=00:00:00:00:00:00,dst=aa:55:aa:55:00:01),15
+tunnel(src=20.0.0.3,dst=20.0.0.2,flags(-df-csum)),recirc_id(0),in_port(14),packet_type(ns=1,id=0x800),ipv4(dst=192.168.10.10,tos=0/0x3,frag=no),
 packets:2, bytes:168, used:0.0s, 
actions:tnl_push(tnl_port(14),header(size=38,type=3,eth(dst=aa:55:00:00:00:01,src=aa:55:00:00:00:02,dl_type=0x0800),ipv4(src=20.0.0.2,dst=20.0.0.1,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x0,proto=0x800))),out_port(6))
 
tunnel(src=30.0.0.1,dst=30.0.0.3,flags(-df-csum)),recirc_id(0),in_port(14),packet_type(ns=0,id=0),eth(dst=aa:55:aa:55:00:03),eth_type(0x0800),ipv4(dst=192.168.10.30,frag=no),
 packets:2, bytes:196, used:0.0s, actions:17
 ])
 
@@ -377,14 +378,14 @@ sleep 1
 AT_CHECK([
     ovs-appctl dpctl/dump-flows | strip_used | grep -v ipv6 | grep -v arp | 
sort
 ], [0], [flow-dump from non-dpdk interfaces:
-recirc_id(0),in_port(11),eth(dst=aa:55:00:00:00:02),eth_type(0x0800),ipv4(frag=no),
 packets:2, bytes:272, used:0.0s, actions:12
-recirc_id(0),in_port(12),eth(dst=aa:55:00:00:00:01),eth_type(0x0800),ipv4(frag=no),
 packets:2, bytes:272, used:0.0s, actions:11
-recirc_id(0),in_port(15),eth_type(0x0800),ipv4(dst=192.168.10.20,tos=0/0x3,frag=no),
 packets:2, bytes:196, used:0.0s, 
actions:tnl_push(tnl_port(14),header(size=38,type=3,eth(dst=aa:55:00:00:00:02,src=aa:55:00:00:00:01,dl_type=0x0800),ipv4(src=10.0.0.1,dst=10.0.0.2,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x0,proto=0x6558))),out_port(5))
+recirc_id(0),in_port(11),packet_type(ns=0,id=0),eth(dst=aa:55:00:00:00:02),eth_type(0x0800),ipv4(frag=no),
 packets:2, bytes:272, used:0.0s, actions:12
+recirc_id(0),in_port(12),packet_type(ns=0,id=0),eth(dst=aa:55:00:00:00:01),eth_type(0x0800),ipv4(frag=no),
 packets:2, bytes:272, used:0.0s, actions:11
+recirc_id(0),in_port(15),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(dst=192.168.10.20,tos=0/0x3,frag=no),
 packets:2, bytes:196, used:0.0s, 
actions:tnl_push(tnl_port(14),header(size=38,type=3,eth(dst=aa:55:00:00:00:02,src=aa:55:00:00:00:01,dl_type=0x0800),ipv4(src=10.0.0.1,dst=10.0.0.2,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x0,proto=0x6558))),out_port(5))
 
recirc_id(0),in_port(16),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(dst=192.168.10.10,tos=0/0x3,frag=no),
 packets:2, bytes:196, used:0.0s, 
actions:tnl_push(tnl_port(14),header(size=38,type=3,eth(dst=aa:55:00:00:00:01,src=aa:55:00:00:00:02,dl_type=0x0800),ipv4(src=20.0.0.2,dst=20.0.0.1,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x0,proto=0x6558))),out_port(6))
-recirc_id(0),in_port(5),eth_type(0x0800),ipv4(frag=no), packets:2, bytes:272, 
used:0.0s, actions:8
-recirc_id(0),in_port(6),eth_type(0x0800),ipv4(frag=no), packets:2, bytes:272, 
used:0.0s, actions:9
-recirc_id(0),in_port(8),eth(dst=aa:55:00:00:00:01),eth_type(0x0800),ipv4(src=20.0.0.2,dst=20.0.0.1,proto=47,frag=no),
 packets:2, bytes:272, used:0.0s, 
actions:set(ipv4(src=10.0.0.2,dst=10.0.0.1)),tnl_pop(14)
-recirc_id(0),in_port(9),eth(dst=aa:55:00:00:00:02),eth_type(0x0800),ipv4(src=10.0.0.1,dst=10.0.0.2,proto=47,frag=no),
 packets:2, bytes:272, used:0.0s, 
actions:set(ipv4(src=20.0.0.1,dst=20.0.0.2)),tnl_pop(14)
+recirc_id(0),in_port(5),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), 
packets:2, bytes:272, used:0.0s, actions:8
+recirc_id(0),in_port(6),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), 
packets:2, bytes:272, used:0.0s, actions:9
+recirc_id(0),in_port(8),packet_type(ns=0,id=0),eth(dst=aa:55:00:00:00:01),eth_type(0x0800),ipv4(src=20.0.0.2,dst=20.0.0.1,proto=47,frag=no),
 packets:2, bytes:272, used:0.0s, 
actions:set(ipv4(src=10.0.0.2,dst=10.0.0.1)),tnl_pop(14)
+recirc_id(0),in_port(9),packet_type(ns=0,id=0),eth(dst=aa:55:00:00:00:02),eth_type(0x0800),ipv4(src=10.0.0.1,dst=10.0.0.2,proto=47,frag=no),
 packets:2, bytes:272, used:0.0s, 
actions:set(ipv4(src=20.0.0.1,dst=20.0.0.2)),tnl_pop(14)
 
tunnel(src=10.0.0.2,dst=10.0.0.1,flags(-df-csum)),recirc_id(0),in_port(14),packet_type(ns=0,id=0),eth(dst=aa:55:aa:55:00:01),eth_type(0x0800),ipv4(dst=192.168.10.10,frag=no),
 packets:2, bytes:196, used:0.0s, actions:15
 
tunnel(src=20.0.0.1,dst=20.0.0.2,flags(-df-csum)),recirc_id(0),in_port(14),packet_type(ns=0,id=0),eth(dst=aa:55:aa:55:00:02),eth_type(0x0800),ipv4(dst=192.168.10.20,frag=no),
 packets:2, bytes:196, used:0.0s, actions:16
 ])
@@ -402,19 +403,19 @@ sleep 1
 AT_CHECK([
     ovs-appctl dpctl/dump-flows | strip_used | grep -v ipv6 | grep -v arp | 
sort
 ], [0], [flow-dump from non-dpdk interfaces:
-recirc_id(0),in_port(10),eth(dst=aa:55:00:00:00:03),eth_type(0x0800),ipv4(src=10.0.0.1,dst=10.0.0.3,proto=47,frag=no),
 packets:2, bytes:272, used:0.0s, 
actions:set(ipv4(src=30.0.0.1,dst=30.0.0.3)),tnl_pop(14)
-recirc_id(0),in_port(11),eth(dst=aa:55:00:00:00:03),eth_type(0x0800),ipv4(frag=no),
 packets:2, bytes:272, used:0.0s, actions:13
-recirc_id(0),in_port(12),eth(dst=aa:55:00:00:00:01),eth_type(0x0800),ipv4(frag=no),
 packets:2, bytes:244, used:0.0s, actions:11
-recirc_id(0),in_port(13),eth(dst=aa:55:00:00:00:02),eth_type(0x0800),ipv4(frag=no),
 packets:2, bytes:244, used:0.0s, actions:12
-recirc_id(0),in_port(15),eth_type(0x0800),ipv4(dst=192.168.10.30,tos=0/0x3,frag=no),
 packets:2, bytes:196, used:0.0s, 
actions:tnl_push(tnl_port(14),header(size=38,type=3,eth(dst=aa:55:00:00:00:03,src=aa:55:00:00:00:01,dl_type=0x0800),ipv4(src=10.0.0.1,dst=10.0.0.3,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x0,proto=0x6558))),out_port(5))
-recirc_id(0),in_port(17),eth_type(0x0800),ipv4(dst=192.168.10.10,tos=0/0x3,frag=no),
 packets:2, bytes:196, used:0.0s, 
actions:pop_eth,tnl_push(tnl_port(14),header(size=38,type=3,eth(dst=aa:55:00:00:00:02,src=aa:55:00:00:00:03,dl_type=0x0800),ipv4(src=30.0.0.3,dst=30.0.0.2,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x0,proto=0x800))),out_port(7))
-recirc_id(0),in_port(5),eth_type(0x0800),ipv4(frag=no), packets:2, bytes:272, 
used:0.0s, actions:8
-recirc_id(0),in_port(6),eth_type(0x0800),ipv4(frag=no), packets:2, bytes:244, 
used:0.0s, actions:9
-recirc_id(0),in_port(7),eth_type(0x0800),ipv4(frag=no), packets:2, bytes:244, 
used:0.0s, actions:10
-recirc_id(0),in_port(8),eth(dst=aa:55:00:00:00:01),eth_type(0x0800),ipv4(src=20.0.0.2,dst=20.0.0.1,proto=47,frag=no),
 packets:2, bytes:244, used:0.0s, 
actions:set(ipv4(src=10.0.0.2,dst=10.0.0.1)),tnl_pop(14)
-recirc_id(0),in_port(9),eth(dst=aa:55:00:00:00:02),eth_type(0x0800),ipv4(src=30.0.0.3,dst=30.0.0.2,proto=47,frag=no),
 packets:2, bytes:244, used:0.0s, 
actions:set(ipv4(src=20.0.0.3,dst=20.0.0.2)),tnl_pop(14)
-tunnel(src=10.0.0.2,dst=10.0.0.1,flags(-df-csum)),recirc_id(0),in_port(14),packet_type(ns=1,id=0x800),eth_type(0x0800),ipv4(dst=192.168.10.10,frag=no),
 packets:2, bytes:168, used:0.0s, 
actions:push_eth(src=00:00:00:00:00:00,dst=aa:55:aa:55:00:01),15
-tunnel(src=20.0.0.3,dst=20.0.0.2,flags(-df-csum)),recirc_id(0),in_port(14),packet_type(ns=1,id=0x800),eth_type(0x0800),ipv4(dst=192.168.10.10,tos=0/0x3,frag=no),
 packets:2, bytes:168, used:0.0s, 
actions:tnl_push(tnl_port(14),header(size=38,type=3,eth(dst=aa:55:00:00:00:01,src=aa:55:00:00:00:02,dl_type=0x0800),ipv4(src=20.0.0.2,dst=20.0.0.1,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x0,proto=0x800))),out_port(6))
+recirc_id(0),in_port(10),packet_type(ns=0,id=0),eth(dst=aa:55:00:00:00:03),eth_type(0x0800),ipv4(src=10.0.0.1,dst=10.0.0.3,proto=47,frag=no),
 packets:2, bytes:272, used:0.0s, 
actions:set(ipv4(src=30.0.0.1,dst=30.0.0.3)),tnl_pop(14)
+recirc_id(0),in_port(11),packet_type(ns=0,id=0),eth(dst=aa:55:00:00:00:03),eth_type(0x0800),ipv4(frag=no),
 packets:2, bytes:272, used:0.0s, actions:13
+recirc_id(0),in_port(12),packet_type(ns=0,id=0),eth(dst=aa:55:00:00:00:01),eth_type(0x0800),ipv4(frag=no),
 packets:2, bytes:244, used:0.0s, actions:11
+recirc_id(0),in_port(13),packet_type(ns=0,id=0),eth(dst=aa:55:00:00:00:02),eth_type(0x0800),ipv4(frag=no),
 packets:2, bytes:244, used:0.0s, actions:12
+recirc_id(0),in_port(15),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(dst=192.168.10.30,tos=0/0x3,frag=no),
 packets:2, bytes:196, used:0.0s, 
actions:tnl_push(tnl_port(14),header(size=38,type=3,eth(dst=aa:55:00:00:00:03,src=aa:55:00:00:00:01,dl_type=0x0800),ipv4(src=10.0.0.1,dst=10.0.0.3,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x0,proto=0x6558))),out_port(5))
+recirc_id(0),in_port(17),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(dst=192.168.10.10,tos=0/0x3,frag=no),
 packets:2, bytes:196, used:0.0s, 
actions:pop_eth,tnl_push(tnl_port(14),header(size=38,type=3,eth(dst=aa:55:00:00:00:02,src=aa:55:00:00:00:03,dl_type=0x0800),ipv4(src=30.0.0.3,dst=30.0.0.2,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x0,proto=0x800))),out_port(7))
+recirc_id(0),in_port(5),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), 
packets:2, bytes:272, used:0.0s, actions:8
+recirc_id(0),in_port(6),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), 
packets:2, bytes:244, used:0.0s, actions:9
+recirc_id(0),in_port(7),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), 
packets:2, bytes:244, used:0.0s, actions:10
+recirc_id(0),in_port(8),packet_type(ns=0,id=0),eth(dst=aa:55:00:00:00:01),eth_type(0x0800),ipv4(src=20.0.0.2,dst=20.0.0.1,proto=47,frag=no),
 packets:2, bytes:244, used:0.0s, 
actions:set(ipv4(src=10.0.0.2,dst=10.0.0.1)),tnl_pop(14)
+recirc_id(0),in_port(9),packet_type(ns=0,id=0),eth(dst=aa:55:00:00:00:02),eth_type(0x0800),ipv4(src=30.0.0.3,dst=30.0.0.2,proto=47,frag=no),
 packets:2, bytes:244, used:0.0s, 
actions:set(ipv4(src=20.0.0.3,dst=20.0.0.2)),tnl_pop(14)
+tunnel(src=10.0.0.2,dst=10.0.0.1,flags(-df-csum)),recirc_id(0),in_port(14),packet_type(ns=1,id=0x800),ipv4(dst=192.168.10.10,frag=no),
 packets:2, bytes:168, used:0.0s, 
actions:push_eth(src=00:00:00:00:00:00,dst=aa:55:aa:55:00:01),15
+tunnel(src=20.0.0.3,dst=20.0.0.2,flags(-df-csum)),recirc_id(0),in_port(14),packet_type(ns=1,id=0x800),ipv4(dst=192.168.10.10,tos=0/0x3,frag=no),
 packets:2, bytes:168, used:0.0s, 
actions:tnl_push(tnl_port(14),header(size=38,type=3,eth(dst=aa:55:00:00:00:01,src=aa:55:00:00:00:02,dl_type=0x0800),ipv4(src=20.0.0.2,dst=20.0.0.1,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x0,proto=0x800))),out_port(6))
 
tunnel(src=30.0.0.1,dst=30.0.0.3,flags(-df-csum)),recirc_id(0),in_port(14),packet_type(ns=0,id=0),eth(dst=aa:55:aa:55:00:03),eth_type(0x0800),ipv4(dst=192.168.10.30,frag=no),
 packets:2, bytes:196, used:0.0s, actions:17
 ])
 
-- 
2.11.0



> -----Original Message-----
> From: [email protected] 
> [mailto:[email protected]] On Behalf Of Zoltán Balogh
> Sent: Tuesday, June 20, 2017 6:28 PM
> To: Jan Scheurich <[email protected]>; Ben Pfaff <[email protected]>; 
> [email protected]
> Subject: Re: [ovs-dev] [PATCH v2 12/12] work on packet aware test
> 
> From: Jan Scheurich <[email protected]>
> 
> Re-introduced packet-type-aware unit tests
> 
> Reverted test with triangular bridge setup to using patch ports to
> avoid dependency on veth ports and root privilidges.
> 
> Adapted to changes in Ben's ptap series. Dependent on patches for
> using port names in datapath flows.
> 
> Signed-off-by: Ben Pfaff <[email protected]>
> Signed-off-by: Jan Scheurich <[email protected]>
> ---
>  tests/packet-type-aware.at | 342 
> ++++++++++++++++++++-------------------------
>  1 file changed, 155 insertions(+), 187 deletions(-)
> 
> diff --git a/tests/packet-type-aware.at b/tests/packet-type-aware.at
> index 0aaeffa..49dcc60 100644
> --- a/tests/packet-type-aware.at
> +++ b/tests/packet-type-aware.at
> @@ -33,10 +33,6 @@ AT_CLEANUP
> 
>  AT_SETUP([ptap - triangle bridge setup with L2 and L3 GRE tunnels])
> 
> -# Always skip this test, for now, until it is revised to use patch
> -# ports in place of veth devices.
> -AT_SKIP_IF([:])
> -
>  ########################
>  # GRE tunneling test setup for PTAP bridge
>  #
> @@ -61,126 +57,108 @@ AT_SKIP_IF([:])
>  #       +--------------------------------------------------------+
>  #"
>  #   GRE tunnel ports:
> -#      No     Bridge      Name        Type        Remote bridge & ports
> +#      No     Bridge      Name        Packet-type Remote bridge & ports
>  #     -----------------------------------------------------------------------
> -#      1020   br-in1      gre-12      l2          br-in2 2010 (versatile)
> -#      1021   br-in1      gre-12_l3   l3                same
> -#      1030   br-in1      gre-13      l2          br-in3 3010 (l2)
> -#      2010   br-in2      gre-21      versatile   br-in1 1020 (l2), 1021 (l3)
> -#      2030   br-in2      gre-13      versatile   br-in3 3020 (l2), 3021 (l3)
> -#      3010   br-in1      gre-31      l2          br-in1 1030 (l2)
> -#      3020   br-in1      gre-32      l2          br-in2 2010 (versatile)
> -#      3021   br-in1      gre-32_l3   l3                same
> -
> -
> -OVS_VSWITCHD_START([])
> +#      1020   br-in1      gre-12      legacy-l2   br-in2 2010 (ptap)
> +#      1021   br-in1      gre-12_l3   legacy-l3         same
> +#      1030   br-in1      gre-13      legacy-l2   br-in3 3010 (l2)
> +#      2010   br-in2      gre-21      ptap        br-in1 1020 (l2), 1021 (l3)
> +#      2030   br-in2      gre-13      ptap        br-in3 3020 (l2), 3021 (l3)
> +#      3010   br-in1      gre-31      legacy-l2   br-in1 1030 (l2)
> +#      3020   br-in1      gre-32      legacy-l2   br-in2 2010 (ptap)
> +#      3021   br-in1      gre-32_l3   legacy-l3         same
> 
>  HWADDR_BRP1=aa:55:00:00:00:01
>  HWADDR_BRP2=aa:55:00:00:00:02
>  HWADDR_BRP3=aa:55:00:00:00:03
> 
> -dnl Create veth ports to connect br0 with br-p1, br-p2 and br-p3
> -AT_CHECK([ip link add p1-0 type veth peer name p0-1])
> -AT_CHECK([ip link set p1-0 up])
> -AT_CHECK([ip link set p0-1 up])
> -AT_CHECK([ip link set dev p1-0 mtu 3300])
> -AT_CHECK([ip link set dev p0-1 mtu 3300])
> -on_exit 'ip link del p0-1'
> -
> -AT_CHECK([ip link add p2-0 type veth peer name p0-2])
> -AT_CHECK([ip link set p2-0 up])
> -AT_CHECK([ip link set p0-2 up])
> -AT_CHECK([ip link set dev p2-0 mtu 3300])
> -AT_CHECK([ip link set dev p0-2 mtu 3300])
> -on_exit 'ip link del p0-2'
> -
> -AT_CHECK([ip link add p3-0 type veth peer name p0-3])
> -AT_CHECK([ip link set p3-0 up])
> -AT_CHECK([ip link set p0-3 up])
> -AT_CHECK([ip link set dev p3-0 mtu 3300])
> -AT_CHECK([ip link set dev p0-3 mtu 3300])
> -on_exit 'ip link del p0-3'
> +OVS_VSWITCHD_START([dnl
> +    -- add-br br-in1 \
> +    -- set bridge br-in1 datapath_type=dummy fail-mode=secure \
> +    -- add-br br-in2 \
> +    -- set bridge br-in2 datapath_type=dummy fail-mode=secure \
> +    -- add-br br-in3 \
> +    -- set bridge br-in3 datapath_type=dummy fail-mode=secure \
> +    -- add-br br-p1 -- \
> +    -- set bridge br-p1 datapath_type=dummy fail-mode=secure 
> other-config:hwaddr=\"$HWADDR_BRP1\" \
> +    -- add-br br-p2 -- \
> +    -- set bridge br-p2 datapath_type=dummy fail-mode=secure 
> other-config:hwaddr=\"$HWADDR_BRP2\" \
> +    -- add-br br-p3 -- \
> +    -- set bridge br-p3 datapath_type=dummy fail-mode=secure 
> other-config:hwaddr=\"$HWADDR_BRP3\" \
> +    -- add-port br-p1 p1-0 \
> +    -- set interface p1-0 type=patch options:peer=p0-1 ofport_request=2 \
> +    -- add-port br-p2 p2-0 \
> +    -- set interface p2-0 type=patch options:peer=p0-2 ofport_request=2 \
> +    -- add-port br-p3 p3-0 \
> +    -- set interface p3-0 type=patch options:peer=p0-3 ofport_request=2 \
> +    -- add-port br0 p0-1 \
> +    -- set interface p0-1 type=patch options:peer=p1-0 ofport_request=10 \
> +    -- add-port br0 p0-2 \
> +    -- set interface p0-2 type=patch options:peer=p2-0 ofport_request=20 \
> +    -- add-port br0 p0-3 \
> +    -- set interface p0-3 type=patch options:peer=p3-0 ofport_request=30 \
> +    -- add-port br-in1 gre12 \
> +    -- set interface gre12 type=gre options:remote_ip=10.0.0.2 \
> +                           ofport_request=1020 \
> +    -- add-port br-in1 gre12_l3 \
> +    -- set interface gre12_l3 type=gre options:remote_ip=10.0.0.2 \
> +                           ofport_request=1021 options:packet_type=legacy_l3 
> \
> +    -- add-port br-in1 gre13 \
> +    -- set interface gre13 type=gre options:remote_ip=10.0.0.3 \
> +                           ofport_request=1030 \
> +    -- add-port br-in2 gre21 \
> +    -- set interface gre21 type=gre options:remote_ip=20.0.0.1 \
> +                           ofport_request=2010 options:packet_type=ptap \
> +    -- add-port br-in2 gre23 \
> +    -- set interface gre23 type=gre options:remote_ip=20.0.0.3 \
> +                           ofport_request=2030 options:packet_type=ptap \
> +    -- add-port br-in3 gre31 \
> +    -- set interface gre31 type=gre options:remote_ip=30.0.0.1 \
> +                           ofport_request=3010 \
> +    -- add-port br-in3 gre32 \
> +    -- set interface gre32 type=gre options:remote_ip=30.0.0.2 \
> +                           ofport_request=3020 \
> +    -- add-port br-in3 gre32_l3 \
> +    -- set interface gre32_l3 type=gre options:remote_ip=30.0.0.2 \
> +                           ofport_request=3021 options:packet_type=legacy_l3
> +])
> 
>  # Setup bridge infrastructure
>  AT_CHECK([
> -    ovs-vsctl add-br br-in1 -- \
> -        set bridge br-in1 datapath_type=dummy fail-mode=standalone
> -    ovs-vsctl add-br br-in2 -- \
> -        set bridge br-in2 datapath_type=dummy fail-mode=standalone 
> other-config:packet-type-aware=true
> -    ovs-vsctl add-br br-in3 -- \
> -        set bridge br-in3 datapath_type=dummy fail-mode=standalone
> -    ovs-vsctl add-br br-p1 -- \
> -        set bridge br-p1 datapath_type=dummy fail-mode=standalone 
> other-config:hwaddr=$HWADDR_BRP1
> -    ovs-vsctl add-br br-p2 -- \
> -        set bridge br-p2 datapath_type=dummy fail-mode=standalone 
> other-config:hwaddr=$HWADDR_BRP2
> -    ovs-vsctl add-br br-p3 -- \
> -        set bridge br-p3 datapath_type=dummy fail-mode=standalone 
> other-config:hwaddr=$HWADDR_BRP3
> -
> -    ovs-vsctl add-port br-p1 p1-0 -- set interface p1-0 ofport_request=2
> -    ovs-vsctl add-port br-p2 p2-0 -- set interface p2-0 ofport_request=2
> -    ovs-vsctl add-port br-p3 p3-0 -- set interface p3-0 ofport_request=2
> -    ovs-vsctl add-port br0 p0-1 -- set interface p0-1 ofport_request=10
> -    ovs-vsctl add-port br0 p0-2 -- set interface p0-2 ofport_request=20
> -    ovs-vsctl add-port br0 p0-3 -- set interface p0-3 ofport_request=30
> -
>      # Populate the MAC table of br0
> -    ovs-ofctl del-flows br0
> -    ovs-ofctl add-flow br0 dl_dst=$HWADDR_BRP1,actions=10
> -    ovs-ofctl add-flow br0 dl_dst=$HWADDR_BRP2,actions=20
> -    ovs-ofctl add-flow br0 dl_dst=$HWADDR_BRP3,actions=30
> -
> -    ovs-ofctl del-flows br-in1
> -    ovs-ofctl del-flows br-in2
> -    ovs-ofctl del-flows br-in3
> -    ovs-ofctl del-flows br-p1
> -    ovs-ofctl del-flows br-p2
> +    ovs-ofctl del-flows br0 &&
> +    ovs-ofctl add-flow br0 dl_dst=$HWADDR_BRP1,actions=10 &&
> +    ovs-ofctl add-flow br0 dl_dst=$HWADDR_BRP2,actions=20 &&
> +    ovs-ofctl add-flow br0 dl_dst=$HWADDR_BRP3,actions=30 &&
> +
> +    ovs-ofctl del-flows br-in1 &&
> +    ovs-ofctl del-flows br-in2 &&
> +    ovs-ofctl del-flows br-in3 &&
> +    ovs-ofctl del-flows br-p1 &&
> +    ovs-ofctl del-flows br-p2 &&
>      ovs-ofctl del-flows br-p3
>  ], [0])
> 
> -# Get the MAC addresses of the tunnel end-point ports
> -#HWADDR_BRP1=$(ovs-ofctl show br-p1 | grep LOCAL | sed 's/.*addr://')
> -#HWADDR_BRP2=$(ovs-ofctl show br-p2 | grep LOCAL | sed 's/.*addr://')
> -#HWADDR_BRP3=$(ovs-ofctl show br-p3 | grep LOCAL | sed 's/.*addr://')
> -
>  ### Setup GRE tunnels
>  AT_CHECK([
> -    ovs-vsctl add-port br-in1 gre12 -- \
> -        set interface gre12 type=gre options:remote_ip=10.0.0.2 
> ofport_request=1020
> -    ovs-vsctl add-port br-in1 gre12_l3 -- \
> -        set interface gre12_l3 type=gre options:remote_ip=10.0.0.2 
> ofport_request=1021 options:layer3=true
> -    ovs-vsctl add-port br-in1 gre13 -- \
> -        set interface gre13 type=gre options:remote_ip=10.0.0.3 
> ofport_request=1030
> -
> -    ovs-vsctl add-port br-in2 gre21 -- \
> -        set interface gre21 type=gre options:remote_ip=20.0.0.1 
> ofport_request=2010
> -    ovs-vsctl add-port br-in2 gre23 -- \
> -        set interface gre23 type=gre options:remote_ip=20.0.0.3 
> ofport_request=2030
> -
> -    ovs-vsctl add-port br-in3 gre31 -- \
> -        set interface gre31 type=gre options:remote_ip=30.0.0.1 
> ofport_request=3010
> -    ovs-vsctl add-port br-in3 gre32 -- \
> -        set interface gre32 type=gre options:remote_ip=30.0.0.2 
> ofport_request=3020
> -    ovs-vsctl add-port br-in3 gre32_l3 -- \
> -        set interface gre32_l3 type=gre options:remote_ip=30.0.0.2 
> ofport_request=3021 options:layer3=true
> -
> -    ovs-appctl netdev-dummy/ip4addr br-p1 10.0.0.1/24
> -    ovs-appctl ovs/route/add 10.0.0.0/24 br-p1
> -    ovs-appctl tnl/arp/set br-p1 10.0.0.1 $HWADDR_BRP1
> -    ovs-appctl tnl/arp/set br-p1 10.0.0.2 $HWADDR_BRP2
> -    ovs-appctl tnl/arp/set br-p1 10.0.0.3 $HWADDR_BRP3
> -
> -    ovs-appctl netdev-dummy/ip4addr br-p2 20.0.0.2/24
> -    ovs-appctl ovs/route/add 20.0.0.0/24 br-p2
> -    ovs-appctl tnl/arp/set br-p2 20.0.0.1 $HWADDR_BRP1
> -    ovs-appctl tnl/arp/set br-p2 20.0.0.2 $HWADDR_BRP2
> -    ovs-appctl tnl/arp/set br-p2 20.0.0.3 $HWADDR_BRP3
> -
> -    ovs-appctl netdev-dummy/ip4addr br-p3 30.0.0.3/24
> -    ovs-appctl ovs/route/add 30.0.0.0/24 br-p3
> -    ovs-appctl tnl/arp/set br-p3 30.0.0.1 $HWADDR_BRP1
> -    ovs-appctl tnl/arp/set br-p3 30.0.0.2 $HWADDR_BRP2
> +    ovs-appctl netdev-dummy/ip4addr br-p1 10.0.0.1/24 &&
> +    ovs-appctl ovs/route/add 10.0.0.0/24 br-p1 &&
> +    ovs-appctl tnl/arp/set br-p1 10.0.0.1 $HWADDR_BRP1 &&
> +    ovs-appctl tnl/arp/set br-p1 10.0.0.2 $HWADDR_BRP2 &&
> +    ovs-appctl tnl/arp/set br-p1 10.0.0.3 $HWADDR_BRP3 &&
> +
> +    ovs-appctl netdev-dummy/ip4addr br-p2 20.0.0.2/24 &&
> +    ovs-appctl ovs/route/add 20.0.0.0/24 br-p2 &&
> +    ovs-appctl tnl/arp/set br-p2 20.0.0.1 $HWADDR_BRP1 &&
> +    ovs-appctl tnl/arp/set br-p2 20.0.0.2 $HWADDR_BRP2 &&
> +    ovs-appctl tnl/arp/set br-p2 20.0.0.3 $HWADDR_BRP3 &&
> +
> +    ovs-appctl netdev-dummy/ip4addr br-p3 30.0.0.3/24 &&
> +    ovs-appctl ovs/route/add 30.0.0.0/24 br-p3 &&
> +    ovs-appctl tnl/arp/set br-p3 30.0.0.1 $HWADDR_BRP1 &&
> +    ovs-appctl tnl/arp/set br-p3 30.0.0.2 $HWADDR_BRP2 &&
>      ovs-appctl tnl/arp/set br-p3 30.0.0.3 $HWADDR_BRP3
> -], [0], [stdout])
> +], [0], [ignore])
> 
>  AT_CHECK([
>      ovs-appctl ovs/route/show | grep User:
> @@ -192,7 +170,7 @@ User: 30.0.0.0/24 dev br-p3 SRC 30.0.0.3
> 
>  AT_CHECK([
>      ovs-appctl tnl/neigh/show | grep br-p | sort
> -], [0], [stdout])
> +], [0], [ignore])
> 
>  ### Flows in br-p<x>to twist TEP IP addresses in tunnel IP headers
>  AT_CHECK([
> @@ -237,12 +215,16 @@ N2_OFPORT=20
>  N3_OFPORT=30
> 
>  AT_CHECK([
> -    ovs-vsctl add-port br-in1 n1 -- \
> -        set interface n1 type=dummy ofport_request=$N1_OFPORT 
> options:tx_pcap=n1.pcap
> -    ovs-vsctl add-port br-in2 n2 -- \
> -        set interface n2 type=dummy ofport_request=$N2_OFPORT 
> options:tx_pcap=n2.pcap
> -    ovs-vsctl add-port br-in3 n3 -- \
> -        set interface n3 type=dummy ofport_request=$N3_OFPORT 
> options:tx_pcap=n3.pcap
> +ovs-vsctl \
> +    -- add-port br-in1 n1 \
> +    -- set interface n1 type=dummy ofport_request=$N1_OFPORT \
> +                                   options:tx_pcap=n1.pcap \
> +    -- add-port br-in2 n2 \
> +    -- set interface n2 type=dummy ofport_request=$N2_OFPORT \
> +                                   options:tx_pcap=n2.pcap \
> +    -- add-port br-in3 n3 \
> +    -- set interface n3 type=dummy ofport_request=$N3_OFPORT \
> +                                   options:tx_pcap=n3.pcap
>  ], [0])
> 
>  #N1_DPPORT=$(ovs-appctl dpif/show | grep "n1 10" | sed 
> 's|.*/\([[0-9]]*\):.*|\1|')
> @@ -251,39 +233,39 @@ AT_CHECK([
> 
>  ### Verify datapath configuration
>  AT_CHECK([
> -    ovs-appctl dpif/show | grep -v hit | sed 's/\t/    /g'
> +    ovs-appctl dpif/show | grep -v hit | sed 's/\t/    /g' | sed 
> 's./[[0-9]]\{1,\}..'
>  ], [0], [dnl
>      br-in1:
> -        br-in1 65534/101: (dummy-internal)
> -        gre12 1020/10: (gre: remote_ip=10.0.0.2)
> -        gre12_l3 1021/10: (gre: layer3=true, remote_ip=10.0.0.2)
> -        gre13 1030/10: (gre: remote_ip=10.0.0.3)
> -        n1 10/11: (dummy)
> +        br-in1 65534: (dummy-internal)
> +        gre12 1020: (gre: remote_ip=10.0.0.2)
> +        gre12_l3 1021: (gre: packet_type=legacy_l3, remote_ip=10.0.0.2)
> +        gre13 1030: (gre: remote_ip=10.0.0.3)
> +        n1 10: (dummy)
>      br-in2:
> -        br-in2 65534/102: (dummy-internal)
> -        gre21 2010/10: (gre: remote_ip=20.0.0.1)
> -        gre23 2030/10: (gre: remote_ip=20.0.0.3)
> -        n2 20/12: (dummy)
> +        br-in2 65534: (dummy-internal)
> +        gre21 2010: (gre: packet_type=ptap, remote_ip=20.0.0.1)
> +        gre23 2030: (gre: packet_type=ptap, remote_ip=20.0.0.3)
> +        n2 20: (dummy)
>      br-in3:
> -        br-in3 65534/103: (dummy-internal)
> -        gre31 3010/10: (gre: remote_ip=30.0.0.1)
> -        gre32 3020/10: (gre: remote_ip=30.0.0.2)
> -        gre32_l3 3021/10: (gre: layer3=true, remote_ip=30.0.0.2)
> -        n3 30/13: (dummy)
> +        br-in3 65534: (dummy-internal)
> +        gre31 3010: (gre: remote_ip=30.0.0.1)
> +        gre32 3020: (gre: remote_ip=30.0.0.2)
> +        gre32_l3 3021: (gre: packet_type=legacy_l3, remote_ip=30.0.0.2)
> +        n3 30: (dummy)
>      br-p1:
> -        br-p1 65534/1: (dummy-internal)
> -        p1-0 2/4: (system)
> +        br-p1 65534: (dummy-internal)
> +        p1-0 2/none: (patch: peer=p0-1)
>      br-p2:
> -        br-p2 65534/2: (dummy-internal)
> -        p2-0 2/5: (system)
> +        br-p2 65534: (dummy-internal)
> +        p2-0 2/none: (patch: peer=p0-2)
>      br-p3:
> -        br-p3 65534/3: (dummy-internal)
> -        p3-0 2/6: (system)
> +        br-p3 65534: (dummy-internal)
> +        p3-0 2/none: (patch: peer=p0-3)
>      br0:
> -        br0 65534/100: (dummy-internal)
> -        p0-1 10/7: (system)
> -        p0-2 20/8: (system)
> -        p0-3 30/9: (system)
> +        br0 65534: (dummy-internal)
> +        p0-1 10/none: (patch: peer=p1-0)
> +        p0-2 20/none: (patch: peer=p2-0)
> +        p0-3 30/none: (patch: peer=p3-0)
>  ])
> 
>  ### Test L3 forwarding flows
> @@ -314,9 +296,9 @@ AT_CHECK([
>  AT_CHECK([
>      ovs-ofctl dump-flows br-in2 | ofctl_strip | sort | grep actions
>  ], [0], [dnl
> - packet_type=(0,0),ip,nw_dst=192.168.10.10 actions=output:2010
> - packet_type=(0,0),ip,nw_dst=192.168.10.20 
> actions=mod_dl_dst:aa:55:aa:55:00:02,output:20
> - packet_type=(0,0),ip,nw_dst=192.168.10.30 actions=output:2010
> + ip,nw_dst=192.168.10.10 actions=output:2010
> + ip,nw_dst=192.168.10.20 actions=mod_dl_dst:aa:55:aa:55:00:02,output:20
> + ip,nw_dst=192.168.10.30 actions=output:2010
>   packet_type=(1,0x800),nw_dst=192.168.10.10 actions=output:2010
>   packet_type=(1,0x800),nw_dst=192.168.10.30 actions=output:2030
>  ])
> @@ -331,6 +313,8 @@ AT_CHECK([
> 
>  ### Inject ICMP Echo request test packets
> 
> +ovs-appctl vlog/set any:file:dbg
> +
>  # N1 to N3, via the L2 GRE tunnel between br-in1 and br-in3
>  AT_CHECK([
>      ovs-appctl netdev-dummy/receive n1
> 1e2ce92a669e3a6dd2099cab0800450000548a53400040011addc0a80a0ac0a80a1e08006f200a4d0001fc509a58000000002715020000000000
> 101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637
> @@ -340,13 +324,11 @@ AT_CHECK([
>  ovs-appctl time/warp 1000
> 
>  AT_CHECK([
> -    ovs-appctl dpctl/dump-flows dummy@ovs-dummy | strip_used | grep -v ipv6 
> | sort
> +    ovs-appctl dpctl/dump-flows --names dummy@ovs-dummy | strip_used | grep 
> -v ipv6 | sort
>  ], [0], [flow-dump from non-dpdk interfaces:
> -recirc_id(0),in_port(1),eth_type(0x0800),ipv4(frag=no), packets:1, 
> bytes:136, used:0.0s, actions:4
> -recirc_id(0),in_port(11),eth_type(0x0800),ipv4(dst=192.168.10.30,tos=0/0x3,frag=no),
>  packets:1, bytes:98,
> used:0.0s,
> actions:tnl_push(tnl_port(10),header(size=38,type=3,eth(dst=aa:55:00:00:00:03,src=aa:55:00:00:00:01,dl_type=0x0800),
> ipv4(src=10.0.0.1,dst=10.0.0.3,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x0,proto=0x6558))),out_port(1))
> -
> recirc_id(0),in_port(6),eth(dst=aa:55:00:00:00:03),eth_type(0x0800),ipv4(src=10.0.0.1,dst=10.0.0.3,proto=47,frag=no)
> , packets:1, bytes:136, used:0.0s, 
> actions:set(ipv4(src=30.0.0.1,dst=30.0.0.3)),tnl_pop(10)
> -recirc_id(0),in_port(7),eth(dst=aa:55:00:00:00:03),eth_type(0x0800),ipv4(frag=no),
>  packets:1, bytes:136, used:0.0s,
> actions:9
> -tunnel(src=30.0.0.1,dst=30.0.0.3,flags(-df-
> csum)),recirc_id(0),in_port(10),packet_type(ns=0,id=0),eth(dst=1e:2c:e9:2a:66:9e),eth_type(0x0800),ipv4(dst=192.168.
> 10.30,frag=no), packets:1, bytes:98, used:0.0s, 
> actions:set(eth(dst=aa:55:aa:55:00:03)),13
> +recirc_id(0),in_port(br-
> p1),packet_type(ns=0,id=0),eth(dst=aa:55:00:00:00:03),eth_type(0x0800),ipv4(src=10.0.0.1,dst=10.0.0.3,proto=47,frag=
> no), packets:1, bytes:136, used:0.0s, 
> actions:set(ipv4(src=30.0.0.1,dst=30.0.0.3)),tnl_pop(gre_sys)
> +recirc_id(0),in_port(n1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(dst=192.168.10.30,tos=0/0x3,frag=no),
> packets:1, bytes:98, used:0.0s,
> actions:tnl_push(tnl_port(gre_sys),header(size=38,type=3,eth(dst=aa:55:00:00:00:03,src=aa:55:00:00:00:01,dl_type=0x0
> 800),ipv4(src=10.0.0.1,dst=10.0.0.3,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x0,proto=0x6558))),out_port(br-
> p1))
> +tunnel(src=30.0.0.1,dst=30.0.0.3,flags(-df-
> csum)),recirc_id(0),in_port(gre_sys),packet_type(ns=0,id=0),eth(dst=1e:2c:e9:2a:66:9e),eth_type(0x0800),ipv4(dst=192
> .168.10.30,frag=no), packets:1, bytes:98, used:0.0s, 
> actions:set(eth(dst=aa:55:aa:55:00:03)),n3
>  ])
> 
>  # Clear up megaflow cache
> @@ -361,13 +343,11 @@ AT_CHECK([
>  ovs-appctl time/warp 1000
> 
>  AT_CHECK([
> -    ovs-appctl dpctl/dump-flows dummy@ovs-dummy | strip_used | grep -v ipv6 
> | sort
> +    ovs-appctl dpctl/dump-flows --names dummy@ovs-dummy | strip_used | grep 
> -v ipv6 | sort
>  ], [0], [flow-dump from non-dpdk interfaces:
> -recirc_id(0),in_port(1),eth_type(0x0800),ipv4(frag=no), packets:1, 
> bytes:136, used:0.0s, actions:4
> -recirc_id(0),in_port(11),eth_type(0x0800),ipv4(dst=192.168.10.20,tos=0/0x3,frag=no),
>  packets:1, bytes:98,
> used:0.0s,
> actions:tnl_push(tnl_port(10),header(size=38,type=3,eth(dst=aa:55:00:00:00:02,src=aa:55:00:00:00:01,dl_type=0x0800),
> ipv4(src=10.0.0.1,dst=10.0.0.2,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x0,proto=0x6558))),out_port(1))
> -
> recirc_id(0),in_port(5),eth(dst=aa:55:00:00:00:02),eth_type(0x0800),ipv4(src=10.0.0.1,dst=10.0.0.2,proto=47,frag=no)
> , packets:1, bytes:136, used:0.0s, 
> actions:set(ipv4(src=20.0.0.1,dst=20.0.0.2)),tnl_pop(10)
> -recirc_id(0),in_port(7),eth(dst=aa:55:00:00:00:02),eth_type(0x0800),ipv4(frag=no),
>  packets:1, bytes:136, used:0.0s,
> actions:8
> -tunnel(src=20.0.0.1,dst=20.0.0.2,flags(-df-
> csum)),recirc_id(0),in_port(10),packet_type(ns=0,id=0),eth(dst=46:1e:7d:1a:95:a1),eth_type(0x0800),ipv4(dst=192.168.
> 10.20,frag=no), packets:1, bytes:98, used:0.0s, 
> actions:set(eth(dst=aa:55:aa:55:00:02)),12
> +recirc_id(0),in_port(br-
> p1),packet_type(ns=0,id=0),eth(dst=aa:55:00:00:00:02),eth_type(0x0800),ipv4(src=10.0.0.1,dst=10.0.0.2,proto=47,frag=
> no), packets:1, bytes:136, used:0.0s, 
> actions:set(ipv4(src=20.0.0.1,dst=20.0.0.2)),tnl_pop(gre_sys)
> +recirc_id(0),in_port(n1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(dst=192.168.10.20,tos=0/0x3,frag=no),
> packets:1, bytes:98, used:0.0s,
> actions:tnl_push(tnl_port(gre_sys),header(size=38,type=3,eth(dst=aa:55:00:00:00:02,src=aa:55:00:00:00:01,dl_type=0x0
> 800),ipv4(src=10.0.0.1,dst=10.0.0.2,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x0,proto=0x6558))),out_port(br-
> p1))
> +tunnel(src=20.0.0.1,dst=20.0.0.2,flags(-df-
> csum)),recirc_id(0),in_port(gre_sys),packet_type(ns=0,id=0),eth(dst=46:1e:7d:1a:95:a1),eth_type(0x0800),ipv4(dst=192
> .168.10.20,frag=no), packets:1, bytes:98, used:0.0s, 
> actions:set(eth(dst=aa:55:aa:55:00:02)),n2
>  ])
> 
>  # Clear up megaflow cache
> @@ -382,13 +362,11 @@ AT_CHECK([
>  ovs-appctl time/warp 1000
> 
>  AT_CHECK([
> -    ovs-appctl dpctl/dump-flows dummy@ovs-dummy | strip_used | grep -v ipv6 
> | sort
> +    ovs-appctl dpctl/dump-flows --names dummy@ovs-dummy | strip_used | grep 
> -v ipv6 | sort
>  ], [0], [flow-dump from non-dpdk interfaces:
> -recirc_id(0),in_port(12),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(dst=192.168.10.10,tos=0/0x3,frag=no),
> packets:1, bytes:98, used:0.0s,
> actions:tnl_push(tnl_port(10),header(size=38,type=3,eth(dst=aa:55:00:00:00:01,src=aa:55:00:00:00:02,dl_type=0x0800),
> ipv4(src=20.0.0.2,dst=20.0.0.1,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x0,proto=0x6558))),out_port(2))
> -recirc_id(0),in_port(2),eth_type(0x0800),ipv4(frag=no), packets:1, 
> bytes:136, used:0.0s, actions:5
> -
> recirc_id(0),in_port(4),eth(dst=aa:55:00:00:00:01),eth_type(0x0800),ipv4(src=20.0.0.2,dst=20.0.0.1,proto=47,frag=no)
> , packets:1, bytes:136, used:0.0s, 
> actions:set(ipv4(src=10.0.0.2,dst=10.0.0.1)),tnl_pop(10)
> -recirc_id(0),in_port(8),eth(dst=aa:55:00:00:00:01),eth_type(0x0800),ipv4(frag=no),
>  packets:1, bytes:136, used:0.0s,
> actions:7
> -tunnel(src=10.0.0.2,dst=10.0.0.1,flags(-df-
> csum)),recirc_id(0),in_port(10),packet_type(ns=0,id=0),eth(dst=3a:6d:d2:09:9c:ab),eth_type(0x0800),ipv4(dst=192.168.
> 10.10,frag=no), packets:1, bytes:98, used:0.0s, 
> actions:set(eth(dst=aa:55:aa:55:00:01)),11
> +recirc_id(0),in_port(br-
> p2),packet_type(ns=0,id=0),eth(dst=aa:55:00:00:00:01),eth_type(0x0800),ipv4(src=20.0.0.2,dst=20.0.0.1,proto=47,frag=
> no), packets:1, bytes:136, used:0.0s, 
> actions:set(ipv4(src=10.0.0.2,dst=10.0.0.1)),tnl_pop(gre_sys)
> +recirc_id(0),in_port(n2),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(dst=192.168.10.10,tos=0/0x3,frag=no),
> packets:1, bytes:98, used:0.0s,
> actions:tnl_push(tnl_port(gre_sys),header(size=38,type=3,eth(dst=aa:55:00:00:00:01,src=aa:55:00:00:00:02,dl_type=0x0
> 800),ipv4(src=20.0.0.2,dst=20.0.0.1,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x0,proto=0x6558))),out_port(br-
> p2))
> +tunnel(src=10.0.0.2,dst=10.0.0.1,flags(-df-
> csum)),recirc_id(0),in_port(gre_sys),packet_type(ns=0,id=0),eth(dst=3a:6d:d2:09:9c:ab),eth_type(0x0800),ipv4(dst=192
> .168.10.10,frag=no), packets:1, bytes:98, used:0.0s, 
> actions:set(eth(dst=aa:55:aa:55:00:01)),n1
>  ])
> 
>  # Clear up megaflow cache
> @@ -403,17 +381,13 @@ AT_CHECK([
>  ovs-appctl time/warp 1000
> 
>  AT_CHECK([
> -    ovs-appctl dpctl/dump-flows dummy@ovs-dummy | strip_used | grep -v ipv6 
> | sort
> +    ovs-appctl dpctl/dump-flows --names dummy@ovs-dummy | strip_used | grep 
> -v ipv6 | sort
>  ], [0], [flow-dump from non-dpdk interfaces:
> -recirc_id(0),in_port(1),eth_type(0x0800),ipv4(frag=no), packets:1, 
> bytes:136, used:0.0s, actions:4
> -recirc_id(0),in_port(12),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(dst=192.168.10.30,tos=0/0x3,frag=no),
> packets:1, bytes:98, used:0.0s,
> actions:tnl_push(tnl_port(10),header(size=38,type=3,eth(dst=aa:55:00:00:00:01,src=aa:55:00:00:00:02,dl_type=0x0800),
> ipv4(src=20.0.0.2,dst=20.0.0.1,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x0,proto=0x6558))),out_port(2))
> -recirc_id(0),in_port(2),eth_type(0x0800),ipv4(frag=no), packets:1, 
> bytes:136, used:0.0s, actions:5
> -
> recirc_id(0),in_port(4),eth(dst=aa:55:00:00:00:01),eth_type(0x0800),ipv4(src=20.0.0.2,dst=20.0.0.1,proto=47,frag=no)
> , packets:1, bytes:136, used:0.0s, 
> actions:set(ipv4(src=10.0.0.2,dst=10.0.0.1)),tnl_pop(10)
> -
> recirc_id(0),in_port(6),eth(dst=aa:55:00:00:00:03),eth_type(0x0800),ipv4(src=10.0.0.1,dst=10.0.0.3,proto=47,frag=no)
> , packets:1, bytes:136, used:0.0s, 
> actions:set(ipv4(src=30.0.0.1,dst=30.0.0.3)),tnl_pop(10)
> -recirc_id(0),in_port(7),eth(dst=aa:55:00:00:00:03),eth_type(0x0800),ipv4(frag=no),
>  packets:1, bytes:136, used:0.0s,
> actions:9
> -recirc_id(0),in_port(8),eth(dst=aa:55:00:00:00:01),eth_type(0x0800),ipv4(frag=no),
>  packets:1, bytes:136, used:0.0s,
> actions:7
> -tunnel(src=10.0.0.2,dst=10.0.0.1,flags(-df-
> csum)),recirc_id(0),in_port(10),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(dst=192.168.10.30,tos=0/0x3,frag=no),
> packets:1, bytes:98, used:0.0s,
> actions:tnl_push(tnl_port(10),header(size=38,type=3,eth(dst=aa:55:00:00:00:03,src=aa:55:00:00:00:01,dl_type=0x0800),
> ipv4(src=10.0.0.1,dst=10.0.0.3,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x0,proto=0x6558))),out_port(1))
> -tunnel(src=30.0.0.1,dst=30.0.0.3,flags(-df-
> csum)),recirc_id(0),in_port(10),packet_type(ns=0,id=0),eth(dst=1e:2c:e9:2a:66:9e),eth_type(0x0800),ipv4(dst=192.168.
> 10.30,frag=no), packets:1, bytes:98, used:0.0s, 
> actions:set(eth(dst=aa:55:aa:55:00:03)),13
> +recirc_id(0),in_port(br-
> p1),packet_type(ns=0,id=0),eth(dst=aa:55:00:00:00:03),eth_type(0x0800),ipv4(src=10.0.0.1,dst=10.0.0.3,proto=47,frag=
> no), packets:1, bytes:136, used:0.0s, 
> actions:set(ipv4(src=30.0.0.1,dst=30.0.0.3)),tnl_pop(gre_sys)
> +recirc_id(0),in_port(br-
> p2),packet_type(ns=0,id=0),eth(dst=aa:55:00:00:00:01),eth_type(0x0800),ipv4(src=20.0.0.2,dst=20.0.0.1,proto=47,frag=
> no), packets:1, bytes:136, used:0.0s, 
> actions:set(ipv4(src=10.0.0.2,dst=10.0.0.1)),tnl_pop(gre_sys)
> +recirc_id(0),in_port(n2),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(dst=192.168.10.30,tos=0/0x3,frag=no),
> packets:1, bytes:98, used:0.0s,
> actions:tnl_push(tnl_port(gre_sys),header(size=38,type=3,eth(dst=aa:55:00:00:00:01,src=aa:55:00:00:00:02,dl_type=0x0
> 800),ipv4(src=20.0.0.2,dst=20.0.0.1,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x0,proto=0x6558))),out_port(br-
> p2))
> +tunnel(src=10.0.0.2,dst=10.0.0.1,flags(-df-
> csum)),recirc_id(0),in_port(gre_sys),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(dst=192.168.10.30,tos=0/0x3,frag=n
> o), packets:1, bytes:98, used:0.0s,
> actions:tnl_push(tnl_port(gre_sys),header(size=38,type=3,eth(dst=aa:55:00:00:00:03,src=aa:55:00:00:00:01,dl_type=0x0
> 800),ipv4(src=10.0.0.1,dst=10.0.0.3,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x0,proto=0x6558))),out_port(br-
> p1))
> +tunnel(src=30.0.0.1,dst=30.0.0.3,flags(-df-
> csum)),recirc_id(0),in_port(gre_sys),packet_type(ns=0,id=0),eth(dst=1e:2c:e9:2a:66:9e),eth_type(0x0800),ipv4(dst=192
> .168.10.30,frag=no), packets:1, bytes:98, used:0.0s, 
> actions:set(eth(dst=aa:55:aa:55:00:03)),n3
>  ])
> 
>  # Clear up megaflow cache
> @@ -428,17 +402,13 @@ AT_CHECK([
>  ovs-appctl time/warp 1000
> 
>  AT_CHECK([
> -    ovs-appctl dpctl/dump-flows dummy@ovs-dummy | strip_used | grep -v ipv6 
> | sort
> +    ovs-appctl dpctl/dump-flows --names dummy@ovs-dummy | strip_used | grep 
> -v ipv6 | sort
>  ], [0], [flow-dump from non-dpdk interfaces:
> -recirc_id(0),in_port(13),eth_type(0x0800),ipv4(dst=192.168.10.10,tos=0/0x3,frag=no),
>  packets:1, bytes:98,
> used:0.0s,
> actions:pop_eth,tnl_push(tnl_port(10),header(size=38,type=3,eth(dst=aa:55:00:00:00:02,src=aa:55:00:00:00:03,dl_type=
> 0x0800),ipv4(src=30.0.0.3,dst=30.0.0.2,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x0,proto=0x800))),out_port(3))
> -recirc_id(0),in_port(2),eth_type(0x0800),ipv4(frag=no), packets:1, 
> bytes:122, used:0.0s, actions:5
> -recirc_id(0),in_port(3),eth_type(0x0800),ipv4(frag=no), packets:1, 
> bytes:122, used:0.0s, actions:6
> -
> recirc_id(0),in_port(4),eth(dst=aa:55:00:00:00:01),eth_type(0x0800),ipv4(src=20.0.0.2,dst=20.0.0.1,proto=47,frag=no)
> , packets:1, bytes:122, used:0.0s, 
> actions:set(ipv4(src=10.0.0.2,dst=10.0.0.1)),tnl_pop(10)
> -
> recirc_id(0),in_port(5),eth(dst=aa:55:00:00:00:02),eth_type(0x0800),ipv4(src=30.0.0.3,dst=30.0.0.2,proto=47,frag=no)
> , packets:1, bytes:122, used:0.0s, 
> actions:set(ipv4(src=20.0.0.3,dst=20.0.0.2)),tnl_pop(10)
> -recirc_id(0),in_port(8),eth(dst=aa:55:00:00:00:01),eth_type(0x0800),ipv4(frag=no),
>  packets:1, bytes:122, used:0.0s,
> actions:7
> -recirc_id(0),in_port(9),eth(dst=aa:55:00:00:00:02),eth_type(0x0800),ipv4(frag=no),
>  packets:1, bytes:122, used:0.0s,
> actions:8
> -tunnel(src=10.0.0.2,dst=10.0.0.1,flags(-df-
> csum)),recirc_id(0),in_port(10),packet_type(ns=1,id=0x800),eth_type(0x0800),ipv4(dst=192.168.10.10,frag=no),
> packets:1, bytes:84, used:0.0s, 
> actions:push_eth(src=00:00:00:00:00:00,dst=aa:55:aa:55:00:01),11
> -tunnel(src=20.0.0.3,dst=20.0.0.2,flags(-df-
> csum)),recirc_id(0),in_port(10),packet_type(ns=1,id=0x800),eth_type(0x0800),ipv4(dst=192.168.10.10,tos=0/0x3,frag=no
> ), packets:1, bytes:84, used:0.0s,
> actions:tnl_push(tnl_port(10),header(size=38,type=3,eth(dst=aa:55:00:00:00:01,src=aa:55:00:00:00:02,dl_type=0x0800),
> ipv4(src=20.0.0.2,dst=20.0.0.1,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x0,proto=0x800))),out_port(2))
> +recirc_id(0),in_port(br-
> p2),packet_type(ns=0,id=0),eth(dst=aa:55:00:00:00:01),eth_type(0x0800),ipv4(src=20.0.0.2,dst=20.0.0.1,proto=47,frag=
> no), packets:1, bytes:122, used:0.0s, 
> actions:set(ipv4(src=10.0.0.2,dst=10.0.0.1)),tnl_pop(gre_sys)
> +recirc_id(0),in_port(br-
> p3),packet_type(ns=0,id=0),eth(dst=aa:55:00:00:00:02),eth_type(0x0800),ipv4(src=30.0.0.3,dst=30.0.0.2,proto=47,frag=
> no), packets:1, bytes:122, used:0.0s, 
> actions:set(ipv4(src=20.0.0.3,dst=20.0.0.2)),tnl_pop(gre_sys)
> +recirc_id(0),in_port(n3),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(dst=192.168.10.10,tos=0/0x3,frag=no),
> packets:1, bytes:98, used:0.0s,
> actions:pop_eth,tnl_push(tnl_port(gre_sys),header(size=38,type=3,eth(dst=aa:55:00:00:00:02,src=aa:55:00:00:00:03,dl_
> type=0x0800),ipv4(src=30.0.0.3,dst=30.0.0.2,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x0,proto=0x800))),out_por
> t(br-p3))
> +tunnel(src=10.0.0.2,dst=10.0.0.1,flags(-df-
> csum)),recirc_id(0),in_port(gre_sys),packet_type(ns=1,id=0x800),eth_type(0x0800),ipv4(dst=192.168.10.10,frag=no),
> packets:1, bytes:84, used:0.0s, 
> actions:push_eth(src=00:00:00:00:00:00,dst=aa:55:aa:55:00:01),n1
> +tunnel(src=20.0.0.3,dst=20.0.0.2,flags(-df-
> csum)),recirc_id(0),in_port(gre_sys),packet_type(ns=1,id=0x800),eth_type(0x0800),ipv4(dst=192.168.10.10,tos=0/0x3,fr
> ag=no), packets:1, bytes:84, used:0.0s,
> actions:tnl_push(tnl_port(gre_sys),header(size=38,type=3,eth(dst=aa:55:00:00:00:01,src=aa:55:00:00:00:02,dl_type=0x0
> 800),ipv4(src=20.0.0.2,dst=20.0.0.1,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x0,proto=0x800))),out_port(br-
> p2))
>  ])
> 
>  # Clear up megaflow cache
> @@ -453,13 +423,11 @@ AT_CHECK([
>  ovs-appctl time/warp 1000
> 
>  AT_CHECK([
> -    ovs-appctl dpctl/dump-flows dummy@ovs-dummy | strip_used | grep -v ipv6 
> | sort
> +    ovs-appctl dpctl/dump-flows --names dummy@ovs-dummy | strip_used | grep 
> -v ipv6 | sort
>  ], [0], [flow-dump from non-dpdk interfaces:
> -recirc_id(0),in_port(13),eth_type(0x0800),ipv4(dst=192.168.10.20,tos=0/0x3,frag=no),
>  packets:1, bytes:98,
> used:0.0s,
> actions:tnl_push(tnl_port(10),header(size=38,type=3,eth(dst=aa:55:00:00:00:02,src=aa:55:00:00:00:03,dl_type=0x0800),
> ipv4(src=30.0.0.3,dst=30.0.0.2,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x0,proto=0x6558))),out_port(3))
> -recirc_id(0),in_port(3),eth_type(0x0800),ipv4(frag=no), packets:1, 
> bytes:136, used:0.0s, actions:6
> -
> recirc_id(0),in_port(5),eth(dst=aa:55:00:00:00:02),eth_type(0x0800),ipv4(src=30.0.0.3,dst=30.0.0.2,proto=47,frag=no)
> , packets:1, bytes:136, used:0.0s, 
> actions:set(ipv4(src=20.0.0.3,dst=20.0.0.2)),tnl_pop(10)
> -recirc_id(0),in_port(9),eth(dst=aa:55:00:00:00:02),eth_type(0x0800),ipv4(frag=no),
>  packets:1, bytes:136, used:0.0s,
> actions:8
> -tunnel(src=20.0.0.3,dst=20.0.0.2,flags(-df-
> csum)),recirc_id(0),in_port(10),packet_type(ns=0,id=0),eth(dst=46:1e:7d:1a:95:a1),eth_type(0x0800),ipv4(dst=192.168.
> 10.20,frag=no), packets:1, bytes:98, used:0.0s, 
> actions:set(eth(dst=aa:55:aa:55:00:02)),12
> +recirc_id(0),in_port(br-
> p3),packet_type(ns=0,id=0),eth(dst=aa:55:00:00:00:02),eth_type(0x0800),ipv4(src=30.0.0.3,dst=30.0.0.2,proto=47,frag=
> no), packets:1, bytes:136, used:0.0s, 
> actions:set(ipv4(src=20.0.0.3,dst=20.0.0.2)),tnl_pop(gre_sys)
> +recirc_id(0),in_port(n3),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(dst=192.168.10.20,tos=0/0x3,frag=no),
> packets:1, bytes:98, used:0.0s,
> actions:tnl_push(tnl_port(gre_sys),header(size=38,type=3,eth(dst=aa:55:00:00:00:02,src=aa:55:00:00:00:03,dl_type=0x0
> 800),ipv4(src=30.0.0.3,dst=30.0.0.2,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x0,proto=0x6558))),out_port(br-
> p3))
> +tunnel(src=20.0.0.3,dst=20.0.0.2,flags(-df-
> csum)),recirc_id(0),in_port(gre_sys),packet_type(ns=0,id=0),eth(dst=46:1e:7d:1a:95:a1),eth_type(0x0800),ipv4(dst=192
> .168.10.20,frag=no), packets:1, bytes:98, used:0.0s, 
> actions:set(eth(dst=aa:55:aa:55:00:02)),n2
>  ])
> 
>  ### Check the received packets
> --
> 1.9.1
> 
> 
> 
> > -----Original Message-----
> > From: [email protected] 
> > [mailto:[email protected]] On Behalf Of Jan Scheurich
> > Sent: Tuesday, June 20, 2017 3:33 PM
> > To: Ben Pfaff <[email protected]>; [email protected]
> > Subject: Re: [ovs-dev] [PATCH v2 12/12] work on packet aware test
> >
> > Hi Ben,
> >
> > Thanks for working on updating the PTAP test. I have found and fixed three 
> > main issues that prevented the
> triangular
> > bridge test from working.
> >
> > 1. The tunnel ports in (formerly packet-type-aware) bridge br-in2 had to be 
> > declared with "packet-type=ptap".
> > 2. A typo in the peer name for patch port p0-1 caused packets to be dropped.
> > 3. The remote tunnel end-point MAC addresses were not aligned with the MAC 
> > addresses of the br-pX bridge local
> > ports, causing the tunnel port lookup to fail on the receiving side.
> >
> > All the rest was just adapting to datapath flow consequences of switching 
> > back to patch ports and using port
> names.
> >
> > Trouble-shooting (typically config) issues with (native) tunneling is one 
> > of the most tedious tasks in OvS. It
> > almost always requires use of a debugger to understand why packets are 
> > dropped or not recognized as tunnel
> packets.
> > This is for sure an area that would deserve better trouble-shooting support 
> > (DBG logging and/or ovs-appctl
> > commands). Something for the future!
> >
> > Anyway, the attached patch, replacing your original patch 12/12, seems to 
> > work on top of the latest v3 series plus
> > your port name patches.
> >
> > There is one anomaly that I have noticed inspecting the datapath flows 
> > generated for packet received from L3 GRE
> > tunnels in ptap or legacy-l3 mode:
> >
> > tunnel(src=10.0.0.2,dst=10.0.0.1,flags(-df-
> > csum)),recirc_id(0),in_port(gre_sys),packet_type(ns=1,id=0x800),eth_type(0x0800),ipv4(dst=192.168.10.10,frag=no),
> > packets:1, bytes:84, used:0.0s, 
> > actions:push_eth(src=00:00:00:00:00:00,dst=aa:55:aa:55:00:01),n1
> > tunnel(src=20.0.0.3,dst=20.0.0.2,flags(-df-
> >
> csum)),recirc_id(0),in_port(gre_sys),packet_type(ns=1,id=0x800),eth_type(0x0800),ipv4(dst=192.168.10.10,tos=0/0x3,fr
> > ag=no), packets:1, bytes:84, used:0.0s,
> >
> actions:tnl_push(tnl_port(gre_sys),header(size=38,type=3,eth(dst=aa:55:00:00:00:01,src=aa:55:00:00:00:02,dl_type=0x0
> > 800),ipv4(src=20.0.0.2,dst=20.0.0.1,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x0,proto=0x800))),out_port(br-
> > p2))
> >
> > These include an eth_type(0x0800) match even though their packet type is 
> > not ethernet: packet_type(ns=1,id=0x800).
> > Apparently this does not cause lookup failure. I believe this must be a bug 
> > in [PATCH v3 4/7] userspace: Handling
> of
> > versatile tunnel ports, which I will have a look at now.
> >
> > BR, Jan
> _______________________________________________
> dev mailing list
> [email protected]
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to