cregit-Linux how code gets into the kernel

Release 4.18 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.
 */


#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt

#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_ratelimited("multiple ranges no longer supported\n"); return -EINVAL; } return nf_ct_netns_get(par->net, par->family); }

Contributors

PersonTokensPropCommitsCommitProp
Patrick McHardy3464.15%120.00%
Florian Westphal1426.42%240.00%
Jozsef Kadlecsik47.55%120.00%
Jan Engelhardt11.89%120.00%
Total53100.00%5100.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_range2 *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)); memset(&dst->base_proto, 0, sizeof(dst->base_proto)); 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 McHardy8878.57%133.33%
Thierry Du Tre1816.07%133.33%
Jozsef Kadlecsik65.36%133.33%
Total112100.00%3100.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_range2 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%111.11%
Patrick McHardy2727.00%222.22%
Jan Engelhardt55.00%222.22%
Varsha Rao44.00%111.11%
Herbert Xu22.00%111.11%
Thierry Du Tre11.00%111.11%
Eric Dumazet11.00%111.11%
Total100100.00%9100.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_range2 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%112.50%
Patrick McHardy2829.17%225.00%
Varsha Rao44.17%112.50%
Herbert Xu22.08%112.50%
Jan Engelhardt22.08%225.00%
Thierry Du Tre11.04%112.50%
Total96100.00%8100.00%


static unsigned int xt_snat_target_v1(struct sk_buff *skb, const struct xt_action_param *par) { const struct nf_nat_range *range_v1 = par->targinfo; struct nf_nat_range2 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))); memcpy(&range, range_v1, sizeof(*range_v1)); memset(&range.base_proto, 0, sizeof(range.base_proto)); return nf_nat_setup_info(ct, &range, NF_NAT_MANIP_SRC); }

Contributors

PersonTokensPropCommitsCommitProp
Patrick McHardy5345.30%114.29%
Thierry Du Tre3731.62%114.29%
Jozsef Kadlecsik1815.38%114.29%
Jan Engelhardt54.27%342.86%
Varsha Rao43.42%114.29%
Total117100.00%7100.00%


static unsigned int xt_dnat_target_v1(struct sk_buff *skb, const struct xt_action_param *par) { const struct nf_nat_range *range_v1 = par->targinfo; struct nf_nat_range2 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))); memcpy(&range, range_v1, sizeof(*range_v1)); memset(&range.base_proto, 0, sizeof(range.base_proto)); return nf_nat_setup_info(ct, &range, NF_NAT_MANIP_DST); }

Contributors

PersonTokensPropCommitsCommitProp
Thierry Du Tre9281.42%116.67%
Jozsef Kadlecsik97.96%116.67%
Patrick McHardy97.96%116.67%
Jan Engelhardt32.65%350.00%
Total113100.00%6100.00%


static unsigned int xt_snat_target_v2(struct sk_buff *skb, const struct xt_action_param *par) { const struct nf_nat_range2 *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
Thierry Du Tre81100.00%1100.00%
Total81100.00%1100.00%


static unsigned int xt_dnat_target_v2(struct sk_buff *skb, const struct xt_action_param *par) { const struct nf_nat_range2 *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 McHardy2633.77%228.57%
Thierry Du Tre2127.27%114.29%
Jozsef Kadlecsik1924.68%114.29%
Changli Gao56.49%114.29%
Varsha Rao45.19%114.29%
Jan Engelhardt22.60%114.29%
Total77100.00%7100.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, }, { .name = "SNAT", .revision = 2, .checkentry = xt_nat_checkentry, .destroy = xt_nat_destroy, .target = xt_snat_target_v2, .targetsize = sizeof(struct nf_nat_range2), .table = "nat", .hooks = (1 << NF_INET_POST_ROUTING) | (1 << NF_INET_LOCAL_IN), .me = THIS_MODULE, }, { .name = "DNAT", .revision = 2, .target = xt_dnat_target_v2, .targetsize = sizeof(struct nf_nat_range2), .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
Jozsef Kadlecsik735.00%120.00%
Patrick McHardy735.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 McHardy45835.98%624.00%
Thierry Du Tre36328.52%14.00%
Jozsef Kadlecsik28722.55%14.00%
Florian Westphal967.54%28.00%
Alexey Dobriyan201.57%312.00%
Jan Engelhardt191.49%728.00%
Varsha Rao161.26%14.00%
Changli Gao50.39%14.00%
Elison Niven40.31%14.00%
Herbert Xu40.31%14.00%
Eric Dumazet10.08%14.00%
Total1273100.00%25100.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.