2 个版本

0.1.1 2019年1月2日
0.1.0 2019年1月2日

#5 in #rtnetlink


用于 ipwatch

MIT 许可证

345KB
7.5K SLoC

Build Status

netlink-rs

本项目旨在为 netlink 协议 提供构建块(参见 man 7 netlink)。

netlink 协议非常庞大,但最常用的两个子协议是 通用 netlink 协议路由 netlink 协议(参见 man 7 rtnetlink)。

本项目处于早期阶段,我目前主要关注路由和审计 netlink 协议。

文档

组织

  • netlink_sys 插件提供 netlink 套接字。与 miotokio 的集成是可选的。
  • netlink_packet 插件定义了 netlink 消息,以及序列化和反序列化它们的方法。
  • netlink_proto 插件提供 Tokio 集成。
  • rtnetlink 插件为 路由协议 提供了高级抽象(参见 man 7 rtnetlink)。如果用户想要操作 IP 地址、路由表等,这可能就是他们想要使用的。
  • audit 插件为审计协议提供了高级抽象。

在开始开发这个库之前,我已经检查了许多其他项目,但似乎没有一个是真正完整的。

  • libnl:C语言实现的netlink。功能非常完善,文档也非常优秀。
  • pyroute2:纯Python实现的非常完整和可读的实现。
  • netlink:一个非常完整且积极维护的go项目,看起来被广泛使用。

致谢

到目前为止,我的主要资源是pyroute2netlink的源代码,我使用了大量的这两个项目。这两个项目非常出色,编写得非常好。作为一个不擅长阅读C语言的人,且对netlink了解不多的人,它们是无价的。

我还想赞扬libnl的文档。它极大地帮助我理解了协议的基本知识。

整个数据包解析逻辑受到了@whitequark优秀的博客文章的启发(第一部分第二部分第三部分,尽管我实际上只真正使用了第一篇博客中描述的概念)。这些想法也被用于@m-labs的smoltcp项目中。

还要感谢tokio背后的团队,特别是@carllerche,他们正在构建一个惊人的工具,并提供了支持。项目结构和代码质量令人叹为观止,本项目的某些部分基本上是tokio源代码的盗版

最后,感谢Rust社区,它在多个场合帮助了我。

我特别欣赏的其他资源

依赖项

约605KB
约10K SLoC