⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 130-netfilter_ipset.patch

📁 Linux Home Server 是专门为家庭和SOHO/SMB 设计的高性价比的ISCSI 存储服务器, 具有如下的特色: 强大的iscsi 存储服务器软件; 混合iscsi 和NAS 服务;
💻 PATCH
📖 第 1 页 / 共 5 页
字号:
++#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 + -