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

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

?? netdev.c

?? 優龍2410linux2.6.8內核源代碼
?? C
字號:
/*    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: netdev.c,v 1.8 2002/08/04 21:23:58 maxk Exp $ */ #include <linux/config.h>#include <linux/module.h>#include <linux/socket.h>#include <linux/netdevice.h>#include <linux/etherdevice.h>#include <linux/skbuff.h>#include <linux/wait.h>#include <asm/unaligned.h>#include <net/bluetooth/bluetooth.h>#include <net/bluetooth/hci_core.h>#include <net/bluetooth/l2cap.h>#include "bnep.h"#ifndef CONFIG_BT_BNEP_DEBUG#undef  BT_DBG#define BT_DBG( A... )#endif#define BNEP_TX_QUEUE_LEN 20static int bnep_net_open(struct net_device *dev){	netif_start_queue(dev);	return 0;}static int bnep_net_close(struct net_device *dev){	netif_stop_queue(dev);	return 0;}static struct net_device_stats *bnep_net_get_stats(struct net_device *dev){	struct bnep_session *s = dev->priv;	return &s->stats;}static void bnep_net_set_mc_list(struct net_device *dev){#ifdef CONFIG_BT_BNEP_MC_FILTER	struct bnep_session *s = dev->priv;	struct sock *sk = s->sock->sk;	struct bnep_set_filter_req *r;	struct sk_buff *skb;	int size;	BT_DBG("%s mc_count %d", dev->name, dev->mc_count);	size = sizeof(*r) + (BNEP_MAX_MULTICAST_FILTERS + 1) * ETH_ALEN * 2;	skb  = alloc_skb(size, GFP_ATOMIC);	if (!skb) {		BT_ERR("%s Multicast list allocation failed", dev->name);		return;	}	r = (void *) skb->data;	__skb_put(skb, sizeof(*r));	r->type = BNEP_CONTROL;	r->ctrl = BNEP_FILTER_MULTI_ADDR_SET;        if (dev->flags & (IFF_PROMISC | IFF_ALLMULTI)) {		u8 start[ETH_ALEN] = { 0x01 };		/* Request all addresses */		memcpy(__skb_put(skb, ETH_ALEN), start, ETH_ALEN);		memcpy(__skb_put(skb, ETH_ALEN), dev->broadcast, ETH_ALEN);		r->len = htons(ETH_ALEN * 2);	} else {                struct dev_mc_list *dmi = dev->mc_list;		int i, len = skb->len;		if (dev->flags & IFF_BROADCAST) {			memcpy(__skb_put(skb, ETH_ALEN), dev->broadcast, ETH_ALEN);			memcpy(__skb_put(skb, ETH_ALEN), dev->broadcast, ETH_ALEN);		}					/* FIXME: We should group addresses here. */		for (i = 0; i < dev->mc_count && i < BNEP_MAX_MULTICAST_FILTERS; i++) {			memcpy(__skb_put(skb, ETH_ALEN), dmi->dmi_addr, ETH_ALEN);			memcpy(__skb_put(skb, ETH_ALEN), dmi->dmi_addr, ETH_ALEN);			dmi = dmi->next;		}		r->len = htons(skb->len - len);	}	skb_queue_tail(&sk->sk_write_queue, skb);	wake_up_interruptible(sk->sk_sleep);#endif}static int bnep_net_set_mac_addr(struct net_device *dev, void *arg){	BT_DBG("%s", dev->name);	return 0;}static void bnep_net_timeout(struct net_device *dev){	BT_DBG("net_timeout");	netif_wake_queue(dev);}static int bnep_net_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd){	return -EINVAL;}#ifdef CONFIG_BT_BNEP_MC_FILTERstatic inline int bnep_net_mc_filter(struct sk_buff *skb, struct bnep_session *s){	struct ethhdr *eh = (void *) skb->data;	if ((eh->h_dest[0] & 1) && !test_bit(bnep_mc_hash(eh->h_dest), (ulong *) &s->mc_filter))		return 1;	return 0;}#endif#ifdef CONFIG_BT_BNEP_PROTO_FILTER/* Determine ether protocol. Based on eth_type_trans. */static inline u16 bnep_net_eth_proto(struct sk_buff *skb){	struct ethhdr *eh = (void *) skb->data;		if (ntohs(eh->h_proto) >= 1536)		return eh->h_proto;			if (get_unaligned((u16 *) skb->data) == 0xFFFF)		return htons(ETH_P_802_3);			return htons(ETH_P_802_2);}static inline int bnep_net_proto_filter(struct sk_buff *skb, struct bnep_session *s){	u16 proto = bnep_net_eth_proto(skb);	struct bnep_proto_filter *f = s->proto_filter;	int i;		for (i = 0; i < BNEP_MAX_PROTO_FILTERS && f[i].end; i++) {		if (proto >= f[i].start && proto <= f[i].end)			return 0;	}	BT_DBG("BNEP: filtered skb %p, proto 0x%.4x", skb, proto);	return 1;}#endifstatic int bnep_net_xmit(struct sk_buff *skb, struct net_device *dev){	struct bnep_session *s = dev->priv;	struct sock *sk = s->sock->sk;	BT_DBG("skb %p, dev %p", skb, dev);#ifdef CONFIG_BT_BNEP_MC_FILTER	if (bnep_net_mc_filter(skb, s)) {		kfree_skb(skb);		return 0;	}#endif	#ifdef CONFIG_BT_BNEP_PROTO_FILTER	if (bnep_net_proto_filter(skb, s)) {		kfree_skb(skb);		return 0;	}#endif		/*	 * We cannot send L2CAP packets from here as we are potentially in a bh.	 * So we have to queue them and wake up session thread which is sleeping	 * on the sk->sk_sleep.	 */	dev->trans_start = jiffies;	skb_queue_tail(&sk->sk_write_queue, skb);	wake_up_interruptible(sk->sk_sleep);	if (skb_queue_len(&sk->sk_write_queue) >= BNEP_TX_QUEUE_LEN) {		BT_DBG("tx queue is full");		/* Stop queuing.		 * Session thread will do netif_wake_queue() */		netif_stop_queue(dev);	}	return 0;}void bnep_net_setup(struct net_device *dev){	memset(dev->broadcast, 0xff, ETH_ALEN);	dev->addr_len = ETH_ALEN;	ether_setup(dev);	dev->open            = bnep_net_open;	dev->stop            = bnep_net_close;	dev->hard_start_xmit = bnep_net_xmit;	dev->get_stats       = bnep_net_get_stats;	dev->do_ioctl        = bnep_net_ioctl;	dev->set_mac_address = bnep_net_set_mac_addr;	dev->set_multicast_list = bnep_net_set_mc_list;	dev->watchdog_timeo  = HZ * 2;	dev->tx_timeout      = bnep_net_timeout;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91亚洲精品久久久蜜桃网站| 国产麻豆成人精品| 国产精品国产三级国产aⅴ无密码| 91精品在线一区二区| 欧美日韩一级二级| 欧美人牲a欧美精品| 欧美猛男超大videosgay| 欧美精品丝袜久久久中文字幕| 欧美日韩免费观看一区二区三区| 在线观看日韩精品| 5858s免费视频成人| 日韩欧美国产精品| 久久人人97超碰com| 国产精品久久久久三级| 一区二区不卡在线视频 午夜欧美不卡在| 亚洲免费在线看| 午夜成人在线视频| 精品一区二区三区免费观看 | 在线电影国产精品| 日韩一二三区不卡| 国产欧美日韩不卡| 亚洲综合久久av| 精品影院一区二区久久久| 国产精品18久久久久久久久| eeuss鲁片一区二区三区在线观看| 在线免费观看日本一区| 日韩免费高清电影| 亚洲女同一区二区| 蜜臂av日日欢夜夜爽一区| 成人黄色av电影| 欧美精三区欧美精三区| 欧美韩国日本一区| 五月天婷婷综合| 国产乱码精品一区二区三区忘忧草 | 中文字幕一区二区三区四区不卡| 亚洲中国最大av网站| 日本成人在线看| 91在线播放网址| 久久新电视剧免费观看| 午夜视频一区二区三区| 国产成人av一区二区| 欧美片网站yy| 亚洲精品国产成人久久av盗摄| 国产乱码一区二区三区| 欧美婷婷六月丁香综合色| 久久久99精品免费观看| 丝袜诱惑制服诱惑色一区在线观看| 成人教育av在线| 欧美成人伊人久久综合网| 亚洲国产日韩a在线播放| 国产盗摄一区二区| 欧美挠脚心视频网站| 亚洲视频免费看| 懂色av一区二区三区免费观看| 91精品国产高清一区二区三区| 亚洲人成网站影音先锋播放| 国产精品影视在线观看| 日韩视频在线观看一区二区| 亚洲一区二区三区四区五区中文| 成人激情动漫在线观看| 久久久综合视频| 精品一区二区三区欧美| 欧美大胆一级视频| 蜜臀av在线播放一区二区三区| 欧美日韩电影在线播放| 亚洲第一狼人社区| 在线成人av网站| 天堂久久久久va久久久久| 欧美日韩高清一区二区| 亚洲福利一二三区| 91超碰这里只有精品国产| 亚洲bt欧美bt精品| 3d成人h动漫网站入口| 午夜精品福利一区二区三区蜜桃| 在线观看亚洲专区| 偷窥国产亚洲免费视频 | 日韩 欧美一区二区三区| 欧美色区777第一页| 亚洲一区在线观看视频| 欧美三级视频在线观看| 亚洲成av人片在线观看无码| 欧美日韩一区高清| 蜜臀91精品一区二区三区| 精品免费日韩av| 国产精品18久久久| 中文字幕亚洲欧美在线不卡| 91在线一区二区三区| 亚洲福利视频一区| 日韩精品一区二区三区在线 | 色综合久久九月婷婷色综合| 亚洲色图欧美激情| 欧美日韩的一区二区| 久久精工是国产品牌吗| 久久久久久久久久久电影| 成人综合在线观看| 亚洲国产一区二区在线播放| 日韩免费观看高清完整版在线观看| 国产一区二区视频在线播放| 成人欧美一区二区三区白人| 欧美日韩综合在线免费观看| 蜜臂av日日欢夜夜爽一区| 亚洲电影第三页| 精品捆绑美女sm三区| 99久久婷婷国产精品综合| 五月天精品一区二区三区| 国产亚洲成av人在线观看导航| 91片在线免费观看| 久久国产精品露脸对白| 中文字幕在线一区| 91精品国产91热久久久做人人| 成人小视频在线观看| 午夜精品久久久久影视| 国产精品你懂的在线| 欧美一区二区三区在线看| 成人高清av在线| 久久精品国产色蜜蜜麻豆| 亚洲免费av高清| 欧美精品一区二区在线播放 | 蜜臂av日日欢夜夜爽一区| 中文字幕二三区不卡| 日韩一级精品视频在线观看| 色综合久久久久综合体| 国产麻豆精品一区二区| 亚洲一区在线视频| 成人免费一区二区三区在线观看| 日韩欧美一级在线播放| 色噜噜偷拍精品综合在线| 国产乱子伦一区二区三区国色天香 | 国产成人高清在线| 美女视频网站黄色亚洲| 亚洲高清视频中文字幕| 亚洲视频免费观看| 国产精品无码永久免费888| 日韩欧美电影一区| 制服视频三区第一页精品| 在线观看一区二区视频| 99久久精品一区二区| 国产91精品在线观看| 精品亚洲porn| 捆绑调教美女网站视频一区| 肉肉av福利一精品导航| 亚洲国产一区二区三区| 一区二区三区四区高清精品免费观看 | 久久蜜桃av一区二区天堂| 欧美一区二区三区色| 欧美三电影在线| 在线观看日产精品| 欧美无砖专区一中文字| 91精品办公室少妇高潮对白| 91网址在线看| 欧美视频日韩视频| 欧美日韩日日骚| 777久久久精品| 日韩一区二区在线观看视频 | 国内精品在线播放| 久久精品国产999大香线蕉| 麻豆精品一区二区三区| 国内不卡的二区三区中文字幕 | 国内成人免费视频| 色婷婷综合五月| 一本色道久久综合亚洲aⅴ蜜桃| 91在线精品一区二区三区| 91蝌蚪porny| 欧美三级午夜理伦三级中视频| 欧美高清精品3d| 2019国产精品| 国产精品视频在线看| 亚洲免费观看在线观看| 亚洲成人激情综合网| 精品制服美女丁香| 9i看片成人免费高清| 欧美日韩三级一区二区| 精品国产在天天线2019| 国产日韩欧美在线一区| 亚洲黄色片在线观看| 蜜臀av一区二区三区| 国产91精品一区二区麻豆亚洲| 色综合久久久久综合体| 欧美一区二区在线免费观看| 久久久久久久综合| 亚洲午夜免费福利视频| 久久99精品国产麻豆不卡| 99re视频精品| 日韩免费一区二区| 亚洲日韩欧美一区二区在线| 免费成人av在线| 91欧美一区二区| 精品少妇一区二区三区免费观看| 亚洲色图制服诱惑| 蜜桃在线一区二区三区| 97久久超碰国产精品电影| 欧美一区二区视频在线观看2022| 欧美韩国日本综合| 麻豆精品久久久| 一本色道久久综合精品竹菊| 久久日一线二线三线suv| 午夜视黄欧洲亚洲| 成人综合日日夜夜| 精品欧美黑人一区二区三区| 亚洲激情欧美激情|