使用旧的 Rust 2015
0.0.2 |
|
---|---|
0.0.1 |
|
#55 在 #netlink
用于 iproute2
27KB
429 代码行
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项目
致谢
到目前为止,我主要的资源是pyroute2
和netlink
的源代码,我使用了很多。这两个项目非常棒,编写得非常好。作为一个不擅长阅读C语言的人,以及不太了解netlink的人,它们是无价的。
我还想赞扬libnl
的文档。它帮助我很好地理解了协议的基本原理。
整个数据包解析逻辑受到了@whitequark出色的博客文章的启发(第1部分,第2部分和第3部分,尽管我只真正使用了第一篇博客文章中描述的概念)。这些想法也被用于@m-labs的smoltcp
项目中。
还要感谢tokio背后的团队,特别是@carllerche,他们正在构建一个惊人的工具,并提供支持。项目结构和代码质量令人惊叹,该项目的一些部分基本上是从tokio的源代码中“复制”的。
最后,感谢Rust社区,它在多个场合帮助了我。
我特别赞赏的其他资源
依赖关系
~46–790KB
~12K SLoC