nl80211

news/2024/10/2 6:35:24

同 wpa_supplicant、hostapd 一样,nl80211 也可以管理无线网络,不同的是 wpa_supplicant 和 hostapd 是通过 nl80211 管理无线网络。

 

Linux平台上目前常用的专门针对无线网络设备编程的API有两套

  • 最早的一套API由HP公司员工Jean Tourrilhes于1997年开发,全称为Linux Wireless Extensions。一般缩写为wex或wext。这套API使得用户空间的程序能通过ioctl函数来控制无线网卡驱动。
  • 由于利用ioctl开展编程的方式不太符合Linux驱动开发的要求,所以后来Linux又提供了cfg80211和nl80211两套编程接口用于替代wext。其中,cfg80211用于驱动开发,而nl80211 API供用户空间进程使用以操作那些利用cfg80211 API开发的无线网卡驱动。

注意:ioctl不符合Linux驱动开发要求主要体现在:

  1. ioctl的原型为int ioctl(int fd, unsigned long cmd, ...),最后三个点代表它支持可变个数的参数。但对于一个经过严格定义的系统调用来说,支持可变个数参数的做法似乎显得有些随性。
  2. ioctl的参数不仅个数不固定,其参数类型也无法通过函数原型来加以说明。这同样对于一个严谨的系统调用来说,也是不可接受的。

 

相比wext,nl80211的使用难度较大,因为在nl80211框架中,用户进程和Kernel通信的手段没有使用wext中的ioctl,而是采用了netlink机制。所以,虽然nl80211.h仅是定义了一些枚举值和有限的数据结构,但其操作却比较复杂。netlink是Linux平台上一种基于socket的IPC通信机
制,它支持:

  • 用户空间进程和Kernel通信。
  • 用户空间中进程间的通信。

不过,相比其他IPC机制,netlink最常用之处还是用户空间进程和kernel模块间的通信。鉴于netlink的复杂性,开源世界提供了几个较为完备的基于netlink编程的框架,其中最著名的就是libnl。而Android也充分发扬拿来主义,在其system/core/libnl_2目录中移植并精简了libnl项目的代码,得到一个小巧的libnl_2工程。

libnl 框架如下:

以下三个库都基于其核心库libnl。

  • libnl-route:用于和Kernel中的Routing子系统交互。
  • libnl-nf:用于和Kernel中的Netfilter子系统交互。
  • libnl-genl:用于和Kernel中的Generic Netlink模块交互。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/44863.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

C++11智能指针 unique_ptr、shared_ptr、weak_ptr、循环引用、定制删除器

目录智能指针场景引入 - 为什么需要智能指针?内存泄漏什么是内存泄漏内存泄漏的危害内存泄漏分类如何避免内存泄漏智能指针的使用及原理RAII简易例程智能指针的原理智能指针的拷贝问题智能指针的发展历史std::auto_ptr模拟实现auto_ptr例程:这种方案存在的问题:Boost库中的智能…

SingletonKit单例源码阅读学习

阅读学习QFramwork中的SingletonKit源码。 Singleton 普通类的单例 作为最常用的单例模块,通过继承单例泛型类来实现,需要私有构造;//使用第一种接口单例方式internal class Class2Singleton : Singleton<Class2Singleton>{//记录被初始化的次数private static int mI…

复习加总结

Markdown学习 标题 三级标题 四级标题 字体 粗体: 俩*hello,World 斜体:一个**hello,World* 斜体加粗三个* hello,World 删除线:两个~ hello,World 引用始作俑者没有受罚,仅仅是受害者再受害一次罢了,最多也就是管理/梦境支配者的人类在人类世界的走狗棋子被带走,毫无…

HandyControl 使用内置Command 执行无效问题

HandyControl 使用内置Command 执行无效问题HandyControl 中通过查阅代码HandyControl_Shared 共享项目中,Interactivity/Commands 目录下,存在着一些内置 Command,开心发现还有关闭窗体,最小化等系统级别常用命令。 CloseWindowCommand.cs ControlCommands.cs OpenLinkCom…

UE5——GAS实现连招的一种方案

前言 最近因为在研究多人联机同步下的动作同步,在Google上很幸运搜到了一篇日本博主写的GAS编写连招的方案,于是就打算贴出来分享一下,顺便讲讲实现的心得: 【UE5】GamePlayAbilitySystemによるコンボ攻撃の実装とそれに利用する小ネタ 前編【GAS】 【UE5】GamePlayAbilit…

cuda程序优化-3.通信简介

GPU进行卡间通信/多机通信的算法简介硬件结构 CPU<->GPU: 通过PCIe进行通信 GPU<->GPU: NVLink, 通过Switch桥接器辅助访问其他卡的HBM 多机通信: InfiniBand with GPU Direct RDMA(简称GDRDMA), 需要专用网卡卡间通信-Ring AllReduce nvidia文档 1. 初始状态卡数:…

【Azure App Service】遇见az命令访问HTTPS App Service 时遇见SSL证书问题,暂时跳过证书检查的办法

SSL: CERITIFICATE_VERIFY_FAILED certificate verify failed: unable to get local issuer certificate问题描述 访问App Service的高级工具KUDU站点的URL,遇见无法访问,在通过az webapp deploy发布时候,也遇见SSL错误 (SSL: CERITIFICATE_VERIFY_FAILED certificate verif…

计算机组成原理学习 Part 2

系统总线 总线 连接各个部件的信息传输线,是各个部件共享的传输介质 结构单总线 面向 CPU 的双总线 以存储器为中心的双总线 三总线 三总线的又一形式 四总线分类片内总线:芯片内部的总线 系统总线:计算机各部件之间的信息传输线\[ \begin{cases}数据总线 & 双向 \quad…