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