diff options
Diffstat (limited to 'include/net/sch_generic.h')
-rw-r--r-- | include/net/sch_generic.h | 49 |
1 files changed, 29 insertions, 20 deletions
diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h index c33180dd42b4..67dc08eaaa45 100644 --- a/include/net/sch_generic.h +++ b/include/net/sch_generic.h | |||
@@ -15,16 +15,14 @@ struct qdisc_walker; | |||
15 | struct tcf_walker; | 15 | struct tcf_walker; |
16 | struct module; | 16 | struct module; |
17 | 17 | ||
18 | struct qdisc_rate_table | 18 | struct qdisc_rate_table { |
19 | { | ||
20 | struct tc_ratespec rate; | 19 | struct tc_ratespec rate; |
21 | u32 data[256]; | 20 | u32 data[256]; |
22 | struct qdisc_rate_table *next; | 21 | struct qdisc_rate_table *next; |
23 | int refcnt; | 22 | int refcnt; |
24 | }; | 23 | }; |
25 | 24 | ||
26 | enum qdisc_state_t | 25 | enum qdisc_state_t { |
27 | { | ||
28 | __QDISC_STATE_RUNNING, | 26 | __QDISC_STATE_RUNNING, |
29 | __QDISC_STATE_SCHED, | 27 | __QDISC_STATE_SCHED, |
30 | __QDISC_STATE_DEACTIVATED, | 28 | __QDISC_STATE_DEACTIVATED, |
@@ -37,8 +35,7 @@ struct qdisc_size_table { | |||
37 | u16 data[]; | 35 | u16 data[]; |
38 | }; | 36 | }; |
39 | 37 | ||
40 | struct Qdisc | 38 | struct Qdisc { |
41 | { | ||
42 | int (*enqueue)(struct sk_buff *skb, struct Qdisc *dev); | 39 | int (*enqueue)(struct sk_buff *skb, struct Qdisc *dev); |
43 | struct sk_buff * (*dequeue)(struct Qdisc *dev); | 40 | struct sk_buff * (*dequeue)(struct Qdisc *dev); |
44 | unsigned flags; | 41 | unsigned flags; |
@@ -78,8 +75,7 @@ struct Qdisc | |||
78 | struct gnet_stats_queue qstats; | 75 | struct gnet_stats_queue qstats; |
79 | }; | 76 | }; |
80 | 77 | ||
81 | struct Qdisc_class_ops | 78 | struct Qdisc_class_ops { |
82 | { | ||
83 | /* Child qdisc manipulation */ | 79 | /* Child qdisc manipulation */ |
84 | struct netdev_queue * (*select_queue)(struct Qdisc *, struct tcmsg *); | 80 | struct netdev_queue * (*select_queue)(struct Qdisc *, struct tcmsg *); |
85 | int (*graft)(struct Qdisc *, unsigned long cl, | 81 | int (*graft)(struct Qdisc *, unsigned long cl, |
@@ -108,8 +104,7 @@ struct Qdisc_class_ops | |||
108 | struct gnet_dump *); | 104 | struct gnet_dump *); |
109 | }; | 105 | }; |
110 | 106 | ||
111 | struct Qdisc_ops | 107 | struct Qdisc_ops { |
112 | { | ||
113 | struct Qdisc_ops *next; | 108 | struct Qdisc_ops *next; |
114 | const struct Qdisc_class_ops *cl_ops; | 109 | const struct Qdisc_class_ops *cl_ops; |
115 | char id[IFNAMSIZ]; | 110 | char id[IFNAMSIZ]; |
@@ -133,14 +128,12 @@ struct Qdisc_ops | |||
133 | }; | 128 | }; |
134 | 129 | ||
135 | 130 | ||
136 | struct tcf_result | 131 | struct tcf_result { |
137 | { | ||
138 | unsigned long class; | 132 | unsigned long class; |
139 | u32 classid; | 133 | u32 classid; |
140 | }; | 134 | }; |
141 | 135 | ||
142 | struct tcf_proto_ops | 136 | struct tcf_proto_ops { |
143 | { | ||
144 | struct tcf_proto_ops *next; | 137 | struct tcf_proto_ops *next; |
145 | char kind[IFNAMSIZ]; | 138 | char kind[IFNAMSIZ]; |
146 | 139 | ||
@@ -164,8 +157,7 @@ struct tcf_proto_ops | |||
164 | struct module *owner; | 157 | struct module *owner; |
165 | }; | 158 | }; |
166 | 159 | ||
167 | struct tcf_proto | 160 | struct tcf_proto { |
168 | { | ||
169 | /* Fast access part */ | 161 | /* Fast access part */ |
170 | struct tcf_proto *next; | 162 | struct tcf_proto *next; |
171 | void *root; | 163 | void *root; |
@@ -261,14 +253,12 @@ extern struct Qdisc_ops noop_qdisc_ops; | |||
261 | extern struct Qdisc_ops pfifo_fast_ops; | 253 | extern struct Qdisc_ops pfifo_fast_ops; |
262 | extern struct Qdisc_ops mq_qdisc_ops; | 254 | extern struct Qdisc_ops mq_qdisc_ops; |
263 | 255 | ||
264 | struct Qdisc_class_common | 256 | struct Qdisc_class_common { |
265 | { | ||
266 | u32 classid; | 257 | u32 classid; |
267 | struct hlist_node hnode; | 258 | struct hlist_node hnode; |
268 | }; | 259 | }; |
269 | 260 | ||
270 | struct Qdisc_class_hash | 261 | struct Qdisc_class_hash { |
271 | { | ||
272 | struct hlist_head *hash; | 262 | struct hlist_head *hash; |
273 | unsigned int hashsize; | 263 | unsigned int hashsize; |
274 | unsigned int hashmask; | 264 | unsigned int hashmask; |
@@ -437,6 +427,25 @@ static inline struct sk_buff *qdisc_dequeue_head(struct Qdisc *sch) | |||
437 | return __qdisc_dequeue_head(sch, &sch->q); | 427 | return __qdisc_dequeue_head(sch, &sch->q); |
438 | } | 428 | } |
439 | 429 | ||
430 | static inline unsigned int __qdisc_queue_drop_head(struct Qdisc *sch, | ||
431 | struct sk_buff_head *list) | ||
432 | { | ||
433 | struct sk_buff *skb = __qdisc_dequeue_head(sch, list); | ||
434 | |||
435 | if (likely(skb != NULL)) { | ||
436 | unsigned int len = qdisc_pkt_len(skb); | ||
437 | kfree_skb(skb); | ||
438 | return len; | ||
439 | } | ||
440 | |||
441 | return 0; | ||
442 | } | ||
443 | |||
444 | static inline unsigned int qdisc_queue_drop_head(struct Qdisc *sch) | ||
445 | { | ||
446 | return __qdisc_queue_drop_head(sch, &sch->q); | ||
447 | } | ||
448 | |||
440 | static inline struct sk_buff *__qdisc_dequeue_tail(struct Qdisc *sch, | 449 | static inline struct sk_buff *__qdisc_dequeue_tail(struct Qdisc *sch, |
441 | struct sk_buff_head *list) | 450 | struct sk_buff_head *list) |
442 | { | 451 | { |