cregit-Linux how code gets into the kernel

Release 4.11 net/ipv4/netfilter/iptable_nat.c

/* (C) 1999-2001 Paul `Rusty' Russell
 * (C) 2002-2006 Netfilter Core Team <coreteam@netfilter.org>
 * (C) 2011 Patrick McHardy <kaber@trash.net>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */

#include <linux/module.h>
#include <linux/netfilter.h>
#include <linux/netfilter_ipv4.h>
#include <linux/netfilter_ipv4/ip_tables.h>
#include <linux/ip.h>
#include <net/ip.h>

#include <net/netfilter/nf_nat.h>
#include <net/netfilter/nf_nat_core.h>
#include <net/netfilter/nf_nat_l3proto.h>

static int __net_init iptable_nat_table_init(struct net *net);


static const struct xt_table nf_nat_ipv4_table = {
	.name		= "nat",
	.valid_hooks	= (1 << NF_INET_PRE_ROUTING) |
			  (1 << NF_INET_POST_ROUTING) |
			  (1 << NF_INET_LOCAL_OUT) |
			  (1 << NF_INET_LOCAL_IN),
	.me		= THIS_MODULE,
	.af		= NFPROTO_IPV4,
	.table_init	= iptable_nat_table_init,
};


static unsigned int iptable_nat_do_chain(void *priv, struct sk_buff *skb, const struct nf_hook_state *state, struct nf_conn *ct) { return ipt_do_table(skb, state, state->net->ipv4.nat_table); }

Contributors

PersonTokensPropCommitsCommitProp
Patrick McHardy3069.77%116.67%
Eric W. Biedermann49.30%233.33%
Jozsef Kadlecsik49.30%116.67%
David S. Miller36.98%116.67%
Pablo Neira Ayuso24.65%116.67%
Total43100.00%6100.00%


static unsigned int iptable_nat_ipv4_fn(void *priv, struct sk_buff *skb, const struct nf_hook_state *state) { return nf_nat_ipv4_fn(priv, skb, state, iptable_nat_do_chain); }

Contributors

PersonTokensPropCommitsCommitProp
Jozsef Kadlecsik2264.71%116.67%
David S. Miller38.82%116.67%
Pablo Neira Ayuso38.82%116.67%
Eric W. Biedermann38.82%116.67%
Herbert Xu25.88%116.67%
Patrick McHardy12.94%116.67%
Total34100.00%6100.00%


static unsigned int iptable_nat_ipv4_in(void *priv, struct sk_buff *skb, const struct nf_hook_state *state) { return nf_nat_ipv4_in(priv, skb, state, iptable_nat_do_chain); }

Contributors

PersonTokensPropCommitsCommitProp
Jozsef Kadlecsik2161.76%116.67%
Pablo Neira Ayuso411.76%116.67%
David S. Miller38.82%116.67%
Eric W. Biedermann38.82%116.67%
Herbert Xu25.88%116.67%
Patrick McHardy12.94%116.67%
Total34100.00%6100.00%


static unsigned int iptable_nat_ipv4_out(void *priv, struct sk_buff *skb, const struct nf_hook_state *state) { return nf_nat_ipv4_out(priv, skb, state, iptable_nat_do_chain); }

Contributors

PersonTokensPropCommitsCommitProp
Jozsef Kadlecsik2161.76%114.29%
David S. Miller38.82%114.29%
Pablo Neira Ayuso38.82%114.29%
Eric W. Biedermann38.82%114.29%
Patrick McHardy25.88%228.57%
Herbert Xu25.88%114.29%
Total34100.00%7100.00%


static unsigned int iptable_nat_ipv4_local_fn(void *priv, struct sk_buff *skb, const struct nf_hook_state *state) { return nf_nat_ipv4_local_fn(priv, skb, state, iptable_nat_do_chain); }

Contributors

PersonTokensPropCommitsCommitProp
Jozsef Kadlecsik2264.71%116.67%
David S. Miller38.82%116.67%
Pablo Neira Ayuso38.82%116.67%
Eric W. Biedermann38.82%116.67%
Herbert Xu25.88%116.67%
Patrick McHardy12.94%116.67%
Total34100.00%6100.00%

static struct nf_hook_ops nf_nat_ipv4_ops[] __read_mostly = { /* Before packet filtering, change destination */ { .hook = iptable_nat_ipv4_in, .pf = NFPROTO_IPV4, .hooknum = NF_INET_PRE_ROUTING, .priority = NF_IP_PRI_NAT_DST, }, /* After packet filtering, change source */ { .hook = iptable_nat_ipv4_out, .pf = NFPROTO_IPV4, .hooknum = NF_INET_POST_ROUTING, .priority = NF_IP_PRI_NAT_SRC, }, /* Before packet filtering, change destination */ { .hook = iptable_nat_ipv4_local_fn, .pf = NFPROTO_IPV4, .hooknum = NF_INET_LOCAL_OUT, .priority = NF_IP_PRI_NAT_DST, }, /* After packet filtering, change source */ { .hook = iptable_nat_ipv4_fn, .pf = NFPROTO_IPV4, .hooknum = NF_INET_LOCAL_IN, .priority = NF_IP_PRI_NAT_SRC, }, };
static int __net_init iptable_nat_table_init(struct net *net) { struct ipt_replace *repl; int ret; if (net->ipv4.nat_table) return 0; repl = ipt_alloc_initial_table(&nf_nat_ipv4_table); if (repl == NULL) return -ENOMEM; ret = ipt_register_table(net, &nf_nat_ipv4_table, repl, nf_nat_ipv4_ops, &net->ipv4.nat_table); kfree(repl); return ret; }

Contributors

PersonTokensPropCommitsCommitProp
Patrick McHardy4152.56%240.00%
Florian Westphal2633.33%240.00%
Jozsef Kadlecsik1114.10%120.00%
Total78100.00%5100.00%


static void __net_exit iptable_nat_net_exit(struct net *net) { if (!net->ipv4.nat_table) return; ipt_unregister_table(net, net->ipv4.nat_table, nf_nat_ipv4_ops); net->ipv4.nat_table = NULL; }

Contributors

PersonTokensPropCommitsCommitProp
Patrick McHardy2353.49%133.33%
Florian Westphal2046.51%266.67%
Total43100.00%3100.00%

static struct pernet_operations iptable_nat_net_ops = { .exit = iptable_nat_net_exit, };
static int __init iptable_nat_init(void) { int ret = register_pernet_subsys(&iptable_nat_net_ops); if (ret) return ret; ret = iptable_nat_table_init(&init_net); if (ret) unregister_pernet_subsys(&iptable_nat_net_ops); return ret; }

Contributors

PersonTokensPropCommitsCommitProp
Patrick McHardy1941.30%250.00%
Jozsef Kadlecsik1430.43%125.00%
Florian Westphal1328.26%125.00%
Total46100.00%4100.00%


static void __exit iptable_nat_exit(void) { unregister_pernet_subsys(&iptable_nat_net_ops); }

Contributors

PersonTokensPropCommitsCommitProp
Jozsef Kadlecsik960.00%133.33%
Patrick McHardy640.00%266.67%
Total15100.00%3100.00%

module_init(iptable_nat_init); module_exit(iptable_nat_exit); MODULE_LICENSE("GPL");

Overall Contributors

PersonTokensPropCommitsCommitProp
Jozsef Kadlecsik24842.54%15.88%
Patrick McHardy19433.28%635.29%
Florian Westphal7512.86%211.76%
David S. Miller193.26%317.65%
Pablo Neira Ayuso193.26%15.88%
Eric W. Biedermann162.74%211.76%
Herbert Xu81.37%15.88%
Jan Engelhardt40.69%15.88%
Total583100.00%17100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.