[ovs-dev] [PATCH 1/7] lisp: Use IP addresses rather than flow on hash failure.

Jesse Gross jesse at nicira.com
Fri Jun 13 19:12:26 UTC 2014


On Wed, Jun 11, 2014 at 1:50 AM, Thomas Graf <tgraf at suug.ch> wrote:
> On 06/10/14 at 04:47pm, Jesse Gross wrote:
>> When calculating the source port for the UDP header, LISP primarily
>> uses skb_get_hash() but needs a backup in case this fails. The
>> current backup is a hash of the entire flow key but this includes
>> many fields that probably would not be considered to be part of a
>> flow in many situations. It assumes that all fields, including those
>> not used, are zeroed out which will soon not be the case.
>>
>> This switches to using a hash of the IP addresses instead, which
>> solves both problems. These should always be present since LISP
>> encapsulates L3 packets.
>>
>> Signed-off-by: Jesse Gross <jesse at nicira.com>
>> ---
>>  datapath/vport-lisp.c | 8 ++++++--
>>  1 file changed, 6 insertions(+), 2 deletions(-)
>>
>> diff --git a/datapath/vport-lisp.c b/datapath/vport-lisp.c
>> index a1e2b2b..af9a71e 100644
>> --- a/datapath/vport-lisp.c
>> +++ b/datapath/vport-lisp.c
>> @@ -173,8 +173,12 @@ static u16 get_src_port(struct net *net, struct sk_buff *skb)
>>       if (!hash) {
>>               struct sw_flow_key *pkt_key = OVS_CB(skb)->pkt_key;
>>
>> -             hash = jhash2((const u32 *)pkt_key,
>> -                         sizeof(*pkt_key) / sizeof(u32), 0);
>> +             if (skb->protocol == htons(ETH_P_IP))
>> +                     hash = jhash2((const u32 *)&pkt_key->ipv4.addr,
>> +                                sizeof(pkt_key->ipv4.addr) / sizeof(u32), 0);
>> +             else
>> +                     hash = jhash2((const u32 *)&pkt_key->ipv6.addr,
>> +                                sizeof(pkt_key->ipv6.addr) / sizeof(u32), 0);
>
> Perhaps check for ETH_P_IPV6 and WARN() on the else branch? OTOH,
> unlikely that is ever to happen ;-)
>
> Acked-by: Thomas Graf <tgraf at suug.ch>

I decided to push this patch now because I think it is right thing to
do independent of the rest of the series.



More information about the dev mailing list