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

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

?? ip6_queue.c

?? 優(yōu)龍2410linux2.6.8內(nèi)核源代碼
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/* * This is a module which is used for queueing IPv6 packets and * communicating with userspace via netlink. * * (C) 2001 Fernando Anton, this code is GPL. *     IPv64 Project - Work based in IPv64 draft by Arturo Azcorra. *     Universidad Carlos III de Madrid - Leganes (Madrid) - Spain *     Universidad Politecnica de Alcala de Henares - Alcala de H. (Madrid) - Spain *     email: fanton@it.uc3m.es * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * * 2001-11-06: First try. Working with ip_queue.c for IPv4 and trying *             to adapt it to IPv6 *             HEAVILY based in ipqueue.c by James Morris. It's just *             a little modified version of it, so he's nearly the *             real coder of this. *             Few changes needed, mainly the hard_routing code and *             the netlink socket protocol (we're NETLINK_IP6_FW). * 2002-06-25: Code cleanup. [JM: ported cleanup over from ip_queue.c] */#include <linux/module.h>#include <linux/skbuff.h>#include <linux/init.h>#include <linux/ipv6.h>#include <linux/notifier.h>#include <linux/netdevice.h>#include <linux/netfilter.h>#include <linux/netlink.h>#include <linux/spinlock.h>#include <linux/sysctl.h>#include <linux/proc_fs.h>#include <net/sock.h>#include <net/ipv6.h>#include <net/ip6_route.h>#include <linux/netfilter_ipv4/ip_queue.h>#include <linux/netfilter_ipv4/ip_tables.h>#include <linux/netfilter_ipv6/ip6_tables.h>#define IPQ_QMAX_DEFAULT 1024#define IPQ_PROC_FS_NAME "ip6_queue"#define NET_IPQ_QMAX 2088#define NET_IPQ_QMAX_NAME "ip6_queue_maxlen"struct ipq_rt_info {	struct in6_addr daddr;	struct in6_addr saddr;};struct ipq_queue_entry {	struct list_head list;	struct nf_info *info;	struct sk_buff *skb;	struct ipq_rt_info rt_info;};typedef int (*ipq_cmpfn)(struct ipq_queue_entry *, unsigned long);static unsigned char copy_mode = IPQ_COPY_NONE;static unsigned int queue_maxlen = IPQ_QMAX_DEFAULT;static rwlock_t queue_lock = RW_LOCK_UNLOCKED;static int peer_pid;static unsigned int copy_range;static unsigned int queue_total;static struct sock *ipqnl;static LIST_HEAD(queue_list);static DECLARE_MUTEX(ipqnl_sem);static voidipq_issue_verdict(struct ipq_queue_entry *entry, int verdict){	nf_reinject(entry->skb, entry->info, verdict);	kfree(entry);}static inline int__ipq_enqueue_entry(struct ipq_queue_entry *entry){       if (queue_total >= queue_maxlen) {               if (net_ratelimit())                        printk(KERN_WARNING "ip6_queue: full at %d entries, "                              "dropping packet(s).\n", queue_total);               return -ENOSPC;       }       list_add(&entry->list, &queue_list);       queue_total++;       return 0;}/* * Find and return a queued entry matched by cmpfn, or return the last * entry if cmpfn is NULL. */static inline struct ipq_queue_entry *__ipq_find_entry(ipq_cmpfn cmpfn, unsigned long data){	struct list_head *p;	list_for_each_prev(p, &queue_list) {		struct ipq_queue_entry *entry = (struct ipq_queue_entry *)p;				if (!cmpfn || cmpfn(entry, data))			return entry;	}	return NULL;}static inline void__ipq_dequeue_entry(struct ipq_queue_entry *entry){	list_del(&entry->list);	queue_total--;}static inline struct ipq_queue_entry *__ipq_find_dequeue_entry(ipq_cmpfn cmpfn, unsigned long data){	struct ipq_queue_entry *entry;	entry = __ipq_find_entry(cmpfn, data);	if (entry == NULL)		return NULL;	__ipq_dequeue_entry(entry);	return entry;}static inline void__ipq_flush(int verdict){	struct ipq_queue_entry *entry;		while ((entry = __ipq_find_dequeue_entry(NULL, 0)))		ipq_issue_verdict(entry, verdict);}static inline int__ipq_set_mode(unsigned char mode, unsigned int range){	int status = 0;		switch(mode) {	case IPQ_COPY_NONE:	case IPQ_COPY_META:		copy_mode = mode;		copy_range = 0;		break;			case IPQ_COPY_PACKET:		copy_mode = mode;		copy_range = range;		if (copy_range > 0xFFFF)			copy_range = 0xFFFF;		break;			default:		status = -EINVAL;	}	return status;}static inline void__ipq_reset(void){	peer_pid = 0;	__ipq_set_mode(IPQ_COPY_NONE, 0);	__ipq_flush(NF_DROP);}static struct ipq_queue_entry *ipq_find_dequeue_entry(ipq_cmpfn cmpfn, unsigned long data){	struct ipq_queue_entry *entry;		write_lock_bh(&queue_lock);	entry = __ipq_find_dequeue_entry(cmpfn, data);	write_unlock_bh(&queue_lock);	return entry;}static voidipq_flush(int verdict){	write_lock_bh(&queue_lock);	__ipq_flush(verdict);	write_unlock_bh(&queue_lock);}static struct sk_buff *ipq_build_packet_message(struct ipq_queue_entry *entry, int *errp){	unsigned char *old_tail;	size_t size = 0;	size_t data_len = 0;	struct sk_buff *skb;	struct ipq_packet_msg *pmsg;	struct nlmsghdr *nlh;	read_lock_bh(&queue_lock);		switch (copy_mode) {	case IPQ_COPY_META:	case IPQ_COPY_NONE:		size = NLMSG_SPACE(sizeof(*pmsg));		data_len = 0;		break;		case IPQ_COPY_PACKET:		if (copy_range == 0 || copy_range > entry->skb->len)			data_len = entry->skb->len;		else			data_len = copy_range;				size = NLMSG_SPACE(sizeof(*pmsg) + data_len);		break;		default:		*errp = -EINVAL;		read_unlock_bh(&queue_lock);		return NULL;	}	read_unlock_bh(&queue_lock);	skb = alloc_skb(size, GFP_ATOMIC);	if (!skb)		goto nlmsg_failure;			old_tail= skb->tail;	nlh = NLMSG_PUT(skb, 0, 0, IPQM_PACKET, size - sizeof(*nlh));	pmsg = NLMSG_DATA(nlh);	memset(pmsg, 0, sizeof(*pmsg));	pmsg->packet_id       = (unsigned long )entry;	pmsg->data_len        = data_len;	pmsg->timestamp_sec   = entry->skb->stamp.tv_sec;	pmsg->timestamp_usec  = entry->skb->stamp.tv_usec;	pmsg->mark            = entry->skb->nfmark;	pmsg->hook            = entry->info->hook;	pmsg->hw_protocol     = entry->skb->protocol;		if (entry->info->indev)		strcpy(pmsg->indev_name, entry->info->indev->name);	else		pmsg->indev_name[0] = '\0';		if (entry->info->outdev)		strcpy(pmsg->outdev_name, entry->info->outdev->name);	else		pmsg->outdev_name[0] = '\0';		if (entry->info->indev && entry->skb->dev) {		pmsg->hw_type = entry->skb->dev->type;		if (entry->skb->dev->hard_header_parse)			pmsg->hw_addrlen =				entry->skb->dev->hard_header_parse(entry->skb,				                                   pmsg->hw_addr);	}		if (data_len)		memcpy(pmsg->payload, entry->skb->data, data_len);			nlh->nlmsg_len = skb->tail - old_tail;	return skb;nlmsg_failure:	if (skb)		kfree_skb(skb);	*errp = -EINVAL;	printk(KERN_ERR "ip6_queue: error creating packet message\n");	return NULL;}static intipq_enqueue_packet(struct sk_buff *skb, struct nf_info *info, void *data){	int status = -EINVAL;	struct sk_buff *nskb;	struct ipq_queue_entry *entry;	if (copy_mode == IPQ_COPY_NONE)		return -EAGAIN;	entry = kmalloc(sizeof(*entry), GFP_ATOMIC);	if (entry == NULL) {		printk(KERN_ERR "ip6_queue: OOM in ipq_enqueue_packet()\n");		return -ENOMEM;	}	entry->info = info;	entry->skb = skb;	if (entry->info->hook == NF_IP_LOCAL_OUT) {		struct ipv6hdr *iph = skb->nh.ipv6h;		entry->rt_info.daddr = iph->daddr;		entry->rt_info.saddr = iph->saddr;	}	nskb = ipq_build_packet_message(entry, &status);	if (nskb == NULL)		goto err_out_free;			write_lock_bh(&queue_lock);		if (!peer_pid)		goto err_out_free_nskb;  	/* netlink_unicast will either free the nskb or attach it to a socket */ 	status = netlink_unicast(ipqnl, nskb, peer_pid, MSG_DONTWAIT);	if (status < 0)		goto err_out_unlock;		status = __ipq_enqueue_entry(entry);	if (status < 0)		goto err_out_unlock;	write_unlock_bh(&queue_lock);	return status;	err_out_free_nskb:	kfree_skb(nskb); 	err_out_unlock:	write_unlock_bh(&queue_lock);err_out_free:	kfree(entry);	return status;}static intipq_mangle_ipv6(ipq_verdict_msg_t *v, struct ipq_queue_entry *e){	int diff;	struct ipv6hdr *user_iph = (struct ipv6hdr *)v->payload;	if (v->data_len < sizeof(*user_iph))		return 0;	diff = v->data_len - e->skb->len;	if (diff < 0)		skb_trim(e->skb, v->data_len);	else if (diff > 0) {		if (v->data_len > 0xFFFF)			return -EINVAL;		if (diff > skb_tailroom(e->skb)) {			struct sk_buff *newskb;						newskb = skb_copy_expand(e->skb,			                         skb_headroom(e->skb),			                         diff,			                         GFP_ATOMIC);			if (newskb == NULL) {				printk(KERN_WARNING "ip6_queue: OOM "				      "in mangle, dropping packet\n");				return -ENOMEM;			}			if (e->skb->sk)				skb_set_owner_w(newskb, e->skb->sk);

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本一二三不卡| 亚洲欧美中日韩| 性感美女久久精品| 欧美一区二区三区男人的天堂| 捆绑调教美女网站视频一区| 久久网这里都是精品| 99久久伊人精品| 亚洲成av人片一区二区三区| 国产欧美精品一区二区色综合朱莉| 成人av午夜影院| 麻豆精品国产91久久久久久| 国产精品妹子av| 欧美精品自拍偷拍| 高清不卡在线观看| 丝袜美腿亚洲一区| 中文字幕国产一区| 91精品国产综合久久精品图片| 国产高清精品在线| 视频一区免费在线观看| 国产精品青草久久| 91麻豆精品国产自产在线观看一区| 国产成人av电影在线| 手机精品视频在线观看| 国产精品初高中害羞小美女文| 欧美亚洲一区三区| 成人黄色小视频| 久久精品国产免费| 午夜精品久久久久| 综合婷婷亚洲小说| 精品国产亚洲一区二区三区在线观看| 99久久伊人网影院| 国产suv一区二区三区88区| 日韩av电影免费观看高清完整版 | 自拍偷自拍亚洲精品播放| 日韩免费一区二区三区在线播放| 欧美偷拍一区二区| 99综合影院在线| 成人永久免费视频| 久草中文综合在线| 青青草国产精品97视觉盛宴| 精品国产不卡一区二区三区| 色婷婷久久99综合精品jk白丝| 国产露脸91国语对白| 日韩av一区二区三区四区| 亚洲一区二区av电影| 亚洲男同1069视频| 最新中文字幕一区二区三区| 久久久久97国产精华液好用吗| 日韩色视频在线观看| 91香蕉视频mp4| 国产成人精品aa毛片| 国产尤物一区二区在线| 久久精品二区亚洲w码| 日日夜夜一区二区| 婷婷久久综合九色综合绿巨人| 伊人性伊人情综合网| 亚洲品质自拍视频| 自拍偷拍亚洲综合| 亚洲一二三专区| 亚洲最新视频在线观看| 中文字幕亚洲一区二区av在线| 国产精品久99| 亚洲欧洲www| 一区二区三区久久久| 一区二区成人在线观看| 午夜久久久影院| 调教+趴+乳夹+国产+精品| 三级精品在线观看| 国内精品伊人久久久久av一坑| 蜜乳av一区二区| 免费在线欧美视频| 狠狠色狠狠色合久久伊人| 丁香六月综合激情| 91看片淫黄大片一级在线观看| 97se亚洲国产综合自在线不卡| 在线一区二区视频| 欧美日韩精品系列| 欧美va亚洲va香蕉在线| 国产亚洲精品超碰| 国产精品久久一级| 亚洲高清免费在线| 另类人妖一区二区av| 国产精品白丝jk黑袜喷水| 99国产精品久久久久久久久久久| 91视频在线观看免费| 欧美日韩久久不卡| 欧美成人一级视频| 中文字幕亚洲综合久久菠萝蜜| 亚洲在线视频免费观看| 奇米影视在线99精品| 久久99久久精品| 99久久伊人网影院| 7777精品伊人久久久大香线蕉完整版| 日韩午夜电影在线观看| 日本一区二区三区电影| 亚洲最大的成人av| 久久66热re国产| 99国产精品一区| 欧美精品一级二级三级| 欧美一级黄色大片| 国产精品色噜噜| 日韩影院在线观看| 成人激情小说乱人伦| 一本到不卡精品视频在线观看| 日韩免费高清av| 亚洲精品日韩综合观看成人91| 亚洲va韩国va欧美va精品| 久久激情五月激情| 色欧美乱欧美15图片| 精品国产乱码久久| 亚洲午夜av在线| 国产传媒欧美日韩成人| 欧美精品久久99久久在免费线| 久久久久国产精品免费免费搜索| 亚洲国产色一区| 国产成人精品一区二| 7777精品伊人久久久大香线蕉超级流畅 | 亚洲第一电影网| 成人午夜视频福利| 日韩欧美国产综合在线一区二区三区| 国产精品成人网| 久久精品99国产精品日本| 欧美中文字幕不卡| 日韩一区中文字幕| 国产精品亚洲一区二区三区妖精| 欧美欧美欧美欧美| 日韩理论片在线| 成人中文字幕合集| 欧美一区二区三区影视| 亚洲精品久久嫩草网站秘色| 丰满亚洲少妇av| 亚洲精品一区二区三区福利| 五月天一区二区| 91网站最新地址| 国产精品成人免费精品自在线观看| 久久99精品久久久久婷婷| 欧美日韩二区三区| 亚洲国产欧美日韩另类综合| eeuss鲁片一区二区三区在线观看| 国产亚洲1区2区3区| 成人免费看片app下载| 国产精品三级av在线播放| www.欧美.com| 亚洲精品福利视频网站| 欧洲精品中文字幕| 日韩精品高清不卡| 日韩免费一区二区三区在线播放| 国产呦精品一区二区三区网站| 欧美大胆人体bbbb| 国产成人精品免费看| 亚洲天堂a在线| 精品视频一区二区三区免费| 日韩成人伦理电影在线观看| 欧美成人精品1314www| 国产高清在线精品| 亚洲欧美日韩中文字幕一区二区三区| 色先锋资源久久综合| 丝袜国产日韩另类美女| 久久久美女艺术照精彩视频福利播放| 成人一级片网址| 亚洲一区在线观看免费观看电影高清| 欧美精品丝袜久久久中文字幕| 久久99久久99小草精品免视看| 国产精品麻豆一区二区| 欧美性做爰猛烈叫床潮| 精品亚洲porn| 国产精品初高中害羞小美女文| 欧美日韩国产精选| 国产一区视频在线看| 18成人在线视频| 7777精品伊人久久久大香线蕉的| 国产精品亚洲人在线观看| 亚洲乱码国产乱码精品精小说| 欧美精品日韩精品| 成人av资源在线| 视频一区视频二区在线观看| 中文字幕国产一区| 在线播放中文字幕一区| 成人午夜激情影院| 天堂成人国产精品一区| 国产精品高潮呻吟| 日韩一区二区电影网| 91蜜桃在线免费视频| 激情av综合网| 亚洲一区二区视频| 国产欧美日韩不卡| 日韩一级片在线播放| 99精品视频在线观看免费| 免费看日韩精品| 一区二区三区在线视频观看| 欧美精品一区二区三区在线| 欧美影视一区二区三区| 国产91色综合久久免费分享| 日韩成人精品在线观看| 一区二区三区 在线观看视频| 国产日产精品一区| 精品日韩一区二区| 欧美日韩亚洲另类| 91丝袜国产在线播放| 国产一区二区三区久久悠悠色av|