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? > + 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