Release 4.11 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>
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_get(struct Qdisc *sch, u32 classid)
{
return TC_H_MIN(classid) + 1;
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Linus Torvalds (pre-git) | 23 | 100.00% | 1 | 100.00% |
Total | 23 | 100.00% | 1 | 100.00% |
static bool ingress_cl_offload(u32 classid)
{
return true;
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Daniel Borkmann | 12 | 100.00% | 1 | 100.00% |
Total | 12 | 100.00% | 1 | 100.00% |
static unsigned long ingress_bind_filter(struct Qdisc *sch,
unsigned long parent, u32 classid)
{
return ingress_get(sch, classid);
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Linus Torvalds (pre-git) | 27 | 100.00% | 1 | 100.00% |
Total | 27 | 100.00% | 1 | 100.00% |
static void ingress_put(struct Qdisc *sch, unsigned long cl)
{
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Linus Torvalds (pre-git) | 14 | 100.00% | 1 | 100.00% |
Total | 14 | 100.00% | 1 | 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_proto __rcu **ingress_find_tcf(struct Qdisc *sch,
unsigned long cl)
{
struct net_device *dev = qdisc_dev(sch);
return &dev->ingress_cl_list;
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Linus Torvalds (pre-git) | 28 | 80.00% | 1 | 25.00% |
Daniel Borkmann | 5 | 14.29% | 1 | 25.00% |
Jamal Hadi Salim | 1 | 2.86% | 1 | 25.00% |
John Fastabend | 1 | 2.86% | 1 | 25.00% |
Total | 35 | 100.00% | 4 | 100.00% |
static int ingress_init(struct Qdisc *sch, struct nlattr *opt)
{
net_inc_ingress_queue();
sch->flags |= TCQ_F_CPUSTATS;
return 0;
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Daniel Borkmann | 22 | 78.57% | 1 | 50.00% |
Alexei Starovoitov | 6 | 21.43% | 1 | 50.00% |
Total | 28 | 100.00% | 2 | 100.00% |
static void ingress_destroy(struct Qdisc *sch)
{
struct net_device *dev = qdisc_dev(sch);
tcf_destroy_chain(&dev->ingress_cl_list);
net_dec_ingress_queue();
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Linus Torvalds (pre-git) | 21 | 65.62% | 1 | 20.00% |
Daniel Borkmann | 8 | 25.00% | 2 | 40.00% |
Patrick McHardy | 3 | 9.38% | 2 | 40.00% |
Total | 32 | 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,
.get = ingress_get,
.put = ingress_put,
.walk = ingress_walk,
.tcf_chain = ingress_find_tcf,
.tcf_cl_offload = ingress_cl_offload,
.bind_tcf = ingress_bind_filter,
.unbind_tcf = ingress_put,
};
static struct Qdisc_ops ingress_qdisc_ops __read_mostly = {
.cl_ops = &ingress_class_ops,
.id = "ingress",
.init = ingress_init,
.destroy = ingress_destroy,
.dump = ingress_dump,
.owner = THIS_MODULE,
};
static unsigned long clsact_get(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 | 46 | 100.00% | 1 | 100.00% |
Total | 46 | 100.00% | 1 | 100.00% |
static bool clsact_cl_offload(u32 classid)
{
return TC_H_MIN(classid) == TC_H_MIN(TC_H_MIN_INGRESS);
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Daniel Borkmann | 20 | 100.00% | 1 | 100.00% |
Total | 20 | 100.00% | 1 | 100.00% |
static unsigned long clsact_bind_filter(struct Qdisc *sch,
unsigned long parent, u32 classid)
{
return clsact_get(sch, classid);
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Daniel Borkmann | 27 | 100.00% | 1 | 100.00% |
Total | 27 | 100.00% | 1 | 100.00% |
static struct tcf_proto __rcu **clsact_find_tcf(struct Qdisc *sch,
unsigned long cl)
{
struct net_device *dev = qdisc_dev(sch);
switch (cl) {
case TC_H_MIN(TC_H_MIN_INGRESS):
return &dev->ingress_cl_list;
case TC_H_MIN(TC_H_MIN_EGRESS):
return &dev->egress_cl_list;
default:
return NULL;
}
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Daniel Borkmann | 63 | 100.00% | 1 | 100.00% |
Total | 63 | 100.00% | 1 | 100.00% |
static int clsact_init(struct Qdisc *sch, struct nlattr *opt)
{
net_inc_ingress_queue();
net_inc_egress_queue();
sch->flags |= TCQ_F_CPUSTATS;
return 0;
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Daniel Borkmann | 31 | 100.00% | 1 | 100.00% |
Total | 31 | 100.00% | 1 | 100.00% |
static void clsact_destroy(struct Qdisc *sch)
{
struct net_device *dev = qdisc_dev(sch);
tcf_destroy_chain(&dev->ingress_cl_list);
tcf_destroy_chain(&dev->egress_cl_list);
net_dec_ingress_queue();
net_dec_egress_queue();
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Daniel Borkmann | 43 | 100.00% | 1 | 100.00% |
Total | 43 | 100.00% | 1 | 100.00% |
static const struct Qdisc_class_ops clsact_class_ops = {
.leaf = ingress_leaf,
.get = clsact_get,
.put = ingress_put,
.walk = ingress_walk,
.tcf_chain = clsact_find_tcf,
.tcf_cl_offload = clsact_cl_offload,
.bind_tcf = clsact_bind_filter,
.unbind_tcf = ingress_put,
};
static struct Qdisc_ops clsact_qdisc_ops __read_mostly = {
.cl_ops = &clsact_class_ops,
.id = "clsact",
.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 | 423 | 53.95% | 4 | 16.00% |
Linus Torvalds (pre-git) | 256 | 32.65% | 1 | 4.00% |
Dave Jones | 35 | 4.46% | 1 | 4.00% |
Patrick McHardy | 24 | 3.06% | 5 | 20.00% |
Al Viro | 13 | 1.66% | 1 | 4.00% |
Alexei Starovoitov | 6 | 0.77% | 1 | 4.00% |
Linus Torvalds | 5 | 0.64% | 1 | 4.00% |
Arnaldo Carvalho de Melo | 5 | 0.64% | 2 | 8.00% |
David S. Miller | 5 | 0.64% | 1 | 4.00% |
Jiri Pirko | 3 | 0.38% | 1 | 4.00% |
Eric Dumazet | 2 | 0.26% | 1 | 4.00% |
Alexey Kuznetsov | 2 | 0.26% | 1 | 4.00% |
Geert Uytterhoeven | 1 | 0.13% | 1 | 4.00% |
John Fastabend | 1 | 0.13% | 1 | 4.00% |
Yang Yingliang | 1 | 0.13% | 1 | 4.00% |
Joe Perches | 1 | 0.13% | 1 | 4.00% |
Jamal Hadi Salim | 1 | 0.13% | 1 | 4.00% |
Total | 784 | 100.00% | 25 | 100.00% |
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.