cregit-Linux how code gets into the kernel

Release 4.11 net/bridge/netfilter/ebtable_broute.c

/*
 *  ebtable_broute
 *
 *      Authors:
 *      Bart De Schuymer <bdschuym@pandora.be>
 *
 *  April, 2002
 *
 *  This table lets you choose between routing and bridging for frames
 *  entering on a bridge enslaved nic. This table is traversed before any
 *  other ebtables table. See net/bridge/br_input.c.
 */

#include <linux/netfilter_bridge/ebtables.h>
#include <linux/module.h>
#include <linux/if_bridge.h>

/* EBT_ACCEPT means the frame will be bridged
 * EBT_DROP means the frame will be routed
 */

static struct ebt_entries initial_chain = {
	.name		= "BROUTING",
	.policy		= EBT_ACCEPT,
};


static struct ebt_replace_kernel initial_table = {
	.name		= "broute",
	.valid_hooks	= 1 << NF_BR_BROUTING,
	.entries_size	= sizeof(struct ebt_entries),
	.hook_entry	= {
		[NF_BR_BROUTING]	= &initial_chain,
        },
	.entries	= (char *)&initial_chain,
};


static int check(const struct ebt_table_info *info, unsigned int valid_hooks) { if (valid_hooks & ~(1 << NF_BR_BROUTING)) return -EINVAL; return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Bart De Schuymer34100.00%1100.00%
Total34100.00%1100.00%

static const struct ebt_table broute_table = { .name = "broute", .table = &initial_table, .valid_hooks = 1 << NF_BR_BROUTING, .check = check, .me = THIS_MODULE, };
static int ebt_broute(struct sk_buff *skb) { struct nf_hook_state state; int ret; nf_hook_state_init(&state, NF_BR_BROUTING, NFPROTO_BRIDGE, skb->dev, NULL, NULL, dev_net(skb->dev), NULL); ret = ebt_do_table(skb, &state, state.net->xt.broute_table); if (ret == NF_DROP) return 1; /* route it */ return 0; /* bridge it */ }

Contributors

PersonTokensPropCommitsCommitProp
Bart De Schuymer3950.65%240.00%
Eric W. Biedermann2735.06%120.00%
Alexey Dobriyan911.69%120.00%
Herbert Xu22.60%120.00%
Total77100.00%5100.00%


static int __net_init broute_net_init(struct net *net) { net->xt.broute_table = ebt_register_table(net, &broute_table); return PTR_ERR_OR_ZERO(net->xt.broute_table); }

Contributors

PersonTokensPropCommitsCommitProp
Alexey Dobriyan2466.67%360.00%
Bart De Schuymer1130.56%120.00%
Rusty Russell12.78%120.00%
Total36100.00%5100.00%


static void __net_exit broute_net_exit(struct net *net) { ebt_unregister_table(net, net->xt.broute_table); }

Contributors

PersonTokensPropCommitsCommitProp
Alexey Dobriyan23100.00%3100.00%
Total23100.00%3100.00%

static struct pernet_operations broute_net_ops = { .init = broute_net_init, .exit = broute_net_exit, };
static int __init ebtable_broute_init(void) { int ret; ret = register_pernet_subsys(&broute_net_ops); if (ret < 0) return ret; /* see br_input.c */ RCU_INIT_POINTER(br_should_route_hook, (br_should_route_hook_t *)ebt_broute); return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Alexey Dobriyan2863.64%228.57%
Bart De Schuymer818.18%228.57%
Eric Dumazet49.09%114.29%
Pavel Emelyanov36.82%114.29%
Stephen Hemminger12.27%114.29%
Total44100.00%7100.00%


static void __exit ebtable_broute_fini(void) { RCU_INIT_POINTER(br_should_route_hook, NULL); synchronize_net(); unregister_pernet_subsys(&broute_net_ops); }

Contributors

PersonTokensPropCommitsCommitProp
Bart De Schuymer1560.00%116.67%
Stephen Hemminger312.00%233.33%
Alexey Dobriyan312.00%116.67%
Pavel Emelyanov312.00%116.67%
Andrew Morton14.00%116.67%
Total25100.00%6100.00%

module_init(ebtable_broute_init); module_exit(ebtable_broute_fini); MODULE_LICENSE("GPL");

Overall Contributors

PersonTokensPropCommitsCommitProp
Bart De Schuymer19450.39%316.67%
Alexey Dobriyan10527.27%422.22%
Art Haas379.61%15.56%
Eric W. Biedermann277.01%15.56%
Pavel Emelyanov61.56%15.56%
Stephen Hemminger41.04%211.11%
Eric Dumazet41.04%15.56%
Andrew Morton30.78%15.56%
Herbert Xu20.52%15.56%
Jan Engelhardt10.26%15.56%
Rusty Russell10.26%15.56%
Al Viro10.26%15.56%
Total385100.00%18100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.