使用旧的Rust 2015
0.0.2 |
|
---|---|
0.0.1 |
|
#10 在 #linux-networking
69KB
1K SLoC
netlink-rs
该项目旨在为netlink协议提供构建模块(参见man 7 netlink
)。
netlink协议非常庞大,但最常用的两个子协议是通用netlink协议和路由netlink协议(参见man 7 rtnetlink
)。
该项目处于早期阶段,我目前主要关注路由netlink协议。
文档
组织
netlink_socket
提供netlink套接字。与mio
和tokio
的集成是可选的。rtnetlink
提供了netlink的路由子协议类型(参见man 7 rtnetlink
)。与 Tokio 的集成是可选的。iproute2
为路由协议提供高级抽象,如iproute2
命令:它利用netlink路由协议提供对链路、地址、arp表和路由表的访问。它是完全异步的,建立在 tokio 之上。
Rust中的其他netlink项目
在开始开发这个库之前,我已经检查了其他一些项目,但似乎没有一个真正完整。
- https://github.com/achanda/netlink:netlink的Rust绑定。看起来不是很实用,而且似乎已经不再开发了。
- https://github.com/polachok/pnetlink:与本项目非常相似,但基于 libpnet 构建。作者似乎比我更了解 netlink。它还覆盖了更广泛的路由 netlink 协议(支持
RTM_{NEW,DEL,GET}ROUTE
和RTM_{NEW,DEL,GET}ADDRESS
消息)。然而,许多由rtnetlink
支持的属性并未涵盖。 - https://github.com/crhino/netlink-rs:libnl 的 rust 绑定。非常不完整且未开发。
- https://github.com/jbaublitz/neli:通用的 netlink 协议。相对较新的项目,正在积极开发。
- https://github.com/carrotsrc/rsnl:libnl 的绑定。维护中但未积极开发。
- https://github.com/TaborKelly/nl-utils:一个 netlink 数据包解析器。目标与本项目不完全相同。
其他非 Rust netlink 项目
libnl
:C 语言中的 netlink 实现。非常完整,文档很棒。pyroute2
:纯 Python 中的非常完整且可读的实现。netlink
:一个非常完整且积极维护的 Go 项目,似乎被广泛使用。
致谢
到目前为止,我主要资源是 pyroute2
和 netlink
的源代码 很多。这两个项目都很棒,写得很好。作为一个不擅长阅读 C 语言的人,以及对 netlink 了解不多的人,它们是无价之宝。
我还想赞扬 libnl
的文档。它帮助我很好地理解了协议的基础。
整个数据包解析逻辑受到了 @whitequark 优秀博客文章的启发(第 1 部分、第 2 部分 和 第 3 部分,尽管我实际上只使用了第一篇博客中描述的概念)。这些想法也被用于 @m-labs 的 smoltcp
项目中。
还要感谢 tokio 的开发者,特别是 @carllerche,他们正在构建一个惊人的工具,并提供了支持。项目结构和代码质量令人惊叹,该项目的某些部分基本上是 tokio 源代码的 复制品。
最后,感谢 Rust 社区,它在 多个场合 帮助了我。
我特别欣赏的其他资源
依赖关系
~8MB
~139K SLoC