#netlink #linux #ip

已删除 netlink-socket

netlink 套接字,可选与 mio 和 tokio 集成

使用旧的 Rust 2015

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

#55#netlink


用于 iproute2

MIT 许可证

27KB
429 代码行

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社区,它在多个场合帮助了我。

我特别赞赏的其他资源

依赖关系

~46–790KB
~12K SLoC