obj-$(CONFIG_NETDEVSIM) += netdevsim.o
netdevsim-objs := \
- netdev.o dev.o ethtool.o fib.o bus.o health.o hwstats.o udp_tunnels.o
+ netdev.o dev.o ethtool.o fib.o bus.o health.o hwstats.o udp_tunnels.o tc.o
ifeq ($(CONFIG_BPF_SYSCALL),y)
netdevsim-objs += \
return 0;
}
-static int
-nsim_setup_tc_block_cb(enum tc_setup_type type, void *type_data, void *cb_priv)
-{
- return nsim_bpf_setup_tc_block_cb(type, type_data, cb_priv);
-}
-
static int nsim_set_vf_mac(struct net_device *dev, int vf, u8 *mac)
{
struct netdevsim *ns = netdev_priv(dev);
return 0;
}
-static void nsim_taprio_stats(struct tc_taprio_qopt_stats *stats)
-{
- stats->window_drops = 0;
- stats->tx_overruns = 0;
-}
-
-static int nsim_setup_tc_taprio(struct net_device *dev,
- struct tc_taprio_qopt_offload *offload)
-{
- int err = 0;
-
- switch (offload->cmd) {
- case TAPRIO_CMD_REPLACE:
- case TAPRIO_CMD_DESTROY:
- break;
- case TAPRIO_CMD_STATS:
- nsim_taprio_stats(&offload->stats);
- break;
- default:
- err = -EOPNOTSUPP;
- }
-
- return err;
-}
-
-static LIST_HEAD(nsim_block_cb_list);
-
-static int
-nsim_setup_tc(struct net_device *dev, enum tc_setup_type type, void *type_data)
-{
- struct netdevsim *ns = netdev_priv(dev);
-
- switch (type) {
- case TC_SETUP_QDISC_TAPRIO:
- return nsim_setup_tc_taprio(dev, type_data);
- case TC_SETUP_BLOCK:
- return flow_block_cb_setup_simple(type_data,
- &nsim_block_cb_list,
- nsim_setup_tc_block_cb,
- ns, ns, true);
- default:
- return -EOPNOTSUPP;
- }
-}
-
static int
nsim_set_features(struct net_device *dev, netdev_features_t features)
{
nsim_psp_handle_ext(struct sk_buff *skb, struct skb_ext *psp_ext) {}
#endif
+int nsim_setup_tc(struct net_device *dev, enum tc_setup_type type,
+ void *type_data);
+
struct nsim_bus_dev {
struct device dev;
struct list_head list;
--- /dev/null
+// SPDX-License-Identifier: GPL-2.0
+
+#include <linux/netdevice.h>
+#include <net/pkt_sched.h>
+
+#include "netdevsim.h"
+
+static int
+nsim_setup_tc_block_cb(enum tc_setup_type type, void *type_data, void *cb_priv)
+{
+ return nsim_bpf_setup_tc_block_cb(type, type_data, cb_priv);
+}
+
+static void nsim_taprio_stats(struct tc_taprio_qopt_stats *stats)
+{
+ stats->window_drops = 0;
+ stats->tx_overruns = 0;
+}
+
+static int nsim_setup_tc_taprio(struct net_device *dev,
+ struct tc_taprio_qopt_offload *offload)
+{
+ int err = 0;
+
+ switch (offload->cmd) {
+ case TAPRIO_CMD_REPLACE:
+ case TAPRIO_CMD_DESTROY:
+ break;
+ case TAPRIO_CMD_STATS:
+ nsim_taprio_stats(&offload->stats);
+ break;
+ default:
+ err = -EOPNOTSUPP;
+ }
+
+ return err;
+}
+
+static LIST_HEAD(nsim_block_cb_list);
+
+int
+nsim_setup_tc(struct net_device *dev, enum tc_setup_type type, void *type_data)
+{
+ struct netdevsim *ns = netdev_priv(dev);
+
+ switch (type) {
+ case TC_SETUP_QDISC_TAPRIO:
+ return nsim_setup_tc_taprio(dev, type_data);
+ case TC_SETUP_BLOCK:
+ return flow_block_cb_setup_simple(type_data,
+ &nsim_block_cb_list,
+ nsim_setup_tc_block_cb,
+ ns, ns, true);
+ default:
+ return -EOPNOTSUPP;
+ }
+}