#parser #frame #wireless #low-latency #data #communication #awdl

nightly awdl-frame-parser

AWDL数据帧和动作帧解析器

14个版本

0.3.8 2024年2月20日
0.3.7 2024年2月5日
0.3.6 2024年1月30日
0.3.1 2023年6月29日
0.1.3 2023年4月29日

#1069 in 网络编程

MIT/Apache

115KB
3K SLoC

AWDL帧解析器

AWDL(Apple Wireless Direct Link)是一种无线P2P通信协议。AWDL旨在低延迟和高带宽,同时只需要一个芯片即可同时支持AWDL和“普通”WiFi。这个解析器可以读取和写入该协议使用的网络帧。更多信息请参阅这个Stack Overflow帖子

支持

帧类型

  • 动作
    • MIF
    • PSF
  • 数据(即将推出)

TLV

  • Arpa
  • 版本
  • 同步参数
  • 信道序列
  • 选举参数
  • 选举参数 v2
  • 同步树
  • 数据路径状态
  • HT能力
  • IEEE 802.11容器
  • 服务参数
  • 服务响应

功能

解析器设计为能够在低闪存环境中运行(即ESP32、wasm)。列出的时间复杂度指的是,如果解析器运行时间随着输入长度的增加而增加。所以O(1)意味着可以继续,而O(n)意味着在解析之前要思考。O(1)解析器尚未进行基准测试。

TLV 功能 最坏情况时间复杂度
Arpa dns_sd_tlvs O(n)
服务参数 dns_sd_tlvs O(n)
服务响应 dns_sd_tlvs 最小 O(n)
信道序列 sync_elect_tlvs O(2n)
选举参数[V2] sync_elect_tlvs O(1)
同步参数 sync_elect_tlvs O(1)
同步树 sync_elect_tlvs O(n)
HT能力 data_tlvs O(1)
IEEE80211容器 data_tlvs O(n)
数据路径状态 data_tlvs O(n)
版本 version_tlv O(1)

请注意,尽管解析器尚未提供,但功能已经存在。此外,一些解析器被捆绑到一个功能中。(有关更多信息,请参阅Milan Stute的论文。)

no_std

由于作者牺牲了一部分理智,在所有地方使用迭代器,因此库不需要任何分配。分配仅用于测试,以验证报告的大小与实际情况相符。

致谢

虽然实际的解析器是我编写的,但AWDL协议的逆向工程是由Milan Stute和SeeMoo-Lab进行的。所以,向他们表示敬意...

依赖项

~1.2–1.8MB
~36K SLoC