【WiFi】cfg80211的kernel架构(基于Linux 3.08)

目录

 1.框架

2.主要流程 

2.1.malloc & init(softmac)

2.1.3 内存分配

2.2. 结构体关系

2.3.初始化顺序

2.4.beacon frame

2.4.1.接收流程

2.4.2.beacon响应流程

2.5.scan 

2.6.auth and associate 

2.7. rx/tx data

2.7.1.rx

2.7.2.xmit

2.8.csa

2.9.missing

3.wifi driver部分之bcmdhd


 1.框架

2.主要流程 

2.1.malloc & init(softmac)

2.1.3 内存分配

struct wiphy

struct ieee80211_local

Driver private class

2.2. 结构体关系

2.3.初始化顺序

  • module_init,注册xxxx_driver_ops
  • xxxx_probe,各种资源初始化。
  • ieee80211_alloc_hw,两个参数分别为mac80211_config_ops和private class的siz
  • 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

2.4.beacon frame

2.4.1.接收流程

        对于管理帧,通常是ieee80211_rx_handlers调用ieee80211_rx_h_mgmt,然后用wq的方式调用ieee80211_iface_work进一步调用ieee80211_sta_rx_queued_mgmt去处理。

2.4.2.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?

2.5.scan 

2.6.auth and associate 

wpa_s->drv_flags & WPA_DRIVER_FLAGS_SME

  1. true): sme_authenticate->wpa_driver_nl80211_authenticate...->cfg80211_mlme_auth
  2. 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

2.7. rx/tx data

2.7.1.rx

2.7.2.xmit

2.8.csa

1)beacon 2)action帧
没连上,正在scan,不用管
手头有任务,先把手头任务做完,然后断开连接
手头没任务,调用driver的channel_switch(回调实现后面的改chan值)或者hw_config函数,然后把local的chan值改一下
 

2.9.missing

some details: off channel,

3.wifi driver部分之bcmdhd

a) init
b) fireware load

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

smartvxworks

创造不易,感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值