cregit-Linux how code gets into the kernel

Release 4.11 net/sched/sch_ingress.c

Directory: net/sched
/* 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

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)20100.00%1100.00%
Total20100.00%1100.00%


static unsigned long ingress_get(struct Qdisc *sch, u32 classid) { return TC_H_MIN(classid) + 1; }

Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)23100.00%1100.00%
Total23100.00%1100.00%


static bool ingress_cl_offload(u32 classid) { return true; }

Contributors

PersonTokensPropCommitsCommitProp
Daniel Borkmann12100.00%1100.00%
Total12100.00%1100.00%


static unsigned long ingress_bind_filter(struct Qdisc *sch, unsigned long parent, u32 classid) { return ingress_get(sch, classid); }

Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)27100.00%1100.00%
Total27100.00%1100.00%


static void ingress_put(struct Qdisc *sch, unsigned long cl) { }

Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)14100.00%1100.00%
Total14100.00%1100.00%


static void ingress_walk(struct Qdisc *sch, struct qdisc_walker *walker) { }

Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)1493.33%150.00%
Joe Perches16.67%150.00%
Total15100.00%2100.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

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)2880.00%125.00%
Daniel Borkmann514.29%125.00%
Jamal Hadi Salim12.86%125.00%
John Fastabend12.86%125.00%
Total35100.00%4100.00%


static int ingress_init(struct Qdisc *sch, struct nlattr *opt) { net_inc_ingress_queue(); sch->flags |= TCQ_F_CPUSTATS; return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Daniel Borkmann2278.57%150.00%
Alexei Starovoitov621.43%150.00%
Total28100.00%2100.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

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)2165.62%120.00%
Daniel Borkmann825.00%240.00%
Patrick McHardy39.38%240.00%
Total32100.00%5100.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

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)3863.33%120.00%
Patrick McHardy1931.67%240.00%
Arnaldo Carvalho de Melo23.33%120.00%
Yang Yingliang11.67%120.00%
Total60100.00%5100.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

PersonTokensPropCommitsCommitProp
Daniel Borkmann46100.00%1100.00%
Total46100.00%1100.00%


static bool clsact_cl_offload(u32 classid) { return TC_H_MIN(classid) == TC_H_MIN(TC_H_MIN_INGRESS); }

Contributors

PersonTokensPropCommitsCommitProp
Daniel Borkmann20100.00%1100.00%
Total20100.00%1100.00%


static unsigned long clsact_bind_filter(struct Qdisc *sch, unsigned long parent, u32 classid) { return clsact_get(sch, classid); }

Contributors

PersonTokensPropCommitsCommitProp
Daniel Borkmann27100.00%1100.00%
Total27100.00%1100.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

PersonTokensPropCommitsCommitProp
Daniel Borkmann63100.00%1100.00%
Total63100.00%1100.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

PersonTokensPropCommitsCommitProp
Daniel Borkmann31100.00%1100.00%
Total31100.00%1100.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

PersonTokensPropCommitsCommitProp
Daniel Borkmann43100.00%1100.00%
Total43100.00%1100.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

PersonTokensPropCommitsCommitProp
Daniel Borkmann3368.75%133.33%
Linus Torvalds (pre-git)1225.00%133.33%
Al Viro36.25%133.33%
Total48100.00%3100.00%


static void __exit ingress_module_exit(void) { unregister_qdisc(&ingress_qdisc_ops); unregister_qdisc(&clsact_qdisc_ops); }

Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)1047.62%125.00%
Daniel Borkmann628.57%125.00%
Al Viro314.29%125.00%
Alexey Kuznetsov29.52%125.00%
Total21100.00%4100.00%

module_init(ingress_module_init); module_exit(ingress_module_exit); MODULE_ALIAS("sch_clsact"); MODULE_LICENSE("GPL");

Overall Contributors

PersonTokensPropCommitsCommitProp
Daniel Borkmann42353.95%416.00%
Linus Torvalds (pre-git)25632.65%14.00%
Dave Jones354.46%14.00%
Patrick McHardy243.06%520.00%
Al Viro131.66%14.00%
Alexei Starovoitov60.77%14.00%
Linus Torvalds50.64%14.00%
Arnaldo Carvalho de Melo50.64%28.00%
David S. Miller50.64%14.00%
Jiri Pirko30.38%14.00%
Eric Dumazet20.26%14.00%
Alexey Kuznetsov20.26%14.00%
Geert Uytterhoeven10.13%14.00%
John Fastabend10.13%14.00%
Yang Yingliang10.13%14.00%
Joe Perches10.13%14.00%
Jamal Hadi Salim10.13%14.00%
Total784100.00%25100.00%
Directory: net/sched
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.