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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ip6_queue.c

?? 優龍2410linux2.6.8內核源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * 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);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久国产三级精品| 亚洲综合免费观看高清完整版| 老色鬼精品视频在线观看播放| 欧美高清视频不卡网| 久久精工是国产品牌吗| 久久先锋影音av鲁色资源网| 成人午夜视频在线| 亚洲欧美偷拍卡通变态| 欧美日韩一区二区在线视频| 美女脱光内衣内裤视频久久网站| 久久色成人在线| 99久久精品情趣| 亚洲成人你懂的| 欧美videossexotv100| 懂色av噜噜一区二区三区av| 一区二区在线观看不卡| 日韩欧美电影一区| 成人av影视在线观看| 一卡二卡三卡日韩欧美| 日韩精品中文字幕一区| 成人激情免费视频| 婷婷久久综合九色综合伊人色| 欧美精品一区二区三区蜜桃视频| 不卡电影免费在线播放一区| 亚洲成人综合在线| 国产片一区二区三区| 欧美色图激情小说| 懂色av一区二区三区蜜臀| 偷窥国产亚洲免费视频| 国产欧美一区二区精品秋霞影院| 91高清视频免费看| 激情伊人五月天久久综合| 中文字幕一区在线观看视频| 欧美日韩精品一区二区三区 | 亚洲激情在线播放| 欧美一级精品在线| 91麻豆免费看| 国产精品1024| 日本不卡的三区四区五区| 国产精品免费丝袜| 精品国产3级a| 欧美色网一区二区| 91麻豆视频网站| 国产99久久久国产精品潘金网站| 日韩高清在线观看| 一区二区三区日本| 亚洲欧洲成人自拍| 久久久久久黄色| 日韩一区二区中文字幕| 欧美综合亚洲图片综合区| 成人中文字幕电影| 国产麻豆精品久久一二三| 人妖欧美一区二区| 亚洲国产va精品久久久不卡综合| 国产精品乱码人人做人人爱| 日韩欧美在线影院| 91精品蜜臀在线一区尤物| 在线一区二区视频| av一区二区三区| 国产91精品免费| 国产美女av一区二区三区| 美腿丝袜亚洲综合| 日本亚洲天堂网| 午夜日韩在线电影| 亚洲国产一区在线观看| 有坂深雪av一区二区精品| 一色屋精品亚洲香蕉网站| 国产欧美视频在线观看| 久久久亚洲午夜电影| 久久毛片高清国产| 精品国产乱码久久久久久免费| 91麻豆精品国产无毒不卡在线观看| 欧美日韩一二三| 欧美日韩视频在线一区二区| 欧美亚洲高清一区二区三区不卡| 色婷婷综合久久久中文一区二区| 91麻豆国产自产在线观看| 99re这里只有精品视频首页| 91偷拍与自偷拍精品| 色诱视频网站一区| 91福利国产成人精品照片| 欧美日韩国产综合视频在线观看| 欧美日本韩国一区二区三区视频 | 色婷婷综合久色| 欧美日韩一区在线| 欧美一区午夜视频在线观看| 日韩一区二区中文字幕| 26uuu亚洲综合色| 国产精品天美传媒| 自拍偷拍亚洲欧美日韩| 亚洲卡通动漫在线| 爽好久久久欧美精品| 老司机免费视频一区二区三区| 国产麻豆欧美日韩一区| 91网上在线视频| 6080国产精品一区二区| 精品国产乱码久久久久久久| 国产婷婷一区二区| 亚洲综合精品自拍| 日av在线不卡| www.成人网.com| 欧美老肥妇做.爰bbww视频| 精品福利av导航| 国产精品久久久久aaaa| 亚洲第四色夜色| 精品一二三四区| 99精品国产99久久久久久白柏| 欧美乱熟臀69xxxxxx| 久久久久久久久久久久久女国产乱| 自拍偷拍国产亚洲| 日韩精品免费视频人成| 高清在线不卡av| 欧美视频一区在线| 久久久国际精品| 亚洲综合色婷婷| 国产综合色视频| 在线精品视频免费观看| 精品成人佐山爱一区二区| 亚洲欧美韩国综合色| 久久99久久99精品免视看婷婷| 99视频有精品| 欧美成人一区二区三区| 亚洲精选视频免费看| 黄色资源网久久资源365| 色老头久久综合| 国产午夜精品在线观看| 五月天激情综合| 色综合久久精品| 精品国产制服丝袜高跟| 亚洲午夜在线观看视频在线| 成人免费视频视频在线观看免费| 欧美日韩国产精品自在自线| 国产精品视频在线看| 免费成人美女在线观看| 色噜噜夜夜夜综合网| 久久久久免费观看| 亚洲福利视频导航| 97精品国产露脸对白| 2021中文字幕一区亚洲| 日韩国产欧美在线视频| 色美美综合视频| 国产精品国产三级国产aⅴ原创| 精油按摩中文字幕久久| 欧美精选一区二区| 一区二区三区国产| 91美女精品福利| 中文字幕中文字幕在线一区 | 99精品视频一区| 国产欧美日韩卡一| 国产精品99久久久久久有的能看 | 欧洲激情一区二区| 中文字幕在线观看不卡视频| 国产高清一区日本| 久久人人97超碰com| 狠狠色综合日日| 欧美成人免费网站| 蜜桃视频在线观看一区| 欧美一区二区免费视频| 天天影视色香欲综合网老头| 在线精品亚洲一区二区不卡| 亚洲精品国产a久久久久久 | 国产精品国产精品国产专区不片| 紧缚捆绑精品一区二区| 精品久久久久香蕉网| 韩国女主播成人在线| 日韩欧美电影在线| 国产一区91精品张津瑜| 精品久久一二三区| 国产高清在线精品| 国产精品少妇自拍| 91免费看`日韩一区二区| 亚洲美女免费视频| 91成人看片片| 天堂影院一区二区| 精品日本一线二线三线不卡| 国产在线一区二区| 国产日韩成人精品| 91视视频在线观看入口直接观看www | 国产**成人网毛片九色| 国产精品久久久久天堂| 99久久精品情趣| 亚洲一区在线免费观看| 欧美精品成人一区二区三区四区| 蜜臀av一级做a爰片久久| 精品欧美一区二区久久 | 色综合久久综合网97色综合| ...av二区三区久久精品| 欧美性受极品xxxx喷水| 日本vs亚洲vs韩国一区三区二区 | 粉嫩嫩av羞羞动漫久久久| 国产精品色一区二区三区| 91传媒视频在线播放| 免费高清在线视频一区·| 久久精品视频网| 日韩国产精品久久久久久亚洲| 日本欧美一区二区三区乱码| 成人黄色在线视频| 97久久人人超碰| 蜜桃视频在线一区| 久久婷婷成人综合色|