使用旧Rust 2015
0.0.1 |
|
---|
#57 in #netlink
33KB
756 行
netlink-rs
本项目旨在为netlink协议提供构建块(参见man 7 netlink
)。
netlink协议非常庞大,但最广泛使用的两个子协议是通用netlink协议和路由netlink协议(参见man 7 rtnetlink
)。
本项目处于早期阶段,我目前正专注于路由netlink协议。
组织
netlink-sys
库提供底层构建块:常量、套接字和包解析netlink-ip
库为路由netlink协议提供高级抽象。它是完全异步的,建立在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
消息)。然而,许多由netlink-sys
支持的属性并未涵盖。 - 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优秀博客文章的启发(第一部分、第二部分和第三部分,尽管我只真正使用了第一篇博客中描述的概念)。这些想法也用在了@m-labs的smoltcp
项目中。
还要感谢tokio背后的团队,特别是@carllerche,他们构建了一个惊人的工具,并提供了支持。项目结构和代码质量令人惊叹,这个项目的某些部分基本上是从tokio的源代码中复制过来的。
最后,感谢Rust社区,它在多个场合帮助了我。
我特别赞赏的其他资源
依赖项
~8MB
~138K SLoC