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

添加評論