[PATCH v1 net-next 04/15] net/tls: expose get_netdev_for_sock
Boris Pismenny
borispismenny at gmail.com
Wed Dec 9 02:41:46 EST 2020
On 09/12/2020 3:06, David Ahern wrote:
> On 12/7/20 2:06 PM, Boris Pismenny wrote:
>> get_netdev_for_sock is a utility that is used to obtain
>> the net_device structure from a connected socket.
>>
>> Later patches will use this for nvme-tcp DDP and DDP CRC offloads.
>>
>> Signed-off-by: Boris Pismenny <borisp at mellanox.com>
>> Reviewed-by: Sagi Grimberg <sagi at grimberg.me>
>> ---
>> include/net/sock.h | 17 +++++++++++++++++
>> net/tls/tls_device.c | 20 ++------------------
>> 2 files changed, 19 insertions(+), 18 deletions(-)
>>
>> diff --git a/include/net/sock.h b/include/net/sock.h
>> index 093b51719c69..a8f7393ea433 100644
>> --- a/include/net/sock.h
>> +++ b/include/net/sock.h
>> @@ -2711,4 +2711,21 @@ void sock_set_sndtimeo(struct sock *sk, s64 secs);
>>
>> int sock_bind_add(struct sock *sk, struct sockaddr *addr, int addr_len);
>>
>> +/* Assume that the socket is already connected */
>> +static inline struct net_device *get_netdev_for_sock(struct sock *sk, bool hold)
>> +{
>> + struct dst_entry *dst = sk_dst_get(sk);
>> + struct net_device *netdev = NULL;
>> +
>> + if (likely(dst)) {
>> + netdev = dst->dev;
>
> I noticed you grab this once when the offload is configured. The dst
> device could change - e.g., ECMP, routing changes. I'm guessing that
> does not matter much for the use case - you are really wanting to
> configure queues and zc buffers for a flow with the device; the netdev
> is an easy gateway to get to it.
>
> But, data center deployments tend to have redundant access points --
> either multipath for L3 or bond for L2. For the latter, this offload
> setup won't work - dst->dev will be the bond, the bond does not support
> the offload, so user is out of luck.
>
You are correct, and bond support is currently under review for TLS,
i.e., search for "TLS TX HW offload for Bond". The same approach that
is applied there is relevant here. More generally, this offload is
very similar in concept to TLS offload (tls_device).
More information about the Linux-nvme
mailing list