include/net/pkt_sched.h
Source file repositories/reference/linux-study-clean/include/net/pkt_sched.h
File Facts
- System
- Linux kernel
- Corpus path
include/net/pkt_sched.h- Extension
.h- Size
- 8523 bytes
- Lines
- 336
- Domain
- Networking Core
- Bucket
- Sockets, Protocols, Packet Path, And Network Policy
- Inferred role
- Networking Core: implementation source
- Status
- source implementation candidate
Why This File Exists
Networking stack implementation surface: socket APIs, protocol dispatch, packet flow, routing, filtering, and network namespaces.
- Networking stack implementation surface: socket APIs, protocol dispatch, packet flow, routing, filtering, and network namespaces.
- Uses kernel synchronization; read lock ordering, sleepability, and interrupt context assumptions before translating.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/jiffies.hlinux/ktime.hlinux/if_vlan.hlinux/netdevice.hnet/sch_generic.hnet/net_namespace.huapi/linux/pkt_sched.h
Detected Declarations
struct qdisc_walkerstruct qdisc_watchdogstruct tc_query_caps_basestruct tc_cbs_qopt_offloadstruct tc_etf_qopt_offloadstruct tc_mqprio_capsstruct tc_mqprio_qopt_offloadstruct tc_taprio_capsstruct tc_taprio_qopt_statsstruct tc_taprio_qopt_queue_statsstruct tc_taprio_sched_entrystruct tc_taprio_qopt_offloadenum tc_taprio_qopt_cmdfunction psched_get_timefunction qdisc_watchdog_schedule_nsfunction qdisc_watchdog_schedulefunction psched_mtufunction taprio_offload_getfunction taprio_offload_freefunction tc_qdisc_stats_dumpfunction qdisc_warn_nonwcfunction qdisc_peek_lenfunction qdisc_lock_initfunction qdisc_lock_uninit
Annotated Snippet
struct qdisc_walker {
int stop;
int skip;
int count;
int (*fn)(struct Qdisc *, unsigned long cl, struct qdisc_walker *);
};
#define qdisc_priv(q) \
_Generic(q, \
const struct Qdisc * : (const void *)&q->privdata, \
struct Qdisc * : (void *)&q->privdata)
/*
Timer resolution MUST BE < 10% of min_schedulable_packet_size/bandwidth
Normal IP packet size ~ 512byte, hence:
0.5Kbyte/1Mbyte/sec = 0.5msec, so that we need 50usec timer for
10Mbit ethernet.
10msec resolution -> <50Kbit/sec.
The result: [34]86 is not good choice for QoS router :-(
The things are not so bad, because we may use artificial
clock evaluated by integration of network data flow
in the most critical places.
*/
typedef u64 psched_time_t;
/* Avoid doing 64 bit divide */
#define PSCHED_SHIFT 6
#define PSCHED_TICKS2NS(x) ((s64)(x) << PSCHED_SHIFT)
#define PSCHED_NS2TICKS(x) ((x) >> PSCHED_SHIFT)
#define PSCHED_TICKS_PER_SEC PSCHED_NS2TICKS(NSEC_PER_SEC)
#define PSCHED_PASTPERFECT 0
static inline psched_time_t psched_get_time(void)
{
return PSCHED_NS2TICKS(ktime_get_ns());
}
struct qdisc_watchdog {
struct hrtimer timer;
struct Qdisc *qdisc;
};
void qdisc_watchdog_init_clockid(struct qdisc_watchdog *wd, struct Qdisc *qdisc,
clockid_t clockid);
void qdisc_watchdog_init(struct qdisc_watchdog *wd, struct Qdisc *qdisc);
void qdisc_watchdog_schedule_range_ns(struct qdisc_watchdog *wd, u64 expires,
u64 delta_ns);
static inline void qdisc_watchdog_schedule_ns(struct qdisc_watchdog *wd,
u64 expires)
{
return qdisc_watchdog_schedule_range_ns(wd, expires, 0ULL);
}
static inline void qdisc_watchdog_schedule(struct qdisc_watchdog *wd,
psched_time_t expires)
{
qdisc_watchdog_schedule_ns(wd, PSCHED_TICKS2NS(expires));
}
void qdisc_watchdog_cancel(struct qdisc_watchdog *wd);
extern struct Qdisc_ops pfifo_qdisc_ops;
extern struct Qdisc_ops bfifo_qdisc_ops;
extern struct Qdisc_ops pfifo_head_drop_qdisc_ops;
int fifo_set_limit(struct Qdisc *q, unsigned int limit);
struct Qdisc *fifo_create_dflt(struct Qdisc *sch, struct Qdisc_ops *ops,
unsigned int limit,
struct netlink_ext_ack *extack);
int register_qdisc(struct Qdisc_ops *qops);
void unregister_qdisc(struct Qdisc_ops *qops);
#define NET_SCH_ALIAS_PREFIX "net-sch-"
#define MODULE_ALIAS_NET_SCH(id) MODULE_ALIAS(NET_SCH_ALIAS_PREFIX id)
void qdisc_get_default(char *id, size_t len);
int qdisc_set_default(const char *id);
void qdisc_hash_add(struct Qdisc *q, bool invisible);
void qdisc_hash_del(struct Qdisc *q);
struct Qdisc *qdisc_lookup(struct net_device *dev, u32 handle);
struct Qdisc *qdisc_lookup_rcu(struct net_device *dev, u32 handle);
Annotation
- Immediate include surface: `linux/jiffies.h`, `linux/ktime.h`, `linux/if_vlan.h`, `linux/netdevice.h`, `net/sch_generic.h`, `net/net_namespace.h`, `uapi/linux/pkt_sched.h`.
- Detected declarations: `struct qdisc_walker`, `struct qdisc_watchdog`, `struct tc_query_caps_base`, `struct tc_cbs_qopt_offload`, `struct tc_etf_qopt_offload`, `struct tc_mqprio_caps`, `struct tc_mqprio_qopt_offload`, `struct tc_taprio_caps`, `struct tc_taprio_qopt_stats`, `struct tc_taprio_qopt_queue_stats`.
- Atlas domain: Networking Core / Sockets, Protocols, Packet Path, And Network Policy.
- Implementation status: source implementation candidate.
- Synchronization appears in or near this file; preserve lock ordering, sleepability, and interrupt-context constraints.
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.