[ovs-dev] [recirculation 2/3] datapath: add hash action

Pravin Shelar pshelar at nicira.com
Thu Apr 17 02:45:41 UTC 2014


On Thu, Apr 17, 2014 at 8:12 AM, Jesse Gross <jesse at nicira.com> wrote:
> On Wed, Apr 16, 2014 at 7:39 PM, Pravin Shelar <pshelar at nicira.com> wrote:
>> On Wed, Apr 16, 2014 at 2:09 AM, Andy Zhou <azhou at nicira.com> wrote:
>>> Thanks for the review. I will send V2.
>>>
>>> On Tue, Apr 15, 2014 at 7:14 AM, Pravin Shelar <pshelar at nicira.com> wrote:
>>>> On Sat, Apr 12, 2014 at 3:30 AM, Andy Zhou <azhou at nicira.com> wrote:
>>>>> Implements Linux kernel datapath hash action. Hash action computes
>>>>> hash and stores it into current packet key.
>>>>>
>>>>> Signed-off-by: Andy Zhou <azhou at nicira.com>
>>>>>
>>>>>         [OVS_KEY_ATTR_ARP] = sizeof(struct ovs_key_arp),
>>>>>         [OVS_KEY_ATTR_ND] = sizeof(struct ovs_key_nd),
>>>>> +       [OVS_KEY_ATTR_DP_HASH] = sizeof(u32),
>>>>>         [OVS_KEY_ATTR_TUNNEL] = -1,
>>>>>  };
>>>>>
>>>>> @@ -455,6 +461,19 @@ static int ipv4_tun_to_nlattr(struct sk_buff *skb,
>>>>>  static int metadata_from_nlattrs(struct sw_flow_match *match,  u64 *attrs,
>>>>>                                  const struct nlattr **a, bool is_mask)
>>>>>  {
>>>>> +
>>>>> +       if (*attrs & (1ULL << OVS_KEY_ATTR_DP_HASH)) {
>>>>> +               u32 hash_val = nla_get_u32(a[OVS_KEY_ATTR_DP_HASH]);
>>>>> +
>>>>> +               if (!is_mask && !hash_val) {
>>>>> +                       OVS_NLERR("Hash value can not be zero\n");
>>>>> +                       return -EINVAL;
>>>>> +               }
>>>>> +
>>>>> +               SW_FLOW_KEY_PUT(match, dp_hash, hash_val, is_mask);
>>>>> +               *attrs &= ~(1ULL << OVS_KEY_ATTR_DP_HASH);
>>>>> +       }
>>>> Is hash allowed to be partially masked?
>>> Yes.
>>
>> How can arbitrary hash value which is outside control of vswitchd can
>> be partially masked. I think we can either exact match it or
>> completely wildcard. Am I missing something?
>
> If you are trying to split between bond slaves then you probably want
> to mask off some number of bits based on the number of interfaces to
> randomly divide the traffic.
I see.
But then we should have some control over hash function? Or is it too
expensive ?



More information about the dev mailing list