summaryrefslogtreecommitdiff
path: root/drivers/net/netdevsim/netdevsim.h
diff options
context:
space:
mode:
authorDaniel Borkmann <daniel@iogearbox.net>2017-12-03 00:27:58 +0100
committerDaniel Borkmann <daniel@iogearbox.net>2017-12-03 00:27:59 +0100
commit6720f1084c066a5ba051a250e9d5d8c2ad4f554c (patch)
tree2d7bbfe3daa1af1ae3b45ce6901e651e19624c57 /drivers/net/netdevsim/netdevsim.h
parent4485166519e00ba1ba313a5b55ad2a0423c10952 (diff)
parentc33616109a63aa64235108fb7f3b60cb2117ef3b (diff)
Merge branch 'bpf-xdp-stack-uninit-and-offload-tests'
Jakub Kicinski says: ==================== The purpose of this series is to add a software model of BPF offloads to make it easier for everyone to test them and make some of the more arcane rules and assumptions more clear. The series starts with 3 patches aiming to make XDP handling in the drivers less error prone. Currently driver authors have to remember to free XDP programs if XDP is active during unregister. With this series the core will disable XDP on its own. It will take place after close, drivers are not expected to perform reconfiguration when disabling XDP on a downed device. Next two patches add the software netdev driver, followed by a python test which exercises all the corner cases which came to my mind. Test needs to be run as root. It will print basic information to stdout, but can also create a more detailed log of all commands when --log option is passed. Log is in Emacs Org-mode format. ./tools/testing/selftests/bpf/test_offload.py --log /tmp/log Last two patches replace the SR-IOV API implementation of dummy. v3: - move the freeing of vfs to release (Phil). v2: - free device from the release function; - use bus-based name generatin instead of netdev name. v1: - replace the SR-IOV API implementation of dummy; - make the dev_xdp_uninstall() also handle the XDP generic (Daniel). ==================== Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Diffstat (limited to 'drivers/net/netdevsim/netdevsim.h')
-rw-r--r--drivers/net/netdevsim/netdevsim.h78
1 files changed, 78 insertions, 0 deletions
diff --git a/drivers/net/netdevsim/netdevsim.h b/drivers/net/netdevsim/netdevsim.h
new file mode 100644
index 000000000000..32270de9395a
--- /dev/null
+++ b/drivers/net/netdevsim/netdevsim.h
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2017 Netronome Systems, Inc.
+ *
+ * This software is licensed under the GNU General License Version 2,
+ * June 1991 as shown in the file COPYING in the top-level directory of this
+ * source tree.
+ *
+ * THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS"
+ * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE
+ * OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME
+ * THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+ */
+
+#include <linux/device.h>
+#include <linux/kernel.h>
+#include <linux/list.h>
+#include <linux/netdevice.h>
+#include <linux/u64_stats_sync.h>
+
+#define DRV_NAME "netdevsim"
+
+#define NSIM_XDP_MAX_MTU 4000
+
+#define NSIM_EA(extack, msg) NL_SET_ERR_MSG_MOD((extack), msg)
+
+struct bpf_prog;
+struct dentry;
+struct nsim_vf_config;
+
+struct netdevsim {
+ struct net_device *netdev;
+
+ u64 tx_packets;
+ u64 tx_bytes;
+ struct u64_stats_sync syncp;
+
+ struct device dev;
+
+ struct dentry *ddir;
+
+ unsigned int num_vfs;
+ struct nsim_vf_config *vfconfigs;
+
+ struct bpf_prog *bpf_offloaded;
+ u32 bpf_offloaded_id;
+
+ u32 xdp_flags;
+ int xdp_prog_mode;
+ struct bpf_prog *xdp_prog;
+
+ u32 prog_id_gen;
+
+ bool bpf_bind_accept;
+ u32 bpf_bind_verifier_delay;
+ struct dentry *ddir_bpf_bound_progs;
+ struct list_head bpf_bound_progs;
+
+ bool bpf_tc_accept;
+ bool bpf_tc_non_bound_accept;
+ bool bpf_xdpdrv_accept;
+ bool bpf_xdpoffload_accept;
+};
+
+extern struct dentry *nsim_ddir;
+
+int nsim_bpf_init(struct netdevsim *ns);
+void nsim_bpf_uninit(struct netdevsim *ns);
+int nsim_bpf(struct net_device *dev, struct netdev_bpf *bpf);
+int nsim_bpf_disable_tc(struct netdevsim *ns);
+int nsim_bpf_setup_tc_block_cb(enum tc_setup_type type,
+ void *type_data, void *cb_priv);
+
+static inline struct netdevsim *to_nsim(struct device *ptr)
+{
+ return container_of(ptr, struct netdevsim, dev);
+}