#include <linux/bitops.h>
#include <linux/module.h>
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/string.h>
#include <linux/errno.h>
#include <linux/netdevice.h>
#include <linux/skbuff.h>
#include <linux/rtnetlink.h>
#include <linux/init.h>
#include <linux/rcupdate.h>
#include <linux/list.h>
#include <linux/slab.h>
#include <linux/if_vlan.h>
#include <linux/skb_array.h>
#include <linux/if_macvlan.h>
#include <net/sch_generic.h>
#include <net/pkt_sched.h>
#include <net/dst.h>
#include <net/hotdata.h>
#include <trace/events/qdisc.h>
#include <trace/events/net.h>
#include <net/xfrm.h>
const struct Qdisc_ops *default_qdisc_ops = …;
EXPORT_SYMBOL(…);
static void qdisc_maybe_clear_missed(struct Qdisc *q,
const struct netdev_queue *txq)
{ … }
#define SKB_XOFF_MAGIC …
static inline struct sk_buff *__skb_dequeue_bad_txq(struct Qdisc *q)
{ … }
static inline struct sk_buff *qdisc_dequeue_skb_bad_txq(struct Qdisc *q)
{ … }
static inline void qdisc_enqueue_skb_bad_txq(struct Qdisc *q,
struct sk_buff *skb)
{ … }
static inline void dev_requeue_skb(struct sk_buff *skb, struct Qdisc *q)
{ … }
static void try_bulk_dequeue_skb(struct Qdisc *q,
struct sk_buff *skb,
const struct netdev_queue *txq,
int *packets)
{ … }
static void try_bulk_dequeue_skb_slow(struct Qdisc *q,
struct sk_buff *skb,
int *packets)
{ … }
static struct sk_buff *dequeue_skb(struct Qdisc *q, bool *validate,
int *packets)
{ … }
bool sch_direct_xmit(struct sk_buff *skb, struct Qdisc *q,
struct net_device *dev, struct netdev_queue *txq,
spinlock_t *root_lock, bool validate)
{ … }
static inline bool qdisc_restart(struct Qdisc *q, int *packets)
{ … }
void __qdisc_run(struct Qdisc *q)
{ … }
unsigned long dev_trans_start(struct net_device *dev)
{ … }
EXPORT_SYMBOL(…);
static void netif_freeze_queues(struct net_device *dev)
{ … }
void netif_tx_lock(struct net_device *dev)
{ … }
EXPORT_SYMBOL(…);
static void netif_unfreeze_queues(struct net_device *dev)
{ … }
void netif_tx_unlock(struct net_device *dev)
{ … }
EXPORT_SYMBOL(…);
static void dev_watchdog(struct timer_list *t)
{ … }
void __netdev_watchdog_up(struct net_device *dev)
{ … }
EXPORT_SYMBOL_GPL(…);
static void dev_watchdog_up(struct net_device *dev)
{ … }
static void dev_watchdog_down(struct net_device *dev)
{ … }
void netif_carrier_on(struct net_device *dev)
{ … }
EXPORT_SYMBOL(…);
void netif_carrier_off(struct net_device *dev)
{ … }
EXPORT_SYMBOL(…);
void netif_carrier_event(struct net_device *dev)
{ … }
EXPORT_SYMBOL_GPL(…);
static int noop_enqueue(struct sk_buff *skb, struct Qdisc *qdisc,
struct sk_buff **to_free)
{ … }
static struct sk_buff *noop_dequeue(struct Qdisc *qdisc)
{ … }
struct Qdisc_ops noop_qdisc_ops __read_mostly = …;
static struct netdev_queue noop_netdev_queue = …;
struct Qdisc noop_qdisc = …;
EXPORT_SYMBOL(…);
static int noqueue_init(struct Qdisc *qdisc, struct nlattr *opt,
struct netlink_ext_ack *extack)
{ … }
struct Qdisc_ops noqueue_qdisc_ops __read_mostly = …;
const u8 sch_default_prio2band[TC_PRIO_MAX + 1] = …;
EXPORT_SYMBOL(…);
#define PFIFO_FAST_BANDS …
struct pfifo_fast_priv { … };
static inline struct skb_array *band2list(struct pfifo_fast_priv *priv,
int band)
{ … }
static int pfifo_fast_enqueue(struct sk_buff *skb, struct Qdisc *qdisc,
struct sk_buff **to_free)
{ … }
static struct sk_buff *pfifo_fast_dequeue(struct Qdisc *qdisc)
{ … }
static struct sk_buff *pfifo_fast_peek(struct Qdisc *qdisc)
{ … }
static void pfifo_fast_reset(struct Qdisc *qdisc)
{ … }
static int pfifo_fast_dump(struct Qdisc *qdisc, struct sk_buff *skb)
{ … }
static int pfifo_fast_init(struct Qdisc *qdisc, struct nlattr *opt,
struct netlink_ext_ack *extack)
{ … }
static void pfifo_fast_destroy(struct Qdisc *sch)
{ … }
static int pfifo_fast_change_tx_queue_len(struct Qdisc *sch,
unsigned int new_len)
{ … }
struct Qdisc_ops pfifo_fast_ops __read_mostly = …;
EXPORT_SYMBOL(…);
static struct lock_class_key qdisc_tx_busylock;
struct Qdisc *qdisc_alloc(struct netdev_queue *dev_queue,
const struct Qdisc_ops *ops,
struct netlink_ext_ack *extack)
{ … }
struct Qdisc *qdisc_create_dflt(struct netdev_queue *dev_queue,
const struct Qdisc_ops *ops,
unsigned int parentid,
struct netlink_ext_ack *extack)
{ … }
EXPORT_SYMBOL(…);
void qdisc_reset(struct Qdisc *qdisc)
{ … }
EXPORT_SYMBOL(…);
void qdisc_free(struct Qdisc *qdisc)
{ … }
static void qdisc_free_cb(struct rcu_head *head)
{ … }
static void __qdisc_destroy(struct Qdisc *qdisc)
{ … }
void qdisc_destroy(struct Qdisc *qdisc)
{ … }
void qdisc_put(struct Qdisc *qdisc)
{ … }
EXPORT_SYMBOL(…);
void qdisc_put_unlocked(struct Qdisc *qdisc)
{ … }
EXPORT_SYMBOL(…);
struct Qdisc *dev_graft_qdisc(struct netdev_queue *dev_queue,
struct Qdisc *qdisc)
{ … }
EXPORT_SYMBOL(…);
static void shutdown_scheduler_queue(struct net_device *dev,
struct netdev_queue *dev_queue,
void *_qdisc_default)
{ … }
static void attach_one_default_qdisc(struct net_device *dev,
struct netdev_queue *dev_queue,
void *_unused)
{ … }
static void attach_default_qdiscs(struct net_device *dev)
{ … }
static void transition_one_qdisc(struct net_device *dev,
struct netdev_queue *dev_queue,
void *_need_watchdog)
{ … }
void dev_activate(struct net_device *dev)
{ … }
EXPORT_SYMBOL(…);
static void qdisc_deactivate(struct Qdisc *qdisc)
{ … }
static void dev_deactivate_queue(struct net_device *dev,
struct netdev_queue *dev_queue,
void *_qdisc_default)
{ … }
static void dev_reset_queue(struct net_device *dev,
struct netdev_queue *dev_queue,
void *_unused)
{ … }
static bool some_qdisc_is_busy(struct net_device *dev)
{ … }
void dev_deactivate_many(struct list_head *head)
{ … }
void dev_deactivate(struct net_device *dev)
{ … }
EXPORT_SYMBOL(…);
static int qdisc_change_tx_queue_len(struct net_device *dev,
struct netdev_queue *dev_queue)
{ … }
void dev_qdisc_change_real_num_tx(struct net_device *dev,
unsigned int new_real_tx)
{ … }
void mq_change_real_num_tx(struct Qdisc *sch, unsigned int new_real_tx)
{ … }
EXPORT_SYMBOL(…);
int dev_qdisc_change_tx_queue_len(struct net_device *dev)
{ … }
static void dev_init_scheduler_queue(struct net_device *dev,
struct netdev_queue *dev_queue,
void *_qdisc)
{ … }
void dev_init_scheduler(struct net_device *dev)
{ … }
void dev_shutdown(struct net_device *dev)
{ … }
static void psched_ratecfg_precompute__(u64 rate, u32 *mult, u8 *shift)
{ … }
void psched_ratecfg_precompute(struct psched_ratecfg *r,
const struct tc_ratespec *conf,
u64 rate64)
{ … }
EXPORT_SYMBOL(…);
void psched_ppscfg_precompute(struct psched_pktrate *r, u64 pktrate64)
{ … }
EXPORT_SYMBOL(…);
void mini_qdisc_pair_swap(struct mini_Qdisc_pair *miniqp,
struct tcf_proto *tp_head)
{ … }
EXPORT_SYMBOL(…);
void mini_qdisc_pair_block_init(struct mini_Qdisc_pair *miniqp,
struct tcf_block *block)
{ … }
EXPORT_SYMBOL(…);
void mini_qdisc_pair_init(struct mini_Qdisc_pair *miniqp, struct Qdisc *qdisc,
struct mini_Qdisc __rcu **p_miniq)
{ … }
EXPORT_SYMBOL(…);