]> git.ipfire.org Git - thirdparty/ipset.git/commitdiff
Separate prefixlens from ip_set core.
authorJozsef Kadlecsik <kadlec@blackhole.kfki.hu>
Thu, 13 Jan 2011 20:48:17 +0000 (21:48 +0100)
committerJozsef Kadlecsik <kadlec@blackhole.kfki.hu>
Thu, 13 Jan 2011 20:48:17 +0000 (21:48 +0100)
Separate prefixlens from ip_set core for better readibility and honoring
the independence.
Also, comment that prefixlens were borrowed from Jan Engelhardt.

13 files changed:
kernel/Kbuild
kernel/include/linux/netfilter/ipset/ip_set.h
kernel/include/linux/netfilter/ipset/pfxlen.h [new file with mode: 0644]
kernel/ip_set_bitmap_ip.c
kernel/ip_set_bitmap_ipmac.c
kernel/ip_set_core.c [moved from kernel/ip_set.c with 73% similarity]
kernel/ip_set_hash_ip.c
kernel/ip_set_hash_ipport.c
kernel/ip_set_hash_ipportip.c
kernel/ip_set_hash_ipportnet.c
kernel/ip_set_hash_net.c
kernel/ip_set_hash_netport.c
kernel/pfxlen.c [new file with mode: 0644]

index dca009ad7553276a0c12808ceb74b7dbd5fcb6f1..fec90bee35dd98efd17ee0301bd7c0576a20a6ad 100644 (file)
@@ -1,6 +1,7 @@
 EXTRA_CFLAGS := -I$(M)/include \
        -DCONFIG_IP_SET_MAX=$(IP_SET_MAX)
 
+ip_set-y := ip_set_core.o pfxlen.o
 obj-m += ip_set.o xt_set.o
 obj-m += ip_set_bitmap_ip.o ip_set_bitmap_ipmac.o ip_set_bitmap_port.o
 obj-m += ip_set_hash_ip.o ip_set_hash_ipport.o ip_set_hash_ipportip.o
index 72ff624ddbc220f1a256ed41281bd7dc3207bad2..6644a4ce59ecbfb67ec1c14cbf2329ae771d601c 100644 (file)
@@ -491,15 +491,6 @@ bitmap_bytes(u32 a, u32 b)
        return 4 * ((((b - a + 8) / 8) + 3) / 4);
 }
 
-/* Prefixlen maps */
-extern const union nf_inet_addr prefixlen_netmask_map[];
-extern const union nf_inet_addr prefixlen_hostmask_map[];
-
-#define NETMASK(n)     prefixlen_netmask_map[n].ip
-#define NETMASK6(n)    prefixlen_netmask_map[n].ip6
-#define HOSTMASK(n)    prefixlen_hostmask_map[n].ip
-#define HOSTMASK6(n)   prefixlen_hostmask_map[n].ip6
-
 /* Interface to iptables/ip6tables */
 
 #define SO_IP_SET              83
diff --git a/kernel/include/linux/netfilter/ipset/pfxlen.h b/kernel/include/linux/netfilter/ipset/pfxlen.h
new file mode 100644 (file)
index 0000000..fe7153c
--- /dev/null
@@ -0,0 +1,16 @@
+#ifndef _PFXLEN_H
+#define _PFXLEN_H
+
+#include <asm/byteorder.h>
+#include <linux/netfilter.h> 
+
+/* Prefixlen maps, by Jan Engelhardt  */
+extern const union nf_inet_addr prefixlen_netmask_map[];
+extern const union nf_inet_addr prefixlen_hostmask_map[];
+
+#define NETMASK(n)     prefixlen_netmask_map[n].ip
+#define NETMASK6(n)    prefixlen_netmask_map[n].ip6
+#define HOSTMASK(n)    prefixlen_hostmask_map[n].ip
+#define HOSTMASK6(n)   prefixlen_hostmask_map[n].ip6
+
+#endif /*_PFXLEN_H */
index 99480808523b3d640fe64084962834db918ad10b..edcda942a612922c126fa82741ffdc17e4e1ca7d 100644 (file)
@@ -23,6 +23,7 @@
 #include <net/netlink.h>
 #include <net/tcp.h>
 
+#include <linux/netfilter/ipset/pfxlen.h>
 #include <linux/netfilter/ipset/ip_set.h>
 #include <linux/netfilter/ipset/ip_set_bitmap.h>
 #define IP_SET_BITMAP_TIMEOUT
index 1fae7820560ccfb6516ca7d79637f2ae70d52476..3f2ff9c5fb789a966c00835952c6d22e1856fd60 100644 (file)
@@ -25,6 +25,7 @@
 #include <linux/timer.h>
 #include <net/netlink.h>
 
+#include <linux/netfilter/ipset/pfxlen.h>
 #include <linux/netfilter/ipset/ip_set.h>
 #include <linux/netfilter/ipset/ip_set_timeout.h>
 #include <linux/netfilter/ipset/ip_set_bitmap.h>
similarity index 73%
rename from kernel/ip_set.c
rename to kernel/ip_set_core.c
index 85e4e23ecd7b3a9da9c5b8fda30bd1753bdf6224..67b4c21b5a25e6d1afc2ae31c784892093f4fe04 100644 (file)
@@ -41,294 +41,6 @@ MODULE_AUTHOR("Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>");
 MODULE_DESCRIPTION("core IP set support");
 MODULE_ALIAS_NFNL_SUBSYS(NFNL_SUBSYS_IPSET);
 
-/*
- * Prefixlen maps for fast conversions
- */
-
-#define E(a, b, c, d) \
-       {.ip6 = { \
-               __constant_htonl(a), __constant_htonl(b), \
-               __constant_htonl(c), __constant_htonl(d), \
-       } }
-
-/*
- * This table works for both IPv4 and IPv6;
- * just use prefixlen_netmask_map[prefixlength].ip.
- */
-const union nf_inet_addr prefixlen_netmask_map[] = {
-       E(0x00000000, 0x00000000, 0x00000000, 0x00000000),
-       E(0x80000000, 0x00000000, 0x00000000, 0x00000000),
-       E(0xC0000000, 0x00000000, 0x00000000, 0x00000000),
-       E(0xE0000000, 0x00000000, 0x00000000, 0x00000000),
-       E(0xF0000000, 0x00000000, 0x00000000, 0x00000000),
-       E(0xF8000000, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFC000000, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFE000000, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFF000000, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFF800000, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFC00000, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFE00000, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFF00000, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFF80000, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFFC0000, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFFE0000, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFFF0000, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFFF8000, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFFFC000, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFFFE000, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFFFF000, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFFFF800, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFFFFC00, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFFFFE00, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFFFFF00, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFFFFF80, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFFFFFC0, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFFFFFE0, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFFFFFF0, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFFFFFF8, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFC, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFE, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0x80000000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xC0000000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xE0000000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xF0000000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xF8000000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFC000000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFE000000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFF000000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFF800000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFC00000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFE00000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFF00000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFF80000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFC0000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFE0000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFF0000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFF8000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFC000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFE000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFF000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFF800, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFC00, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFE00, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFF00, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFF80, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFC0, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFE0, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFF0, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFF8, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFC, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFE, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0x80000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xC0000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xE0000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xF0000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xF8000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFC000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFE000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFF000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFF800000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFC00000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFE00000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFF00000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFF80000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFC0000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFE0000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF0000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF8000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFC000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFE000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFF000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFF800, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFC00, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFE00, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFF00, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFF80, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFC0, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFE0, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFF0, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFF8, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFC, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFE, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x80000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xC0000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xE0000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xF0000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xF8000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFC000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFE000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFF000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFF800000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFC00000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFE00000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFF00000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFF80000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFC0000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFE0000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF0000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF8000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFC000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFE000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFF000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFF800),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFC00),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFE00),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFF00),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFF80),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFC0),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFE0),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFF0),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFF8),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFC),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFE),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF),
-};
-EXPORT_SYMBOL_GPL(prefixlen_netmask_map);
-
-#undef  E
-#define E(a, b, c, d) \
-       {.ip6 = { a, b, c, d } }
-
-/*
- * This table works for both IPv4 and IPv6;
- * just use prefixlen_hostmask_map[prefixlength].ip.
- */
-const union nf_inet_addr prefixlen_hostmask_map[] = {
-       E(0x00000000, 0x00000000, 0x00000000, 0x00000000),
-       E(0x80000000, 0x00000000, 0x00000000, 0x00000000),
-       E(0xC0000000, 0x00000000, 0x00000000, 0x00000000),
-       E(0xE0000000, 0x00000000, 0x00000000, 0x00000000),
-       E(0xF0000000, 0x00000000, 0x00000000, 0x00000000),
-       E(0xF8000000, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFC000000, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFE000000, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFF000000, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFF800000, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFC00000, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFE00000, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFF00000, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFF80000, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFFC0000, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFFE0000, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFFF0000, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFFF8000, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFFFC000, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFFFE000, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFFFF000, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFFFF800, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFFFFC00, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFFFFE00, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFFFFF00, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFFFFF80, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFFFFFC0, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFFFFFE0, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFFFFFF0, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFFFFFF8, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFC, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFE, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0x80000000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xC0000000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xE0000000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xF0000000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xF8000000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFC000000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFE000000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFF000000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFF800000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFC00000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFE00000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFF00000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFF80000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFC0000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFE0000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFF0000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFF8000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFC000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFE000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFF000, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFF800, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFC00, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFE00, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFF00, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFF80, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFC0, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFE0, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFF0, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFF8, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFC, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFE, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0x80000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xC0000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xE0000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xF0000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xF8000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFC000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFE000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFF000000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFF800000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFC00000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFE00000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFF00000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFF80000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFC0000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFE0000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF0000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF8000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFC000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFE000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFF000, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFF800, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFC00, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFE00, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFF00, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFF80, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFC0, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFE0, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFF0, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFF8, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFC, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFE, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x80000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xC0000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xE0000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xF0000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xF8000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFC000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFE000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFF000000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFF800000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFC00000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFE00000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFF00000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFF80000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFC0000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFE0000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF0000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF8000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFC000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFE000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFF000),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFF800),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFC00),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFE00),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFF00),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFF80),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFC0),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFE0),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFF0),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFF8),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFC),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFE),
-       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF),
-};
-EXPORT_SYMBOL_GPL(prefixlen_hostmask_map);
-
 /*
  * The set types are implemented in modules and registered set types
  * can be found in ip_set_type_list. Adding/deleting types is
index baacf4c3d398a605deda4623d947836f19594ae7..c5b73ddc5015932c10312b4a0d9c4b1c180bb15e 100644 (file)
@@ -23,6 +23,7 @@
 #include <net/tcp.h>
 
 #include <linux/netfilter.h>
+#include <linux/netfilter/ipset/pfxlen.h>
 #include <linux/netfilter/ipset/ip_set.h>
 #include <linux/netfilter/ipset/ip_set_timeout.h>
 #include <linux/netfilter/ipset/ip_set_hash.h>
index f9826a2cea00bcfceecca4d011ed6107bef12bea..9f0c13039b8fe53e05daf4b0f921865897be98dc 100644 (file)
@@ -23,6 +23,7 @@
 #include <net/tcp.h>
 
 #include <linux/netfilter.h>
+#include <linux/netfilter/ipset/pfxlen.h>
 #include <linux/netfilter/ipset/ip_set.h>
 #include <linux/netfilter/ipset/ip_set_timeout.h>
 #include <linux/netfilter/ipset/ip_set_getport.h>
index a047c0ec4c5c74085a909be3bb9fc8a3f27f93ca..84a4a41c935abd581cf76e0c92d048080a963ebc 100644 (file)
@@ -23,6 +23,7 @@
 #include <net/tcp.h>
 
 #include <linux/netfilter.h>
+#include <linux/netfilter/ipset/pfxlen.h>
 #include <linux/netfilter/ipset/ip_set.h>
 #include <linux/netfilter/ipset/ip_set_timeout.h>
 #include <linux/netfilter/ipset/ip_set_getport.h>
index 08e0de96a68be69d3a828bf382ab2be8be0679b3..5c857c4afcfaf47b21277a493d5922e247000f28 100644 (file)
@@ -23,6 +23,7 @@
 #include <net/tcp.h>
 
 #include <linux/netfilter.h>
+#include <linux/netfilter/ipset/pfxlen.h>
 #include <linux/netfilter/ipset/ip_set.h>
 #include <linux/netfilter/ipset/ip_set_timeout.h>
 #include <linux/netfilter/ipset/ip_set_getport.h>
index 499f80564f1fb9245f2d5c301ef8c613d9d6ca94..6096830f1b903310aba2387dbf953aa5d4d1e0dc 100644 (file)
@@ -22,6 +22,7 @@
 #include <net/netlink.h>
 
 #include <linux/netfilter.h>
+#include <linux/netfilter/ipset/pfxlen.h>
 #include <linux/netfilter/ipset/ip_set.h>
 #include <linux/netfilter/ipset/ip_set_timeout.h>
 #include <linux/netfilter/ipset/ip_set_hash.h>
index 9233ce0d39af79ddabf4e39c25b16648544fddea..b2e1ccad12c64995c0ab4f11540c127383a801f1 100644 (file)
@@ -22,6 +22,7 @@
 #include <net/netlink.h>
 
 #include <linux/netfilter.h>
+#include <linux/netfilter/ipset/pfxlen.h>
 #include <linux/netfilter/ipset/ip_set.h>
 #include <linux/netfilter/ipset/ip_set_timeout.h>
 #include <linux/netfilter/ipset/ip_set_getport.h>
diff --git a/kernel/pfxlen.c b/kernel/pfxlen.c
new file mode 100644 (file)
index 0000000..5f16b6d
--- /dev/null
@@ -0,0 +1,289 @@
+#include <linux/netfilter/ipset/pfxlen.h>
+
+/*
+ * Prefixlen maps for fast conversions, by Jan Engelhardt.
+ */
+
+#define E(a, b, c, d) \
+       {.ip6 = { \
+               __constant_htonl(a), __constant_htonl(b), \
+               __constant_htonl(c), __constant_htonl(d), \
+       } }
+
+/*
+ * This table works for both IPv4 and IPv6;
+ * just use prefixlen_netmask_map[prefixlength].ip.
+ */
+const union nf_inet_addr prefixlen_netmask_map[] = {
+       E(0x00000000, 0x00000000, 0x00000000, 0x00000000),
+       E(0x80000000, 0x00000000, 0x00000000, 0x00000000),
+       E(0xC0000000, 0x00000000, 0x00000000, 0x00000000),
+       E(0xE0000000, 0x00000000, 0x00000000, 0x00000000),
+       E(0xF0000000, 0x00000000, 0x00000000, 0x00000000),
+       E(0xF8000000, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFC000000, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFE000000, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFF000000, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFF800000, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFC00000, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFE00000, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFF00000, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFF80000, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFFC0000, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFFE0000, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFFF0000, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFFF8000, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFFFC000, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFFFE000, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFFFF000, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFFFF800, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFFFFC00, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFFFFE00, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFFFFF00, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFFFFF80, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFFFFFC0, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFFFFFE0, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFFFFFF0, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFFFFFF8, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFC, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFE, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0x80000000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xC0000000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xE0000000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xF0000000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xF8000000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFC000000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFE000000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFF000000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFF800000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFC00000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFE00000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFF00000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFF80000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFC0000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFE0000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFF0000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFF8000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFC000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFE000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFF000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFF800, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFC00, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFE00, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFF00, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFF80, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFC0, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFE0, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFF0, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFF8, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFC, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFE, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0x80000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xC0000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xE0000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xF0000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xF8000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFC000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFE000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFF000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFF800000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFC00000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFE00000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFF00000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFF80000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFC0000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFE0000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF0000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF8000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFC000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFE000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFF000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFF800, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFC00, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFE00, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFF00, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFF80, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFC0, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFE0, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFF0, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFF8, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFC, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFE, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x80000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xC0000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xE0000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xF0000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xF8000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFC000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFE000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFF000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFF800000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFC00000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFE00000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFF00000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFF80000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFC0000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFE0000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF0000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF8000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFC000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFE000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFF000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFF800),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFC00),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFE00),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFF00),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFF80),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFC0),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFE0),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFF0),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFF8),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFC),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFE),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF),
+};
+EXPORT_SYMBOL_GPL(prefixlen_netmask_map);
+
+#undef  E
+#define E(a, b, c, d) \
+       {.ip6 = { a, b, c, d } }
+
+/*
+ * This table works for both IPv4 and IPv6;
+ * just use prefixlen_hostmask_map[prefixlength].ip.
+ */
+const union nf_inet_addr prefixlen_hostmask_map[] = {
+       E(0x00000000, 0x00000000, 0x00000000, 0x00000000),
+       E(0x80000000, 0x00000000, 0x00000000, 0x00000000),
+       E(0xC0000000, 0x00000000, 0x00000000, 0x00000000),
+       E(0xE0000000, 0x00000000, 0x00000000, 0x00000000),
+       E(0xF0000000, 0x00000000, 0x00000000, 0x00000000),
+       E(0xF8000000, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFC000000, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFE000000, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFF000000, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFF800000, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFC00000, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFE00000, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFF00000, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFF80000, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFFC0000, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFFE0000, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFFF0000, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFFF8000, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFFFC000, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFFFE000, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFFFF000, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFFFF800, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFFFFC00, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFFFFE00, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFFFFF00, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFFFFF80, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFFFFFC0, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFFFFFE0, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFFFFFF0, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFFFFFF8, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFC, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFE, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0x80000000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xC0000000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xE0000000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xF0000000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xF8000000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFC000000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFE000000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFF000000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFF800000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFC00000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFE00000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFF00000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFF80000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFC0000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFE0000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFF0000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFF8000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFC000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFE000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFF000, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFF800, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFC00, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFE00, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFF00, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFF80, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFC0, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFE0, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFF0, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFF8, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFC, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFE, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0x80000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xC0000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xE0000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xF0000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xF8000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFC000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFE000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFF000000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFF800000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFC00000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFE00000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFF00000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFF80000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFC0000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFE0000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF0000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF8000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFC000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFE000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFF000, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFF800, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFC00, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFE00, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFF00, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFF80, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFC0, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFE0, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFF0, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFF8, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFC, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFE, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x80000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xC0000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xE0000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xF0000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xF8000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFC000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFE000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFF000000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFF800000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFC00000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFE00000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFF00000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFF80000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFC0000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFE0000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF0000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF8000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFC000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFE000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFF000),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFF800),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFC00),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFE00),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFF00),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFF80),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFC0),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFE0),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFF0),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFF8),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFC),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFE),
+       E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF),
+};
+EXPORT_SYMBOL_GPL(prefixlen_hostmask_map);