qca wlan wifi modules 解析四

qca wlan wifi modules 解析四WiFi驱动架构的一般层次为:应用层BSDsocket层TCP/IP协议层IP层网络设备层net/coremac8011层/ieee80211设备驱动层具体实例如下图:上层应用程序简历socket,对网络接口进行ioctl操作,正是通过触发,网络设备和80211层,调用底层驱动函数来实现的。qcawlanmodules中,通过创建虚拟AP来实现WiFi功能,即VAP…

大家好,又见面了,我是你们的朋友全栈君。

WiFi驱动架构的一般层次为:

  • 应用层
  • BSD socket层
  • TCP/IP协议层
  • IP层
  • 网络设备层net/core
  • mac8011层/ieee80211
  • 设备驱动层

具体实例如下图:

上层应用程序简历socket,对网络接口进行ioctl操作,正是通过触发,网络设备和80211层,调用底层驱动函数来实现的。

qca wlan modules中,通过创建虚拟AP来实现WiFi功能,即VAP: 创建VAP的命令如下:

wlanconfig ath0 create wlandev wifi0 wlanmode ap
复制代码

VAP网络接口是通过wifi radio网络接口的ioctl SIOC80211IFCREATE来创建的,VAP接口是wifi设备接口的子接口。

VAP创建调用了net_device中ioctl,在qca wlan modules中,__ath_attach 中attach了ioctl的操作:

dev->do_ioctl = ath_ioctl;
复制代码

ath_ioctl中,转入cmd:SIOC80211IFCREATE中执行创建:

case SIOC80211IFCREATE:
	{
       	    struct ieee80211_clone_params cp;
            if (scn->sc_in_delete) {
                printk("%s: Can't create VAP, in detach\n", __func__);
                return -ENODEV;
            }
            if (__xcopy_from_user(&cp, ifr->ifr_data, sizeof(cp))) {
       	        return -EFAULT;
            }	
            error = osif_ioctl_create_vap(dev, ifr, cp, scn->sc_osdev);
	}
        break;
复制代码

osif_ioctl_create_vap()调用alloc_netdev(),

dev = alloc_netdev(sizeof(osif_dev), name, ether_setup);
    if(dev == NULL) {
        adf_net_delete_wlanunit(unit);
        return EIO;
    }
复制代码

alloc_netdev()函数生成一个net_device结构体,对其成员赋值并返回该结构体的指针。第一个参数是设备私有成员的大小,第二个参数为设备名,第三个参数为net_devicesetup()函数指针。setup()函数接收的参数为struct net_device指针,用于预置net_device成员的值。

然后wlan_vap_create()函数根据创建wifi的模式来创建接口:

vap = wlan_vap_create(devhandle, cp.icp_opmode, scan_priority_mapping_base, cp.icp_flags, cp.icp_bssid, cp.icp_mataddr);
复制代码

wlan_vap_create()函数中实际调用的是attach关联的函数ath_vap_create(), 既ath_attach中的:

ic->ic_vap_create = ath_vap_create;  
复制代码

ath_vap_create()中设置一些列wifi参数

  • ieee80211_vap_setup
  • ieee80211vap_set_macaddr
  • ieee80211_vap_attach

底层的VAP创建,调用了osif_vap_setup()

osif_ioctl_create_vap()最后在实现网络接口的注册:

register_netdevice(dev)
复制代码

调用关系如下图:

VAR的删除操作,也通过wifi网络接口的ioctl来实现的,SIOC80211IFDESTROY

调用关系如下图:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/157548.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 设计模式之代理模式、适配器模式和外观模式

    编写基于另一组类的包装器接口是一项常见的API设计任务,例如,你的工作可能是维护一个大型的遗留代码库,相比重构所有代码,你更愿意审计一个新的,更简洁的API,以隐藏所有的底层遗留代码;或者你可能已经

    2021年12月19日
    52
  • BCG界面库_没有应用界面的软件怎么打开

    BCG界面库_没有应用界面的软件怎么打开m_bSaveState=FALSE; //禁止BCG写注册表CleanState(); //清除界面保存在注册表的状态

    2022年10月8日
    3
  • 通讯加密方式?「建议收藏」

    通讯加密方式?「建议收藏」客户端信道处理ProcessMessage1加密通讯 初始唯一标识和加密提供程序 向服务器请求密钥并根据响应的密钥初始化加密提供程序(服务端需验证IP合法性) 根据加密提供程序加密请求消息 向服务器发起请求 根据加密提供程序解密响应流。 返回。2非加密通讯 初始唯一标识和加密提供程序 向服务器请求密钥并根据响应的密钥初始化加密提供程序(服务端需验证IP合法性) 向服务器发起请求 返回…

    2022年5月2日
    62
  • linux定时器编程实验报告,Linux定时器实验.doc[通俗易懂]

    linux定时器编程实验报告,Linux定时器实验.doc[通俗易懂]Linux定时器实验Linux第六次实验及分析报告实验要求:1)在用户态编写一个程序,该程序设定一个定时器,在时间到期的时候做出某种可观察的响应(方法不限)2)分析你的程序的实际执行借助了内核的哪些机制3)提交实验与分析报告一:在用户态编写一个程序,该程序设定一个定时器,在时间到期的时候做出某种可观察的响应(方法不限)G++进行编译运行结果如下:可见调用间隔定时器定时10秒成功!二:分析你的程序的…

    2022年7月26日
    8
  • SQL Server 2014聚集列存储索引

    SQL Server 2014聚集列存储索引

    2022年3月13日
    41
  • 京东数据库泄露事件分析报告_某网站的用户数据库泄露

    京东数据库泄露事件分析报告_某网站的用户数据库泄露猪猪侠·2014/03/0112:020×00背景昨天一张截图在QQ群里疯传,并说京东数据库泄露,里面有钱的尽快转。有人问“我挨个试了一下,只有3个可以正常登陆,而且网上也并没有完整的数据库流出,所以我妄猜是否是支付宝或者是其他竞争对手的营销手段?”这件事件到底是真的假的呢?经过我的研究,京东的数据库没有被脱裤,只是无聊黑客的恶作剧,他们通过收集互联网已泄露的用户+密码信息,生成对应的字典…

    2022年9月19日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号