📄 130-netfilter_ipset.patch
字号:
++#endif /* __KERNEL__ */++#endif /*_IP_SET_H*/Index: linux-2.6.21.7/include/linux/netfilter_ipv4/ip_set_iphash.h===================================================================--- /dev/null+++ linux-2.6.21.7/include/linux/netfilter_ipv4/ip_set_iphash.h@@ -0,0 +1,30 @@+#ifndef __IP_SET_IPHASH_H+#define __IP_SET_IPHASH_H++#include <linux/netfilter_ipv4/ip_set.h>++#define SETTYPE_NAME "iphash"+#define MAX_RANGE 0x0000FFFF++struct ip_set_iphash {+ ip_set_ip_t *members; /* the iphash proper */+ uint32_t elements; /* number of elements */+ uint32_t hashsize; /* hash size */+ uint16_t probes; /* max number of probes */+ uint16_t resize; /* resize factor in percent */+ ip_set_ip_t netmask; /* netmask */+ void *initval[0]; /* initvals for jhash_1word */+};++struct ip_set_req_iphash_create {+ uint32_t hashsize;+ uint16_t probes;+ uint16_t resize;+ ip_set_ip_t netmask;+};++struct ip_set_req_iphash {+ ip_set_ip_t ip;+};++#endif /* __IP_SET_IPHASH_H */Index: linux-2.6.21.7/include/linux/netfilter_ipv4/ip_set_ipmap.h===================================================================--- /dev/null+++ linux-2.6.21.7/include/linux/netfilter_ipv4/ip_set_ipmap.h@@ -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 */Index: linux-2.6.21.7/include/linux/netfilter_ipv4/ip_set_ipporthash.h===================================================================--- /dev/null+++ linux-2.6.21.7/include/linux/netfilter_ipv4/ip_set_ipporthash.h@@ -0,0 +1,34 @@+#ifndef __IP_SET_IPPORTHASH_H+#define __IP_SET_IPPORTHASH_H++#include <linux/netfilter_ipv4/ip_set.h>++#define SETTYPE_NAME "ipporthash"+#define MAX_RANGE 0x0000FFFF+#define INVALID_PORT (MAX_RANGE + 1)++struct ip_set_ipporthash {+ ip_set_ip_t *members; /* the ipporthash proper */+ uint32_t elements; /* number of elements */+ uint32_t hashsize; /* hash size */+ uint16_t probes; /* max number of probes */+ uint16_t resize; /* resize factor in percent */+ ip_set_ip_t first_ip; /* host byte order, included in range */+ ip_set_ip_t last_ip; /* host byte order, included in range */+ void *initval[0]; /* initvals for jhash_1word */+};++struct ip_set_req_ipporthash_create {+ uint32_t hashsize;+ uint16_t probes;+ uint16_t resize;+ ip_set_ip_t from;+ ip_set_ip_t to;+};++struct ip_set_req_ipporthash {+ ip_set_ip_t ip;+ ip_set_ip_t port;+};++#endif /* __IP_SET_IPPORTHASH_H */Index: linux-2.6.21.7/include/linux/netfilter_ipv4/ip_set_iptree.h===================================================================--- /dev/null+++ linux-2.6.21.7/include/linux/netfilter_ipv4/ip_set_iptree.h@@ -0,0 +1,40 @@+#ifndef __IP_SET_IPTREE_H+#define __IP_SET_IPTREE_H++#include <linux/netfilter_ipv4/ip_set.h>++#define SETTYPE_NAME "iptree"+#define MAX_RANGE 0x0000FFFF++struct ip_set_iptreed {+ unsigned long expires[256]; /* x.x.x.ADDR */+};++struct ip_set_iptreec {+ struct ip_set_iptreed *tree[256]; /* x.x.ADDR.* */+};++struct ip_set_iptreeb {+ struct ip_set_iptreec *tree[256]; /* x.ADDR.*.* */+};++struct ip_set_iptree {+ unsigned int timeout;+ unsigned int gc_interval;+#ifdef __KERNEL__+ uint32_t elements; /* number of elements */+ struct timer_list gc;+ struct ip_set_iptreeb *tree[256]; /* ADDR.*.*.* */+#endif+};++struct ip_set_req_iptree_create {+ unsigned int timeout;+};++struct ip_set_req_iptree {+ ip_set_ip_t ip;+ unsigned int timeout;+};++#endif /* __IP_SET_IPTREE_H */Index: linux-2.6.21.7/include/linux/netfilter_ipv4/ip_set_iptreemap.h===================================================================--- /dev/null+++ linux-2.6.21.7/include/linux/netfilter_ipv4/ip_set_iptreemap.h@@ -0,0 +1,40 @@+#ifndef __IP_SET_IPTREEMAP_H+#define __IP_SET_IPTREEMAP_H++#include <linux/netfilter_ipv4/ip_set.h>++#define SETTYPE_NAME "iptreemap"++#ifdef __KERNEL__+struct ip_set_iptreemap_d {+ unsigned char bitmap[32]; /* x.x.x.y */+};++struct ip_set_iptreemap_c {+ struct ip_set_iptreemap_d *tree[256]; /* x.x.y.x */+};++struct ip_set_iptreemap_b {+ struct ip_set_iptreemap_c *tree[256]; /* x.y.x.x */+ unsigned char dirty[32];+};+#endif++struct ip_set_iptreemap {+ unsigned int gc_interval;+#ifdef __KERNEL__+ struct timer_list gc;+ struct ip_set_iptreemap_b *tree[256]; /* y.x.x.x */+#endif+};++struct ip_set_req_iptreemap_create {+ unsigned int gc_interval;+};++struct ip_set_req_iptreemap {+ ip_set_ip_t start;+ ip_set_ip_t end;+};++#endif /* __IP_SET_IPTREEMAP_H */Index: linux-2.6.21.7/include/linux/netfilter_ipv4/ip_set_jhash.h===================================================================--- /dev/null+++ linux-2.6.21.7/include/linux/netfilter_ipv4/ip_set_jhash.h@@ -0,0 +1,148 @@+#ifndef _LINUX_IPSET_JHASH_H+#define _LINUX_IPSET_JHASH_H++/* This is a copy of linux/jhash.h but the types u32/u8 are changed+ * to __u32/__u8 so that the header file can be included into+ * userspace code as well. Jozsef Kadlecsik (kadlec@blackhole.kfki.hu)+ */++/* jhash.h: Jenkins hash support.+ *+ * Copyright (C) 1996 Bob Jenkins (bob_jenkins@burtleburtle.net)+ *+ * http://burtleburtle.net/bob/hash/+ *+ * These are the credits from Bob's sources:+ *+ * lookup2.c, by Bob Jenkins, December 1996, Public Domain.+ * hash(), hash2(), hash3, and mix() are externally useful functions.+ * Routines to test the hash are included if SELF_TEST is defined.+ * You can use this free for any purpose. It has no warranty.+ *+ * Copyright (C) 2003 David S. Miller (davem@redhat.com)+ *+ * I've modified Bob's hash to be useful in the Linux kernel, and+ * any bugs present are surely my fault. -DaveM+ */++/* NOTE: Arguments are modified. */+#define __jhash_mix(a, b, c) \+{ \+ a -= b; a -= c; a ^= (c>>13); \+ b -= c; b -= a; b ^= (a<<8); \+ c -= a; c -= b; c ^= (b>>13); \+ a -= b; a -= c; a ^= (c>>12); \+ b -= c; b -= a; b ^= (a<<16); \+ c -= a; c -= b; c ^= (b>>5); \+ a -= b; a -= c; a ^= (c>>3); \+ b -= c; b -= a; b ^= (a<<10); \+ c -= a; c -= b; c ^= (b>>15); \+}++/* The golden ration: an arbitrary value */+#define JHASH_GOLDEN_RATIO 0x9e3779b9++/* The most generic version, hashes an arbitrary sequence+ * of bytes. No alignment or length assumptions are made about+ * the input key.+ */+static inline __u32 jhash(void *key, __u32 length, __u32 initval)+{+ __u32 a, b, c, len;+ __u8 *k = key;++ len = length;+ a = b = JHASH_GOLDEN_RATIO;+ c = initval;++ while (len >= 12) {+ a += (k[0] +((__u32)k[1]<<8) +((__u32)k[2]<<16) +((__u32)k[3]<<24));+ b += (k[4] +((__u32)k[5]<<8) +((__u32)k[6]<<16) +((__u32)k[7]<<24));+ c += (k[8] +((__u32)k[9]<<8) +((__u32)k[10]<<16)+((__u32)k[11]<<24));++ __jhash_mix(a,b,c);++ k += 12;+ len -= 12;+ }++ c += length;+ switch (len) {+ case 11: c += ((__u32)k[10]<<24);+ case 10: c += ((__u32)k[9]<<16);+ case 9 : c += ((__u32)k[8]<<8);+ case 8 : b += ((__u32)k[7]<<24);+ case 7 : b += ((__u32)k[6]<<16);+ case 6 : b += ((__u32)k[5]<<8);+ case 5 : b += k[4];+ case 4 : a += ((__u32)k[3]<<24);+ case 3 : a += ((__u32)k[2]<<16);+ case 2 : a += ((__u32)k[1]<<8);+ case 1 : a += k[0];+ };++ __jhash_mix(a,b,c);++ return c;+}++/* A special optimized version that handles 1 or more of __u32s.+ * The length parameter here is the number of __u32s in the key.+ */+static inline __u32 jhash2(__u32 *k, __u32 length, __u32 initval)+{+ __u32 a, b, c, len;++ a = b = JHASH_GOLDEN_RATIO;+ c = initval;+ len = length;++ while (len >= 3) {+ a += k[0];+ b += k[1];+ c += k[2];+ __jhash_mix(a, b, c);+ k += 3; len -= 3;+ }++ c += length * 4;++ switch (len) {+ case 2 : b += k[1];+ case 1 : a += k[0];+ };++ __jhash_mix(a,b,c);++ return c;+}+++/* A special ultra-optimized versions that knows they are hashing exactly+ * 3, 2 or 1 word(s).+ *+ * NOTE: In partilar the "c += length; __jhash_mix(a,b,c);" normally+ * done at the end is not done here.+ */+static inline __u32 jhash_3words(__u32 a, __u32 b, __u32 c, __u32 initval)+{+ a += JHASH_GOLDEN_RATIO;+ b += JHASH_GOLDEN_RATIO;+ c += initval;++ __jhash_mix(a, b, c);++ return c;+}++static inline __u32 jhash_2words(__u32 a, __u32 b, __u32 initval)+{+ return jhash_3words(a, b, 0, initval);+}++static inline __u32 jhash_1word(__u32 a, __u32 initval)+{+ return jhash_3words(a, 0, 0, initval);+}++#endif /* _LINUX_IPSET_JHASH_H */Index: linux-2.6.21.7/include/linux/netfilter_ipv4/ip_set_macipmap.h===================================================================--- /dev/null+++ linux-2.6.21.7/include/linux/netfilter_ipv4/ip_set_macipmap.h@@ -0,0 +1,38 @@+#ifndef __IP_SET_MACIPMAP_H+#define __IP_SET_MACIPMAP_H++#include <linux/netfilter_ipv4/ip_set.h>++#define SETTYPE_NAME "macipmap"+#define MAX_RANGE 0x0000FFFF++/* general flags */+#define IPSET_MACIP_MATCHUNSET 1++/* per ip flags */+#define IPSET_MACIP_ISSET 1++struct ip_set_macipmap {+ void *members; /* the macipmap 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 */+ u_int32_t flags;+};++struct ip_set_req_macipmap_create {+ ip_set_ip_t from;+ ip_set_ip_t to;+ u_int32_t flags;+};++struct ip_set_req_macipmap {+ ip_set_ip_t ip;+ unsigned char ethernet[ETH_ALEN];+};++struct ip_set_macip {+ unsigned short flags;+ unsigned char ethernet[ETH_ALEN];+};++#endif /* __IP_SET_MACIPMAP_H */Index: linux-2.6.21.7/include/linux/netfilter_ipv4/ip_set_malloc.h===================================================================--- /dev/null+++ linux-2.6.21.7/include/linux/netfilter_ipv4/ip_set_malloc.h@@ -0,0 +1,116 @@+#ifndef _IP_SET_MALLOC_H+#define _IP_SET_MALLOC_H++#ifdef __KERNEL__++/* Memory allocation and deallocation */+static size_t max_malloc_size = 0;++static inline void init_max_malloc_size(void)+{+#define CACHE(x) max_malloc_size = x;+#include <linux/kmalloc_sizes.h>+#undef CACHE+}++static inline void * ip_set_malloc(size_t bytes)+{+ if (bytes > max_malloc_size)+ return vmalloc(bytes);+ else+ return kmalloc(bytes, GFP_KERNEL);+}++static inline void ip_set_free(void * data, size_t bytes)+{+ if (bytes > max_malloc_size)+ vfree(data);+ else+ kfree(data);+}++struct harray {+ size_t max_elements;+ void *arrays[0];+};++static inline void * +harray_malloc(size_t hashsize, size_t typesize, int flags)+{+ struct harray *harray;+ size_t max_elements, size, i, j;++ if (!max_malloc_size)+ init_max_malloc_size();++ if (typesize > max_malloc_size)+ return NULL;++ max_elements = max_malloc_size/typesize;+ size = hashsize/max_elements;+ if (hashsize % max_elements)+ size++;+ + /* Last pointer signals end of arrays */+ harray = kmalloc(sizeof(struct harray) + (size + 1) * sizeof(void *),+ flags);++ if (!harray)+ return NULL;+ + for (i = 0; i < size - 1; i++) {+ harray->arrays[i] = kmalloc(max_elements * typesize, flags);+ if (!harray->arrays[i])+ goto undo;+ memset(harray->arrays[i], 0, max_elements * typesize);+ }+ harray->arrays[i] = kmalloc((hashsize - i * max_elements) * typesize, + flags);+ if (!harray->arrays[i])
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -