最近在学习 Hostapd,再次梳理下 hostapd、nl80211、cfg80211、mac80211和驱动之间的调用流程。等以后有空闲了,在慢慢梳理,补充细节。
概览
本文只简述各个层之间的调用关系,不做代码详细流程说明。
- Hostapd 在 Userspace,在 src/drivers/drivers.c 中,实现了
struct wpa_driver_ops
结构,如下所示:
这组 ops 包含了 Hostapd 支持的所有操作,源码在src/drivers/driver_nl80211.c
中。
具体实现是调用到nl80211_ifindex_msg
发送消息给nl80211。
结构体为enum nl80211_commands
。在 src/drives/nl80211_copy.c
- Hostapd 发送的消息,会在
nl80211_small_ops
中找对应的函数来处理。
- 之后会调用到
mac80211_config_ops
,它在 net/mac80211/cfg.c 中实现。
5. 在之后会调用到驱动中的 ieee80211_ops
之后会把包发送到 Wi-Fi 芯片中处理,发送出去。
详细的代码调用逻辑,之后在做分析。