cregit-Linux how code gets into the kernel

Release 4.18 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;
	
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

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 netlink_ext_ack *extack) { struct ingress_sched_data *q = qdisc_priv(sch); return q->block; }

Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)2567.57%133.33%
Jiri Pirko718.92%133.33%
Alexander Aring513.51%133.33%
Total37100.00%3100.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

PersonTokensPropCommitsCommitProp
Jiri Pirko29100.00%2100.00%
Total29100.00%2100.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

PersonTokensPropCommitsCommitProp
Jiri Pirko32100.00%1100.00%
Total32100.00%1100.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

PersonTokensPropCommitsCommitProp
Jiri Pirko28100.00%1100.00%
Total28100.00%1100.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

PersonTokensPropCommitsCommitProp
Jiri Pirko7975.96%660.00%
Daniel Borkmann1817.31%220.00%
Alexander Aring76.73%220.00%
Total104100.00%10100.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

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)2155.26%120.00%
Jiri Pirko1334.21%240.00%
Daniel Borkmann37.89%120.00%
Patrick McHardy12.63%120.00%
Total38100.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, .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

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

PersonTokensPropCommitsCommitProp
Daniel Borkmann5078.12%133.33%
Jiri Pirko914.06%133.33%
Alexander Aring57.81%133.33%
Total64100.00%3100.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

PersonTokensPropCommitsCommitProp
Jiri Pirko32100.00%1100.00%
Total32100.00%1100.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

PersonTokensPropCommitsCommitProp
Jiri Pirko32100.00%1100.00%
Total32100.00%1100.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

PersonTokensPropCommitsCommitProp
Jiri Pirko28100.00%1100.00%
Total28100.00%1100.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

PersonTokensPropCommitsCommitProp
Jiri Pirko28100.00%1100.00%
Total28100.00%1100.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

PersonTokensPropCommitsCommitProp
Jiri Pirko15184.83%660.00%
Daniel Borkmann1810.11%220.00%
Alexander Aring95.06%220.00%
Total178100.00%10100.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

PersonTokensPropCommitsCommitProp
Daniel Borkmann3258.18%133.33%
Jiri Pirko2341.82%266.67%
Total55100.00%3100.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

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
Jiri Pirko59646.09%825.00%
Daniel Borkmann32825.37%412.50%
Linus Torvalds (pre-git)24518.95%13.12%
Dave Jones302.32%13.12%
Alexander Aring262.01%39.38%
Patrick McHardy221.70%412.50%
Al Viro131.01%13.12%
Américo Wang110.85%13.12%
Arnaldo Carvalho de Melo50.39%26.25%
Linus Torvalds50.39%13.12%
David S. Miller50.39%13.12%
Alexey Kuznetsov20.15%13.12%
Eric Dumazet20.15%13.12%
Geert Uytterhoeven10.08%13.12%
Yang Yingliang10.08%13.12%
Joe Perches10.08%13.12%
Total1293100.00%32100.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.