On Mon, Mar 24, 2014 at 9:50 AM, Jarno Rajahalme <jrajaha...@nicira.com> wrote:
>
> On Mar 21, 2014, at 1:52 PM, Pravin Shelar <pshe...@nicira.com> wrote:
>
>> On Fri, Feb 21, 2014 at 11:41 AM, Jarno Rajahalme <jrajaha...@nicira.com> 
>> wrote:
>>> Flow SET can set an empty set of actions by not passing any actions.
>>> Previously, we assigned the flow's actions pointer to NULL in this
>>> case, but we never check for the NULL pointer later on.  This patch
>>> modifies this case to allocate a valid but empty set of actions
>>> instead.
>>>
>> Good catch.
>>
>>> Note: If might be prudent to allow missing actions also in
>>> OVS_FLOW_CMD_NEW.
>>>
>> dpif-linux can avoid sending dummy action if we allow that. But for
>> compatibility we need to keep it anyways. So lets keep it as it is.
>>
>>> Signed-off-by: Jarno Rajahalme <jrajaha...@nicira.com>
>>> ---
>>> datapath/datapath.c |    9 ++++++++-
>>> 1 file changed, 8 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/datapath/datapath.c b/datapath/datapath.c
>>> index f7c3391..130300f 100644
>>> --- a/datapath/datapath.c
>>> +++ b/datapath/datapath.c
>>> @@ -810,7 +810,14 @@ static int ovs_flow_cmd_new_or_set(struct sk_buff 
>>> *skb, struct genl_info *info)
>>>                        OVS_NLERR("Flow actions may not be safe on all 
>>> matching packets.\n");
>>>                        goto err_kfree;
>>>                }
>>> -       } else if (info->genlhdr->cmd == OVS_FLOW_CMD_NEW) {
>>> +       } else if (info->genlhdr->cmd == OVS_FLOW_CMD_SET) {
>>> +               /* Need empty actions. */
>>> +               acts = ovs_nla_alloc_flow_actions(0);
>>> +               error = PTR_ERR(acts);
>>> +               if (IS_ERR(acts))
>>> +                       goto error;
>>> +       } else {
>>> +               /* OVS_FLOW_CMD_NEW must have actions. */
>>>                error = -EINVAL;
>>>                goto error;
>>>        }
>>
>> Before this bug (OVS 1.7) set action use to ignore action if they were
>> NULL. In that case set-action was pure stats-clear call. Can we use
>> same semantics now? I mean ignore NULL actions for set-actions.
>
> Do we have this behavior documented somewhere? In include/linux/openvswitch.h 
> we currently have:
>

right, there is not documentation.

>  * @OVS_FLOW_ATTR_ACTIONS: Nested %OVS_ACTION_ATTR_* attributes specifying
>  * the actions to take for packets that match the key.  Always present in
>  * notifications.  Required for %OVS_FLOW_CMD_NEW requests, optional for
>  * %OVS_FLOW_CMD_SET requests.
>
> How about adding:
>
> "An %OVS_FLOW_CMD_SET without %OVS_FLOW_ATTR_ACTIONS will not modify the 
> actions. To clear the actions, an %OVS_FLOW_ATTR_ACTIONS without any nested 
> attributes must be given."
>
Sounds good.

Thanks,
Pravin.
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to