Release 4.14 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;
};
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 int ingress_init(struct Qdisc *sch, struct nlattr *opt)
{
struct ingress_sched_data *q = qdisc_priv(sch);
struct net_device *dev = qdisc_dev(sch);
int err;
err = tcf_block_get(&q->block, &dev->ingress_cl_list);
if (err)
return err;
net_inc_ingress_queue();
sch->flags |= TCQ_F_CPUSTATS;
return 0;
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Jiri Pirko | 45 | 61.64% | 1 | 33.33% |
Daniel Borkmann | 22 | 30.14% | 1 | 33.33% |
Alexei Starovoitov | 6 | 8.22% | 1 | 33.33% |
Total | 73 | 100.00% | 3 | 100.00% |
static void ingress_destroy(struct Qdisc *sch)
{
struct ingress_sched_data *q = qdisc_priv(sch);
tcf_block_put(q->block);
net_dec_ingress_queue();
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Linus Torvalds (pre-git) | 21 | 67.74% | 1 | 25.00% |
Jiri Pirko | 6 | 19.35% | 1 | 25.00% |
Daniel Borkmann | 3 | 9.68% | 1 | 25.00% |
Patrick McHardy | 1 | 3.23% | 1 | 25.00% |
Total | 31 | 100.00% | 4 | 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),
.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;
};
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;
err = tcf_block_get(&q->ingress_block, &dev->ingress_cl_list);
if (err)
return err;
err = tcf_block_get(&q->egress_block, &dev->egress_cl_list);
if (err)
return err;
net_inc_ingress_queue();
net_inc_egress_queue();
sch->flags |= TCQ_F_CPUSTATS;
return 0;
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Jiri Pirko | 67 | 68.37% | 1 | 50.00% |
Daniel Borkmann | 31 | 31.63% | 1 | 50.00% |
Total | 98 | 100.00% | 2 | 100.00% |
static void clsact_destroy(struct Qdisc *sch)
{
struct clsact_sched_data *q = qdisc_priv(sch);
tcf_block_put(q->egress_block);
tcf_block_put(q->ingress_block);
net_dec_ingress_queue();
net_dec_egress_queue();
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Daniel Borkmann | 32 | 78.05% | 1 | 50.00% |
Jiri Pirko | 9 | 21.95% | 1 | 50.00% |
Total | 41 | 100.00% | 2 | 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),
.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 |
Daniel Borkmann | 335 | 38.20% | 3 | 13.04% |
Linus Torvalds (pre-git) | 245 | 27.94% | 1 | 4.35% |
Jiri Pirko | 193 | 22.01% | 2 | 8.70% |
Dave Jones | 30 | 3.42% | 1 | 4.35% |
Patrick McHardy | 22 | 2.51% | 4 | 17.39% |
Al Viro | 13 | 1.48% | 1 | 4.35% |
Américo Wang | 11 | 1.25% | 1 | 4.35% |
Alexei Starovoitov | 6 | 0.68% | 1 | 4.35% |
Linus Torvalds | 5 | 0.57% | 1 | 4.35% |
Arnaldo Carvalho de Melo | 5 | 0.57% | 2 | 8.70% |
David S. Miller | 5 | 0.57% | 1 | 4.35% |
Alexey Kuznetsov | 2 | 0.23% | 1 | 4.35% |
Eric Dumazet | 2 | 0.23% | 1 | 4.35% |
Yang Yingliang | 1 | 0.11% | 1 | 4.35% |
Geert Uytterhoeven | 1 | 0.11% | 1 | 4.35% |
Joe Perches | 1 | 0.11% | 1 | 4.35% |
Total | 877 | 100.00% | 23 | 100.00% |
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.