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

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

?? p80211wext.c

?? 對于無線網(wǎng)卡采用prism芯片的linux的開源驅(qū)動.
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* src/p80211/p80211wext.c* * Glue code to make linux-wlan-ng a happy wireless extension camper.* * original author:  Reyk Floeter <reyk@synack.de>* Completely re-written by Solomon Peachy <solomon@linux-wlan.com>** Copyright (C) 2002 AbsoluteValue Systems, Inc.  All Rights Reserved.* --------------------------------------------------------------------** linux-wlan**   The contents of this file are subject to the Mozilla Public*   License Version 1.1 (the "License"); you may not use this file*   except in compliance with the License. You may obtain a copy of*   the License at http://www.mozilla.org/MPL/**   Software distributed under the License is distributed on an "AS*   IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or*   implied. See the License for the specific language governing*   rights and limitations under the License.**   Alternatively, the contents of this file may be used under the*   terms of the GNU Public License version 2 (the "GPL"), in which*   case the provisions of the GPL are applicable instead of the*   above.  If you wish to allow the use of your version of this file*   only under the terms of the GPL and not to allow others to use*   your version of this file under the MPL, indicate your decision*   by deleting the provisions above and replace them with the notice*   and other provisions required by the GPL.  If you do not delete*   the provisions above, a recipient may use your version of this*   file under either the MPL or the GPL.** --------------------------------------------------------------------*//*================================================================*//* System Includes */#include <linux/config.h>#include <linux/version.h>#include <linux/kernel.h>#include <linux/sched.h>#include <linux/types.h>#include <linux/slab.h>#include <linux/netdevice.h>#include <linux/etherdevice.h>#include <linux/wireless.h>#if WIRELESS_EXT > 12#include <net/iw_handler.h>#endif#include <linux/if_arp.h>#include <asm/bitops.h>#include <asm/uaccess.h>#include <asm/byteorder.h>/*================================================================*//* Project Includes */#include <wlan/version.h>#include <wlan/wlan_compat.h>#include <wlan/p80211types.h>#include <wlan/p80211hdr.h>#include <wlan/p80211conv.h>#include <wlan/p80211mgmt.h>#include <wlan/p80211msg.h>#include <wlan/p80211metastruct.h>#include <wlan/p80211metadef.h>#include <wlan/p80211netdev.h>#include <wlan/p80211ioctl.h>#include <wlan/p80211req.h>static int p80211wext_giwrate(netdevice_t *dev,			      struct iw_request_info *info,			      struct iw_param *rrq, char *extra);static int p80211wext_giwessid(netdevice_t *dev,			       struct iw_request_info *info,			       struct iw_point *data, char *essid);/* compatibility to wireless extensions */#ifdef WIRELESS_EXTUINT8 p80211_mhz_to_channel(UINT16 mhz){	if (mhz >= 5000) {		return ((mhz - 5000) / 5);	} 	if (mhz == 2482)		return 14;		if (mhz >= 2407) {		return ((mhz - 2407) / 5);	}	return 0;}UINT16 p80211_channel_to_mhz(UINT8 ch, int dot11a){	if (ch == 0)		return 0;	if (ch > 200)		return 0;	/* 5G */	if (dot11a) {		return (5000 + (5 * ch));	}		/* 2.4G */	if (ch == 14)		return 2484;		if ((ch < 14) && (ch > 0)) {		return (2407 + (5 * ch));	}		return 0;}/* taken from orinoco.c ;-) */const long p80211wext_channel_freq[] = {	2412, 2417, 2422, 2427, 2432, 2437, 2442,	2447, 2452, 2457, 2462, 2467, 2472, 2484};#define NUM_CHANNELS (sizeof(p80211wext_channel_freq) / sizeof(p80211wext_channel_freq[0])) /** function declarations =============== */static int p80211wext_dorequest(wlandevice_t *wlandev, UINT32 did, UINT32 data){	p80211msg_dot11req_mibset_t	msg;	p80211item_uint32_t		mibitem;	int	result;		DBFENTER;	msg.msgcode = DIDmsg_dot11req_mibset;	mibitem.did = did;	mibitem.data = data;	memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem));	result = p80211req_dorequest(wlandev, (UINT8*)&msg);	DBFEXIT;	return result;}static int p80211wext_autojoin(wlandevice_t *wlandev){	p80211msg_lnxreq_autojoin_t     msg;	struct iw_point			data;	char ssid[IW_ESSID_MAX_SIZE];        	int result;	int err = 0;	DBFENTER;	/* Get ESSID */	result = p80211wext_giwessid(wlandev->netdev, NULL, &data, ssid);	if (result) {		err = -EFAULT;		goto exit;	}#warning "make a smarter sharedkey/opensystem auth decision"	/* Get WEPDef */	if (wlandev->hostwep & HOSTWEP_PRIVACYINVOKED ||	    wlandev->hostwep & HOSTWEP_EXCLUDEUNENCRYPTED) {		msg.authtype.data = P80211ENUM_authalg_sharedkey;	}	else {		msg.authtype.data = P80211ENUM_authalg_opensystem;	}	msg.msgcode = DIDmsg_lnxreq_autojoin;			/* Trim the last '\0' to fit the SSID format */	if (ssid[data.length-1] == '\0') {		data.length = data.length - 1;	}		memcpy(msg.ssid.data.data, ssid, data.length);	msg.ssid.data.len = data.length;	result = p80211req_dorequest(wlandev, (UINT8*)&msg);	if (result) {		err = -EFAULT;		goto exit;	}exit:	DBFEXIT;	return err;	}/* called by /proc/net/wireless */struct iw_statistics* p80211wext_get_wireless_stats (netdevice_t *dev) {	p80211msg_lnxreq_commsquality_t  quality;	wlandevice_t *wlandev = (wlandevice_t*)dev->priv;	struct iw_statistics* wstats = &wlandev->wstats;	int retval;		DBFENTER;		/* Check */	if ( (wlandev == NULL) || (wlandev->msdstate != WLAN_MSD_RUNNING) )		return NULL;	/* XXX Only valid in station mode */	wstats->status = 0;	/* build request message */	quality.msgcode = DIDmsg_lnxreq_commsquality;	quality.dbm.data = P80211ENUM_truth_true;	quality.dbm.status = P80211ENUM_msgitem_status_data_ok;	/* send message to nsd */	if ( wlandev->mlmerequest == NULL )		return NULL;	retval = wlandev->mlmerequest(wlandev, (p80211msg_t*) &quality);	wstats->qual.qual = quality.link.data;    /* overall link quality */	wstats->qual.level = quality.level.data;  /* instant signal level */	wstats->qual.noise = quality.noise.data;  /* instant noise level */	wstats->qual.updated = 7;	wstats->discard.code = wlandev->rx.decrypt_err;	wstats->discard.nwid = 0;	wstats->discard.misc = 0;#if WIRELESS_EXT > 11		wstats->discard.fragment = 0;  // incomplete fragments	wstats->discard.retries = 0;   // tx retries.	wstats->miss.beacon = 0;#endif	DBFEXIT;		return wstats;}static int p80211wext_giwname(netdevice_t *dev,			      struct iw_request_info *info,			      char *name, char *extra){	struct iw_param rate;	int result;	int err = 0;		DBFENTER;	result = p80211wext_giwrate(dev, NULL, &rate, NULL); 	if (result) {		err = -EFAULT;		goto exit;	}		switch (rate.value) {	case 1000000:	case 2000000:		strcpy(name, "IEEE 802.11-DS");		break;	case 5500000:	case 11000000:		strcpy(name, "IEEE 802.11-b");		break;	}exit:	DBFEXIT;	return err;}static int p80211wext_giwfreq(netdevice_t *dev,			      struct iw_request_info *info,			      struct iw_freq *freq, char *extra){	wlandevice_t *wlandev = (wlandevice_t*)dev->priv;	p80211item_uint32_t             mibitem;	p80211msg_dot11req_mibset_t     msg;	int result;	int err = 0;	DBFENTER;	msg.msgcode = DIDmsg_dot11req_mibget;	mibitem.did = DIDmib_dot11phy_dot11PhyDSSSTable_dot11CurrentChannel;	memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem));	result = p80211req_dorequest(wlandev, (UINT8*)&msg);		if (result) {		err = -EFAULT;		goto exit;	}		memcpy(&mibitem, &msg.mibattribute.data, sizeof(mibitem));		if (mibitem.data > NUM_CHANNELS) {		err = -EFAULT;		goto exit;	}		/* convert into frequency instead of a channel */	freq->e = 1;			freq->m = p80211_channel_to_mhz(mibitem.data, 0) * 100000; exit:	DBFEXIT;	return err;}static int p80211wext_siwfreq(netdevice_t *dev,			      struct iw_request_info *info,			      struct iw_freq *freq, char *extra){	wlandevice_t *wlandev = (wlandevice_t*)dev->priv;	p80211item_uint32_t             mibitem;	p80211msg_dot11req_mibset_t     msg;	int result;	int err = 0;	DBFENTER;	if (!wlan_wext_write) {		err = (-EOPNOTSUPP);		goto exit;	}	msg.msgcode = DIDmsg_dot11req_mibset;	mibitem.did = DIDmib_dot11phy_dot11PhyDSSSTable_dot11CurrentChannel;	mibitem.status = P80211ENUM_msgitem_status_data_ok;		if ( (freq->e == 0) && (freq->m <= 1000) )		mibitem.data = freq->m;	else		mibitem.data = p80211_mhz_to_channel(freq->m);  	memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem));	result = p80211req_dorequest(wlandev, (UINT8*)&msg);		if (result) {		err = -EFAULT;		goto exit;	}	 exit:	DBFEXIT;	return err;}#if WIRELESS_EXT > 8static int p80211wext_giwmode(netdevice_t *dev,			      struct iw_request_info *info,			      __u32 *mode, char *extra){	wlandevice_t *wlandev = (wlandevice_t*)dev->priv;	DBFENTER;	switch (wlandev->macmode) {	case WLAN_MACMODE_IBSS_STA: 		*mode = IW_MODE_ADHOC;		break;	case WLAN_MACMODE_ESS_STA:		*mode = IW_MODE_INFRA;		break;	case WLAN_MACMODE_ESS_AP:		*mode = IW_MODE_MASTER;		break;	default:		/* Not set yet. */		*mode = IW_MODE_AUTO;	}	DBFEXIT;	return 0;}static int p80211wext_siwmode(netdevice_t *dev,			      struct iw_request_info *info,			      __u32 *mode, char *extra){	wlandevice_t *wlandev = (wlandevice_t*)dev->priv;	p80211item_uint32_t             mibitem;	p80211msg_dot11req_mibset_t     msg;	int 	result;	int     err = 0;	DBFENTER;	if (!wlan_wext_write) {		err = (-EOPNOTSUPP);		goto exit;	}	if (*mode != IW_MODE_ADHOC && *mode != IW_MODE_INFRA &&	    *mode != IW_MODE_MASTER) {		err = (-EOPNOTSUPP);		goto exit;	}	/* Operation mode is the same with current mode */	if (*mode == wlandev->macmode)		goto exit;	switch (*mode) {	case IW_MODE_ADHOC:		wlandev->macmode = WLAN_MACMODE_IBSS_STA;		break;	case IW_MODE_INFRA:		wlandev->macmode = WLAN_MACMODE_ESS_STA;		break;	case IW_MODE_MASTER:		wlandev->macmode = WLAN_MACMODE_ESS_AP;		break;	default:		/* Not set yet. */		WLAN_LOG_INFO("Operation mode: %d not support\n", *mode);		return -EOPNOTSUPP;	}	/* Set Operation mode to the PORT TYPE RID */#warning "get rid of p2mib here"	msg.msgcode = DIDmsg_dot11req_mibset;	mibitem.did = DIDmib_p2_p2Static_p2CnfPortType;	mibitem.data = (*mode == IW_MODE_ADHOC) ? 0 : 1;	memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem));	result = p80211req_dorequest(wlandev, (UINT8*)&msg);	if (result)		err = -EFAULT; exit:	DBFEXIT;	return err;}static int p80211wext_giwrange(netdevice_t *dev,			       struct iw_request_info *info,			       struct iw_point *data, char *extra){        struct iw_range *range = (struct iw_range *) extra;	int i, val;	DBFENTER;#if WIRELESS_EXT > 9	range->txpower_capa = IW_TXPOW_DBM;	// XXX what about min/max_pmp, min/max_pmt, etc.#endif#if WIRELESS_EXT > 10	range->we_version_compiled = WIRELESS_EXT;	range->we_version_source = 13;		range->retry_capa = IW_RETRY_LIMIT;	range->retry_flags = IW_RETRY_LIMIT;	range->min_retry = 0;	range->max_retry = 255;#endif /* WIRELESS_EXT > 10 */#if WIRELESS_EXT > 16        range->event_capa[0] = (IW_EVENT_CAPA_K_0 |  //mode/freq/ssid                                 IW_EVENT_CAPA_MASK(SIOCGIWAP) |                                 IW_EVENT_CAPA_MASK(SIOCGIWSCAN));        range->event_capa[1] = IW_EVENT_CAPA_K_1;  //encode        range->event_capa[4] = (IW_EVENT_CAPA_MASK(IWEVQUAL) |                                IW_EVENT_CAPA_MASK(IWEVCUSTOM) );#endif	range->num_channels = NUM_CHANNELS;	/* XXX need to filter against the regulatory domain &| active set */	val = 0;	for (i = 0; i < NUM_CHANNELS ; i++) {		range->freq[val].i = i + 1;		range->freq[val].m = p80211wext_channel_freq[i] * 100000;		range->freq[val].e = 1;		val++;	}	range->num_frequency = val;		/* Max of /proc/net/wireless */	range->max_qual.qual = 92;	range->max_qual.level = 154;	range->max_qual.noise = 154;	range->sensitivity = 3;	// XXX these need to be nsd-specific!	range->min_rts = 0;	range->max_rts = 2347;	range->min_frag = 256;	range->max_frag = 2346;		range->max_encoding_tokens = NUM_WEPKEYS;	range->num_encoding_sizes = 2;	range->encoding_size[0] = 5;	range->encoding_size[1] = 13;		// XXX what about num_bitrates/throughput?	range->num_bitrates = 0;	/* estimated max throughput */	// XXX need to cap it if we're running at ~2Mbps..	range->throughput = 5500000;	DBFEXIT;	return 0;}#endifstatic int p80211wext_giwap(netdevice_t *dev,			    struct iw_request_info *info,			    struct sockaddr *ap_addr, char *extra){	wlandevice_t *wlandev = (wlandevice_t*)dev->priv;	DBFENTER;	memcpy(ap_addr->sa_data, wlandev->bssid, WLAN_BSSID_LEN);	ap_addr->sa_family = ARPHRD_ETHER;	DBFEXIT;	return 0;}#if WIRELESS_EXT > 8static int p80211wext_giwencode(netdevice_t *dev,				struct iw_request_info *info,				struct iw_point *erq, char *key){	wlandevice_t *wlandev = (wlandevice_t*)dev->priv;	int err = 0;	int i;	DBFENTER;	if (wlandev->hostwep & HOSTWEP_PRIVACYINVOKED)		erq->flags = IW_ENCODE_ENABLED;	else		erq->flags = IW_ENCODE_DISABLED;		if (wlandev->hostwep & HOSTWEP_EXCLUDEUNENCRYPTED)		erq->flags |= IW_ENCODE_RESTRICTED;	else		erq->flags |= IW_ENCODE_OPEN;	i = (erq->flags & IW_ENCODE_INDEX) - 1;	if (i == -1)		i = wlandev->hostwep & HOSTWEP_DEFAULTKEY_MASK;	if ((i < 0) || (i >= NUM_WEPKEYS)) {		err = -EINVAL;		goto exit;	}	erq->flags |= i + 1;	/* copy the key from the driver cache as the keys are read-only MIBs */	erq->length = wlandev->wep_keylens[i];	memcpy(key, wlandev->wep_keys[i], erq->length); exit:	DBFEXIT;	return err;}static int p80211wext_siwencode(netdevice_t *dev,				struct iw_request_info *info,				struct iw_point *erq, char *key){	wlandevice_t *wlandev = (wlandevice_t*)dev->priv;	p80211msg_dot11req_mibset_t	msg;	p80211item_pstr32_t		pstr;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
97精品久久久午夜一区二区三区| 亚洲色图一区二区三区| 91精品国产手机| 欧美日韩视频第一区| 一本色道久久综合精品竹菊| 波多野结衣一区二区三区| 成人a区在线观看| 成人动漫一区二区| 91黄色免费观看| 欧美日韩另类一区| 欧美一区二区视频在线观看2020| 日韩一区国产二区欧美三区| 日韩女优av电影| www国产精品av| 国产精品天美传媒沈樵| 亚洲人午夜精品天堂一二香蕉| 一区二区三区国产精华| 秋霞av亚洲一区二区三| 国内精品免费在线观看| 成人av网站在线观看| 一本到一区二区三区| 欧美三片在线视频观看| 欧美成人a∨高清免费观看| 国产亚洲一区字幕| 亚洲精品五月天| 亚欧色一区w666天堂| 黄色小说综合网站| www.日韩在线| 欧美日韩国产小视频| 精品国产一区二区精华| 国产精品久久久一本精品 | 日本一区二区免费在线观看视频| 日本一区二区三区免费乱视频 | 麻豆精品视频在线观看免费| 韩日精品视频一区| 成人av片在线观看| 欧美另类videos死尸| 久久精品夜色噜噜亚洲aⅴ| 亚洲欧美一区二区三区久本道91| 亚洲va韩国va欧美va| 国产一区高清在线| 欧洲另类一二三四区| 精品国产91乱码一区二区三区| 中文字幕在线观看不卡视频| 天天亚洲美女在线视频| 国产成人精品亚洲777人妖 | 久久在线观看免费| 亚洲精品国产视频| 久久66热偷产精品| 色婷婷综合久久| 日韩欧美不卡在线观看视频| 亚洲精品第1页| 国产一区二区三区精品视频| 欧洲中文字幕精品| 国产午夜精品一区二区三区嫩草 | 亚洲精品中文在线| 国产一区二区在线免费观看| 91福利国产成人精品照片| 久久综合九色综合97婷婷| 亚洲国产综合在线| 国产99精品在线观看| 91精品国产综合久久久蜜臀图片| 综合精品久久久| 国产精品一区二区在线看| 欧美日韩aaaaa| 亚洲欧美视频在线观看| 成人性生交大片免费| 欧美大白屁股肥臀xxxxxx| 一区二区成人在线观看| 国精品**一区二区三区在线蜜桃| 欧美日韩卡一卡二| 亚洲精品欧美二区三区中文字幕| 国产高清无密码一区二区三区| 3atv一区二区三区| 亚洲午夜免费福利视频| 色婷婷综合激情| 国产精品高潮呻吟| 国产a视频精品免费观看| 精品国产一区二区三区久久影院| 亚洲第一av色| 欧美在线啊v一区| 亚洲色图另类专区| 成人激情小说网站| 久久精品一二三| 久久不见久久见中文字幕免费| 欧美精品黑人性xxxx| 亚洲一二三四在线观看| 91麻豆国产自产在线观看| 国产精品天美传媒沈樵| 成人av网址在线观看| 欧美国产精品一区二区三区| 极品美女销魂一区二区三区| 日韩美女视频在线| 久久国产尿小便嘘嘘| 日韩一级视频免费观看在线| 日韩精品视频网| 91麻豆精品国产91久久久久久 | 风间由美一区二区av101| 久久女同性恋中文字幕| 国产一区二区三区美女| 久久久亚洲精华液精华液精华液 | 日韩午夜在线影院| 青青草国产精品97视觉盛宴| 91精品国产综合久久福利软件| 日韩影院精彩在线| 欧美成人aa大片| 国产一区二区91| 国产精品久久久一本精品 | 色呦呦日韩精品| 一区二区三区免费观看| 欧美性欧美巨大黑白大战| 依依成人综合视频| 欧美裸体一区二区三区| 美美哒免费高清在线观看视频一区二区 | 亚洲精品视频免费观看| 欧美性一级生活| 青青草国产精品97视觉盛宴| 久久中文字幕电影| 波多野洁衣一区| 一区二区三区精品视频| 欧美一区日本一区韩国一区| 裸体歌舞表演一区二区| 日本一区二区三区在线观看| 色婷婷综合久色| 蜜桃视频在线观看一区| 国产亚洲美州欧州综合国| 99精品国产99久久久久久白柏| 亚洲自拍偷拍av| 日韩美一区二区三区| 成人一道本在线| 亚洲成人免费视频| 2022国产精品视频| 色呦呦日韩精品| 蜜臀av性久久久久蜜臀aⅴ四虎| 久久这里只有精品首页| 色综合久久中文综合久久牛| 日本va欧美va精品| 国产精品久久久久久久岛一牛影视| 在线看不卡av| 国产一区二区毛片| 亚洲自拍偷拍图区| 久久久精品黄色| 欧美日韩色一区| 国产成人精品免费一区二区| 亚洲激情一二三区| 337p日本欧洲亚洲大胆精品| 91麻豆免费在线观看| 免费在线观看不卡| 中文字幕日韩一区| 日韩丝袜美女视频| 色婷婷综合久久久中文字幕| 伦理电影国产精品| 亚洲亚洲精品在线观看| 国产欧美日韩三级| 欧美久久久久免费| 99国产精品国产精品久久| 免费在线一区观看| 一个色在线综合| 国产欧美一区二区三区在线老狼| 欧美性受xxxx| 不卡的av中国片| 久久精品二区亚洲w码| 一区二区三区四区不卡视频| 久久久99久久精品欧美| 欧美亚洲另类激情小说| 成人h动漫精品一区二区| 精品亚洲成a人| 日韩高清不卡一区二区三区| 综合亚洲深深色噜噜狠狠网站| 欧美大片一区二区| 欧美精品 国产精品| 色综合天天综合网天天狠天天 | 欧美日韩一区二区三区不卡| 国产福利精品导航| 秋霞影院一区二区| 亚洲一区在线电影| 亚洲欧美日韩精品久久久久| 久久精品网站免费观看| 欧美电视剧在线看免费| 欧美剧情片在线观看| 色综合久久中文综合久久97| 成人免费毛片嘿嘿连载视频| 国模套图日韩精品一区二区| 日韩av电影免费观看高清完整版 | 韩国女主播成人在线| 日日嗨av一区二区三区四区| 亚洲蜜桃精久久久久久久| 国产精品美女一区二区| 国产欧美一区二区三区在线老狼| 精品国产一区二区三区久久久蜜月| 欧美丰满少妇xxxbbb| 欧美日韩黄色影视| 欧美午夜在线观看| 欧美亚洲国产一区在线观看网站 | 国产精品丝袜一区| 久久精品人人做| 国产三级三级三级精品8ⅰ区| 欧美一区二区免费观在线| 欧美男人的天堂一二区| 欧美日本一区二区在线观看|