cregit-Linux how code gets into the kernel

Release 4.14 net/netfilter/xt_nat.c

Directory: net/netfilter
/*
 * (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/skbuff.h>
#include <linux/netfilter.h>
#include <linux/netfilter/x_tables.h>
#include <net/netfilter/nf_nat_core.h>


static int xt_nat_checkentry_v0(const struct xt_tgchk_param *par) { const struct nf_nat_ipv4_multi_range_compat *mr = par->targinfo; if (mr->rangesize != 1) { pr_info("%s: multiple ranges no longer supported\n", par->target->name); return -EINVAL; } return nf_ct_netns_get(par->net, par->family); }

Contributors

PersonTokensPropCommitsCommitProp
Patrick McHardy4169.49%125.00%
Florian Westphal1220.34%125.00%
Jozsef Kadlecsik58.47%125.00%
Jan Engelhardt11.69%125.00%
Total59100.00%4100.00%


static int xt_nat_checkentry(const struct xt_tgchk_param *par) { return nf_ct_netns_get(par->net, par->family); }

Contributors

PersonTokensPropCommitsCommitProp
Florian Westphal2291.67%150.00%
Patrick McHardy28.33%150.00%
Total24100.00%2100.00%


static void xt_nat_destroy(const struct xt_tgdtor_param *par) { nf_ct_netns_put(par->net, par->family); }

Contributors

PersonTokensPropCommitsCommitProp
Florian Westphal23100.00%1100.00%
Total23100.00%1100.00%


static void xt_nat_convert_range(struct nf_nat_range *dst, const struct nf_nat_ipv4_range *src) { memset(&dst->min_addr, 0, sizeof(dst->min_addr)); memset(&dst->max_addr, 0, sizeof(dst->max_addr)); dst->flags = src->flags; dst->min_addr.ip = src->min_ip; dst->max_addr.ip = src->max_ip; dst->min_proto = src->min; dst->max_proto = src->max; }

Contributors

PersonTokensPropCommitsCommitProp
Patrick McHardy8993.68%150.00%
Jozsef Kadlecsik66.32%150.00%
Total95100.00%2100.00%


static unsigned int xt_snat_target_v0(struct sk_buff *skb, const struct xt_action_param *par) { const struct nf_nat_ipv4_multi_range_compat *mr = par->targinfo; struct nf_nat_range range; enum ip_conntrack_info ctinfo; struct nf_conn *ct; ct = nf_ct_get(skb, &ctinfo); WARN_ON(!(ct != NULL && (ctinfo == IP_CT_NEW || ctinfo == IP_CT_RELATED || ctinfo == IP_CT_RELATED_REPLY))); xt_nat_convert_range(&range, &mr->range[0]); return nf_nat_setup_info(ct, &range, NF_NAT_MANIP_SRC); }

Contributors

PersonTokensPropCommitsCommitProp
Jozsef Kadlecsik6060.00%112.50%
Patrick McHardy2828.00%225.00%
Jan Engelhardt55.00%225.00%
Varsha Rao44.00%112.50%
Herbert Xu22.00%112.50%
Eric Dumazet11.00%112.50%
Total100100.00%8100.00%


static unsigned int xt_dnat_target_v0(struct sk_buff *skb, const struct xt_action_param *par) { const struct nf_nat_ipv4_multi_range_compat *mr = par->targinfo; struct nf_nat_range range; enum ip_conntrack_info ctinfo; struct nf_conn *ct; ct = nf_ct_get(skb, &ctinfo); WARN_ON(!(ct != NULL && (ctinfo == IP_CT_NEW || ctinfo == IP_CT_RELATED))); xt_nat_convert_range(&range, &mr->range[0]); return nf_nat_setup_info(ct, &range, NF_NAT_MANIP_DST); }

Contributors

PersonTokensPropCommitsCommitProp
Jozsef Kadlecsik5961.46%114.29%
Patrick McHardy2930.21%228.57%
Varsha Rao44.17%114.29%
Jan Engelhardt22.08%228.57%
Herbert Xu22.08%114.29%
Total96100.00%7100.00%


static unsigned int xt_snat_target_v1(struct sk_buff *skb, const struct xt_action_param *par) { const struct nf_nat_range *range = par->targinfo; enum ip_conntrack_info ctinfo; struct nf_conn *ct; ct = nf_ct_get(skb, &ctinfo); WARN_ON(!(ct != NULL && (ctinfo == IP_CT_NEW || ctinfo == IP_CT_RELATED || ctinfo == IP_CT_RELATED_REPLY))); return nf_nat_setup_info(ct, range, NF_NAT_MANIP_SRC); }

Contributors

PersonTokensPropCommitsCommitProp
Patrick McHardy5466.67%116.67%
Jozsef Kadlecsik1822.22%116.67%
Jan Engelhardt56.17%350.00%
Varsha Rao44.94%116.67%
Total81100.00%6100.00%


static unsigned int xt_dnat_target_v1(struct sk_buff *skb, const struct xt_action_param *par) { const struct nf_nat_range *range = par->targinfo; enum ip_conntrack_info ctinfo; struct nf_conn *ct; ct = nf_ct_get(skb, &ctinfo); WARN_ON(!(ct != NULL && (ctinfo == IP_CT_NEW || ctinfo == IP_CT_RELATED))); return nf_nat_setup_info(ct, range, NF_NAT_MANIP_DST); }

Contributors

PersonTokensPropCommitsCommitProp
Patrick McHardy3545.45%225.00%
Jozsef Kadlecsik2836.36%112.50%
Jan Engelhardt56.49%337.50%
Changli Gao56.49%112.50%
Varsha Rao45.19%112.50%
Total77100.00%8100.00%

static struct xt_target xt_nat_target_reg[] __read_mostly = { { .name = "SNAT", .revision = 0, .checkentry = xt_nat_checkentry_v0, .destroy = xt_nat_destroy, .target = xt_snat_target_v0, .targetsize = sizeof(struct nf_nat_ipv4_multi_range_compat), .family = NFPROTO_IPV4, .table = "nat", .hooks = (1 << NF_INET_POST_ROUTING) | (1 << NF_INET_LOCAL_IN), .me = THIS_MODULE, }, { .name = "DNAT", .revision = 0, .checkentry = xt_nat_checkentry_v0, .destroy = xt_nat_destroy, .target = xt_dnat_target_v0, .targetsize = sizeof(struct nf_nat_ipv4_multi_range_compat), .family = NFPROTO_IPV4, .table = "nat", .hooks = (1 << NF_INET_PRE_ROUTING) | (1 << NF_INET_LOCAL_OUT), .me = THIS_MODULE, }, { .name = "SNAT", .revision = 1, .checkentry = xt_nat_checkentry, .destroy = xt_nat_destroy, .target = xt_snat_target_v1, .targetsize = sizeof(struct nf_nat_range), .table = "nat", .hooks = (1 << NF_INET_POST_ROUTING) | (1 << NF_INET_LOCAL_IN), .me = THIS_MODULE, }, { .name = "DNAT", .revision = 1, .checkentry = xt_nat_checkentry, .destroy = xt_nat_destroy, .target = xt_dnat_target_v1, .targetsize = sizeof(struct nf_nat_range), .table = "nat", .hooks = (1 << NF_INET_PRE_ROUTING) | (1 << NF_INET_LOCAL_OUT), .me = THIS_MODULE, }, };
static int __init xt_nat_init(void) { return xt_register_targets(xt_nat_target_reg, ARRAY_SIZE(xt_nat_target_reg)); }

Contributors

PersonTokensPropCommitsCommitProp
Patrick McHardy735.00%120.00%
Jozsef Kadlecsik735.00%120.00%
Alexey Dobriyan525.00%240.00%
Jan Engelhardt15.00%120.00%
Total20100.00%5100.00%


static void __exit xt_nat_exit(void) { xt_unregister_targets(xt_nat_target_reg, ARRAY_SIZE(xt_nat_target_reg)); }

Contributors

PersonTokensPropCommitsCommitProp
Alexey Dobriyan1052.63%266.67%
Patrick McHardy947.37%133.33%
Total19100.00%3100.00%

module_init(xt_nat_init); module_exit(xt_nat_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Patrick McHardy <kaber@trash.net>"); MODULE_ALIAS("ipt_SNAT"); MODULE_ALIAS("ipt_DNAT"); MODULE_ALIAS("ip6t_SNAT"); MODULE_ALIAS("ip6t_DNAT");

Overall Contributors

PersonTokensPropCommitsCommitProp
Patrick McHardy46951.37%626.09%
Jozsef Kadlecsik28831.54%14.35%
Florian Westphal879.53%14.35%
Alexey Dobriyan202.19%313.04%
Jan Engelhardt192.08%730.43%
Varsha Rao161.75%14.35%
Changli Gao50.55%14.35%
Herbert Xu40.44%14.35%
Elison Niven40.44%14.35%
Eric Dumazet10.11%14.35%
Total913100.00%23100.00%
Directory: net/netfilter
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.