--- zzzz-none-000/linux-2.6.32.61/net/ipv4/netfilter/ipt_MASQUERADE.c 2013-06-10 09:43:48.000000000 +0000 +++ ar10-7272-687/linux-2.6.32.61/net/ipv4/netfilter/ipt_MASQUERADE.c 2011-10-18 07:17:20.000000000 +0000 @@ -1,7 +1,8 @@ /* Masquerade. Simple mapping which alters range to a local IP address (depending on route). */ -/* (C) 1999-2001 Paul `Rusty' Russell +/* 9/25/2010, Optimize for strict implementation of Cone, by yingming.yu@atheros.com + * (C) 1999-2001 Paul `Rusty' Russell * (C) 2002-2006 Netfilter Core Team * * This program is free software; you can redistribute it and/or modify @@ -27,6 +28,31 @@ MODULE_AUTHOR("Netfilter Core Team "); MODULE_DESCRIPTION("Xtables: automatic-address SNAT"); +/*handle NATTYPE Stuff,only if NATTYPE module was defined*/ +#if defined(CONFIG_IP_NF_TARGET_NATTYPE_MODULE) + void (*nattype_update_rule)(struct sk_buff *skb, __be32 newsrc); +/* Registration hooks for nattype. */ +int +masq_register_nattype(void *nattype_fn) +{ + if (!nattype_fn) + return -1; + nattype_update_rule = nattype_fn; + printk("%s: register nattype_update_rule %p\n", __func__,nattype_update_rule); + return 0; +} +EXPORT_SYMBOL(masq_register_nattype); +/* Unregistration hooks for nattype. */ +int +masq_unregister_nattype(void) +{ + nattype_update_rule = NULL; + printk("%s:unregister nattype_update_rule\n",__func__); + return 0; +} +EXPORT_SYMBOL(masq_unregister_nattype); +#endif + /* FIXME: Multiple targets. --RR */ static bool masquerade_tg_check(const struct xt_tgchk_param *par) { @@ -76,6 +102,12 @@ return NF_DROP; } +/*handle NATTYPE Stuff,only if NATTYPE module was defined*/ +#if defined(CONFIG_IP_NF_TARGET_NATTYPE_MODULE) + if(nattype_update_rule) + nattype_update_rule(skb,newsrc); +#endif + nat->masq_index = par->out->ifindex; /* Transfer from original range. */ @@ -135,6 +167,7 @@ .notifier_call = masq_inet_event, }; + static struct xt_target masquerade_tg_reg __read_mostly = { .name = "MASQUERADE", .family = NFPROTO_IPV4, @@ -149,7 +182,9 @@ static int __init masquerade_tg_init(void) { int ret; - +#if defined(CONFIG_IP_NF_TARGET_NATTYPE_MODULE) + nattype_update_rule = NULL; +#endif ret = xt_register_target(&masquerade_tg_reg); if (ret == 0) {