转zz:cfg80211的kernel架构(基于Linux 3.08)之sta
来源:互联网 发布:mac推荐网址下载软件 编辑:程序博客网 时间:2024/06/06 12:35
1, 大致框架
2, 几个主要流程
a) malloc & init(softmac)
内存分布
struct wiphy
struct ieee80211_local
Driver private class
结构体关系
初始化顺序
- module_init,注册xxxx_driver_ops
- xxxx_probe,各种资源初始化。
- ieee80211_alloc_hw,两个参数分别为mac80211_config_ops和private class的size
- wiphy_new分配整块内存,wiphy_new里面初始化cfg80211_registered_device的一些成员
- 初始化ieee80211_local各个成员,并将wiphy.priv指向ieee80211_local
- ieee80211_local偏移到末尾,指针指向private class,并且保留在ieee80211_local.hw.priv
- 初始化private class
- ieee80211_register_hw,实现mac80211硬件的注册
- wiphy_register添加dev(device_add),以及一些sanity检测
- 并且初始化channel,iface以及wep等。
- 调用ieee80211_if_add添加一个wlan0,类型为sta的net_device,并且给该net_device分配一块私有数据区:ieee80211_sub_if_data,已经实现了一套net_device_ops
b) beacon frame
接收流程
对于管理帧,通常是ieee80211_rx_handlers调用ieee80211_rx_h_mgmt,然后用wq的方式调用ieee80211_iface_work进一步调用ieee80211_sta_rx_queued_mgmt去处理。
beacon响应流程
TIM IE:
E-id | length | DTIM count | DTIM period | Bitmap control | PVM(1-256byte)
remain to investigate:
how passive scan is implemented by beacon?c) scan
d) auth and associate
wpa_s->drv_flags & WPA_DRIVER_FLAGS_SME- true): sme_authenticate->wpa_driver_nl80211_authenticate...->cfg80211_mlme_auth
- false): wpa_drv_associate->wpa_driver_nl80211_connect...->cfg80211_mlme_auth
assoc成功之后会调用driver的set_key函数update key, 一般是放到wifi芯片某个管脚对应的缓存区域,从而实现硬件加密(与xmit skb缓存区进行与或,eg)。
具体函数栈流程如下:
点击(此处)折叠或打开
- nl80211_connect
- cfg80211_connect(after scan and have bbs)
- cfg80211_conn_do_work
- __cfg80211_mlme_auth
- rdev->ops->auth(&rdev->wiphy, dev, &req);
- CallBack by rx irq:
- ieee80211_rx_irqsafe
- ieee80211_tasklet_handler
- ieee80211_rx
- __ieee80211_rx_handle_packet
- ieee80211_prepare_and_rx_handle
- ieee80211_invoke_rx_handlers
- ieee80211_rx_handlers
- ieee80211_rx_h_mgmt
- Queuework:
- ieee80211_iface_work(iface.c)
- ieee80211_sta_rx_queued_mgmt
- ieee80211_rx_mgmt_auth
- cfg80211_send_rx_auth
- nl80211_send_rx_auth(告诉用户空间)
- cfg80211_sme_rx_auth
- schedule_work(&rdev->conn_work)
- Queuework:
- cfg80211_conn_work
- __cfg80211_mlme_assoc
- rdev->ops->assoc
- CallBack by rx irq
- ....
- ieee80211_sta_rx_queued_mgmt
- ieee80211_rx_mgmt_assoc_resp
- ieee80211_assoc_success
- ieee80211_sta_rx_notify
- 通过timer定时触发 ieee80211_mgd_probe_ap_send
- 发送nullfunction或者probe_req
- cfg80211_send_rx_assoc
- nl80211_send_rx_assoc(告诉用户空间)
- __cfg80211_connect_result
- nl80211_send_connect_result
- cfg80211_upload_connect_keys
- rdev->ops->add_key
e) rx/tx data
rx:
xmit:
e) csa
1)beacon 2)action帧没连上,正在scan,不用管
手头有任务,先把手头任务做完,然后断开连接
手头没任务,调用driver的channel_switch(回调实现后面的改chan值)或者hw_config函数,然后把local的chan值改一下
f) missing
some details: off channel,
3, wifi driver部分之bcmdhd
a) init(施工ing)b) fireware load(施工ing)
原文地址:http://blog.chinaunix.net/uid-27167114-id-3783603.html
0 0
- 转zz:cfg80211的kernel架构(基于Linux 3.08)之sta
- cfg80211的kernel架构(基于Linux 3.08)之sta
- cfg80211的kernel架构(基于Linux 3.08)之sta
- cfg80211的kernel架构(基于Linux 3.08)之sta
- cfg80211的kernel架构(基于Linux 3.08)之sta
- cfg80211的kernel架构(基于Linux 3.08)之sta
- cfg80211的kernel架构(基于Linux 3.08)之sta 201
- Linux kernel中有趣的语法[zz]
- 基于arm的fast models的架构仿真和linux kernel 开发
- 【zz】linux kernel boot arguments
- ZZ: linux新增system call(for kernel 2.6)
- Linux kernel内核架构的理解
- (zz)嵌入式linux调试(bootloader && kernel)
- Uart 架构之美 -- Linux Kernel 实现浅析
- Interrupt 架构之美 -- Linux Kernel 实现欣赏
- 揭开Linux的Swap之谜 zz
- 【系统架构】浅谈Facebook的服务器架构(组图)(ZZ)
- Linux kernel的中断子系统之(一):综述
- java学习笔记——黑马笔记集中提交
- 浅谈C++中的四种类型转换
- 蓝桥杯 5位黑洞数
- C++中的namespace //命名空间
- SDWebImage网络加载图片缓存
- 转zz:cfg80211的kernel架构(基于Linux 3.08)之sta
- 为什么使用Hive?Hive提供了什么?Hive支持哪些用户?
- android 设置透明度
- android AlarmManager详解,Alarm的设定和取消。
- C++第九题20150327
- javaEE01,后台传出字符串数据
- 初步窥探android线程间通讯:Handler, Looper, MessageQueue的使用方法
- 程序猿的感悟:做人应该不知足
- static class 静态类(Java)