This commit was manufactured by cvs2svn to create branch 'vserver'.
[linux-2.6.git] / include / linux / netfilter_ipv4 / ip_set_ipmap.h
diff --git a/include/linux/netfilter_ipv4/ip_set_ipmap.h b/include/linux/netfilter_ipv4/ip_set_ipmap.h
new file mode 100644 (file)
index 0000000..2435102
--- /dev/null
@@ -0,0 +1,56 @@
+#ifndef __IP_SET_IPMAP_H
+#define __IP_SET_IPMAP_H
+
+#include <linux/netfilter_ipv4/ip_set.h>
+
+#define SETTYPE_NAME "ipmap"
+#define MAX_RANGE 0x0000FFFF
+
+struct ip_set_ipmap {
+       void *members;                  /* the ipmap proper */
+       ip_set_ip_t first_ip;           /* host byte order, included in range */
+       ip_set_ip_t last_ip;            /* host byte order, included in range */
+       ip_set_ip_t netmask;            /* subnet netmask */
+       ip_set_ip_t sizeid;             /* size of set in IPs */
+       ip_set_ip_t hosts;              /* number of hosts in a subnet */
+};
+
+struct ip_set_req_ipmap_create {
+       ip_set_ip_t from;
+       ip_set_ip_t to;
+       ip_set_ip_t netmask;
+};
+
+struct ip_set_req_ipmap {
+       ip_set_ip_t ip;
+};
+
+unsigned int
+mask_to_bits(ip_set_ip_t mask)
+{
+       unsigned int bits = 32;
+       ip_set_ip_t maskaddr;
+       
+       if (mask == 0xFFFFFFFF)
+               return bits;
+       
+       maskaddr = 0xFFFFFFFE;
+       while (--bits >= 0 && maskaddr != mask)
+               maskaddr <<= 1;
+       
+       return bits;
+}
+
+ip_set_ip_t
+range_to_mask(ip_set_ip_t from, ip_set_ip_t to, unsigned int *bits)
+{
+       ip_set_ip_t mask = 0xFFFFFFFE;
+       
+       *bits = 32;
+       while (--(*bits) >= 0 && mask && (to & mask) != from)
+               mask <<= 1;
+               
+       return mask;
+}
+       
+#endif /* __IP_SET_IPMAP_H */