cregit-Linux how code gets into the kernel

Release 4.14 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>


struct ingress_sched_data {
	
struct tcf_block *block;
};


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_find(struct Qdisc *sch, u32 classid) { return TC_H_MIN(classid) + 1; }

Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)2295.65%150.00%
Américo Wang14.35%150.00%
Total23100.00%2100.00%


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

Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)2696.30%150.00%
Américo Wang13.70%150.00%
Total27100.00%2100.00%


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

Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)1392.86%150.00%
Américo Wang17.14%150.00%
Total14100.00%2100.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_block *ingress_tcf_block(struct Qdisc *sch, unsigned long cl) { struct ingress_sched_data *q = qdisc_priv(sch); return q->block; }

Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)2578.12%150.00%
Jiri Pirko721.88%150.00%
Total32100.00%2100.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

PersonTokensPropCommitsCommitProp
Jiri Pirko4561.64%133.33%
Daniel Borkmann2230.14%133.33%
Alexei Starovoitov68.22%133.33%
Total73100.00%3100.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

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)2167.74%125.00%
Jiri Pirko619.35%125.00%
Daniel Borkmann39.68%125.00%
Patrick McHardy13.23%125.00%
Total31100.00%4100.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, .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

PersonTokensPropCommitsCommitProp
Daniel Borkmann4597.83%150.00%
Américo Wang12.17%150.00%
Total46100.00%2100.00%


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

Contributors

PersonTokensPropCommitsCommitProp
Daniel Borkmann2696.30%150.00%
Américo Wang13.70%150.00%
Total27100.00%2100.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

PersonTokensPropCommitsCommitProp
Daniel Borkmann5084.75%150.00%
Jiri Pirko915.25%150.00%
Total59100.00%2100.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

PersonTokensPropCommitsCommitProp
Jiri Pirko6768.37%150.00%
Daniel Borkmann3131.63%150.00%
Total98100.00%2100.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

PersonTokensPropCommitsCommitProp
Daniel Borkmann3278.05%150.00%
Jiri Pirko921.95%150.00%
Total41100.00%2100.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

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 Borkmann33538.20%313.04%
Linus Torvalds (pre-git)24527.94%14.35%
Jiri Pirko19322.01%28.70%
Dave Jones303.42%14.35%
Patrick McHardy222.51%417.39%
Al Viro131.48%14.35%
Américo Wang111.25%14.35%
Alexei Starovoitov60.68%14.35%
Linus Torvalds50.57%14.35%
Arnaldo Carvalho de Melo50.57%28.70%
David S. Miller50.57%14.35%
Alexey Kuznetsov20.23%14.35%
Eric Dumazet20.23%14.35%
Yang Yingliang10.11%14.35%
Geert Uytterhoeven10.11%14.35%
Joe Perches10.11%14.35%
Total877100.00%23100.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.