[ovs-dev] [PATCH 08/12] dpif-netdev: Execute conntrack action.

Fischetti, Antonio antonio.fischetti at intel.com
Tue Jan 26 17:31:06 UTC 2016


Hi, an update to my previous post.

I found out that after applying patches #1 and then #2 the performance is 
still ok.
Instead, after I apply the patch #3 the throughput goes from 12.1 down to 
11.6 Mpps.

It seems to be due to the function ' parse_dl_type()' which calls 2 inline 
functions.
It's strange because with these 3 patches none is calling 'parse_dl_type()'.

If I comment that function, performance goes up again to 12.1Mpps.

Antonio

> -----Original Message-----
> From: dev [mailto:dev-bounces at openvswitch.org] On Behalf Of Fischetti,
> Antonio
> Sent: Monday, January 25, 2016 4:25 PM
> To: Daniele Di Proietto; dev at openvswitch.org
> Subject: Re: [ovs-dev] [PATCH 08/12] dpif-netdev: Execute conntrack action.
> 
> Hi Daniele,
> I reviewed your patches and they look ok.
> 
> I also made some regression tests on performance with an IXIA generator. I
> would like
> to share these results.
> I did the following. I applied the patches and ran a couple of tests without
> using the
> new 'ct' action, so the ConnTracker feature was never enabled.
> I then compared my results with ovs-dpdk without the patches.
> 
> I found the performance with the patches was about a 5% lower.
> 
> Below some details on the 2 tests I did and then a table with the
> performance figures.
> 
> Test #1: 'Phy-to-Phy'
> =================
> 
>                        +-----+
> -->[ Port 1 (dpdk) ]---|     |
>                        | OVS |
> <--[ Port 2 (dpdk) ]---|     |
>                        +-----+
> 
> ovs-ofctl add-flow br0 in_port=1,action=output:2
> 
> 
> Test #2: Phy-VM-Phy with vHost-User
> ==============================
> 
>                        +-----+                                +--------------+
> -->[ Port 1 (dpdk) ]---|     |---[ Port 4 (dpdkvhostuser) ]---|              |
>                        | OVS |                                | Testpmd @ VM |
> <--[ Port 3 (dpdk) ]---|     |---[ Port 2 (dpdkvhostuser) ]---|              |
>                        +-----+                                +--------------+
> 
> ovs-ofctl add-flow br0 idle_timeout=0,in_port=1,action=output:4
> ovs-ofctl add-flow br0 idle_timeout=0,in_port=2,action=output:3
> 
> Performance figures are
> 
>                    +----------------+-------------------------------+
>                    | OVS Master 2.5 | OVS Master 2.5 + C.T. Patches |
> +------------------+----------------+-------------------------------+
> | Phy-to-Phy       | 12.1 Mpps      | 11.6 Mpps                     |
> | PVP (vHost-User) |  7.0 Mpps      | 6.6 Mpps                      |
> +------------------+----------------+-------------------------------+
> 
> I got these numbers by sending mono-directional data at line rate on one ixia
> port (Tx) and observing the receiving rate on the other ixia port (Rx).
> 
> I'm trying to figure out where could be the over-head.
> I guess with my test settings
> 1. conntrack_execute() is never called
> 2. The only functions that can give an overhead could be: conntrack_run(),
> conntrack_init().
> 
> Does it make sense? Let me know if I missed some detail.
> 
> Thanks,
> Antonio
> 
> > -----Original Message-----
> > From: dev [mailto:dev-bounces at openvswitch.org] On Behalf Of Daniele Di
> > Proietto
> > Sent: Monday, November 16, 2015 6:21 AM
> > To: dev at openvswitch.org
> > Subject: [ovs-dev] [PATCH 08/12] dpif-netdev: Execute conntrack action.
> >
> > Signed-off-by: Daniele Di Proietto <diproiettod at vmware.com>
> > ---
> >  lib/dpif-netdev.c     | 65
> ++++++++++++++++++++++++++++++++++++++++++-
> > --------
> >  tests/dpif-netdev.at  | 14 +++++------
> >  tests/ofproto-dpif.at | 20 ++++++++--------
> >  3 files changed, 71 insertions(+), 28 deletions(-)
> >
> > diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
> > index 3440755..1061ee4 100644
> > --- a/lib/dpif-netdev.c
> > +++ b/lib/dpif-netdev.c
> > @@ -33,6 +33,7 @@
> >
> >  #include "bitmap.h"
> >  #include "cmap.h"
> > +#include "conntrack.h"
> >  #include "csum.h"
> >  #include "dp-packet.h"
> >  #include "dpif.h"
> > @@ -92,6 +93,10 @@ static struct vlog_rate_limit upcall_rl =
> > VLOG_RATE_LIMIT_INIT(600, 600);
> >  static struct odp_support dp_netdev_support = {
> >      .max_mpls_depth = SIZE_MAX,
> >      .recirc = true,
> > +    .ct_state = true,
> > +    .ct_zone = true,
> > +    .ct_mark = true,
> > +    .ct_label = true,
> >  };
> >
> >  /* Stores a miniflow with inline values */
> > @@ -226,6 +231,8 @@ struct dp_netdev {
> >      size_t n_dpdk_rxqs;
> >      char *pmd_cmask;
> >      uint64_t last_tnl_conf_seq;
> > +
> > +    struct conntrack conntrack;
> >  };
> >
> >  static struct dp_netdev_port *dp_netdev_lookup_port(const struct
> > dp_netdev *dp,
> > @@ -842,6 +849,8 @@ create_dp_netdev(const char *name, const struct
> > dpif_class *class,
> >      dp->upcall_aux = NULL;
> >      dp->upcall_cb = NULL;
> >
> > +    conntrack_init(&dp->conntrack);
> > +
> >      cmap_init(&dp->poll_threads);
> >      ovs_mutex_init_recursive(&dp->non_pmd_mutex);
> >      ovsthread_key_create(&dp->per_pmd_key, NULL);
> > @@ -914,6 +923,8 @@ dp_netdev_free(struct dp_netdev *dp)
> >      ovs_mutex_destroy(&dp->non_pmd_mutex);
> >      ovsthread_key_delete(dp->per_pmd_key);
> >
> > +    conntrack_destroy(&dp->conntrack);
> > +
> >      ovs_mutex_lock(&dp->port_mutex);
> >      CMAP_FOR_EACH (port, node, &dp->ports) {
> >          do_del_port(dp, port);
> > @@ -1920,12 +1931,6 @@ dpif_netdev_flow_from_nlattrs(const struct
> > nlattr *key, uint32_t key_len,
> >          return EINVAL;
> >      }
> >
> > -    /* Userspace datapath doesn't support conntrack. */
> > -    if (flow->ct_state || flow->ct_zone || flow->ct_mark
> > -        || !ovs_u128_is_zero(&flow->ct_label)) {
> > -        return EINVAL;
> > -    }
> > -
> >      return 0;
> >  }
> >
> > @@ -2555,6 +2560,9 @@ dpif_netdev_run(struct dpif *dpif)
> >      ovs_mutex_unlock(&dp->non_pmd_mutex);
> >      dp_netdev_pmd_unref(non_pmd);
> >
> > +    /* XXX: If workload is too heavy we could add a separate thread. */
> > +    conntrack_run(&dp->conntrack);
> > +
> >      tnl_arp_cache_run();
> >      tnl_port_map_run();
> >      new_tnl_seq = seq_read(tnl_conf_seq);
> > @@ -3612,12 +3620,47 @@ dp_execute_cb(void *aux_, struct dp_packet
> > **packets, int cnt,
> >          VLOG_WARN("Packet dropped. Max recirculation depth exceeded.");
> >          break;
> >
> > -    case OVS_ACTION_ATTR_CT:
> > -        /* If a flow with this action is slow-pathed, datapath assistance is
> > -         * required to implement it. However, we don't support this action
> > -         * in the userspace datapath. */
> > -        VLOG_WARN("Cannot execute conntrack action in userspace.");
> > +    case OVS_ACTION_ATTR_CT: {
> > +        const struct nlattr *b;
> > +        bool commit = false;
> > +        unsigned int left;
> > +        uint16_t zone = 0;
> > +        const char *helper = NULL;
> > +        const uint32_t *setmark = NULL;
> > +        const struct ovs_key_ct_labels *setlabel = NULL;
> > +
> > +
> > +        /* XXX parsing this everytime is expensive.  We should do like kernel
> > +         * does and create a structure. */
> > +        NL_ATTR_FOR_EACH_UNSAFE (b, left, nl_attr_get(a),
> > nl_attr_get_size(a)) {
> > +            enum ovs_ct_attr sub_type = nl_attr_type(b);
> > +
> > +            switch(sub_type) {
> > +            case OVS_CT_ATTR_COMMIT:
> > +                commit = true;
> > +                break;
> > +            case OVS_CT_ATTR_ZONE:
> > +                zone = nl_attr_get_u16(b);
> > +                break;
> > +            case OVS_CT_ATTR_HELPER:
> > +                helper = nl_attr_get_string(b);
> > +                break;
> > +            case OVS_CT_ATTR_MARK:
> > +                setmark = nl_attr_get(b);
> > +                break;
> > +            case OVS_CT_ATTR_LABELS:
> > +                setlabel = nl_attr_get(b);
> > +                break;
> > +            case OVS_CT_ATTR_UNSPEC:
> > +            case __OVS_CT_ATTR_MAX:
> > +                OVS_NOT_REACHED();
> > +            }
> > +        }
> > +
> > +        conntrack_execute(&dp->conntrack, packets, cnt, commit, zone,
> > +                          setmark, setlabel, helper);
> >          break;
> > +    }
> >
> >      case OVS_ACTION_ATTR_PUSH_VLAN:
> >      case OVS_ACTION_ATTR_POP_VLAN:
> > diff --git a/tests/dpif-netdev.at b/tests/dpif-netdev.at
> > index 103f87c..324faba 100644
> > --- a/tests/dpif-netdev.at
> > +++ b/tests/dpif-netdev.at
> > @@ -66,7 +66,7 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p1
> > 'in_port(1),eth(src=50:54:00:00:00:
> >  sleep 1
> >
> >  AT_CHECK([cat ovs-vswitchd.log | grep -A 1 'miss upcall' | tail -n 1], [0],
> [dnl
> > -
> >
> skb_priority(0),skb_mark(0),recirc_id(0),dp_hash(0),in_port(1),eth(src=50:54:
> >
> 00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=
> > 10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)
> >
> +skb_priority(0),skb_mark(0),ct_state(0),ct_zone(0),ct_mark(0),ct_label(0),re
> >
> circ_id(0),dp_hash(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:0
> >
> 0:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,
> > frag=no),icmp(type=8,code=0)
> >  ])
> >  AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT],
> > [0], [dnl
> >
> >
> recirc_id=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl
> > _dst=50:54:00:00:00:0a,nw_frag=no, actions: <del>
> > @@ -79,7 +79,7 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p1
> > 'in_port(1),eth(src=50:54:00:00:00:
> >  sleep 1
> >
> >  AT_CHECK([cat ovs-vswitchd.log | grep -A 1 'miss upcall' | tail -n 1], [0],
> [dnl
> > -
> >
> skb_priority(0),skb_mark(0),recirc_id(0),dp_hash(0),in_port(1),eth(src=50:54:
> >
> 00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=
> > 10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)
> >
> +skb_priority(0),skb_mark(0),ct_state(0),ct_zone(0),ct_mark(0),ct_label(0),re
> >
> circ_id(0),dp_hash(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:0
> >
> 0:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,
> > frag=no),icmp(type=8,code=0)
> >  ])
> >  AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT],
> > [0], [dnl
> >
> >
> pkt_mark=0,recirc_id=0,dp_hash=0,skb_priority=0,ct_state=0,ct_zone=0,ct_
> >
> mark=0,ct_label=0,icmp,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:0
> >
> 9,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, actions: <del>
> > @@ -103,10 +103,10 @@ AT_CHECK([ovs-appctl netdev-dummy/receive
> p1
> > 'in_port(1),eth(src=50:54:00:00:00:
> >  sleep 1
> >
> >  AT_CHECK([cat ovs-vswitchd.log | grep -A 1 'miss upcall' | tail -n 1], [0],
> [dnl
> > -
> >
> skb_priority(0),skb_mark(0),recirc_id(0),dp_hash(0),in_port(1),eth(src=50:54:
> >
> 00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=
> > 10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)
> >
> +skb_priority(0),skb_mark(0),ct_state(0),ct_zone(0),ct_mark(0),ct_label(0),re
> >
> circ_id(0),dp_hash(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:0
> >
> 0:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,
> > frag=no),icmp(type=8,code=0)
> >  ])
> >  AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_DUMP | STRIP_XOUT],
> > [0], [dnl
> > -
> >
> skb_priority(0/0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(1),eth(src=
> >
> 50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.
> >
> 2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no),icmp(typ
> > e=8/0,code=0/0), packets:0, bytes:0, used:never, actions: <del>
> >
> +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(1),eth(src=50:54:00:00:00:09,ds
> >
> t=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.
> > 1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no),icmp(type=8/0,code=0/0),
> > packets:0, bytes:0, used:never, actions: <del>
> >  ])
> >
> >  # Now, the same again without megaflows.
> > @@ -118,11 +118,11 @@ AT_CHECK([ovs-appctl netdev-dummy/receive
> p1
> > 'in_port(1),eth(src=50:54:00:00:00:
> >  sleep 1
> >
> >  AT_CHECK([cat ovs-vswitchd.log | grep -A 1 'miss upcall' | tail -n 1], [0],
> [dnl
> > -
> >
> skb_priority(0),skb_mark(0),recirc_id(0),dp_hash(0),in_port(1),eth(src=50:54:
> >
> 00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=
> > 10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)
> >
> +skb_priority(0),skb_mark(0),ct_state(0),ct_zone(0),ct_mark(0),ct_label(0),re
> >
> circ_id(0),dp_hash(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:0
> >
> 0:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,
> > frag=no),icmp(type=8,code=0)
> >  ])
> >  AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_DUMP | STRIP_XOUT],
> > [0], [dnl
> > -
> >
> skb_priority(0),skb_mark(0),recirc_id(0),dp_hash(0),in_port(1),eth(src=50:54:
> >
> 00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=
> > 10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0), packets:0,
> > bytes:0, used:never, actions: <del>
> > -
> >
> skb_priority(0/0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(1),eth(src=
> >
> 50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.
> >
> 2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no),icmp(typ
> > e=8/0,code=0/0), packets:0, bytes:0, used:never, actions: <del>
> >
> +skb_priority(0),skb_mark(0),ct_state(0/0x3f),ct_zone(0),ct_mark(0),ct_label
> >
> (0),recirc_id(0),dp_hash(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:0
> >
> 0:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,t
> > tl=64,frag=no),icmp(type=8,code=0), packets:0, bytes:0, used:never,
> actions:
> > <del>
> >
> +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(1),eth(src=50:54:00:00:00:09,ds
> >
> t=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.
> > 1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no),icmp(type=8/0,code=0/0),
> > packets:0, bytes:0, used:never, actions: <del>
> >  ])
> >
> >  OVS_VSWITCHD_STOP
> > diff --git a/tests/ofproto-dpif.at b/tests/ofproto-dpif.at
> > index f1c7cb6..508bb51 100644
> > --- a/tests/ofproto-dpif.at
> > +++ b/tests/ofproto-dpif.at
> > @@ -5768,12 +5768,12 @@
> > recirc_id(0),in_port(3),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0,
> > used
> >  ])
> >
> >  AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | STRIP_UFID |
> STRIP_USED
> > | sort], [0], [dnl
> > -
> >
> skb_priority(0/0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(p1),eth(src
> >
> =50:54:00:00:00:05/00:00:00:00:00:00,dst=50:54:00:00:00:07/00:00:00:00:0
> >
> 0:00),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.
> > 0,proto=1/0,tos=0/0,ttl=64/0,frag=no),icmp(type=8/0,code=0/0),
> packets:0,
> > bytes:0, used:never, actions:drop
> > -
> >
> skb_priority(0/0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(p2),eth(src
> >
> =50:54:00:00:00:07/00:00:00:00:00:00,dst=50:54:00:00:00:05/00:00:00:00:0
> >
> 0:00),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.
> > 0,proto=1/0,tos=0/0,ttl=64/0,frag=no),icmp(type=0/0,code=0/0),
> packets:0,
> > bytes:0, used:never, actions:drop
> >
> +skb_priority(0/0),skb_mark(0/0),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(p1),eth(src=50:54:00:00:00:05/
> >
> 00:00:00:00:00:00,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x08
> >
> 00),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0
> > ,ttl=64/0,frag=no),icmp(type=8/0,code=0/0), packets:0, bytes:0,
> used:never,
> > actions:drop
> >
> +skb_priority(0/0),skb_mark(0/0),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(p2),eth(src=50:54:00:00:00:07/
> >
> 00:00:00:00:00:00,dst=50:54:00:00:00:05/00:00:00:00:00:00),eth_type(0x08
> >
> 00),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0
> > ,ttl=64/0,frag=no),icmp(type=0/0,code=0/0), packets:0, bytes:0,
> used:never,
> > actions:drop
> >  ])
> >
> >  AT_CHECK([ovs-appctl dpif/dump-flows -m br1 | STRIP_UFID |
> STRIP_USED
> > | sort], [0], [dnl
> > -
> >
> skb_priority(0/0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(p3),eth(src
> >
> =50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:0
> >
> 0:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto
> > =1/0,tos=0/0,ttl=64/0,frag=no),icmp(type=8/0,code=0/0), packets:0,
> > bytes:0, used:never, actions:drop
> >
> +skb_priority(0/0),skb_mark(0/0),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(p3),eth(src=50:54:00:00:00:09/
> >
> 00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x08
> >
> 00),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/
> > 0,frag=no),icmp(type=8/0,code=0/0), packets:0, bytes:0, used:never,
> > actions:drop
> >  ])
> >
> >  OVS_VSWITCHD_STOP
> > @@ -5926,10 +5926,10 @@
> > recirc_id=0,ip,in_port=101,vlan_tci=0x0000,nw_frag=no, actions:100,2,3
> >  ])
> >
> >  AT_CHECK([cat ovs-vswitchd.log | grep -e 'in_port(100).*packets:9' |
> > STRIP_UFID | FILTER_FLOW_DUMP], [0], [dnl
> > -
> >
> skb_priority(0/0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(100),eth(sr
> >
> c=50:54:00:00:00:05/00:00:00:00:00:00,dst=50:54:00:00:00:07/00:00:00:00:
> >
> 00:00),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0
> > .0,proto=1/0,tos=0/0,ttl=64/0,frag=no),icmp(type=8/0,code=0/0),
> packets:9,
> > bytes:540, used:0.0s, actions:101,3,2
> >
> +skb_priority(0/0),skb_mark(0/0),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),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(0x0
> >
> 800),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/
> > 0,ttl=64/0,frag=no),icmp(type=8/0,code=0/0), packets:9, bytes:540,
> > used:0.0s, actions:101,3,2
> >  ])
> >  AT_CHECK([cat ovs-vswitchd.log | grep -e 'in_port(101).*packets:4' |
> > STRIP_UFID | FILTER_FLOW_DUMP], [0], [dnl
> > -
> >
> skb_priority(0/0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(101),eth(sr
> >
> c=50:54:00:00:00:07/00:00:00:00:00:00,dst=50:54:00:00:00:05/00:00:00:00:
> >
> 00:00),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0
> > .0,proto=1/0,tos=0/0,ttl=64/0,frag=no),icmp(type=8/0,code=0/0),
> packets:4,
> > bytes:240, used:0.0s, actions:100,2,3
> >
> +skb_priority(0/0),skb_mark(0/0),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),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(0x0
> >
> 800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/
> > 0,ttl=64/0,frag=no),icmp(type=8/0,code=0/0), packets:4, bytes:240,
> > used:0.0s, actions:100,2,3
> >  ])
> >
> >  AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
> > @@ -6526,8 +6526,8 @@
> >
> pkt_mark=0,recirc_id=0,dp_hash=0,skb_priority=0,ct_state=0,ct_zone=0,ct_
> > mark=0,c
> >
> >
> pkt_mark=0,recirc_id=0,dp_hash=0,skb_priority=0,ct_state=0,ct_zone=0,ct_
> >
> mark=0,ct_label=0,icmp,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:0
> >
> b,dl_dst=50:54:00:00:00:0c,nw_src=10.0.0.4,nw_dst=10.0.0.3,nw_tos=0,nw
> > _ecn=0,nw_ttl=64,icmp_type=8,icmp_code=0, actions:drop
> >  ])
> >  AT_CHECK([cat ovs-vswitchd.log | STRIP_UFID | FILTER_FLOW_DUMP |
> > grep 'packets:3'], [0], [dnl
> > -
> >
> skb_priority(0),skb_mark(0),recirc_id(0),dp_hash(0),in_port(1),eth(src=50:54:
> >
> 00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=
> > 10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0), packets:3,
> > bytes:180, used:0.0s, actions:2
> > -
> >
> skb_priority(0),skb_mark(0),recirc_id(0),dp_hash(0),in_port(1),eth(src=50:54:
> >
> 00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=
> > 10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0), packets:3,
> > bytes:180, used:0.0s, actions:drop
> >
> +skb_priority(0),skb_mark(0),ct_state(0/0x3f),ct_zone(0),ct_mark(0),ct_label
> >
> (0),recirc_id(0),dp_hash(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:0
> >
> 0:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,t
> > tl=64,frag=no),icmp(type=8,code=0), packets:3, bytes:180, used:0.0s,
> > actions:2
> >
> +skb_priority(0),skb_mark(0),ct_state(0/0x3f),ct_zone(0),ct_mark(0),ct_label
> >
> (0),recirc_id(0),dp_hash(0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:0
> >
> 0:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,t
> > tl=64,frag=no),icmp(type=8,code=0), packets:3, bytes:180, used:0.0s,
> > actions:drop
> >  ])
> >  OVS_VSWITCHD_STOP
> >  AT_CLEANUP
> > @@ -7054,7 +7054,7 @@ recirc_id(0),in_port(1),eth_type(0x1234),
> > packets:5, bytes:300, used:0.0s, actio
> >  ])
> >
> >  AT_CHECK([cat ovs-vswitchd.log | grep 'modify' | STRIP_UFID ], [0], [dnl
> > -dpif|DBG|dummy at ovs-dummy: put[[modify]]
> >
> skb_priority(0/0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(1),eth(src=
> >
> 50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00
> > :00),eth_type(0x1234), actions:push_vlan(vid=4,pcp=0),100
> > +dpif|DBG|dummy at ovs-dummy: put[[modify]]
> >
> skb_priority(0/0),skb_mark(0/0),ct_state(0/0),ct_zone(0/0),ct_mark(0/0),ct_l
> >
> abel(0/0),recirc_id(0),dp_hash(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:
> >
> 00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x1234),
> > actions:push_vlan(vid=4,pcp=0),100
> >  ])
> >  OVS_VSWITCHD_STOP
> >  AT_CLEANUP
> > @@ -7126,8 +7126,8 @@
> >
> recirc_id(0),in_port(1),eth_type(0x8100),vlan(vid=99/0x0,pcp=7/0x0),encap(e
> > th_ty
> >  # are wildcarded.
> >  AT_CHECK([cat ovs-vswitchd.log | grep '\(modify\)\|\(flow_add\)' |
> > STRIP_UFID ], [0], [dnl
> >  dpif_netdev|DBG|flow_add:
> > recirc_id=0,in_port=1,vlan_tci=0x0000,dl_type=0x1234, actions:100
> > -dpif|DBG|dummy at ovs-dummy: put[[modify]]
> >
> skb_priority(0/0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(1),eth(src=
> >
> 50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00
> > :00),eth_type(0x1234)
> > -dpif|DBG|dummy at ovs-dummy: put[[modify]]
> >
> skb_priority(0/0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(1),eth(src=
> >
> 50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00
> > :00),eth_type(0x1234), actions:100
> > +dpif|DBG|dummy at ovs-dummy: put[[modify]]
> >
> skb_priority(0/0),skb_mark(0/0),ct_state(0/0),ct_zone(0/0),ct_mark(0/0),ct_l
> >
> abel(0/0),recirc_id(0),dp_hash(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:
> >
> 00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x1234)
> > +dpif|DBG|dummy at ovs-dummy: put[[modify]]
> >
> skb_priority(0/0),skb_mark(0/0),ct_state(0/0),ct_zone(0/0),ct_mark(0/0),ct_l
> >
> abel(0/0),recirc_id(0),dp_hash(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:
> >
> 00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x1234),
> > actions:100
> >  dpif_netdev|DBG|flow_add:
> > recirc_id=0,in_port=1,vlan_tci=0xf063/0x1000,dl_type=0x1234,
> actions:drop
> >  ])
> >  OVS_VSWITCHD_STOP
> > --
> > 2.1.4
> >
> > _______________________________________________
> > dev mailing list
> > dev at openvswitch.org
> > http://openvswitch.org/mailman/listinfo/dev
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev


More information about the dev mailing list