xref: /openbmc/linux/include/net/xdp_sock.h (revision c4c8f39a57bf5057fc51a848d42b7e348ecfa31d)
1 /* SPDX-License-Identifier: GPL-2.0
2  * AF_XDP internal functions
3  * Copyright(c) 2018 Intel Corporation.
4  *
5  * This program is free software; you can redistribute it and/or modify it
6  * under the terms and conditions of the GNU General Public License,
7  * version 2, as published by the Free Software Foundation.
8  *
9  * This program is distributed in the hope it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
12  * more details.
13  */
14 
15 #ifndef _LINUX_XDP_SOCK_H
16 #define _LINUX_XDP_SOCK_H
17 
18 #include <linux/mutex.h>
19 #include <net/sock.h>
20 
21 struct net_device;
22 struct xsk_queue;
23 struct xdp_umem;
24 
25 struct xdp_sock {
26 	/* struct sock must be the first member of struct xdp_sock */
27 	struct sock sk;
28 	struct xsk_queue *rx;
29 	struct net_device *dev;
30 	struct xdp_umem *umem;
31 	struct list_head flush_node;
32 	u16 queue_id;
33 	struct xsk_queue *tx ____cacheline_aligned_in_smp;
34 	/* Protects multiple processes in the control path */
35 	struct mutex mutex;
36 	u64 rx_dropped;
37 };
38 
39 struct xdp_buff;
40 #ifdef CONFIG_XDP_SOCKETS
41 int xsk_generic_rcv(struct xdp_sock *xs, struct xdp_buff *xdp);
42 int xsk_rcv(struct xdp_sock *xs, struct xdp_buff *xdp);
43 void xsk_flush(struct xdp_sock *xs);
44 bool xsk_is_setup_for_bpf_map(struct xdp_sock *xs);
45 #else
46 static inline int xsk_generic_rcv(struct xdp_sock *xs, struct xdp_buff *xdp)
47 {
48 	return -ENOTSUPP;
49 }
50 
51 static inline int xsk_rcv(struct xdp_sock *xs, struct xdp_buff *xdp)
52 {
53 	return -ENOTSUPP;
54 }
55 
56 static inline void xsk_flush(struct xdp_sock *xs)
57 {
58 }
59 
60 static inline bool xsk_is_setup_for_bpf_map(struct xdp_sock *xs)
61 {
62 	return false;
63 }
64 #endif /* CONFIG_XDP_SOCKETS */
65 
66 #endif /* _LINUX_XDP_SOCK_H */
67