It looks ok to me.
Thanks.

Acked-by: Antonio Fischetti <antonio.fische...@intel.com>


> -----Original Message-----
> From: Daniele Di Proietto [mailto:diproiet...@vmware.com]
> Sent: Wednesday, May 25, 2016 9:57 PM
> To: Fischetti, Antonio <antonio.fische...@intel.com>
> Cc: dev@openvswitch.org
> Subject: Re: [ovs-dev] [PATCH v3 08/16] dpif-netdev: Execute
> conntrack action.
> 
> 
> 
> 
> 
> 
> On 24/05/2016 08:52, "Fischetti, Antonio"
> <antonio.fische...@intel.com> wrote:
> 
> >Hi Daniele, one question below.
> >
> >Thanks,
> >Antonio
> >
> >
> >> -----Original Message-----
> >> From: dev [mailto:dev-boun...@openvswitch.org] On Behalf Of
> Daniele
> >> Di Proietto
> >> Sent: Tuesday, May 17, 2016 1:57 AM
> >> To: dev@openvswitch.org
> >> Subject: [ovs-dev] [PATCH v3 08/16] dpif-netdev: Execute conntrack
> >> action.
> >>
> >> This commit implements the OVS_ACTION_ATTR_CT action in dpif-
> netdev.
> >>
> >> To allow ofproto-dpif to detect the conntrack feature, flow_put
> will
> >> not
> >> discard anymore flows with ct_* fields set. We still shouldn't
> allow
> >> flows with NAT bits set, since there is no support for NAT.
> >>
> >> Signed-off-by: Daniele Di Proietto <diproiet...@vmware.com>
> >> Acked-by: Flavio Leitner <f...@sysclose.org>
> >> ---
> >>  FAQ.md                |  2 +-
> >>  NEWS                  |  2 ++
> >>  lib/dpif-netdev.c     | 63
> >> ++++++++++++++++++++++++++++++++++++++++++++-------
> >>  tests/dpif-netdev.at  | 14 ++++++------
> >>  tests/ofproto-dpif.at | 20 ++++++++--------
> >>  5 files changed, 75 insertions(+), 26 deletions(-)
> >>
> >> diff --git a/FAQ.md b/FAQ.md
> >> index 5e95ccc..c111c32 100644
> >> --- a/FAQ.md
> >> +++ b/FAQ.md
> >> @@ -193,7 +193,7 @@ A: Open vSwitch supports different datapaths
> on
> >> different platforms.  Each
> >>  Feature               | Linux upstream | Linux OVS tree |
> Userspace
> >> | Hyper-V |
> >>  ----------------------|:--------------:|:--------------:|:-------
> --
> >> :|:-------:|
> >>  NAT                   |      4.6       |       NO       |    NO
> >> |   NO    |
> >> -Connection tracking   |      4.3       |       YES      |    NO
> >> | PARTIAL |
> >> +Connection tracking   |      4.3       |       YES      |
> PARTIAL
> >> | PARTIAL |
> >>  Tunnel - LISP         |      NO        |       YES      |    NO
> >> |   NO    |
> >>  Tunnel - STT          |      NO        |       YES      |    NO
> >> |   YES   |
> >>  Tunnel - GRE          |      3.11      |       YES      |    YES
> >> |   YES   |
> >> diff --git a/NEWS b/NEWS
> >> index 4e81cad..fa367d2 100644
> >> --- a/NEWS
> >> +++ b/NEWS
> >> @@ -32,6 +32,8 @@ Post-v2.5.0
> >>       * DB entries have been added for many of the DPDK EAL
> command
> >> line
> >>         arguments. Additional arguments can be passed via the
> dpdk-
> >> extra
> >>         entry.
> >> +     * Basic connection tracking for the userspace datapath (no
> ALG,
> >> +       fragmentation or NAT support yet)
> >>     - ovs-benchmark: This utility has been removed due to lack of
> use
> >> and
> >>       bitrot.
> >>     - ovs-appctl:
> >> diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
> >> index 33fd228..9cd985a 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 "coverage.h"
> >>  #include "csum.h"
> >>  #include "dp-packet.h"
> >> @@ -89,9 +90,17 @@ static struct shash dp_netdevs
> >> OVS_GUARDED_BY(dp_netdev_mutex)
> >>
> >>  static struct vlog_rate_limit upcall_rl =
> VLOG_RATE_LIMIT_INIT(600,
> >> 600);
> >>
> >> +#define DP_NETDEV_CS_SUPPORTED_MASK (CS_NEW | CS_ESTABLISHED |
> >> CS_RELATED \
> >> +                                     | CS_INVALID | CS_REPLY_DIR
> |
> >> CS_TRACKED)
> >> +#define DP_NETDEV_CS_UNSUPPORTED_MASK
> >> (~(uint32_t)DP_NETDEV_CS_SUPPORTED_MASK)
> >> +
> >>  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 */
> >> @@ -224,6 +233,8 @@ struct dp_netdev {
> >>      /* Cpu mask for pin of pmd threads. */
> >>      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,
> >> @@ -906,6 +917,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);
> >> @@ -976,6 +989,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) {
> >>          /* PMD threads are destroyed here. do_del_port() cannot
> >> quiesce */
> >> @@ -1963,9 +1978,7 @@ 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)) {
> >> +    if (flow->ct_state & DP_NETDEV_CS_UNSUPPORTED_MASK) {
> >>          return EINVAL;
> >>      }
> >>
> >> @@ -3848,12 +3861,46 @@ 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;
> >> +
> >
> >
> >[Antonio F] In the previous patch version there was a comment
> >that we could avoid parsing the ct attributes on every packet.
> >Also suggesting to use a structure like in the kernel
> implementation.
> >Is that option still valid?
> 
> I've decided to remove the comment after some discussion with Joe:
> 
> http://openvswitch.org/pipermail/dev/2016-April/069831.html
> 
> I tried implementing it, but it doesn't seem to make a performance
> difference.  Plus, maintaining another action format seems to
> complicate things a lot.
> 
> Thanks,
> 
> Daniele


[Antonio F] That's fine, it makes sense.


> 
> >
> >
> >> +        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_NAT:
> >> +            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 12468f4..8c118e5 100644
> >> --- a/tests/dpif-netdev.at
> >> +++ b/tests/dpif-netdev.at
> >> @@ -86,7 +86,7 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p1
> >> 'in_port(1),eth(src=50:54:00:00:00:
> >>  sleep 1
> >>
> >>  AT_CHECK([grep -A 1 'miss upcall' ovs-vswitchd.log | tail -n 1],
> >> [0], [dnl
> >> -
> >>
> skb_priority(0),skb_mark(0),recirc_id(0),dp_hash(0),in_port(1),eth(sr
> >>
> c=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_lab
> >>
> el(0),recirc_id(0),dp_hash(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,dst=10.0.0.1,
> >> proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)
> >>  ])
> >>  AT_CHECK([filter_flow_install < ovs-vswitchd.log | 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>
> >> @@ -99,7 +99,7 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p1
> >> 'in_port(1),eth(src=50:54:00:00:00:
> >>  sleep 1
> >>
> >>  AT_CHECK([grep -A 1 'miss upcall' ovs-vswitchd.log | tail -n 1],
> >> [0], [dnl
> >> -
> >>
> skb_priority(0),skb_mark(0),recirc_id(0),dp_hash(0),in_port(1),eth(sr
> >>
> c=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_lab
> >>
> el(0),recirc_id(0),dp_hash(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,dst=10.0.0.1,
> >> proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)
> >>  ])
> >>  AT_CHECK([filter_flow_install < ovs-vswitchd.log | 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:0
> >>
> 0:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_t
> >> os=0,nw_ecn=0,nw_ttl=64,icmp_type=8,icmp_code=0, actions: <del>
> >> @@ -123,10 +123,10 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p1
> >> 'in_port(1),eth(src=50:54:00:00:00:
> >>  sleep 1
> >>
> >>  AT_CHECK([grep -A 1 'miss upcall' ovs-vswitchd.log | tail -n 1],
> >> [0], [dnl
> >> -
> >>
> skb_priority(0),skb_mark(0),recirc_id(0),dp_hash(0),in_port(1),eth(sr
> >>
> c=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_lab
> >>
> el(0),recirc_id(0),dp_hash(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,dst=10.0.0.1,
> >> proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)
> >>  ])
> >>  AT_CHECK([filter_flow_dump < ovs-vswitchd.log | 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),ipv
> >>
> 4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/
> >> 0,frag=no),icmp(type=8/0,code=0/0), packets:0, bytes:0,
> used:never,
> >> actions: <del>
> >>
> +skb_priority(0/0),skb_mark(0/0),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,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),icm
> >> p(type=8/0,code=0/0), packets:0, bytes:0, used:never, actions:
> <del>
> >>  ])
> >>
> >>  # Now, the same again without megaflows.
> >> @@ -138,11 +138,11 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p1
> >> 'in_port(1),eth(src=50:54:00:00:00:
> >>  sleep 1
> >>
> >>  AT_CHECK([grep -A 1 'miss upcall' ovs-vswitchd.log | tail -n 1],
> >> [0], [dnl
> >> -
> >>
> skb_priority(0),skb_mark(0),recirc_id(0),dp_hash(0),in_port(1),eth(sr
> >>
> c=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_lab
> >>
> el(0),recirc_id(0),dp_hash(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,dst=10.0.0.1,
> >> proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)
> >>  ])
> >>  AT_CHECK([filter_flow_dump < ovs-vswitchd.log | strip_xout], [0],
> >> [dnl
> >> -
> >>
> skb_priority(0),skb_mark(0),recirc_id(0),dp_hash(0),in_port(1),eth(sr
> >>
> c=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),ipv
> >>
> 4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/
> >> 0,frag=no),icmp(type=8/0,code=0/0), packets:0, bytes:0,
> used:never,
> >> actions: <del>
> >>
> +skb_priority(0),skb_mark(0),ct_state(0/0xff),ct_zone(0),ct_mark(0),c
> >>
> t_label(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),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,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),icm
> >> p(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 18e5e22..25f4e39 100644
> >> --- a/tests/ofproto-dpif.at
> >> +++ b/tests/ofproto-dpif.at
> >> @@ -6046,12 +6046,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:00:00),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=19
> >>
> 2.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no),icmp(type=8/0,c
> >> ode=0/0), packets:0, bytes:0, used:never, actions:drop
> >> -
> >>
> skb_priority(0/0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(p2)
> >>
> ,eth(src=50:54:00:00:00:07/00:00:00:00:00:00,dst=50:54:00:00:00:05/00
> >>
> :00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=19
> >>
> 2.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no),icmp(type=0/0,c
> >> ode=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:0
> >>
> 0),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),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:0
> >>
> 0),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.
> >> 0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no),icmp(type=0/0,code=0/0),
> >> packets:0, bytes:0, used:never, actions:drop
> >>  ])
> >>
> >>  AT_CHECK([ovs-appctl dpif/dump-flows -m br1 | 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:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.
> >>
> 0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no),icmp(type=8/0,code=0/
> >> 0), packets:0, bytes:0, used:never, actions:drop
> >>
> +skb_priority(0/0),skb_mark(0/0),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:0
> >>
> 0),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,pr
> >> oto=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
> >> @@ -6204,10 +6204,10 @@
> >> recirc_id=0,ip,in_port=101,vlan_tci=0x0000,nw_frag=no,
> >> actions:100,2,3
> >>  ])
> >>
> >>  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),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/0
> >>
> 0:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=1
> >>
> 92.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:5
> >>
> 4:00:00:00:05/00:00:00:00:00:00,dst=50:54:00:00:00:07/00:00:00:00:00:
> >>
> 00),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0
> >> .0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no),icmp(type=8/0,code=0/0),
> >> packets:9, bytes:540, used:0.0s, actions:101,3,2
> >>  ])
> >>  AT_CHECK([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),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/0
> >>
> 0:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=1
> >>
> 92.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:5
> >>
> 4:00:00:00:07/00:00:00:00:00:00,dst=50:54:00:00:00:05/00:00:00:00:00:
> >>
> 00),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0
> >> .0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no),icmp(type=8/0,code=0/0),
> >> packets:4, bytes:240, used:0.0s, actions:100,2,3
> >>  ])
> >>
> >>  AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
> >> @@ -6807,8 +6807,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:0
> >>
> 0:00:0b,dl_dst=50:54:00:00:00:0c,nw_src=10.0.0.4,nw_dst=10.0.0.3,nw_t
> >> os=0,nw_ecn=0,nw_ttl=64,icmp_type=8,icmp_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),recirc_id(0),dp_hash(0),in_port(1),eth(sr
> >>
> c=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(sr
> >>
> c=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/0xff),ct_zone(0),ct_mark(0),c
> >>
> t_label(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),ct_state(0/0xff),ct_zone(0),ct_mark(0),c
> >>
> t_label(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
> >>  ])
> >>  OVS_VSWITCHD_STOP
> >>  AT_CLEANUP
> >> @@ -7412,7 +7412,7 @@ recirc_id(0),in_port(1),eth_type(0x1234),
> >> packets:5, bytes:300, used:0.0s, actio
> >>  ])
> >>
> >>  AT_CHECK([grep 'modify' ovs-vswitchd.log | strip_ufid ], [0],
> [dnl
> >> -dpif|DBG|dummy@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@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_label(0/0),recirc_id(0),dp_hash(0/0),in_port(1),eth(src=50:54:0
> >>
> 0: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
> >> @@ -7484,8 +7484,8 @@
> >>
> recirc_id(0),in_port(1),eth_type(0x8100),vlan(vid=99,pcp=7/0x0),encap
> >> (eth_type(0
> >>  # are wildcarded.
> >>  AT_CHECK([grep '\(modify\)\|\(flow_add\)' ovs-vswitchd.log |
> >> 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@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@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@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_label(0/0),recirc_id(0),dp_hash(0/0),in_port(1),eth(src=50:54:0
> >>
> 0: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@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_label(0/0),recirc_id(0),dp_hash(0/0),in_port(1),eth(src=50:54:0
> >>
> 0: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,dl_vlan=99,dl_type=0x1234, actions:drop
> >>  ])
> >>  OVS_VSWITCHD_STOP
> >> --
> >> 2.1.4
> >>
> >> _______________________________________________
> >> dev mailing list
> >> dev@openvswitch.org
> >> http://openvswitch.org/mailman/listinfo/dev
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to