Lines Matching refs:q
42 struct nlmsghdr *n, struct Qdisc *q,
142 struct Qdisc_ops *q, **qp; in register_qdisc() local
146 for (qp = &qdisc_base; (q = *qp) != NULL; qp = &q->next) in register_qdisc()
147 if (!strcmp(qops->id, q->id)) in register_qdisc()
186 struct Qdisc_ops *q, **qp; in unregister_qdisc() local
190 for (qp = &qdisc_base; (q = *qp) != NULL; qp = &q->next) in unregister_qdisc()
191 if (q == qops) in unregister_qdisc()
193 if (q) { in unregister_qdisc()
194 *qp = q->next; in unregister_qdisc()
195 q->next = NULL; in unregister_qdisc()
213 struct Qdisc_ops *q = NULL; in qdisc_lookup_default() local
215 for (q = qdisc_base; q; q = q->next) { in qdisc_lookup_default()
216 if (!strcmp(name, q->id)) { in qdisc_lookup_default()
217 if (!try_module_get(q->owner)) in qdisc_lookup_default()
218 q = NULL; in qdisc_lookup_default()
223 return q; in qdisc_lookup_default()
262 struct Qdisc *q; in qdisc_match_from_root() local
268 list_for_each_entry_rcu(q, &root->list, list) { in qdisc_match_from_root()
269 if (q->handle == handle) in qdisc_match_from_root()
270 return q; in qdisc_match_from_root()
275 void qdisc_list_add(struct Qdisc *q) in qdisc_list_add() argument
277 if ((q->parent != TC_H_ROOT) && !(q->flags & TCQ_F_INGRESS)) { in qdisc_list_add()
278 struct Qdisc *root = qdisc_dev(q)->qdisc; in qdisc_list_add()
282 list_add_tail_rcu(&q->list, &root->list); in qdisc_list_add()
287 void qdisc_list_del(struct Qdisc *q) in qdisc_list_del() argument
289 if ((q->parent != TC_H_ROOT) && !(q->flags & TCQ_F_INGRESS)) { in qdisc_list_del()
291 list_del_rcu(&q->list); in qdisc_list_del()
298 struct Qdisc *q; in qdisc_lookup() local
300 q = qdisc_match_from_root(dev->qdisc, handle); in qdisc_lookup()
301 if (q) in qdisc_lookup()
305 q = qdisc_match_from_root( in qdisc_lookup()
309 return q; in qdisc_lookup()
333 struct Qdisc_ops *q = NULL; in qdisc_lookup_ops() local
337 for (q = qdisc_base; q; q = q->next) { in qdisc_lookup_ops()
338 if (nla_strcmp(kind, q->id) == 0) { in qdisc_lookup_ops()
339 if (!try_module_get(q->owner)) in qdisc_lookup_ops()
340 q = NULL; in qdisc_lookup_ops()
346 return q; in qdisc_lookup_ops()
776 sch->q.qlen -= n; in qdisc_tree_decrease_qlen()
807 struct Qdisc *q = old; in qdisc_graft() local
816 if ((q && q->flags & TCQ_F_INGRESS) || in qdisc_graft()
1071 static int check_loop_fn(struct Qdisc *q, unsigned long cl, struct qdisc_walker *w);
1073 static int check_loop(struct Qdisc *q, struct Qdisc *p, int depth) in check_loop() argument
1077 if (q->ops->cl_ops == NULL) in check_loop()
1084 q->ops->cl_ops->walk(q, &arg.w); in check_loop()
1089 check_loop_fn(struct Qdisc *q, unsigned long cl, struct qdisc_walker *w) in check_loop_fn() argument
1092 const struct Qdisc_class_ops *cops = q->ops->cl_ops; in check_loop_fn()
1095 leaf = cops->leaf(q, cl); in check_loop_fn()
1115 struct Qdisc *q = NULL; in tc_get_qdisc() local
1138 q = qdisc_leaf(p, clid); in tc_get_qdisc()
1140 q = dev_ingress_queue(dev)->qdisc_sleeping; in tc_get_qdisc()
1143 q = dev->qdisc; in tc_get_qdisc()
1145 if (!q) in tc_get_qdisc()
1148 if (tcm->tcm_handle && q->handle != tcm->tcm_handle) in tc_get_qdisc()
1151 q = qdisc_lookup(dev, tcm->tcm_handle); in tc_get_qdisc()
1152 if (!q) in tc_get_qdisc()
1156 if (tca[TCA_KIND] && nla_strcmp(tca[TCA_KIND], q->ops->id)) in tc_get_qdisc()
1162 if (q->handle == 0) in tc_get_qdisc()
1164 err = qdisc_graft(dev, p, skb, n, clid, NULL, q); in tc_get_qdisc()
1168 qdisc_notify(net, skb, n, clid, NULL, q); in tc_get_qdisc()
1184 struct Qdisc *q, *p; in tc_modify_qdisc() local
1198 q = p = NULL; in tc_modify_qdisc()
1211 q = qdisc_leaf(p, clid); in tc_modify_qdisc()
1213 q = dev_ingress_queue(dev)->qdisc_sleeping; in tc_modify_qdisc()
1216 q = dev->qdisc; in tc_modify_qdisc()
1220 if (q && q->handle == 0) in tc_modify_qdisc()
1221 q = NULL; in tc_modify_qdisc()
1223 if (!q || !tcm->tcm_handle || q->handle != tcm->tcm_handle) { in tc_modify_qdisc()
1225 if (q && !(n->nlmsg_flags & NLM_F_REPLACE)) in tc_modify_qdisc()
1229 q = qdisc_lookup(dev, tcm->tcm_handle); in tc_modify_qdisc()
1230 if (!q) in tc_modify_qdisc()
1234 if (tca[TCA_KIND] && nla_strcmp(tca[TCA_KIND], q->ops->id)) in tc_modify_qdisc()
1236 if (q == p || in tc_modify_qdisc()
1237 (p && check_loop(q, p, 0))) in tc_modify_qdisc()
1239 atomic_inc(&q->refcnt); in tc_modify_qdisc()
1242 if (!q) in tc_modify_qdisc()
1268 nla_strcmp(tca[TCA_KIND], q->ops->id)))) in tc_modify_qdisc()
1275 q = qdisc_lookup(dev, tcm->tcm_handle); in tc_modify_qdisc()
1279 if (q == NULL) in tc_modify_qdisc()
1283 if (tca[TCA_KIND] && nla_strcmp(tca[TCA_KIND], q->ops->id)) in tc_modify_qdisc()
1285 err = qdisc_change(q, tca); in tc_modify_qdisc()
1287 qdisc_notify(net, skb, n, clid, NULL, q); in tc_modify_qdisc()
1295 q = qdisc_create(dev, dev_ingress_queue(dev), p, in tc_modify_qdisc()
1310 q = qdisc_create(dev, dev_queue, p, in tc_modify_qdisc()
1314 if (q == NULL) { in tc_modify_qdisc()
1321 err = qdisc_graft(dev, p, skb, n, clid, q, NULL); in tc_modify_qdisc()
1323 if (q) in tc_modify_qdisc()
1324 qdisc_destroy(q); in tc_modify_qdisc()
1331 static int tc_fill_qdisc(struct sk_buff *skb, struct Qdisc *q, u32 clid, in tc_fill_qdisc() argument
1351 tcm->tcm_ifindex = qdisc_dev(q)->ifindex; in tc_fill_qdisc()
1353 tcm->tcm_handle = q->handle; in tc_fill_qdisc()
1354 tcm->tcm_info = atomic_read(&q->refcnt); in tc_fill_qdisc()
1355 if (nla_put_string(skb, TCA_KIND, q->ops->id)) in tc_fill_qdisc()
1357 if (q->ops->dump && q->ops->dump(q, skb) < 0) in tc_fill_qdisc()
1359 qlen = q->q.qlen; in tc_fill_qdisc()
1361 stab = rtnl_dereference(q->stab); in tc_fill_qdisc()
1366 qdisc_root_sleeping_lock(q), &d) < 0) in tc_fill_qdisc()
1369 if (q->ops->dump_stats && q->ops->dump_stats(q, &d) < 0) in tc_fill_qdisc()
1372 if (qdisc_is_percpu_stats(q)) { in tc_fill_qdisc()
1373 cpu_bstats = q->cpu_bstats; in tc_fill_qdisc()
1374 cpu_qstats = q->cpu_qstats; in tc_fill_qdisc()
1377 if (gnet_stats_copy_basic(&d, cpu_bstats, &q->bstats) < 0 || in tc_fill_qdisc()
1378 gnet_stats_copy_rate_est(&d, &q->bstats, &q->rate_est) < 0 || in tc_fill_qdisc()
1379 gnet_stats_copy_queue(&d, cpu_qstats, &q->qstats, qlen) < 0) in tc_fill_qdisc()
1394 static bool tc_qdisc_dump_ignore(struct Qdisc *q) in tc_qdisc_dump_ignore() argument
1396 return (q->flags & TCQ_F_BUILTIN) ? true : false; in tc_qdisc_dump_ignore()
1435 struct Qdisc *q; in tc_dump_qdisc_root() local
1440 q = root; in tc_dump_qdisc_root()
1444 if (!tc_qdisc_dump_ignore(q) && in tc_dump_qdisc_root()
1445 tc_fill_qdisc(skb, q, q->parent, NETLINK_CB(cb->skb).portid, in tc_dump_qdisc_root()
1450 list_for_each_entry(q, &root->list, list) { in tc_dump_qdisc_root()
1455 if (!tc_qdisc_dump_ignore(q) && in tc_dump_qdisc_root()
1456 tc_fill_qdisc(skb, q, q->parent, NETLINK_CB(cb->skb).portid, in tc_dump_qdisc_root()
1525 struct Qdisc *q = NULL; in tc_ctl_tclass() local
1590 q = qdisc_lookup(dev, qid); in tc_ctl_tclass()
1591 if (!q) in tc_ctl_tclass()
1595 cops = q->ops->cl_ops; in tc_ctl_tclass()
1607 cl = cops->get(q, clid); in tc_ctl_tclass()
1624 err = cops->delete(q, cl); in tc_ctl_tclass()
1626 tclass_notify(net, skb, n, q, cl, RTM_DELTCLASS); in tc_ctl_tclass()
1629 err = tclass_notify(net, skb, n, q, cl, RTM_NEWTCLASS); in tc_ctl_tclass()
1640 err = cops->change(q, clid, portid, tca, &new_cl); in tc_ctl_tclass()
1642 tclass_notify(net, skb, n, q, new_cl, RTM_NEWTCLASS); in tc_ctl_tclass()
1646 cops->put(q, cl); in tc_ctl_tclass()
1652 static int tc_fill_tclass(struct sk_buff *skb, struct Qdisc *q, in tc_fill_tclass() argument
1660 const struct Qdisc_class_ops *cl_ops = q->ops->cl_ops; in tc_fill_tclass()
1670 tcm->tcm_ifindex = qdisc_dev(q)->ifindex; in tc_fill_tclass()
1671 tcm->tcm_parent = q->handle; in tc_fill_tclass()
1672 tcm->tcm_handle = q->handle; in tc_fill_tclass()
1674 if (nla_put_string(skb, TCA_KIND, q->ops->id)) in tc_fill_tclass()
1676 if (cl_ops->dump && cl_ops->dump(q, cl, skb, tcm) < 0) in tc_fill_tclass()
1680 qdisc_root_sleeping_lock(q), &d) < 0) in tc_fill_tclass()
1683 if (cl_ops->dump_stats && cl_ops->dump_stats(q, cl, &d) < 0) in tc_fill_tclass()
1699 struct nlmsghdr *n, struct Qdisc *q, in tclass_notify() argument
1709 if (tc_fill_tclass(skb, q, cl, portid, n->nlmsg_seq, 0, event) < 0) { in tclass_notify()
1724 static int qdisc_class_dump(struct Qdisc *q, unsigned long cl, struct qdisc_walker *arg) in qdisc_class_dump() argument
1728 return tc_fill_tclass(a->skb, q, cl, NETLINK_CB(a->cb->skb).portid, in qdisc_class_dump()
1732 static int tc_dump_tclass_qdisc(struct Qdisc *q, struct sk_buff *skb, in tc_dump_tclass_qdisc() argument
1738 if (tc_qdisc_dump_ignore(q) || in tc_dump_tclass_qdisc()
1739 *t_p < s_t || !q->ops->cl_ops || in tc_dump_tclass_qdisc()
1741 TC_H_MAJ(tcm->tcm_parent) != q->handle)) { in tc_dump_tclass_qdisc()
1753 q->ops->cl_ops->walk(q, &arg.w); in tc_dump_tclass_qdisc()
1765 struct Qdisc *q; in tc_dump_tclass_root() local
1773 list_for_each_entry(q, &root->list, list) { in tc_dump_tclass_root()
1774 if (tc_dump_tclass_qdisc(q, skb, tcm, cb, t_p, s_t) < 0) in tc_dump_tclass_root()
1859 tp->q->ops->id, in tc_classify()