aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorIlya Lesokhin <ilyal@mellanox.com>2018-04-30 03:16:12 -0400
committerDavid S. Miller <davem@davemloft.net>2018-05-01 09:42:46 -0400
commitebf4e808fa0b22e551baf862e17c26c325c068f4 (patch)
treeb2e673a3847e61d60a6ce2e50860bdba771202e5 /include
parent08303c189581c985e60f588ad92a041e46b6e307 (diff)
net: Add Software fallback infrastructure for socket dependent offloads
With socket dependent offloads we rely on the netdev to transform the transmitted packets before sending them to the wire. When a packet from an offloaded socket is rerouted to a different device we need to detect it and do the transformation in software. Signed-off-by: Ilya Lesokhin <ilyal@mellanox.com> Signed-off-by: Boris Pismenny <borisp@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include')
-rw-r--r--include/net/sock.h21
1 files changed, 21 insertions, 0 deletions
diff --git a/include/net/sock.h b/include/net/sock.h
index 74d725fdbe0f..3c568b36ee36 100644
--- a/include/net/sock.h
+++ b/include/net/sock.h
@@ -481,6 +481,11 @@ struct sock {
481 void (*sk_error_report)(struct sock *sk); 481 void (*sk_error_report)(struct sock *sk);
482 int (*sk_backlog_rcv)(struct sock *sk, 482 int (*sk_backlog_rcv)(struct sock *sk,
483 struct sk_buff *skb); 483 struct sk_buff *skb);
484#ifdef CONFIG_SOCK_VALIDATE_XMIT
485 struct sk_buff* (*sk_validate_xmit_skb)(struct sock *sk,
486 struct net_device *dev,
487 struct sk_buff *skb);
488#endif
484 void (*sk_destruct)(struct sock *sk); 489 void (*sk_destruct)(struct sock *sk);
485 struct sock_reuseport __rcu *sk_reuseport_cb; 490 struct sock_reuseport __rcu *sk_reuseport_cb;
486 struct rcu_head sk_rcu; 491 struct rcu_head sk_rcu;
@@ -2332,6 +2337,22 @@ static inline bool sk_fullsock(const struct sock *sk)
2332 return (1 << sk->sk_state) & ~(TCPF_TIME_WAIT | TCPF_NEW_SYN_RECV); 2337 return (1 << sk->sk_state) & ~(TCPF_TIME_WAIT | TCPF_NEW_SYN_RECV);
2333} 2338}
2334 2339
2340/* Checks if this SKB belongs to an HW offloaded socket
2341 * and whether any SW fallbacks are required based on dev.
2342 */
2343static inline struct sk_buff *sk_validate_xmit_skb(struct sk_buff *skb,
2344 struct net_device *dev)
2345{
2346#ifdef CONFIG_SOCK_VALIDATE_XMIT
2347 struct sock *sk = skb->sk;
2348
2349 if (sk && sk_fullsock(sk) && sk->sk_validate_xmit_skb)
2350 skb = sk->sk_validate_xmit_skb(sk, dev, skb);
2351#endif
2352
2353 return skb;
2354}
2355
2335/* This helper checks if a socket is a LISTEN or NEW_SYN_RECV 2356/* This helper checks if a socket is a LISTEN or NEW_SYN_RECV
2336 * SYNACK messages can be attached to either ones (depending on SYNCOOKIE) 2357 * SYNACK messages can be attached to either ones (depending on SYNCOOKIE)
2337 */ 2358 */