Release 4.15 net/sched/sch_ingress.c
/* net/sched/sch_ingress.c - Ingress and clsact qdisc
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*
* Authors: Jamal Hadi Salim 1999
*/
#include <linux/module.h>
#include <linux/types.h>
#include <linux/list.h>
#include <linux/skbuff.h>
#include <linux/rtnetlink.h>
#include <net/netlink.h>
#include <net/pkt_sched.h>
#include <net/pkt_cls.h>
struct ingress_sched_data {
struct tcf_block *block;
struct tcf_block_ext_info block_info;
struct mini_Qdisc_pair miniqp;
};
static struct Qdisc *ingress_leaf(struct Qdisc *sch, unsigned long arg)
{
return NULL;
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Linus Torvalds (pre-git) | 20 | 100.00% | 1 | 100.00% |
Total | 20 | 100.00% | 1 | 100.00% |
static unsigned long ingress_find(struct Qdisc *sch, u32 classid)
{
return TC_H_MIN(classid) + 1;
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Linus Torvalds (pre-git) | 22 | 95.65% | 1 | 50.00% |
Américo Wang | 1 | 4.35% | 1 | 50.00% |
Total | 23 | 100.00% | 2 | 100.00% |
static unsigned long ingress_bind_filter(struct Qdisc *sch,
unsigned long parent, u32 classid)
{
return ingress_find(sch, classid);
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Linus Torvalds (pre-git) | 26 | 96.30% | 1 | 50.00% |
Américo Wang | 1 | 3.70% | 1 | 50.00% |
Total | 27 | 100.00% | 2 | 100.00% |
static void ingress_unbind_filter(struct Qdisc *sch, unsigned long cl)
{
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Linus Torvalds (pre-git) | 13 | 92.86% | 1 | 50.00% |
Américo Wang | 1 | 7.14% | 1 | 50.00% |
Total | 14 | 100.00% | 2 | 100.00% |
static void ingress_walk(struct Qdisc *sch, struct qdisc_walker *walker)
{
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Linus Torvalds (pre-git) | 14 | 93.33% | 1 | 50.00% |
Joe Perches | 1 | 6.67% | 1 | 50.00% |
Total | 15 | 100.00% | 2 | 100.00% |
static struct tcf_block *ingress_tcf_block(struct Qdisc *sch, unsigned long cl)
{
struct ingress_sched_data *q = qdisc_priv(sch);
return q->block;
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Linus Torvalds (pre-git) | 25 | 78.12% | 1 | 50.00% |
Jiri Pirko | 7 | 21.88% | 1 | 50.00% |
Total | 32 | 100.00% | 2 | 100.00% |
static void clsact_chain_head_change(struct tcf_proto *tp_head, void *priv)
{
struct mini_Qdisc_pair *miniqp = priv;
mini_qdisc_pair_swap(miniqp, tp_head);
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Jiri Pirko | 29 | 100.00% | 2 | 100.00% |
Total | 29 | 100.00% | 2 | 100.00% |
static int ingress_init(struct Qdisc *sch, struct nlattr *opt)
{
struct ingress_sched_data *q = qdisc_priv(sch);
struct net_device *dev = qdisc_dev(sch);
net_inc_ingress_queue();
mini_qdisc_pair_init(&q->miniqp, sch, &dev->miniq_ingress);
q->block_info.binder_type = TCF_BLOCK_BINDER_TYPE_CLSACT_INGRESS;
q->block_info.chain_head_change = clsact_chain_head_change;
q->block_info.chain_head_change_priv = &q->miniqp;
return tcf_block_get_ext(&q->block, sch, &q->block_info);
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Jiri Pirko | 79 | 81.44% | 6 | 75.00% |
Daniel Borkmann | 18 | 18.56% | 2 | 25.00% |
Total | 97 | 100.00% | 8 | 100.00% |
static void ingress_destroy(struct Qdisc *sch)
{
struct ingress_sched_data *q = qdisc_priv(sch);
tcf_block_put_ext(q->block, sch, &q->block_info);
net_dec_ingress_queue();
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Linus Torvalds (pre-git) | 21 | 55.26% | 1 | 20.00% |
Jiri Pirko | 13 | 34.21% | 2 | 40.00% |
Daniel Borkmann | 3 | 7.89% | 1 | 20.00% |
Patrick McHardy | 1 | 2.63% | 1 | 20.00% |
Total | 38 | 100.00% | 5 | 100.00% |
static int ingress_dump(struct Qdisc *sch, struct sk_buff *skb)
{
struct nlattr *nest;
nest = nla_nest_start(skb, TCA_OPTIONS);
if (nest == NULL)
goto nla_put_failure;
return nla_nest_end(skb, nest);
nla_put_failure:
nla_nest_cancel(skb, nest);
return -1;
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Linus Torvalds (pre-git) | 38 | 63.33% | 1 | 20.00% |
Patrick McHardy | 19 | 31.67% | 2 | 40.00% |
Arnaldo Carvalho de Melo | 2 | 3.33% | 1 | 20.00% |
Yang Yingliang | 1 | 1.67% | 1 | 20.00% |
Total | 60 | 100.00% | 5 | 100.00% |
static const struct Qdisc_class_ops ingress_class_ops = {
.leaf = ingress_leaf,
.find = ingress_find,
.walk = ingress_walk,
.tcf_block = ingress_tcf_block,
.bind_tcf = ingress_bind_filter,
.unbind_tcf = ingress_unbind_filter,
};
static struct Qdisc_ops ingress_qdisc_ops __read_mostly = {
.cl_ops = &ingress_class_ops,
.id = "ingress",
.priv_size = sizeof(struct ingress_sched_data),
.static_flags = TCQ_F_CPUSTATS,
.init = ingress_init,
.destroy = ingress_destroy,
.dump = ingress_dump,
.owner = THIS_MODULE,
};
struct clsact_sched_data {
struct tcf_block *ingress_block;
struct tcf_block *egress_block;
struct tcf_block_ext_info ingress_block_info;
struct tcf_block_ext_info egress_block_info;
struct mini_Qdisc_pair miniqp_ingress;
struct mini_Qdisc_pair miniqp_egress;
};
static unsigned long clsact_find(struct Qdisc *sch, u32 classid)
{
switch (TC_H_MIN(classid)) {
case TC_H_MIN(TC_H_MIN_INGRESS):
case TC_H_MIN(TC_H_MIN_EGRESS):
return TC_H_MIN(classid);
default:
return 0;
}
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Daniel Borkmann | 45 | 97.83% | 1 | 50.00% |
Américo Wang | 1 | 2.17% | 1 | 50.00% |
Total | 46 | 100.00% | 2 | 100.00% |
static unsigned long clsact_bind_filter(struct Qdisc *sch,
unsigned long parent, u32 classid)
{
return clsact_find(sch, classid);
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Daniel Borkmann | 26 | 96.30% | 1 | 50.00% |
Américo Wang | 1 | 3.70% | 1 | 50.00% |
Total | 27 | 100.00% | 2 | 100.00% |
static struct tcf_block *clsact_tcf_block(struct Qdisc *sch, unsigned long cl)
{
struct clsact_sched_data *q = qdisc_priv(sch);
switch (cl) {
case TC_H_MIN(TC_H_MIN_INGRESS):
return q->ingress_block;
case TC_H_MIN(TC_H_MIN_EGRESS):
return q->egress_block;
default:
return NULL;
}
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Daniel Borkmann | 50 | 84.75% | 1 | 50.00% |
Jiri Pirko | 9 | 15.25% | 1 | 50.00% |
Total | 59 | 100.00% | 2 | 100.00% |
static int clsact_init(struct Qdisc *sch, struct nlattr *opt)
{
struct clsact_sched_data *q = qdisc_priv(sch);
struct net_device *dev = qdisc_dev(sch);
int err;
net_inc_ingress_queue();
net_inc_egress_queue();
mini_qdisc_pair_init(&q->miniqp_ingress, sch, &dev->miniq_ingress);
q->ingress_block_info.binder_type = TCF_BLOCK_BINDER_TYPE_CLSACT_INGRESS;
q->ingress_block_info.chain_head_change = clsact_chain_head_change;
q->ingress_block_info.chain_head_change_priv = &q->miniqp_ingress;
err = tcf_block_get_ext(&q->ingress_block, sch, &q->ingress_block_info);
if (err)
return err;
mini_qdisc_pair_init(&q->miniqp_egress, sch, &dev->miniq_egress);
q->egress_block_info.binder_type = TCF_BLOCK_BINDER_TYPE_CLSACT_EGRESS;
q->egress_block_info.chain_head_change = clsact_chain_head_change;
q->egress_block_info.chain_head_change_priv = &q->miniqp_egress;
return tcf_block_get_ext(&q->egress_block, sch, &q->egress_block_info);
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Jiri Pirko | 151 | 89.35% | 6 | 75.00% |
Daniel Borkmann | 18 | 10.65% | 2 | 25.00% |
Total | 169 | 100.00% | 8 | 100.00% |
static void clsact_destroy(struct Qdisc *sch)
{
struct clsact_sched_data *q = qdisc_priv(sch);
tcf_block_put_ext(q->egress_block, sch, &q->egress_block_info);
tcf_block_put_ext(q->ingress_block, sch, &q->ingress_block_info);
net_dec_ingress_queue();
net_dec_egress_queue();
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Daniel Borkmann | 32 | 58.18% | 1 | 33.33% |
Jiri Pirko | 23 | 41.82% | 2 | 66.67% |
Total | 55 | 100.00% | 3 | 100.00% |
static const struct Qdisc_class_ops clsact_class_ops = {
.leaf = ingress_leaf,
.find = clsact_find,
.walk = ingress_walk,
.tcf_block = clsact_tcf_block,
.bind_tcf = clsact_bind_filter,
.unbind_tcf = ingress_unbind_filter,
};
static struct Qdisc_ops clsact_qdisc_ops __read_mostly = {
.cl_ops = &clsact_class_ops,
.id = "clsact",
.priv_size = sizeof(struct clsact_sched_data),
.static_flags = TCQ_F_CPUSTATS,
.init = clsact_init,
.destroy = clsact_destroy,
.dump = ingress_dump,
.owner = THIS_MODULE,
};
static int __init ingress_module_init(void)
{
int ret;
ret = register_qdisc(&ingress_qdisc_ops);
if (!ret) {
ret = register_qdisc(&clsact_qdisc_ops);
if (ret)
unregister_qdisc(&ingress_qdisc_ops);
}
return ret;
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Daniel Borkmann | 33 | 68.75% | 1 | 33.33% |
Linus Torvalds (pre-git) | 12 | 25.00% | 1 | 33.33% |
Al Viro | 3 | 6.25% | 1 | 33.33% |
Total | 48 | 100.00% | 3 | 100.00% |
static void __exit ingress_module_exit(void)
{
unregister_qdisc(&ingress_qdisc_ops);
unregister_qdisc(&clsact_qdisc_ops);
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Linus Torvalds (pre-git) | 10 | 47.62% | 1 | 25.00% |
Daniel Borkmann | 6 | 28.57% | 1 | 25.00% |
Al Viro | 3 | 14.29% | 1 | 25.00% |
Alexey Kuznetsov | 2 | 9.52% | 1 | 25.00% |
Total | 21 | 100.00% | 4 | 100.00% |
module_init(ingress_module_init);
module_exit(ingress_module_exit);
MODULE_ALIAS("sch_clsact");
MODULE_LICENSE("GPL");
Overall Contributors
Person | Tokens | Prop | Commits | CommitProp |
Jiri Pirko | 385 | 36.46% | 7 | 25.00% |
Daniel Borkmann | 328 | 31.06% | 4 | 14.29% |
Linus Torvalds (pre-git) | 245 | 23.20% | 1 | 3.57% |
Dave Jones | 30 | 2.84% | 1 | 3.57% |
Patrick McHardy | 22 | 2.08% | 4 | 14.29% |
Al Viro | 13 | 1.23% | 1 | 3.57% |
Américo Wang | 11 | 1.04% | 1 | 3.57% |
Linus Torvalds | 5 | 0.47% | 1 | 3.57% |
David S. Miller | 5 | 0.47% | 1 | 3.57% |
Arnaldo Carvalho de Melo | 5 | 0.47% | 2 | 7.14% |
Eric Dumazet | 2 | 0.19% | 1 | 3.57% |
Alexey Kuznetsov | 2 | 0.19% | 1 | 3.57% |
Yang Yingliang | 1 | 0.09% | 1 | 3.57% |
Joe Perches | 1 | 0.09% | 1 | 3.57% |
Geert Uytterhoeven | 1 | 0.09% | 1 | 3.57% |
Total | 1056 | 100.00% | 28 | 100.00% |
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.