On 26/04/2016 16:37, "Flavio Leitner" <f...@sysclose.org> wrote:
>On Fri, Apr 15, 2016 at 05:02:41PM -0700, Daniele Di Proietto wrote:
>> 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>
>> ---
>> lib/dpif-netdev.c | 68
>> +++++++++++++++++++++++++++++++++++++++++++++------
>> tests/dpif-netdev.at | 14 +++++------
>> tests/ofproto-dpif.at | 20 +++++++--------
>> 3 files changed, 77 insertions(+), 25 deletions(-)
>>
>> diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
>> index 1e8a37c..436359a 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 */
>> @@ -1965,9 +1980,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;
>> }
>>
>> @@ -2604,6 +2617,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);
>> +
>
>Do you have any results to share? Just curious.
>
>Acked-by: Flavio Leitner <f...@sysclose.org>
As also pointed out by Joe this probably need to be revisited.
I'll do more testing. Thanks!
>
>> tnl_neigh_cache_run();
>> tnl_port_map_run();
>> new_tnl_seq = seq_read(tnl_conf_seq);
>> @@ -3850,12 +3866,48 @@ 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_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(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),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)
>> ])
>> 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(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),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)
>> ])
>> 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:00:00:09,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>
>> @@ -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(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),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)
>> ])
>> 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),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>
>> +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),icmp(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(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),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)
>> ])
>> 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(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(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),ct_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),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 9ac2e2a..90d7702 100644
>> --- a/tests/ofproto-dpif.at
>> +++ b/tests/ofproto-dpif.at
>> @@ -6036,12 +6036,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=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: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=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(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: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
>> ])
>>
>> 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: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
>> ])
>>
>> OVS_VSWITCHD_STOP
>> @@ -6194,10 +6194,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/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(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/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(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
>> @@ -6797,8 +6797,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:0b,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([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(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/0xff),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: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),ct_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
>> @@ -7333,7 +7333,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: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
>> @@ -7405,8 +7405,8 @@
>> recirc_id(0),in_port(1),eth_type(0x8100),vlan(vid=99/0x0,pcp=7/0x0),encap(eth_ty
>> # 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: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),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/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@openvswitch.org
>> http://openvswitch.org/mailman/listinfo/dev
>
>--
>fbl
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev