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

Fischetti, Antonio antonio.fischetti at intel.com
Mon Jan 25 16:25:06 UTC 2016


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


More information about the dev mailing list