xref: /linux/include/net/xdp_sock.h (revision dac09149)
1*dac09149SBjörn Töpel /* SPDX-License-Identifier: GPL-2.0 */
2*dac09149SBjörn Töpel /* AF_XDP internal functions
3c0c77d8fSBjörn Töpel  * Copyright(c) 2018 Intel Corporation.
4c0c77d8fSBjörn Töpel  */
5c0c77d8fSBjörn Töpel 
6c0c77d8fSBjörn Töpel #ifndef _LINUX_XDP_SOCK_H
7c0c77d8fSBjörn Töpel #define _LINUX_XDP_SOCK_H
8c0c77d8fSBjörn Töpel 
9c0c77d8fSBjörn Töpel #include <linux/mutex.h>
10c0c77d8fSBjörn Töpel #include <net/sock.h>
11c0c77d8fSBjörn Töpel 
12b9b6b68eSBjörn Töpel struct net_device;
13b9b6b68eSBjörn Töpel struct xsk_queue;
14c0c77d8fSBjörn Töpel struct xdp_umem;
15c0c77d8fSBjörn Töpel 
16c0c77d8fSBjörn Töpel struct xdp_sock {
17c0c77d8fSBjörn Töpel 	/* struct sock must be the first member of struct xdp_sock */
18c0c77d8fSBjörn Töpel 	struct sock sk;
19b9b6b68eSBjörn Töpel 	struct xsk_queue *rx;
20b9b6b68eSBjörn Töpel 	struct net_device *dev;
21c0c77d8fSBjörn Töpel 	struct xdp_umem *umem;
22fbfc504aSBjörn Töpel 	struct list_head flush_node;
23965a9909SMagnus Karlsson 	u16 queue_id;
24f6145903SMagnus Karlsson 	struct xsk_queue *tx ____cacheline_aligned_in_smp;
25c0c77d8fSBjörn Töpel 	/* Protects multiple processes in the control path */
26c0c77d8fSBjörn Töpel 	struct mutex mutex;
27c497176cSBjörn Töpel 	u64 rx_dropped;
28c0c77d8fSBjörn Töpel };
29c0c77d8fSBjörn Töpel 
30c497176cSBjörn Töpel struct xdp_buff;
31c497176cSBjörn Töpel #ifdef CONFIG_XDP_SOCKETS
32c497176cSBjörn Töpel int xsk_generic_rcv(struct xdp_sock *xs, struct xdp_buff *xdp);
33c497176cSBjörn Töpel int xsk_rcv(struct xdp_sock *xs, struct xdp_buff *xdp);
34c497176cSBjörn Töpel void xsk_flush(struct xdp_sock *xs);
35fbfc504aSBjörn Töpel bool xsk_is_setup_for_bpf_map(struct xdp_sock *xs);
36c497176cSBjörn Töpel #else
37c497176cSBjörn Töpel static inline int xsk_generic_rcv(struct xdp_sock *xs, struct xdp_buff *xdp)
38c497176cSBjörn Töpel {
39c497176cSBjörn Töpel 	return -ENOTSUPP;
40c497176cSBjörn Töpel }
41c497176cSBjörn Töpel 
42c497176cSBjörn Töpel static inline int xsk_rcv(struct xdp_sock *xs, struct xdp_buff *xdp)
43c497176cSBjörn Töpel {
44c497176cSBjörn Töpel 	return -ENOTSUPP;
45c497176cSBjörn Töpel }
46c497176cSBjörn Töpel 
47c497176cSBjörn Töpel static inline void xsk_flush(struct xdp_sock *xs)
48c497176cSBjörn Töpel {
49c497176cSBjörn Töpel }
50fbfc504aSBjörn Töpel 
51fbfc504aSBjörn Töpel static inline bool xsk_is_setup_for_bpf_map(struct xdp_sock *xs)
52fbfc504aSBjörn Töpel {
53fbfc504aSBjörn Töpel 	return false;
54fbfc504aSBjörn Töpel }
55c497176cSBjörn Töpel #endif /* CONFIG_XDP_SOCKETS */
56c497176cSBjörn Töpel 
57c0c77d8fSBjörn Töpel #endif /* _LINUX_XDP_SOCK_H */
58