FreeBSD 添加了对 Linux 内核中使用的 Netlink 协议的支持

FreeBSD 代码库采用 Netlink 通信协议 (RFC 3549) 的实现,该协议在 Linux 中用于组织内核与用户空间进程之间的交互。 该项目仅限于支持 NETLINK_ROUTE 系列操作,用于管理内核中网络子系统的状态。

在当前形式中,Netlink 支持层允许 FreeBSD 使用 iproute2 包中的 Linux ip 实用程序来管理网络接口、设置 IP 地址、配置路由以及操作存储用于将数据包转发到所需目的地的状态的 nexthop 对象。 稍微修改一下头文件后,就可以使用Bird路由包中的Netlink了。

FreeBSD 的 Netlink 实现被打包为一个可加载的内核模块,如果可能的话,不会影响其他内核子系统,并创建单独的任务队列(tasqueue)来通过协议处理传入的消息并以异步模式执行操作。 移植 Netlink 的原因是缺乏与内核子系统交互的标准机制,这导致不同的子系统和驱动程序发明了自己的协议。

Netlink 提供了统一的通信层和可扩展的消息格式,可以充当中介,自动将来自不同来源的不同数据组合成单个请求。 例如,FreeBSD 子系统(如 devd、jail 和 pfilctl)可以迁移到 Netlink,现在使用它们自己的 ioctl 调用,这将大大简化使用这些子系统的应用程序的创建。 此外,使用 Netlink 修改路由堆栈中的下一跳对象和组将允许与用户空间路由进程进行更有效的交互。

目前实现的功能:

  • 获取有关路由、下一跳对象和组、网络接口、地址和相邻主机 (arp/ndp) 的信息。
  • 形成有关网络接口的出现和断开、设置和删除地址、添加和删除路由的通知。
  • 添加和删​​除路由、下一跳对象和组、网关、网络接口。
  • 与 Rtsock 接口集成来管理路由表。

来源: opennet.ru

添加评论