#netlink #linux #ip #linux-networking

已撤回 iproute2

通过netlink操作Linux网络资源

使用旧的Rust 2015

0.0.2 2018年7月11日
0.0.1 2018年7月11日

#10#linux-networking

MIT 许可证

69KB
1K SLoC

Build Status

netlink-rs

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

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

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

文档

组织

  • netlink_socket 提供netlink套接字。与 miotokio 的集成是可选的。
  • rtnetlink 提供了netlink的路由子协议类型(参见man 7 rtnetlink)。与 Tokio 的集成是可选的。
  • iproute2 为路由协议提供高级抽象,如 iproute2 命令:它利用netlink路由协议提供对链路、地址、arp表和路由表的访问。它是完全异步的,建立在 tokio 之上。

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

  • libnl:C 语言中的 netlink 实现。非常完整,文档很棒。
  • pyroute2:纯 Python 中的非常完整且可读的实现。
  • netlink:一个非常完整且积极维护的 Go 项目,似乎被广泛使用。

致谢

到目前为止,我主要资源是 pyroute2netlink 的源代码 很多。这两个项目都很棒,写得很好。作为一个不擅长阅读 C 语言的人,以及对 netlink 了解不多的人,它们是无价之宝。

我还想赞扬 libnl 的文档。它帮助我很好地理解了协议的基础。

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

还要感谢 tokio 的开发者,特别是 @carllerche,他们正在构建一个惊人的工具,并提供了支持。项目结构和代码质量令人惊叹,该项目的某些部分基本上是 tokio 源代码的 复制品

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

我特别欣赏的其他资源

依赖关系

~8MB
~139K SLoC