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

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

?? ieee80211_node.c

?? Linux下wifi實(shí)現(xiàn)
?? C
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):
/*- * Copyright (c) 2001 Atsushi Onoe * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products *    derived from this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * $Id: ieee80211_node.c 1640 2006-06-13 08:50:37Z kelmo $ */#ifndef EXPORT_SYMTAB#define	EXPORT_SYMTAB#endif/* * IEEE 802.11 node handling support. */#include <linux/config.h>#include <linux/version.h>#include <linux/module.h>#include <linux/skbuff.h>#include <linux/netdevice.h>#include <linux/etherdevice.h>#include <linux/random.h>#include "if_media.h"#include <net80211/ieee80211_var.h>#include <net80211/if_athproto.h>/* * Association id's are managed with a bit vector. */#define	IEEE80211_AID_SET(_vap, _b) \	((_vap)->iv_aid_bitmap[IEEE80211_AID(_b) / 32] |= \		(1 << (IEEE80211_AID(_b) % 32)))#define	IEEE80211_AID_CLR(_vap, _b) \	((_vap)->iv_aid_bitmap[IEEE80211_AID(_b) / 32] &= \		~(1 << (IEEE80211_AID(_b) % 32)))#define	IEEE80211_AID_ISSET(_vap, _b) \	((_vap)->iv_aid_bitmap[IEEE80211_AID(_b) / 32] & (1 << (IEEE80211_AID(_b) % 32)))static int ieee80211_sta_join1(struct ieee80211_node *);static struct ieee80211_node *node_alloc(struct ieee80211_node_table *,	struct ieee80211vap *);static void node_cleanup(struct ieee80211_node *);static void node_free(struct ieee80211_node *);static u_int8_t node_getrssi(const struct ieee80211_node *);static void _ieee80211_free_node(struct ieee80211_node *);static void node_reclaim(struct ieee80211_node_table *, struct ieee80211_node*);static void ieee80211_node_timeout(unsigned long);static void ieee80211_node_table_init(struct ieee80211com *,	struct ieee80211_node_table *, const char *, int);static void ieee80211_node_table_cleanup(struct ieee80211_node_table *);static void ieee80211_node_table_reset(struct ieee80211_node_table *,	struct ieee80211vap *);static void ieee80211_node_wds_ageout(unsigned long);MALLOC_DEFINE(M_80211_NODE, "80211node", "802.11 node state");voidieee80211_node_attach(struct ieee80211com *ic){	ieee80211_node_table_init(ic, &ic->ic_sta, "station",		IEEE80211_INACT_INIT);	init_timer(&ic->ic_inact);	ic->ic_inact.function = ieee80211_node_timeout;	ic->ic_inact.data = (unsigned long) ic;	ic->ic_inact.expires = jiffies + IEEE80211_INACT_WAIT * HZ;	add_timer(&ic->ic_inact);	ic->ic_node_alloc = node_alloc;	ic->ic_node_free = node_free;	ic->ic_node_cleanup = node_cleanup;	ic->ic_node_getrssi = node_getrssi;}voidieee80211_node_detach(struct ieee80211com *ic){	del_timer(&ic->ic_inact);	ieee80211_node_table_cleanup(&ic->ic_sta);}voidieee80211_node_vattach(struct ieee80211vap *vap){	/* default station inactivity timer setings */	vap->iv_inact_init = IEEE80211_INACT_INIT;	vap->iv_inact_auth = IEEE80211_INACT_AUTH;	vap->iv_inact_run = IEEE80211_INACT_RUN;	vap->iv_inact_probe = IEEE80211_INACT_PROBE;}voidieee80211_node_latevattach(struct ieee80211vap *vap){	struct ieee80211com *ic = vap->iv_ic;	struct ieee80211_rsnparms *rsn;	/*	 * Allocate these only if needed.  Beware that we	 * know adhoc mode doesn't support ATIM yet...	 */	if (vap->iv_opmode == IEEE80211_M_HOSTAP) {		if (vap->iv_max_aid == 0)			vap->iv_max_aid = IEEE80211_AID_DEF;		else if (vap->iv_max_aid > IEEE80211_AID_MAX)			vap->iv_max_aid = IEEE80211_AID_MAX;		MALLOC(vap->iv_aid_bitmap, u_int32_t *,			howmany(vap->iv_max_aid, 32) * sizeof(u_int32_t),			M_DEVBUF, M_NOWAIT | M_ZERO);		if (vap->iv_aid_bitmap == NULL) {			/* XXX no way to recover */			printf("%s: no memory for AID bitmap!\n", __func__);			vap->iv_max_aid = 0;		}	}	ieee80211_reset_bss(vap);	/*	 * Setup "global settings" in the bss node so that	 * each new station automatically inherits them.	 */	rsn = &vap->iv_bss->ni_rsn;	/* WEP, TKIP, and AES-CCM are always supported */	rsn->rsn_ucastcipherset |= 1 << IEEE80211_CIPHER_WEP;	rsn->rsn_ucastcipherset |= 1 << IEEE80211_CIPHER_TKIP;	rsn->rsn_ucastcipherset |= 1 << IEEE80211_CIPHER_AES_CCM;	if (ic->ic_caps & IEEE80211_C_AES)		rsn->rsn_ucastcipherset |= 1 << IEEE80211_CIPHER_AES_OCB;	if (ic->ic_caps & IEEE80211_C_CKIP)		rsn->rsn_ucastcipherset |= 1 << IEEE80211_CIPHER_CKIP;	/*	 * Default unicast cipher to WEP for 802.1x use.  If	 * WPA is enabled the management code will set these	 * values to reflect.	 */	rsn->rsn_ucastcipher = IEEE80211_CIPHER_WEP;	rsn->rsn_ucastkeylen = 104 / NBBY;	/*	 * WPA says the multicast cipher is the lowest unicast	 * cipher supported.  But we skip WEP which would	 * otherwise be used based on this criteria.	 */	rsn->rsn_mcastcipher = IEEE80211_CIPHER_TKIP;	rsn->rsn_mcastkeylen = 128 / NBBY;	/*	 * We support both WPA-PSK and 802.1x; the one used	 * is determined by the authentication mode and the	 * setting of the PSK state.	 */	rsn->rsn_keymgmtset = WPA_ASE_8021X_UNSPEC | WPA_ASE_8021X_PSK;	rsn->rsn_keymgmt = WPA_ASE_8021X_PSK;	vap->iv_auth = ieee80211_authenticator_get(vap->iv_bss->ni_authmode);}voidieee80211_node_vdetach(struct ieee80211vap *vap){	struct ieee80211com *ic = vap->iv_ic;	ieee80211_node_table_reset(&ic->ic_sta, vap);	if (vap->iv_bss != NULL) {		ieee80211_free_node(vap->iv_bss);		vap->iv_bss = NULL;	}	if (vap->iv_aid_bitmap != NULL) {		FREE(vap->iv_aid_bitmap, M_DEVBUF);		vap->iv_aid_bitmap = NULL;	}}/*  * Port authorize/unauthorize interfaces for use by an authenticator. */voidieee80211_node_authorize(struct ieee80211_node *ni){	ni->ni_flags |= IEEE80211_NODE_AUTH;	ni->ni_inact_reload = ni->ni_vap->iv_inact_run;}EXPORT_SYMBOL(ieee80211_node_authorize);voidieee80211_node_unauthorize(struct ieee80211_node *ni){	ni->ni_flags &= ~IEEE80211_NODE_AUTH;}EXPORT_SYMBOL(ieee80211_node_unauthorize);/* * Set/change the channel.  The rate set is also updated * to ensure a consistent view by drivers. */static __inline voidieee80211_node_set_chan(struct ieee80211com *ic, struct ieee80211_node *ni){	struct ieee80211_channel *chan = ic->ic_bsschan;	KASSERT(chan != IEEE80211_CHAN_ANYC, ("bss channel not setup"));	ni->ni_chan = chan;#ifdef ATH_SUPERG_XR 	if (ni->ni_vap->iv_flags & IEEE80211_F_XR)		ni->ni_rates = ic->ic_sup_xr_rates;	else#endif	ni->ni_rates = ic->ic_sup_rates[ieee80211_chan2mode(chan)];}static __inline voidcopy_bss(struct ieee80211_node *nbss, const struct ieee80211_node *obss){	/* propagate useful state */	nbss->ni_authmode = obss->ni_authmode;	nbss->ni_ath_flags = obss->ni_ath_flags;	nbss->ni_txpower = obss->ni_txpower;	nbss->ni_vlan = obss->ni_vlan;	nbss->ni_rsn = obss->ni_rsn;	/* XXX statistics? */}voidieee80211_create_ibss(struct ieee80211vap* vap, struct ieee80211_channel *chan){	struct ieee80211com *ic = vap->iv_ic;	struct ieee80211_node *ni;	IEEE80211_DPRINTF(vap, IEEE80211_MSG_SCAN,		"%s: creating ibss on channel %u\n", __func__,		ieee80211_chan2ieee(ic, chan));	/* Check to see if we already have a node for this mac */	ni = ieee80211_find_node(&ic->ic_sta, vap->iv_myaddr);	if (ni == NULL) {		ni = ieee80211_alloc_node(&ic->ic_sta, vap, vap->iv_myaddr);		if (ni == NULL) {			/* XXX recovery? */			return;		}	}	else		ieee80211_free_node(ni);	IEEE80211_DPRINTF(vap, IEEE80211_MSG_NODE, "%s: %p<%s> refcnt %d\n",		__func__, vap->iv_bss, ether_sprintf(vap->iv_bss->ni_macaddr),		ieee80211_node_refcnt(ni));	IEEE80211_ADDR_COPY(ni->ni_bssid, vap->iv_myaddr);	ni->ni_esslen = vap->iv_des_ssid[0].len;	memcpy(ni->ni_essid, vap->iv_des_ssid[0].ssid, ni->ni_esslen);	if (vap->iv_bss != NULL)		copy_bss(ni, vap->iv_bss);	ni->ni_intval = ic->ic_lintval;#ifdef ATH_SUPERG_XR 	if (vap->iv_flags & IEEE80211_F_XR) {		ni->ni_intval *= IEEE80211_XR_BEACON_FACTOR;	}#endif	if (vap->iv_flags & IEEE80211_F_PRIVACY)		ni->ni_capinfo |= IEEE80211_CAPINFO_PRIVACY;	if (ic->ic_phytype == IEEE80211_T_FH) {		ni->ni_fhdwell = 200;	/* XXX */		ni->ni_fhindex = 1;	}	if (vap->iv_opmode == IEEE80211_M_IBSS) {		vap->iv_flags |= IEEE80211_F_SIBSS;		ni->ni_capinfo |= IEEE80211_CAPINFO_IBSS;	/* XXX */		if (vap->iv_flags & IEEE80211_F_DESBSSID)			IEEE80211_ADDR_COPY(ni->ni_bssid, vap->iv_des_bssid);		else			ni->ni_bssid[0] |= 0x02;	/* local bit for IBSS */	} else if (vap->iv_opmode == IEEE80211_M_AHDEMO) {		if (vap->iv_flags & IEEE80211_F_DESBSSID)		    IEEE80211_ADDR_COPY(ni->ni_bssid, vap->iv_des_bssid);		else {		    ni->ni_bssid[0] = 0x00;		    ni->ni_bssid[1] = 0x00;		    ni->ni_bssid[2] = 0x00;		    ni->ni_bssid[3] = 0x00;		    ni->ni_bssid[4] = 0x00;		    ni->ni_bssid[5] = 0x00;		}	}#ifdef ATH_SUPERG_DYNTURBO	if (vap->iv_opmode == IEEE80211_M_HOSTAP) {		ni->ni_ath_flags = vap->iv_ath_cap;		/*		 * no dynamic turbo and AR on a static turbo channel.		 * no dynamic turbo and AR on non-turbo channel.		 * no AR on 5GHZ channel .		 */        		if (IEEE80211_IS_CHAN_STURBO(chan) || 		    !ieee80211_find_channel(ic, chan->ic_freq, chan->ic_flags | IEEE80211_CHAN_TURBO))			ni->ni_ath_flags &= ~(IEEE80211_ATHC_TURBOP | IEEE80211_ATHC_AR);		if (IEEE80211_IS_CHAN_5GHZ(chan)) 			ni->ni_ath_flags &= ~IEEE80211_ATHC_AR;	}#endif	/* 	 * Fix the channel and related attributes.	 */	ic->ic_bsschan = chan;	ieee80211_node_set_chan(ic, ni);	ic->ic_curmode = ieee80211_chan2mode(chan);	/* Update country ie information */	ieee80211_build_countryie(ic);	if (IEEE80211_IS_CHAN_HALF(chan))		ni->ni_rates = ic->ic_sup_half_rates;	else if (IEEE80211_IS_CHAN_QUARTER(chan))		ni->ni_rates = ic->ic_sup_quarter_rates;	(void) ieee80211_sta_join1(ieee80211_ref_node(ni));}EXPORT_SYMBOL(ieee80211_create_ibss);/* * Reset bss state on transition to the INIT state. * Clear any stations from the table (they have been * deauth'd) and reset the bss node (clears key, rate, * etc. state). */voidieee80211_reset_bss(struct ieee80211vap *vap){	struct ieee80211com *ic = vap->iv_ic;	struct ieee80211_node *ni, *obss;	IEEE80211_DPRINTF(vap, IEEE80211_MSG_NODE, "%s: old bss %p<%s> refcnt %d\n",		__func__, vap->iv_bss, ether_sprintf(vap->iv_bss->ni_macaddr),		ieee80211_node_refcnt(vap->iv_bss));	ieee80211_node_table_reset(&ic->ic_sta, vap);	/* XXX multi-bss wrong */	ieee80211_reset_erp(ic, ic->ic_curmode);	ni = ieee80211_alloc_node(&ic->ic_sta, vap, vap->iv_myaddr);	KASSERT(ni != NULL, ("unable to setup inital BSS node"));	obss = vap->iv_bss;	vap->iv_bss = ieee80211_ref_node(ni);	IEEE80211_DPRINTF(vap, IEEE80211_MSG_NODE, "%s: new bss %p<%s> refcnt %d\n",		__func__, vap->iv_bss, ether_sprintf(vap->iv_bss->ni_macaddr),		ieee80211_node_refcnt(vap->iv_bss));	if (obss != NULL) {		copy_bss(ni, obss);		ni->ni_intval = ic->ic_lintval;		ieee80211_free_node(obss);	}}static intmatch_ssid(const struct ieee80211_node *ni,	int nssid, const struct ieee80211_scan_ssid ssids[]){	int i;	for (i = 0; i < nssid; i++) {		if (ni->ni_esslen == ssids[i].len &&		    memcmp(ni->ni_essid, ssids[i].ssid, ni->ni_esslen) == 0)			return 1;	}	return 0;}/* * Test a node for suitability/compatibility. */static intcheck_bss(struct ieee80211vap *vap, struct ieee80211_node *ni){	struct ieee80211com *ic = ni->ni_ic;        u_int8_t rate;	if (isclr(ic->ic_chan_active, ieee80211_chan2ieee(ic, ni->ni_chan)))		return 0;	if (vap->iv_opmode == IEEE80211_M_IBSS) {		if ((ni->ni_capinfo & IEEE80211_CAPINFO_IBSS) == 0)			return 0;	} else {		if ((ni->ni_capinfo & IEEE80211_CAPINFO_ESS) == 0)			return 0;	}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美资源站| 一本到不卡精品视频在线观看| 手机精品视频在线观看| 亚洲成人动漫一区| 成人网在线免费视频| 成人a级免费电影| 在线影院国内精品| 69精品人人人人| 99久久综合色| 91免费国产在线| 91精品国产91久久久久久一区二区 | 国产精品不卡一区二区三区| 国产精品你懂的| 三级成人在线视频| 婷婷中文字幕综合| 国产精品99久久久久| 成人黄色av电影| 欧美日韩黄色一区二区| 欧美精品日日鲁夜夜添| 中文一区二区在线观看| 亚洲一区二区在线免费看| 蜜桃一区二区三区在线| 激情成人综合网| 欧美电影免费观看高清完整版在线| 久久久久国产成人精品亚洲午夜| 一区二区三区欧美亚洲| 秋霞成人午夜伦在线观看| 欧美日韩精品一区二区三区| 中文成人av在线| 久久国产精品99久久久久久老狼| 91丨porny丨国产入口| 欧美三级午夜理伦三级中视频| 精品国产乱子伦一区| 一区二区三区在线影院| 国产剧情一区二区三区| 欧美日韩一区中文字幕| 国产精品乱子久久久久| 蜜桃精品在线观看| 色激情天天射综合网| 成人av在线电影| 欧美成人猛片aaaaaaa| 亚洲第一电影网| 日本丰满少妇一区二区三区| 亚洲高清不卡在线观看| 成人av小说网| 午夜国产精品一区| 欧美一区二区三区视频免费| 美国毛片一区二区| 欧美美女一区二区三区| 亚洲精品高清在线| 97久久久精品综合88久久| 亚洲美女淫视频| 99久久精品国产麻豆演员表| 26uuu国产电影一区二区| 国产一区二区在线观看视频| 欧美mv和日韩mv国产网站| 国产成人在线视频网址| 精品日韩在线一区| 日本一道高清亚洲日美韩| 国产二区国产一区在线观看| 亚洲美女视频一区| 色综合色狠狠天天综合色| 国产精品视频九色porn| 久久精品视频在线免费观看| 成人国产在线观看| 亚洲国产精品成人综合| 成人午夜在线播放| 91精品国产色综合久久久蜜香臀| 久久精品国产第一区二区三区| 日韩午夜精品视频| 蜜臀av性久久久久蜜臀aⅴ流畅 | 色婷婷精品久久二区二区蜜臂av| 亚洲免费三区一区二区| proumb性欧美在线观看| 国产精品久久久久久亚洲伦| 不卡一区在线观看| 亚洲国产精品人人做人人爽| 日韩三级视频在线看| 久久国产精品99久久久久久老狼 | 中国av一区二区三区| 国产乱理伦片在线观看夜一区| 精品对白一区国产伦| 国产一区免费电影| 亚洲国产一二三| 精品国产伦一区二区三区观看方式| 美女视频免费一区| 日本一区二区三区四区| 日韩激情av在线| 欧美mv和日韩mv的网站| 成人免费高清在线观看| 一区二区三区91| 精品少妇一区二区三区视频免付费| 成人性生交大合| 91免费国产在线观看| 久久精品视频在线免费观看| 精品一区二区三区香蕉蜜桃| 日韩一级视频免费观看在线| 亚洲一区欧美一区| 色av综合在线| 日韩中文字幕亚洲一区二区va在线| 欧美日韩中文一区| 五月综合激情网| 在线精品视频免费观看| 精品一区二区在线播放| 日韩一卡二卡三卡四卡| 东方aⅴ免费观看久久av| 日本成人在线电影网| 亚洲成人在线网站| 亚洲一区在线视频| 国产精品传媒视频| 中文字幕av一区 二区| 国产日本一区二区| 久久久精品日韩欧美| 久久亚洲影视婷婷| 久久亚洲一区二区三区四区| 国产偷国产偷亚洲高清人白洁| 久久综合九色综合97婷婷| 久久久不卡影院| 国产精品理伦片| 综合婷婷亚洲小说| 一区二区三区精品视频在线| 夜夜嗨av一区二区三区网页| 一区二区欧美视频| 亚洲成a人v欧美综合天堂| 亚洲第一搞黄网站| 奇米一区二区三区av| 精品一区二区三区在线观看国产 | 一区二区在线观看视频| 亚洲免费av在线| 亚洲不卡一区二区三区| 毛片av一区二区| 国产成人综合网站| 日本精品免费观看高清观看| 欧美日韩aaaaaa| xnxx国产精品| 亚洲欧美日韩国产综合| 日韩精品亚洲专区| 国产精品乡下勾搭老头1| 国产成人精品影视| 欧美视频第二页| 欧美一卡二卡在线| 欧美极品xxx| 性久久久久久久久久久久| 精品一区二区三区免费毛片爱| 床上的激情91.| 欧美精品日韩综合在线| xf在线a精品一区二区视频网站| 亚洲欧洲精品一区二区三区| 首页欧美精品中文字幕| 国产激情视频一区二区三区欧美 | 麻豆精品视频在线观看| 国产传媒日韩欧美成人| 在线播放91灌醉迷j高跟美女 | 成人一级片网址| av电影天堂一区二区在线| 欧美色网一区二区| 欧美唯美清纯偷拍| 久久久.com| 日韩av一二三| 欧美午夜精品免费| 国产精品久久久久aaaa| 精品视频在线免费看| 欧美精品一区二区三区蜜桃| 亚洲国产中文字幕| 国产成人综合在线观看| 欧美高清www午色夜在线视频| 国产精品午夜久久| 中文字幕一区二区不卡| 麻豆精品在线播放| 色先锋aa成人| 中文字幕精品综合| 国产在线播放一区三区四| 欧美视频一区二区三区四区| 亚洲精选视频在线| 国产一区二三区好的| 精品美女在线观看| 亚洲成人免费观看| 91精品国产综合久久精品性色 | 一区二区三区在线视频免费观看| 国产专区综合网| 欧美一级理论片| 免费成人av在线| 久久天堂av综合合色蜜桃网| 日本免费新一区视频| 精品国产一区二区亚洲人成毛片 | 亚洲高清免费视频| 欧美一区二区三区免费在线看| 亚洲午夜视频在线观看| 亚洲国产日韩精品| 欧美特级限制片免费在线观看| 亚洲乱码中文字幕| 91麻豆精品国产91久久久久| 欧美日韩一区高清| 久久久欧美精品sm网站| 中文字幕在线观看不卡| 欧美一区二区三区婷婷月色| 日日欢夜夜爽一区| 欧美亚日韩国产aⅴ精品中极品| 亚洲人吸女人奶水| 色哦色哦哦色天天综合|