blob: ce3a2ab16b8f538b0a6925176727ce0ddc3691d4 [file] [log] [blame]
Björn Töpelc0c77d82018-05-02 13:01:23 +02001/* 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
Björn Töpelb9b6b682018-05-02 13:01:25 +020021struct net_device;
22struct xsk_queue;
Björn Töpelc0c77d82018-05-02 13:01:23 +020023struct xdp_umem;
24
25struct xdp_sock {
26 /* struct sock must be the first member of struct xdp_sock */
27 struct sock sk;
Björn Töpelb9b6b682018-05-02 13:01:25 +020028 struct xsk_queue *rx;
29 struct net_device *dev;
Björn Töpelc0c77d82018-05-02 13:01:23 +020030 struct xdp_umem *umem;
Björn Töpelfbfc5042018-05-02 13:01:28 +020031 struct list_head flush_node;
Magnus Karlsson965a9902018-05-02 13:01:26 +020032 u16 queue_id;
Björn Töpelc0c77d82018-05-02 13:01:23 +020033 /* Protects multiple processes in the control path */
34 struct mutex mutex;
Björn Töpelc4971762018-05-02 13:01:27 +020035 u64 rx_dropped;
Björn Töpelc0c77d82018-05-02 13:01:23 +020036};
37
Björn Töpelc4971762018-05-02 13:01:27 +020038struct xdp_buff;
39#ifdef CONFIG_XDP_SOCKETS
40int xsk_generic_rcv(struct xdp_sock *xs, struct xdp_buff *xdp);
41int xsk_rcv(struct xdp_sock *xs, struct xdp_buff *xdp);
42void xsk_flush(struct xdp_sock *xs);
Björn Töpelfbfc5042018-05-02 13:01:28 +020043bool xsk_is_setup_for_bpf_map(struct xdp_sock *xs);
Björn Töpelc4971762018-05-02 13:01:27 +020044#else
45static inline int xsk_generic_rcv(struct xdp_sock *xs, struct xdp_buff *xdp)
46{
47 return -ENOTSUPP;
48}
49
50static inline int xsk_rcv(struct xdp_sock *xs, struct xdp_buff *xdp)
51{
52 return -ENOTSUPP;
53}
54
55static inline void xsk_flush(struct xdp_sock *xs)
56{
57}
Björn Töpelfbfc5042018-05-02 13:01:28 +020058
59static inline bool xsk_is_setup_for_bpf_map(struct xdp_sock *xs)
60{
61 return false;
62}
Björn Töpelc4971762018-05-02 13:01:27 +020063#endif /* CONFIG_XDP_SOCKETS */
64
Björn Töpelc0c77d82018-05-02 13:01:23 +020065#endif /* _LINUX_XDP_SOCK_H */