netfilter: nf_nat: add nat hook register functions to nf_nat
[linux-2.6-microblaze.git] / include / net / xdp_sock.h
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 */