目录
1,什么是cfg80211?wiphy又是什么?
cfg80211:用于对无线设备进行配置管理。cfg80211&nl80211基于消息机制,使用netlink接口。
wiphy:无线网络设备驱动使用cfg80211需要硬件设备在cfg80211中实现注册。实现注册就要定义一系列的硬件功能描述的结构体。每个设备的基础性结构体是wiphy,设备连接到系统是,都要使用。每个wiphy有0个,1个或者许多个虚拟接口相关联。
2,cfg80211工作流程是什么?
static int __init cfg80211_init(void)
{
//注册网络命名空间
register_pernet_device(&cfg80211_pernet_ops);
//注册ieee80211_class类
wiphy_sysfs_init();
//将class注册到内核中,同时会在/sys/class/下创建class对应的节点
--->class_register(&ieee80211_class);
//注册网络通知,以接收网络事件,以通知链的方式
register_netdevice_notifier(&cfg80211_netdev_notifier);
//注册netlink“nl80211”,其操作为nl80211_ops
nl80211_init();
--->genl_register_family(&nl80211_fam);
//在netlink_register链上注册一个回调函数,notifier机制是子系统之间通信手段,
//netlink_register链上的子系统会检测用户态socket的连接状况
//如果发生改变则通知运行回调函数
--->netlink_register_notifier(&nl80211_netlink_notifier);
//创建sys/class/ieee80211目录
ieee80211_debugfs_dir = debugfs_create_dir("ieee80211", NULL);
regulatory_init();
//创建名为“cfg80211”的内核线程
cfg80211_wq = alloc_ordered_workqueue("cfg80211", WQ_MEM_RECLAIM);
}
3,cfg80211如何通过netlink与iw进行交互?
nl80211_init()之后,通过nl80211_ops结构体实现与CMD关联,如iw发送消息NL80211_CMD_GET_POWER_SAVE,cfg80211就执行nl80211_get_power_save()来进行下一步操作。
//关键结构体
static __genl_const struct genl_ops nl80211_ops[] = {
{
.cmd = NL80211_CMD_GET_WIPHY,
.doit = nl80211_get_wiphy,
.dumpit = nl80211_dump_wiphy,
.done = nl80211_dump_wiphy_done,
.policy = nl80211_policy,
/* can be retrieved by unprivileged users */
.internal_flags = NL80211_FLAG_NEED_WIPHY |
NL80211_FLAG_NEED_RTNL,
},
...
...
{
.cmd = NL80211_CMD_ABORT_SCAN,
cfg80211与mac80211交互解析

本文详细介绍了Linux无线网络堆栈中cfg80211模块的功能与工作流程,解释了cfg80211如何通过netlink与iw交互,以及它与mac80211之间的交互机制。cfg80211负责无线设备的配置管理,而mac80211则处理MAC层功能。两者通过cfg80211_ops结构体进行通信,实现了从用户空间到无线设备的指令传递。
最低0.47元/天 解锁文章
1363

被折叠的 条评论
为什么被折叠?



