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