| .. | .. |
|---|
| 80 | 80 | struct net_device *dev = qdisc_dev(sch); |
|---|
| 81 | 81 | int err; |
|---|
| 82 | 82 | |
|---|
| 83 | + if (sch->parent != TC_H_INGRESS) |
|---|
| 84 | + return -EOPNOTSUPP; |
|---|
| 85 | + |
|---|
| 83 | 86 | net_inc_ingress_queue(); |
|---|
| 84 | 87 | |
|---|
| 85 | 88 | mini_qdisc_pair_init(&q->miniqp, sch, &dev->miniq_ingress); |
|---|
| .. | .. |
|---|
| 100 | 103 | static void ingress_destroy(struct Qdisc *sch) |
|---|
| 101 | 104 | { |
|---|
| 102 | 105 | struct ingress_sched_data *q = qdisc_priv(sch); |
|---|
| 106 | + |
|---|
| 107 | + if (sch->parent != TC_H_INGRESS) |
|---|
| 108 | + return; |
|---|
| 103 | 109 | |
|---|
| 104 | 110 | tcf_block_put_ext(q->block, sch, &q->block_info); |
|---|
| 105 | 111 | net_dec_ingress_queue(); |
|---|
| .. | .. |
|---|
| 134 | 140 | .cl_ops = &ingress_class_ops, |
|---|
| 135 | 141 | .id = "ingress", |
|---|
| 136 | 142 | .priv_size = sizeof(struct ingress_sched_data), |
|---|
| 137 | | - .static_flags = TCQ_F_CPUSTATS, |
|---|
| 143 | + .static_flags = TCQ_F_INGRESS | TCQ_F_CPUSTATS, |
|---|
| 138 | 144 | .init = ingress_init, |
|---|
| 139 | 145 | .destroy = ingress_destroy, |
|---|
| 140 | 146 | .dump = ingress_dump, |
|---|
| .. | .. |
|---|
| 219 | 225 | struct net_device *dev = qdisc_dev(sch); |
|---|
| 220 | 226 | int err; |
|---|
| 221 | 227 | |
|---|
| 228 | + if (sch->parent != TC_H_CLSACT) |
|---|
| 229 | + return -EOPNOTSUPP; |
|---|
| 230 | + |
|---|
| 222 | 231 | net_inc_ingress_queue(); |
|---|
| 223 | 232 | net_inc_egress_queue(); |
|---|
| 224 | 233 | |
|---|
| .. | .. |
|---|
| 248 | 257 | { |
|---|
| 249 | 258 | struct clsact_sched_data *q = qdisc_priv(sch); |
|---|
| 250 | 259 | |
|---|
| 260 | + if (sch->parent != TC_H_CLSACT) |
|---|
| 261 | + return; |
|---|
| 262 | + |
|---|
| 251 | 263 | tcf_block_put_ext(q->egress_block, sch, &q->egress_block_info); |
|---|
| 252 | 264 | tcf_block_put_ext(q->ingress_block, sch, &q->ingress_block_info); |
|---|
| 253 | 265 | |
|---|
| .. | .. |
|---|
| 269 | 281 | .cl_ops = &clsact_class_ops, |
|---|
| 270 | 282 | .id = "clsact", |
|---|
| 271 | 283 | .priv_size = sizeof(struct clsact_sched_data), |
|---|
| 272 | | - .static_flags = TCQ_F_CPUSTATS, |
|---|
| 284 | + .static_flags = TCQ_F_INGRESS | TCQ_F_CPUSTATS, |
|---|
| 273 | 285 | .init = clsact_init, |
|---|
| 274 | 286 | .destroy = clsact_destroy, |
|---|
| 275 | 287 | .dump = ingress_dump, |
|---|