Something went wrong. Try again.
(I'm so sorry!) Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899// SPDX-License-Identifier: GPL-2.0
#include <linux/error-injection.h>#include <linux/netdevice.h>#include <net/pkt_sched.h>#include <net/pkt_cls.h>
#include "netdevsim.h"
static intnsim_setup_tc_block_cb(enum tc_setup_type type, void *type_data, void *cb_priv){ struct flow_cls_common_offload *common = type_data; int err = 0;
switch (type) { case TC_SETUP_CLSBPF: err = nsim_bpf_setup_tc_block_cb(type, type_data, cb_priv); break; case TC_SETUP_CLSFLOWER: break; default: NSIM_EA(common->extack, "offload type not supported"); err = -EOPNOTSUPP; break; }
return err;}
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 int nsim_setup_tc_ets(struct net_device *dev, struct tc_ets_qopt_offload *offload){ int err = 0;
switch (offload->command) { case TC_ETS_REPLACE: case TC_ETS_DESTROY: break; case TC_ETS_STATS: _bstats_update(offload->stats.bstats, 0, 0); break; default: err = -EOPNOTSUPP; }
return err;}
static LIST_HEAD(nsim_block_cb_list);
intnsim_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_QDISC_ETS: return nsim_setup_tc_ets(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); case TC_SETUP_FT: return 0; default: return -EOPNOTSUPP; }}ALLOW_ERROR_INJECTION(nsim_setup_tc, ERRNO);