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

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

?? sta_info.c

?? hostapd無線AP工具
?? C
字號:
/* * Host AP (software wireless LAN access point) user space daemon for * Host AP kernel driver / Station table * Copyright (c) 2002-2004, Jouni Malinen <jkmaline@cc.hut.fi> * * 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. * * Alternatively, this software may be distributed under the terms of BSD * license. * * See README and COPYING for more details. */#include <stdlib.h>#include <stdio.h>#include <string.h>#include <netinet/in.h>#include <sys/types.h>#include <sys/socket.h>#include "hostapd.h"#include "sta_info.h"#include "eloop.h"#include "accounting.h"#include "ieee802_1x.h"#include "ieee802_11.h"#include "radius.h"#include "eapol_sm.h"#include "wpa.h"#include "radius_client.h"#include "driver.h"int ap_for_each_sta(struct hostapd_data *hapd,		    int (*cb)(struct hostapd_data *hapd, struct sta_info *sta,			      void *ctx),		    void *ctx){	struct sta_info *sta;	for (sta = hapd->sta_list; sta; sta = sta->next) {		if (cb(hapd, sta, ctx))			return 1;	}	return 0;}struct sta_info * ap_get_sta(struct hostapd_data *hapd, const u8 *sta){	struct sta_info *s;	s = hapd->sta_hash[STA_HASH(sta)];	while (s != NULL && memcmp(s->addr, sta, 6) != 0)		s = s->hnext;	return s;}static void ap_sta_list_del(hostapd *hapd, struct sta_info *sta){	struct sta_info *tmp;	if (hapd->sta_list == sta) {		hapd->sta_list = sta->next;		return;	}	tmp = hapd->sta_list;	while (tmp != NULL && tmp->next != sta)		tmp = tmp->next;	if (tmp == NULL) {		printf("Could not remove STA " MACSTR " from list.\n",		       MAC2STR(sta->addr));	} else		tmp->next = sta->next;}void ap_sta_hash_add(hostapd *hapd, struct sta_info *sta){	sta->hnext = hapd->sta_hash[STA_HASH(sta->addr)];	hapd->sta_hash[STA_HASH(sta->addr)] = sta;}static void ap_sta_hash_del(hostapd *hapd, struct sta_info *sta){	struct sta_info *s;	s = hapd->sta_hash[STA_HASH(sta->addr)];	if (s == NULL) return;	if (memcmp(s->addr, sta->addr, 6) == 0) {		hapd->sta_hash[STA_HASH(sta->addr)] = s->hnext;		return;	}	while (s->hnext != NULL && memcmp(s->hnext->addr, sta->addr, 6) != 0)		s = s->hnext;	if (s->hnext != NULL)		s->hnext = s->hnext->hnext;	else		printf("AP: could not remove STA " MACSTR " from hash table\n",		       MAC2STR(sta->addr));}void ap_free_sta(hostapd *hapd, struct sta_info *sta){	accounting_sta_stop(hapd, sta);	if (!(sta->flags & WLAN_STA_PREAUTH))		hostapd_sta_remove(hapd, sta->addr);	ap_sta_hash_del(hapd, sta);	ap_sta_list_del(hapd, sta);	if (sta->aid > 0)		hapd->sta_aid[sta->aid - 1] = NULL;	hapd->num_sta--;	eloop_cancel_timeout(ap_handle_timer, hapd, sta);	ieee802_1x_free_station(sta);	wpa_free_station(sta);	radius_client_flush_auth(hapd->radius, sta->addr);	if (sta->last_assoc_req)		free(sta->last_assoc_req);	free(sta->challenge);	free(sta->wpa_ie);	free(sta);}void hostapd_free_stas(hostapd *hapd){	struct sta_info *sta, *prev;	sta = hapd->sta_list;	while (sta) {		prev = sta;		sta = sta->next;		printf("Removing station " MACSTR "\n", MAC2STR(prev->addr));		ap_free_sta(hapd, prev);	}}void ap_handle_timer(void *eloop_ctx, void *timeout_ctx){	hostapd *hapd = eloop_ctx;	struct sta_info *sta = timeout_ctx;	unsigned long next_time = 0;	if (sta->timeout_next == STA_REMOVE) {		hostapd_logger(hapd, sta->addr, HOSTAPD_MODULE_IEEE80211,			       HOSTAPD_LEVEL_INFO, "deauthenticated due to "			       "local deauth request");		ap_free_sta(hapd, sta);		return;	}	if ((sta->flags & WLAN_STA_ASSOC) &&	    (sta->timeout_next == STA_NULLFUNC ||	     sta->timeout_next == STA_DISASSOC)) {		int inactive_sec;		HOSTAPD_DEBUG(HOSTAPD_DEBUG_MINIMAL,			      "Checking STA " MACSTR " inactivity:\n",			      MAC2STR(sta->addr));		inactive_sec = hostapd_get_inact_sec(hapd, sta->addr);		if (inactive_sec == -1) {			printf("  Could not get station info from kernel "			       "driver for " MACSTR ".\n",			       MAC2STR(sta->addr));		} else if (inactive_sec < AP_MAX_INACTIVITY &&			   sta->flags & WLAN_STA_ASSOC) {			/* station activity detected; reset timeout state */			HOSTAPD_DEBUG(HOSTAPD_DEBUG_MINIMAL,				      "  Station has been active\n");			sta->timeout_next = STA_NULLFUNC;			next_time = AP_MAX_INACTIVITY - inactive_sec;		}	}	if ((sta->flags & WLAN_STA_ASSOC) &&	    sta->timeout_next == STA_DISASSOC &&	    !(sta->flags & WLAN_STA_PENDING_POLL)) {		HOSTAPD_DEBUG(HOSTAPD_DEBUG_MINIMAL,			      "  Station has ACKed data poll\n");		/* data nullfunc frame poll did not produce TX errors; assume		 * station ACKed it */		sta->timeout_next = STA_NULLFUNC;		next_time = AP_MAX_INACTIVITY;	}	if (next_time) {		eloop_register_timeout(next_time, 0, ap_handle_timer, hapd,				       sta);		return;	}	if (sta->timeout_next == STA_NULLFUNC &&	    (sta->flags & WLAN_STA_ASSOC)) {		/* send data frame to poll STA and check whether this frame		 * is ACKed */		struct ieee80211_hdr hdr;		HOSTAPD_DEBUG(HOSTAPD_DEBUG_MINIMAL,			      "  Polling STA with data frame\n");		sta->flags |= WLAN_STA_PENDING_POLL;		/* FIX: WLAN_FC_STYPE_NULLFUNC would be more appropriate, but		 * it is apparently not retried so TX Exc events are not		 * received for it */		memset(&hdr, 0, sizeof(hdr));		hdr.frame_control =			IEEE80211_FC(WLAN_FC_TYPE_DATA, WLAN_FC_STYPE_DATA);		hdr.frame_control |= host_to_le16(BIT(1));		hdr.frame_control |= host_to_le16(WLAN_FC_FROMDS);		memcpy(hdr.IEEE80211_DA_FROMDS, sta->addr, ETH_ALEN);		memcpy(hdr.IEEE80211_BSSID_FROMDS, hapd->own_addr, ETH_ALEN);		memcpy(hdr.IEEE80211_SA_FROMDS, hapd->own_addr, ETH_ALEN);		if (hostapd_send_mgmt_frame(hapd, &hdr, sizeof(hdr), 0) < 0)			perror("ap_handle_timer: send");	} else if (sta->timeout_next != STA_REMOVE) {		int deauth = sta->timeout_next == STA_DEAUTH;		printf("  Sending %s info to STA " MACSTR "\n",		       deauth ? "deauthentication" : "disassociation",		       MAC2STR(sta->addr));		if (deauth) {			hostapd_sta_deauth(hapd, sta->addr,					   WLAN_REASON_PREV_AUTH_NOT_VALID);		} else {			hostapd_sta_disassoc(				hapd, sta->addr,				WLAN_REASON_DISASSOC_DUE_TO_INACTIVITY);		}	}	switch (sta->timeout_next) {	case STA_NULLFUNC:		sta->timeout_next = STA_DISASSOC;		eloop_register_timeout(AP_DISASSOC_DELAY, 0, ap_handle_timer,				       hapd, sta);		break;	case STA_DISASSOC:		sta->flags &= ~WLAN_STA_ASSOC;		ieee802_1x_set_port_enabled(hapd, sta, 0);		if (!sta->acct_terminate_cause)			sta->acct_terminate_cause =				RADIUS_ACCT_TERMINATE_CAUSE_IDLE_TIMEOUT;		accounting_sta_stop(hapd, sta);		ieee802_1x_free_station(sta);		hostapd_logger(hapd, sta->addr, HOSTAPD_MODULE_IEEE80211,			       HOSTAPD_LEVEL_INFO, "disassociated due to "			       "inactivity");		sta->timeout_next = STA_DEAUTH;		eloop_register_timeout(AP_DEAUTH_DELAY, 0, ap_handle_timer,				       hapd, sta);		break;	case STA_DEAUTH:	case STA_REMOVE:		hostapd_logger(hapd, sta->addr, HOSTAPD_MODULE_IEEE80211,			       HOSTAPD_LEVEL_INFO, "deauthenticated due to "			       "inactivity");		if (!sta->acct_terminate_cause)			sta->acct_terminate_cause =				RADIUS_ACCT_TERMINATE_CAUSE_IDLE_TIMEOUT;		ap_free_sta(hapd, sta);		break;	}}void ap_handle_session_timer(void *eloop_ctx, void *timeout_ctx){	hostapd *hapd = eloop_ctx;	struct sta_info *sta = timeout_ctx;	if (!(sta->flags & WLAN_STA_AUTH))		return;	hostapd_sta_deauth(hapd, sta->addr, WLAN_REASON_PREV_AUTH_NOT_VALID);	hostapd_logger(hapd, sta->addr, HOSTAPD_MODULE_IEEE80211,		       HOSTAPD_LEVEL_INFO, "deauthenticated due to "		       "session timeout");	sta->acct_terminate_cause =		RADIUS_ACCT_TERMINATE_CAUSE_SESSION_TIMEOUT;	ap_free_sta(hapd, sta);}void ap_sta_session_timeout(hostapd *hapd, struct sta_info *sta,			    u32 session_timeout){	hostapd_logger(hapd, sta->addr, HOSTAPD_MODULE_IEEE80211,		       HOSTAPD_LEVEL_DEBUG, "setting session timeout to %d "		       "seconds", session_timeout);	eloop_cancel_timeout(ap_handle_session_timer, hapd, sta);	eloop_register_timeout(session_timeout, 0, ap_handle_session_timer,			       hapd, sta);}void ap_sta_no_session_timeout(hostapd *hapd, struct sta_info *sta){	eloop_cancel_timeout(ap_handle_session_timer, hapd, sta);}struct sta_info * ap_sta_add(struct hostapd_data *hapd, const u8 *addr){	struct sta_info *sta;	sta = ap_get_sta(hapd, addr);	if (sta)		return sta;	HOSTAPD_DEBUG(HOSTAPD_DEBUG_MINIMAL, "  New STA\n");	if (hapd->num_sta >= MAX_STA_COUNT) {		/* FIX: might try to remove some old STAs first? */		printf("  no more room for new STAs (%d/%d)\n",		       hapd->num_sta, MAX_STA_COUNT);		return NULL;	}	sta = (struct sta_info *) malloc(sizeof(struct sta_info));	if (sta == NULL) {		printf("  malloc failed\n");		return NULL;	}	memset(sta, 0, sizeof(struct sta_info));	sta->acct_interim_interval = hapd->conf->radius->acct_interim_interval;	/* initialize STA info data */	eloop_register_timeout(AP_MAX_INACTIVITY, 0, ap_handle_timer,			       hapd, sta);	memcpy(sta->addr, addr, ETH_ALEN);	sta->next = hapd->sta_list;	hapd->sta_list = sta;	hapd->num_sta++;	ap_sta_hash_add(hapd, sta);	return sta;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一三区三区四区免费在线看| 麻豆一区二区在线| 午夜精品视频一区| 天天av天天翘天天综合网 | 一区二区三区精品视频| 亚洲第一福利视频在线| 日产国产高清一区二区三区| 日日骚欧美日韩| 经典一区二区三区| 风间由美中文字幕在线看视频国产欧美| 成人短视频下载| 色老汉一区二区三区| av在线不卡免费看| 国产九色sp调教91| 久久精品国产精品亚洲红杏| 91视频国产资源| av电影在线不卡| 在线亚洲精品福利网址导航| 欧美精品久久一区| 精品sm捆绑视频| 国产精品久久久久久久久久免费看 | 日韩精品综合一本久道在线视频| 欧美一区二区三区小说| 精品国产91亚洲一区二区三区婷婷| 久久久久久久久免费| 中文字幕制服丝袜成人av| 午夜精品福利一区二区蜜股av| 精品一区二区精品| 国产成人综合在线观看| 色老汉一区二区三区| 日韩美一区二区三区| 亚洲色图视频网站| 婷婷综合另类小说色区| 亚洲综合色视频| 粉嫩绯色av一区二区在线观看| 欧美亚洲一区二区在线| 国产欧美精品一区二区色综合朱莉| 亚洲成在线观看| 国产成人99久久亚洲综合精品| 制服丝袜激情欧洲亚洲| 欧美国产日韩在线观看| 蜜臀精品一区二区三区在线观看 | 日本一区二区三区四区 | 一本色道a无线码一区v| 精品国精品国产| 亚洲电影你懂得| 91污在线观看| 久久综合给合久久狠狠狠97色69| 天天操天天干天天综合网| 成人av集中营| 欧美变态tickle挠乳网站| 无码av免费一区二区三区试看 | 2024国产精品视频| 免费成人av在线播放| 色综合视频在线观看| 欧美成人伊人久久综合网| 亚洲高清不卡在线观看| av亚洲精华国产精华精华 | 国产精品久久影院| 久久福利资源站| 欧美在线观看视频一区二区| 国产免费观看久久| 亚洲精品乱码久久久久久久久 | 国产99久久久国产精品潘金网站| 欧美videos大乳护士334| 手机精品视频在线观看| 欧美三级韩国三级日本一级| 亚洲图片欧美综合| 欧美性高清videossexo| 国产乱人伦偷精品视频免下载| a级精品国产片在线观看| 日韩欧美123| 日韩avvvv在线播放| 欧美日韩黄视频| 亚洲综合另类小说| 91色|porny| 亚洲免费三区一区二区| 91香蕉视频污| 亚洲一区影音先锋| 色狠狠桃花综合| 亚洲另类春色国产| 欧美亚洲免费在线一区| 亚洲精品国产第一综合99久久 | 国产性做久久久久久| 经典三级一区二区| 久久精品人人做人人综合| 国产综合成人久久大片91| 精品国内二区三区| 国产伦精品一区二区三区视频青涩| 日韩视频不卡中文| 国产成人综合在线观看| 国产区在线观看成人精品| 国产成人精品午夜视频免费| 中文字幕国产一区| 成人精品免费网站| 亚洲男人的天堂av| 欧美性受极品xxxx喷水| 香蕉影视欧美成人| 欧美性极品少妇| 一区二区三区不卡视频 | 老司机精品视频在线| 精品福利在线导航| 欧美色倩网站大全免费| 成熟亚洲日本毛茸茸凸凹| 一区二区三区成人在线视频| 亚洲精品乱码久久久久久黑人 | 成人综合婷婷国产精品久久蜜臀| 欧美成人一区二区| 国产精品系列在线| 亚洲国产综合人成综合网站| 国产99久久久国产精品潘金网站| 欧美专区亚洲专区| 亚洲成av人片在线观看| 日本一区二区三区在线观看| 国产一级精品在线| 久久天天做天天爱综合色| 天天av天天翘天天综合网色鬼国产| 欧美zozo另类异族| 88在线观看91蜜桃国自产| 色综合天天做天天爱| 成人午夜免费电影| 日韩一卡二卡三卡| 国产精品一二三在| 狠狠色综合日日| 久久99久久99| 成人中文字幕合集| 看电视剧不卡顿的网站| 视频一区中文字幕国产| 亚洲综合成人在线视频| 亚洲精品福利视频网站| 中文字幕视频一区| 国产日本欧洲亚洲| 亚洲最大的成人av| 亚洲精品国产品国语在线app| 日韩伦理av电影| 欧美精品一二三区| 欧美精品18+| 日韩色在线观看| 国产精品久久久久久久岛一牛影视| 欧美一区二区网站| 9191精品国产综合久久久久久| 91国偷自产一区二区三区观看| 欧美高清视频一二三区 | 欧美精品日日鲁夜夜添| 欧美精品tushy高清| 91久久精品午夜一区二区| 日韩三级精品电影久久久| 一区二区三区四区在线免费观看 | 中文字幕va一区二区三区| 激情五月婷婷综合网| 国产美女精品人人做人人爽| 国产999精品久久久久久| 91在线观看免费视频| 欧美一区二区三区四区视频| 欧美一区二区三区成人| 天天色天天操综合| 综合久久国产九一剧情麻豆| 欧美一区二区三区视频免费| 91极品美女在线| 中文字幕制服丝袜一区二区三区 | 国精产品一区一区三区mba视频| 在线观看视频91| 日韩精品国产欧美| 久久精品人人爽人人爽| 不卡电影免费在线播放一区| 久久亚洲精品小早川怜子| 亚洲伦理在线免费看| 国产成人在线视频播放| 2020国产精品| 91在线丨porny丨国产| 国产精品伦一区二区三级视频| 国产精品一区在线观看乱码 | 免费观看日韩av| 欧美成人vps| 成人免费毛片片v| 亚洲啪啪综合av一区二区三区| 韩国av一区二区| 亚洲一区二区三区不卡国产欧美| 91.成人天堂一区| 免费观看成人鲁鲁鲁鲁鲁视频| 国产精品对白交换视频 | 久热成人在线视频| 6080亚洲精品一区二区| 国产宾馆实践打屁股91| 亚洲日韩欧美一区二区在线| 欧美性生交片4| 亚洲一区二区在线播放相泽| 在线不卡的av| 国产成人午夜精品影院观看视频 | 中文在线资源观看网站视频免费不卡 | 日韩精品一区二区三区中文不卡| 亚洲午夜精品久久久久久久久| 在线一区二区三区| 国产一区二区三区最好精华液 | 国产91精品精华液一区二区三区| 午夜久久久久久久久久一区二区| 欧美精品在线视频| 国产精品一区专区| 三级影片在线观看欧美日韩一区二区| 欧美成人三级在线|