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

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

?? core.c

?? 優龍2410linux2.6.8內核源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*    BNEP implementation for Linux Bluetooth stack (BlueZ).   Copyright (C) 2001-2002 Inventel Systemes   Written 2001-2002 by	Cl閙ent Moreau <clement.moreau@inventel.fr>	David Libault  <david.libault@inventel.fr>   Copyright (C) 2002 Maxim Krasnyansky <maxk@qualcomm.com>   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;   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.   IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY   CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.   ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,    COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS    SOFTWARE IS DISCLAIMED.*//* * $Id: core.c,v 1.20 2002/08/04 21:23:58 maxk Exp $ */ #include <linux/config.h>#include <linux/module.h>#include <linux/kernel.h>#include <linux/sched.h>#include <linux/signal.h>#include <linux/init.h>#include <linux/wait.h>#include <linux/errno.h>#include <linux/smp_lock.h>#include <linux/net.h>#include <net/sock.h>#include <linux/socket.h>#include <linux/file.h>#include <linux/netdevice.h>#include <linux/etherdevice.h>#include <linux/skbuff.h>#include <asm/unaligned.h>#include <net/bluetooth/bluetooth.h>#include <net/bluetooth/l2cap.h>#include "bnep.h"#ifndef CONFIG_BT_BNEP_DEBUG#undef  BT_DBG#define BT_DBG(D...)#endif#define VERSION "1.2"static LIST_HEAD(bnep_session_list);static DECLARE_RWSEM(bnep_session_sem);static struct bnep_session *__bnep_get_session(u8 *dst){	struct bnep_session *s;	struct list_head *p;	BT_DBG("");	list_for_each(p, &bnep_session_list) {		s = list_entry(p, struct bnep_session, list);			if (!memcmp(dst, s->eh.h_source, ETH_ALEN))			return s;	}	return NULL;}static void __bnep_link_session(struct bnep_session *s){	/* It's safe to call __module_get() here because sessions are added	   by the socket layer which has to hold the refference to this module.	 */	__module_get(THIS_MODULE);	list_add(&s->list, &bnep_session_list);	}static void __bnep_unlink_session(struct bnep_session *s){	list_del(&s->list);	module_put(THIS_MODULE);}static int bnep_send(struct bnep_session *s, void *data, size_t len){	struct socket *sock = s->sock;	struct kvec iv = { data, len };	return kernel_sendmsg(sock, &s->msg, &iv, 1, len);}static int bnep_send_rsp(struct bnep_session *s, u8 ctrl, u16 resp){	struct bnep_control_rsp rsp;	rsp.type = BNEP_CONTROL;	rsp.ctrl = ctrl;	rsp.resp = htons(resp);	return bnep_send(s, &rsp, sizeof(rsp));}#ifdef CONFIG_BT_BNEP_PROTO_FILTERstatic inline void bnep_set_default_proto_filter(struct bnep_session *s){	/* (IPv4, ARP)  */	s->proto_filter[0].start = htons(0x0800);	s->proto_filter[0].end   = htons(0x0806);	/* (RARP, AppleTalk) */	s->proto_filter[1].start = htons(0x8035);	s->proto_filter[1].end   = htons(0x80F3);	/* (IPX, IPv6) */	s->proto_filter[2].start = htons(0x8137);	s->proto_filter[2].end   = htons(0x86DD);}#endifstatic int bnep_ctrl_set_netfilter(struct bnep_session *s, u16 *data, int len){	int n;	if (len < 2)		return -EILSEQ;	n = ntohs(get_unaligned(data));	data++; len -= 2;	if (len < n)		return -EILSEQ;	BT_DBG("filter len %d", n);#ifdef CONFIG_BT_BNEP_PROTO_FILTER	n /= 4;	if (n <= BNEP_MAX_PROTO_FILTERS) {		struct bnep_proto_filter *f = s->proto_filter;		int i;		for (i = 0; i < n; i++) {			f[i].start = get_unaligned(data++);			f[i].end   = get_unaligned(data++);			BT_DBG("proto filter start %d end %d",				f[i].start, f[i].end);		}		if (i < BNEP_MAX_PROTO_FILTERS)			memset(f + i, 0, sizeof(*f));		if (n == 0)			bnep_set_default_proto_filter(s);		bnep_send_rsp(s, BNEP_FILTER_NET_TYPE_RSP, BNEP_SUCCESS);	} else {		bnep_send_rsp(s, BNEP_FILTER_NET_TYPE_RSP, BNEP_FILTER_LIMIT_REACHED);	}#else	bnep_send_rsp(s, BNEP_FILTER_NET_TYPE_RSP, BNEP_FILTER_UNSUPPORTED_REQ);#endif	return 0;}static int bnep_ctrl_set_mcfilter(struct bnep_session *s, u8 *data, int len){	int n;	if (len < 2)		return -EILSEQ;	n = ntohs(get_unaligned((u16 *) data)); 	data += 2; len -= 2;	if (len < n)		return -EILSEQ;	BT_DBG("filter len %d", n);#ifdef CONFIG_BT_BNEP_MC_FILTER	n /= (ETH_ALEN * 2);	if (n > 0) {		s->mc_filter = 0;		/* Always send broadcast */		set_bit(bnep_mc_hash(s->dev->broadcast), (ulong *) &s->mc_filter);		/* Add address ranges to the multicast hash */		for (; n > 0; n--) {			u8 a1[6], *a2;			memcpy(a1, data, ETH_ALEN); data += ETH_ALEN;			a2 = data; data += ETH_ALEN;				BT_DBG("mc filter %s -> %s",				batostr((void *) a1), batostr((void *) a2));			#define INCA(a) { int i = 5; while (i >=0 && ++a[i--] == 0); }			/* Iterate from a1 to a2 */			set_bit(bnep_mc_hash(a1), (ulong *) &s->mc_filter);			while (memcmp(a1, a2, 6) < 0 && s->mc_filter != ~0LL) {				INCA(a1);				set_bit(bnep_mc_hash(a1), (ulong *) &s->mc_filter);			}		}	}	BT_DBG("mc filter hash 0x%llx", s->mc_filter);	bnep_send_rsp(s, BNEP_FILTER_MULTI_ADDR_RSP, BNEP_SUCCESS);#else	bnep_send_rsp(s, BNEP_FILTER_MULTI_ADDR_RSP, BNEP_FILTER_UNSUPPORTED_REQ);#endif	return 0;}static int bnep_rx_control(struct bnep_session *s, void *data, int len){	u8  cmd = *(u8 *)data;	int err = 0;	data++; len--;	switch (cmd) {	case BNEP_CMD_NOT_UNDERSTOOD:	case BNEP_SETUP_CONN_REQ:	case BNEP_SETUP_CONN_RSP:	case BNEP_FILTER_NET_TYPE_RSP:	case BNEP_FILTER_MULTI_ADDR_RSP:		/* Ignore these for now */		break;	case BNEP_FILTER_NET_TYPE_SET:		err = bnep_ctrl_set_netfilter(s, data, len);		break;	case BNEP_FILTER_MULTI_ADDR_SET:		err = bnep_ctrl_set_mcfilter(s, data, len);		break;	default: {			u8 pkt[3];			pkt[0] = BNEP_CONTROL;			pkt[1] = BNEP_CMD_NOT_UNDERSTOOD;			pkt[2] = cmd;			bnep_send(s, pkt, sizeof(pkt));		}		break;	}	return err;}static int bnep_rx_extension(struct bnep_session *s, struct sk_buff *skb){	struct bnep_ext_hdr *h;	int err = 0;	do {		h = (void *) skb->data;		if (!skb_pull(skb, sizeof(*h))) {			err = -EILSEQ;			break;		}		BT_DBG("type 0x%x len %d", h->type, h->len);			switch (h->type & BNEP_TYPE_MASK) {		case BNEP_EXT_CONTROL:			bnep_rx_control(s, skb->data, skb->len);			break;		default:			/* Unknown extension, skip it. */			break;		}		if (!skb_pull(skb, h->len)) {			err = -EILSEQ;			break;		}	} while (!err && (h->type & BNEP_EXT_HEADER));		return err;}static u8 __bnep_rx_hlen[] = {	ETH_HLEN,     /* BNEP_GENERAL */	0,            /* BNEP_CONTROL */	2,            /* BNEP_COMPRESSED */	ETH_ALEN + 2, /* BNEP_COMPRESSED_SRC_ONLY */	ETH_ALEN + 2  /* BNEP_COMPRESSED_DST_ONLY */};#define BNEP_RX_TYPES	(sizeof(__bnep_rx_hlen) - 1)static inline int bnep_rx_frame(struct bnep_session *s, struct sk_buff *skb){	struct net_device *dev = s->dev;	struct sk_buff *nskb;	u8 type;	dev->last_rx = jiffies;	s->stats.rx_bytes += skb->len;	type = *(u8 *) skb->data; skb_pull(skb, 1);	if ((type & BNEP_TYPE_MASK) > BNEP_RX_TYPES)		goto badframe;		if ((type & BNEP_TYPE_MASK) == BNEP_CONTROL) {		bnep_rx_control(s, skb->data, skb->len);		kfree_skb(skb);		return 0;	}	skb->mac.raw = skb->data;	/* Verify and pull out header */	if (!skb_pull(skb, __bnep_rx_hlen[type & BNEP_TYPE_MASK]))		goto badframe;	s->eh.h_proto = get_unaligned((u16 *) (skb->data - 2));	if (type & BNEP_EXT_HEADER) {		if (bnep_rx_extension(s, skb) < 0)			goto badframe;	}	/* Strip 802.1p header */	if (ntohs(s->eh.h_proto) == 0x8100) {		if (!skb_pull(skb, 4))			goto badframe;		s->eh.h_proto = get_unaligned((u16 *) (skb->data - 2));	}		/* We have to alloc new skb and copy data here :(. Because original skb	 * may not be modified and because of the alignment requirements. */	nskb = alloc_skb(2 + ETH_HLEN + skb->len, GFP_KERNEL);	if (!nskb) {		s->stats.rx_dropped++;		kfree_skb(skb);		return -ENOMEM;	}	skb_reserve(nskb, 2);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久aaaa| 国产精品视频免费看| 亚洲一区二区3| 欧美日韩激情在线| 国产美女精品一区二区三区| 久久这里都是精品| 一本在线高清不卡dvd| 亚洲h在线观看| 中文天堂在线一区| 中文字幕欧美国产| 欧美一区二区三级| 91麻豆国产自产在线观看| 蜜桃视频免费观看一区| 一区二区三区欧美在线观看| 久久亚洲私人国产精品va媚药| 精品久久久久久久久久久院品网 | 不卡av在线免费观看| 日本不卡在线视频| 综合电影一区二区三区| 精品久久久久久久久久久院品网| www国产成人免费观看视频 深夜成人网| 日韩一区二区精品| 欧美日韩国产精品成人| 91精品国产综合久久精品麻豆| 高清国产一区二区| 国精品**一区二区三区在线蜜桃| 视频在线观看91| 亚洲免费视频中文字幕| 国产精品国产自产拍在线| 一区二区三区日韩在线观看| 五月天亚洲婷婷| 亚洲国产精品一区二区尤物区| 日韩美女久久久| 亚洲第一成年网| 国产高清精品在线| 国产成人久久精品77777最新版本| 成人a区在线观看| 91精品国产手机| 中文字幕欧美一| 国产精品传媒在线| 丝袜亚洲另类欧美| 91在线云播放| 色婷婷久久久久swag精品| 欧美一区中文字幕| 综合在线观看色| 久久精品国产999大香线蕉| 精品一区二区三区视频在线观看 | 激情综合色播激情啊| 97久久超碰国产精品电影| 日韩一级免费一区| 亚洲欧美成aⅴ人在线观看| 久久国产精品色婷婷| 欧美性色aⅴ视频一区日韩精品| 欧美伊人精品成人久久综合97| 26uuu久久天堂性欧美| 亚洲高清视频的网址| 白白色亚洲国产精品| 色av成人天堂桃色av| 欧美日韩国产乱码电影| 国产精品人人做人人爽人人添| 久色婷婷小香蕉久久| 欧美色老头old∨ideo| 欧美sm极限捆绑bd| 午夜影院在线观看欧美| 色哟哟在线观看一区二区三区| 国产亚洲欧美激情| 一区二区高清免费观看影视大全| 国产剧情一区在线| 91网站最新网址| 亚洲国产精品成人综合色在线婷婷 | 91精品国产综合久久久久久漫画 | 欧美国产日韩精品免费观看| 国产一区二区三区免费观看| 在线综合亚洲欧美在线视频| 亚洲国产精品欧美一二99| 色婷婷综合五月| 伊人开心综合网| 精品影院一区二区久久久| 欧美精品久久99久久在免费线| 久久一区二区三区四区| 久久99精品久久久久久| 日韩欧美在线网站| 国产精品一区二区在线看| 久久精品在这里| 粉嫩久久99精品久久久久久夜| 国产欧美日产一区| 麻豆一区二区三区| 欧美电影精品一区二区| 亚洲一区在线观看免费| 欧美亚洲自拍偷拍| 免费亚洲电影在线| 色噜噜夜夜夜综合网| 一区二区不卡在线播放| 欧美日韩国产在线观看| 奇米四色…亚洲| 久久久午夜精品理论片中文字幕| 亚洲大片一区二区三区| 欧美一级xxx| 国产精品一二三在| 一区二区三区视频在线看| 69p69国产精品| 国产精品一区一区| 亚洲成在人线免费| 久久久久久**毛片大全| 色综合咪咪久久| 日韩1区2区3区| 国产精品麻豆网站| 777xxx欧美| 国产成人一级电影| 婷婷成人激情在线网| 国产午夜亚洲精品午夜鲁丝片 | 五月天激情综合网| 国产人成亚洲第一网站在线播放| 99国产欧美久久久精品| 免费在线观看一区| 亚洲欧美日韩国产综合| 欧美va在线播放| 91丨porny丨首页| 美女视频一区二区三区| 亚洲美女免费视频| 精品国产麻豆免费人成网站| 看国产成人h片视频| 亚洲欧美中日韩| 日韩精品一区二区三区在线观看 | 日韩一级片在线观看| 色综合天天综合网天天看片| 亚洲人成人一区二区在线观看 | 日韩毛片一二三区| 亚洲精品在线三区| 欧美日韩三级一区| av在线综合网| 国产精品99久久久久久似苏梦涵| 午夜精品久久久久久久久久久 | 欧美日韩综合在线| 色综合天天狠狠| 国产成a人亚洲| 欧美a级一区二区| 亚洲五码中文字幕| 亚洲免费大片在线观看| 国产精品网站在线观看| 337p粉嫩大胆色噜噜噜噜亚洲| 91麻豆精品国产| 欧洲国产伦久久久久久久| 日韩高清不卡在线| 亚洲一区国产视频| 亚洲综合久久av| 亚洲人妖av一区二区| 亚洲天天做日日做天天谢日日欢| 久久久久久久久久久久久久久99 | 欧美三级中文字幕在线观看| 91麻豆国产精品久久| 不卡欧美aaaaa| 99精品久久只有精品| 99久久免费视频.com| 成人免费av网站| 日韩av不卡在线观看| 麻豆精品国产传媒mv男同| 蜜臀久久99精品久久久久久9| 免费成人在线观看| 狠狠色丁香婷婷综合| 国产不卡视频在线播放| 成人性生交大片免费| 91香蕉视频在线| 欧洲人成人精品| 欧美一区二区三区男人的天堂| 91精品在线麻豆| 精品国产3级a| 国产精品天干天干在线综合| 自拍偷拍亚洲综合| 午夜精品久久久久久久蜜桃app| 日日噜噜夜夜狠狠视频欧美人| 麻豆一区二区99久久久久| 国产精品18久久久久久久久| 成人久久视频在线观看| 91福利视频久久久久| 欧美一区二区私人影院日本| 精品国产一区二区精华| 中文字幕一区在线观看视频| 亚洲一区二区视频在线| 蜜臀av一区二区在线免费观看| 国产91精品久久久久久久网曝门| 色婷婷综合中文久久一本| 日韩写真欧美这视频| 中文字幕精品在线不卡| 亚洲成人免费观看| 国产一区二区三区四| 欧美在线不卡视频| 久久这里只精品最新地址| 玉足女爽爽91| 精品在线视频一区| 色综合久久中文综合久久97| 欧美sm美女调教| 一区二区三区在线观看视频| 国内精品在线播放| 色网站国产精品| 日本一区二区三区dvd视频在线| 亚洲一区电影777| 成人免费高清视频| 欧美一卡二卡在线观看| 国产精品电影院|