linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / net / ipv4 / netfilter / ipt_NETMAP.c
index 736c4b5..b074467 100644 (file)
@@ -10,6 +10,7 @@
  * published by the Free Software Foundation.
  */
 
+#include <linux/config.h>
 #include <linux/ip.h>
 #include <linux/module.h>
 #include <linux/netdevice.h>
@@ -31,13 +32,25 @@ MODULE_DESCRIPTION("iptables 1:1 NAT mapping of IP networks target");
 static int
 check(const char *tablename,
       const void *e,
-      const struct xt_target *target,
       void *targinfo,
       unsigned int targinfosize,
       unsigned int hook_mask)
 {
        const struct ip_nat_multi_range_compat *mr = targinfo;
 
+       if (strcmp(tablename, "nat") != 0) {
+               DEBUGP(MODULENAME":check: bad table `%s'.\n", tablename);
+               return 0;
+       }
+       if (targinfosize != IPT_ALIGN(sizeof(*mr))) {
+               DEBUGP(MODULENAME":check: size %u.\n", targinfosize);
+               return 0;
+       }
+       if (hook_mask & ~((1 << NF_IP_PRE_ROUTING) | (1 << NF_IP_POST_ROUTING) |
+                         (1 << NF_IP_LOCAL_OUT))) {
+               DEBUGP(MODULENAME":check: bad hooks %x.\n", hook_mask);
+               return 0;
+       }
        if (!(mr->range[0].flags & IP_NAT_RANGE_MAP_IPS)) {
                DEBUGP(MODULENAME":check: bad MAP_IPS.\n");
                return 0;
@@ -54,7 +67,6 @@ target(struct sk_buff **pskb,
        const struct net_device *in,
        const struct net_device *out,
        unsigned int hooknum,
-       const struct xt_target *target,
        const void *targinfo,
        void *userinfo)
 {
@@ -89,23 +101,19 @@ target(struct sk_buff **pskb,
 static struct ipt_target target_module = { 
        .name           = MODULENAME,
        .target         = target, 
-       .targetsize     = sizeof(struct ip_nat_multi_range_compat),
-       .table          = "nat",
-       .hooks          = (1 << NF_IP_PRE_ROUTING) | (1 << NF_IP_POST_ROUTING) |
-                         (1 << NF_IP_LOCAL_OUT),
        .checkentry     = check,
        .me             = THIS_MODULE 
 };
 
-static int __init ipt_netmap_init(void)
+static int __init init(void)
 {
        return ipt_register_target(&target_module);
 }
 
-static void __exit ipt_netmap_fini(void)
+static void __exit fini(void)
 {
        ipt_unregister_target(&target_module);
 }
 
-module_init(ipt_netmap_init);
-module_exit(ipt_netmap_fini);
+module_init(init);
+module_exit(fini);