Chapter 4 Part 4 WPAS源码走读

1 wpa_supplicant_init_iface
static int wpa_supplicant_init_iface(struct wpa_supplicant *wpa_s,
				     const struct wpa_interface *iface)
{
	struct wpa_driver_capa capa;
	int capa_res;
	u8 dfs_domain;

	if (iface->confname) {
#ifdef CONFIG_BACKEND_FILE
//此宏表明WPAS使用的配置项信息来源于文件
		wpa_s->confname = os_rel2abs_path(iface->confname);
		if (wpa_s->confname == NULL) {
			wpa_printf(MSG_ERROR, "Failed to get absolute path "
				   "for configuration file '%s'.",
				   iface->confname);
			return -1;
		}
 #else /* CONFIG_BACKEND_FILE */
		wpa_s->confname = os_strdup(iface->confname);
#endif /* CONFIG_BACKEND_FILE */
		wpa_s->conf = wpa_config_read(wpa_s->confname, NULL);

init_iface初始化的第一个工作是解析运行时配置文件

//下面这两个函数和EAPOL状态机有关
/* RSNA Supplicant Key Management - INITIALIZE */
eapol_sm_notify_portEnabled(wpa_s->eapol, false);
eapol_sm_notify_portValid(wpa_s->eapol, false);
2 rfkill及其他背景知识

rfkill代表radio frequency(RF) connector kill switch support
它是kernel中的一个子系统,功能是控制系统中射频设备的电源(包括Wi-Fi、GPS、BT、FM)的工作以避免浪费电力
这些设备驱动只有把自己注册到rfkill子系统中后,rfkill才能对它们起作用
rfkill有软硬两种方式来禁止(block)RF设备
1.hard block
不能通过软件来重新启用RF设备,Android设备应该还没有hard block功能
2.soft block
用软件来重新启用RF设备
rfkill对用户空间提供了相应的控制接口,主要是通过/dev/rfkill设备文件来完成相关操作

一般而言,一块网络接口设备只有一个MAC地址,但现在很多设备都支持多个所谓的虚拟设备(Virtual Interface)
每一个虚拟设备都对应有一个虚拟MAC地址
下面是Wi-Fi P2P中一种名为并发设备(concurrent device)的示意图
在这里插入图片描述

位于中间的Wi-Fi设备一方面以P2P Device的身份和左下角的另一个P2P Device相连
另一方面又以STA的身份和右边的AP相连
它们工作方式不尽相同,通过虚拟设备,使P2P Device和STA分别使用不同的Virtual Interface和Virtual MAC

3 capability信息及含义

1.max_match_sets
使用计划扫描时,给驱动指定一个ssid过滤列表,只有扫描结果符合过滤列表的那些无线网络才会通知WPAS已开展后续处理
2.max_reamin_on_chan
和off-channel transmition功能有关
该功能使得Wi-Fi硬件能在某个特定信道上保持awake状态一定时间用于传输某些帧(例如Action帧)
STA实际上在另一个信道(on-channel)上和AP保持连接
某些时候,STA会转移到onChannel信道以外的其他信道以接收和处理其他STA(P2P的情况)或AP发送的帧
max_remain_on_chan用于指明STA在off-channel中工作的最长时间
3.max_stations
手机做AP使用时(无线网络接口设备的类型为NL80211_IFTYPE_AP),表示最多支持多少个STA与之关联

4 wpa_bss_init

wpa_supplicant注册了一个定时任务用于定时更新其保存的wpa_bss信息,一旦某个无线网络在一定时间内没有更新或使用,则需要从链表中把它去掉

注册一个超时任务,超时时间为 WPA_BSS_EXPIRATION_PERIOD ,值为10秒
在当前源码中没找到这个值

后面是EAP模块和EAPOL模块的解读,暂且跳过

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值