From: Nikolay Aleksandrov <nikolay@redhat.com>
To: Pravin B Shelar <pshelar@nicira.com>, davem@davemloft.net
Cc: netdev@vger.kernel.org, Andy Zhou <azhou@nicira.com>
Subject: Re: [PATCH net-next v2 05/11] openvswitch: Add recirc action
Date: Tue, 15 Jul 2014 19:47:18 +0200 [thread overview]
Message-ID: <53C56926.8@redhat.com> (raw)
In-Reply-To: <53C567EF.60208@redhat.com>
On 07/15/2014 07:42 PM, Nikolay Aleksandrov wrote:
> On 07/15/2014 07:15 PM, Pravin B Shelar wrote:
>> From: Andy Zhou <azhou@nicira.com>
>>
>> Recirculation implementation for Linux kernel data path.
>>
>> Signed-off-by: Andy Zhou <azhou@nicira.com>
>> Acked-by: Jesse Gross <jesse@nicira.com>
>> Signed-off-by: Pravin B Shelar <pshelar@nicira.com>
>> ---
>> include/uapi/linux/openvswitch.h | 2 ++
>> net/openvswitch/actions.c | 46 +++++++++++++++++++++++++++++++++++++-
>> net/openvswitch/datapath.c | 48 ++++++++++++++++++++++++++++------------
>> net/openvswitch/datapath.h | 8 +++++--
>> net/openvswitch/flow.h | 1 +
>> net/openvswitch/flow_netlink.c | 16 ++++++++++++++
>> 6 files changed, 104 insertions(+), 17 deletions(-)
>> };
> <snip>
>> diff --git a/net/openvswitch/actions.c b/net/openvswitch/actions.c
>> index 56c22f0..8875697 100644
>> --- a/net/openvswitch/actions.c
>> +++ b/net/openvswitch/actions.c
>> @@ -1,5 +1,5 @@
>> /*
>> - * Copyright (c) 2007-2013 Nicira, Inc.
>> + * Copyright (c) 2007-2014 Nicira, Inc.
>> *
>> * This program is free software; you can redistribute it and/or
>> * modify it under the terms of version 2 of the GNU General Public
>> @@ -520,6 +520,26 @@ static int execute_set_action(struct sk_buff *skb,
>> return err;
>> }
>>
>> +static int execute_recirc(struct datapath *dp, struct sk_buff *skb,
>> + const struct nlattr *a)
>> +{
>> + struct sw_flow_key recirc_key;
>> + const struct vport *p = OVS_CB(skb)->input_vport;
>> + uint32_t hash = OVS_CB(skb)->pkt_key->ovs_flow_hash;
>> + int err;
>> +
>> + err = ovs_flow_extract(skb, p->port_no, &recirc_key);
>> + if (err)
>> + return err;
>> +
>> + recirc_key.ovs_flow_hash = hash;
>> + recirc_key.recirc_id = nla_get_u32(a);
>> +
>> + ovs_dp_process_packet_with_key(skb, &recirc_key);
>> +
>> + return 0;
>> +}
>> +
>> /* Execute a list of actions against 'skb'. */
>> static int do_execute_actions(struct datapath *dp, struct sk_buff *skb,
>> const struct nlattr *attr, int len, bool keep_skb)
>> @@ -564,6 +584,30 @@ static int do_execute_actions(struct datapath *dp, struct sk_buff *skb,
>> err = pop_vlan(skb);
>> break;
>>
>> + case OVS_ACTION_ATTR_RECIRC: {
>> + struct sk_buff *recirc_skb;
>> + const bool last_action = (a->nla_len == rem);
>> +
>> + if (__this_cpu_read(net_xmit_recursion) > NET_RECURSION_LIMIT) {
>> + net_crit_ratelimited("Net recursion limit readched\n");
>> + break;
>> + }
>> +
>> + if (!last_action || keep_skb)
>> + recirc_skb = skb_clone(skb, GFP_ATOMIC);
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> skb_clone can return NULL and later recirc_skb will be dereferenced in
> execute_recirc(). Shouldn't there be a NULL check in this "if" case ?
>
>
Nevermind, I saw patch 10 and 11 later :-)
>> + else
>> + recirc_skb = skb;
>> +
>> + __this_cpu_inc(net_xmit_recursion);
>> + err = execute_recirc(dp, recirc_skb, a);
>> + __this_cpu_dec(net_xmit_recursion);
>> +
>> + if (last_action || err)
>> + return err;
>> +
>> + break;
>> + }
>> +
>> case OVS_ACTION_ATTR_SET:
>> err = execute_set_action(skb, nla_data(a));
>> break;
> <snip>
>
> --
> To unsubscribe from this list: send the line "unsubscribe netdev" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
prev parent reply other threads:[~2014-07-15 17:47 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-15 17:15 [PATCH net-next v2 05/11] openvswitch: Add recirc action Pravin B Shelar
2014-07-15 17:42 ` Nikolay Aleksandrov
2014-07-15 17:47 ` Nikolay Aleksandrov [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=53C56926.8@redhat.com \
--to=nikolay@redhat.com \
--cc=azhou@nicira.com \
--cc=davem@davemloft.net \
--cc=netdev@vger.kernel.org \
--cc=pshelar@nicira.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.