Looks good to me, thanks!

Acked-by: Jarno Rajahalme <jrajaha...@nicira.com>

Pushed to master,

  Jarno

On Sep 17, 2014, at 2:14 PM, Daniele Di Proietto <ddiproie...@vmware.com> wrote:

> This optimization should give a small performance benefit to the userspace
> datapath.
> 
> Signed-off-by: Daniele Di Proietto <ddiproie...@vmware.com>
> ---
> ofproto/ofproto-dpif-xlate.c |  25 ++++++--
> tests/classifier.at          |  20 +++----
> tests/dpif-netdev.at         |  16 ++---
> tests/ofproto-dpif.at        | 136 +++++++++++++++++++++----------------------
> tests/tunnel.at              |   8 +--
> 5 files changed, 110 insertions(+), 95 deletions(-)
> 
> diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c
> index 57afa80..1d46456 100644
> --- a/ofproto/ofproto-dpif-xlate.c
> +++ b/ofproto/ofproto-dpif-xlate.c
> @@ -352,6 +352,7 @@ static struct xport *get_ofp_port(const struct xbridge *, 
> ofp_port_t ofp_port);
> static struct skb_priority_to_dscp *get_skb_priority(const struct xport *,
>                                                      uint32_t skb_priority);
> static void clear_skb_priorities(struct xport *);
> +static size_t count_skb_priorities(const struct xport *);
> static bool dscp_from_skb_priority(const struct xport *, uint32_t 
> skb_priority,
>                                    uint8_t *dscp);
> 
> @@ -2578,10 +2579,13 @@ compose_output_action__(struct xlate_ctx *ctx, 
> ofp_port_t ofp_port,
>     flow_pkt_mark = flow->pkt_mark;
>     flow_nw_tos = flow->nw_tos;
> 
> -    if (dscp_from_skb_priority(xport, flow->skb_priority, &dscp)) {
> -        wc->masks.nw_tos |= IP_DSCP_MASK;
> -        flow->nw_tos &= ~IP_DSCP_MASK;
> -        flow->nw_tos |= dscp;
> +    if (count_skb_priorities(xport)) {
> +        memset(&wc->masks.skb_priority, 0xff, sizeof wc->masks.skb_priority);
> +        if (dscp_from_skb_priority(xport, flow->skb_priority, &dscp)) {
> +            wc->masks.nw_tos |= IP_DSCP_MASK;
> +            flow->nw_tos &= ~IP_DSCP_MASK;
> +            flow->nw_tos |= dscp;
> +        }
>     }
> 
>     if (xport->is_tunnel) {
> @@ -3671,6 +3675,8 @@ do_xlate_actions(const struct ofpact *ofpacts, size_t 
> ofpacts_len,
>             break;
> 
>         case OFPACT_ENQUEUE:
> +            memset(&wc->masks.skb_priority, 0xff,
> +                   sizeof wc->masks.skb_priority);
>             xlate_enqueue_action(ctx, ofpact_get_ENQUEUE(a));
>             break;
> 
> @@ -3777,10 +3783,14 @@ do_xlate_actions(const struct ofpact *ofpacts, size_t 
> ofpacts_len,
>             break;
> 
>         case OFPACT_SET_QUEUE:
> +            memset(&wc->masks.skb_priority, 0xff,
> +                   sizeof wc->masks.skb_priority);
>             xlate_set_queue_action(ctx, ofpact_get_SET_QUEUE(a)->queue_id);
>             break;
> 
>         case OFPACT_POP_QUEUE:
> +            memset(&wc->masks.skb_priority, 0xff,
> +                   sizeof wc->masks.skb_priority);
>             flow->skb_priority = ctx->orig_skb_priority;
>             break;
> 
> @@ -4018,6 +4028,12 @@ dscp_from_skb_priority(const struct xport *xport, 
> uint32_t skb_priority,
>     return pdscp != NULL;
> }
> 
> +static size_t
> +count_skb_priorities(const struct xport *xport)
> +{
> +    return hmap_count(&xport->skb_priorities);
> +}
> +
> static void
> clear_skb_priorities(struct xport *xport)
> {
> @@ -4195,7 +4211,6 @@ xlate_actions(struct xlate_in *xin, struct xlate_out 
> *xout)
> 
>     flow_wildcards_init_catchall(wc);
>     memset(&wc->masks.in_port, 0xff, sizeof wc->masks.in_port);
> -    memset(&wc->masks.skb_priority, 0xff, sizeof wc->masks.skb_priority);
>     memset(&wc->masks.dl_type, 0xff, sizeof wc->masks.dl_type);
>     if (is_ip_any(flow)) {
>         wc->masks.nw_frag |= FLOW_NW_FRAG_MASK;
> diff --git a/tests/classifier.at b/tests/classifier.at
> index 710060f..4d23be5 100644
> --- a/tests/classifier.at
> +++ b/tests/classifier.at
> @@ -40,22 +40,22 @@ table=0 in_port=3 priority=0,ip,action=drop
> AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
> AT_CHECK([ovs-appctl ofproto/trace br0 
> 'in_port=2,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=6,nw_tos=0,nw_ttl=128,tp_src=8,tp_dst=80'],
>  [0], [stdout])
> AT_CHECK([tail -2 stdout], [0],
> -  [Megaflow: 
> recirc_id=0,skb_priority=0,tcp,in_port=2,nw_dst=192.168.0.0/16,nw_frag=no
> +  [Megaflow: recirc_id=0,tcp,in_port=2,nw_dst=192.168.0.0/16,nw_frag=no
> Datapath actions: 1
> ])
> AT_CHECK([ovs-appctl ofproto/trace br0 
> 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=6,nw_tos=0,nw_ttl=128,tp_src=8,tp_dst=80'],
>  [0], [stdout])
> AT_CHECK([tail -2 stdout], [0],
> -  [Megaflow: 
> recirc_id=0,skb_priority=0,ip,in_port=1,nw_dst=0.0.0.0/2.0.0.0,nw_frag=no
> +  [Megaflow: recirc_id=0,ip,in_port=1,nw_dst=0.0.0.0/2.0.0.0,nw_frag=no
> Datapath actions: drop
> ])
> AT_CHECK([ovs-appctl ofproto/trace br0 
> 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=10.1.2.15,nw_proto=6,nw_tos=0,nw_ttl=128,tp_src=8,tp_dst=80'],
>  [0], [stdout])
> AT_CHECK([tail -2 stdout], [0],
> -  [Megaflow: 
> recirc_id=0,skb_priority=0,tcp,in_port=1,nw_dst=10.1.2.15,nw_frag=no,tp_dst=80
> +  [Megaflow: recirc_id=0,tcp,in_port=1,nw_dst=10.1.2.15,nw_frag=no,tp_dst=80
> Datapath actions: drop
> ])
> AT_CHECK([ovs-appctl ofproto/trace br0 
> 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=10.1.2.15,nw_proto=6,nw_tos=0,nw_ttl=128,tp_src=8,tp_dst=79'],
>  [0], [stdout])
> AT_CHECK([tail -2 stdout], [0],
> -  [Megaflow: 
> recirc_id=0,skb_priority=0,tcp,in_port=1,nw_dst=10.1.2.15,nw_frag=no,tp_dst=0x1/0x1
> +  [Megaflow: 
> recirc_id=0,tcp,in_port=1,nw_dst=10.1.2.15,nw_frag=no,tp_dst=0x1/0x1
> Datapath actions: 2
> ])
> OVS_VSWITCHD_STOP
> @@ -83,7 +83,7 @@ AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
> # nw_dst and nw_src should be on by default
> AT_CHECK([ovs-appctl ofproto/trace br0 
> 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=6,nw_tos=0,nw_ttl=128,tp_src=8,tp_dst=80'],
>  [0], [stdout])
> AT_CHECK([tail -2 stdout], [0],
> -  [Megaflow: 
> recirc_id=0,skb_priority=0,ip,in_port=1,nw_dst=192.168.0.0/16,nw_frag=no
> +  [Megaflow: recirc_id=0,ip,in_port=1,nw_dst=192.168.0.0/16,nw_frag=no
> Datapath actions: drop
> ])
> 
> @@ -98,28 +98,28 @@ AT_CHECK([ovs-vsctl set Flow_Table t0 
> prefixes=nw_dst,nw_dst], [1], [],
> AT_CHECK([ovs-vsctl set Flow_Table t0 prefixes=nw_dst], [0])
> AT_CHECK([ovs-appctl ofproto/trace br0 
> 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=6,nw_tos=0,nw_ttl=128,tp_src=8,tp_dst=80'],
>  [0], [stdout])
> AT_CHECK([tail -2 stdout], [0],
> -  [Megaflow: 
> recirc_id=0,skb_priority=0,ip,in_port=1,nw_dst=192.168.0.0/16,nw_frag=no
> +  [Megaflow: recirc_id=0,ip,in_port=1,nw_dst=192.168.0.0/16,nw_frag=no
> Datapath actions: drop
> ])
> AT_CHECK([ovs-appctl ofproto/trace br0 
> 'in_port=2,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=6,nw_tos=0,nw_ttl=128,tp_src=8,tp_dst=80'],
>  [0], [stdout])
> AT_CHECK([tail -2 stdout], [0],
> -  [Megaflow: 
> recirc_id=0,skb_priority=0,tcp,in_port=2,nw_dst=192.168.0.0/16,nw_frag=no
> +  [Megaflow: recirc_id=0,tcp,in_port=2,nw_dst=192.168.0.0/16,nw_frag=no
> Datapath actions: 1
> ])
> AT_CHECK([ovs-appctl ofproto/trace br0 
> 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=10.1.2.15,nw_proto=6,nw_tos=0,nw_ttl=128,tp_src=8,tp_dst=80'],
>  [0], [stdout])
> AT_CHECK([tail -2 stdout], [0],
> -  [Megaflow: 
> recirc_id=0,skb_priority=0,tcp,in_port=1,nw_dst=10.1.2.15,nw_frag=no,tp_dst=80
> +  [Megaflow: recirc_id=0,tcp,in_port=1,nw_dst=10.1.2.15,nw_frag=no,tp_dst=80
> Datapath actions: drop
> ])
> AT_CHECK([ovs-appctl ofproto/trace br0 
> 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=10.1.2.15,nw_proto=6,nw_tos=0,nw_ttl=128,tp_src=8,tp_dst=79'],
>  [0], [stdout])
> AT_CHECK([tail -2 stdout], [0],
> -  [Megaflow: 
> recirc_id=0,skb_priority=0,tcp,in_port=1,nw_dst=10.1.2.15,nw_frag=no,tp_src=0x0/0x1,tp_dst=0x40/0xfff0
> +  [Megaflow: 
> recirc_id=0,tcp,in_port=1,nw_dst=10.1.2.15,nw_frag=no,tp_src=0x0/0x1,tp_dst=0x40/0xfff0
> Datapath actions: 3
> ])
> AT_CHECK([ovs-vsctl set Flow_Table t0 prefixes=none], [0])
> AT_CHECK([ovs-appctl ofproto/trace br0 
> 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=10.1.3.16,nw_proto=6,nw_tos=0,nw_ttl=128,tp_src=8,tp_dst=79'],
>  [0], [stdout])
> AT_CHECK([tail -2 stdout], [0],
> -  [Megaflow: 
> recirc_id=0,skb_priority=0,tcp,in_port=1,nw_dst=10.1.3.16,nw_frag=no
> +  [Megaflow: recirc_id=0,tcp,in_port=1,nw_dst=10.1.3.16,nw_frag=no
> Datapath actions: 3
> ])
> OVS_VSWITCHD_STOP(["/'prefixes' with incompatible field: ipv6_label/d"])
> diff --git a/tests/dpif-netdev.at b/tests/dpif-netdev.at
> index 83a4e61..af7845c 100644
> --- a/tests/dpif-netdev.at
> +++ b/tests/dpif-netdev.at
> @@ -44,10 +44,10 @@ ovs-appctl time/warp 100
> sleep 1  # wait for forwarders process packets
> 
> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
> -recirc_id=0,skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_frag=no,
>  actions: <del>
> -recirc_id=0,skb_priority=0,ip,in_port=2,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_frag=no,
>  actions: <del>
> -recirc_id=0,skb_priority=0,ip,in_port=7,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_frag=no,
>  actions: <del>
> -recirc_id=0,skb_priority=0,ip,in_port=8,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_frag=no,
>  actions: <del>
> +recirc_id=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_frag=no,
>  actions: <del>
> +recirc_id=0,ip,in_port=2,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_frag=no,
>  actions: <del>
> +recirc_id=0,ip,in_port=7,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_frag=no,
>  actions: <del>
> +recirc_id=0,ip,in_port=8,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_frag=no,
>  actions: <del>
> ])
> 
> OVS_VSWITCHD_STOP
> @@ -68,7 +68,7 @@ AT_CHECK([cat ovs-vswitchd.log | grep -A 1 'miss upcall' | 
> tail -n 1], [0], [dnl
> skb_priority(0),skb_mark(0),recirc_id(0),dp_hash(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)
> ])
> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
> -recirc_id=0,skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_frag=no,
>  actions: <del>
> +recirc_id=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_frag=no,
>  actions: <del>
> ])
> 
> # Now, the same again without megaflows.
> @@ -82,7 +82,7 @@ 
> skb_priority(0),skb_mark(0),recirc_id(0),dp_hash(0),in_port(1),eth(src=50:54:00:
> ])
> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
> pkt_mark=0,recirc_id=0,skb_priority=0,icmp,tun_id=0,tun_src=0.0.0.0,tun_dst=0.0.0.0,tun_tos=0,tun_ttl=0,,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_tos=0,nw_ecn=0,nw_ttl=64,mpls_label=0,mpls_tc=0,mpls_ttl=0,mpls_bos=0,mpls_lse1=0,mpls_lse2=0,icmp_type=8,icmp_code=0,
>  actions: <del>
> -recirc_id=0,skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_frag=no,
>  actions: <del>
> +recirc_id=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_frag=no,
>  actions: <del>
> ])
> 
> OVS_VSWITCHD_STOP
> @@ -103,7 +103,7 @@ AT_CHECK([cat ovs-vswitchd.log | grep -A 1 'miss upcall' 
> | tail -n 1], [0], [dnl
> skb_priority(0),skb_mark(0),recirc_id(0),dp_hash(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)
> ])
> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_DUMP | STRIP_XOUT], [0], [dnl
> -skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no),icmp(type=8/0,code=0/0),
>  packets:0, bytes:0, used:never, actions: <del>
> +skb_priority(0/0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no),icmp(type=8/0,code=0/0),
>  packets:0, bytes:0, used:never, actions: <del>
> ])
> 
> # Now, the same again without megaflows.
> @@ -117,7 +117,7 @@ 
> skb_priority(0),skb_mark(0),recirc_id(0),dp_hash(0),in_port(1),eth(src=50:54:00:
> ])
> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_DUMP | STRIP_XOUT], [0], [dnl
> skb_priority(0),skb_mark(0),recirc_id(0),dp_hash(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0),
>  packets:0, bytes:0, used:never, actions: <del>
> -skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no),icmp(type=8/0,code=0/0),
>  packets:0, bytes:0, used:never, actions: <del>
> +skb_priority(0/0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no),icmp(type=8/0,code=0/0),
>  packets:0, bytes:0, used:never, actions: <del>
> ])
> 
> OVS_VSWITCHD_STOP
> diff --git a/tests/ofproto-dpif.at b/tests/ofproto-dpif.at
> index 107f363..181e740 100644
> --- a/tests/ofproto-dpif.at
> +++ b/tests/ofproto-dpif.at
> @@ -43,12 +43,12 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p7 
> 'in_port(7),eth(src=50:54:00:00:00:
> ovs-appctl time/warp 200 100
> sleep 1
> AT_CHECK([cat ovs-vswitchd.log | grep 'in_port=[[348]]' | FILTER_FLOW_INSTALL 
> | STRIP_XOUT], [0], [dnl
> -recirc_id=0,skb_priority=0,ip,in_port=3,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_frag=no,
>  actions: <del>
> -recirc_id=0,skb_priority=0,ip,in_port=3,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_frag=no,
>  actions: <del>
> -recirc_id=0,skb_priority=0,ip,in_port=4,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0d,nw_frag=no,
>  actions: <del>
> -recirc_id=0,skb_priority=0,ip,in_port=4,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0e,nw_frag=no,
>  actions: <del>
> -recirc_id=0,skb_priority=0,rarp,in_port=4,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=ff:ff:ff:ff:ff:ff,
>  actions: <del>
> -recirc_id=0,skb_priority=0,rarp,in_port=4,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=ff:ff:ff:ff:ff:ff,
>  actions: <del>
> +recirc_id=0,ip,in_port=3,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_frag=no,
>  actions: <del>
> +recirc_id=0,ip,in_port=3,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_frag=no,
>  actions: <del>
> +recirc_id=0,ip,in_port=4,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0d,nw_frag=no,
>  actions: <del>
> +recirc_id=0,ip,in_port=4,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0e,nw_frag=no,
>  actions: <del>
> +recirc_id=0,rarp,in_port=4,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=ff:ff:ff:ff:ff:ff,
>  actions: <del>
> +recirc_id=0,rarp,in_port=4,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=ff:ff:ff:ff:ff:ff,
>  actions: <del>
> ])
> OVS_VSWITCHD_STOP
> AT_CLEANUP
> @@ -192,7 +192,7 @@ table=2 ip 
> actions=set_field:192.168.3.91->ip_src,output(11)
> AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
> AT_CHECK([ovs-appctl ofproto/trace br0 
> 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'],
>  [0], [stdout])
> AT_CHECK([tail -2 stdout], [0],
> -  [Megaflow: 
> recirc_id=0,skb_priority=0,ip,in_port=1,nw_src=192.168.0.1,nw_frag=no
> +  [Megaflow: recirc_id=0,ip,in_port=1,nw_src=192.168.0.1,nw_frag=no
> Datapath actions: 
> 10,set(ipv4(src=192.168.3.91)),11,set(ipv4(src=192.168.3.90)),13
> ])
> OVS_VSWITCHD_STOP
> @@ -208,7 +208,7 @@ table=1 tcp 
> actions=set_field:91->tp_src,output(11),clear_actions
> AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
> AT_CHECK([ovs-appctl ofproto/trace br0 
> 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=6,nw_tos=0,nw_ttl=128,tp_src=8,tp_dst=9'],
>  [0], [stdout])
> AT_CHECK([tail -2 stdout], [0],
> -  [Megaflow: recirc_id=0,skb_priority=0,tcp,in_port=1,nw_frag=no,tp_src=8
> +  [Megaflow: recirc_id=0,tcp,in_port=1,nw_frag=no,tp_src=8
> Datapath actions: 10,set(tcp(src=91)),11
> ])
> OVS_VSWITCHD_STOP
> @@ -234,7 +234,7 @@ AT_CHECK([ovs-appctl ofproto/trace br0 
> 'in_port=1,dl_src=50:54:00:00:00:05,dl_ds
> # Must match on the source address to be able to restore it's value for
> # the second bucket
> AT_CHECK([tail -2 stdout], [0],
> -  [Megaflow: 
> recirc_id=0,skb_priority=0,ip,in_port=1,nw_src=192.168.0.1,nw_frag=no
> +  [Megaflow: recirc_id=0,ip,in_port=1,nw_src=192.168.0.1,nw_frag=no
> Datapath actions: set(ipv4(src=192.168.3.90)),10,set(ipv4(src=192.168.0.1)),11
> ])
> OVS_VSWITCHD_STOP
> @@ -261,7 +261,7 @@ AT_CHECK([ovs-appctl ofproto/trace br0 
> 'in_port=1,dl_src=50:54:00:00:00:05,dl_ds
> # Must match on the source address to be able to restore it's value for
> # the third bucket
> AT_CHECK([tail -2 stdout], [0],
> -  [Megaflow: 
> recirc_id=0,skb_priority=0,ip,in_port=1,nw_src=192.168.0.1,nw_frag=no
> +  [Megaflow: recirc_id=0,ip,in_port=1,nw_src=192.168.0.1,nw_frag=no
> Datapath actions: set(ipv4(src=192.168.3.90)),10,set(ipv4(src=192.168.0.1)),11
> ])
> OVS_VSWITCHD_STOP
> @@ -442,7 +442,7 @@ AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 
> 'group_id=1234,type=all,bucket=o
> AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip 
> actions=write_actions(load:0xffffffff->NXM_NX_REG1[[]],move:NXM_NX_REG1[[]]->NXM_NX_REG2[[]],group:1234)'])
> AT_CHECK([ovs-appctl ofproto/trace br0 
> 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'],
>  [0], [stdout])
> AT_CHECK([tail -2 stdout], [0],
> -  [Megaflow: 
> recirc_id=0,skb_priority=0,ip,in_port=1,nw_src=192.168.0.1,nw_frag=no
> +  [Megaflow: recirc_id=0,ip,in_port=1,nw_src=192.168.0.1,nw_frag=no
> Datapath actions: 
> set(ipv4(src=255.255.255.255)),10,set(ipv4(src=192.168.0.1)),11
> ])
> OVS_VSWITCHD_STOP
> @@ -518,19 +518,19 @@ table=1 in_port=1 action=dec_ttl,output:3
> AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
> AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 
> 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=2,frag=no)'
>  -generate], [0], [stdout])
> AT_CHECK([tail -4 stdout], [0],
> -  [Megaflow: recirc_id=0,skb_priority=0,ip,in_port=1,nw_ttl=2,nw_frag=no
> +  [Megaflow: recirc_id=0,ip,in_port=1,nw_ttl=2,nw_frag=no
> Datapath actions: set(ipv4(ttl=1)),2,4
> This flow is handled by the userspace slow path because it:
>       - Sends "packet-in" messages to the OpenFlow controller.
> ])
> AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 
> 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=3,frag=no)'],
>  [0], [stdout])
> AT_CHECK([tail -2 stdout], [0],
> -  [Megaflow: recirc_id=0,skb_priority=0,ip,in_port=1,nw_ttl=3,nw_frag=no
> +  [Megaflow: recirc_id=0,ip,in_port=1,nw_ttl=3,nw_frag=no
> Datapath actions: set(ipv4(ttl=2)),2,set(ipv4(ttl=1)),3,4
> ])
> AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 
> 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=10,tclass=0x70,hlimit=128,frag=no)'],
>  [0], [stdout])
> AT_CHECK([tail -2 stdout], [0],
> -  [Megaflow: recirc_id=0,skb_priority=0,ipv6,in_port=1,nw_ttl=128,nw_frag=no
> +  [Megaflow: recirc_id=0,ipv6,in_port=1,nw_ttl=128,nw_frag=no
> Datapath actions: set(ipv6(hlimit=127)),2,set(ipv6(hlimit=126)),3,4
> ])
> 
> @@ -4627,21 +4627,21 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p2 
> 'in_port(2),eth(src=50:54:00:00:00:
> AT_CHECK([ovs-appctl netdev-dummy/receive p3 
> 'in_port(3),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
> ovs-appctl revalidator/wait
> AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
> -skb_priority(0),recirc_id(0),in_port(1),eth_type(0x0800),ipv4(frag=no), 
> packets:0, bytes:0, used:never, actions:drop
> -skb_priority(0),recirc_id(0),in_port(2),eth_type(0x0800),ipv4(frag=no), 
> packets:0, bytes:0, used:never, actions:drop
> +recirc_id(0),in_port(1),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0, 
> used:never, actions:drop
> +recirc_id(0),in_port(2),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0, 
> used:never, actions:drop
> ])
> 
> AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
> -skb_priority(0),recirc_id(0),in_port(3),eth_type(0x0800),ipv4(frag=no), 
> packets:0, bytes:0, used:never, actions:drop
> +recirc_id(0),in_port(3),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0, 
> used:never, actions:drop
> ])
> 
> AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | sort | STRIP_USED], [0], [dnl
> -skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(p1),eth(src=50:54:00:00:00:05/00:00:00:00:00:00,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no),icmp(type=8/0,code=0/0),
>  packets:0, bytes:0, used:never, actions:drop
> -skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(p2),eth(src=50:54:00:00:00:07/00:00:00:00:00:00,dst=50:54:00:00:00:05/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no),icmp(type=0/0,code=0/0),
>  packets:0, bytes:0, used:never, actions:drop
> +skb_priority(0/0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(p1),eth(src=50:54:00:00:00:05/00:00:00:00:00:00,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no),icmp(type=8/0,code=0/0),
>  packets:0, bytes:0, used:never, actions:drop
> +skb_priority(0/0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(p2),eth(src=50:54:00:00:00:07/00:00:00:00:00:00,dst=50:54:00:00:00:05/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no),icmp(type=0/0,code=0/0),
>  packets:0, bytes:0, used:never, actions:drop
> ])
> 
> AT_CHECK([ovs-appctl dpif/dump-flows -m br1 | sort | STRIP_USED], [0], [dnl
> -skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(p3),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no),icmp(type=8/0,code=0/0),
>  packets:0, bytes:0, used:never, actions:drop
> +skb_priority(0/0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(p3),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no),icmp(type=8/0,code=0/0),
>  packets:0, bytes:0, used:never, actions:drop
> ])
> 
> OVS_VSWITCHD_STOP
> @@ -4676,7 +4676,7 @@ done
> sleep 1  # wait for the datapath flow installed
> for dl_src in 00 01; do
>     AT_CHECK_UNQUOTED([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | grep 
> "$dl_src," | STRIP_USED], [0], [dnl
> -recirc_id=0,skb_priority=0,mpls,in_port=1,dl_src=60:66:66:66:66:$dl_src,mpls_label=20,mpls_tc=0,mpls_ttl=32,mpls_bos=0,mpls_lse1=82208,mpls_lse2=0,
>  actions:userspace(pid=0,slow_path(controller))
> +recirc_id=0,mpls,in_port=1,dl_src=60:66:66:66:66:$dl_src,mpls_label=20,mpls_tc=0,mpls_ttl=32,mpls_bos=0,mpls_lse1=82208,mpls_lse2=0,
>  actions:userspace(pid=0,slow_path(controller))
> ])
> done
> 
> @@ -4716,7 +4716,7 @@ done
> sleep 1  # wait for the datapath flow installed
> for dl_src in 00 01; do
>     AT_CHECK_UNQUOTED([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | grep 
> "$dl_src," | STRIP_USED], [0], [dnl
> -recirc_id=0,skb_priority=0,mpls,in_port=1,dl_src=60:66:66:66:66:$dl_src,mpls_label=20,mpls_tc=0,mpls_ttl=32,mpls_bos=0,mpls_lse1=82208,mpls_lse2=0,
>  actions:userspace(pid=0,slow_path(controller))
> +recirc_id=0,mpls,in_port=1,dl_src=60:66:66:66:66:$dl_src,mpls_label=20,mpls_tc=0,mpls_ttl=32,mpls_bos=0,mpls_lse1=82208,mpls_lse2=0,
>  actions:userspace(pid=0,slow_path(controller))
> ])
> done
> 
> @@ -4770,15 +4770,15 @@ dummy@ovs-dummy: hit:13 missed:2
> ])
> 
> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
> -recirc_id=0,skb_priority=0,ip,in_port=100,nw_frag=no, actions:101,3,2
> -recirc_id=0,skb_priority=0,ip,in_port=101,nw_frag=no, actions:100,2,3
> +recirc_id=0,ip,in_port=100,nw_frag=no, actions:101,3,2
> +recirc_id=0,ip,in_port=101,nw_frag=no, actions:100,2,3
> ])
> 
> AT_CHECK([cat ovs-vswitchd.log | grep -e 'in_port(100).*packets:9' | 
> FILTER_FLOW_DUMP], [0], [dnl
> -skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(100),eth(src=50:54:00:00:00:05/00:00:00:00:00:00,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no),icmp(type=8/0,code=0/0),
>  packets:9, bytes:540, used:0.0s, actions:101,3,2
> +skb_priority(0/0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(100),eth(src=50:54:00:00:00:05/00:00:00:00:00:00,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no),icmp(type=8/0,code=0/0),
>  packets:9, bytes:540, used:0.0s, actions:101,3,2
> ])
> AT_CHECK([cat ovs-vswitchd.log | grep -e 'in_port(101).*packets:4' | 
> FILTER_FLOW_DUMP], [0], [dnl
> -skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(101),eth(src=50:54:00:00:00:07/00:00:00:00:00:00,dst=50:54:00:00:00:05/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no),icmp(type=8/0,code=0/0),
>  packets:4, bytes:240, used:0.0s, actions:100,2,3
> +skb_priority(0/0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(101),eth(src=50:54:00:00:00:07/00:00:00:00:00:00,dst=50:54:00:00:00:05/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no),icmp(type=8/0,code=0/0),
>  packets:4, bytes:240, used:0.0s, actions:100,2,3
> ])
> 
> AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
> @@ -4829,7 +4829,7 @@ sleep 1
> AT_CHECK([ovs-appctl netdev-dummy/receive p1 
> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
> sleep 1
> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
> -recirc_id=0,skb_priority=0,ip,in_port=1,nw_frag=no, actions: <del>
> +recirc_id=0,ip,in_port=1,nw_frag=no, actions: <del>
> ])
> OVS_VSWITCHD_STOP
> AT_CLEANUP
> @@ -4846,8 +4846,8 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p1 
> 'in_port(1),eth(src=50:54:00:00:00:
> AT_CHECK([ovs-appctl netdev-dummy/receive p1 
> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
> sleep 1
> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
> -recirc_id=0,skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:09,nw_frag=no, 
> actions: <del>
> -recirc_id=0,skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:0b/ff:ff:00:00:00:02,nw_frag=no,
>  actions: <del>
> +recirc_id=0,ip,in_port=1,dl_src=50:54:00:00:00:09,nw_frag=no, actions: <del>
> +recirc_id=0,ip,in_port=1,dl_src=50:54:00:00:00:0b/ff:ff:00:00:00:02,nw_frag=no,
>  actions: <del>
> ])
> OVS_VSWITCHD_STOP
> AT_CLEANUP
> @@ -4865,8 +4865,8 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p1 
> 'in_port(1),eth(src=50:54:00:00:00:
> AT_CHECK([ovs-appctl netdev-dummy/receive p1 
> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
> sleep 1
> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
> -recirc_id=0,skb_priority=0,icmp,in_port=1,nw_src=10.0.0.4,nw_frag=no, 
> actions: <del>
> -recirc_id=0,skb_priority=0,ip,in_port=1,nw_src=10.0.0.2/0.0.0.2,nw_frag=no, 
> actions: <del>
> +recirc_id=0,icmp,in_port=1,nw_src=10.0.0.4,nw_frag=no, actions: <del>
> +recirc_id=0,ip,in_port=1,nw_src=10.0.0.2/0.0.0.2,nw_frag=no, actions: <del>
> ])
> OVS_VSWITCHD_STOP
> AT_CLEANUP
> @@ -4884,8 +4884,8 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p1 
> 'in_port(1),eth(src=50:54:00:00:00:
> AT_CHECK([ovs-appctl netdev-dummy/receive p1 
> 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x86dd),ipv6(src=2001:db8:3c4d:5:4:3:2:1,dst=2001:db8:3c4d:1:2:3:4:1,label=0,proto=99,tclass=0x70,hlimit=64,frag=no)'])
> sleep 1
> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
> -recirc_id=0,skb_priority=0,ipv6,in_port=1,ipv6_src=2001:db8:3c4d:1:2:3:4:5,nw_frag=no,
>  actions: <del>
> -recirc_id=0,skb_priority=0,ipv6,in_port=1,ipv6_src=2001:db8:3c4d:5:4:3:2:1/ffff:ffff:0:4::,nw_frag=no,
>  actions: <del>
> +recirc_id=0,ipv6,in_port=1,ipv6_src=2001:db8:3c4d:1:2:3:4:5,nw_frag=no, 
> actions: <del>
> +recirc_id=0,ipv6,in_port=1,ipv6_src=2001:db8:3c4d:5:4:3:2:1/ffff:ffff:0:4::,nw_frag=no,
>  actions: <del>
> ])
> OVS_VSWITCHD_STOP
> AT_CLEANUP
> @@ -4903,7 +4903,7 @@ sleep 1
> AT_CHECK([ovs-appctl netdev-dummy/receive p1 
> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
> sleep 1
> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
> -recirc_id=0,skb_priority=0,icmp,in_port=1,nw_frag=no,icmp_type=0x8/0xff, 
> actions: <del>
> +recirc_id=0,icmp,in_port=1,nw_frag=no,icmp_type=0x8/0xff, actions: <del>
> ])
> OVS_VSWITCHD_STOP
> AT_CLEANUP
> @@ -4917,8 +4917,8 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p1 
> 'in_port(1),eth(src=50:54:00:00:00:
> AT_CHECK([ovs-appctl netdev-dummy/receive p1 
> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
> sleep 1
> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
> -recirc_id=0,skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_frag=no,
>  actions: <del>
> -recirc_id=0,skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_frag=no,
>  actions: <del>
> +recirc_id=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_frag=no,
>  actions: <del>
> +recirc_id=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_frag=no,
>  actions: <del>
> ])
> OVS_VSWITCHD_STOP
> AT_CLEANUP
> @@ -4936,8 +4936,8 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p1 
> 'in_port(1),eth(src=50:54:00:00:00:
> AT_CHECK([ovs-appctl netdev-dummy/receive p1 
> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0a),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1)'])
> sleep 1
> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
> -recirc_id=0,skb_priority=0,mpls,in_port=1,dl_src=50:54:00:00:00:09,mpls_label=11,mpls_tc=3,mpls_ttl=64,mpls_bos=1,mpls_lse1=0,mpls_lse2=0,
>  actions: <del>
> -recirc_id=0,skb_priority=0,mpls,in_port=1,dl_src=50:54:00:00:00:0b,mpls_label=11,mpls_tc=3,mpls_ttl=64,mpls_bos=1,mpls_lse1=0,mpls_lse2=0,
>  actions: <del>
> +recirc_id=0,mpls,in_port=1,dl_src=50:54:00:00:00:09,mpls_label=11,mpls_tc=3,mpls_ttl=64,mpls_bos=1,mpls_lse1=0,mpls_lse2=0,
>  actions: <del>
> +recirc_id=0,mpls,in_port=1,dl_src=50:54:00:00:00:0b,mpls_label=11,mpls_tc=3,mpls_ttl=64,mpls_bos=1,mpls_lse1=0,mpls_lse2=0,
>  actions: <del>
> ])
> OVS_VSWITCHD_STOP
> AT_CLEANUP
> @@ -4966,8 +4966,8 @@ m4_define([CHECK_MEGAFLOW_NETFLOW],
>   AT_CHECK([ovs-appctl netdev-dummy/receive p1 
> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>   sleep 1
>   AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], 
> [dnl
> -recirc_id=0,skb_priority=0,icmp,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_tos=0,nw_frag=no,icmp_type=0x8/0xff,icmp_code=0x0/0xff,
>  actions: <del>
> -recirc_id=0,skb_priority=0,icmp,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_src=10.0.0.4,nw_dst=10.0.0.3,nw_tos=0,nw_frag=no,icmp_type=0x8/0xff,icmp_code=0x0/0xff,
>  actions: <del>
> +recirc_id=0,icmp,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_tos=0,nw_frag=no,icmp_type=0x8/0xff,icmp_code=0x0/0xff,
>  actions: <del>
> +recirc_id=0,icmp,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_src=10.0.0.4,nw_dst=10.0.0.3,nw_tos=0,nw_frag=no,icmp_type=0x8/0xff,icmp_code=0x0/0xff,
>  actions: <del>
> ])
>   OVS_VSWITCHD_STOP
>   AT_CLEANUP])
> @@ -4990,8 +4990,8 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p1 
> 'in_port(1),eth(src=50:54:00:00:00:
> AT_CHECK([ovs-appctl netdev-dummy/receive p1 
> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
> sleep 1
> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
> -recirc_id=0,skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_frag=no,
>  actions: <del>
> -recirc_id=0,skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_frag=no,
>  actions: <del>
> +recirc_id=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_frag=no,
>  actions: <del>
> +recirc_id=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_frag=no,
>  actions: <del>
> ])
> OVS_VSWITCHD_STOP
> AT_CLEANUP
> @@ -5011,8 +5011,8 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p1 
> 'in_port(1),eth(src=50:54:00:00:00:
> AT_CHECK([ovs-appctl netdev-dummy/receive p1 
> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
> sleep 1
> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
> -recirc_id=0,skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_frag=no,
>  actions: <del>
> -recirc_id=0,skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_frag=no,
>  actions: <del>
> +recirc_id=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_frag=no,
>  actions: <del>
> +recirc_id=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_frag=no,
>  actions: <del>
> ])
> OVS_VSWITCHD_STOP
> AT_CLEANUP
> @@ -5049,8 +5049,8 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p7 
> 'in_port(1),eth(src=50:54:00:00:00:
> AT_CHECK([ovs-appctl netdev-dummy/receive p7 
> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
> sleep 1
> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
> -recirc_id=0,skb_priority=0,ip,in_port=7,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_frag=no,
>  actions: <del>
> -recirc_id=0,skb_priority=0,ip,in_port=7,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_frag=no,
>  actions: <del>
> +recirc_id=0,ip,in_port=7,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_frag=no,
>  actions: <del>
> +recirc_id=0,ip,in_port=7,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_frag=no,
>  actions: <del>
> ])
> OVS_VSWITCHD_STOP
> AT_CLEANUP
> @@ -5068,8 +5068,8 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p1 
> 'in_port(1),eth(src=50:54:00:00:00:
> AT_CHECK([ovs-appctl netdev-dummy/receive p1 
> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
> sleep 1
> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
> -recirc_id=0,skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:09,nw_frag=no, 
> actions: <del>
> -recirc_id=0,skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:0b/ff:ff:00:00:00:02,nw_frag=no,
>  actions: <del>
> +recirc_id=0,ip,in_port=1,dl_src=50:54:00:00:00:09,nw_frag=no, actions: <del>
> +recirc_id=0,ip,in_port=1,dl_src=50:54:00:00:00:0b/ff:ff:00:00:00:02,nw_frag=no,
>  actions: <del>
> ])
> OVS_VSWITCHD_STOP
> AT_CLEANUP
> @@ -5088,8 +5088,8 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p1 
> 'in_port(1),eth(src=50:54:00:00:00:
> 1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
> sleep 1
> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
> -recirc_id=0,skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:09,nw_frag=no, 
> actions: <del>
> -recirc_id=0,skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:0b,nw_frag=no, 
> actions: <del>
> +recirc_id=0,ip,in_port=1,dl_src=50:54:00:00:00:09,nw_frag=no, actions: <del>
> +recirc_id=0,ip,in_port=1,dl_src=50:54:00:00:00:0b,nw_frag=no, actions: <del>
> ])
> OVS_VSWITCHD_STOP
> AT_CLEANUP
> @@ -5107,8 +5107,8 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p1 
> 'in_port(1),eth(src=50:54:00:00:00:
> AT_CHECK([ovs-appctl netdev-dummy/receive p1 
> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
> sleep 1
> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
> -recirc_id=0,skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:09,nw_frag=no, 
> actions: <del>
> -recirc_id=0,skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:0b,nw_frag=no, 
> actions: <del>
> +recirc_id=0,ip,in_port=1,dl_src=50:54:00:00:00:09,nw_frag=no, actions: <del>
> +recirc_id=0,ip,in_port=1,dl_src=50:54:00:00:00:0b,nw_frag=no, actions: <del>
> ])
> OVS_VSWITCHD_STOP
> AT_CLEANUP
> @@ -5131,7 +5131,7 @@ sleep 1
> AT_CHECK([ovs-appctl netdev-dummy/receive p1 
> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
> sleep 1
> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
> -recirc_id=0,skb_priority=0,ip,in_port=1,nw_frag=no, actions: <del>
> +recirc_id=0,ip,in_port=1,nw_frag=no, actions: <del>
> ])
> OVS_VSWITCHD_STOP
> AT_CLEANUP
> @@ -5153,8 +5153,8 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p1 
> 'in_port(1),eth(src=50:54:00:00:00:
> AT_CHECK([ovs-appctl netdev-dummy/receive p1 
> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
> sleep 1
> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
> -recirc_id=0,skb_priority=0,ip,in_port=1,dl_vlan=11,nw_frag=no, actions: <del>
> -recirc_id=0,skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,nw_frag=no, 
> actions: <del>
> +recirc_id=0,ip,in_port=1,dl_vlan=11,nw_frag=no, actions: <del>
> +recirc_id=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,nw_frag=no, actions: <del>
> ])
> OVS_VSWITCHD_STOP
> AT_CLEANUP
> @@ -5173,8 +5173,8 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p1 
> 'in_port(1),eth(src=50:54:00:00:00:
> AT_CHECK([ovs-appctl netdev-dummy/receive p1 
> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
> sleep 1
> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
> -recirc_id=0,skb_priority=0,ip,in_port=1,nw_src=10.0.0.2,nw_frag=no, actions: 
> <del>
> -recirc_id=0,skb_priority=0,ip,in_port=1,nw_src=10.0.0.4,nw_frag=no, actions: 
> <del>
> +recirc_id=0,ip,in_port=1,nw_src=10.0.0.2,nw_frag=no, actions: <del>
> +recirc_id=0,ip,in_port=1,nw_src=10.0.0.4,nw_frag=no, actions: <del>
> ])
> OVS_VSWITCHD_STOP
> AT_CLEANUP
> @@ -5191,8 +5191,8 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p1 
> 'in_port(1),eth(src=50:54:00:00:00:
> AT_CHECK([ovs-appctl netdev-dummy/receive p1 
> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
> sleep 1
> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
> -recirc_id=0,skb_priority=0,ip,in_port=1,nw_src=10.0.0.2,nw_frag=no, actions: 
> <del>
> -recirc_id=0,skb_priority=0,ip,in_port=1,nw_src=10.0.0.4,nw_frag=no, actions: 
> <del>
> +recirc_id=0,ip,in_port=1,nw_src=10.0.0.2,nw_frag=no, actions: <del>
> +recirc_id=0,ip,in_port=1,nw_src=10.0.0.4,nw_frag=no, actions: <del>
> ])
> OVS_VSWITCHD_STOP
> AT_CLEANUP
> @@ -5218,8 +5218,8 @@ done
> sleep 1
> dnl The original flow is missing due to a revalidation.
> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
> -recirc_id=0,skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x0fff,dl_src=50:54:00:00:00:09,nw_frag=no,
>  actions: <del>
> -recirc_id=0,skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x0fff,dl_src=50:54:00:00:00:0b,nw_frag=no,
>  actions: <del>
> +recirc_id=0,ip,in_port=1,vlan_tci=0x0000/0x0fff,dl_src=50:54:00:00:00:09,nw_frag=no,
>  actions: <del>
> +recirc_id=0,ip,in_port=1,vlan_tci=0x0000/0x0fff,dl_src=50:54:00:00:00:0b,nw_frag=no,
>  actions: <del>
> ])
> OVS_VSWITCHD_STOP
> AT_CLEANUP
> @@ -5250,9 +5250,9 @@ sleep 1
> AT_CHECK([ovs-appctl netdev-dummy/receive p3 
> 'in_port(3),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0x1,ttl=64,frag=no),icmp(type=8,code=0)'])
> sleep 1
> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
> -recirc_id=0,skb_priority=0,ip,in_port=1,nw_ecn=1,nw_frag=no, actions: <del>
> -recirc_id=0,skb_priority=0,ip,in_port=3,nw_tos=0,nw_ecn=1,nw_ttl=64,nw_frag=no,
>  actions: <del>
> -recirc_id=0,skb_priority=0,ip,in_port=3,nw_tos=252,nw_ecn=1,nw_ttl=128,nw_frag=no,
>  actions: <del>
> +recirc_id=0,ip,in_port=1,nw_ecn=1,nw_frag=no, actions: <del>
> +recirc_id=0,ip,in_port=3,nw_tos=0,nw_ecn=1,nw_ttl=64,nw_frag=no, actions: 
> <del>
> +recirc_id=0,ip,in_port=3,nw_tos=252,nw_ecn=1,nw_ttl=128,nw_frag=no, actions: 
> <del>
> ])
> OVS_VSWITCHD_STOP
> AT_CLEANUP
> @@ -5270,8 +5270,8 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p1 
> 'in_port(1),eth(src=50:54:00:00:00:
> AT_CHECK([ovs-appctl netdev-dummy/receive p1 
> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
> sleep 1
> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
> -recirc_id=0,skb_priority=0,icmp,in_port=1,nw_src=10.0.0.4,nw_ttl=64,nw_frag=no,
>  actions: <del>
> -recirc_id=0,skb_priority=0,ip,in_port=1,nw_src=10.0.0.2/0.0.0.2,nw_frag=no, 
> actions: <del>
> +recirc_id=0,icmp,in_port=1,nw_src=10.0.0.4,nw_ttl=64,nw_frag=no, actions: 
> <del>
> +recirc_id=0,ip,in_port=1,nw_src=10.0.0.2/0.0.0.2,nw_frag=no, actions: <del>
> ])
> OVS_VSWITCHD_STOP
> AT_CLEANUP
> @@ -5291,8 +5291,8 @@ dnl The first packet is essentially a no-op, as the new 
> destination MAC is the
> dnl same as the original.  The second entry actually updates the destination
> dnl MAC.
> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
> -recirc_id=0,skb_priority=0,ip,in_port=1,dl_dst=50:54:00:00:00:0a,nw_frag=no, 
> actions:2
> -recirc_id=0,skb_priority=0,ip,in_port=1,dl_dst=50:54:00:00:00:0c,nw_frag=no, 
> actions:set(eth(dst=50:54:00:00:00:0a)),2
> +recirc_id=0,ip,in_port=1,dl_dst=50:54:00:00:00:0a,nw_frag=no, actions:2
> +recirc_id=0,ip,in_port=1,dl_dst=50:54:00:00:00:0c,nw_frag=no, 
> actions:set(eth(dst=50:54:00:00:00:0a)),2
> ])
> OVS_VSWITCHD_STOP
> AT_CLEANUP
> diff --git a/tests/tunnel.at b/tests/tunnel.at
> index be1269d..b2ab6cb 100644
> --- a/tests/tunnel.at
> +++ b/tests/tunnel.at
> @@ -81,28 +81,28 @@ AT_CHECK([ovs-appctl dpif/show | tail -n +3], [0], [dnl
> dnl Tunnel CE and encapsulated packet CE
> AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 
> 'tunnel(tun_id=0x0,src=1.1.1.1,dst=2.2.2.2,tos=0x3,ttl=64,tp_src=0,tp_dst=0,flags()),in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=3,ttl=64,frag=no),tcp(src=8,dst=9)'],
>  [0], [stdout])
> AT_CHECK([tail -2 stdout], [0],
> -  [Megaflow: 
> pkt_mark=0,recirc_id=0,skb_priority=0,ip,tun_id=0,tun_src=1.1.1.1,tun_dst=2.2.2.2,tun_tos=3,tun_ttl=64,,in_port=1,nw_ecn=3,nw_frag=no
> +  [Megaflow: 
> pkt_mark=0,recirc_id=0,ip,tun_id=0,tun_src=1.1.1.1,tun_dst=2.2.2.2,tun_tos=3,tun_ttl=64,,in_port=1,nw_ecn=3,nw_frag=no
> Datapath actions: 2
> ])
> 
> dnl Tunnel CE and encapsulated packet ECT(1)
> AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 
> 'tunnel(tun_id=0x0,src=1.1.1.1,dst=2.2.2.2,tos=0x3,ttl=64,tp_src=0,tp_dst=0,flags()),in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=1,ttl=64,frag=no),tcp(src=8,dst=9)'],
>  [0], [stdout])
> AT_CHECK([tail -2 stdout], [0],
> -  [Megaflow: 
> pkt_mark=0,recirc_id=0,skb_priority=0,ip,tun_id=0,tun_src=1.1.1.1,tun_dst=2.2.2.2,tun_tos=3,tun_ttl=64,,in_port=1,nw_ecn=1,nw_frag=no
> +  [Megaflow: 
> pkt_mark=0,recirc_id=0,ip,tun_id=0,tun_src=1.1.1.1,tun_dst=2.2.2.2,tun_tos=3,tun_ttl=64,,in_port=1,nw_ecn=1,nw_frag=no
> Datapath actions: set(ipv4(tos=0x3/0x3)),2
> ])
> 
> dnl Tunnel CE and encapsulated packet ECT(2)
> AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 
> 'tunnel(tun_id=0x0,src=1.1.1.1,dst=2.2.2.2,tos=0x3,ttl=64,tp_src=0,tp_dst=0,flags()),in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=2,ttl=64,frag=no),tcp(src=8,dst=9)'],
>  [0], [stdout])
> AT_CHECK([tail -2 stdout], [0],
> -  [Megaflow: 
> pkt_mark=0,recirc_id=0,skb_priority=0,ip,tun_id=0,tun_src=1.1.1.1,tun_dst=2.2.2.2,tun_tos=3,tun_ttl=64,,in_port=1,nw_ecn=2,nw_frag=no
> +  [Megaflow: 
> pkt_mark=0,recirc_id=0,ip,tun_id=0,tun_src=1.1.1.1,tun_dst=2.2.2.2,tun_tos=3,tun_ttl=64,,in_port=1,nw_ecn=2,nw_frag=no
> Datapath actions: set(ipv4(tos=0x3/0x3)),2
> ])
> 
> dnl Tunnel CE and encapsulated packet Non-ECT
> AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 
> 'tunnel(tun_id=0x0,src=1.1.1.1,dst=2.2.2.2,tos=0x3,ttl=64,tp_src=0,tp_dst=0,flags()),in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9)'],
>  [0], [stdout])
> AT_CHECK([tail -2 stdout], [0],
> -  [Megaflow: 
> pkt_mark=0,recirc_id=0,skb_priority=0,ip,tun_id=0,tun_src=1.1.1.1,tun_dst=2.2.2.2,tun_tos=3,tun_ttl=64,,in_port=1,nw_ecn=0,nw_frag=no
> +  [Megaflow: 
> pkt_mark=0,recirc_id=0,ip,tun_id=0,tun_src=1.1.1.1,tun_dst=2.2.2.2,tun_tos=3,tun_ttl=64,,in_port=1,nw_ecn=0,nw_frag=no
> Datapath actions: drop
> ])
> OVS_VSWITCHD_STOP(["/dropping tunnel packet marked ECN CE but is not ECN 
> capable/d"])
> -- 
> 2.1.0.rc1
> 
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to