Kódová základna FreeBSD přijímá implementaci komunikačního protokolu Netlink (RFC 3549), který se v Linuxu používá k organizaci interakce mezi jádrem a procesy v uživatelském prostoru. Projekt je omezen na podporu rodiny operací NETLINK_ROUTE pro správu stavu síťového subsystému v jádře.
Ve své současné podobě umožňuje vrstva podpory Netlink FreeBSD používat linuxovou ip utilitu z balíčku iproute2 ke správě síťových rozhraní, nastavení IP adres, konfiguraci směrování a manipulaci s objekty nexthop, které ukládají stav použitý k předání paketu do požadovaného cíle. . Po mírné změně hlavičkových souborů je možné použít Netlink v balíčku Bird routing.
Implementace Netlink pro FreeBSD je zabalena jako zaváděcí modul jádra, který pokud možno neovlivňuje ostatní subsystémy jádra a vytváří samostatné fronty úloh (tasqueue) pro zpracování příchozích zpráv přes protokol a provádění operací v asynchronním režimu. Důvodem portování Netlinku je nedostatek standardního mechanismu pro interakci se subsystémy jádra, což vede k tomu, že různé subsystémy a ovladače vymýšlejí své vlastní protokoly.
Netlink nabízí jednotnou komunikační vrstvu a rozšiřitelný formát zpráv, který může fungovat jako prostředník, který automaticky spojuje nesourodá data z různých zdrojů do jediného požadavku. Například subsystémy FreeBSD jako devd, jail a pfilctl lze migrovat na Netlink, nyní pomocí vlastních volání ioctl, což značně zjednoduší tvorbu aplikací pro práci s těmito subsystémy. Použití Netlinku k úpravě objektů a skupin nexthop ve směrovacím zásobníku navíc umožní efektivnější interakci s procesy směrování v uživatelském prostoru.
Aktuálně implementované funkce:
- Získání informací o trasách, objektech a skupinách nexthops, síťových rozhraních, adresách a sousedních hostitelích (arp/ndp).
- Tvorba upozornění na výskyt a odpojení síťových rozhraní, nastavení a mazání adres, přidávání a mazání tras.
- Přidávání a odebírání tras, objektů a skupin nexthops, bran, síťových rozhraní.
- Integrace s rozhraním Rtsock pro správu směrovací tabulky.
Zdroj: opennet.ru