drivers/net/netdevsim/tc.c
Source file repositories/reference/linux-study-clean/drivers/net/netdevsim/tc.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/net/netdevsim/tc.c- Extension
.c- Size
- 1935 bytes
- Lines
- 98
- Domain
- Driver Families
- Bucket
- drivers/net
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/netdevice.hnet/pkt_sched.hnet/pkt_cls.hnetdevsim.h
Detected Declarations
function nsim_setup_tc_block_cbfunction nsim_taprio_statsfunction nsim_setup_tc_tapriofunction nsim_setup_tc_etsfunction nsim_setup_tc
Annotated Snippet
// SPDX-License-Identifier: GPL-2.0
#include <linux/netdevice.h>
#include <net/pkt_sched.h>
#include <net/pkt_cls.h>
#include "netdevsim.h"
static int
nsim_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);
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_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);
Annotation
- Immediate include surface: `linux/netdevice.h`, `net/pkt_sched.h`, `net/pkt_cls.h`, `netdevsim.h`.
- Detected declarations: `function nsim_setup_tc_block_cb`, `function nsim_taprio_stats`, `function nsim_setup_tc_taprio`, `function nsim_setup_tc_ets`, `function nsim_setup_tc`.
- Atlas domain: Driver Families / drivers/net.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.