On Mon, Jul 28, 2014 at 12:38 PM, Pravin Shelar <pshe...@nicira.com> wrote:
> On Mon, Jul 28, 2014 at 11:46 AM, Andy Zhou <az...@nicira.com> wrote:
>> Does unmasked_key also not memset to zero, like key? if yes, is there
>> a possibility of mismatch when calling
>> ovs_flow_cmp_unmasked_key?
>>
> unmasked_key is always memset to zero before building the key from
> netlink attributes.

Right, It calls ovs_match_init() to make sure unmasked keys are set to zero.

Acked-by: Andy Zhou <az...@nicira.com>

>
>> On Sun, Jul 27, 2014 at 11:55 AM, Pravin B Shelar <pshe...@nicira.com> wrote:
>>> Exact match flow lookup is always done under ovs lock. So use
>>> ovsl_dereference() API for rcu access.
>>>
>>> Signed-off-by: Pravin B Shelar <pshe...@nicira.com>
>>> ---
>>>  datapath/flow_table.c | 17 +++++++----------
>>>  1 file changed, 7 insertions(+), 10 deletions(-)
>>>
>>> diff --git a/datapath/flow_table.c b/datapath/flow_table.c
>>> index 21f67bf..cfd5a84 100644
>>> --- a/datapath/flow_table.c
>>> +++ b/datapath/flow_table.c
>>> @@ -666,23 +666,20 @@ struct sw_flow *ovs_flow_tbl_lookup(struct flow_table 
>>> *tbl,
>>>  struct sw_flow *ovs_flow_tbl_lookup_exact(struct flow_table *tbl,
>>>                                           struct sw_flow_match *match)
>>>  {
>>> -       struct table_instance *ti = rcu_dereference_ovsl(tbl->ti);
>>> -       struct mask_array *ma = rcu_dereference_ovsl(tbl->mask_array);
>>> -       struct sw_flow *flow;
>>> -       u32 __always_unused n_mask_hit;
>>> +       struct mask_array *ma = ovsl_dereference(tbl->mask_array);
>>>         int i;
>>>
>>>         /* Always called under ovs-mutex. */
>>>         for (i = 0; i < ma->count; i++) {
>>> +               struct table_instance *ti = ovsl_dereference(tbl->ti);
>>> +               u32 __always_unused n_mask_hit;
>>>                 struct sw_flow_mask *mask;
>>> +               struct sw_flow *flow;
>>>
>>>                 mask = ovsl_dereference(ma->masks[i]);
>>> -               if (mask) {
>>> -                       flow = masked_flow_lookup(ti, match->key, mask, 
>>> &n_mask_hit);
>>> -                       if (flow && ovs_flow_cmp_unmasked_key(flow, match)) 
>>> { /* Found */
>>> -                               return flow;
>>> -                       }
>>> -               }
>>> +               flow = masked_flow_lookup(ti, match->key, mask, 
>>> &n_mask_hit);
>>> +               if (flow && ovs_flow_cmp_unmasked_key(flow, match))
>>> +                       return flow;
>>>         }
>>>         return NULL;
>>>  }
>>> --
>>> 1.9.3
>>>
>>> _______________________________________________
>>> dev mailing list
>>> dev@openvswitch.org
>>> http://openvswitch.org/mailman/listinfo/dev
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to