9 个不稳定版本 (3 个破坏性更新)
新版本 0.4.0 | 2024年8月13日 |
---|---|
0.3.1 | 2024年7月11日 |
0.2.2 | 2024年6月22日 |
0.2.0 | 2024年4月8日 |
0.1.1 | 2024年1月25日 |
#771 在 解析器实现
每月241次下载
205KB
5K SLoC
IEEE80211-rs
IEEE80211-rs 是一个用于处理 IEEE 802.11 帧的库。它是高度实验性和不稳定的。由于架构可能会改变,因此不应在生产环境中使用。一旦发布第一个版本,就可以期待一定程度的 API 稳定性。
注意
此库目前仅由一个人开发。我会尽量频繁地添加内容,但这些通常是像 GraCe 这样主要项目的副产品,该项目启动了这个项目。我目前的重点是工作在 ESP32-Open-MAC 项目上,该项目旨在逆向工程 ESP32 的 PHY 和 MAC 层,并替换专有的 WiFi 栈。未来我希望能用 Rust 编写 WiFi 栈,该库将被用于此。如果您需要某些尚未添加的功能,请随时提交问题。如果它们不太复杂(不像 RSNE),我应该在一周内将其合并。如果您想自己实现它们,我很乐意在需要的地方提供帮助。
支持的功能
帧格式
仅支持协议版本零。这意味着目前不支持 S1G(802.11ah 或 HaLow)。
管理帧
- 关联请求/响应
- 探测请求/响应
- 信标
- ATIM
- 断开连接
- 去认证
- 动作(无确认)
控制帧
- RTS
- CTS
- 确认
数据帧
数据帧实现可以处理任何帧。
元素
- SSID
- 支持速率
- DSSS 参数集
- IBSS 参数集
- BSS 负载
- HT 能力/操作
- 扩展支持速率
- RSN
- VHT 能力/操作
- 供应商特定
- OWE 转换
内容
本节列出了由本库处理的事物的范围。
序列化和反序列化
序列化和反序列化功能是我首先开始实现的功能,也可能是库中最成熟的部分。
架构
每个帧类型都有自己的类型表示,例如 BeaconFrame
,并且可以通过 scroll 来读取和写入。如果以这种方式使用,确保读取正确的帧类型是用户的责任。如果您必须处理多个帧类型,可以使用 match_frames!
宏来处理不同的帧类型。
优化
该库可以从 Profile-Guide-Optimization(PGO) 中受益匪浅,可以通过 cargo-pgo 来使用。有关详细信息,请参阅 问题,由 zamazan4jk 提出,非常感谢他。
其他库
no_std 和 zerocopy
此库不需要分配,也不会复制数据。它设计用于在嵌入式设备上使用。
不安全代码
在此库中使用不安全代码是禁止的。
贡献
很高兴看到您想贡献!首先,您应该检查是否有人正在处理它。如果没有,请fork仓库并创建一个草稿PR。这样,其他人可以看到有人在处理该功能。一旦您认为您的代码准备好合并,请移除草稿状态,我们将对其进行审查。
指南
每一行代码都应该经过测试。在撰写本文(2024年4月)时,并非每个结构都符合这一标准,但我们正在努力实现。对于读写测试,有一些宏可以自动生成这些测试。对于其他所有内容,您应该测试每个函数的预期输出。
您应该尝试在实际中使用自己的代码,因为这是真正测试它的唯一方法。例如,您可以构建一个嗅探器,让您的代码处理真实世界的数据。
访问 IEEE 802.11
IEEE 802.11 由 IEEE 版权所有,因此我们无法公开发布。但是,您可以通过 IEEE 的 GET 程序免费获取该标准的副本。这需要一个免费账户,并且只能让您访问目前有效的标准,这些标准比六个月旧。这意味着我们可能在2025年夏季中期就能实现IEEE 802.11be相关功能,因为预计它将在2024年第四季度获得批准。
许可证
您可以选择此库使用 MIT 或 Apache-2.0 许可证。
依赖关系
~1.6–2.3MB
~46K SLoC