Release 4.18 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 netlink_ext_ack *extack)
{
struct ingress_sched_data *q = qdisc_priv(sch);
return q->block;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
| Linus Torvalds (pre-git) | 25 | 67.57% | 1 | 33.33% |
| Jiri Pirko | 7 | 18.92% | 1 | 33.33% |
| Alexander Aring | 5 | 13.51% | 1 | 33.33% |
| Total | 37 | 100.00% | 3 | 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 void ingress_ingress_block_set(struct Qdisc *sch, u32 block_index)
{
struct ingress_sched_data *q = qdisc_priv(sch);
q->block_info.block_index = block_index;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
| Jiri Pirko | 32 | 100.00% | 1 | 100.00% |
| Total | 32 | 100.00% | 1 | 100.00% |
static u32 ingress_ingress_block_get(struct Qdisc *sch)
{
struct ingress_sched_data *q = qdisc_priv(sch);
return q->block_info.block_index;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
| Jiri Pirko | 28 | 100.00% | 1 | 100.00% |
| Total | 28 | 100.00% | 1 | 100.00% |
static int ingress_init(struct Qdisc *sch, struct nlattr *opt,
struct netlink_ext_ack *extack)
{
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, extack);
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
| Jiri Pirko | 79 | 75.96% | 6 | 60.00% |
| Daniel Borkmann | 18 | 17.31% | 2 | 20.00% |
| Alexander Aring | 7 | 6.73% | 2 | 20.00% |
| Total | 104 | 100.00% | 10 | 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,
.ingress_block_set = ingress_ingress_block_set,
.ingress_block_get = ingress_ingress_block_get,
.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 netlink_ext_ack *extack)
{
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 | 78.12% | 1 | 33.33% |
| Jiri Pirko | 9 | 14.06% | 1 | 33.33% |
| Alexander Aring | 5 | 7.81% | 1 | 33.33% |
| Total | 64 | 100.00% | 3 | 100.00% |
static void clsact_ingress_block_set(struct Qdisc *sch, u32 block_index)
{
struct clsact_sched_data *q = qdisc_priv(sch);
q->ingress_block_info.block_index = block_index;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
| Jiri Pirko | 32 | 100.00% | 1 | 100.00% |
| Total | 32 | 100.00% | 1 | 100.00% |
static void clsact_egress_block_set(struct Qdisc *sch, u32 block_index)
{
struct clsact_sched_data *q = qdisc_priv(sch);
q->egress_block_info.block_index = block_index;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
| Jiri Pirko | 32 | 100.00% | 1 | 100.00% |
| Total | 32 | 100.00% | 1 | 100.00% |
static u32 clsact_ingress_block_get(struct Qdisc *sch)
{
struct clsact_sched_data *q = qdisc_priv(sch);
return q->ingress_block_info.block_index;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
| Jiri Pirko | 28 | 100.00% | 1 | 100.00% |
| Total | 28 | 100.00% | 1 | 100.00% |
static u32 clsact_egress_block_get(struct Qdisc *sch)
{
struct clsact_sched_data *q = qdisc_priv(sch);
return q->egress_block_info.block_index;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
| Jiri Pirko | 28 | 100.00% | 1 | 100.00% |
| Total | 28 | 100.00% | 1 | 100.00% |
static int clsact_init(struct Qdisc *sch, struct nlattr *opt,
struct netlink_ext_ack *extack)
{
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,
extack);
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, extack);
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
| Jiri Pirko | 151 | 84.83% | 6 | 60.00% |
| Daniel Borkmann | 18 | 10.11% | 2 | 20.00% |
| Alexander Aring | 9 | 5.06% | 2 | 20.00% |
| Total | 178 | 100.00% | 10 | 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,
.ingress_block_set = clsact_ingress_block_set,
.egress_block_set = clsact_egress_block_set,
.ingress_block_get = clsact_ingress_block_get,
.egress_block_get = clsact_egress_block_get,
.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 | 596 | 46.09% | 8 | 25.00% |
| Daniel Borkmann | 328 | 25.37% | 4 | 12.50% |
| Linus Torvalds (pre-git) | 245 | 18.95% | 1 | 3.12% |
| Dave Jones | 30 | 2.32% | 1 | 3.12% |
| Alexander Aring | 26 | 2.01% | 3 | 9.38% |
| Patrick McHardy | 22 | 1.70% | 4 | 12.50% |
| Al Viro | 13 | 1.01% | 1 | 3.12% |
| Américo Wang | 11 | 0.85% | 1 | 3.12% |
| Arnaldo Carvalho de Melo | 5 | 0.39% | 2 | 6.25% |
| Linus Torvalds | 5 | 0.39% | 1 | 3.12% |
| David S. Miller | 5 | 0.39% | 1 | 3.12% |
| Alexey Kuznetsov | 2 | 0.15% | 1 | 3.12% |
| Eric Dumazet | 2 | 0.15% | 1 | 3.12% |
| Geert Uytterhoeven | 1 | 0.08% | 1 | 3.12% |
| Yang Yingliang | 1 | 0.08% | 1 | 3.12% |
| Joe Perches | 1 | 0.08% | 1 | 3.12% |
| Total | 1293 | 100.00% | 32 | 100.00% |
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.