diff mbox series

[ovs-dev,3/4] flow: Add some L7 payload data to most L4 protocols that accept it.

Message ID 20180118224515.4208-3-blp@ovn.org
State Superseded
Headers show
Series [ovs-dev,1/4] ofproto-dpif-trace: Generalize syntax for ofproto/trace. | expand

Commit Message

Ben Pfaff Jan. 18, 2018, 10:45 p.m. UTC
This makes traffic generated by flow_compose() look slightly more
realistic.  It requires lots of updates to tests, but at least the tests
themselves should be slightly more realistic too.

At the same time, add --l7 and --l7-len options to ofproto/trace to allow
users to specify the amount or contents of payloads that they want.

Suggested-by: Brad Cowie <brad@cowie.nz>
Signed-off-by: Ben Pfaff <blp@ovn.org>
---
 NEWS                         |   3 +-
 lib/flow.c                   |  88 +++--
 lib/flow.h                   |   4 +-
 lib/netdev-dummy.c           |  15 +-
 ofproto/ofproto-dpif-trace.c |  34 +-
 ofproto/ofproto-dpif.c       |   2 +-
 ofproto/ofproto-unixctl.man  |  10 +
 ovn/controller/ofctrl.c      |   2 +-
 tests/bfd.at                 |   4 +-
 tests/learn.at               |  40 +--
 tests/mcast-snooping.at      |   2 +-
 tests/ofproto-dpif.at        | 806 ++++++++++++++++++++++++-------------------
 tests/pmd.at                 |  52 +--
 tests/test-ovn.c             |   2 +-
 14 files changed, 620 insertions(+), 444 deletions(-)

Comments

Yifeng Sun Jan. 26, 2018, 9:52 p.m. UTC | #1
Hi Ben,

I found an issue in the lines below. It looks like that the 'else if' part
is redundant.

+        if (dp_packet_size(packet) < packet_size) {
+            packet_expand(packet, &flow, packet_size);
+        } else if (dp_packet_size(packet) < packet_size){
+            dp_packet_delete(packet);
+            packet = NULL;
+        }

And do you know which commit this patch is based on? I am having problem
to apply this patch and test it out.

Thanks,
Yifeng


On Thu, Jan 18, 2018 at 2:45 PM, Ben Pfaff <blp@ovn.org> wrote:

> This makes traffic generated by flow_compose() look slightly more
> realistic.  It requires lots of updates to tests, but at least the tests
> themselves should be slightly more realistic too.
>
> At the same time, add --l7 and --l7-len options to ofproto/trace to allow
> users to specify the amount or contents of payloads that they want.
>
> Suggested-by: Brad Cowie <brad@cowie.nz>
> Signed-off-by: Ben Pfaff <blp@ovn.org>
> ---
>  NEWS                         |   3 +-
>  lib/flow.c                   |  88 +++--
>  lib/flow.h                   |   4 +-
>  lib/netdev-dummy.c           |  15 +-
>  ofproto/ofproto-dpif-trace.c |  34 +-
>  ofproto/ofproto-dpif.c       |   2 +-
>  ofproto/ofproto-unixctl.man  |  10 +
>  ovn/controller/ofctrl.c      |   2 +-
>  tests/bfd.at                 |   4 +-
>  tests/learn.at               |  40 +--
>  tests/mcast-snooping.at      |   2 +-
>  tests/ofproto-dpif.at        | 806 ++++++++++++++++++++++++------
> -------------
>  tests/pmd.at                 |  52 +--
>  tests/test-ovn.c             |   2 +-
>  14 files changed, 620 insertions(+), 444 deletions(-)
>
> diff --git a/NEWS b/NEWS
> index c067b9462f2d..5289bc156dc2 100644
> --- a/NEWS
> +++ b/NEWS
> @@ -1,6 +1,7 @@
>  Post-v2.9.0
>  --------------------
> -    - Nothing yet.
> +    - ovs-vswitchd:
> +      * New options --l7 and --l7-len to "ofproto/trace" command.
>
>
>  v2.9.0 - xx xxx xxxx
> diff --git a/lib/flow.c b/lib/flow.c
> index 04a73fd4ed5a..38ff29c8cd14 100644
> --- a/lib/flow.c
> +++ b/lib/flow.c
> @@ -2692,8 +2692,24 @@ flow_set_mpls_lse(struct flow *flow, int idx,
> ovs_be32 lse)
>      flow->mpls_lse[idx] = lse;
>  }
>
> +static void
> +flow_compose_l7(struct dp_packet *p, const void *l7, size_t l7_len)
> +{
> +    if (l7_len) {
> +        if (l7) {
> +            dp_packet_put(p, l7, l7_len);
> +        } else {
> +            uint8_t *payload = dp_packet_put_uninit(p, l7_len);
> +            for (size_t i = 0; i < l7_len; i++) {
> +                payload[i] = i;
> +            }
> +        }
> +    }
> +}
> +
>  static size_t
> -flow_compose_l4(struct dp_packet *p, const struct flow *flow)
> +flow_compose_l4(struct dp_packet *p, const struct flow *flow,
> +                const void *l7, size_t l7_len)
>  {
>      size_t orig_len = dp_packet_size(p);
>
> @@ -2704,19 +2720,31 @@ flow_compose_l4(struct dp_packet *p, const struct
> flow *flow)
>              tcp->tcp_src = flow->tp_src;
>              tcp->tcp_dst = flow->tp_dst;
>              tcp->tcp_ctl = TCP_CTL(ntohs(flow->tcp_flags), 5);
> +            if (!(flow->tcp_flags & htons(TCP_SYN | TCP_FIN | TCP_RST))) {
> +                flow_compose_l7(p, l7, l7_len);
> +            }
>          } else if (flow->nw_proto == IPPROTO_UDP) {
>              struct udp_header *udp = dp_packet_put_zeros(p, sizeof *udp);
>              udp->udp_src = flow->tp_src;
>              udp->udp_dst = flow->tp_dst;
> -            udp->udp_len = htons(sizeof *udp);
> +            udp->udp_len = htons(sizeof *udp + l7_len);
> +            flow_compose_l7(p, l7, l7_len);
>          } else if (flow->nw_proto == IPPROTO_SCTP) {
>              struct sctp_header *sctp = dp_packet_put_zeros(p, sizeof
> *sctp);
>              sctp->sctp_src = flow->tp_src;
>              sctp->sctp_dst = flow->tp_dst;
> +            /* XXX Someone should figure out what L7 data to include. */
>          } else if (flow->nw_proto == IPPROTO_ICMP) {
>              struct icmp_header *icmp = dp_packet_put_zeros(p, sizeof
> *icmp);
>              icmp->icmp_type = ntohs(flow->tp_src);
>              icmp->icmp_code = ntohs(flow->tp_dst);
> +            if ((icmp->icmp_type == ICMP4_ECHO_REQUEST ||
> +                 icmp->icmp_type == ICMP4_ECHO_REPLY)
> +                && icmp->icmp_code == 0) {
> +                flow_compose_l7(p, l7, l7_len);
> +            } else {
> +                /* XXX Add inner IP packet for e.g. destination
> unreachable? */
> +            }
>          } else if (flow->nw_proto == IPPROTO_IGMP) {
>              struct igmp_header *igmp = dp_packet_put_zeros(p, sizeof
> *igmp);
>              igmp->igmp_type = ntohs(flow->tp_src);
> @@ -2748,6 +2776,12 @@ flow_compose_l4(struct dp_packet *p, const struct
> flow *flow)
>                      lla_opt->type = ND_OPT_TARGET_LINKADDR;
>                      lla_opt->mac = flow->arp_tha;
>                  }
> +            } else if (icmp->icmp6_code == 0 &&
> +                       (icmp->icmp6_type == ICMP6_ECHO_REQUEST ||
> +                        icmp->icmp6_type == ICMP6_ECHO_REPLY)) {
> +                flow_compose_l7(p, l7, l7_len);
> +            } else {
> +                /* XXX Add inner IP packet for e.g. destination
> unreachable? */
>              }
>          }
>      }
> @@ -2800,7 +2834,7 @@ flow_compose_l4_csum(struct dp_packet *p, const
> struct flow *flow,
>   * ip/udp lengths and l3/l4 checksums.
>   *
>   * 'size' needs to be larger then the current packet size.  */
> -static void
> +void
>  packet_expand(struct dp_packet *p, const struct flow *flow, size_t size)
>  {
>      size_t extra_size;
> @@ -2850,10 +2884,19 @@ packet_expand(struct dp_packet *p, const struct
> flow *flow, size_t size)
>   * (This is useful only for testing, obviously, and the packet isn't
> really
>   * valid.  Lots of fields are just zeroed.)
>   *
> - * The created packet has minimal packet size, just big enough to hold
> - * the packet header fields.  */
> -static void
> -flow_compose_minimal(struct dp_packet *p, const struct flow *flow)
> + * For packets whose protocols can encapsulate arbitrary L7 payloads,
> 'l7' and
> + * 'l7_len' determine that payload:
> + *
> + *    - If 'l7_len' is zero, no payload is included.
> + *
> + *    - If 'l7_len' is nonzero and 'l7' is null, an arbitrary payload
> 'l7_len'
> + *      bytes long is included.
> + *
> + *    - If 'l7_len' is nonzero and 'l7' is nonnull, the payload is copied
> + *      from 'l7'. */
> +void
> +flow_compose(struct dp_packet *p, const struct flow *flow,
> +             const void *l7, size_t l7_len)
>  {
>      uint32_t pseudo_hdr_csum;
>      size_t l4_len;
> @@ -2893,7 +2936,7 @@ flow_compose_minimal(struct dp_packet *p, const
> struct flow *flow)
>
>          dp_packet_set_l4(p, dp_packet_tail(p));
>
> -        l4_len = flow_compose_l4(p, flow);
> +        l4_len = flow_compose_l4(p, flow, l7, l7_len);
>
>          ip = dp_packet_l3(p);
>          ip->ip_tot_len = htons(p->l4_ofs - p->l3_ofs + l4_len);
> @@ -2916,7 +2959,7 @@ flow_compose_minimal(struct dp_packet *p, const
> struct flow *flow)
>
>          dp_packet_set_l4(p, dp_packet_tail(p));
>
> -        l4_len = flow_compose_l4(p, flow);
> +        l4_len = flow_compose_l4(p, flow, l7, l7_len);
>
>          nh = dp_packet_l3(p);
>          nh->ip6_plen = htons(l4_len);
> @@ -2958,33 +3001,6 @@ flow_compose_minimal(struct dp_packet *p, const
> struct flow *flow)
>          }
>      }
>  }
> -
> -/* Puts into 'p' a Ethernet frame of size 'size' that flow_extract() would
> - * parse as having the given 'flow'.
> - *
> - * When 'size' is zero, 'p' is a minimal size packet that only big enough
> - * to contains all packet headers.
> - *
> - * When 'size' is larger than the minimal packet size, the packet will
> - * be expended to 'size' with the payload set to zero.
> - *
> - * Return 'true' if the packet is successfully created. 'false' otherwise.
> - * Note, when 'size' is set to zero, this function always returns true.
> */
> -bool
> -flow_compose(struct dp_packet *p, const struct flow *flow, size_t size)
> -{
> -    flow_compose_minimal(p, flow);
> -
> -    if (size && size < dp_packet_size(p)) {
> -        return false;
> -    }
> -
> -    if (size > dp_packet_size(p)) {
> -        packet_expand(p, flow, size);
> -    }
> -
> -    return true;
> -}
>
>  /* Compressed flow. */
>
> diff --git a/lib/flow.h b/lib/flow.h
> index eb1e2bfc6942..770a07a62778 100644
> --- a/lib/flow.h
> +++ b/lib/flow.h
> @@ -124,7 +124,9 @@ void flow_set_mpls_tc(struct flow *, int idx, uint8_t
> tc);
>  void flow_set_mpls_bos(struct flow *, int idx, uint8_t stack);
>  void flow_set_mpls_lse(struct flow *, int idx, ovs_be32 lse);
>
> -bool flow_compose(struct dp_packet *, const struct flow *, size_t);
> +void flow_compose(struct dp_packet *, const struct flow *,
> +                  const void *l7, size_t l7_len);
> +void packet_expand(struct dp_packet *, const struct flow *, size_t size);
>
>  bool parse_ipv6_ext_hdrs(const void **datap, size_t *sizep, uint8_t
> *nw_proto,
>                           uint8_t *nw_frag);
> diff --git a/lib/netdev-dummy.c b/lib/netdev-dummy.c
> index 4246af3b9c86..35b748f11396 100644
> --- a/lib/netdev-dummy.c
> +++ b/lib/netdev-dummy.c
> @@ -1520,10 +1520,17 @@ eth_from_flow(const char *s, size_t packet_size)
>      }
>
>      packet = dp_packet_new(0);
> -    if (!flow_compose(packet, &flow, packet_size)) {
> -        dp_packet_delete(packet);
> -        packet = NULL;
> -    };
> +    if (packet_size) {
> +        flow_compose(packet, &flow, NULL, 0);
> +        if (dp_packet_size(packet) < packet_size) {
> +            packet_expand(packet, &flow, packet_size);
> +        } else if (dp_packet_size(packet) < packet_size){
> +            dp_packet_delete(packet);
> +            packet = NULL;
> +        }
> +    } else {
> +        flow_compose(packet, &flow, NULL, 64);
> +    }
>
>      ofpbuf_uninit(&odp_key);
>      return packet;
> diff --git a/ofproto/ofproto-dpif-trace.c b/ofproto/ofproto-dpif-trace.c
> index 75730155080c..1055644b6d5b 100644
> --- a/ofproto/ofproto-dpif-trace.c
> +++ b/ofproto/ofproto-dpif-trace.c
> @@ -203,6 +203,8 @@ parse_flow_and_packet(int argc, const char *argv[],
>      char *m_err = NULL;
>      struct simap port_names = SIMAP_INITIALIZER(&port_names);
>      struct dp_packet *packet = NULL;
> +    uint8_t *l7 = NULL;
> +    size_t l7_len = 64;
>      struct ofpbuf odp_key;
>      struct ofpbuf odp_mask;
>
> @@ -219,6 +221,35 @@ parse_flow_and_packet(int argc, const char *argv[],
>          const char *arg = argv[i];
>          if (!strcmp(arg, "-generate") || !strcmp(arg, "--generate")) {
>              generate_packet = true;
> +        } else if (!strcmp(arg, "--l7")) {
> +            if (i + 1 >= argc) {
> +                m_err = xasprintf("Missing argument for option %s", arg);
> +                goto exit;
> +            }
> +
> +            struct dp_packet payload;
> +            memset(&payload, 0, sizeof payload);
> +            dp_packet_init(&payload, 0);
> +            if (dp_packet_put_hex(&payload, argv[++i], NULL)[0] != '\0') {
> +                dp_packet_uninit(&payload);
> +                error = "Trailing garbage in packet data";
> +                goto exit;
> +            }
> +            free(l7);
> +            l7_len = dp_packet_size(&payload);
> +            l7 = dp_packet_steal_data(&payload);
> +        } else if (!strcmp(arg, "--l7-len")) {
> +            if (i + 1 >= argc) {
> +                m_err = xasprintf("Missing argument for option %s", arg);
> +                goto exit;
> +            }
> +            free(l7);
> +            l7 = NULL;
> +            l7_len = atoi(argv[++i]);
> +            if (l7_len > 64000) {
> +                m_err = xasprintf("%s: too much L7 data", argv[i]);
> +                goto exit;
> +            }
>          } else if (consistent
>                     && (!strcmp(arg, "-consistent") ||
>                         !strcmp(arg, "--consistent"))) {
> @@ -392,7 +423,7 @@ parse_flow_and_packet(int argc, const char *argv[],
>      if (generate_packet) {
>          /* Generate a packet, as requested. */
>          packet = dp_packet_new(0);
> -        flow_compose(packet, flow, 0);
> +        flow_compose(packet, flow, l7, l7_len);
>      } else if (packet) {
>          /* Use the metadata from the flow and the packet argument to
>           * reconstruct the flow. */
> @@ -412,6 +443,7 @@ exit:
>      ofpbuf_uninit(&odp_key);
>      ofpbuf_uninit(&odp_mask);
>      simap_destroy(&port_names);
> +    free(l7);
>      return m_err;
>  }
>
> diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c
> index 6157b70aee60..5ba0492b01d8 100644
> --- a/ofproto/ofproto-dpif.c
> +++ b/ofproto/ofproto-dpif.c
> @@ -1227,7 +1227,7 @@ check_ct_eventmask(struct dpif_backer *backer)
>
>      /* Compose a dummy UDP packet. */
>      dp_packet_init(&packet, 0);
> -    flow_compose(&packet, &flow, 0);
> +    flow_compose(&packet, &flow, NULL, 64);
>
>      /* Execute the actions.  On older datapaths this fails with EINVAL, on
>       * newer datapaths it succeeds. */
> diff --git a/ofproto/ofproto-unixctl.man b/ofproto/ofproto-unixctl.man
> index 8f1d12c654ab..dede5f39da84 100644
> --- a/ofproto/ofproto-unixctl.man
> +++ b/ofproto/ofproto-unixctl.man
> @@ -53,6 +53,11 @@ These commands support the following options:
>  .IP \fB\-\-generate\fR
>  Generate a packet from the flow (see below for more information).
>  .
> +.IP "\fB\-\-l7 \fIpayload\fR"
> +.IQ "\fB\-\-l7\-len \fIlength\fR"
> +Accepted only with \fB\-\-generate\fR (see below for more
> +information).
> +.
>  .IP \fB\-\-consistent\fR
>  Accepted by \fBofproto\-trace\-packet\-out\fR only.  With this option,
>  the command rejects \fIactions\fR that are inconsistent with the
> @@ -147,6 +152,11 @@ it, but \fB\-\-generate\fR is not a good way to fill
> in incomplete
>  information, because it generates packets based on only the flow
>  information, which means that the packets really do not have any more
>  information than the flow.
> +.IP
> +By default, for protocols that allow arbitrary L7 payloads, the
> +generated packet has 64 bytes of payload.  Use \fB\-\-l7\-len\fR to
> +change the payload length, or \fB\-\-l7\fR to specify the exact
> +contents of the payload.
>  .
>  .IP \fIpacket\fR
>  This form supplies an explicit \fIpacket\fR as a sequence of hex
> diff --git a/ovn/controller/ofctrl.c b/ovn/controller/ofctrl.c
> index 2fa980ebdae1..c9c5cc152e4c 100644
> --- a/ovn/controller/ofctrl.c
> +++ b/ovn/controller/ofctrl.c
> @@ -1149,7 +1149,7 @@ ofctrl_inject_pkt(const struct ovsrec_bridge
> *br_int, const char *flow_s,
>      uint64_t packet_stub[128 / 8];
>      struct dp_packet packet;
>      dp_packet_use_stub(&packet, packet_stub, sizeof packet_stub);
> -    flow_compose(&packet, &uflow, 0);
> +    flow_compose(&packet, &uflow, NULL, 64);
>
>      uint64_t ofpacts_stub[1024 / 8];
>      struct ofpbuf ofpacts = OFPBUF_STUB_INITIALIZER(ofpacts_stub);
> diff --git a/tests/bfd.at b/tests/bfd.at
> index 5ba99a4e1d23..ba912b5683b8 100644
> --- a/tests/bfd.at
> +++ b/tests/bfd.at
> @@ -237,7 +237,7 @@ OVS_VSWITCHD_START([add-port br0 p1 -- set Interface
> p1 type=gre \
>                      set bridge br0 fail-mode=standalone])
>
>  # by default check_tnl_key is false. so we should process a bfd packet
> with tun_id=1.
> -AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'tunnel(tun_id=0x1,src=2.2.2.
> 2,dst=2.2.2.1,tos=0x0,ttl=64,tp_src=0,tp_dst=0,flags(key)),
> in_port(1),skb_mark(0/0),eth(src=00:11:22:33:44:55,dst=00:
> 23:20:00:00:01),eth_type(0x0800),ipv4(src=169.254.1.0/
> 0.0.0.0,dst=169.254.1.1/0.0.0.0,proto=17/0xff,tos=0/0,ttl=255/0,frag=no
> ),udp(src=49152/0,dst=3784/0xffff)' -generate], [0], [stdout])
> +AT_CHECK([ovs-appctl ofproto/trace --l7-len 0 ovs-dummy
> 'tunnel(tun_id=0x1,src=2.2.2.2,dst=2.2.2.1,tos=0x0,ttl=64,
> tp_src=0,tp_dst=0,flags(key)),in_port(1),skb_mark(0/0),eth(
> src=00:11:22:33:44:55,dst=00:23:20:00:00:01),eth_type(0x0800),ipv4(src=
> 169.254.1.0/0.0.0.0,dst=169.254.1.1/0.0.0.0,proto=17/0xff,tos=0/0,ttl=
> 255/0,frag=no),udp(src=49152/0,dst=3784/0xffff)' -generate], [0],
> [stdout])
>  # check that the packet should be handled as BFD packet.
>  AT_CHECK([tail -2 stdout], [0], [dnl
>  This flow is handled by the userspace slow path because it:
> @@ -254,7 +254,7 @@ Datapath actions: 100
>
>  # set the tunnel key to 0.
>  AT_CHECK([ovs-vsctl set interface p1 options:key=0])
> -AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'tunnel(tun_id=0x0,src=2.2.2.
> 2,dst=2.2.2.1,tos=0x0,ttl=64,tp_src=0,tp_dst=0,flags(key)),
> in_port(1),skb_mark(0/0),eth(src=00:11:22:33:44:55,dst=00:
> 23:20:00:00:01),eth_type(0x0800),ipv4(src=169.254.1.0/
> 0.0.0.0,dst=169.254.1.1/0.0.0.0,proto=17/0xff,tos=0/0,ttl=255/0,frag=no
> ),udp(src=49152/0,dst=3784/0xffff)' -generate], [0], [stdout])
> +AT_CHECK([ovs-appctl ofproto/trace --l7-len 0 ovs-dummy
> 'tunnel(tun_id=0x0,src=2.2.2.2,dst=2.2.2.1,tos=0x0,ttl=64,
> tp_src=0,tp_dst=0,flags(key)),in_port(1),skb_mark(0/0),eth(
> src=00:11:22:33:44:55,dst=00:23:20:00:00:01),eth_type(0x0800),ipv4(src=
> 169.254.1.0/0.0.0.0,dst=169.254.1.1/0.0.0.0,proto=17/0xff,tos=0/0,ttl=
> 255/0,frag=no),udp(src=49152/0,dst=3784/0xffff)' -generate], [0],
> [stdout])
>  # check that the packet should be handled as BFD packet.
>  AT_CHECK([tail -2 stdout], [0], [dnl
>  This flow is handled by the userspace slow path because it:
> diff --git a/tests/learn.at b/tests/learn.at
> index 72e22c4bf348..07ad043212ed 100644
> --- a/tests/learn.at
> +++ b/tests/learn.at
> @@ -317,8 +317,8 @@ done
>  # Check for the learning entry.
>  ovs-appctl time/warp 1000
>  AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0],
> -[[ n_packets=1, n_bytes=54, actions=load:0x3->NXM_NX_REG0[
> 0..15],learn(table=0,priority=65535,NXM_OF_ETH_SRC[],NXM_OF_
> VLAN_TCI[0..11],output:NXM_NX_REG0[0..15]),output:2
> - n_packets=9, n_bytes=486, priority=65535,vlan_tci=
> 0x0000/0x0fff,dl_src=50:54:00:00:00:05 actions=output:3
> +[[ n_packets=1, n_bytes=118, actions=load:0x3->NXM_NX_REG0[
> 0..15],learn(table=0,priority=65535,NXM_OF_ETH_SRC[],NXM_OF_
> VLAN_TCI[0..11],output:NXM_NX_REG0[0..15]),output:2
> + n_packets=9, n_bytes=1062, priority=65535,vlan_tci=
> 0x0000/0x0fff,dl_src=50:54:00:00:00:05 actions=output:3
>  NXST_FLOW reply:
>  ]])
>
> @@ -327,10 +327,10 @@ AT_CHECK(
>    [(ovs-ofctl dump-ports br0 2; ovs-ofctl dump-ports br0 3) |
> strip_xids], [0],
>    [OFPST_PORT reply: 1 ports
>    port  2: rx pkts=0, bytes=0, drop=?, errs=?, frame=?, over=?, crc=?
> -           tx pkts=1, bytes=54, drop=?, errs=?, coll=?
> +           tx pkts=1, bytes=118, drop=?, errs=?, coll=?
>  OFPST_PORT reply: 1 ports
>    port  3: rx pkts=0, bytes=0, drop=?, errs=?, frame=?, over=?, crc=?
> -           tx pkts=9, bytes=486, drop=?, errs=?, coll=?
> +           tx pkts=9, bytes=1062, drop=?, errs=?, coll=?
>  ])
>
>  OVS_VSWITCHD_STOP
> @@ -378,17 +378,17 @@ AT_CHECK(
>    [(ovs-ofctl dump-ports br0 2; ovs-ofctl dump-ports br0 3) |
> strip_xids], [0],
>    [OFPST_PORT reply: 1 ports
>    port  2: rx pkts=0, bytes=0, drop=?, errs=?, frame=?, over=?, crc=?
> -           tx pkts=2, bytes=108, drop=?, errs=?, coll=?
> +           tx pkts=2, bytes=236, drop=?, errs=?, coll=?
>  OFPST_PORT reply: 1 ports
>    port  3: rx pkts=0, bytes=0, drop=?, errs=?, frame=?, over=?, crc=?
> -           tx pkts=18, bytes=972, drop=?, errs=?, coll=?
> +           tx pkts=18, bytes=2124, drop=?, errs=?, coll=?
>  ])
>
>  # Check for the learning entry.
>  ovs-appctl time/warp 1000
>  AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0],
> -[[ n_packets=2, n_bytes=108, actions=load:0x3->NXM_NX_REG0[
> 0..15],learn(table=0,idle_timeout=5,priority=65535,NXM_
> OF_ETH_SRC[],NXM_OF_VLAN_TCI[0..11],output:NXM_NX_REG0[0..15]),output:2
> - n_packets=9, n_bytes=486, idle_timeout=5, priority=65535,vlan_tci=
> 0x0000/0x0fff,dl_src=50:54:00:00:00:06 actions=output:3
> +[[ n_packets=2, n_bytes=236, actions=load:0x3->NXM_NX_REG0[
> 0..15],learn(table=0,idle_timeout=5,priority=65535,NXM_
> OF_ETH_SRC[],NXM_OF_VLAN_TCI[0..11],output:NXM_NX_REG0[0..15]),output:2
> + n_packets=9, n_bytes=1062, idle_timeout=5, priority=65535,vlan_tci=
> 0x0000/0x0fff,dl_src=50:54:00:00:00:06 actions=output:3
>  NXST_FLOW reply:
>  ]])
>  OVS_VSWITCHD_STOP
> @@ -420,10 +420,10 @@ AT_CHECK(
>    [(ovs-ofctl dump-ports br0 2; ovs-ofctl dump-ports br0 3) |
> strip_xids], [0],
>    [OFPST_PORT reply: 1 ports
>    port  2: rx pkts=0, bytes=0, drop=?, errs=?, frame=?, over=?, crc=?
> -           tx pkts=1, bytes=54, drop=?, errs=?, coll=?
> +           tx pkts=1, bytes=118, drop=?, errs=?, coll=?
>  OFPST_PORT reply: 1 ports
>    port  3: rx pkts=0, bytes=0, drop=?, errs=?, frame=?, over=?, crc=?
> -           tx pkts=9, bytes=486, drop=?, errs=?, coll=?
> +           tx pkts=9, bytes=1062, drop=?, errs=?, coll=?
>  ])
>
>  # Trace some packets arriving.  This is is a different flow from the
> previous.
> @@ -476,18 +476,18 @@ AT_CHECK(
>    [(ovs-ofctl dump-ports br0 2; ovs-ofctl dump-ports br0 3) |
> strip_xids], [0],
>    [OFPST_PORT reply: 1 ports
>    port  2: rx pkts=0, bytes=0, drop=?, errs=?, frame=?, over=?, crc=?
> -           tx pkts=3, bytes=162, drop=?, errs=?, coll=?
> +           tx pkts=3, bytes=354, drop=?, errs=?, coll=?
>  OFPST_PORT reply: 1 ports
>    port  3: rx pkts=0, bytes=0, drop=?, errs=?, frame=?, over=?, crc=?
> -           tx pkts=17, bytes=918, drop=?, errs=?, coll=?
> +           tx pkts=17, bytes=2006, drop=?, errs=?, coll=?
>  ])
>
>  # Check for the learning entry.
>  ovs-appctl time/warp 1000
>  sleep 1
>  AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0],
> -[[ n_packets=3, n_bytes=162, actions=load:0x3->NXM_NX_REG0[
> 0..15],learn(table=0,hard_timeout=10,priority=65535,NXM_
> OF_ETH_SRC[],NXM_OF_VLAN_TCI[0..11],output:NXM_NX_REG0[0..15]),output:2
> - n_packets=3, n_bytes=162, hard_timeout=10, priority=65535,vlan_tci=
> 0x0000/0x0fff,dl_src=50:54:00:00:00:06 actions=output:3
> +[[ n_packets=3, n_bytes=354, actions=load:0x3->NXM_NX_REG0[
> 0..15],learn(table=0,hard_timeout=10,priority=65535,NXM_
> OF_ETH_SRC[],NXM_OF_VLAN_TCI[0..11],output:NXM_NX_REG0[0..15]),output:2
> + n_packets=3, n_bytes=354, hard_timeout=10, priority=65535,vlan_tci=
> 0x0000/0x0fff,dl_src=50:54:00:00:00:06 actions=output:3
>  NXST_FLOW reply:
>  ]])
>  OVS_VSWITCHD_STOP
> @@ -728,17 +728,17 @@ done
>
>  dnl Check successful counters:
>  AT_CHECK([ovs-ofctl dump-flows br0 table=1,reg0=1 | ofctl_strip | sort],
> [0], [dnl
> - cookie=0x1, table=1, n_packets=1, n_bytes=42, reg0=0x1,in_port=1
> actions=drop
> - cookie=0x2, table=1, n_packets=10, n_bytes=420, reg0=0x1,in_port=2
> actions=drop
> - cookie=0x3, table=1, n_packets=20, n_bytes=840, reg0=0x1,in_port=3
> actions=drop
> + cookie=0x1, table=1, n_packets=1, n_bytes=106, reg0=0x1,in_port=1
> actions=drop
> + cookie=0x2, table=1, n_packets=10, n_bytes=1060, reg0=0x1,in_port=2
> actions=drop
> + cookie=0x3, table=1, n_packets=20, n_bytes=2120, reg0=0x1,in_port=3
> actions=drop
>  NXST_FLOW reply:
>  ])
>
>  dnl Check failed counters:
>  AT_CHECK([ovs-ofctl dump-flows br0 table=1,reg0=0 | ofctl_strip | sort],
> [0], [dnl
> - cookie=0x1, table=1, n_packets=29, n_bytes=1218, reg0=0,in_port=1
> actions=drop
> - cookie=0x2, table=1, n_packets=20, n_bytes=840, reg0=0,in_port=2
> actions=drop
> - cookie=0x3, table=1, n_packets=10, n_bytes=420, reg0=0,in_port=3
> actions=drop
> + cookie=0x1, table=1, n_packets=29, n_bytes=3074, reg0=0,in_port=1
> actions=drop
> + cookie=0x2, table=1, n_packets=20, n_bytes=2120, reg0=0,in_port=2
> actions=drop
> + cookie=0x3, table=1, n_packets=10, n_bytes=1060, reg0=0,in_port=3
> actions=drop
>  NXST_FLOW reply:
>  ])
>
> diff --git a/tests/mcast-snooping.at b/tests/mcast-snooping.at
> index ad818a3e0be1..f9f65cc468c2 100644
> --- a/tests/mcast-snooping.at
> +++ b/tests/mcast-snooping.at
> @@ -62,7 +62,7 @@ AT_CHECK([
>  # 10.0.0.1.0 > 239.94.1.1.8000: UDP, length 0
>  AT_CHECK([ovs-pcap p2.pcap > p2.pcap.txt 2>&1])
>  AT_CHECK([cat p2.pcap.txt], [0], [dnl
> -01005e5e0101aa55aa550001810006bd08004500001c0000000040118071
> 0a000001ef5e010100001f400008e63d
> +01005e5e0101aa55aa550001810006bd08004500005c0000000040118031
> 0a000001ef5e010100001f40004801ba000102030405060708090a0b0c0d
> 0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b
> 2c2d2e2f303132333435363738393a3b3c3d3e3f
>  ])
>
>  # Clear the mdb, send a IGMP packet with invalid checksum and make sure it
> diff --git a/tests/ofproto-dpif.at b/tests/ofproto-dpif.at
> index cbe0d91352fa..550a768df2fc 100644
> --- a/tests/ofproto-dpif.at
> +++ b/tests/ofproto-dpif.at
> @@ -477,7 +477,7 @@ done
>
>  AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/dp_hash(.*\/0x1)/dp_hash(0xXXXX\/0x1)/'
> | sed 's/packets.*actions:1/actions:1/' | strip_ufid | strip_used |
> sort], [0], [dnl
>  flow-dump from non-dpdk interfaces:
> -recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_
> type(0x0800),ipv4(src=192.168.0.1,frag=no), packets:15, bytes:630,
> used:0.0s, actions:hash(hash_l4(0)),recirc(0x1)
> +recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_
> type(0x0800),ipv4(src=192.168.0.1,frag=no), packets:15, bytes:1590,
> used:0.0s, actions:hash(hash_l4(0)),recirc(0x1)
>  recirc_id(0x1),dp_hash(0xXXXX/0x1),in_port(1),packet_type(
> ns=0,id=0),eth_type(0x0800),ipv4(frag=no), actions:10
>  recirc_id(0x1),dp_hash(0xXXXX/0x1),in_port(1),packet_type(
> ns=0,id=0),eth_type(0x0800),ipv4(frag=no), actions:11
>  ])
> @@ -493,8 +493,8 @@ done
>
>  AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/dp_hash(.*\/0x1)/dp_hash(0xXXXX\/0x1)/'
> | sed 's/\(actions:1\)[[01]]/\1X/' | strip_ufid | strip_used | sort], [0],
> [dnl
>  flow-dump from non-dpdk interfaces:
> -recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_
> type(0x0800),ipv4(src=192.168.0.1,frag=no), packets:15, bytes:630,
> used:0.0s, actions:hash(hash_l4(0)),recirc(0x2)
> -recirc_id(0x2),dp_hash(0xXXXX/0x1),in_port(1),packet_
> type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), packets:15, bytes:630,
> used:0.0s, actions:1X
> +recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_
> type(0x0800),ipv4(src=192.168.0.1,frag=no), packets:15, bytes:1590,
> used:0.0s, actions:hash(hash_l4(0)),recirc(0x2)
> +recirc_id(0x2),dp_hash(0xXXXX/0x1),in_port(1),packet_
> type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), packets:15, bytes:1590,
> used:0.0s, actions:1X
>  ])
>
>  OVS_VSWITCHD_STOP
> @@ -527,7 +527,7 @@ for i in `seq 0 2`;
>  AT_CHECK([ovs-appctl revalidator/purge], [0])
>  AT_CHECK([ovs-ofctl -O OpenFlow12 -vwarn dump-group-stats br0], [0],
> [stdout])
>  AT_CHECK([strip_xids < stdout | sort], [0], [dnl
> - group_id=1234,ref_count=1,packet_count=3,byte_count=126,
> bucket0:packet_count=3,byte_count=126,bucket1:packet_count=0,byte_count=0
> + group_id=1234,ref_count=1,packet_count=3,byte_count=318,
> bucket0:packet_count=3,byte_count=318,bucket1:packet_count=0,byte_count=0
>  OFPST_GROUP reply (OF1.2):
>  ])
>  OVS_VSWITCHD_STOP
> @@ -548,7 +548,7 @@ for i in `seq 0 2`;
>  AT_CHECK([ovs-appctl revalidator/purge], [0])
>  AT_CHECK([ovs-ofctl -O OpenFlow12 -vwarn dump-group-stats br0], [0],
> [stdout])
>  AT_CHECK([strip_xids < stdout | sort], [0], [dnl
> - group_id=1234,ref_count=1,packet_count=3,byte_count=126,
> bucket0:packet_count=3,byte_count=126,bucket1:packet_
> count=3,byte_count=126
> + group_id=1234,ref_count=1,packet_count=3,byte_count=318,
> bucket0:packet_count=3,byte_count=318,bucket1:packet_
> count=3,byte_count=318
>  OFPST_GROUP reply (OF1.2):
>  ])
>  OVS_VSWITCHD_STOP
> @@ -1093,7 +1093,7 @@ AT_CHECK([cat ofctl_monitor.log], [0], [dnl
>
>  AT_CHECK([ovs-appctl revalidator/purge], [0])
>  AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort],
> [0], [dnl
> - n_packets=3, n_bytes=162, actions=resubmit(1,1)
> + n_packets=3, n_bytes=354, actions=resubmit(1,1)
>  OFPST_FLOW reply (OF1.2):
>  ])
>
> @@ -1120,14 +1120,14 @@ OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log`
> -ge 6])
>  OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
>
>  AT_CHECK([cat ofctl_monitor.log], [0], [dnl
> -NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=54 in_port=1
> (via action) data_len=54 (unbuffered)
> -tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:
> 54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=
> 0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
> +NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=118 in_port=1
> (via action) data_len=118 (unbuffered)
> +tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:
> 54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=
> 0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:4a2c
>  dnl
> -NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=54 in_port=1
> (via action) data_len=54 (unbuffered)
> -tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:
> 54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=
> 0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
> +NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=118 in_port=1
> (via action) data_len=118 (unbuffered)
> +tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:
> 54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=
> 0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:4a2c
>  dnl
> -NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=54 in_port=1
> (via action) data_len=54 (unbuffered)
> -tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:
> 54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=
> 0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
> +NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=118 in_port=1
> (via action) data_len=118 (unbuffered)
> +tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:
> 54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=
> 0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:4a2c
>  ])
>
>  dnl Hit table 0, Miss all other tables, sent to controller
> @@ -1140,19 +1140,19 @@ OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log`
> -ge 6])
>  OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
>
>  AT_CHECK([cat ofctl_monitor.log], [0], [dnl
> -NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=54 in_port=1
> (via no_match) data_len=54 (unbuffered)
> -tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:
> 54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=
> 0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
> +NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=118 in_port=1
> (via no_match) data_len=118 (unbuffered)
> +tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:
> 54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=
> 0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:4a2c
>  dnl
> -NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=54 in_port=1
> (via no_match) data_len=54 (unbuffered)
> -tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:
> 54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=
> 0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
> +NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=118 in_port=1
> (via no_match) data_len=118 (unbuffered)
> +tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:
> 54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=
> 0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:4a2c
>  dnl
> -NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=54 in_port=1
> (via no_match) data_len=54 (unbuffered)
> -tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:
> 54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=
> 0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
> +NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=118 in_port=1
> (via no_match) data_len=118 (unbuffered)
> +tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:
> 54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=
> 0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:4a2c
>  ])
>
>  AT_CHECK([ovs-appctl revalidator/purge], [0])
>  AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort],
> [0], [dnl
> - table=1, n_packets=3, n_bytes=162, dl_src=10:11:11:11:11:11
> actions=CONTROLLER:65535
> + table=1, n_packets=3, n_bytes=354, dl_src=10:11:11:11:11:11
> actions=CONTROLLER:65535
>  OFPST_FLOW reply (OF1.2):
>  ])
>
> @@ -1183,14 +1183,14 @@ OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log`
> -ge 6])
>  OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
>
>  AT_CHECK([cat ofctl_monitor.log], [0], [dnl
> -NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=54 in_port=1
> (via action) data_len=54 (unbuffered)
> -tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:
> 54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=
> 0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
> +NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=118 in_port=1
> (via action) data_len=118 (unbuffered)
> +tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:
> 54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=
> 0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:4a2c
>  dnl
> -NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=54 in_port=1
> (via action) data_len=54 (unbuffered)
> -tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:
> 54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=
> 0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
> +NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=118 in_port=1
> (via action) data_len=118 (unbuffered)
> +tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:
> 54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=
> 0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:4a2c
>  dnl
> -NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=54 in_port=1
> (via action) data_len=54 (unbuffered)
> -tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:
> 54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=
> 0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
> +NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=118 in_port=1
> (via action) data_len=118 (unbuffered)
> +tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:
> 54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=
> 0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:4a2c
>  ])
>
>  dnl Hit table 1, Miss all other tables, sent to controller
> @@ -1203,20 +1203,20 @@ OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log`
> -ge 6])
>  OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
>
>  AT_CHECK([cat ofctl_monitor.log], [0], [dnl
> -NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=54 in_port=1
> (via no_match) data_len=54 (unbuffered)
> -tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:
> 54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=
> 0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
> +NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=118 in_port=1
> (via no_match) data_len=118 (unbuffered)
> +tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:
> 54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=
> 0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:4a2c
>  dnl
> -NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=54 in_port=1
> (via no_match) data_len=54 (unbuffered)
> -tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:
> 54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=
> 0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
> +NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=118 in_port=1
> (via no_match) data_len=118 (unbuffered)
> +tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:
> 54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=
> 0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:4a2c
>  dnl
> -NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=54 in_port=1
> (via no_match) data_len=54 (unbuffered)
> -tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:
> 54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=
> 0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
> +NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=118 in_port=1
> (via no_match) data_len=118 (unbuffered)
> +tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:
> 54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=
> 0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:4a2c
>  ])
>
>  AT_CHECK([ovs-appctl revalidator/purge], [0])
>  AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort],
> [0], [dnl
> - n_packets=6, n_bytes=324, actions=goto_table:1
> - table=2, n_packets=3, n_bytes=162, dl_src=10:11:11:11:11:11
> actions=CONTROLLER:65535
> + n_packets=6, n_bytes=708, actions=goto_table:1
> + table=2, n_packets=3, n_bytes=354, dl_src=10:11:11:11:11:11
> actions=CONTROLLER:65535
>  OFPST_FLOW reply (OF1.2):
>  ])
>
> @@ -1261,7 +1261,7 @@ AT_CHECK([cat ofctl_monitor.log], [0], [dnl
>
>  AT_CHECK([ovs-appctl revalidator/purge], [0])
>  AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort],
> [0], [dnl
> - n_packets=6, n_bytes=324, actions=resubmit(1,1)
> + n_packets=6, n_bytes=708, actions=resubmit(1,1)
>   table=2, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
>  OFPST_FLOW reply (OF1.2):
>  ])
> @@ -1321,7 +1321,7 @@ AT_CHECK([cat ofctl_monitor.log], [0], [dnl
>
>  AT_CHECK([ovs-appctl revalidator/purge], [0])
>  AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort],
> [0], [dnl
> - n_packets=3, n_bytes=162, actions=goto_table:1
> + n_packets=3, n_bytes=354, actions=goto_table:1
>  OFPST_FLOW reply (OF1.2):
>  ])
>
> @@ -1352,7 +1352,7 @@ AT_CHECK([cat ofctl_monitor.log], [0], [dnl
>
>  AT_CHECK([ovs-appctl revalidator/purge], [0])
>  AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort],
> [0], [dnl
> - n_packets=3, n_bytes=162, actions=resubmit(1,1)
> + n_packets=3, n_bytes=354, actions=resubmit(1,1)
>  OFPST_FLOW reply (OF1.2):
>  ])
>
> @@ -1393,14 +1393,14 @@ OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log`
> -ge 6])
>  OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
>
>  AT_CHECK([cat ofctl_monitor.log], [0], [dnl
> -OFPT_PACKET_IN (xid=0x0): total_len=54 in_port=1 (via no_match)
> data_len=54 (unbuffered)
> -tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:
> 54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=
> 0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
> +OFPT_PACKET_IN (xid=0x0): total_len=118 in_port=1 (via no_match)
> data_len=118 (unbuffered)
> +tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:
> 54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=
> 0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:4a2c
>  dnl
> -OFPT_PACKET_IN (xid=0x0): total_len=54 in_port=1 (via no_match)
> data_len=54 (unbuffered)
> -tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:
> 54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=
> 0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
> +OFPT_PACKET_IN (xid=0x0): total_len=118 in_port=1 (via no_match)
> data_len=118 (unbuffered)
> +tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:
> 54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=
> 0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:4a2c
>  dnl
> -OFPT_PACKET_IN (xid=0x0): total_len=54 in_port=1 (via no_match)
> data_len=54 (unbuffered)
> -tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:
> 54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=
> 0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
> +OFPT_PACKET_IN (xid=0x0): total_len=118 in_port=1 (via no_match)
> data_len=118 (unbuffered)
> +tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:
> 54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=
> 0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:4a2c
>  ])
>
>  dnl Singleton controller action.
> @@ -1415,10 +1415,8 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
>  AT_CHECK([cat ofctl_monitor.log], [0], [dnl
>  OFPT_PACKET_IN (xid=0x0): total_len=54 in_port=1 (via action) data_len=54
> (unbuffered)
>  tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:
> 00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,
> nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:2e7d
> -dnl
>  OFPT_PACKET_IN (xid=0x0): total_len=54 in_port=1 (via action) data_len=54
> (unbuffered)
>  tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:
> 00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,
> nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:2e7d
> -dnl
>  OFPT_PACKET_IN (xid=0x0): total_len=54 in_port=1 (via action) data_len=54
> (unbuffered)
>  tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:
> 00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,
> nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:2e7d
>  ])
> @@ -1646,14 +1644,14 @@ OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log`
> -ge 3])
>  OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
>
>  AT_CHECK([cat ofctl_monitor.log], [0], [dnl
> -OFPT_PACKET_IN (xid=0x0): total_len=54 in_port=1 (via action) data_len=54
> (unbuffered)
> -tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:
> 54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=
> 0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
> +OFPT_PACKET_IN (xid=0x0): total_len=118 in_port=1 (via action)
> data_len=118 (unbuffered)
> +tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:
> 54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=
> 0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:4a2c
>  dnl
> -OFPT_PACKET_IN (xid=0x0): total_len=54 in_port=1 (via action) data_len=54
> (unbuffered)
> -tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:
> 54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=
> 0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
> +OFPT_PACKET_IN (xid=0x0): total_len=118 in_port=1 (via action)
> data_len=118 (unbuffered)
> +tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:
> 54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=
> 0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:4a2c
>  dnl
> -OFPT_PACKET_IN (xid=0x0): total_len=54 in_port=1 (via action) data_len=54
> (unbuffered)
> -tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:
> 54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=
> 0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
> +OFPT_PACKET_IN (xid=0x0): total_len=118 in_port=1 (via action)
> data_len=118 (unbuffered)
> +tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:
> 54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=
> 0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:4a2c
>  ])
>
>  OVS_VSWITCHD_STOP
> @@ -1800,13 +1798,13 @@ OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log`
> -ge 6])
>  OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
>
>  AT_CHECK([cat ofctl_monitor.log], [0], [dnl
> -NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=46 in_port=1 (via action)
> data_len=46 (unbuffered)
> +NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=110 in_port=1 (via action)
> data_len=110 (unbuffered)
>  mpls,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:
> 54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
>  dnl
> -NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=46 in_port=1 (via action)
> data_len=46 (unbuffered)
> +NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=110 in_port=1 (via action)
> data_len=110 (unbuffered)
>  mpls,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:
> 54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
>  dnl
> -NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=46 in_port=1 (via action)
> data_len=46 (unbuffered)
> +NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=110 in_port=1 (via action)
> data_len=110 (unbuffered)
>  mpls,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:
> 54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
>  ])
>
> @@ -2744,7 +2742,7 @@ AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip |
> sort], [0], [dnl
>   cookie=0xa, n_packets=3, n_bytes=102, dl_src=40:44:44:44:44:48
> actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],
> load:0x3->OXM_OF_MPLS_TC[[]],set_mpls_ttl(10),dec_mpls_ttl,
> CONTROLLER:65535
>   cookie=0xa, n_packets=3, n_bytes=102, dl_src=41:44:44:44:44:42
> actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],
> load:0x3->OXM_OF_MPLS_TC[[]],pop_mpls:0x0800,CONTROLLER:65535
>   cookie=0xa, n_packets=3, n_bytes=114, dl_src=40:44:44:44:44:44
> actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],
> load:0x3->OXM_OF_MPLS_TC[[]],CONTROLLER:65535
> - cookie=0xa, n_packets=3, n_bytes=126, dl_src=40:44:44:44:44:42
> actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],
> load:0x3->OXM_OF_MPLS_TC[[]],CONTROLLER:65535
> + cookie=0xa, n_packets=3, n_bytes=318, dl_src=40:44:44:44:44:42
> actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],
> load:0x3->OXM_OF_MPLS_TC[[]],CONTROLLER:65535
>   cookie=0xa, n_packets=3, n_bytes=54, dl_src=40:44:44:44:44:43
> actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],
> load:0x3->OXM_OF_MPLS_TC[[]],CONTROLLER:65535
>   cookie=0xa, n_packets=3, n_bytes=54, mpls,dl_src=40:44:44:44:44:49
> actions=push_mpls:0x8848,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
>   cookie=0xb, n_packets=3, n_bytes=54, mpls,dl_src=50:55:55:55:55:55
> actions=load:0x3e8->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
> @@ -3509,26 +3507,36 @@ OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN
> ofctl_monitor.log | wc -l` -ge 3])
>  OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
>
>  AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
> -OFPT_PACKET_IN (OF1.2): total_len=58 in_port=1 (via action) data_len=58
> (unbuffered)
> +OFPT_PACKET_IN (OF1.2): total_len=122 in_port=1 (via action) data_len=122
> (unbuffered)
>  mpls,vlan_tci=0x0000,dl_src=40:44:44:44:00:00,dl_dst=50:
> 54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=64,mpls_bos=1
>  00000000  50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
> -00000010  01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
> +00000010  01 40 45 00 00 68 00 00-00 00 40 06 f9 3c c0 a8
>  00000020  00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
> -00000030  00 00 50 00 00 00 2e 91-00 00
> -dnl
> -OFPT_PACKET_IN (OF1.2): total_len=58 in_port=1 (via action) data_len=58
> (unbuffered)
> +00000030  00 00 50 00 00 00 4a 4d-00 00 00 01 02 03 04 05
> +00000040  06 07 08 09 0a 0b 0c 0d-0e 0f 10 11 12 13 14 15
> +00000050  16 17 18 19 1a 1b 1c 1d-1e 1f 20 21 22 23 24 25
> +00000060  26 27 28 29 2a 2b 2c 2d-2e 2f 30 31 32 33 34 35
> +00000070  36 37 38 39 3a 3b 3c 3d-3e 3f
> +OFPT_PACKET_IN (OF1.2): total_len=122 in_port=1 (via action) data_len=122
> (unbuffered)
>  mpls,vlan_tci=0x0000,dl_src=40:44:44:44:00:00,dl_dst=50:
> 54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=64,mpls_bos=1
>  00000000  50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
> -00000010  01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
> +00000010  01 40 45 00 00 68 00 00-00 00 40 06 f9 3c c0 a8
>  00000020  00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
> -00000030  00 00 50 00 00 00 2e 91-00 00
> -dnl
> -OFPT_PACKET_IN (OF1.2): total_len=58 in_port=1 (via action) data_len=58
> (unbuffered)
> +00000030  00 00 50 00 00 00 4a 4d-00 00 00 01 02 03 04 05
> +00000040  06 07 08 09 0a 0b 0c 0d-0e 0f 10 11 12 13 14 15
> +00000050  16 17 18 19 1a 1b 1c 1d-1e 1f 20 21 22 23 24 25
> +00000060  26 27 28 29 2a 2b 2c 2d-2e 2f 30 31 32 33 34 35
> +00000070  36 37 38 39 3a 3b 3c 3d-3e 3f
> +OFPT_PACKET_IN (OF1.2): total_len=122 in_port=1 (via action) data_len=122
> (unbuffered)
>  mpls,vlan_tci=0x0000,dl_src=40:44:44:44:00:00,dl_dst=50:
> 54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=64,mpls_bos=1
>  00000000  50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
> -00000010  01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
> +00000010  01 40 45 00 00 68 00 00-00 00 40 06 f9 3c c0 a8
>  00000020  00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
> -00000030  00 00 50 00 00 00 2e 91-00 00
> +00000030  00 00 50 00 00 00 4a 4d-00 00 00 01 02 03 04 05
> +00000040  06 07 08 09 0a 0b 0c 0d-0e 0f 10 11 12 13 14 15
> +00000050  16 17 18 19 1a 1b 1c 1d-1e 1f 20 21 22 23 24 25
> +00000060  26 27 28 29 2a 2b 2c 2d-2e 2f 30 31 32 33 34 35
> +00000070  36 37 38 39 3a 3b 3c 3d-3e 3f
>  ])
>
>  dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
> @@ -3623,26 +3631,36 @@ OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN
> ofctl_monitor.log | wc -l` -ge 3])
>  OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
>
>  AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
> -OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62
> (unbuffered)
> +OFPT_PACKET_IN (OF1.2): total_len=126 in_port=1 (via action) data_len=126
> (unbuffered)
>  mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:
> 44:44:54:50,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_
> tc=0,mpls_ttl=64,mpls_bos=1
>  00000000  50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
> -00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
> -00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
> -00000030  00 00 00 00 00 00 50 00-00 00 2e 91 00 00
> -dnl
> -OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62
> (unbuffered)
> +00000010  88 47 00 00 a1 40 45 00-00 68 00 00 00 00 40 06
> +00000020  f9 3c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
> +00000030  00 00 00 00 00 00 50 00-00 00 4a 4d 00 00 00 01
> +00000040  02 03 04 05 06 07 08 09-0a 0b 0c 0d 0e 0f 10 11
> +00000050  12 13 14 15 16 17 18 19-1a 1b 1c 1d 1e 1f 20 21
> +00000060  22 23 24 25 26 27 28 29-2a 2b 2c 2d 2e 2f 30 31
> +00000070  32 33 34 35 36 37 38 39-3a 3b 3c 3d 3e 3f
> +OFPT_PACKET_IN (OF1.2): total_len=126 in_port=1 (via action) data_len=126
> (unbuffered)
>  mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:
> 44:44:54:50,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_
> tc=0,mpls_ttl=64,mpls_bos=1
>  00000000  50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
> -00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
> -00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
> -00000030  00 00 00 00 00 00 50 00-00 00 2e 91 00 00
> -dnl
> -OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62
> (unbuffered)
> +00000010  88 47 00 00 a1 40 45 00-00 68 00 00 00 00 40 06
> +00000020  f9 3c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
> +00000030  00 00 00 00 00 00 50 00-00 00 4a 4d 00 00 00 01
> +00000040  02 03 04 05 06 07 08 09-0a 0b 0c 0d 0e 0f 10 11
> +00000050  12 13 14 15 16 17 18 19-1a 1b 1c 1d 1e 1f 20 21
> +00000060  22 23 24 25 26 27 28 29-2a 2b 2c 2d 2e 2f 30 31
> +00000070  32 33 34 35 36 37 38 39-3a 3b 3c 3d 3e 3f
> +OFPT_PACKET_IN (OF1.2): total_len=126 in_port=1 (via action) data_len=126
> (unbuffered)
>  mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:
> 44:44:54:50,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_
> tc=0,mpls_ttl=64,mpls_bos=1
>  00000000  50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
> -00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
> -00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
> -00000030  00 00 00 00 00 00 50 00-00 00 2e 91 00 00
> +00000010  88 47 00 00 a1 40 45 00-00 68 00 00 00 00 40 06
> +00000020  f9 3c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
> +00000030  00 00 00 00 00 00 50 00-00 00 4a 4d 00 00 00 01
> +00000040  02 03 04 05 06 07 08 09-0a 0b 0c 0d 0e 0f 10 11
> +00000050  12 13 14 15 16 17 18 19-1a 1b 1c 1d 1e 1f 20 21
> +00000060  22 23 24 25 26 27 28 29-2a 2b 2c 2d 2e 2f 30 31
> +00000070  32 33 34 35 36 37 38 39-3a 3b 3c 3d 3e 3f
>  ])
>
>  dnl Modified MPLS controller action.
> @@ -3657,29 +3675,39 @@ OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN
> ofctl_monitor.log | wc -l` -ge 3])
>  OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
>
>  AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
> -OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66
> (unbuffered)
> +OFPT_PACKET_IN (OF1.2): total_len=130 in_port=1 (via action) data_len=130
> (unbuffered)
>  mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,dl_
> src=40:44:44:44:54:51,dl_dst=50:54:00:00:00:07,mpls_label=
> 10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
>  00000000  50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
> -00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
> -00000020  00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
> -00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
> -00000040  00 00
> -dnl
> -OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66
> (unbuffered)
> +00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 68 00 00
> +00000020  00 00 40 06 f9 3c c0 a8-00 01 c0 a8 00 02 00 00
> +00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 4a 4d
> +00000040  00 00 00 01 02 03 04 05-06 07 08 09 0a 0b 0c 0d
> +00000050  0e 0f 10 11 12 13 14 15-16 17 18 19 1a 1b 1c 1d
> +00000060  1e 1f 20 21 22 23 24 25-26 27 28 29 2a 2b 2c 2d
> +00000070  2e 2f 30 31 32 33 34 35-36 37 38 39 3a 3b 3c 3d
> +00000080  3e 3f
> +OFPT_PACKET_IN (OF1.2): total_len=130 in_port=1 (via action) data_len=130
> (unbuffered)
>  mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,dl_
> src=40:44:44:44:54:51,dl_dst=50:54:00:00:00:07,mpls_label=
> 10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
>  00000000  50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
> -00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
> -00000020  00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
> -00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
> -00000040  00 00
> -dnl
> -OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66
> (unbuffered)
> +00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 68 00 00
> +00000020  00 00 40 06 f9 3c c0 a8-00 01 c0 a8 00 02 00 00
> +00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 4a 4d
> +00000040  00 00 00 01 02 03 04 05-06 07 08 09 0a 0b 0c 0d
> +00000050  0e 0f 10 11 12 13 14 15-16 17 18 19 1a 1b 1c 1d
> +00000060  1e 1f 20 21 22 23 24 25-26 27 28 29 2a 2b 2c 2d
> +00000070  2e 2f 30 31 32 33 34 35-36 37 38 39 3a 3b 3c 3d
> +00000080  3e 3f
> +OFPT_PACKET_IN (OF1.2): total_len=130 in_port=1 (via action) data_len=130
> (unbuffered)
>  mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,dl_
> src=40:44:44:44:54:51,dl_dst=50:54:00:00:00:07,mpls_label=
> 10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
>  00000000  50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
> -00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
> -00000020  00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
> -00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
> -00000040  00 00
> +00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 68 00 00
> +00000020  00 00 40 06 f9 3c c0 a8-00 01 c0 a8 00 02 00 00
> +00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 4a 4d
> +00000040  00 00 00 01 02 03 04 05-06 07 08 09 0a 0b 0c 0d
> +00000050  0e 0f 10 11 12 13 14 15-16 17 18 19 1a 1b 1c 1d
> +00000060  1e 1f 20 21 22 23 24 25-26 27 28 29 2a 2b 2c 2d
> +00000070  2e 2f 30 31 32 33 34 35-36 37 38 39 3a 3b 3c 3d
> +00000080  3e 3f
>  ])
>
>  dnl Modified MPLS controller action.
> @@ -3694,26 +3722,36 @@ OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN
> ofctl_monitor.log | wc -l` -ge 3])
>  OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
>
>  AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
> -OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62
> (unbuffered)
> +OFPT_PACKET_IN (OF1.2): total_len=126 in_port=1 (via action) data_len=126
> (unbuffered)
>  mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:
> 44:44:54:52,dl_dst=52:54:00:00:00:07,mpls_label=10,mpls_
> tc=0,mpls_ttl=64,mpls_bos=1
>  00000000  52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
> -00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
> -00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
> -00000030  00 00 00 00 00 00 50 00-00 00 2e 91 00 00
> -dnl
> -OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62
> (unbuffered)
> +00000010  88 47 00 00 a1 40 45 00-00 68 00 00 00 00 40 06
> +00000020  f9 3c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
> +00000030  00 00 00 00 00 00 50 00-00 00 4a 4d 00 00 00 01
> +00000040  02 03 04 05 06 07 08 09-0a 0b 0c 0d 0e 0f 10 11
> +00000050  12 13 14 15 16 17 18 19-1a 1b 1c 1d 1e 1f 20 21
> +00000060  22 23 24 25 26 27 28 29-2a 2b 2c 2d 2e 2f 30 31
> +00000070  32 33 34 35 36 37 38 39-3a 3b 3c 3d 3e 3f
> +OFPT_PACKET_IN (OF1.2): total_len=126 in_port=1 (via action) data_len=126
> (unbuffered)
>  mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:
> 44:44:54:52,dl_dst=52:54:00:00:00:07,mpls_label=10,mpls_
> tc=0,mpls_ttl=64,mpls_bos=1
>  00000000  52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
> -00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
> -00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
> -00000030  00 00 00 00 00 00 50 00-00 00 2e 91 00 00
> -dnl
> -OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62
> (unbuffered)
> +00000010  88 47 00 00 a1 40 45 00-00 68 00 00 00 00 40 06
> +00000020  f9 3c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
> +00000030  00 00 00 00 00 00 50 00-00 00 4a 4d 00 00 00 01
> +00000040  02 03 04 05 06 07 08 09-0a 0b 0c 0d 0e 0f 10 11
> +00000050  12 13 14 15 16 17 18 19-1a 1b 1c 1d 1e 1f 20 21
> +00000060  22 23 24 25 26 27 28 29-2a 2b 2c 2d 2e 2f 30 31
> +00000070  32 33 34 35 36 37 38 39-3a 3b 3c 3d 3e 3f
> +OFPT_PACKET_IN (OF1.2): total_len=126 in_port=1 (via action) data_len=126
> (unbuffered)
>  mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:
> 44:44:54:52,dl_dst=52:54:00:00:00:07,mpls_label=10,mpls_
> tc=0,mpls_ttl=64,mpls_bos=1
>  00000000  52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
> -00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
> -00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
> -00000030  00 00 00 00 00 00 50 00-00 00 2e 91 00 00
> +00000010  88 47 00 00 a1 40 45 00-00 68 00 00 00 00 40 06
> +00000020  f9 3c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
> +00000030  00 00 00 00 00 00 50 00-00 00 4a 4d 00 00 00 01
> +00000040  02 03 04 05 06 07 08 09-0a 0b 0c 0d 0e 0f 10 11
> +00000050  12 13 14 15 16 17 18 19-1a 1b 1c 1d 1e 1f 20 21
> +00000060  22 23 24 25 26 27 28 29-2a 2b 2c 2d 2e 2f 30 31
> +00000070  32 33 34 35 36 37 38 39-3a 3b 3c 3d 3e 3f
>  ])
>
>  dnl Modified MPLS controller action.
> @@ -3728,29 +3766,39 @@ OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN
> ofctl_monitor.log | wc -l` -ge 3])
>  OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
>
>  AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
> -OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66
> (unbuffered)
> +OFPT_PACKET_IN (OF1.2): total_len=130 in_port=1 (via action) data_len=130
> (unbuffered)
>  mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,dl_
> src=40:44:44:44:54:53,dl_dst=50:54:00:00:00:07,mpls_label=
> 10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
>  00000000  50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
> -00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
> -00000020  00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
> -00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
> -00000040  00 00
> -dnl
> -OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66
> (unbuffered)
> +00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 68 00 00
> +00000020  00 00 40 06 f9 3c c0 a8-00 01 c0 a8 00 02 00 00
> +00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 4a 4d
> +00000040  00 00 00 01 02 03 04 05-06 07 08 09 0a 0b 0c 0d
> +00000050  0e 0f 10 11 12 13 14 15-16 17 18 19 1a 1b 1c 1d
> +00000060  1e 1f 20 21 22 23 24 25-26 27 28 29 2a 2b 2c 2d
> +00000070  2e 2f 30 31 32 33 34 35-36 37 38 39 3a 3b 3c 3d
> +00000080  3e 3f
> +OFPT_PACKET_IN (OF1.2): total_len=130 in_port=1 (via action) data_len=130
> (unbuffered)
>  mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,dl_
> src=40:44:44:44:54:53,dl_dst=50:54:00:00:00:07,mpls_label=
> 10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
>  00000000  50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
> -00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
> -00000020  00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
> -00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
> -00000040  00 00
> -dnl
> -OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66
> (unbuffered)
> +00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 68 00 00
> +00000020  00 00 40 06 f9 3c c0 a8-00 01 c0 a8 00 02 00 00
> +00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 4a 4d
> +00000040  00 00 00 01 02 03 04 05-06 07 08 09 0a 0b 0c 0d
> +00000050  0e 0f 10 11 12 13 14 15-16 17 18 19 1a 1b 1c 1d
> +00000060  1e 1f 20 21 22 23 24 25-26 27 28 29 2a 2b 2c 2d
> +00000070  2e 2f 30 31 32 33 34 35-36 37 38 39 3a 3b 3c 3d
> +00000080  3e 3f
> +OFPT_PACKET_IN (OF1.2): total_len=130 in_port=1 (via action) data_len=130
> (unbuffered)
>  mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,dl_
> src=40:44:44:44:54:53,dl_dst=50:54:00:00:00:07,mpls_label=
> 10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
>  00000000  50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
> -00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
> -00000020  00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
> -00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
> -00000040  00 00
> +00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 68 00 00
> +00000020  00 00 40 06 f9 3c c0 a8-00 01 c0 a8 00 02 00 00
> +00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 4a 4d
> +00000040  00 00 00 01 02 03 04 05-06 07 08 09 0a 0b 0c 0d
> +00000050  0e 0f 10 11 12 13 14 15-16 17 18 19 1a 1b 1c 1d
> +00000060  1e 1f 20 21 22 23 24 25-26 27 28 29 2a 2b 2c 2d
> +00000070  2e 2f 30 31 32 33 34 35-36 37 38 39 3a 3b 3c 3d
> +00000080  3e 3f
>  ])
>
>  dnl Modified MPLS controller action.
> @@ -3765,26 +3813,36 @@ OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN
> ofctl_monitor.log | wc -l` -ge 3])
>  OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
>
>  AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
> -OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62
> (unbuffered)
> +OFPT_PACKET_IN (OF1.2): total_len=126 in_port=1 (via action) data_len=126
> (unbuffered)
>  mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:
> 44:44:54:54,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_
> tc=0,mpls_ttl=64,mpls_bos=1
>  00000000  50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
> -00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
> -00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
> -00000030  00 00 00 00 00 00 50 00-00 00 2e 91 00 00
> -dnl
> -OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62
> (unbuffered)
> +00000010  88 47 00 00 a1 40 45 00-00 68 00 00 00 00 40 06
> +00000020  f9 3c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
> +00000030  00 00 00 00 00 00 50 00-00 00 4a 4d 00 00 00 01
> +00000040  02 03 04 05 06 07 08 09-0a 0b 0c 0d 0e 0f 10 11
> +00000050  12 13 14 15 16 17 18 19-1a 1b 1c 1d 1e 1f 20 21
> +00000060  22 23 24 25 26 27 28 29-2a 2b 2c 2d 2e 2f 30 31
> +00000070  32 33 34 35 36 37 38 39-3a 3b 3c 3d 3e 3f
> +OFPT_PACKET_IN (OF1.2): total_len=126 in_port=1 (via action) data_len=126
> (unbuffered)
>  mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:
> 44:44:54:54,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_
> tc=0,mpls_ttl=64,mpls_bos=1
>  00000000  50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
> -00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
> -00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
> -00000030  00 00 00 00 00 00 50 00-00 00 2e 91 00 00
> -dnl
> -OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62
> (unbuffered)
> +00000010  88 47 00 00 a1 40 45 00-00 68 00 00 00 00 40 06
> +00000020  f9 3c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
> +00000030  00 00 00 00 00 00 50 00-00 00 4a 4d 00 00 00 01
> +00000040  02 03 04 05 06 07 08 09-0a 0b 0c 0d 0e 0f 10 11
> +00000050  12 13 14 15 16 17 18 19-1a 1b 1c 1d 1e 1f 20 21
> +00000060  22 23 24 25 26 27 28 29-2a 2b 2c 2d 2e 2f 30 31
> +00000070  32 33 34 35 36 37 38 39-3a 3b 3c 3d 3e 3f
> +OFPT_PACKET_IN (OF1.2): total_len=126 in_port=1 (via action) data_len=126
> (unbuffered)
>  mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:
> 44:44:54:54,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_
> tc=0,mpls_ttl=64,mpls_bos=1
>  00000000  50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
> -00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
> -00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
> -00000030  00 00 00 00 00 00 50 00-00 00 2e 91 00 00
> +00000010  88 47 00 00 a1 40 45 00-00 68 00 00 00 00 40 06
> +00000020  f9 3c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
> +00000030  00 00 00 00 00 00 50 00-00 00 4a 4d 00 00 00 01
> +00000040  02 03 04 05 06 07 08 09-0a 0b 0c 0d 0e 0f 10 11
> +00000050  12 13 14 15 16 17 18 19-1a 1b 1c 1d 1e 1f 20 21
> +00000060  22 23 24 25 26 27 28 29-2a 2b 2c 2d 2e 2f 30 31
> +00000070  32 33 34 35 36 37 38 39-3a 3b 3c 3d 3e 3f
>  ])
>
>  dnl Modified MPLS controller action.
> @@ -3799,29 +3857,39 @@ OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN
> ofctl_monitor.log | wc -l` -ge 3])
>  OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
>
>  AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
> -OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66
> (unbuffered)
> +OFPT_PACKET_IN (OF1.2): total_len=130 in_port=1 (via action) data_len=130
> (unbuffered)
>  mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,dl_
> src=40:44:44:44:54:55,dl_dst=50:54:00:00:00:07,mpls_label=
> 10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
>  00000000  50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
> -00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
> -00000020  00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
> -00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
> -00000040  00 00
> -dnl
> -OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66
> (unbuffered)
> +00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 68 00 00
> +00000020  00 00 40 06 f9 3c c0 a8-00 01 c0 a8 00 02 00 00
> +00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 4a 4d
> +00000040  00 00 00 01 02 03 04 05-06 07 08 09 0a 0b 0c 0d
> +00000050  0e 0f 10 11 12 13 14 15-16 17 18 19 1a 1b 1c 1d
> +00000060  1e 1f 20 21 22 23 24 25-26 27 28 29 2a 2b 2c 2d
> +00000070  2e 2f 30 31 32 33 34 35-36 37 38 39 3a 3b 3c 3d
> +00000080  3e 3f
> +OFPT_PACKET_IN (OF1.2): total_len=130 in_port=1 (via action) data_len=130
> (unbuffered)
>  mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,dl_
> src=40:44:44:44:54:55,dl_dst=50:54:00:00:00:07,mpls_label=
> 10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
>  00000000  50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
> -00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
> -00000020  00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
> -00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
> -00000040  00 00
> -dnl
> -OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66
> (unbuffered)
> +00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 68 00 00
> +00000020  00 00 40 06 f9 3c c0 a8-00 01 c0 a8 00 02 00 00
> +00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 4a 4d
> +00000040  00 00 00 01 02 03 04 05-06 07 08 09 0a 0b 0c 0d
> +00000050  0e 0f 10 11 12 13 14 15-16 17 18 19 1a 1b 1c 1d
> +00000060  1e 1f 20 21 22 23 24 25-26 27 28 29 2a 2b 2c 2d
> +00000070  2e 2f 30 31 32 33 34 35-36 37 38 39 3a 3b 3c 3d
> +00000080  3e 3f
> +OFPT_PACKET_IN (OF1.2): total_len=130 in_port=1 (via action) data_len=130
> (unbuffered)
>  mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,dl_
> src=40:44:44:44:54:55,dl_dst=50:54:00:00:00:07,mpls_label=
> 10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
>  00000000  50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
> -00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
> -00000020  00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
> -00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
> -00000040  00 00
> +00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 68 00 00
> +00000020  00 00 40 06 f9 3c c0 a8-00 01 c0 a8 00 02 00 00
> +00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 4a 4d
> +00000040  00 00 00 01 02 03 04 05-06 07 08 09 0a 0b 0c 0d
> +00000050  0e 0f 10 11 12 13 14 15-16 17 18 19 1a 1b 1c 1d
> +00000060  1e 1f 20 21 22 23 24 25-26 27 28 29 2a 2b 2c 2d
> +00000070  2e 2f 30 31 32 33 34 35-36 37 38 39 3a 3b 3c 3d
> +00000080  3e 3f
>  ])
>
>  dnl Modified MPLS controller action.
> @@ -3836,26 +3904,36 @@ OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN
> ofctl_monitor.log | wc -l` -ge 3])
>  OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
>
>  AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
> -OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62
> (unbuffered)
> +OFPT_PACKET_IN (OF1.2): total_len=126 in_port=1 (via action) data_len=126
> (unbuffered)
>  mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:
> 44:44:54:56,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_
> tc=0,mpls_ttl=64,mpls_bos=1
>  00000000  50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
> -00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
> -00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
> -00000030  00 00 00 00 00 00 50 00-00 00 2e 91 00 00
> -dnl
> -OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62
> (unbuffered)
> +00000010  88 47 00 00 a1 40 45 00-00 68 00 00 00 00 40 06
> +00000020  f9 3c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
> +00000030  00 00 00 00 00 00 50 00-00 00 4a 4d 00 00 00 01
> +00000040  02 03 04 05 06 07 08 09-0a 0b 0c 0d 0e 0f 10 11
> +00000050  12 13 14 15 16 17 18 19-1a 1b 1c 1d 1e 1f 20 21
> +00000060  22 23 24 25 26 27 28 29-2a 2b 2c 2d 2e 2f 30 31
> +00000070  32 33 34 35 36 37 38 39-3a 3b 3c 3d 3e 3f
> +OFPT_PACKET_IN (OF1.2): total_len=126 in_port=1 (via action) data_len=126
> (unbuffered)
>  mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:
> 44:44:54:56,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_
> tc=0,mpls_ttl=64,mpls_bos=1
>  00000000  50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
> -00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
> -00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
> -00000030  00 00 00 00 00 00 50 00-00 00 2e 91 00 00
> -dnl
> -OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62
> (unbuffered)
> +00000010  88 47 00 00 a1 40 45 00-00 68 00 00 00 00 40 06
> +00000020  f9 3c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
> +00000030  00 00 00 00 00 00 50 00-00 00 4a 4d 00 00 00 01
> +00000040  02 03 04 05 06 07 08 09-0a 0b 0c 0d 0e 0f 10 11
> +00000050  12 13 14 15 16 17 18 19-1a 1b 1c 1d 1e 1f 20 21
> +00000060  22 23 24 25 26 27 28 29-2a 2b 2c 2d 2e 2f 30 31
> +00000070  32 33 34 35 36 37 38 39-3a 3b 3c 3d 3e 3f
> +OFPT_PACKET_IN (OF1.2): total_len=126 in_port=1 (via action) data_len=126
> (unbuffered)
>  mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:
> 44:44:54:56,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_
> tc=0,mpls_ttl=64,mpls_bos=1
>  00000000  50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
> -00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
> -00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
> -00000030  00 00 00 00 00 00 50 00-00 00 2e 91 00 00
> +00000010  88 47 00 00 a1 40 45 00-00 68 00 00 00 00 40 06
> +00000020  f9 3c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
> +00000030  00 00 00 00 00 00 50 00-00 00 4a 4d 00 00 00 01
> +00000040  02 03 04 05 06 07 08 09-0a 0b 0c 0d 0e 0f 10 11
> +00000050  12 13 14 15 16 17 18 19-1a 1b 1c 1d 1e 1f 20 21
> +00000060  22 23 24 25 26 27 28 29-2a 2b 2c 2d 2e 2f 30 31
> +00000070  32 33 34 35 36 37 38 39-3a 3b 3c 3d 3e 3f
>  ])
>
>  dnl Modified MPLS controller action.
> @@ -3870,29 +3948,39 @@ OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN
> ofctl_monitor.log | wc -l` -ge 3])
>  OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
>
>  AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
> -OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66
> (unbuffered)
> +OFPT_PACKET_IN (OF1.2): total_len=130 in_port=1 (via action) data_len=130
> (unbuffered)
>  mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,dl_
> src=40:44:44:44:54:57,dl_dst=50:54:00:00:00:07,mpls_label=
> 10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
>  00000000  50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
> -00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
> -00000020  00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
> -00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
> -00000040  00 00
> -dnl
> -OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66
> (unbuffered)
> +00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 68 00 00
> +00000020  00 00 40 06 f9 3c c0 a8-00 01 c0 a8 00 02 00 00
> +00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 4a 4d
> +00000040  00 00 00 01 02 03 04 05-06 07 08 09 0a 0b 0c 0d
> +00000050  0e 0f 10 11 12 13 14 15-16 17 18 19 1a 1b 1c 1d
> +00000060  1e 1f 20 21 22 23 24 25-26 27 28 29 2a 2b 2c 2d
> +00000070  2e 2f 30 31 32 33 34 35-36 37 38 39 3a 3b 3c 3d
> +00000080  3e 3f
> +OFPT_PACKET_IN (OF1.2): total_len=130 in_port=1 (via action) data_len=130
> (unbuffered)
>  mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,dl_
> src=40:44:44:44:54:57,dl_dst=50:54:00:00:00:07,mpls_label=
> 10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
>  00000000  50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
> -00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
> -00000020  00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
> -00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
> -00000040  00 00
> -dnl
> -OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66
> (unbuffered)
> +00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 68 00 00
> +00000020  00 00 40 06 f9 3c c0 a8-00 01 c0 a8 00 02 00 00
> +00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 4a 4d
> +00000040  00 00 00 01 02 03 04 05-06 07 08 09 0a 0b 0c 0d
> +00000050  0e 0f 10 11 12 13 14 15-16 17 18 19 1a 1b 1c 1d
> +00000060  1e 1f 20 21 22 23 24 25-26 27 28 29 2a 2b 2c 2d
> +00000070  2e 2f 30 31 32 33 34 35-36 37 38 39 3a 3b 3c 3d
> +00000080  3e 3f
> +OFPT_PACKET_IN (OF1.2): total_len=130 in_port=1 (via action) data_len=130
> (unbuffered)
>  mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,dl_
> src=40:44:44:44:54:57,dl_dst=50:54:00:00:00:07,mpls_label=
> 10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
>  00000000  50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
> -00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
> -00000020  00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
> -00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
> -00000040  00 00
> +00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 68 00 00
> +00000020  00 00 40 06 f9 3c c0 a8-00 01 c0 a8 00 02 00 00
> +00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 4a 4d
> +00000040  00 00 00 01 02 03 04 05-06 07 08 09 0a 0b 0c 0d
> +00000050  0e 0f 10 11 12 13 14 15-16 17 18 19 1a 1b 1c 1d
> +00000060  1e 1f 20 21 22 23 24 25-26 27 28 29 2a 2b 2c 2d
> +00000070  2e 2f 30 31 32 33 34 35-36 37 38 39 3a 3b 3c 3d
> +00000080  3e 3f
>  ])
>
>  dnl Modified MPLS controller action.
> @@ -3907,26 +3995,36 @@ OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN
> ofctl_monitor.log | wc -l` -ge 3])
>  OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
>
>  AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
> -OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62
> (unbuffered)
> +OFPT_PACKET_IN (OF1.2): total_len=126 in_port=1 (via action) data_len=126
> (unbuffered)
>  mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:
> 44:44:54:58,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_
> tc=0,mpls_ttl=64,mpls_bos=1
>  00000000  50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
> -00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
> -00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
> -00000030  00 00 00 00 00 00 50 00-00 00 2e 91 00 00
> -dnl
> -OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62
> (unbuffered)
> +00000010  88 47 00 00 a1 40 45 00-00 68 00 00 00 00 40 06
> +00000020  f9 3c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
> +00000030  00 00 00 00 00 00 50 00-00 00 4a 4d 00 00 00 01
> +00000040  02 03 04 05 06 07 08 09-0a 0b 0c 0d 0e 0f 10 11
> +00000050  12 13 14 15 16 17 18 19-1a 1b 1c 1d 1e 1f 20 21
> +00000060  22 23 24 25 26 27 28 29-2a 2b 2c 2d 2e 2f 30 31
> +00000070  32 33 34 35 36 37 38 39-3a 3b 3c 3d 3e 3f
> +OFPT_PACKET_IN (OF1.2): total_len=126 in_port=1 (via action) data_len=126
> (unbuffered)
>  mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:
> 44:44:54:58,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_
> tc=0,mpls_ttl=64,mpls_bos=1
>  00000000  50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
> -00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
> -00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
> -00000030  00 00 00 00 00 00 50 00-00 00 2e 91 00 00
> -dnl
> -OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62
> (unbuffered)
> +00000010  88 47 00 00 a1 40 45 00-00 68 00 00 00 00 40 06
> +00000020  f9 3c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
> +00000030  00 00 00 00 00 00 50 00-00 00 4a 4d 00 00 00 01
> +00000040  02 03 04 05 06 07 08 09-0a 0b 0c 0d 0e 0f 10 11
> +00000050  12 13 14 15 16 17 18 19-1a 1b 1c 1d 1e 1f 20 21
> +00000060  22 23 24 25 26 27 28 29-2a 2b 2c 2d 2e 2f 30 31
> +00000070  32 33 34 35 36 37 38 39-3a 3b 3c 3d 3e 3f
> +OFPT_PACKET_IN (OF1.2): total_len=126 in_port=1 (via action) data_len=126
> (unbuffered)
>  mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:
> 44:44:54:58,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_
> tc=0,mpls_ttl=64,mpls_bos=1
>  00000000  50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
> -00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
> -00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
> -00000030  00 00 00 00 00 00 50 00-00 00 2e 91 00 00
> +00000010  88 47 00 00 a1 40 45 00-00 68 00 00 00 00 40 06
> +00000020  f9 3c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
> +00000030  00 00 00 00 00 00 50 00-00 00 4a 4d 00 00 00 01
> +00000040  02 03 04 05 06 07 08 09-0a 0b 0c 0d 0e 0f 10 11
> +00000050  12 13 14 15 16 17 18 19-1a 1b 1c 1d 1e 1f 20 21
> +00000060  22 23 24 25 26 27 28 29-2a 2b 2c 2d 2e 2f 30 31
> +00000070  32 33 34 35 36 37 38 39-3a 3b 3c 3d 3e 3f
>  ])
>
>  dnl Modified MPLS controller action.
> @@ -3941,40 +4039,50 @@ OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN
> ofctl_monitor.log | wc -l` -ge 3])
>  OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
>
>  AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
> -OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62
> (unbuffered)
> +OFPT_PACKET_IN (OF1.2): total_len=126 in_port=1 (via action) data_len=126
> (unbuffered)
>  mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:
> 44:44:54:59,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_
> tc=0,mpls_ttl=64,mpls_bos=1
>  00000000  50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
> -00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
> -00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
> -00000030  00 00 00 00 00 00 50 00-00 00 2e 91 00 00
> -dnl
> -OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62
> (unbuffered)
> +00000010  88 47 00 00 a1 40 45 00-00 68 00 00 00 00 40 06
> +00000020  f9 3c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
> +00000030  00 00 00 00 00 00 50 00-00 00 4a 4d 00 00 00 01
> +00000040  02 03 04 05 06 07 08 09-0a 0b 0c 0d 0e 0f 10 11
> +00000050  12 13 14 15 16 17 18 19-1a 1b 1c 1d 1e 1f 20 21
> +00000060  22 23 24 25 26 27 28 29-2a 2b 2c 2d 2e 2f 30 31
> +00000070  32 33 34 35 36 37 38 39-3a 3b 3c 3d 3e 3f
> +OFPT_PACKET_IN (OF1.2): total_len=126 in_port=1 (via action) data_len=126
> (unbuffered)
>  mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:
> 44:44:54:59,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_
> tc=0,mpls_ttl=64,mpls_bos=1
>  00000000  50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
> -00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
> -00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
> -00000030  00 00 00 00 00 00 50 00-00 00 2e 91 00 00
> -dnl
> -OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62
> (unbuffered)
> +00000010  88 47 00 00 a1 40 45 00-00 68 00 00 00 00 40 06
> +00000020  f9 3c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
> +00000030  00 00 00 00 00 00 50 00-00 00 4a 4d 00 00 00 01
> +00000040  02 03 04 05 06 07 08 09-0a 0b 0c 0d 0e 0f 10 11
> +00000050  12 13 14 15 16 17 18 19-1a 1b 1c 1d 1e 1f 20 21
> +00000060  22 23 24 25 26 27 28 29-2a 2b 2c 2d 2e 2f 30 31
> +00000070  32 33 34 35 36 37 38 39-3a 3b 3c 3d 3e 3f
> +OFPT_PACKET_IN (OF1.2): total_len=126 in_port=1 (via action) data_len=126
> (unbuffered)
>  mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:
> 44:44:54:59,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_
> tc=0,mpls_ttl=64,mpls_bos=1
>  00000000  50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
> -00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
> -00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
> -00000030  00 00 00 00 00 00 50 00-00 00 2e 91 00 00
> +00000010  88 47 00 00 a1 40 45 00-00 68 00 00 00 00 40 06
> +00000020  f9 3c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
> +00000030  00 00 00 00 00 00 50 00-00 00 4a 4d 00 00 00 01
> +00000040  02 03 04 05 06 07 08 09-0a 0b 0c 0d 0e 0f 10 11
> +00000050  12 13 14 15 16 17 18 19-1a 1b 1c 1d 1e 1f 20 21
> +00000060  22 23 24 25 26 27 28 29-2a 2b 2c 2d 2e 2f 30 31
> +00000070  32 33 34 35 36 37 38 39-3a 3b 3c 3d 3e 3f
>  ])
>
>  AT_CHECK([ovs-appctl revalidator/purge], [0])
>  AT_CHECK([ovs-ofctl --protocols=OpenFlow12 dump-flows br0 | ofctl_strip |
> sort], [0], [dnl
> - cookie=0xa, n_packets=3, n_bytes=162, dl_src=40:44:44:44:54:50
> actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],
> push_vlan:0x8100,set_field:4195->vlan_vid,set_field:1->
> vlan_pcp,CONTROLLER:65535
> - cookie=0xa, n_packets=3, n_bytes=162, dl_src=40:44:44:44:54:52
> actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],
> push_vlan:0x8100,load:0x63->OXM_OF_VLAN_VID[[]],set_field:
> 1->vlan_pcp,CONTROLLER:65535
> - cookie=0xa, n_packets=3, n_bytes=162, dl_src=40:44:44:44:54:54
> actions=push_vlan:0x8100,set_field:4195->vlan_vid,set_
> field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_
> LABEL[[]],CONTROLLER:65535
> - cookie=0xa, n_packets=3, n_bytes=162, dl_src=40:44:44:44:54:56
> actions=push_vlan:0x8100,load:0x63->OXM_OF_VLAN_VID[[]],set_
> field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_
> LABEL[[]],CONTROLLER:65535
> - cookie=0xa, n_packets=3, n_bytes=174, dl_src=40:44:44:44:54:51
> actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],
> push_vlan:0x8100,set_field:4195->vlan_vid,set_field:1->
> vlan_pcp,CONTROLLER:65535
> - cookie=0xa, n_packets=3, n_bytes=174, dl_src=40:44:44:44:54:53
> actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],
> push_vlan:0x8100,load:0x63->OXM_OF_VLAN_VID[[]],set_field:
> 1->vlan_pcp,CONTROLLER:65535
> - cookie=0xa, n_packets=3, n_bytes=174, dl_src=40:44:44:44:54:55
> actions=push_vlan:0x8100,set_field:4195->vlan_vid,set_
> field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_
> LABEL[[]],CONTROLLER:65535
> - cookie=0xa, n_packets=3, n_bytes=174, dl_src=40:44:44:44:54:57
> actions=push_vlan:0x8100,load:0x63->OXM_OF_VLAN_VID[[]],set_
> field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_
> LABEL[[]],CONTROLLER:65535
> - cookie=0xa, n_packets=3, n_bytes=174, vlan_tci=0x1000/0x1000,dl_src=40:44:44:44:54:58
> actions=load:0x63->OXM_OF_VLAN_VID[[]],set_field:1->
> vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
> - cookie=0xa, n_packets=3, n_bytes=174, vlan_tci=0x1000/0x1000,dl_src=40:44:44:44:54:59
> actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],
> set_field:1->vlan_pcp,load:0x63->OXM_OF_VLAN_VID[[]],CONTROLLER:65535
> + cookie=0xa, n_packets=3, n_bytes=354, dl_src=40:44:44:44:54:50
> actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],
> push_vlan:0x8100,set_field:4195->vlan_vid,set_field:1->
> vlan_pcp,CONTROLLER:65535
> + cookie=0xa, n_packets=3, n_bytes=354, dl_src=40:44:44:44:54:52
> actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],
> push_vlan:0x8100,load:0x63->OXM_OF_VLAN_VID[[]],set_field:
> 1->vlan_pcp,CONTROLLER:65535
> + cookie=0xa, n_packets=3, n_bytes=354, dl_src=40:44:44:44:54:54
> actions=push_vlan:0x8100,set_field:4195->vlan_vid,set_
> field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_
> LABEL[[]],CONTROLLER:65535
> + cookie=0xa, n_packets=3, n_bytes=354, dl_src=40:44:44:44:54:56
> actions=push_vlan:0x8100,load:0x63->OXM_OF_VLAN_VID[[]],set_
> field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_
> LABEL[[]],CONTROLLER:65535
> + cookie=0xa, n_packets=3, n_bytes=366, dl_src=40:44:44:44:54:51
> actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],
> push_vlan:0x8100,set_field:4195->vlan_vid,set_field:1->
> vlan_pcp,CONTROLLER:65535
> + cookie=0xa, n_packets=3, n_bytes=366, dl_src=40:44:44:44:54:53
> actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],
> push_vlan:0x8100,load:0x63->OXM_OF_VLAN_VID[[]],set_field:
> 1->vlan_pcp,CONTROLLER:65535
> + cookie=0xa, n_packets=3, n_bytes=366, dl_src=40:44:44:44:54:55
> actions=push_vlan:0x8100,set_field:4195->vlan_vid,set_
> field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_
> LABEL[[]],CONTROLLER:65535
> + cookie=0xa, n_packets=3, n_bytes=366, dl_src=40:44:44:44:54:57
> actions=push_vlan:0x8100,load:0x63->OXM_OF_VLAN_VID[[]],set_
> field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_
> LABEL[[]],CONTROLLER:65535
> + cookie=0xa, n_packets=3, n_bytes=366, vlan_tci=0x1000/0x1000,dl_src=40:44:44:44:54:58
> actions=load:0x63->OXM_OF_VLAN_VID[[]],set_field:1->
> vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
> + cookie=0xa, n_packets=3, n_bytes=366, vlan_tci=0x1000/0x1000,dl_src=40:44:44:44:54:59
> actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],
> set_field:1->vlan_pcp,load:0x63->OXM_OF_VLAN_VID[[]],CONTROLLER:65535
>  OFPST_FLOW reply (OF1.2):
>  ])
>
> @@ -5736,10 +5844,10 @@ HEADER
>         out_ifindex=1003
>         out_format=0
>         hdr_prot=1
> -       pkt_len=46
> +       pkt_len=110
>         stripped=4
> -       hdr_len=42
> -       hdr=50-54-00-00-00-07-50-54-00-00-00-05-08-00-45-00-00-1C-
> 00-00-00-00-40-01-F9-8D-C0-A8-00-01-C0-A8-00-02-08-00-F7-FF-00-00-00-00
> +       hdr_len=106
> +       hdr=50-54-00-00-00-07-50-54-00-00-00-05-08-00-45-00-00-5C-
> 00-00-00-00-40-01-F9-4D-C0-A8-00-01-C0-A8-00-02-08-00-13-FC-
> 00-00-00-00-00-01-02-03-04-05-06-07-08-09-0A-0B-0C-0D-0E-0F-
> 10-11-12-13-14-15-16-17-18-19-1A-1B-1C-1D-1E-1F-20-21-22-23-
> 24-25-26-27-28-29-2A-2B-2C-2D-2E-2F-30-31-32-33-34-35-36-37-
> 38-39-3A-3B-3C-3D-3E-3F
>  HEADER
>         dgramSeqNo=1
>         ds=127.0.0.1>2:1000
> @@ -5756,10 +5864,10 @@ HEADER
>         out_ifindex=1004
>         out_format=0
>         hdr_prot=1
> -       pkt_len=46
> +       pkt_len=110
>         stripped=4
> -       hdr_len=42
> -       hdr=50-54-00-00-00-05-50-54-00-00-00-07-08-00-45-00-00-1C-
> 00-00-00-00-40-01-F9-8D-C0-A8-00-02-C0-A8-00-01-00-00-FF-FF-00-00-00-00
> +       hdr_len=106
> +       hdr=50-54-00-00-00-05-50-54-00-00-00-07-08-00-45-00-00-5C-
> 00-00-00-00-40-01-F9-4D-C0-A8-00-02-C0-A8-00-01-00-00-1B-FC-
> 00-00-00-00-00-01-02-03-04-05-06-07-08-09-0A-0B-0C-0D-0E-0F-
> 10-11-12-13-14-15-16-17-18-19-1A-1B-1C-1D-1E-1F-20-21-22-23-
> 24-25-26-27-28-29-2A-2B-2C-2D-2E-2F-30-31-32-33-34-35-36-37-
> 38-39-3A-3B-3C-3D-3E-3F
>  HEADER
>         dgramSeqNo=1
>         ds=127.0.0.1>2:1000
> @@ -5877,14 +5985,14 @@ IFCOUNTERS
>         ifspeed=100000000
>         direction=0
>         status=0
> -       in_octets=138
> +       in_octets=202
>         in_unicasts=3
>         in_multicasts=4294967295
>         in_broadcasts=4294967295
>         in_discards=4294967295
>         in_errors=4294967295
>         in_unknownprotos=4294967295
> -       out_octets=84
> +       out_octets=148
>         out_unicasts=2
>         out_multicasts=4294967295
>         out_broadcasts=4294967295
> @@ -5900,14 +6008,14 @@ IFCOUNTERS
>         ifspeed=100000000
>         direction=0
>         status=0
> -       in_octets=84
> +       in_octets=148
>         in_unicasts=2
>         in_multicasts=4294967295
>         in_broadcasts=4294967295
>         in_discards=4294967295
>         in_errors=4294967295
>         in_unknownprotos=4294967295
> -       out_octets=138
> +       out_octets=202
>         out_unicasts=3
>         out_multicasts=4294967295
>         out_broadcasts=4294967295
> @@ -5969,14 +6077,14 @@ IFCOUNTERS
>         ifspeed=100000000
>         direction=0
>         status=0
> -       in_octets=138
> +       in_octets=202
>         in_unicasts=3
>         in_multicasts=4294967295
>         in_broadcasts=4294967295
>         in_discards=4294967295
>         in_errors=4294967295
>         in_unknownprotos=4294967295
> -       out_octets=84
> +       out_octets=148
>         out_unicasts=2
>         out_multicasts=4294967295
>         out_broadcasts=4294967295
> @@ -5992,14 +6100,14 @@ IFCOUNTERS
>         ifspeed=100000000
>         direction=0
>         status=0
> -       in_octets=84
> +       in_octets=148
>         in_unicasts=2
>         in_multicasts=4294967295
>         in_broadcasts=4294967295
>         in_discards=4294967295
>         in_errors=4294967295
>         in_unknownprotos=4294967295
> -       out_octets=138
> +       out_octets=202
>         out_unicasts=3
>         out_multicasts=4294967295
>         out_broadcasts=4294967295
> @@ -6289,10 +6397,10 @@ HEADER
>         out_ifindex=1
>         out_format=2
>         hdr_prot=1
> -       pkt_len=46
> +       pkt_len=110
>         stripped=4
> -       hdr_len=42
> -       hdr=50-54-00-00-00-0A-50-54-00-00-00-09-08-00-45-01-00-1C-
> 00-00-00-00-80-01-12-CA-0A-0A-0A-02-0A-0A-0A-01-08-00-F7-FF-00-00-00-00
> +       hdr_len=106
> +       hdr=50-54-00-00-00-0A-50-54-00-00-00-09-08-00-45-01-00-5C-
> 00-00-00-00-80-01-12-8A-0A-0A-0A-02-0A-0A-0A-01-08-00-13-FC-
> 00-00-00-00-00-01-02-03-04-05-06-07-08-09-0A-0B-0C-0D-0E-0F-
> 10-11-12-13-14-15-16-17-18-19-1A-1B-1C-1D-1E-1F-20-21-22-23-
> 24-25-26-27-28-29-2A-2B-2C-2D-2E-2F-30-31-32-33-34-35-36-37-
> 38-39-3A-3B-3C-3D-3E-3F
>  ])
>
>  OVS_VSWITCHD_STOP
> @@ -6391,10 +6499,10 @@ HEADER
>         out_ifindex=1
>         out_format=2
>         hdr_prot=1
> -       pkt_len=46
> +       pkt_len=110
>         stripped=4
> -       hdr_len=42
> -       hdr=50-54-00-00-00-0A-50-54-00-00-00-05-08-00-45-00-00-1C-
> 00-00-00-00-80-01-B6-8D-C0-A8-01-01-C0-A8-02-02-08-00-F7-FF-00-00-00-00
> +       hdr_len=106
> +       hdr=50-54-00-00-00-0A-50-54-00-00-00-05-08-00-45-00-00-5C-
> 00-00-00-00-80-01-B6-4D-C0-A8-01-01-C0-A8-02-02-08-00-13-FC-
> 00-00-00-00-00-01-02-03-04-05-06-07-08-09-0A-0B-0C-0D-0E-0F-
> 10-11-12-13-14-15-16-17-18-19-1A-1B-1C-1D-1E-1F-20-21-22-23-
> 24-25-26-27-28-29-2A-2B-2C-2D-2E-2F-30-31-32-33-34-35-36-37-
> 38-39-3A-3B-3C-3D-3E-3F
>  ])
>
>  OVS_VSWITCHD_STOP
> @@ -6528,12 +6636,12 @@ m4_define([CHECK_NETFLOW_EXPIRATION],
>    OVS_VSWITCHD_STOP
>    OVS_APP_EXIT_AND_WAIT([test-netflow])
>
> -  AT_CHECK([test `grep "192.168.0.1 > 192.168.0.2, if 1 > 65535, 1 pkts,
> 42 bytes, ICMP 8:0" netflow.log | wc -l` -eq 1])
> +  AT_CHECK([test `grep "192.168.0.1 > 192.168.0.2, if 1 > 65535, 1 pkts,
> 106 bytes, ICMP 8:0" netflow.log | wc -l` -eq 1])
>
> -  AT_CHECK([test `grep "192.168.0.1 > 192.168.0.2, if 1 > 2, 1 pkts, 42
> bytes, ICMP 8:0" netflow.log | wc -l` -eq 1])
> +  AT_CHECK([test `grep "192.168.0.1 > 192.168.0.2, if 1 > 2, 1 pkts, 106
> bytes, ICMP 8:0" netflow.log | wc -l` -eq 1])
>
> -  combined=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 84 bytes,
> ICMP 0:0" netflow.log | wc -l`
> -  separate=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 1 pkts, 42 bytes,
> ICMP 0:0" netflow.log | wc -l`
> +  combined=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 212 bytes,
> ICMP 0:0" netflow.log | wc -l`
> +  separate=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 1 pkts, 106 bytes,
> ICMP 0:0" netflow.log | wc -l`
>    AT_CHECK([test $separate = 2 || test $combined = 1], [0])])
>
>  AT_SETUP([ofproto-dpif - NetFlow flow expiration - IPv4 collector])
> @@ -6983,7 +7091,7 @@ AT_CHECK([ovs-appctl revalidator/purge], [0])
>  AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
>  AT_CHECK([strip_xids < stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p'
> | sort], [0], [dnl
>   cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1,
> icmp actions=NORMAL
> - cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=540,
> idle_age=1, ip actions=NORMAL
> + cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=1180,
> idle_age=1, ip actions=NORMAL
>  ])
>  OVS_VSWITCHD_STOP
>  AT_CLEANUP
> @@ -7032,22 +7140,22 @@ send_packet () {
>
>  # OpenFlow 1.0, implicit reset_counts
>  send_packet
> -warp_and_dump_NXM   1 1 54 1
> +warp_and_dump_NXM   1 1 118 1
>  AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow10 add-flow br0 $flow])
>  # add-flow resets duration and counts,
>  # but idle age is inherited from the old flow
>  warp_and_dump_NXM   1 0 0  2
>
>  send_packet
> -warp_and_dump_NXM   2 1 54 1
> +warp_and_dump_NXM   2 1 118 1
>  AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow10 mod-flows br0 $flow])
>  # mod-flows resets hard_age, but not counts
>  # but duration and idle_age is inherited from the old flow
> -warp_and_dump_NXM   3 1 54  2 1
> +warp_and_dump_NXM   3 1 118  2 1
>
>  # OpenFlow 1.1, implicit reset_counts
>  send_packet
> -warp_and_dump_OF 11 4 2 108
> +warp_and_dump_OF 11 4 2 236
>  AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow11 add-flow br0 $flow])
>  # add-flow resets duration and counts,
>  # but idle age is inherited from the old flow
> @@ -7055,32 +7163,32 @@ warp_and_dump_NXM   1 0 0  2
>  warp_and_dump_OF 11 2 0 0
>
>  send_packet
> -warp_and_dump_OF 11 3 1 54
> +warp_and_dump_OF 11 3 1 118
>  AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow11 mod-flows br0 $flow])
>  # mod-flows resets hard_age, but not counts
>  # but duration and idle_age is inherited from the old flow
> -warp_and_dump_NXM   4 1 54  2 1
> -warp_and_dump_OF 11 5 1 54
> +warp_and_dump_NXM   4 1 118  2 1
> +warp_and_dump_OF 11 5 1 118
>
>  # OpenFlow 1.2, explicit reset_counts
>  send_packet
> -warp_and_dump_OF 12 6 2 108
> +warp_and_dump_OF 12 6 2 236
>  AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow12 add-flow br0 $flow])
>  # add-flow without flags resets duration, but not counts,
>  # idle age is inherited from the old flow
> -warp_and_dump_NXM   1 2 108  2
> -warp_and_dump_OF 12 2 2 108
> +warp_and_dump_NXM   1 2 236  2
> +warp_and_dump_OF 12 2 2 236
>
>  send_packet
> -warp_and_dump_OF 12 3 3 162
> +warp_and_dump_OF 12 3 3 354
>  AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow12 mod-flows br0 $flow])
>  # mod-flows without flags does not reset duration nor counts,
>  # idle age is inherited from the old flow
> -warp_and_dump_NXM   4 3 162  2 1
> -warp_and_dump_OF 12 5 3 162
> +warp_and_dump_NXM   4 3 354  2 1
> +warp_and_dump_OF 12 5 3 354
>
>  send_packet
> -warp_and_dump_OF 12 6 4 216
> +warp_and_dump_OF 12 6 4 472
>  AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow12 add-flow br0
> reset_counts,$flow])
>  # add-flow with reset_counts resets both duration and counts,
>  # idle age is inherited from the old flow
> @@ -7088,7 +7196,7 @@ warp_and_dump_NXM   1 0 0  2
>  warp_and_dump_OF 12 2 0 0
>
>  send_packet
> -warp_and_dump_OF 12 3 1 54
> +warp_and_dump_OF 12 3 1 118
>  AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow12 mod-flows br0
> reset_counts,$flow])
>  # mod-flows with reset_counts resets counts, but not duration,
>  # idle age is inherited from the old flow
> @@ -7101,23 +7209,23 @@ flow_mods_reset_counts () {
>      AT_CHECK([ovs-ofctl add-flow br0 $flow])
>
>      send_packet
> -    warp_and_dump_OF $1 1 1 54 reset_counts
> +    warp_and_dump_OF $1 1 1 118 reset_counts
>      AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow$1 add-flow br0 $flow])
>      # add-flow without flags resets duration, but not counts,
>      # idle age is inherited from the old flow
> -    warp_and_dump_NXM   1 1 54  2
> -    warp_and_dump_OF $1 2 1 54
> +    warp_and_dump_NXM   1 1 118  2
> +    warp_and_dump_OF $1 2 1 118
>
>      send_packet
> -    warp_and_dump_OF $1 3 2 108
> +    warp_and_dump_OF $1 3 2 236
>      AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow$1 mod-flows br0 $flow])
>      # mod-flows without flags does not reset duration nor counts,
>      # idle age is inherited from the old flow
> -    warp_and_dump_NXM   4 2 108  2 1
> -    warp_and_dump_OF $1 5 2 108
> +    warp_and_dump_NXM   4 2 236  2 1
> +    warp_and_dump_OF $1 5 2 236
>
>      send_packet
> -    warp_and_dump_OF $1 6 3 162
> +    warp_and_dump_OF $1 6 3 354
>      AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow$1 add-flow br0
> reset_counts,$flow])
>      # add-flow with reset_counts resets both duration and counts,
>      # idle age is inherited from the old flow
> @@ -7125,7 +7233,7 @@ flow_mods_reset_counts () {
>      warp_and_dump_OF $1 2 0 0 reset_counts
>
>      send_packet
> -    warp_and_dump_OF $1 3 1 54 reset_counts
> +    warp_and_dump_OF $1 3 1 118 reset_counts
>      AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow$1 mod-flows br0
> reset_counts,$flow])
>      # mod-flows with reset_counts resets counts, but not duration,
>      # idle age is inherited from the old flow
> @@ -7134,21 +7242,21 @@ flow_mods_reset_counts () {
>
>      # Modify flow having reset_counts flag without reset_counts
>      send_packet
> -    warp_and_dump_OF $1 6 1 54 reset_counts
> +    warp_and_dump_OF $1 6 1 118 reset_counts
>      AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow$1 mod-flows br0 $flow])
> -    warp_and_dump_NXM   7 1 54  2 1
> -    warp_and_dump_OF $1 8 1 54 reset_counts
> +    warp_and_dump_NXM   7 1 118  2 1
> +    warp_and_dump_OF $1 8 1 118 reset_counts
>
>      # Add flow having reset_counts flag without reset_counts
>      send_packet
> -    warp_and_dump_OF $1 9 2 108 reset_counts
> +    warp_and_dump_OF $1 9 2 236 reset_counts
>      AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow$1 add-flow br0 $flow])
> -    warp_and_dump_NXM   1 2 108  2
> -    warp_and_dump_OF $1 2 2 108
> +    warp_and_dump_NXM   1 2 236  2
> +    warp_and_dump_OF $1 2 2 236
>
>      # Modify flow w/o reset_counts flag with a flow_mod having
> reset_counts
>      send_packet
> -    warp_and_dump_OF $1 3 3 162
> +    warp_and_dump_OF $1 3 3 354
>      AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow$1 mod-flows br0
> reset_counts,$flow])
>      warp_and_dump_NXM   4 0 0  2 1
>      warp_and_dump_OF $1 5 0 0
> @@ -7180,7 +7288,7 @@ ovs-appctl time/warp 1000
>  AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
>  AT_CHECK([strip_xids < stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p'
> | sort], [0], [dnl
>   cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1,
> icmp actions=NORMAL
> - cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=540,
> idle_age=1, ip actions=NORMAL
> + cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=1180,
> idle_age=1, ip actions=NORMAL
>  ])
>  OVS_VSWITCHD_STOP
>  AT_CLEANUP
> @@ -7529,22 +7637,22 @@ recirc_id(0),in_port(101),
> packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no),
>  ])
>
>  AT_CHECK([grep -e 'in_port(100).*packets:9' ovs-vswitchd.log | strip_ufid
> | filter_flow_dump], [0], [dnl
> -skb_priority(0/0),skb_mark(0/0),ct_state(0/0),ct_zone(0/0),
> ct_mark(0/0),ct_label(0/0),recirc_id(0),dp_hash(0/0),in_
> port(100),packet_type(ns=0,id=0),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:378, used:0.0s, actions:101,3,2
> +skb_priority(0/0),skb_mark(0/0),ct_state(0/0),ct_zone(0/0),
> ct_mark(0/0),ct_label(0/0),recirc_id(0),dp_hash(0/0),in_
> port(100),packet_type(ns=0,id=0),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:954, used:0.0s, actions:101,3,2
>  ])
>  AT_CHECK([grep -e 'in_port(101).*packets:4' ovs-vswitchd.log | strip_ufid
> | filter_flow_dump], [0], [dnl
> -skb_priority(0/0),skb_mark(0/0),ct_state(0/0),ct_zone(0/0),
> ct_mark(0/0),ct_label(0/0),recirc_id(0),dp_hash(0/0),in_
> port(101),packet_type(ns=0,id=0),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:168, used:0.0s, actions:100,2,3
> +skb_priority(0/0),skb_mark(0/0),ct_state(0/0),ct_zone(0/0),
> ct_mark(0/0),ct_label(0/0),recirc_id(0),dp_hash(0/0),in_
> port(101),packet_type(ns=0,id=0),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:424, used:0.0s, actions:100,2,3
>  ])
>
>  AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
>  OFPST_PORT reply (xid=0x4): 1 ports
> -  port  1: rx pkts=5, bytes=210, drop=?, errs=?, frame=?, over=?, crc=?
> -           tx pkts=10, bytes=420, drop=?, errs=?, coll=?
> +  port  1: rx pkts=5, bytes=530, drop=?, errs=?, frame=?, over=?, crc=?
> +           tx pkts=10, bytes=1060, drop=?, errs=?, coll=?
>  ])
>
>  AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
>  OFPST_PORT reply (xid=0x4): 1 ports
> -  port  1: rx pkts=10, bytes=420, drop=?, errs=?, frame=?, over=?, crc=?
> -           tx pkts=5, bytes=210, drop=?, errs=?, coll=?
> +  port  1: rx pkts=10, bytes=1060, drop=?, errs=?, frame=?, over=?, crc=?
> +           tx pkts=5, bytes=530, drop=?, errs=?, coll=?
>  ])
>
>  OVS_VSWITCHD_STOP
> @@ -8143,8 +8251,8 @@ skb_priority(0),skb_mark(0),
> ct_state(-new-est-rel-rpl-inv-trk-snat-dnat),ct_zone
>  skb_priority(0),skb_mark(0),ct_state(-new-est-rel-rpl-inv-
> trk-snat-dnat),ct_zone(0),ct_mark(0),ct_label(0),recirc_id(
> 0),dp_hash(0),in_port(1),packet_type(ns=0,id=0),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),
> actions:drop
>  ])
>     AT_CHECK([strip_ufid < ovs-vswitchd.log | filter_flow_dump | grep
> 'packets:3'], [0], [dnl
> -skb_priority(0),skb_mark(0),ct_state(0/0xff),ct_zone(0),
> ct_mark(0),ct_label(0),recirc_id(0),dp_hash(0),in_port(1),
> packet_type(ns=0,id=0),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:3,
> bytes:126, used:0.0s, actions:2
> -skb_priority(0),skb_mark(0),ct_state(0/0xff),ct_zone(0),
> ct_mark(0),ct_label(0),recirc_id(0),dp_hash(0),in_port(1),
> packet_type(ns=0,id=0),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), packets:3,
> bytes:126, used:0.0s, actions:drop
> +skb_priority(0),skb_mark(0),ct_state(0/0xff),ct_zone(0),
> ct_mark(0),ct_label(0),recirc_id(0),dp_hash(0),in_port(1),
> packet_type(ns=0,id=0),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:3,
> bytes:318, used:0.0s, actions:2
> +skb_priority(0),skb_mark(0),ct_state(0/0xff),ct_zone(0),
> ct_mark(0),ct_label(0),recirc_id(0),dp_hash(0),in_port(1),
> packet_type(ns=0,id=0),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), packets:3,
> bytes:318, used:0.0s, actions:drop
>  ])
>     OVS_VSWITCHD_STOP
>     AT_CLEANUP])
> @@ -8718,8 +8826,8 @@ recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_
> type(0x86dd),ipv6(proto=58,fr
>  ])
>
>  AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
> - n_packets=2, n_bytes=124, icmp6,icmp_type=128 actions=output:2
> - n_packets=2, n_bytes=124, icmp6,icmp_type=129 actions=output:3
> + n_packets=2, n_bytes=252, icmp6,icmp_type=128 actions=output:2
> + n_packets=2, n_bytes=252, icmp6,icmp_type=129 actions=output:3
>  NXST_FLOW reply:
>  ])
>
> @@ -8999,11 +9107,11 @@ OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
>
>  dnl Check this output. We only see the latter two packets, not the first.
>  AT_CHECK([cat ofctl_monitor.log], [0], [dnl
> -NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x0 total_len=42
> reg0=0x1,reg1=0x4d2,reg2=0x1,reg3=0x1,reg4=0x1,in_port=1 (via action)
> data_len=42 (unbuffered)
> -udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:
> 54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_
> ecn=0,nw_ttl=64,tp_src=1,tp_dst=2 udp_csum:e9d6
> +NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x0 total_len=106
> reg0=0x1,reg1=0x4d2,reg2=0x1,reg3=0x1,reg4=0x1,in_port=1 (via action)
> data_len=106 (unbuffered)
> +udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:
> 54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_
> ecn=0,nw_ttl=64,tp_src=1,tp_dst=2 udp_csum:553
>  dnl
> -NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x0 total_len=42
> ct_state=est|rpl|trk,ct_zone=1,ct_mark=0x1,ct_label=
> 0x4d2000000000000000000000000,ct_nw_src=10.1.1.1,ct_nw_dst=
> 10.1.1.2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,ip,reg0=0x1,
> reg1=0x4d2,reg2=0x1,reg3=0x2,reg4=0x1,in_port=2 (via action) data_len=42
> (unbuffered)
> -udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:
> 54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_
> ecn=0,nw_ttl=64,tp_src=2,tp_dst=1 udp_csum:e9d6
> +NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x0 total_len=106
> ct_state=est|rpl|trk,ct_zone=1,ct_mark=0x1,ct_label=
> 0x4d2000000000000000000000000,ct_nw_src=10.1.1.1,ct_nw_dst=
> 10.1.1.2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,ip,reg0=0x1,
> reg1=0x4d2,reg2=0x1,reg3=0x2,reg4=0x1,in_port=2 (via action) data_len=106
> (unbuffered)
> +udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:
> 54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_
> ecn=0,nw_ttl=64,tp_src=2,tp_dst=1 udp_csum:553
>  ])
>
>  AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl -P nxt_packet_in
> --detach --no-chdir --pidfile ...
>
> [Message clipped]
Ben Pfaff Jan. 26, 2018, 11:04 p.m. UTC | #2
On Fri, Jan 26, 2018 at 01:52:09PM -0800, Yifeng Sun wrote:
> Hi Ben,
> 
> I found an issue in the lines below. It looks like that the 'else if' part
> is redundant.
> 
> +        if (dp_packet_size(packet) < packet_size) {
> +            packet_expand(packet, &flow, packet_size);
> +        } else if (dp_packet_size(packet) < packet_size){
> +            dp_packet_delete(packet);
> +            packet = NULL;
> +        }

Oops.  In the second "if", "<" should be ">".

> And do you know which commit this patch is based on? I am having problem
> to apply this patch and test it out.

I guess master changed.  I rebased, applied patches 1 and 2, and
re-posted the remaining patches as v2:
        https://patchwork.ozlabs.org/project/openvswitch/list/?series=25681
diff mbox series

Patch

diff --git a/NEWS b/NEWS
index c067b9462f2d..5289bc156dc2 100644
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,7 @@ 
 Post-v2.9.0
 --------------------
-    - Nothing yet.
+    - ovs-vswitchd:
+      * New options --l7 and --l7-len to "ofproto/trace" command.
 
 
 v2.9.0 - xx xxx xxxx
diff --git a/lib/flow.c b/lib/flow.c
index 04a73fd4ed5a..38ff29c8cd14 100644
--- a/lib/flow.c
+++ b/lib/flow.c
@@ -2692,8 +2692,24 @@  flow_set_mpls_lse(struct flow *flow, int idx, ovs_be32 lse)
     flow->mpls_lse[idx] = lse;
 }
 
+static void
+flow_compose_l7(struct dp_packet *p, const void *l7, size_t l7_len)
+{
+    if (l7_len) {
+        if (l7) {
+            dp_packet_put(p, l7, l7_len);
+        } else {
+            uint8_t *payload = dp_packet_put_uninit(p, l7_len);
+            for (size_t i = 0; i < l7_len; i++) {
+                payload[i] = i;
+            }
+        }
+    }
+}
+
 static size_t
-flow_compose_l4(struct dp_packet *p, const struct flow *flow)
+flow_compose_l4(struct dp_packet *p, const struct flow *flow,
+                const void *l7, size_t l7_len)
 {
     size_t orig_len = dp_packet_size(p);
 
@@ -2704,19 +2720,31 @@  flow_compose_l4(struct dp_packet *p, const struct flow *flow)
             tcp->tcp_src = flow->tp_src;
             tcp->tcp_dst = flow->tp_dst;
             tcp->tcp_ctl = TCP_CTL(ntohs(flow->tcp_flags), 5);
+            if (!(flow->tcp_flags & htons(TCP_SYN | TCP_FIN | TCP_RST))) {
+                flow_compose_l7(p, l7, l7_len);
+            }
         } else if (flow->nw_proto == IPPROTO_UDP) {
             struct udp_header *udp = dp_packet_put_zeros(p, sizeof *udp);
             udp->udp_src = flow->tp_src;
             udp->udp_dst = flow->tp_dst;
-            udp->udp_len = htons(sizeof *udp);
+            udp->udp_len = htons(sizeof *udp + l7_len);
+            flow_compose_l7(p, l7, l7_len);
         } else if (flow->nw_proto == IPPROTO_SCTP) {
             struct sctp_header *sctp = dp_packet_put_zeros(p, sizeof *sctp);
             sctp->sctp_src = flow->tp_src;
             sctp->sctp_dst = flow->tp_dst;
+            /* XXX Someone should figure out what L7 data to include. */
         } else if (flow->nw_proto == IPPROTO_ICMP) {
             struct icmp_header *icmp = dp_packet_put_zeros(p, sizeof *icmp);
             icmp->icmp_type = ntohs(flow->tp_src);
             icmp->icmp_code = ntohs(flow->tp_dst);
+            if ((icmp->icmp_type == ICMP4_ECHO_REQUEST ||
+                 icmp->icmp_type == ICMP4_ECHO_REPLY)
+                && icmp->icmp_code == 0) {
+                flow_compose_l7(p, l7, l7_len);
+            } else {
+                /* XXX Add inner IP packet for e.g. destination unreachable? */
+            }
         } else if (flow->nw_proto == IPPROTO_IGMP) {
             struct igmp_header *igmp = dp_packet_put_zeros(p, sizeof *igmp);
             igmp->igmp_type = ntohs(flow->tp_src);
@@ -2748,6 +2776,12 @@  flow_compose_l4(struct dp_packet *p, const struct flow *flow)
                     lla_opt->type = ND_OPT_TARGET_LINKADDR;
                     lla_opt->mac = flow->arp_tha;
                 }
+            } else if (icmp->icmp6_code == 0 &&
+                       (icmp->icmp6_type == ICMP6_ECHO_REQUEST ||
+                        icmp->icmp6_type == ICMP6_ECHO_REPLY)) {
+                flow_compose_l7(p, l7, l7_len);
+            } else {
+                /* XXX Add inner IP packet for e.g. destination unreachable? */
             }
         }
     }
@@ -2800,7 +2834,7 @@  flow_compose_l4_csum(struct dp_packet *p, const struct flow *flow,
  * ip/udp lengths and l3/l4 checksums.
  *
  * 'size' needs to be larger then the current packet size.  */
-static void
+void
 packet_expand(struct dp_packet *p, const struct flow *flow, size_t size)
 {
     size_t extra_size;
@@ -2850,10 +2884,19 @@  packet_expand(struct dp_packet *p, const struct flow *flow, size_t size)
  * (This is useful only for testing, obviously, and the packet isn't really
  * valid.  Lots of fields are just zeroed.)
  *
- * The created packet has minimal packet size, just big enough to hold
- * the packet header fields.  */
-static void
-flow_compose_minimal(struct dp_packet *p, const struct flow *flow)
+ * For packets whose protocols can encapsulate arbitrary L7 payloads, 'l7' and
+ * 'l7_len' determine that payload:
+ *
+ *    - If 'l7_len' is zero, no payload is included.
+ *
+ *    - If 'l7_len' is nonzero and 'l7' is null, an arbitrary payload 'l7_len'
+ *      bytes long is included.
+ *
+ *    - If 'l7_len' is nonzero and 'l7' is nonnull, the payload is copied
+ *      from 'l7'. */
+void
+flow_compose(struct dp_packet *p, const struct flow *flow,
+             const void *l7, size_t l7_len)
 {
     uint32_t pseudo_hdr_csum;
     size_t l4_len;
@@ -2893,7 +2936,7 @@  flow_compose_minimal(struct dp_packet *p, const struct flow *flow)
 
         dp_packet_set_l4(p, dp_packet_tail(p));
 
-        l4_len = flow_compose_l4(p, flow);
+        l4_len = flow_compose_l4(p, flow, l7, l7_len);
 
         ip = dp_packet_l3(p);
         ip->ip_tot_len = htons(p->l4_ofs - p->l3_ofs + l4_len);
@@ -2916,7 +2959,7 @@  flow_compose_minimal(struct dp_packet *p, const struct flow *flow)
 
         dp_packet_set_l4(p, dp_packet_tail(p));
 
-        l4_len = flow_compose_l4(p, flow);
+        l4_len = flow_compose_l4(p, flow, l7, l7_len);
 
         nh = dp_packet_l3(p);
         nh->ip6_plen = htons(l4_len);
@@ -2958,33 +3001,6 @@  flow_compose_minimal(struct dp_packet *p, const struct flow *flow)
         }
     }
 }
-
-/* Puts into 'p' a Ethernet frame of size 'size' that flow_extract() would
- * parse as having the given 'flow'.
- *
- * When 'size' is zero, 'p' is a minimal size packet that only big enough
- * to contains all packet headers.
- *
- * When 'size' is larger than the minimal packet size, the packet will
- * be expended to 'size' with the payload set to zero.
- *
- * Return 'true' if the packet is successfully created. 'false' otherwise.
- * Note, when 'size' is set to zero, this function always returns true.  */
-bool
-flow_compose(struct dp_packet *p, const struct flow *flow, size_t size)
-{
-    flow_compose_minimal(p, flow);
-
-    if (size && size < dp_packet_size(p)) {
-        return false;
-    }
-
-    if (size > dp_packet_size(p)) {
-        packet_expand(p, flow, size);
-    }
-
-    return true;
-}
 
 /* Compressed flow. */
 
diff --git a/lib/flow.h b/lib/flow.h
index eb1e2bfc6942..770a07a62778 100644
--- a/lib/flow.h
+++ b/lib/flow.h
@@ -124,7 +124,9 @@  void flow_set_mpls_tc(struct flow *, int idx, uint8_t tc);
 void flow_set_mpls_bos(struct flow *, int idx, uint8_t stack);
 void flow_set_mpls_lse(struct flow *, int idx, ovs_be32 lse);
 
-bool flow_compose(struct dp_packet *, const struct flow *, size_t);
+void flow_compose(struct dp_packet *, const struct flow *,
+                  const void *l7, size_t l7_len);
+void packet_expand(struct dp_packet *, const struct flow *, size_t size);
 
 bool parse_ipv6_ext_hdrs(const void **datap, size_t *sizep, uint8_t *nw_proto,
                          uint8_t *nw_frag);
diff --git a/lib/netdev-dummy.c b/lib/netdev-dummy.c
index 4246af3b9c86..35b748f11396 100644
--- a/lib/netdev-dummy.c
+++ b/lib/netdev-dummy.c
@@ -1520,10 +1520,17 @@  eth_from_flow(const char *s, size_t packet_size)
     }
 
     packet = dp_packet_new(0);
-    if (!flow_compose(packet, &flow, packet_size)) {
-        dp_packet_delete(packet);
-        packet = NULL;
-    };
+    if (packet_size) {
+        flow_compose(packet, &flow, NULL, 0);
+        if (dp_packet_size(packet) < packet_size) {
+            packet_expand(packet, &flow, packet_size);
+        } else if (dp_packet_size(packet) < packet_size){
+            dp_packet_delete(packet);
+            packet = NULL;
+        }
+    } else {
+        flow_compose(packet, &flow, NULL, 64);
+    }
 
     ofpbuf_uninit(&odp_key);
     return packet;
diff --git a/ofproto/ofproto-dpif-trace.c b/ofproto/ofproto-dpif-trace.c
index 75730155080c..1055644b6d5b 100644
--- a/ofproto/ofproto-dpif-trace.c
+++ b/ofproto/ofproto-dpif-trace.c
@@ -203,6 +203,8 @@  parse_flow_and_packet(int argc, const char *argv[],
     char *m_err = NULL;
     struct simap port_names = SIMAP_INITIALIZER(&port_names);
     struct dp_packet *packet = NULL;
+    uint8_t *l7 = NULL;
+    size_t l7_len = 64;
     struct ofpbuf odp_key;
     struct ofpbuf odp_mask;
 
@@ -219,6 +221,35 @@  parse_flow_and_packet(int argc, const char *argv[],
         const char *arg = argv[i];
         if (!strcmp(arg, "-generate") || !strcmp(arg, "--generate")) {
             generate_packet = true;
+        } else if (!strcmp(arg, "--l7")) {
+            if (i + 1 >= argc) {
+                m_err = xasprintf("Missing argument for option %s", arg);
+                goto exit;
+            }
+
+            struct dp_packet payload;
+            memset(&payload, 0, sizeof payload);
+            dp_packet_init(&payload, 0);
+            if (dp_packet_put_hex(&payload, argv[++i], NULL)[0] != '\0') {
+                dp_packet_uninit(&payload);
+                error = "Trailing garbage in packet data";
+                goto exit;
+            }
+            free(l7);
+            l7_len = dp_packet_size(&payload);
+            l7 = dp_packet_steal_data(&payload);
+        } else if (!strcmp(arg, "--l7-len")) {
+            if (i + 1 >= argc) {
+                m_err = xasprintf("Missing argument for option %s", arg);
+                goto exit;
+            }
+            free(l7);
+            l7 = NULL;
+            l7_len = atoi(argv[++i]);
+            if (l7_len > 64000) {
+                m_err = xasprintf("%s: too much L7 data", argv[i]);
+                goto exit;
+            }
         } else if (consistent
                    && (!strcmp(arg, "-consistent") ||
                        !strcmp(arg, "--consistent"))) {
@@ -392,7 +423,7 @@  parse_flow_and_packet(int argc, const char *argv[],
     if (generate_packet) {
         /* Generate a packet, as requested. */
         packet = dp_packet_new(0);
-        flow_compose(packet, flow, 0);
+        flow_compose(packet, flow, l7, l7_len);
     } else if (packet) {
         /* Use the metadata from the flow and the packet argument to
          * reconstruct the flow. */
@@ -412,6 +443,7 @@  exit:
     ofpbuf_uninit(&odp_key);
     ofpbuf_uninit(&odp_mask);
     simap_destroy(&port_names);
+    free(l7);
     return m_err;
 }
 
diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c
index 6157b70aee60..5ba0492b01d8 100644
--- a/ofproto/ofproto-dpif.c
+++ b/ofproto/ofproto-dpif.c
@@ -1227,7 +1227,7 @@  check_ct_eventmask(struct dpif_backer *backer)
 
     /* Compose a dummy UDP packet. */
     dp_packet_init(&packet, 0);
-    flow_compose(&packet, &flow, 0);
+    flow_compose(&packet, &flow, NULL, 64);
 
     /* Execute the actions.  On older datapaths this fails with EINVAL, on
      * newer datapaths it succeeds. */
diff --git a/ofproto/ofproto-unixctl.man b/ofproto/ofproto-unixctl.man
index 8f1d12c654ab..dede5f39da84 100644
--- a/ofproto/ofproto-unixctl.man
+++ b/ofproto/ofproto-unixctl.man
@@ -53,6 +53,11 @@  These commands support the following options:
 .IP \fB\-\-generate\fR
 Generate a packet from the flow (see below for more information).
 .
+.IP "\fB\-\-l7 \fIpayload\fR"
+.IQ "\fB\-\-l7\-len \fIlength\fR"
+Accepted only with \fB\-\-generate\fR (see below for more
+information).
+.
 .IP \fB\-\-consistent\fR
 Accepted by \fBofproto\-trace\-packet\-out\fR only.  With this option,
 the command rejects \fIactions\fR that are inconsistent with the
@@ -147,6 +152,11 @@  it, but \fB\-\-generate\fR is not a good way to fill in incomplete
 information, because it generates packets based on only the flow
 information, which means that the packets really do not have any more
 information than the flow.
+.IP
+By default, for protocols that allow arbitrary L7 payloads, the
+generated packet has 64 bytes of payload.  Use \fB\-\-l7\-len\fR to
+change the payload length, or \fB\-\-l7\fR to specify the exact
+contents of the payload.
 .
 .IP \fIpacket\fR
 This form supplies an explicit \fIpacket\fR as a sequence of hex
diff --git a/ovn/controller/ofctrl.c b/ovn/controller/ofctrl.c
index 2fa980ebdae1..c9c5cc152e4c 100644
--- a/ovn/controller/ofctrl.c
+++ b/ovn/controller/ofctrl.c
@@ -1149,7 +1149,7 @@  ofctrl_inject_pkt(const struct ovsrec_bridge *br_int, const char *flow_s,
     uint64_t packet_stub[128 / 8];
     struct dp_packet packet;
     dp_packet_use_stub(&packet, packet_stub, sizeof packet_stub);
-    flow_compose(&packet, &uflow, 0);
+    flow_compose(&packet, &uflow, NULL, 64);
 
     uint64_t ofpacts_stub[1024 / 8];
     struct ofpbuf ofpacts = OFPBUF_STUB_INITIALIZER(ofpacts_stub);
diff --git a/tests/bfd.at b/tests/bfd.at
index 5ba99a4e1d23..ba912b5683b8 100644
--- a/tests/bfd.at
+++ b/tests/bfd.at
@@ -237,7 +237,7 @@  OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=gre \
                     set bridge br0 fail-mode=standalone])
 
 # by default check_tnl_key is false. so we should process a bfd packet with tun_id=1.
-AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'tunnel(tun_id=0x1,src=2.2.2.2,dst=2.2.2.1,tos=0x0,ttl=64,tp_src=0,tp_dst=0,flags(key)),in_port(1),skb_mark(0/0),eth(src=00:11:22:33:44:55,dst=00:23:20:00:00:01),eth_type(0x0800),ipv4(src=169.254.1.0/0.0.0.0,dst=169.254.1.1/0.0.0.0,proto=17/0xff,tos=0/0,ttl=255/0,frag=no),udp(src=49152/0,dst=3784/0xffff)' -generate], [0], [stdout])
+AT_CHECK([ovs-appctl ofproto/trace --l7-len 0 ovs-dummy 'tunnel(tun_id=0x1,src=2.2.2.2,dst=2.2.2.1,tos=0x0,ttl=64,tp_src=0,tp_dst=0,flags(key)),in_port(1),skb_mark(0/0),eth(src=00:11:22:33:44:55,dst=00:23:20:00:00:01),eth_type(0x0800),ipv4(src=169.254.1.0/0.0.0.0,dst=169.254.1.1/0.0.0.0,proto=17/0xff,tos=0/0,ttl=255/0,frag=no),udp(src=49152/0,dst=3784/0xffff)' -generate], [0], [stdout])
 # check that the packet should be handled as BFD packet.
 AT_CHECK([tail -2 stdout], [0], [dnl
 This flow is handled by the userspace slow path because it:
@@ -254,7 +254,7 @@  Datapath actions: 100
 
 # set the tunnel key to 0.
 AT_CHECK([ovs-vsctl set interface p1 options:key=0])
-AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'tunnel(tun_id=0x0,src=2.2.2.2,dst=2.2.2.1,tos=0x0,ttl=64,tp_src=0,tp_dst=0,flags(key)),in_port(1),skb_mark(0/0),eth(src=00:11:22:33:44:55,dst=00:23:20:00:00:01),eth_type(0x0800),ipv4(src=169.254.1.0/0.0.0.0,dst=169.254.1.1/0.0.0.0,proto=17/0xff,tos=0/0,ttl=255/0,frag=no),udp(src=49152/0,dst=3784/0xffff)' -generate], [0], [stdout])
+AT_CHECK([ovs-appctl ofproto/trace --l7-len 0 ovs-dummy 'tunnel(tun_id=0x0,src=2.2.2.2,dst=2.2.2.1,tos=0x0,ttl=64,tp_src=0,tp_dst=0,flags(key)),in_port(1),skb_mark(0/0),eth(src=00:11:22:33:44:55,dst=00:23:20:00:00:01),eth_type(0x0800),ipv4(src=169.254.1.0/0.0.0.0,dst=169.254.1.1/0.0.0.0,proto=17/0xff,tos=0/0,ttl=255/0,frag=no),udp(src=49152/0,dst=3784/0xffff)' -generate], [0], [stdout])
 # check that the packet should be handled as BFD packet.
 AT_CHECK([tail -2 stdout], [0], [dnl
 This flow is handled by the userspace slow path because it:
diff --git a/tests/learn.at b/tests/learn.at
index 72e22c4bf348..07ad043212ed 100644
--- a/tests/learn.at
+++ b/tests/learn.at
@@ -317,8 +317,8 @@  done
 # Check for the learning entry.
 ovs-appctl time/warp 1000
 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0],
-[[ n_packets=1, n_bytes=54, actions=load:0x3->NXM_NX_REG0[0..15],learn(table=0,priority=65535,NXM_OF_ETH_SRC[],NXM_OF_VLAN_TCI[0..11],output:NXM_NX_REG0[0..15]),output:2
- n_packets=9, n_bytes=486, priority=65535,vlan_tci=0x0000/0x0fff,dl_src=50:54:00:00:00:05 actions=output:3
+[[ n_packets=1, n_bytes=118, actions=load:0x3->NXM_NX_REG0[0..15],learn(table=0,priority=65535,NXM_OF_ETH_SRC[],NXM_OF_VLAN_TCI[0..11],output:NXM_NX_REG0[0..15]),output:2
+ n_packets=9, n_bytes=1062, priority=65535,vlan_tci=0x0000/0x0fff,dl_src=50:54:00:00:00:05 actions=output:3
 NXST_FLOW reply:
 ]])
 
@@ -327,10 +327,10 @@  AT_CHECK(
   [(ovs-ofctl dump-ports br0 2; ovs-ofctl dump-ports br0 3) | strip_xids], [0],
   [OFPST_PORT reply: 1 ports
   port  2: rx pkts=0, bytes=0, drop=?, errs=?, frame=?, over=?, crc=?
-           tx pkts=1, bytes=54, drop=?, errs=?, coll=?
+           tx pkts=1, bytes=118, drop=?, errs=?, coll=?
 OFPST_PORT reply: 1 ports
   port  3: rx pkts=0, bytes=0, drop=?, errs=?, frame=?, over=?, crc=?
-           tx pkts=9, bytes=486, drop=?, errs=?, coll=?
+           tx pkts=9, bytes=1062, drop=?, errs=?, coll=?
 ])
 
 OVS_VSWITCHD_STOP
@@ -378,17 +378,17 @@  AT_CHECK(
   [(ovs-ofctl dump-ports br0 2; ovs-ofctl dump-ports br0 3) | strip_xids], [0],
   [OFPST_PORT reply: 1 ports
   port  2: rx pkts=0, bytes=0, drop=?, errs=?, frame=?, over=?, crc=?
-           tx pkts=2, bytes=108, drop=?, errs=?, coll=?
+           tx pkts=2, bytes=236, drop=?, errs=?, coll=?
 OFPST_PORT reply: 1 ports
   port  3: rx pkts=0, bytes=0, drop=?, errs=?, frame=?, over=?, crc=?
-           tx pkts=18, bytes=972, drop=?, errs=?, coll=?
+           tx pkts=18, bytes=2124, drop=?, errs=?, coll=?
 ])
 
 # Check for the learning entry.
 ovs-appctl time/warp 1000
 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0],
-[[ n_packets=2, n_bytes=108, actions=load:0x3->NXM_NX_REG0[0..15],learn(table=0,idle_timeout=5,priority=65535,NXM_OF_ETH_SRC[],NXM_OF_VLAN_TCI[0..11],output:NXM_NX_REG0[0..15]),output:2
- n_packets=9, n_bytes=486, idle_timeout=5, priority=65535,vlan_tci=0x0000/0x0fff,dl_src=50:54:00:00:00:06 actions=output:3
+[[ n_packets=2, n_bytes=236, actions=load:0x3->NXM_NX_REG0[0..15],learn(table=0,idle_timeout=5,priority=65535,NXM_OF_ETH_SRC[],NXM_OF_VLAN_TCI[0..11],output:NXM_NX_REG0[0..15]),output:2
+ n_packets=9, n_bytes=1062, idle_timeout=5, priority=65535,vlan_tci=0x0000/0x0fff,dl_src=50:54:00:00:00:06 actions=output:3
 NXST_FLOW reply:
 ]])
 OVS_VSWITCHD_STOP
@@ -420,10 +420,10 @@  AT_CHECK(
   [(ovs-ofctl dump-ports br0 2; ovs-ofctl dump-ports br0 3) | strip_xids], [0],
   [OFPST_PORT reply: 1 ports
   port  2: rx pkts=0, bytes=0, drop=?, errs=?, frame=?, over=?, crc=?
-           tx pkts=1, bytes=54, drop=?, errs=?, coll=?
+           tx pkts=1, bytes=118, drop=?, errs=?, coll=?
 OFPST_PORT reply: 1 ports
   port  3: rx pkts=0, bytes=0, drop=?, errs=?, frame=?, over=?, crc=?
-           tx pkts=9, bytes=486, drop=?, errs=?, coll=?
+           tx pkts=9, bytes=1062, drop=?, errs=?, coll=?
 ])
 
 # Trace some packets arriving.  This is is a different flow from the previous.
@@ -476,18 +476,18 @@  AT_CHECK(
   [(ovs-ofctl dump-ports br0 2; ovs-ofctl dump-ports br0 3) | strip_xids], [0],
   [OFPST_PORT reply: 1 ports
   port  2: rx pkts=0, bytes=0, drop=?, errs=?, frame=?, over=?, crc=?
-           tx pkts=3, bytes=162, drop=?, errs=?, coll=?
+           tx pkts=3, bytes=354, drop=?, errs=?, coll=?
 OFPST_PORT reply: 1 ports
   port  3: rx pkts=0, bytes=0, drop=?, errs=?, frame=?, over=?, crc=?
-           tx pkts=17, bytes=918, drop=?, errs=?, coll=?
+           tx pkts=17, bytes=2006, drop=?, errs=?, coll=?
 ])
 
 # Check for the learning entry.
 ovs-appctl time/warp 1000
 sleep 1
 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0],
-[[ n_packets=3, n_bytes=162, actions=load:0x3->NXM_NX_REG0[0..15],learn(table=0,hard_timeout=10,priority=65535,NXM_OF_ETH_SRC[],NXM_OF_VLAN_TCI[0..11],output:NXM_NX_REG0[0..15]),output:2
- n_packets=3, n_bytes=162, hard_timeout=10, priority=65535,vlan_tci=0x0000/0x0fff,dl_src=50:54:00:00:00:06 actions=output:3
+[[ n_packets=3, n_bytes=354, actions=load:0x3->NXM_NX_REG0[0..15],learn(table=0,hard_timeout=10,priority=65535,NXM_OF_ETH_SRC[],NXM_OF_VLAN_TCI[0..11],output:NXM_NX_REG0[0..15]),output:2
+ n_packets=3, n_bytes=354, hard_timeout=10, priority=65535,vlan_tci=0x0000/0x0fff,dl_src=50:54:00:00:00:06 actions=output:3
 NXST_FLOW reply:
 ]])
 OVS_VSWITCHD_STOP
@@ -728,17 +728,17 @@  done
 
 dnl Check successful counters:
 AT_CHECK([ovs-ofctl dump-flows br0 table=1,reg0=1 | ofctl_strip | sort], [0], [dnl
- cookie=0x1, table=1, n_packets=1, n_bytes=42, reg0=0x1,in_port=1 actions=drop
- cookie=0x2, table=1, n_packets=10, n_bytes=420, reg0=0x1,in_port=2 actions=drop
- cookie=0x3, table=1, n_packets=20, n_bytes=840, reg0=0x1,in_port=3 actions=drop
+ cookie=0x1, table=1, n_packets=1, n_bytes=106, reg0=0x1,in_port=1 actions=drop
+ cookie=0x2, table=1, n_packets=10, n_bytes=1060, reg0=0x1,in_port=2 actions=drop
+ cookie=0x3, table=1, n_packets=20, n_bytes=2120, reg0=0x1,in_port=3 actions=drop
 NXST_FLOW reply:
 ])
 
 dnl Check failed counters:
 AT_CHECK([ovs-ofctl dump-flows br0 table=1,reg0=0 | ofctl_strip | sort], [0], [dnl
- cookie=0x1, table=1, n_packets=29, n_bytes=1218, reg0=0,in_port=1 actions=drop
- cookie=0x2, table=1, n_packets=20, n_bytes=840, reg0=0,in_port=2 actions=drop
- cookie=0x3, table=1, n_packets=10, n_bytes=420, reg0=0,in_port=3 actions=drop
+ cookie=0x1, table=1, n_packets=29, n_bytes=3074, reg0=0,in_port=1 actions=drop
+ cookie=0x2, table=1, n_packets=20, n_bytes=2120, reg0=0,in_port=2 actions=drop
+ cookie=0x3, table=1, n_packets=10, n_bytes=1060, reg0=0,in_port=3 actions=drop
 NXST_FLOW reply:
 ])
 
diff --git a/tests/mcast-snooping.at b/tests/mcast-snooping.at
index ad818a3e0be1..f9f65cc468c2 100644
--- a/tests/mcast-snooping.at
+++ b/tests/mcast-snooping.at
@@ -62,7 +62,7 @@  AT_CHECK([
 # 10.0.0.1.0 > 239.94.1.1.8000: UDP, length 0
 AT_CHECK([ovs-pcap p2.pcap > p2.pcap.txt 2>&1])
 AT_CHECK([cat p2.pcap.txt], [0], [dnl
-01005e5e0101aa55aa550001810006bd08004500001c00000000401180710a000001ef5e010100001f400008e63d
+01005e5e0101aa55aa550001810006bd08004500005c00000000401180310a000001ef5e010100001f40004801ba000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f
 ])
 
 # Clear the mdb, send a IGMP packet with invalid checksum and make sure it
diff --git a/tests/ofproto-dpif.at b/tests/ofproto-dpif.at
index cbe0d91352fa..550a768df2fc 100644
--- a/tests/ofproto-dpif.at
+++ b/tests/ofproto-dpif.at
@@ -477,7 +477,7 @@  done
 
 AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/dp_hash(.*\/0x1)/dp_hash(0xXXXX\/0x1)/' | sed 's/packets.*actions:1/actions:1/' | strip_ufid | strip_used | sort], [0], [dnl
 flow-dump from non-dpdk interfaces:
-recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(src=192.168.0.1,frag=no), packets:15, bytes:630, used:0.0s, actions:hash(hash_l4(0)),recirc(0x1)
+recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(src=192.168.0.1,frag=no), packets:15, bytes:1590, used:0.0s, actions:hash(hash_l4(0)),recirc(0x1)
 recirc_id(0x1),dp_hash(0xXXXX/0x1),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), actions:10
 recirc_id(0x1),dp_hash(0xXXXX/0x1),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), actions:11
 ])
@@ -493,8 +493,8 @@  done
 
 AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/dp_hash(.*\/0x1)/dp_hash(0xXXXX\/0x1)/' | sed 's/\(actions:1\)[[01]]/\1X/' | strip_ufid | strip_used | sort], [0], [dnl
 flow-dump from non-dpdk interfaces:
-recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(src=192.168.0.1,frag=no), packets:15, bytes:630, used:0.0s, actions:hash(hash_l4(0)),recirc(0x2)
-recirc_id(0x2),dp_hash(0xXXXX/0x1),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), packets:15, bytes:630, used:0.0s, actions:1X
+recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(src=192.168.0.1,frag=no), packets:15, bytes:1590, used:0.0s, actions:hash(hash_l4(0)),recirc(0x2)
+recirc_id(0x2),dp_hash(0xXXXX/0x1),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), packets:15, bytes:1590, used:0.0s, actions:1X
 ])
 
 OVS_VSWITCHD_STOP
@@ -527,7 +527,7 @@  for i in `seq 0 2`;
 AT_CHECK([ovs-appctl revalidator/purge], [0])
 AT_CHECK([ovs-ofctl -O OpenFlow12 -vwarn dump-group-stats br0], [0], [stdout])
 AT_CHECK([strip_xids < stdout | sort], [0], [dnl
- group_id=1234,ref_count=1,packet_count=3,byte_count=126,bucket0:packet_count=3,byte_count=126,bucket1:packet_count=0,byte_count=0
+ group_id=1234,ref_count=1,packet_count=3,byte_count=318,bucket0:packet_count=3,byte_count=318,bucket1:packet_count=0,byte_count=0
 OFPST_GROUP reply (OF1.2):
 ])
 OVS_VSWITCHD_STOP
@@ -548,7 +548,7 @@  for i in `seq 0 2`;
 AT_CHECK([ovs-appctl revalidator/purge], [0])
 AT_CHECK([ovs-ofctl -O OpenFlow12 -vwarn dump-group-stats br0], [0], [stdout])
 AT_CHECK([strip_xids < stdout | sort], [0], [dnl
- group_id=1234,ref_count=1,packet_count=3,byte_count=126,bucket0:packet_count=3,byte_count=126,bucket1:packet_count=3,byte_count=126
+ group_id=1234,ref_count=1,packet_count=3,byte_count=318,bucket0:packet_count=3,byte_count=318,bucket1:packet_count=3,byte_count=318
 OFPST_GROUP reply (OF1.2):
 ])
 OVS_VSWITCHD_STOP
@@ -1093,7 +1093,7 @@  AT_CHECK([cat ofctl_monitor.log], [0], [dnl
 
 AT_CHECK([ovs-appctl revalidator/purge], [0])
 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
- n_packets=3, n_bytes=162, actions=resubmit(1,1)
+ n_packets=3, n_bytes=354, actions=resubmit(1,1)
 OFPST_FLOW reply (OF1.2):
 ])
 
@@ -1120,14 +1120,14 @@  OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
 
 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
-NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
-tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
+NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=118 in_port=1 (via action) data_len=118 (unbuffered)
+tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:4a2c
 dnl
-NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
-tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
+NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=118 in_port=1 (via action) data_len=118 (unbuffered)
+tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:4a2c
 dnl
-NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
-tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
+NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=118 in_port=1 (via action) data_len=118 (unbuffered)
+tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:4a2c
 ])
 
 dnl Hit table 0, Miss all other tables, sent to controller
@@ -1140,19 +1140,19 @@  OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
 
 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
-NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
-tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
+NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=118 in_port=1 (via no_match) data_len=118 (unbuffered)
+tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:4a2c
 dnl
-NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
-tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
+NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=118 in_port=1 (via no_match) data_len=118 (unbuffered)
+tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:4a2c
 dnl
-NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
-tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
+NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=118 in_port=1 (via no_match) data_len=118 (unbuffered)
+tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:4a2c
 ])
 
 AT_CHECK([ovs-appctl revalidator/purge], [0])
 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
- table=1, n_packets=3, n_bytes=162, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
+ table=1, n_packets=3, n_bytes=354, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
 OFPST_FLOW reply (OF1.2):
 ])
 
@@ -1183,14 +1183,14 @@  OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
 
 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
-NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
-tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
+NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=118 in_port=1 (via action) data_len=118 (unbuffered)
+tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:4a2c
 dnl
-NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
-tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
+NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=118 in_port=1 (via action) data_len=118 (unbuffered)
+tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:4a2c
 dnl
-NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
-tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
+NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=118 in_port=1 (via action) data_len=118 (unbuffered)
+tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:4a2c
 ])
 
 dnl Hit table 1, Miss all other tables, sent to controller
@@ -1203,20 +1203,20 @@  OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
 
 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
-NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
-tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
+NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=118 in_port=1 (via no_match) data_len=118 (unbuffered)
+tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:4a2c
 dnl
-NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
-tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
+NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=118 in_port=1 (via no_match) data_len=118 (unbuffered)
+tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:4a2c
 dnl
-NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
-tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
+NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=118 in_port=1 (via no_match) data_len=118 (unbuffered)
+tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:4a2c
 ])
 
 AT_CHECK([ovs-appctl revalidator/purge], [0])
 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
- n_packets=6, n_bytes=324, actions=goto_table:1
- table=2, n_packets=3, n_bytes=162, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
+ n_packets=6, n_bytes=708, actions=goto_table:1
+ table=2, n_packets=3, n_bytes=354, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
 OFPST_FLOW reply (OF1.2):
 ])
 
@@ -1261,7 +1261,7 @@  AT_CHECK([cat ofctl_monitor.log], [0], [dnl
 
 AT_CHECK([ovs-appctl revalidator/purge], [0])
 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
- n_packets=6, n_bytes=324, actions=resubmit(1,1)
+ n_packets=6, n_bytes=708, actions=resubmit(1,1)
  table=2, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
 OFPST_FLOW reply (OF1.2):
 ])
@@ -1321,7 +1321,7 @@  AT_CHECK([cat ofctl_monitor.log], [0], [dnl
 
 AT_CHECK([ovs-appctl revalidator/purge], [0])
 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
- n_packets=3, n_bytes=162, actions=goto_table:1
+ n_packets=3, n_bytes=354, actions=goto_table:1
 OFPST_FLOW reply (OF1.2):
 ])
 
@@ -1352,7 +1352,7 @@  AT_CHECK([cat ofctl_monitor.log], [0], [dnl
 
 AT_CHECK([ovs-appctl revalidator/purge], [0])
 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
- n_packets=3, n_bytes=162, actions=resubmit(1,1)
+ n_packets=3, n_bytes=354, actions=resubmit(1,1)
 OFPST_FLOW reply (OF1.2):
 ])
 
@@ -1393,14 +1393,14 @@  OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
 
 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
-OFPT_PACKET_IN (xid=0x0): total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
-tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
+OFPT_PACKET_IN (xid=0x0): total_len=118 in_port=1 (via no_match) data_len=118 (unbuffered)
+tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:4a2c
 dnl
-OFPT_PACKET_IN (xid=0x0): total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
-tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
+OFPT_PACKET_IN (xid=0x0): total_len=118 in_port=1 (via no_match) data_len=118 (unbuffered)
+tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:4a2c
 dnl
-OFPT_PACKET_IN (xid=0x0): total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
-tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
+OFPT_PACKET_IN (xid=0x0): total_len=118 in_port=1 (via no_match) data_len=118 (unbuffered)
+tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:4a2c
 ])
 
 dnl Singleton controller action.
@@ -1415,10 +1415,8 @@  OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
 OFPT_PACKET_IN (xid=0x0): total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:2e7d
-dnl
 OFPT_PACKET_IN (xid=0x0): total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:2e7d
-dnl
 OFPT_PACKET_IN (xid=0x0): total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:2e7d
 ])
@@ -1646,14 +1644,14 @@  OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 3])
 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
 
 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
-OFPT_PACKET_IN (xid=0x0): total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
-tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
+OFPT_PACKET_IN (xid=0x0): total_len=118 in_port=1 (via action) data_len=118 (unbuffered)
+tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:4a2c
 dnl
-OFPT_PACKET_IN (xid=0x0): total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
-tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
+OFPT_PACKET_IN (xid=0x0): total_len=118 in_port=1 (via action) data_len=118 (unbuffered)
+tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:4a2c
 dnl
-OFPT_PACKET_IN (xid=0x0): total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
-tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
+OFPT_PACKET_IN (xid=0x0): total_len=118 in_port=1 (via action) data_len=118 (unbuffered)
+tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:4a2c
 ])
 
 OVS_VSWITCHD_STOP
@@ -1800,13 +1798,13 @@  OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
 
 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
-NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=46 in_port=1 (via action) data_len=46 (unbuffered)
+NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=110 in_port=1 (via action) data_len=110 (unbuffered)
 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
 dnl
-NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=46 in_port=1 (via action) data_len=46 (unbuffered)
+NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=110 in_port=1 (via action) data_len=110 (unbuffered)
 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
 dnl
-NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=46 in_port=1 (via action) data_len=46 (unbuffered)
+NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=110 in_port=1 (via action) data_len=110 (unbuffered)
 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
 ])
 
@@ -2744,7 +2742,7 @@  AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
  cookie=0xa, n_packets=3, n_bytes=102, dl_src=40:44:44:44:44:48 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],set_mpls_ttl(10),dec_mpls_ttl,CONTROLLER:65535
  cookie=0xa, n_packets=3, n_bytes=102, dl_src=41:44:44:44:44:42 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],pop_mpls:0x0800,CONTROLLER:65535
  cookie=0xa, n_packets=3, n_bytes=114, dl_src=40:44:44:44:44:44 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],CONTROLLER:65535
- cookie=0xa, n_packets=3, n_bytes=126, dl_src=40:44:44:44:44:42 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],CONTROLLER:65535
+ cookie=0xa, n_packets=3, n_bytes=318, dl_src=40:44:44:44:44:42 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],CONTROLLER:65535
  cookie=0xa, n_packets=3, n_bytes=54, dl_src=40:44:44:44:44:43 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],CONTROLLER:65535
  cookie=0xa, n_packets=3, n_bytes=54, mpls,dl_src=40:44:44:44:44:49 actions=push_mpls:0x8848,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
  cookie=0xb, n_packets=3, n_bytes=54, mpls,dl_src=50:55:55:55:55:55 actions=load:0x3e8->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
@@ -3509,26 +3507,36 @@  OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
 
 AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
-OFPT_PACKET_IN (OF1.2): total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
+OFPT_PACKET_IN (OF1.2): total_len=122 in_port=1 (via action) data_len=122 (unbuffered)
 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:00:00,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=64,mpls_bos=1
 00000000  50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
-00000010  01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
+00000010  01 40 45 00 00 68 00 00-00 00 40 06 f9 3c c0 a8
 00000020  00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
-00000030  00 00 50 00 00 00 2e 91-00 00
-dnl
-OFPT_PACKET_IN (OF1.2): total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
+00000030  00 00 50 00 00 00 4a 4d-00 00 00 01 02 03 04 05
+00000040  06 07 08 09 0a 0b 0c 0d-0e 0f 10 11 12 13 14 15
+00000050  16 17 18 19 1a 1b 1c 1d-1e 1f 20 21 22 23 24 25
+00000060  26 27 28 29 2a 2b 2c 2d-2e 2f 30 31 32 33 34 35
+00000070  36 37 38 39 3a 3b 3c 3d-3e 3f
+OFPT_PACKET_IN (OF1.2): total_len=122 in_port=1 (via action) data_len=122 (unbuffered)
 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:00:00,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=64,mpls_bos=1
 00000000  50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
-00000010  01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
+00000010  01 40 45 00 00 68 00 00-00 00 40 06 f9 3c c0 a8
 00000020  00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
-00000030  00 00 50 00 00 00 2e 91-00 00
-dnl
-OFPT_PACKET_IN (OF1.2): total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
+00000030  00 00 50 00 00 00 4a 4d-00 00 00 01 02 03 04 05
+00000040  06 07 08 09 0a 0b 0c 0d-0e 0f 10 11 12 13 14 15
+00000050  16 17 18 19 1a 1b 1c 1d-1e 1f 20 21 22 23 24 25
+00000060  26 27 28 29 2a 2b 2c 2d-2e 2f 30 31 32 33 34 35
+00000070  36 37 38 39 3a 3b 3c 3d-3e 3f
+OFPT_PACKET_IN (OF1.2): total_len=122 in_port=1 (via action) data_len=122 (unbuffered)
 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:00:00,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=64,mpls_bos=1
 00000000  50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
-00000010  01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
+00000010  01 40 45 00 00 68 00 00-00 00 40 06 f9 3c c0 a8
 00000020  00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
-00000030  00 00 50 00 00 00 2e 91-00 00
+00000030  00 00 50 00 00 00 4a 4d-00 00 00 01 02 03 04 05
+00000040  06 07 08 09 0a 0b 0c 0d-0e 0f 10 11 12 13 14 15
+00000050  16 17 18 19 1a 1b 1c 1d-1e 1f 20 21 22 23 24 25
+00000060  26 27 28 29 2a 2b 2c 2d-2e 2f 30 31 32 33 34 35
+00000070  36 37 38 39 3a 3b 3c 3d-3e 3f
 ])
 
 dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
@@ -3623,26 +3631,36 @@  OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
 
 AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
-OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
+OFPT_PACKET_IN (OF1.2): total_len=126 in_port=1 (via action) data_len=126 (unbuffered)
 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:44:44:54:50,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
 00000000  50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
-00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
-00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
-00000030  00 00 00 00 00 00 50 00-00 00 2e 91 00 00
-dnl
-OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
+00000010  88 47 00 00 a1 40 45 00-00 68 00 00 00 00 40 06
+00000020  f9 3c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
+00000030  00 00 00 00 00 00 50 00-00 00 4a 4d 00 00 00 01
+00000040  02 03 04 05 06 07 08 09-0a 0b 0c 0d 0e 0f 10 11
+00000050  12 13 14 15 16 17 18 19-1a 1b 1c 1d 1e 1f 20 21
+00000060  22 23 24 25 26 27 28 29-2a 2b 2c 2d 2e 2f 30 31
+00000070  32 33 34 35 36 37 38 39-3a 3b 3c 3d 3e 3f
+OFPT_PACKET_IN (OF1.2): total_len=126 in_port=1 (via action) data_len=126 (unbuffered)
 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:44:44:54:50,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
 00000000  50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
-00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
-00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
-00000030  00 00 00 00 00 00 50 00-00 00 2e 91 00 00
-dnl
-OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
+00000010  88 47 00 00 a1 40 45 00-00 68 00 00 00 00 40 06
+00000020  f9 3c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
+00000030  00 00 00 00 00 00 50 00-00 00 4a 4d 00 00 00 01
+00000040  02 03 04 05 06 07 08 09-0a 0b 0c 0d 0e 0f 10 11
+00000050  12 13 14 15 16 17 18 19-1a 1b 1c 1d 1e 1f 20 21
+00000060  22 23 24 25 26 27 28 29-2a 2b 2c 2d 2e 2f 30 31
+00000070  32 33 34 35 36 37 38 39-3a 3b 3c 3d 3e 3f
+OFPT_PACKET_IN (OF1.2): total_len=126 in_port=1 (via action) data_len=126 (unbuffered)
 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:44:44:54:50,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
 00000000  50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
-00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
-00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
-00000030  00 00 00 00 00 00 50 00-00 00 2e 91 00 00
+00000010  88 47 00 00 a1 40 45 00-00 68 00 00 00 00 40 06
+00000020  f9 3c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
+00000030  00 00 00 00 00 00 50 00-00 00 4a 4d 00 00 00 01
+00000040  02 03 04 05 06 07 08 09-0a 0b 0c 0d 0e 0f 10 11
+00000050  12 13 14 15 16 17 18 19-1a 1b 1c 1d 1e 1f 20 21
+00000060  22 23 24 25 26 27 28 29-2a 2b 2c 2d 2e 2f 30 31
+00000070  32 33 34 35 36 37 38 39-3a 3b 3c 3d 3e 3f
 ])
 
 dnl Modified MPLS controller action.
@@ -3657,29 +3675,39 @@  OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
 
 AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
-OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66 (unbuffered)
+OFPT_PACKET_IN (OF1.2): total_len=130 in_port=1 (via action) data_len=130 (unbuffered)
 mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,dl_src=40:44:44:44:54:51,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
 00000000  50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
-00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
-00000020  00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
-00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
-00000040  00 00
-dnl
-OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66 (unbuffered)
+00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 68 00 00
+00000020  00 00 40 06 f9 3c c0 a8-00 01 c0 a8 00 02 00 00
+00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 4a 4d
+00000040  00 00 00 01 02 03 04 05-06 07 08 09 0a 0b 0c 0d
+00000050  0e 0f 10 11 12 13 14 15-16 17 18 19 1a 1b 1c 1d
+00000060  1e 1f 20 21 22 23 24 25-26 27 28 29 2a 2b 2c 2d
+00000070  2e 2f 30 31 32 33 34 35-36 37 38 39 3a 3b 3c 3d
+00000080  3e 3f
+OFPT_PACKET_IN (OF1.2): total_len=130 in_port=1 (via action) data_len=130 (unbuffered)
 mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,dl_src=40:44:44:44:54:51,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
 00000000  50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
-00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
-00000020  00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
-00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
-00000040  00 00
-dnl
-OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66 (unbuffered)
+00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 68 00 00
+00000020  00 00 40 06 f9 3c c0 a8-00 01 c0 a8 00 02 00 00
+00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 4a 4d
+00000040  00 00 00 01 02 03 04 05-06 07 08 09 0a 0b 0c 0d
+00000050  0e 0f 10 11 12 13 14 15-16 17 18 19 1a 1b 1c 1d
+00000060  1e 1f 20 21 22 23 24 25-26 27 28 29 2a 2b 2c 2d
+00000070  2e 2f 30 31 32 33 34 35-36 37 38 39 3a 3b 3c 3d
+00000080  3e 3f
+OFPT_PACKET_IN (OF1.2): total_len=130 in_port=1 (via action) data_len=130 (unbuffered)
 mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,dl_src=40:44:44:44:54:51,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
 00000000  50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
-00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
-00000020  00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
-00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
-00000040  00 00
+00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 68 00 00
+00000020  00 00 40 06 f9 3c c0 a8-00 01 c0 a8 00 02 00 00
+00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 4a 4d
+00000040  00 00 00 01 02 03 04 05-06 07 08 09 0a 0b 0c 0d
+00000050  0e 0f 10 11 12 13 14 15-16 17 18 19 1a 1b 1c 1d
+00000060  1e 1f 20 21 22 23 24 25-26 27 28 29 2a 2b 2c 2d
+00000070  2e 2f 30 31 32 33 34 35-36 37 38 39 3a 3b 3c 3d
+00000080  3e 3f
 ])
 
 dnl Modified MPLS controller action.
@@ -3694,26 +3722,36 @@  OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
 
 AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
-OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
+OFPT_PACKET_IN (OF1.2): total_len=126 in_port=1 (via action) data_len=126 (unbuffered)
 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:44:44:54:52,dl_dst=52:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
 00000000  52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
-00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
-00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
-00000030  00 00 00 00 00 00 50 00-00 00 2e 91 00 00
-dnl
-OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
+00000010  88 47 00 00 a1 40 45 00-00 68 00 00 00 00 40 06
+00000020  f9 3c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
+00000030  00 00 00 00 00 00 50 00-00 00 4a 4d 00 00 00 01
+00000040  02 03 04 05 06 07 08 09-0a 0b 0c 0d 0e 0f 10 11
+00000050  12 13 14 15 16 17 18 19-1a 1b 1c 1d 1e 1f 20 21
+00000060  22 23 24 25 26 27 28 29-2a 2b 2c 2d 2e 2f 30 31
+00000070  32 33 34 35 36 37 38 39-3a 3b 3c 3d 3e 3f
+OFPT_PACKET_IN (OF1.2): total_len=126 in_port=1 (via action) data_len=126 (unbuffered)
 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:44:44:54:52,dl_dst=52:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
 00000000  52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
-00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
-00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
-00000030  00 00 00 00 00 00 50 00-00 00 2e 91 00 00
-dnl
-OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
+00000010  88 47 00 00 a1 40 45 00-00 68 00 00 00 00 40 06
+00000020  f9 3c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
+00000030  00 00 00 00 00 00 50 00-00 00 4a 4d 00 00 00 01
+00000040  02 03 04 05 06 07 08 09-0a 0b 0c 0d 0e 0f 10 11
+00000050  12 13 14 15 16 17 18 19-1a 1b 1c 1d 1e 1f 20 21
+00000060  22 23 24 25 26 27 28 29-2a 2b 2c 2d 2e 2f 30 31
+00000070  32 33 34 35 36 37 38 39-3a 3b 3c 3d 3e 3f
+OFPT_PACKET_IN (OF1.2): total_len=126 in_port=1 (via action) data_len=126 (unbuffered)
 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:44:44:54:52,dl_dst=52:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
 00000000  52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
-00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
-00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
-00000030  00 00 00 00 00 00 50 00-00 00 2e 91 00 00
+00000010  88 47 00 00 a1 40 45 00-00 68 00 00 00 00 40 06
+00000020  f9 3c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
+00000030  00 00 00 00 00 00 50 00-00 00 4a 4d 00 00 00 01
+00000040  02 03 04 05 06 07 08 09-0a 0b 0c 0d 0e 0f 10 11
+00000050  12 13 14 15 16 17 18 19-1a 1b 1c 1d 1e 1f 20 21
+00000060  22 23 24 25 26 27 28 29-2a 2b 2c 2d 2e 2f 30 31
+00000070  32 33 34 35 36 37 38 39-3a 3b 3c 3d 3e 3f
 ])
 
 dnl Modified MPLS controller action.
@@ -3728,29 +3766,39 @@  OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
 
 AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
-OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66 (unbuffered)
+OFPT_PACKET_IN (OF1.2): total_len=130 in_port=1 (via action) data_len=130 (unbuffered)
 mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,dl_src=40:44:44:44:54:53,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
 00000000  50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
-00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
-00000020  00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
-00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
-00000040  00 00
-dnl
-OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66 (unbuffered)
+00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 68 00 00
+00000020  00 00 40 06 f9 3c c0 a8-00 01 c0 a8 00 02 00 00
+00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 4a 4d
+00000040  00 00 00 01 02 03 04 05-06 07 08 09 0a 0b 0c 0d
+00000050  0e 0f 10 11 12 13 14 15-16 17 18 19 1a 1b 1c 1d
+00000060  1e 1f 20 21 22 23 24 25-26 27 28 29 2a 2b 2c 2d
+00000070  2e 2f 30 31 32 33 34 35-36 37 38 39 3a 3b 3c 3d
+00000080  3e 3f
+OFPT_PACKET_IN (OF1.2): total_len=130 in_port=1 (via action) data_len=130 (unbuffered)
 mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,dl_src=40:44:44:44:54:53,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
 00000000  50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
-00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
-00000020  00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
-00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
-00000040  00 00
-dnl
-OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66 (unbuffered)
+00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 68 00 00
+00000020  00 00 40 06 f9 3c c0 a8-00 01 c0 a8 00 02 00 00
+00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 4a 4d
+00000040  00 00 00 01 02 03 04 05-06 07 08 09 0a 0b 0c 0d
+00000050  0e 0f 10 11 12 13 14 15-16 17 18 19 1a 1b 1c 1d
+00000060  1e 1f 20 21 22 23 24 25-26 27 28 29 2a 2b 2c 2d
+00000070  2e 2f 30 31 32 33 34 35-36 37 38 39 3a 3b 3c 3d
+00000080  3e 3f
+OFPT_PACKET_IN (OF1.2): total_len=130 in_port=1 (via action) data_len=130 (unbuffered)
 mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,dl_src=40:44:44:44:54:53,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
 00000000  50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
-00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
-00000020  00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
-00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
-00000040  00 00
+00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 68 00 00
+00000020  00 00 40 06 f9 3c c0 a8-00 01 c0 a8 00 02 00 00
+00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 4a 4d
+00000040  00 00 00 01 02 03 04 05-06 07 08 09 0a 0b 0c 0d
+00000050  0e 0f 10 11 12 13 14 15-16 17 18 19 1a 1b 1c 1d
+00000060  1e 1f 20 21 22 23 24 25-26 27 28 29 2a 2b 2c 2d
+00000070  2e 2f 30 31 32 33 34 35-36 37 38 39 3a 3b 3c 3d
+00000080  3e 3f
 ])
 
 dnl Modified MPLS controller action.
@@ -3765,26 +3813,36 @@  OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
 
 AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
-OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
+OFPT_PACKET_IN (OF1.2): total_len=126 in_port=1 (via action) data_len=126 (unbuffered)
 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:44:44:54:54,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
 00000000  50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
-00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
-00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
-00000030  00 00 00 00 00 00 50 00-00 00 2e 91 00 00
-dnl
-OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
+00000010  88 47 00 00 a1 40 45 00-00 68 00 00 00 00 40 06
+00000020  f9 3c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
+00000030  00 00 00 00 00 00 50 00-00 00 4a 4d 00 00 00 01
+00000040  02 03 04 05 06 07 08 09-0a 0b 0c 0d 0e 0f 10 11
+00000050  12 13 14 15 16 17 18 19-1a 1b 1c 1d 1e 1f 20 21
+00000060  22 23 24 25 26 27 28 29-2a 2b 2c 2d 2e 2f 30 31
+00000070  32 33 34 35 36 37 38 39-3a 3b 3c 3d 3e 3f
+OFPT_PACKET_IN (OF1.2): total_len=126 in_port=1 (via action) data_len=126 (unbuffered)
 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:44:44:54:54,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
 00000000  50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
-00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
-00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
-00000030  00 00 00 00 00 00 50 00-00 00 2e 91 00 00
-dnl
-OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
+00000010  88 47 00 00 a1 40 45 00-00 68 00 00 00 00 40 06
+00000020  f9 3c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
+00000030  00 00 00 00 00 00 50 00-00 00 4a 4d 00 00 00 01
+00000040  02 03 04 05 06 07 08 09-0a 0b 0c 0d 0e 0f 10 11
+00000050  12 13 14 15 16 17 18 19-1a 1b 1c 1d 1e 1f 20 21
+00000060  22 23 24 25 26 27 28 29-2a 2b 2c 2d 2e 2f 30 31
+00000070  32 33 34 35 36 37 38 39-3a 3b 3c 3d 3e 3f
+OFPT_PACKET_IN (OF1.2): total_len=126 in_port=1 (via action) data_len=126 (unbuffered)
 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:44:44:54:54,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
 00000000  50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
-00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
-00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
-00000030  00 00 00 00 00 00 50 00-00 00 2e 91 00 00
+00000010  88 47 00 00 a1 40 45 00-00 68 00 00 00 00 40 06
+00000020  f9 3c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
+00000030  00 00 00 00 00 00 50 00-00 00 4a 4d 00 00 00 01
+00000040  02 03 04 05 06 07 08 09-0a 0b 0c 0d 0e 0f 10 11
+00000050  12 13 14 15 16 17 18 19-1a 1b 1c 1d 1e 1f 20 21
+00000060  22 23 24 25 26 27 28 29-2a 2b 2c 2d 2e 2f 30 31
+00000070  32 33 34 35 36 37 38 39-3a 3b 3c 3d 3e 3f
 ])
 
 dnl Modified MPLS controller action.
@@ -3799,29 +3857,39 @@  OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
 
 AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
-OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66 (unbuffered)
+OFPT_PACKET_IN (OF1.2): total_len=130 in_port=1 (via action) data_len=130 (unbuffered)
 mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,dl_src=40:44:44:44:54:55,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
 00000000  50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
-00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
-00000020  00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
-00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
-00000040  00 00
-dnl
-OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66 (unbuffered)
+00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 68 00 00
+00000020  00 00 40 06 f9 3c c0 a8-00 01 c0 a8 00 02 00 00
+00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 4a 4d
+00000040  00 00 00 01 02 03 04 05-06 07 08 09 0a 0b 0c 0d
+00000050  0e 0f 10 11 12 13 14 15-16 17 18 19 1a 1b 1c 1d
+00000060  1e 1f 20 21 22 23 24 25-26 27 28 29 2a 2b 2c 2d
+00000070  2e 2f 30 31 32 33 34 35-36 37 38 39 3a 3b 3c 3d
+00000080  3e 3f
+OFPT_PACKET_IN (OF1.2): total_len=130 in_port=1 (via action) data_len=130 (unbuffered)
 mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,dl_src=40:44:44:44:54:55,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
 00000000  50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
-00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
-00000020  00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
-00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
-00000040  00 00
-dnl
-OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66 (unbuffered)
+00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 68 00 00
+00000020  00 00 40 06 f9 3c c0 a8-00 01 c0 a8 00 02 00 00
+00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 4a 4d
+00000040  00 00 00 01 02 03 04 05-06 07 08 09 0a 0b 0c 0d
+00000050  0e 0f 10 11 12 13 14 15-16 17 18 19 1a 1b 1c 1d
+00000060  1e 1f 20 21 22 23 24 25-26 27 28 29 2a 2b 2c 2d
+00000070  2e 2f 30 31 32 33 34 35-36 37 38 39 3a 3b 3c 3d
+00000080  3e 3f
+OFPT_PACKET_IN (OF1.2): total_len=130 in_port=1 (via action) data_len=130 (unbuffered)
 mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,dl_src=40:44:44:44:54:55,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
 00000000  50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
-00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
-00000020  00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
-00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
-00000040  00 00
+00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 68 00 00
+00000020  00 00 40 06 f9 3c c0 a8-00 01 c0 a8 00 02 00 00
+00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 4a 4d
+00000040  00 00 00 01 02 03 04 05-06 07 08 09 0a 0b 0c 0d
+00000050  0e 0f 10 11 12 13 14 15-16 17 18 19 1a 1b 1c 1d
+00000060  1e 1f 20 21 22 23 24 25-26 27 28 29 2a 2b 2c 2d
+00000070  2e 2f 30 31 32 33 34 35-36 37 38 39 3a 3b 3c 3d
+00000080  3e 3f
 ])
 
 dnl Modified MPLS controller action.
@@ -3836,26 +3904,36 @@  OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
 
 AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
-OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
+OFPT_PACKET_IN (OF1.2): total_len=126 in_port=1 (via action) data_len=126 (unbuffered)
 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:44:44:54:56,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
 00000000  50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
-00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
-00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
-00000030  00 00 00 00 00 00 50 00-00 00 2e 91 00 00
-dnl
-OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
+00000010  88 47 00 00 a1 40 45 00-00 68 00 00 00 00 40 06
+00000020  f9 3c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
+00000030  00 00 00 00 00 00 50 00-00 00 4a 4d 00 00 00 01
+00000040  02 03 04 05 06 07 08 09-0a 0b 0c 0d 0e 0f 10 11
+00000050  12 13 14 15 16 17 18 19-1a 1b 1c 1d 1e 1f 20 21
+00000060  22 23 24 25 26 27 28 29-2a 2b 2c 2d 2e 2f 30 31
+00000070  32 33 34 35 36 37 38 39-3a 3b 3c 3d 3e 3f
+OFPT_PACKET_IN (OF1.2): total_len=126 in_port=1 (via action) data_len=126 (unbuffered)
 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:44:44:54:56,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
 00000000  50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
-00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
-00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
-00000030  00 00 00 00 00 00 50 00-00 00 2e 91 00 00
-dnl
-OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
+00000010  88 47 00 00 a1 40 45 00-00 68 00 00 00 00 40 06
+00000020  f9 3c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
+00000030  00 00 00 00 00 00 50 00-00 00 4a 4d 00 00 00 01
+00000040  02 03 04 05 06 07 08 09-0a 0b 0c 0d 0e 0f 10 11
+00000050  12 13 14 15 16 17 18 19-1a 1b 1c 1d 1e 1f 20 21
+00000060  22 23 24 25 26 27 28 29-2a 2b 2c 2d 2e 2f 30 31
+00000070  32 33 34 35 36 37 38 39-3a 3b 3c 3d 3e 3f
+OFPT_PACKET_IN (OF1.2): total_len=126 in_port=1 (via action) data_len=126 (unbuffered)
 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:44:44:54:56,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
 00000000  50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
-00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
-00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
-00000030  00 00 00 00 00 00 50 00-00 00 2e 91 00 00
+00000010  88 47 00 00 a1 40 45 00-00 68 00 00 00 00 40 06
+00000020  f9 3c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
+00000030  00 00 00 00 00 00 50 00-00 00 4a 4d 00 00 00 01
+00000040  02 03 04 05 06 07 08 09-0a 0b 0c 0d 0e 0f 10 11
+00000050  12 13 14 15 16 17 18 19-1a 1b 1c 1d 1e 1f 20 21
+00000060  22 23 24 25 26 27 28 29-2a 2b 2c 2d 2e 2f 30 31
+00000070  32 33 34 35 36 37 38 39-3a 3b 3c 3d 3e 3f
 ])
 
 dnl Modified MPLS controller action.
@@ -3870,29 +3948,39 @@  OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
 
 AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
-OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66 (unbuffered)
+OFPT_PACKET_IN (OF1.2): total_len=130 in_port=1 (via action) data_len=130 (unbuffered)
 mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,dl_src=40:44:44:44:54:57,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
 00000000  50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
-00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
-00000020  00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
-00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
-00000040  00 00
-dnl
-OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66 (unbuffered)
+00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 68 00 00
+00000020  00 00 40 06 f9 3c c0 a8-00 01 c0 a8 00 02 00 00
+00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 4a 4d
+00000040  00 00 00 01 02 03 04 05-06 07 08 09 0a 0b 0c 0d
+00000050  0e 0f 10 11 12 13 14 15-16 17 18 19 1a 1b 1c 1d
+00000060  1e 1f 20 21 22 23 24 25-26 27 28 29 2a 2b 2c 2d
+00000070  2e 2f 30 31 32 33 34 35-36 37 38 39 3a 3b 3c 3d
+00000080  3e 3f
+OFPT_PACKET_IN (OF1.2): total_len=130 in_port=1 (via action) data_len=130 (unbuffered)
 mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,dl_src=40:44:44:44:54:57,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
 00000000  50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
-00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
-00000020  00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
-00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
-00000040  00 00
-dnl
-OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66 (unbuffered)
+00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 68 00 00
+00000020  00 00 40 06 f9 3c c0 a8-00 01 c0 a8 00 02 00 00
+00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 4a 4d
+00000040  00 00 00 01 02 03 04 05-06 07 08 09 0a 0b 0c 0d
+00000050  0e 0f 10 11 12 13 14 15-16 17 18 19 1a 1b 1c 1d
+00000060  1e 1f 20 21 22 23 24 25-26 27 28 29 2a 2b 2c 2d
+00000070  2e 2f 30 31 32 33 34 35-36 37 38 39 3a 3b 3c 3d
+00000080  3e 3f
+OFPT_PACKET_IN (OF1.2): total_len=130 in_port=1 (via action) data_len=130 (unbuffered)
 mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,dl_src=40:44:44:44:54:57,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
 00000000  50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
-00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
-00000020  00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
-00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
-00000040  00 00
+00000010  81 00 e0 58 88 47 00 00-a1 40 45 00 00 68 00 00
+00000020  00 00 40 06 f9 3c c0 a8-00 01 c0 a8 00 02 00 00
+00000030  00 00 00 00 00 00 00 00-00 00 50 00 00 00 4a 4d
+00000040  00 00 00 01 02 03 04 05-06 07 08 09 0a 0b 0c 0d
+00000050  0e 0f 10 11 12 13 14 15-16 17 18 19 1a 1b 1c 1d
+00000060  1e 1f 20 21 22 23 24 25-26 27 28 29 2a 2b 2c 2d
+00000070  2e 2f 30 31 32 33 34 35-36 37 38 39 3a 3b 3c 3d
+00000080  3e 3f
 ])
 
 dnl Modified MPLS controller action.
@@ -3907,26 +3995,36 @@  OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
 
 AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
-OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
+OFPT_PACKET_IN (OF1.2): total_len=126 in_port=1 (via action) data_len=126 (unbuffered)
 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:44:44:54:58,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
 00000000  50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
-00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
-00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
-00000030  00 00 00 00 00 00 50 00-00 00 2e 91 00 00
-dnl
-OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
+00000010  88 47 00 00 a1 40 45 00-00 68 00 00 00 00 40 06
+00000020  f9 3c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
+00000030  00 00 00 00 00 00 50 00-00 00 4a 4d 00 00 00 01
+00000040  02 03 04 05 06 07 08 09-0a 0b 0c 0d 0e 0f 10 11
+00000050  12 13 14 15 16 17 18 19-1a 1b 1c 1d 1e 1f 20 21
+00000060  22 23 24 25 26 27 28 29-2a 2b 2c 2d 2e 2f 30 31
+00000070  32 33 34 35 36 37 38 39-3a 3b 3c 3d 3e 3f
+OFPT_PACKET_IN (OF1.2): total_len=126 in_port=1 (via action) data_len=126 (unbuffered)
 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:44:44:54:58,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
 00000000  50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
-00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
-00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
-00000030  00 00 00 00 00 00 50 00-00 00 2e 91 00 00
-dnl
-OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
+00000010  88 47 00 00 a1 40 45 00-00 68 00 00 00 00 40 06
+00000020  f9 3c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
+00000030  00 00 00 00 00 00 50 00-00 00 4a 4d 00 00 00 01
+00000040  02 03 04 05 06 07 08 09-0a 0b 0c 0d 0e 0f 10 11
+00000050  12 13 14 15 16 17 18 19-1a 1b 1c 1d 1e 1f 20 21
+00000060  22 23 24 25 26 27 28 29-2a 2b 2c 2d 2e 2f 30 31
+00000070  32 33 34 35 36 37 38 39-3a 3b 3c 3d 3e 3f
+OFPT_PACKET_IN (OF1.2): total_len=126 in_port=1 (via action) data_len=126 (unbuffered)
 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:44:44:54:58,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
 00000000  50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
-00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
-00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
-00000030  00 00 00 00 00 00 50 00-00 00 2e 91 00 00
+00000010  88 47 00 00 a1 40 45 00-00 68 00 00 00 00 40 06
+00000020  f9 3c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
+00000030  00 00 00 00 00 00 50 00-00 00 4a 4d 00 00 00 01
+00000040  02 03 04 05 06 07 08 09-0a 0b 0c 0d 0e 0f 10 11
+00000050  12 13 14 15 16 17 18 19-1a 1b 1c 1d 1e 1f 20 21
+00000060  22 23 24 25 26 27 28 29-2a 2b 2c 2d 2e 2f 30 31
+00000070  32 33 34 35 36 37 38 39-3a 3b 3c 3d 3e 3f
 ])
 
 dnl Modified MPLS controller action.
@@ -3941,40 +4039,50 @@  OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
 
 AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
-OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
+OFPT_PACKET_IN (OF1.2): total_len=126 in_port=1 (via action) data_len=126 (unbuffered)
 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:44:44:54:59,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
 00000000  50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
-00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
-00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
-00000030  00 00 00 00 00 00 50 00-00 00 2e 91 00 00
-dnl
-OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
+00000010  88 47 00 00 a1 40 45 00-00 68 00 00 00 00 40 06
+00000020  f9 3c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
+00000030  00 00 00 00 00 00 50 00-00 00 4a 4d 00 00 00 01
+00000040  02 03 04 05 06 07 08 09-0a 0b 0c 0d 0e 0f 10 11
+00000050  12 13 14 15 16 17 18 19-1a 1b 1c 1d 1e 1f 20 21
+00000060  22 23 24 25 26 27 28 29-2a 2b 2c 2d 2e 2f 30 31
+00000070  32 33 34 35 36 37 38 39-3a 3b 3c 3d 3e 3f
+OFPT_PACKET_IN (OF1.2): total_len=126 in_port=1 (via action) data_len=126 (unbuffered)
 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:44:44:54:59,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
 00000000  50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
-00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
-00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
-00000030  00 00 00 00 00 00 50 00-00 00 2e 91 00 00
-dnl
-OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
+00000010  88 47 00 00 a1 40 45 00-00 68 00 00 00 00 40 06
+00000020  f9 3c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
+00000030  00 00 00 00 00 00 50 00-00 00 4a 4d 00 00 00 01
+00000040  02 03 04 05 06 07 08 09-0a 0b 0c 0d 0e 0f 10 11
+00000050  12 13 14 15 16 17 18 19-1a 1b 1c 1d 1e 1f 20 21
+00000060  22 23 24 25 26 27 28 29-2a 2b 2c 2d 2e 2f 30 31
+00000070  32 33 34 35 36 37 38 39-3a 3b 3c 3d 3e 3f
+OFPT_PACKET_IN (OF1.2): total_len=126 in_port=1 (via action) data_len=126 (unbuffered)
 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:44:44:54:59,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
 00000000  50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
-00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
-00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
-00000030  00 00 00 00 00 00 50 00-00 00 2e 91 00 00
+00000010  88 47 00 00 a1 40 45 00-00 68 00 00 00 00 40 06
+00000020  f9 3c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
+00000030  00 00 00 00 00 00 50 00-00 00 4a 4d 00 00 00 01
+00000040  02 03 04 05 06 07 08 09-0a 0b 0c 0d 0e 0f 10 11
+00000050  12 13 14 15 16 17 18 19-1a 1b 1c 1d 1e 1f 20 21
+00000060  22 23 24 25 26 27 28 29-2a 2b 2c 2d 2e 2f 30 31
+00000070  32 33 34 35 36 37 38 39-3a 3b 3c 3d 3e 3f
 ])
 
 AT_CHECK([ovs-appctl revalidator/purge], [0])
 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
- cookie=0xa, n_packets=3, n_bytes=162, dl_src=40:44:44:44:54:50 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,set_field:4195->vlan_vid,set_field:1->vlan_pcp,CONTROLLER:65535
- cookie=0xa, n_packets=3, n_bytes=162, dl_src=40:44:44:44:54:52 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,load:0x63->OXM_OF_VLAN_VID[[]],set_field:1->vlan_pcp,CONTROLLER:65535
- cookie=0xa, n_packets=3, n_bytes=162, dl_src=40:44:44:44:54:54 actions=push_vlan:0x8100,set_field:4195->vlan_vid,set_field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
- cookie=0xa, n_packets=3, n_bytes=162, dl_src=40:44:44:44:54:56 actions=push_vlan:0x8100,load:0x63->OXM_OF_VLAN_VID[[]],set_field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
- cookie=0xa, n_packets=3, n_bytes=174, dl_src=40:44:44:44:54:51 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,set_field:4195->vlan_vid,set_field:1->vlan_pcp,CONTROLLER:65535
- cookie=0xa, n_packets=3, n_bytes=174, dl_src=40:44:44:44:54:53 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,load:0x63->OXM_OF_VLAN_VID[[]],set_field:1->vlan_pcp,CONTROLLER:65535
- cookie=0xa, n_packets=3, n_bytes=174, dl_src=40:44:44:44:54:55 actions=push_vlan:0x8100,set_field:4195->vlan_vid,set_field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
- cookie=0xa, n_packets=3, n_bytes=174, dl_src=40:44:44:44:54:57 actions=push_vlan:0x8100,load:0x63->OXM_OF_VLAN_VID[[]],set_field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
- cookie=0xa, n_packets=3, n_bytes=174, vlan_tci=0x1000/0x1000,dl_src=40:44:44:44:54:58 actions=load:0x63->OXM_OF_VLAN_VID[[]],set_field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
- cookie=0xa, n_packets=3, n_bytes=174, vlan_tci=0x1000/0x1000,dl_src=40:44:44:44:54:59 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],set_field:1->vlan_pcp,load:0x63->OXM_OF_VLAN_VID[[]],CONTROLLER:65535
+ cookie=0xa, n_packets=3, n_bytes=354, dl_src=40:44:44:44:54:50 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,set_field:4195->vlan_vid,set_field:1->vlan_pcp,CONTROLLER:65535
+ cookie=0xa, n_packets=3, n_bytes=354, dl_src=40:44:44:44:54:52 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,load:0x63->OXM_OF_VLAN_VID[[]],set_field:1->vlan_pcp,CONTROLLER:65535
+ cookie=0xa, n_packets=3, n_bytes=354, dl_src=40:44:44:44:54:54 actions=push_vlan:0x8100,set_field:4195->vlan_vid,set_field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
+ cookie=0xa, n_packets=3, n_bytes=354, dl_src=40:44:44:44:54:56 actions=push_vlan:0x8100,load:0x63->OXM_OF_VLAN_VID[[]],set_field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
+ cookie=0xa, n_packets=3, n_bytes=366, dl_src=40:44:44:44:54:51 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,set_field:4195->vlan_vid,set_field:1->vlan_pcp,CONTROLLER:65535
+ cookie=0xa, n_packets=3, n_bytes=366, dl_src=40:44:44:44:54:53 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,load:0x63->OXM_OF_VLAN_VID[[]],set_field:1->vlan_pcp,CONTROLLER:65535
+ cookie=0xa, n_packets=3, n_bytes=366, dl_src=40:44:44:44:54:55 actions=push_vlan:0x8100,set_field:4195->vlan_vid,set_field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
+ cookie=0xa, n_packets=3, n_bytes=366, dl_src=40:44:44:44:54:57 actions=push_vlan:0x8100,load:0x63->OXM_OF_VLAN_VID[[]],set_field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
+ cookie=0xa, n_packets=3, n_bytes=366, vlan_tci=0x1000/0x1000,dl_src=40:44:44:44:54:58 actions=load:0x63->OXM_OF_VLAN_VID[[]],set_field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
+ cookie=0xa, n_packets=3, n_bytes=366, vlan_tci=0x1000/0x1000,dl_src=40:44:44:44:54:59 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],set_field:1->vlan_pcp,load:0x63->OXM_OF_VLAN_VID[[]],CONTROLLER:65535
 OFPST_FLOW reply (OF1.2):
 ])
 
@@ -5736,10 +5844,10 @@  HEADER
 	out_ifindex=1003
 	out_format=0
 	hdr_prot=1
-	pkt_len=46
+	pkt_len=110
 	stripped=4
-	hdr_len=42
-	hdr=50-54-00-00-00-07-50-54-00-00-00-05-08-00-45-00-00-1C-00-00-00-00-40-01-F9-8D-C0-A8-00-01-C0-A8-00-02-08-00-F7-FF-00-00-00-00
+	hdr_len=106
+	hdr=50-54-00-00-00-07-50-54-00-00-00-05-08-00-45-00-00-5C-00-00-00-00-40-01-F9-4D-C0-A8-00-01-C0-A8-00-02-08-00-13-FC-00-00-00-00-00-01-02-03-04-05-06-07-08-09-0A-0B-0C-0D-0E-0F-10-11-12-13-14-15-16-17-18-19-1A-1B-1C-1D-1E-1F-20-21-22-23-24-25-26-27-28-29-2A-2B-2C-2D-2E-2F-30-31-32-33-34-35-36-37-38-39-3A-3B-3C-3D-3E-3F
 HEADER
 	dgramSeqNo=1
 	ds=127.0.0.1>2:1000
@@ -5756,10 +5864,10 @@  HEADER
 	out_ifindex=1004
 	out_format=0
 	hdr_prot=1
-	pkt_len=46
+	pkt_len=110
 	stripped=4
-	hdr_len=42
-	hdr=50-54-00-00-00-05-50-54-00-00-00-07-08-00-45-00-00-1C-00-00-00-00-40-01-F9-8D-C0-A8-00-02-C0-A8-00-01-00-00-FF-FF-00-00-00-00
+	hdr_len=106
+	hdr=50-54-00-00-00-05-50-54-00-00-00-07-08-00-45-00-00-5C-00-00-00-00-40-01-F9-4D-C0-A8-00-02-C0-A8-00-01-00-00-1B-FC-00-00-00-00-00-01-02-03-04-05-06-07-08-09-0A-0B-0C-0D-0E-0F-10-11-12-13-14-15-16-17-18-19-1A-1B-1C-1D-1E-1F-20-21-22-23-24-25-26-27-28-29-2A-2B-2C-2D-2E-2F-30-31-32-33-34-35-36-37-38-39-3A-3B-3C-3D-3E-3F
 HEADER
 	dgramSeqNo=1
 	ds=127.0.0.1>2:1000
@@ -5877,14 +5985,14 @@  IFCOUNTERS
 	ifspeed=100000000
 	direction=0
 	status=0
-	in_octets=138
+	in_octets=202
 	in_unicasts=3
 	in_multicasts=4294967295
 	in_broadcasts=4294967295
 	in_discards=4294967295
 	in_errors=4294967295
 	in_unknownprotos=4294967295
-	out_octets=84
+	out_octets=148
 	out_unicasts=2
 	out_multicasts=4294967295
 	out_broadcasts=4294967295
@@ -5900,14 +6008,14 @@  IFCOUNTERS
 	ifspeed=100000000
 	direction=0
 	status=0
-	in_octets=84
+	in_octets=148
 	in_unicasts=2
 	in_multicasts=4294967295
 	in_broadcasts=4294967295
 	in_discards=4294967295
 	in_errors=4294967295
 	in_unknownprotos=4294967295
-	out_octets=138
+	out_octets=202
 	out_unicasts=3
 	out_multicasts=4294967295
 	out_broadcasts=4294967295
@@ -5969,14 +6077,14 @@  IFCOUNTERS
 	ifspeed=100000000
 	direction=0
 	status=0
-	in_octets=138
+	in_octets=202
 	in_unicasts=3
 	in_multicasts=4294967295
 	in_broadcasts=4294967295
 	in_discards=4294967295
 	in_errors=4294967295
 	in_unknownprotos=4294967295
-	out_octets=84
+	out_octets=148
 	out_unicasts=2
 	out_multicasts=4294967295
 	out_broadcasts=4294967295
@@ -5992,14 +6100,14 @@  IFCOUNTERS
 	ifspeed=100000000
 	direction=0
 	status=0
-	in_octets=84
+	in_octets=148
 	in_unicasts=2
 	in_multicasts=4294967295
 	in_broadcasts=4294967295
 	in_discards=4294967295
 	in_errors=4294967295
 	in_unknownprotos=4294967295
-	out_octets=138
+	out_octets=202
 	out_unicasts=3
 	out_multicasts=4294967295
 	out_broadcasts=4294967295
@@ -6289,10 +6397,10 @@  HEADER
 	out_ifindex=1
 	out_format=2
 	hdr_prot=1
-	pkt_len=46
+	pkt_len=110
 	stripped=4
-	hdr_len=42
-	hdr=50-54-00-00-00-0A-50-54-00-00-00-09-08-00-45-01-00-1C-00-00-00-00-80-01-12-CA-0A-0A-0A-02-0A-0A-0A-01-08-00-F7-FF-00-00-00-00
+	hdr_len=106
+	hdr=50-54-00-00-00-0A-50-54-00-00-00-09-08-00-45-01-00-5C-00-00-00-00-80-01-12-8A-0A-0A-0A-02-0A-0A-0A-01-08-00-13-FC-00-00-00-00-00-01-02-03-04-05-06-07-08-09-0A-0B-0C-0D-0E-0F-10-11-12-13-14-15-16-17-18-19-1A-1B-1C-1D-1E-1F-20-21-22-23-24-25-26-27-28-29-2A-2B-2C-2D-2E-2F-30-31-32-33-34-35-36-37-38-39-3A-3B-3C-3D-3E-3F
 ])
 
 OVS_VSWITCHD_STOP
@@ -6391,10 +6499,10 @@  HEADER
 	out_ifindex=1
 	out_format=2
 	hdr_prot=1
-	pkt_len=46
+	pkt_len=110
 	stripped=4
-	hdr_len=42
-	hdr=50-54-00-00-00-0A-50-54-00-00-00-05-08-00-45-00-00-1C-00-00-00-00-80-01-B6-8D-C0-A8-01-01-C0-A8-02-02-08-00-F7-FF-00-00-00-00
+	hdr_len=106
+	hdr=50-54-00-00-00-0A-50-54-00-00-00-05-08-00-45-00-00-5C-00-00-00-00-80-01-B6-4D-C0-A8-01-01-C0-A8-02-02-08-00-13-FC-00-00-00-00-00-01-02-03-04-05-06-07-08-09-0A-0B-0C-0D-0E-0F-10-11-12-13-14-15-16-17-18-19-1A-1B-1C-1D-1E-1F-20-21-22-23-24-25-26-27-28-29-2A-2B-2C-2D-2E-2F-30-31-32-33-34-35-36-37-38-39-3A-3B-3C-3D-3E-3F
 ])
 
 OVS_VSWITCHD_STOP
@@ -6528,12 +6636,12 @@  m4_define([CHECK_NETFLOW_EXPIRATION],
   OVS_VSWITCHD_STOP
   OVS_APP_EXIT_AND_WAIT([test-netflow])
 
-  AT_CHECK([test `grep "192.168.0.1 > 192.168.0.2, if 1 > 65535, 1 pkts, 42 bytes, ICMP 8:0" netflow.log | wc -l` -eq 1])
+  AT_CHECK([test `grep "192.168.0.1 > 192.168.0.2, if 1 > 65535, 1 pkts, 106 bytes, ICMP 8:0" netflow.log | wc -l` -eq 1])
 
-  AT_CHECK([test `grep "192.168.0.1 > 192.168.0.2, if 1 > 2, 1 pkts, 42 bytes, ICMP 8:0" netflow.log | wc -l` -eq 1])
+  AT_CHECK([test `grep "192.168.0.1 > 192.168.0.2, if 1 > 2, 1 pkts, 106 bytes, ICMP 8:0" netflow.log | wc -l` -eq 1])
 
-  combined=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 84 bytes, ICMP 0:0" netflow.log | wc -l`
-  separate=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 1 pkts, 42 bytes, ICMP 0:0" netflow.log | wc -l`
+  combined=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 212 bytes, ICMP 0:0" netflow.log | wc -l`
+  separate=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 1 pkts, 106 bytes, ICMP 0:0" netflow.log | wc -l`
   AT_CHECK([test $separate = 2 || test $combined = 1], [0])])
 
 AT_SETUP([ofproto-dpif - NetFlow flow expiration - IPv4 collector])
@@ -6983,7 +7091,7 @@  AT_CHECK([ovs-appctl revalidator/purge], [0])
 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
 AT_CHECK([strip_xids < stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
  cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
- cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=540, idle_age=1, ip actions=NORMAL
+ cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=1180, idle_age=1, ip actions=NORMAL
 ])
 OVS_VSWITCHD_STOP
 AT_CLEANUP
@@ -7032,22 +7140,22 @@  send_packet () {
 
 # OpenFlow 1.0, implicit reset_counts
 send_packet
-warp_and_dump_NXM   1 1 54 1
+warp_and_dump_NXM   1 1 118 1
 AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow10 add-flow br0 $flow])
 # add-flow resets duration and counts,
 # but idle age is inherited from the old flow
 warp_and_dump_NXM   1 0 0  2
 
 send_packet
-warp_and_dump_NXM   2 1 54 1
+warp_and_dump_NXM   2 1 118 1
 AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow10 mod-flows br0 $flow])
 # mod-flows resets hard_age, but not counts
 # but duration and idle_age is inherited from the old flow
-warp_and_dump_NXM   3 1 54  2 1
+warp_and_dump_NXM   3 1 118  2 1
 
 # OpenFlow 1.1, implicit reset_counts
 send_packet
-warp_and_dump_OF 11 4 2 108
+warp_and_dump_OF 11 4 2 236
 AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow11 add-flow br0 $flow])
 # add-flow resets duration and counts,
 # but idle age is inherited from the old flow
@@ -7055,32 +7163,32 @@  warp_and_dump_NXM   1 0 0  2
 warp_and_dump_OF 11 2 0 0
 
 send_packet
-warp_and_dump_OF 11 3 1 54
+warp_and_dump_OF 11 3 1 118
 AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow11 mod-flows br0 $flow])
 # mod-flows resets hard_age, but not counts
 # but duration and idle_age is inherited from the old flow
-warp_and_dump_NXM   4 1 54  2 1
-warp_and_dump_OF 11 5 1 54
+warp_and_dump_NXM   4 1 118  2 1
+warp_and_dump_OF 11 5 1 118
 
 # OpenFlow 1.2, explicit reset_counts
 send_packet
-warp_and_dump_OF 12 6 2 108
+warp_and_dump_OF 12 6 2 236
 AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow12 add-flow br0 $flow])
 # add-flow without flags resets duration, but not counts,
 # idle age is inherited from the old flow
-warp_and_dump_NXM   1 2 108  2
-warp_and_dump_OF 12 2 2 108
+warp_and_dump_NXM   1 2 236  2
+warp_and_dump_OF 12 2 2 236
 
 send_packet
-warp_and_dump_OF 12 3 3 162
+warp_and_dump_OF 12 3 3 354
 AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow12 mod-flows br0 $flow])
 # mod-flows without flags does not reset duration nor counts,
 # idle age is inherited from the old flow
-warp_and_dump_NXM   4 3 162  2 1
-warp_and_dump_OF 12 5 3 162
+warp_and_dump_NXM   4 3 354  2 1
+warp_and_dump_OF 12 5 3 354
 
 send_packet
-warp_and_dump_OF 12 6 4 216
+warp_and_dump_OF 12 6 4 472
 AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow12 add-flow br0 reset_counts,$flow])
 # add-flow with reset_counts resets both duration and counts,
 # idle age is inherited from the old flow
@@ -7088,7 +7196,7 @@  warp_and_dump_NXM   1 0 0  2
 warp_and_dump_OF 12 2 0 0
 
 send_packet
-warp_and_dump_OF 12 3 1 54
+warp_and_dump_OF 12 3 1 118
 AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow12 mod-flows br0 reset_counts,$flow])
 # mod-flows with reset_counts resets counts, but not duration,
 # idle age is inherited from the old flow
@@ -7101,23 +7209,23 @@  flow_mods_reset_counts () {
     AT_CHECK([ovs-ofctl add-flow br0 $flow])
 
     send_packet
-    warp_and_dump_OF $1 1 1 54 reset_counts
+    warp_and_dump_OF $1 1 1 118 reset_counts
     AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow$1 add-flow br0 $flow])
     # add-flow without flags resets duration, but not counts,
     # idle age is inherited from the old flow
-    warp_and_dump_NXM   1 1 54  2
-    warp_and_dump_OF $1 2 1 54
+    warp_and_dump_NXM   1 1 118  2
+    warp_and_dump_OF $1 2 1 118
 
     send_packet
-    warp_and_dump_OF $1 3 2 108
+    warp_and_dump_OF $1 3 2 236
     AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow$1 mod-flows br0 $flow])
     # mod-flows without flags does not reset duration nor counts,
     # idle age is inherited from the old flow
-    warp_and_dump_NXM   4 2 108  2 1
-    warp_and_dump_OF $1 5 2 108
+    warp_and_dump_NXM   4 2 236  2 1
+    warp_and_dump_OF $1 5 2 236
 
     send_packet
-    warp_and_dump_OF $1 6 3 162
+    warp_and_dump_OF $1 6 3 354
     AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow$1 add-flow br0 reset_counts,$flow])
     # add-flow with reset_counts resets both duration and counts,
     # idle age is inherited from the old flow
@@ -7125,7 +7233,7 @@  flow_mods_reset_counts () {
     warp_and_dump_OF $1 2 0 0 reset_counts
 
     send_packet
-    warp_and_dump_OF $1 3 1 54 reset_counts
+    warp_and_dump_OF $1 3 1 118 reset_counts
     AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow$1 mod-flows br0 reset_counts,$flow])
     # mod-flows with reset_counts resets counts, but not duration,
     # idle age is inherited from the old flow
@@ -7134,21 +7242,21 @@  flow_mods_reset_counts () {
 
     # Modify flow having reset_counts flag without reset_counts
     send_packet
-    warp_and_dump_OF $1 6 1 54 reset_counts
+    warp_and_dump_OF $1 6 1 118 reset_counts
     AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow$1 mod-flows br0 $flow])
-    warp_and_dump_NXM   7 1 54  2 1
-    warp_and_dump_OF $1 8 1 54 reset_counts
+    warp_and_dump_NXM   7 1 118  2 1
+    warp_and_dump_OF $1 8 1 118 reset_counts
 
     # Add flow having reset_counts flag without reset_counts
     send_packet
-    warp_and_dump_OF $1 9 2 108 reset_counts
+    warp_and_dump_OF $1 9 2 236 reset_counts
     AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow$1 add-flow br0 $flow])
-    warp_and_dump_NXM   1 2 108  2
-    warp_and_dump_OF $1 2 2 108
+    warp_and_dump_NXM   1 2 236  2
+    warp_and_dump_OF $1 2 2 236
 
     # Modify flow w/o reset_counts flag with a flow_mod having reset_counts
     send_packet
-    warp_and_dump_OF $1 3 3 162
+    warp_and_dump_OF $1 3 3 354
     AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow$1 mod-flows br0 reset_counts,$flow])
     warp_and_dump_NXM   4 0 0  2 1
     warp_and_dump_OF $1 5 0 0
@@ -7180,7 +7288,7 @@  ovs-appctl time/warp 1000
 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
 AT_CHECK([strip_xids < stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
  cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
- cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=540, idle_age=1, ip actions=NORMAL
+ cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=1180, idle_age=1, ip actions=NORMAL
 ])
 OVS_VSWITCHD_STOP
 AT_CLEANUP
@@ -7529,22 +7637,22 @@  recirc_id(0),in_port(101),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no),
 ])
 
 AT_CHECK([grep -e 'in_port(100).*packets:9' ovs-vswitchd.log | strip_ufid | filter_flow_dump], [0], [dnl
-skb_priority(0/0),skb_mark(0/0),ct_state(0/0),ct_zone(0/0),ct_mark(0/0),ct_label(0/0),recirc_id(0),dp_hash(0/0),in_port(100),packet_type(ns=0,id=0),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:378, used:0.0s, actions:101,3,2
+skb_priority(0/0),skb_mark(0/0),ct_state(0/0),ct_zone(0/0),ct_mark(0/0),ct_label(0/0),recirc_id(0),dp_hash(0/0),in_port(100),packet_type(ns=0,id=0),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:954, used:0.0s, actions:101,3,2
 ])
 AT_CHECK([grep -e 'in_port(101).*packets:4' ovs-vswitchd.log | strip_ufid | filter_flow_dump], [0], [dnl
-skb_priority(0/0),skb_mark(0/0),ct_state(0/0),ct_zone(0/0),ct_mark(0/0),ct_label(0/0),recirc_id(0),dp_hash(0/0),in_port(101),packet_type(ns=0,id=0),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:168, used:0.0s, actions:100,2,3
+skb_priority(0/0),skb_mark(0/0),ct_state(0/0),ct_zone(0/0),ct_mark(0/0),ct_label(0/0),recirc_id(0),dp_hash(0/0),in_port(101),packet_type(ns=0,id=0),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:424, used:0.0s, actions:100,2,3
 ])
 
 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
 OFPST_PORT reply (xid=0x4): 1 ports
-  port  1: rx pkts=5, bytes=210, drop=?, errs=?, frame=?, over=?, crc=?
-           tx pkts=10, bytes=420, drop=?, errs=?, coll=?
+  port  1: rx pkts=5, bytes=530, drop=?, errs=?, frame=?, over=?, crc=?
+           tx pkts=10, bytes=1060, drop=?, errs=?, coll=?
 ])
 
 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
 OFPST_PORT reply (xid=0x4): 1 ports
-  port  1: rx pkts=10, bytes=420, drop=?, errs=?, frame=?, over=?, crc=?
-           tx pkts=5, bytes=210, drop=?, errs=?, coll=?
+  port  1: rx pkts=10, bytes=1060, drop=?, errs=?, frame=?, over=?, crc=?
+           tx pkts=5, bytes=530, drop=?, errs=?, coll=?
 ])
 
 OVS_VSWITCHD_STOP
@@ -8143,8 +8251,8 @@  skb_priority(0),skb_mark(0),ct_state(-new-est-rel-rpl-inv-trk-snat-dnat),ct_zone
 skb_priority(0),skb_mark(0),ct_state(-new-est-rel-rpl-inv-trk-snat-dnat),ct_zone(0),ct_mark(0),ct_label(0),recirc_id(0),dp_hash(0),in_port(1),packet_type(ns=0,id=0),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), actions:drop
 ])
    AT_CHECK([strip_ufid < ovs-vswitchd.log | filter_flow_dump | grep 'packets:3'], [0], [dnl
-skb_priority(0),skb_mark(0),ct_state(0/0xff),ct_zone(0),ct_mark(0),ct_label(0),recirc_id(0),dp_hash(0),in_port(1),packet_type(ns=0,id=0),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:3, bytes:126, used:0.0s, actions:2
-skb_priority(0),skb_mark(0),ct_state(0/0xff),ct_zone(0),ct_mark(0),ct_label(0),recirc_id(0),dp_hash(0),in_port(1),packet_type(ns=0,id=0),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), packets:3, bytes:126, used:0.0s, actions:drop
+skb_priority(0),skb_mark(0),ct_state(0/0xff),ct_zone(0),ct_mark(0),ct_label(0),recirc_id(0),dp_hash(0),in_port(1),packet_type(ns=0,id=0),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:3, bytes:318, used:0.0s, actions:2
+skb_priority(0),skb_mark(0),ct_state(0/0xff),ct_zone(0),ct_mark(0),ct_label(0),recirc_id(0),dp_hash(0),in_port(1),packet_type(ns=0,id=0),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), packets:3, bytes:318, used:0.0s, actions:drop
 ])
    OVS_VSWITCHD_STOP
    AT_CLEANUP])
@@ -8718,8 +8826,8 @@  recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x86dd),ipv6(proto=58,fr
 ])
 
 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
- n_packets=2, n_bytes=124, icmp6,icmp_type=128 actions=output:2
- n_packets=2, n_bytes=124, icmp6,icmp_type=129 actions=output:3
+ n_packets=2, n_bytes=252, icmp6,icmp_type=128 actions=output:2
+ n_packets=2, n_bytes=252, icmp6,icmp_type=129 actions=output:3
 NXST_FLOW reply:
 ])
 
@@ -8999,11 +9107,11 @@  OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
 
 dnl Check this output. We only see the latter two packets, not the first.
 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
-NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x0 total_len=42 reg0=0x1,reg1=0x4d2,reg2=0x1,reg3=0x1,reg4=0x1,in_port=1 (via action) data_len=42 (unbuffered)
-udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=1,tp_dst=2 udp_csum:e9d6
+NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x0 total_len=106 reg0=0x1,reg1=0x4d2,reg2=0x1,reg3=0x1,reg4=0x1,in_port=1 (via action) data_len=106 (unbuffered)
+udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=1,tp_dst=2 udp_csum:553
 dnl
-NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x0 total_len=42 ct_state=est|rpl|trk,ct_zone=1,ct_mark=0x1,ct_label=0x4d2000000000000000000000000,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,ip,reg0=0x1,reg1=0x4d2,reg2=0x1,reg3=0x2,reg4=0x1,in_port=2 (via action) data_len=42 (unbuffered)
-udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=2,tp_dst=1 udp_csum:e9d6
+NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x0 total_len=106 ct_state=est|rpl|trk,ct_zone=1,ct_mark=0x1,ct_label=0x4d2000000000000000000000000,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,ip,reg0=0x1,reg1=0x4d2,reg2=0x1,reg3=0x2,reg4=0x1,in_port=2 (via action) data_len=106 (unbuffered)
+udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=2,tp_dst=1 udp_csum:553
 ])
 
 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
@@ -9020,11 +9128,11 @@  OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
 
 dnl Check this output. We should see both packets
 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
-NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x0 total_len=42 reg0=0x1,reg1=0x4d2,reg2=0x1,reg3=0x1,reg4=0x1,in_port=1 (via action) data_len=42 (unbuffered)
-udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=3,tp_dst=2 udp_csum:e9d4
+NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x0 total_len=106 reg0=0x1,reg1=0x4d2,reg2=0x1,reg3=0x1,reg4=0x1,in_port=1 (via action) data_len=106 (unbuffered)
+udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=3,tp_dst=2 udp_csum:551
 dnl
-NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x0 total_len=42 ct_state=est|rpl|trk,ct_zone=1,ct_mark=0x1,ct_label=0x4d2000000000000000000000000,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=3,ct_tp_dst=2,ip,reg0=0x1,reg1=0x4d2,reg2=0x1,reg3=0x2,reg4=0x1,in_port=2 (via action) data_len=42 (unbuffered)
-udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=2,tp_dst=3 udp_csum:e9d4
+NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x0 total_len=106 ct_state=est|rpl|trk,ct_zone=1,ct_mark=0x1,ct_label=0x4d2000000000000000000000000,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=3,ct_tp_dst=2,ip,reg0=0x1,reg1=0x4d2,reg2=0x1,reg3=0x2,reg4=0x1,in_port=2 (via action) data_len=106 (unbuffered)
+udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=2,tp_dst=3 udp_csum:551
 ])
 
 OVS_VSWITCHD_STOP
@@ -9072,11 +9180,11 @@  dnl Check this output. We only see the latter two packets, not the first.
 dnl Note that the first packet doesn't have the ct_state bits set. This
 dnl happens because the ct_state field is available only after recirc.
 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
-NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
-udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=1,tp_dst=2 udp_csum:e9d6
+NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=106 in_port=1 (via action) data_len=106 (unbuffered)
+udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=1,tp_dst=2 udp_csum:553
 dnl
-NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=42 in_port=2 (via action) data_len=42 (unbuffered)
-udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=2,tp_dst=1 udp_csum:e9d6
+NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=106 in_port=2 (via action) data_len=106 (unbuffered)
+udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=2,tp_dst=1 udp_csum:553
 ])
 
 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
@@ -9094,11 +9202,11 @@  dnl Check this output. We should see both packets
 dnl Note that the first packet doesn't have the ct_state bits set. This
 dnl happens because the ct_state field is available only after recirc.
 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
-NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
-udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=3,tp_dst=4 udp_csum:e9d2
+NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=106 in_port=1 (via action) data_len=106 (unbuffered)
+udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=3,tp_dst=4 udp_csum:54f
 dnl
-NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=42 in_port=2 (via action) data_len=42 (unbuffered)
-udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=4,tp_dst=3 udp_csum:e9d2
+NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=106 in_port=2 (via action) data_len=106 (unbuffered)
+udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=4,tp_dst=3 udp_csum:54f
 ])
 
 dnl
@@ -9153,10 +9261,10 @@  dnl Check this output. We only see the latter two packets, not the first.
 dnl Note that the first packet doesn't have the ct_state bits set. This
 dnl happens because the ct_state field is available only after recirc.
 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
-NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
-udp6,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,ipv6_src=2001:db8::1,ipv6_dst=2001:db8::2,ipv6_label=0x00000,nw_tos=112,nw_ecn=0,nw_ttl=128,tp_src=1,tp_dst=2 udp_csum:a466
-NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=62 ct_state=est|rpl|trk,ct_ipv6_src=2001:db8::1,ct_ipv6_dst=2001:db8::2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,ipv6,in_port=2 (via action) data_len=62 (unbuffered)
-udp6,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,ipv6_src=2001:db8::2,ipv6_dst=2001:db8::1,ipv6_label=0x00000,nw_tos=112,nw_ecn=0,nw_ttl=128,tp_src=2,tp_dst=1 udp_csum:a466
+NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=126 in_port=1 (via action) data_len=126 (unbuffered)
+udp6,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,ipv6_src=2001:db8::1,ipv6_dst=2001:db8::2,ipv6_label=0x00000,nw_tos=112,nw_ecn=0,nw_ttl=128,tp_src=1,tp_dst=2 udp_csum:bfe2
+NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=126 ct_state=est|rpl|trk,ct_ipv6_src=2001:db8::1,ct_ipv6_dst=2001:db8::2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,ipv6,in_port=2 (via action) data_len=126 (unbuffered)
+udp6,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,ipv6_src=2001:db8::2,ipv6_dst=2001:db8::1,ipv6_label=0x00000,nw_tos=112,nw_ecn=0,nw_ttl=128,tp_src=2,tp_dst=1 udp_csum:bfe2
 ])
 
 OVS_VSWITCHD_STOP
@@ -9266,8 +9374,8 @@  OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
 
 dnl Check this output. Only one reply must be there
 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
-NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=42 ct_state=est|rpl|trk,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,ip,in_port=2 (via action) data_len=42 (unbuffered)
-udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=2,tp_dst=1 udp_csum:e9d6
+NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=106 ct_state=est|rpl|trk,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,ip,in_port=2 (via action) data_len=106 (unbuffered)
+udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=2,tp_dst=1 udp_csum:553
 dnl
 OFPT_ECHO_REQUEST (xid=0x0): 0 bytes of payload
 ])
@@ -9356,17 +9464,17 @@  OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
 
 dnl Check this output. We only see the latter two packets (for each zone), not the first.
 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
-NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
-udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=1,tp_dst=2 udp_csum:e9d6
+NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=106 in_port=1 (via action) data_len=106 (unbuffered)
+udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=1,tp_dst=2 udp_csum:553
 dnl
-NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=42 ct_state=est|rpl|trk,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,ip,in_port=2 (via action) data_len=42 (unbuffered)
-udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=2,tp_dst=1 udp_csum:e9d6
+NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=106 ct_state=est|rpl|trk,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,ip,in_port=2 (via action) data_len=106 (unbuffered)
+udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=2,tp_dst=1 udp_csum:553
 dnl
-NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=42 in_port=3 (via action) data_len=42 (unbuffered)
-udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=1,tp_dst=2 udp_csum:e9d6
+NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=106 in_port=3 (via action) data_len=106 (unbuffered)
+udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=1,tp_dst=2 udp_csum:553
 dnl
-NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=42 ct_state=est|rpl|trk,ct_zone=1,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,ip,in_port=4 (via action) data_len=42 (unbuffered)
-udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=2,tp_dst=1 udp_csum:e9d6
+NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=106 ct_state=est|rpl|trk,ct_zone=1,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,ip,in_port=4 (via action) data_len=106 (unbuffered)
+udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=2,tp_dst=1 udp_csum:553
 ])
 
 OVS_VSWITCHD_STOP
@@ -9412,11 +9520,11 @@  OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
 
 dnl Check this output. We only see the latter two packets, not the first.
 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
-NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
-udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=1,tp_dst=2 udp_csum:e9d6
+NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=106 in_port=1 (via action) data_len=106 (unbuffered)
+udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=1,tp_dst=2 udp_csum:553
 dnl
-NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=42 ct_state=est|rpl|trk,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,ip,in_port=2 (via action) data_len=42 (unbuffered)
-udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=2,tp_dst=1 udp_csum:e9d6
+NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=106 ct_state=est|rpl|trk,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,ip,in_port=2 (via action) data_len=106 (unbuffered)
+udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=2,tp_dst=1 udp_csum:553
 ])
 
 OVS_VSWITCHD_STOP
@@ -9514,20 +9622,20 @@  OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
 
 dnl Check this output.
 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
-NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
-udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=1,tp_dst=2 udp_csum:e9d6
+NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=106 in_port=1 (via action) data_len=106 (unbuffered)
+udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=1,tp_dst=2 udp_csum:553
 dnl
-NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
-udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=3,tp_dst=4 udp_csum:e9d2
+NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=106 in_port=1 (via action) data_len=106 (unbuffered)
+udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=3,tp_dst=4 udp_csum:54f
 dnl
-NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
-udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=5,tp_dst=6 udp_csum:e9ce
+NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=106 in_port=1 (via action) data_len=106 (unbuffered)
+udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=5,tp_dst=6 udp_csum:54b
 dnl
-NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=42 ct_state=est|rpl|trk,ct_mark=0x1,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,ip,in_port=2 (via action) data_len=42 (unbuffered)
-udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=2,tp_dst=1 udp_csum:e9d6
+NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=106 ct_state=est|rpl|trk,ct_mark=0x1,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,ip,in_port=2 (via action) data_len=106 (unbuffered)
+udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=2,tp_dst=1 udp_csum:553
 dnl
-NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=42 ct_state=est|rpl|trk,ct_mark=0x3,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=3,ct_tp_dst=4,ip,in_port=2 (via action) data_len=42 (unbuffered)
-udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=4,tp_dst=3 udp_csum:e9d2
+NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=106 ct_state=est|rpl|trk,ct_mark=0x3,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=3,ct_tp_dst=4,ip,in_port=2 (via action) data_len=106 (unbuffered)
+udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=4,tp_dst=3 udp_csum:54f
 ])
 
 OVS_VSWITCHD_STOP
@@ -9571,11 +9679,11 @@  OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
 
 dnl Check this output.
 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
-NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=42 ct_state=est|rpl|trk,ct_label=0x1,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,ip,in_port=2 (via action) data_len=42 (unbuffered)
-udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=2,tp_dst=1 udp_csum:e9d6
+NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=106 ct_state=est|rpl|trk,ct_label=0x1,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,ip,in_port=2 (via action) data_len=106 (unbuffered)
+udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=2,tp_dst=1 udp_csum:553
 dnl
-NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=42 ct_state=est|rpl|trk,ct_label=0x2,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=3,ct_tp_dst=4,ip,in_port=2 (via action) data_len=42 (unbuffered)
-udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=4,tp_dst=3 udp_csum:e9d2
+NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=106 ct_state=est|rpl|trk,ct_label=0x2,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=3,ct_tp_dst=4,ip,in_port=2 (via action) data_len=106 (unbuffered)
+udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=4,tp_dst=3 udp_csum:54f
 ])
 
 OVS_VSWITCHD_STOP
@@ -9847,17 +9955,17 @@  dnl Check this output. We only see the latter two packets, not the first.
 dnl Note that the first packet doesn't have the ct_state bits set. This
 dnl happens because the ct_state field is available only after recirc.
 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
-NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
-udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=1,tp_dst=2 udp_csum:e9d6
+NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=106 in_port=1 (via action) data_len=106 (unbuffered)
+udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=1,tp_dst=2 udp_csum:553
 dnl
-NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
-udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=1,tp_dst=2 udp_csum:e9d6
+NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=106 in_port=1 (via action) data_len=106 (unbuffered)
+udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=1,tp_dst=2 udp_csum:553
 dnl
-NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=42 ct_state=est|rpl|trk,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,ip,in_port=2 (via action) data_len=42 (unbuffered)
-udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=2,tp_dst=1 udp_csum:e9d6
+NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=106 ct_state=est|rpl|trk,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,ip,in_port=2 (via action) data_len=106 (unbuffered)
+udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=2,tp_dst=1 udp_csum:553
 dnl
-NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=42 in_port=2 (via action) data_len=42 (unbuffered)
-udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=2,tp_dst=1 udp_csum:e9d6
+NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=106 in_port=2 (via action) data_len=106 (unbuffered)
+udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=2,tp_dst=1 udp_csum:553
 ])
 OVS_VSWITCHD_STOP
 AT_CLEANUP
diff --git a/tests/pmd.at b/tests/pmd.at
index fcb007ce04f4..23b5a713b9a7 100644
--- a/tests/pmd.at
+++ b/tests/pmd.at
@@ -235,8 +235,8 @@  OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 2])
 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
 
 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
-NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
-icmp,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,icmp_type=8,icmp_code=0 icmp_csum:f7ff
+NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=106 in_port=1 (via action) data_len=106 (unbuffered)
+icmp,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,icmp_type=8,icmp_code=0 icmp_csum:13fc
 ])
 
 AT_CHECK([ovs-vsctl set interface p1 options:n_rxq=4])
@@ -257,8 +257,8 @@  OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 2])
 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
 
 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
-NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
-icmp,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,icmp_type=8,icmp_code=0 icmp_csum:f7ff
+NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=106 in_port=1 (via action) data_len=106 (unbuffered)
+icmp,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,icmp_type=8,icmp_code=0 icmp_csum:13fc
 ])
 
 dnl Check resetting to default number of rx queues after removal from the db.
@@ -308,10 +308,10 @@  AT_CHECK([ovs-appctl dpctl/dump-flows | flow_dump_prepend_pmd], [0], [dnl
 ])
 
 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
-NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
-icmp,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,icmp_type=8,icmp_code=0 icmp_csum:f7ff
-NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
-icmp,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,icmp_type=8,icmp_code=0 icmp_csum:f7ff
+NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=106 in_port=1 (via action) data_len=106 (unbuffered)
+icmp,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,icmp_type=8,icmp_code=0 icmp_csum:13fc
+NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=106 in_port=1 (via action) data_len=106 (unbuffered)
+icmp,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,icmp_type=8,icmp_code=0 icmp_csum:13fc
 ])
 
 OVS_VSWITCHD_STOP
@@ -343,8 +343,8 @@  OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 2])
 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
 
 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
-NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
-icmp,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,icmp_type=8,icmp_code=0 icmp_csum:f7ff
+NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=106 in_port=1 (via action) data_len=106 (unbuffered)
+icmp,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,icmp_type=8,icmp_code=0 icmp_csum:13fc
 ])
 
 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
@@ -355,8 +355,8 @@  OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 2])
 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
 
 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
-NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=42 in_port=2 (via action) data_len=42 (unbuffered)
-icmp,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,icmp_type=8,icmp_code=0 icmp_csum:f7ff
+NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=106 in_port=2 (via action) data_len=106 (unbuffered)
+icmp,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,icmp_type=8,icmp_code=0 icmp_csum:13fc
 ])
 
 AT_CHECK([ovs-vsctl set Interface p2 options:numa_id=1])
@@ -376,8 +376,8 @@  OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 2])
 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
 
 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
-NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
-icmp,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,icmp_type=8,icmp_code=0 icmp_csum:f7ff
+NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=106 in_port=1 (via action) data_len=106 (unbuffered)
+icmp,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,icmp_type=8,icmp_code=0 icmp_csum:13fc
 ])
 
 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
@@ -388,8 +388,8 @@  OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 2])
 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
 
 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
-NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=42 in_port=2 (via action) data_len=42 (unbuffered)
-icmp,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,icmp_type=8,icmp_code=0 icmp_csum:f7ff
+NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=106 in_port=2 (via action) data_len=106 (unbuffered)
+icmp,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,icmp_type=8,icmp_code=0 icmp_csum:13fc
 ])
 
 OVS_VSWITCHD_STOP
@@ -417,8 +417,8 @@  AT_CHECK([ovs-appctl netdev-dummy/receive p2 --qid 0 'in_port(1),eth(src=50:54:0
 OVS_WAIT_UNTIL([test `ovs-pcap br0.pcap | wc -l` -ge 2])
 
 AT_CHECK([ovs-pcap br0.pcap], [0], [dnl
-50540000000a50540000000908004500001c00000000400166df0a0000020a0000010800f7ff00000000
-50540000000a50540000000908004500001c00000000400166df0a0000020a0000010800f7ff00000000
+50540000000a50540000000908004500005c000000004001669f0a0000020a000001080013fc00000000000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f
+50540000000a50540000000908004500005c000000004001669f0a0000020a000001080013fc00000000000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f
 ])
 
 AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=2])
@@ -436,10 +436,10 @@  AT_CHECK([ovs-appctl netdev-dummy/receive p2 --qid 0 'in_port(1),eth(src=50:54:0
 OVS_WAIT_UNTIL([test `ovs-pcap br0.pcap | wc -l` -ge 4])
 
 AT_CHECK([ovs-pcap br0.pcap], [0], [dnl
-50540000000a50540000000908004500001c00000000400166df0a0000020a0000010800f7ff00000000
-50540000000a50540000000908004500001c00000000400166df0a0000020a0000010800f7ff00000000
-50540000000a50540000000908004500001c00000000400166df0a0000020a0000010800f7ff00000000
-50540000000a50540000000908004500001c00000000400166df0a0000020a0000010800f7ff00000000
+50540000000a50540000000908004500005c000000004001669f0a0000020a000001080013fc00000000000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f
+50540000000a50540000000908004500005c000000004001669f0a0000020a000001080013fc00000000000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f
+50540000000a50540000000908004500005c000000004001669f0a0000020a000001080013fc00000000000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f
+50540000000a50540000000908004500005c000000004001669f0a0000020a000001080013fc00000000000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f
 ])
 
 OVS_VSWITCHD_STOP
@@ -467,8 +467,8 @@  OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 2])
 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
 
 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
-NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
-icmp,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,icmp_type=8,icmp_code=0 icmp_csum:f7ff
+NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=106 in_port=1 (via action) data_len=106 (unbuffered)
+icmp,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,icmp_type=8,icmp_code=0 icmp_csum:13fc
 ])
 
 AT_CHECK([ovs-vsctl del-port br0 p1])
@@ -482,8 +482,8 @@  OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 2])
 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
 
 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
-NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
-icmp,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,icmp_type=8,icmp_code=0 icmp_csum:f7ff
+NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=106 in_port=1 (via action) data_len=106 (unbuffered)
+icmp,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,icmp_type=8,icmp_code=0 icmp_csum:13fc
 ])
 
 OVS_VSWITCHD_STOP
diff --git a/tests/test-ovn.c b/tests/test-ovn.c
index f9a5085f7185..408878d18b41 100644
--- a/tests/test-ovn.c
+++ b/tests/test-ovn.c
@@ -1171,7 +1171,7 @@  test_expr_to_packets(struct ovs_cmdl_context *ctx OVS_UNUSED)
         uint64_t packet_stub[128 / 8];
         struct dp_packet packet;
         dp_packet_use_stub(&packet, packet_stub, sizeof packet_stub);
-        flow_compose(&packet, &uflow, 0);
+        flow_compose(&packet, &uflow, NULL, 64);
 
         struct ds output = DS_EMPTY_INITIALIZER;
         const uint8_t *buf = dp_packet_data(&packet);