亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ip6_tables.c

?? 優(yōu)龍2410linux2.6.8內(nèi)核源代碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
			int *error,			struct semaphore *mutex){	void *ret;#if 1	duprintf("find_inlist: searching for `%s' in %s.\n",		 name, head == &ip6t_target ? "ip6t_target"		 : head == &ip6t_match ? "ip6t_match"		 : head == &ip6t_tables ? "ip6t_tables" : "UNKNOWN");#endif	*error = down_interruptible(mutex);	if (*error != 0)		return NULL;	ret = list_named_find(head, name);	if (!ret) {		*error = -ENOENT;		up(mutex);	}	return ret;}#ifndef CONFIG_KMOD#define find_inlist_lock(h,n,p,e,m) find_inlist_lock_noload((h),(n),(e),(m))#elsestatic void *find_inlist_lock(struct list_head *head,		 const char *name,		 const char *prefix,		 int *error,		 struct semaphore *mutex){	void *ret;	ret = find_inlist_lock_noload(head, name, error, mutex);	if (!ret) {		duprintf("find_inlist: loading `%s%s'.\n", prefix, name);		request_module("%s%s", prefix, name);		ret = find_inlist_lock_noload(head, name, error, mutex);	}	return ret;}#endifstatic inline struct ip6t_table *ip6t_find_table_lock(const char *name, int *error, struct semaphore *mutex){	return find_inlist_lock(&ip6t_tables, name, "ip6table_", error, mutex);}static inline struct ip6t_match *find_match_lock(const char *name, int *error, struct semaphore *mutex){	return find_inlist_lock(&ip6t_match, name, "ip6t_", error, mutex);}struct ip6t_target *ip6t_find_target_lock(const char *name, int *error, struct semaphore *mutex){	return find_inlist_lock(&ip6t_target, name, "ip6t_", error, mutex);}/* All zeroes == unconditional rule. */static inline intunconditional(const struct ip6t_ip6 *ipv6){	unsigned int i;	for (i = 0; i < sizeof(*ipv6); i++)		if (((char *)ipv6)[i])			break;	return (i == sizeof(*ipv6));}/* Figures out from what hook each rule can be called: returns 0 if   there are loops.  Puts hook bitmask in comefrom. */static intmark_source_chains(struct ip6t_table_info *newinfo, unsigned int valid_hooks){	unsigned int hook;	/* No recursion; use packet counter to save back ptrs (reset	   to 0 as we leave), and comefrom to save source hook bitmask */	for (hook = 0; hook < NF_IP6_NUMHOOKS; hook++) {		unsigned int pos = newinfo->hook_entry[hook];		struct ip6t_entry *e			= (struct ip6t_entry *)(newinfo->entries + pos);		if (!(valid_hooks & (1 << hook)))			continue;		/* Set initial back pointer. */		e->counters.pcnt = pos;		for (;;) {			struct ip6t_standard_target *t				= (void *)ip6t_get_target(e);			if (e->comefrom & (1 << NF_IP6_NUMHOOKS)) {				printk("iptables: loop hook %u pos %u %08X.\n",				       hook, pos, e->comefrom);				return 0;			}			e->comefrom				|= ((1 << hook) | (1 << NF_IP6_NUMHOOKS));			/* Unconditional return/END. */			if (e->target_offset == sizeof(struct ip6t_entry)			    && (strcmp(t->target.u.user.name,				       IP6T_STANDARD_TARGET) == 0)			    && t->verdict < 0			    && unconditional(&e->ipv6)) {				unsigned int oldpos, size;				/* Return: backtrack through the last				   big jump. */				do {					e->comefrom ^= (1<<NF_IP6_NUMHOOKS);#ifdef DEBUG_IP_FIREWALL_USER					if (e->comefrom					    & (1 << NF_IP6_NUMHOOKS)) {						duprintf("Back unset "							 "on hook %u "							 "rule %u\n",							 hook, pos);					}#endif					oldpos = pos;					pos = e->counters.pcnt;					e->counters.pcnt = 0;					/* We're at the start. */					if (pos == oldpos)						goto next;					e = (struct ip6t_entry *)						(newinfo->entries + pos);				} while (oldpos == pos + e->next_offset);				/* Move along one */				size = e->next_offset;				e = (struct ip6t_entry *)					(newinfo->entries + pos + size);				e->counters.pcnt = pos;				pos += size;			} else {				int newpos = t->verdict;				if (strcmp(t->target.u.user.name,					   IP6T_STANDARD_TARGET) == 0				    && newpos >= 0) {					/* This a jump; chase it. */					duprintf("Jump rule %u -> %u\n",						 pos, newpos);				} else {					/* ... this is a fallthru */					newpos = pos + e->next_offset;				}				e = (struct ip6t_entry *)					(newinfo->entries + newpos);				e->counters.pcnt = pos;				pos = newpos;			}		}		next:		duprintf("Finished chain %u\n", hook);	}	return 1;}static inline intcleanup_match(struct ip6t_entry_match *m, unsigned int *i){	if (i && (*i)-- == 0)		return 1;	if (m->u.kernel.match->destroy)		m->u.kernel.match->destroy(m->data,					   m->u.match_size - sizeof(*m));	module_put(m->u.kernel.match->me);	return 0;}static inline intstandard_check(const struct ip6t_entry_target *t,	       unsigned int max_offset){	struct ip6t_standard_target *targ = (void *)t;	/* Check standard info. */	if (t->u.target_size	    != IP6T_ALIGN(sizeof(struct ip6t_standard_target))) {		duprintf("standard_check: target size %u != %u\n",			 t->u.target_size,			 IP6T_ALIGN(sizeof(struct ip6t_standard_target)));		return 0;	}	if (targ->verdict >= 0	    && targ->verdict > max_offset - sizeof(struct ip6t_entry)) {		duprintf("ip6t_standard_check: bad verdict (%i)\n",			 targ->verdict);		return 0;	}	if (targ->verdict < -NF_MAX_VERDICT - 1) {		duprintf("ip6t_standard_check: bad negative verdict (%i)\n",			 targ->verdict);		return 0;	}	return 1;}static inline intcheck_match(struct ip6t_entry_match *m,	    const char *name,	    const struct ip6t_ip6 *ipv6,	    unsigned int hookmask,	    unsigned int *i){	int ret;	struct ip6t_match *match;	match = find_match_lock(m->u.user.name, &ret, &ip6t_mutex);	if (!match) {	  //		duprintf("check_match: `%s' not found\n", m->u.name);		return ret;	}	if (!try_module_get(match->me)) {		up(&ip6t_mutex);		return -ENOENT;	}	m->u.kernel.match = match;	up(&ip6t_mutex);	if (m->u.kernel.match->checkentry	    && !m->u.kernel.match->checkentry(name, ipv6, m->data,					      m->u.match_size - sizeof(*m),					      hookmask)) {		module_put(m->u.kernel.match->me);		duprintf("ip_tables: check failed for `%s'.\n",			 m->u.kernel.match->name);		return -EINVAL;	}	(*i)++;	return 0;}static struct ip6t_target ip6t_standard_target;static inline intcheck_entry(struct ip6t_entry *e, const char *name, unsigned int size,	    unsigned int *i){	struct ip6t_entry_target *t;	struct ip6t_target *target;	int ret;	unsigned int j;	if (!ip6_checkentry(&e->ipv6)) {		duprintf("ip_tables: ip check failed %p %s.\n", e, name);		return -EINVAL;	}	j = 0;	ret = IP6T_MATCH_ITERATE(e, check_match, name, &e->ipv6, e->comefrom, &j);	if (ret != 0)		goto cleanup_matches;	t = ip6t_get_target(e);	target = ip6t_find_target_lock(t->u.user.name, &ret, &ip6t_mutex);	if (!target) {		duprintf("check_entry: `%s' not found\n", t->u.user.name);		goto cleanup_matches;	}	if (!try_module_get(target->me)) {		up(&ip6t_mutex);		ret = -ENOENT;		goto cleanup_matches;	}	t->u.kernel.target = target;	up(&ip6t_mutex);	if (!t->u.kernel.target) {		ret = -EBUSY;		goto cleanup_matches;	}	if (t->u.kernel.target == &ip6t_standard_target) {		if (!standard_check(t, size)) {			ret = -EINVAL;			goto cleanup_matches;		}	} else if (t->u.kernel.target->checkentry		   && !t->u.kernel.target->checkentry(name, e, t->data,						      t->u.target_size						      - sizeof(*t),						      e->comefrom)) {		module_put(t->u.kernel.target->me);		duprintf("ip_tables: check failed for `%s'.\n",			 t->u.kernel.target->name);		ret = -EINVAL;		goto cleanup_matches;	}	(*i)++;	return 0; cleanup_matches:	IP6T_MATCH_ITERATE(e, cleanup_match, &j);	return ret;}static inline intcheck_entry_size_and_hooks(struct ip6t_entry *e,			   struct ip6t_table_info *newinfo,			   unsigned char *base,			   unsigned char *limit,			   const unsigned int *hook_entries,			   const unsigned int *underflows,			   unsigned int *i){	unsigned int h;	if ((unsigned long)e % __alignof__(struct ip6t_entry) != 0	    || (unsigned char *)e + sizeof(struct ip6t_entry) >= limit) {		duprintf("Bad offset %p\n", e);		return -EINVAL;	}	if (e->next_offset	    < sizeof(struct ip6t_entry) + sizeof(struct ip6t_entry_target)) {		duprintf("checking: element %p size %u\n",			 e, e->next_offset);		return -EINVAL;	}	/* Check hooks & underflows */	for (h = 0; h < NF_IP6_NUMHOOKS; h++) {		if ((unsigned char *)e - base == hook_entries[h])			newinfo->hook_entry[h] = hook_entries[h];		if ((unsigned char *)e - base == underflows[h])			newinfo->underflow[h] = underflows[h];	}	/* FIXME: underflows must be unconditional, standard verdicts           < 0 (not IP6T_RETURN). --RR */	/* Clear counters and comefrom */	e->counters = ((struct ip6t_counters) { 0, 0 });	e->comefrom = 0;	(*i)++;	return 0;}static inline intcleanup_entry(struct ip6t_entry *e, unsigned int *i){	struct ip6t_entry_target *t;	if (i && (*i)-- == 0)		return 1;	/* Cleanup all matches */	IP6T_MATCH_ITERATE(e, cleanup_match, NULL);	t = ip6t_get_target(e);	if (t->u.kernel.target->destroy)		t->u.kernel.target->destroy(t->data,					    t->u.target_size - sizeof(*t));	module_put(t->u.kernel.target->me);	return 0;}/* Checks and translates the user-supplied table segment (held in   newinfo) */static inttranslate_table(const char *name,		unsigned int valid_hooks,		struct ip6t_table_info *newinfo,		unsigned int size,		unsigned int number,		const unsigned int *hook_entries,		const unsigned int *underflows){	unsigned int i;	int ret;	newinfo->size = size;	newinfo->number = number;	/* Init all hooks to impossible value. */	for (i = 0; i < NF_IP6_NUMHOOKS; i++) {		newinfo->hook_entry[i] = 0xFFFFFFFF;		newinfo->underflow[i] = 0xFFFFFFFF;	}	duprintf("translate_table: size %u\n", newinfo->size);	i = 0;	/* Walk through entries, checking offsets. */	ret = IP6T_ENTRY_ITERATE(newinfo->entries, newinfo->size,				check_entry_size_and_hooks,				newinfo,				newinfo->entries,				newinfo->entries + size,				hook_entries, underflows, &i);	if (ret != 0)		return ret;	if (i != number) {		duprintf("translate_table: %u not %u entries\n",			 i, number);		return -EINVAL;	}	/* Check hooks all assigned */	for (i = 0; i < NF_IP6_NUMHOOKS; i++) {		/* Only hooks which are valid */		if (!(valid_hooks & (1 << i)))			continue;		if (newinfo->hook_entry[i] == 0xFFFFFFFF) {			duprintf("Invalid hook entry %u %u\n",				 i, hook_entries[i]);			return -EINVAL;		}		if (newinfo->underflow[i] == 0xFFFFFFFF) {			duprintf("Invalid underflow %u %u\n",				 i, underflows[i]);			return -EINVAL;		}	}	if (!mark_source_chains(newinfo, valid_hooks))		return -ELOOP;	/* Finally, each sanity check must pass */	i = 0;	ret = IP6T_ENTRY_ITERATE(newinfo->entries, newinfo->size,				check_entry, name, size, &i);	if (ret != 0) {		IP6T_ENTRY_ITERATE(newinfo->entries, newinfo->size,				  cleanup_entry, &i);		return ret;	}	/* And one copy for every other CPU */	for (i = 1; i < NR_CPUS; i++) {		memcpy(newinfo->entries + SMP_ALIGN(newinfo->size)*i,		       newinfo->entries,		       SMP_ALIGN(newinfo->size));	}	return ret;}static struct ip6t_table_info *replace_table(struct ip6t_table *table,	      unsigned int num_counters,	      struct ip6t_table_info *newinfo,	      int *error){	struct ip6t_table_info *oldinfo;#ifdef CONFIG_NETFILTER_DEBUG	{		struct ip6t_entry *table_base;		unsigned int i;		for (i = 0; i < NR_CPUS; i++) {			table_base =				(void *)newinfo->entries				+ TABLE_OFFSET(newinfo, i);			table_base->comefrom = 0xdead57ac;		}	}#endif	/* Do the substitution. */	write_lock_bh(&table->lock);	/* Check inside lock: is the old number correct? */	if (num_counters != table->private->number) {		duprintf("num_counters != table->private->number (%u/%u)\n",			 num_counters, table->private->number);		write_unlock_bh(&table->lock);		*error = -EAGAIN;		return NULL;	}	oldinfo = table->private;	table->private = newinfo;	newinfo->initial_entries = oldinfo->initial_entries;	write_unlock_bh(&table->lock);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
韩国三级电影一区二区| 亚洲一区二区三区四区五区中文| 青草av.久久免费一区| 欧美丰满少妇xxxxx高潮对白| 日日夜夜免费精品| 日韩欧美二区三区| 国产一区二区在线电影| 日本一二三四高清不卡| 91免费视频大全| 天堂av在线一区| 久久久精品蜜桃| 色综合亚洲欧洲| 日本一区中文字幕| 国产区在线观看成人精品| 97se亚洲国产综合自在线观| 一区二区三区日本| 欧美一二三四区在线| 福利一区在线观看| 亚洲一区在线电影| 久久久影院官网| 日本电影欧美片| 美女一区二区三区| 亚洲欧洲日韩在线| 制服丝袜亚洲网站| 国产成人在线视频免费播放| 亚洲欧美国产三级| 欧美一级二级在线观看| k8久久久一区二区三区| 亚洲国产一区二区视频| 26uuu亚洲| 日本久久精品电影| 韩国v欧美v日本v亚洲v| 亚洲午夜在线电影| 久久久高清一区二区三区| 欧美图区在线视频| 国产91丝袜在线播放0| 亚洲成人www| 中文字幕不卡的av| 日韩亚洲欧美在线| 91黄色免费看| 国产精品18久久久久久久久久久久 | 97aⅴ精品视频一二三区| 亚洲大片在线观看| 中文字幕日韩av资源站| 日韩欧美高清在线| 欧美久久久一区| 色综合中文综合网| 婷婷综合另类小说色区| 国产精品青草久久| 337p日本欧洲亚洲大胆精品| 日本韩国视频一区二区| 国产成人啪免费观看软件| 同产精品九九九| 亚洲激情在线激情| 中文天堂在线一区| 国产亚洲va综合人人澡精品| 日韩视频中午一区| 欧美日本精品一区二区三区| 99免费精品在线| 成人18精品视频| 国产一区二区伦理| 极品尤物av久久免费看| 日韩精品一级二级| 亚洲成人自拍网| 亚洲18影院在线观看| 一区二区三区不卡视频| 亚洲码国产岛国毛片在线| 中文在线一区二区| 国产欧美精品一区| 国产精品卡一卡二卡三| 国产欧美一区二区在线| 国产欧美精品一区二区三区四区 | 一区二区三区四区乱视频| 国产精品福利一区二区三区| 中文字幕欧美区| 中文字幕精品—区二区四季| 国产农村妇女毛片精品久久麻豆 | 欧美日韩国产成人在线免费| 一本大道久久a久久综合婷婷 | 99国产精品一区| 91美女在线视频| av激情亚洲男人天堂| av高清久久久| 在线视频综合导航| 欧美日韩国产一级片| 欧美视频日韩视频| 欧美电影在哪看比较好| 日韩美女一区二区三区| 国产亚洲精品精华液| 中文字幕一区二区三区四区不卡| 亚洲天堂精品视频| 亚洲线精品一区二区三区八戒| 一区二区三区不卡视频| 日韩va亚洲va欧美va久久| 黑人巨大精品欧美一区| 成人一区二区三区视频| 色偷偷成人一区二区三区91| 欧美日本一区二区| 欧美精品一区男女天堂| 久久精品一二三| 亚洲自拍偷拍图区| 蜜桃久久久久久| 国产成a人亚洲| 色婷婷综合久久久中文字幕| 欧美精品久久一区| 久久久久久久久蜜桃| 国产精品国模大尺度视频| 亚洲影视在线播放| 精品一区二区三区免费| 波多野结衣中文字幕一区| 欧美视频完全免费看| 精品国产91亚洲一区二区三区婷婷| 中文字幕乱码久久午夜不卡| 亚洲电影在线免费观看| 久久99国内精品| 色哟哟在线观看一区二区三区| 正在播放一区二区| 最近日韩中文字幕| 精品一区二区三区免费| 91福利在线观看| 精品欧美久久久| 一区二区三区av电影| 国产麻豆视频一区二区| 91福利视频久久久久| 2021国产精品久久精品| 亚洲国产aⅴ成人精品无吗| 国产精品亚洲成人| 91精品一区二区三区在线观看| 国产精品入口麻豆原神| 美日韩一区二区| 欧美视频第二页| 国产精品久久三区| 久久99国内精品| 欧美久久一区二区| 亚洲视频免费观看| 成人一区二区视频| 欧美xxxxx裸体时装秀| 亚洲一区二区三区影院| 成人免费av在线| 欧美成人a∨高清免费观看| 亚洲五月六月丁香激情| 成人性生交大片| 久久综合九色综合欧美98| 国产成人免费视频网站| 欧美日韩精品免费观看视频| 中文字幕日韩av资源站| 国产91在线观看丝袜| 欧美不卡123| 麻豆传媒一区二区三区| 67194成人在线观看| 亚洲一区免费在线观看| 色域天天综合网| 亚洲人一二三区| 成人精品电影在线观看| 欧美激情在线一区二区| 国产成人精品午夜视频免费| 久久综合精品国产一区二区三区 | 岛国一区二区在线观看| 欧美一区二区三区系列电影| 亚洲午夜三级在线| 欧美性一二三区| 亚洲一级二级在线| 欧美少妇bbb| 亚洲高清不卡在线| 欧美三级在线播放| 亚洲mv在线观看| 69堂国产成人免费视频| 免费欧美在线视频| 精品动漫一区二区三区在线观看| 久久爱另类一区二区小说| 日韩精品一区二区三区四区| 美女视频免费一区| 精品国产亚洲一区二区三区在线观看| 免费观看日韩电影| 国产亚洲美州欧州综合国| 国产成人综合精品三级| 国产精品你懂的| 91福利精品视频| 色偷偷久久人人79超碰人人澡| 亚洲精品日韩专区silk| 欧美亚洲另类激情小说| 日韩国产一区二| 精品国偷自产国产一区| 成人免费高清在线| 亚洲品质自拍视频| 欧美美女一区二区| 韩国av一区二区三区四区| 国产精品区一区二区三区| 一本色道久久综合精品竹菊| 亚洲国产日韩a在线播放性色| 51精品久久久久久久蜜臀| 久久国产剧场电影| 中文字幕第一区综合| 在线精品观看国产| 麻豆久久久久久| 国产精品欧美久久久久无广告| 日本高清免费不卡视频| 久久精品国产精品亚洲红杏| 国产三级一区二区| 欧洲亚洲国产日韩|