FreeBSD 程式碼庫採用了 Netlink 通訊協定(RFC 3549)的實現,該協定用於 Linux для организации взаимодействия ядра с процессами в пространстве пользователя. Проект ограничивается поддержкой семейства операций NETLINK_ROUTE для управления состоянием сетевой подсистемы в ядре.
В текущем виде уровень поддержки Netlink позволяет использовать во FreeBSD Linux-утилиту ip из пакета iproute2 для управления сетевыми интерфейсами, установки IP-адресов, настройки маршрутизации и манипуляции объектами nexthop, хранящими данные о состоянии, используемом для передачи пакета в желаемую точку назначения. После незначительного изменения заголовочных файлов возможно использование Netlink в пакете маршрутизации Bird.
FreeBSD 的 Netlink 實現被打包為一個可加載的內核模塊,如果可能的話,不會影響其他內核子系統,並創建單獨的任務隊列(tasqueue)來通過協議處理傳入的消息並以異步模式執行操作。 移植 Netlink 的原因是缺乏與內核子系統交互的標準機制,這導致不同的子系統和驅動程序發明了自己的協議。
Netlink 提供統一的通信層和可擴展的消息格式,可以充當中介,自動將來自不同來源的不同數據組合成單個請求。 例如,FreeBSD 子系統(如 devd、jail 和 pfilctl)可以遷移到 Netlink,現在使用它們自己的 ioctl 調用,這將大大簡化使用這些子系統的應用程序的創建。 此外,使用 Netlink 修改路由堆棧中的下一跳對象和組將允許與用戶空間路由進程進行更有效的交互。
目前實現的功能:
- 獲取有關路由、下一跳對象和組、網絡接口、地址和相鄰主機 (arp/ndp) 的信息。
- 形成有關網絡接口的出現和斷開、設置和刪除地址、添加和刪除路由的通知。
- 添加和刪除路由、下一跳對象和組、網關、網絡接口。
- 與 Rtsock 接口集成來管理路由表。
來源: opennet.ru
