#netlink #ip #linux

已删除 netlink-ip

路由netlink协议(又称rtnl)

使用旧Rust 2015

0.0.1 2018年7月11日

#57 in #netlink

自定义许可证

33KB
756

netlink-rs

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

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

本项目处于早期阶段,我目前正专注于路由netlink协议。

组织

  • netlink-sys库提供底层构建块:常量、套接字和包解析
  • netlink-ip库为路由netlink协议提供高级抽象。它是完全异步的,建立在tokio之上。

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

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

致谢

我目前的主要资源是pyroute2netlink的源代码,用得非常多。这两个项目很棒,写得也很好。作为一个不太精通C语言,且对netlink不太了解的人,它们非常有价值。

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

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

还要感谢tokio背后的团队,特别是@carllerche,他们构建了一个惊人的工具,并提供了支持。项目结构和代码质量令人惊叹,这个项目的某些部分基本上是从tokio的源代码中复制过来的

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

我特别赞赏的其他资源

依赖项

~8MB
~138K SLoC