[ovs-dev] [PATCH] datapath: Add hash info to upcall.

Ilya Maximets i.maximets at ovn.org
Mon May 25 15:40:14 UTC 2020


On 5/24/20 8:41 PM, Han Zhou wrote:
> 
> 
> On Thu, May 7, 2020 at 11:21 PM Tonghao Zhang <xiangxia.m.yue at gmail.com <mailto:xiangxia.m.yue at gmail.com>> wrote:
>>
>> On Mon, May 4, 2020 at 9:02 AM Han Zhou <hzhou at ovn.org <mailto:hzhou at ovn.org>> wrote:
>> >
>> > This patch backports below upstream patches, and add __skb_set_hash
>> > to compat for older kernels.
>> >
>> > commit b5ab1f1be6180a2e975eede18731804b5164a05d
>> > Author: Jakub Kicinski <kuba at kernel.org <mailto:kuba at kernel.org>>
>> > Date:   Mon Mar 2 21:05:18 2020 -0800
>> >
>> >     openvswitch: add missing attribute validation for hash
>> >
>> >     Add missing attribute validation for OVS_PACKET_ATTR_HASH
>> >     to the netlink policy.
>> >
>> >     Fixes: bd1903b7c459 ("net: openvswitch: add hash info to upcall")
>> >     Signed-off-by: Jakub Kicinski <kuba at kernel.org <mailto:kuba at kernel.org>>
>> >     Reviewed-by: Greg Rose <gvrose8192 at gmail.com <mailto:gvrose8192 at gmail.com>>
>> >     Signed-off-by: David S. Miller <davem at davemloft.net <mailto:davem at davemloft.net>>
>> >
>> > commit bd1903b7c4596ba6f7677d0dfefd05ba5876707d
>> > Author: Tonghao Zhang <xiangxia.m.yue at gmail.com <mailto:xiangxia.m.yue at gmail.com>>
>> > Date:   Wed Nov 13 23:04:49 2019 +0800
>> >
>> >     net: openvswitch: add hash info to upcall
>> >
>> >     When using the kernel datapath, the upcall don't
>> >     include skb hash info relatived. That will introduce
>> >     some problem, because the hash of skb is important
>> >     in kernel stack. For example, VXLAN module uses
>> >     it to select UDP src port. The tx queue selection
>> >     may also use the hash in stack.
>> >
>> >     Hash is computed in different ways. Hash is random
>> >     for a TCP socket, and hash may be computed in hardware,
>> >     or software stack. Recalculation hash is not easy.
>> >
>> >     Hash of TCP socket is computed:
>> >     tcp_v4_connect
>> >         -> sk_set_txhash (is random)
>> >
>> >     __tcp_transmit_skb
>> >         -> skb_set_hash_from_sk
>> >
>> >     There will be one upcall, without information of skb
>> >     hash, to ovs-vswitchd, for the first packet of a TCP
>> >     session. The rest packets will be processed in Open vSwitch
>> >     modules, hash kept. If this tcp session is forward to
>> >     VXLAN module, then the UDP src port of first tcp packet
>> >     is different from rest packets.
>> >
>> >     TCP packets may come from the host or dockers, to Open vSwitch.
>> >     To fix it, we store the hash info to upcall, and restore hash
>> >     when packets sent back.
>> >
>> >     +---------------+          +-------------------------+
>> >     |   Docker/VMs  |          |     ovs-vswitchd        |
>> >     +----+----------+          +-+--------------------+--+
>> >          |                       ^                    |
>> >          |                       |                    |
>> >          |                       |  upcall            v restore packet hash
>> > (not recalculate)
>> >          |                     +-+--------------------+--+
>> >          |  tap netdev         |                         |   vxlan module
>> >          +--------------->     +-->  Open vSwitch ko     +-->
>> >            or internal type    |                         |
>> >                                +-------------------------+
>> >
>> >     Reported-at: https://mail.openvswitch.org/pipermail/ovs-dev/2019-October/364062.html
>> >     Signed-off-by: Tonghao Zhang <xiangxia.m.yue at gmail.com <mailto:xiangxia.m.yue at gmail.com>>
>> >     Acked-by: Pravin B Shelar <pshelar at ovn.org <mailto:pshelar at ovn.org>>
>> >     Signed-off-by: David S. Miller <davem at davemloft.net <mailto:davem at davemloft.net>>
>> >
>> > Cc: Tonghao Zhang <xiangxia.m.yue at gmail.com <mailto:xiangxia.m.yue at gmail.com>>
>> > Signed-off-by: Han Zhou <hzhou at ovn.org <mailto:hzhou at ovn.org>>
>> Reviewed-by: Tonghao Zhang <xiangxia.m.yue at gmail.com <mailto:xiangxia.m.yue at gmail.com>>
> 
> Thanks review from Tonghao and Greg.
> It has been 3 weeks, so cc some maintainers and pop it up.


Hi.  Thanks for working on this!
There is an issue while building with 3.16 kernel:

ovs/datapath/linux/compat/include/linux/skbuff.h: In function ‘__skb_set_hash’:
ovs/datapath/linux/compat/include/linux/skbuff.h:464:5: error: ‘struct sk_buff’ has no member named ‘sw_hash’
  skb->sw_hash = is_sw;
     ^

https://travis-ci.org/github/igsilya/ovs/jobs/690987401

Best regards, Ilya Maximets.


More information about the dev mailing list