Prije nekoliko dana vijest je objavljena da je osnovni kod FreeBSD je usvojio nova implementacija komunikacijskog protokola netlink (RFC 3549) koji se koristi u Linuxu za komunikaciju između kernela i procesa u korisničkom prostoru.
Obitelj utičnica netlink je Linux kernel sučelje koje koristi se za međuprocesnu komunikaciju (IPC) između procesa jezgre i korisničkog prostora i između različitih procesa korisničkog prostora, slično utičnicama Unix domene.
Slično Unix domenskim utičnicama i za razliku od INET utičnica, Netlink komunikacija ne može prelaziti granice hosta. Međutim, dok utičnice Unix domene koriste imenski prostor datotečnog sustava, Netlink procesi se općenito adresiraju identifikatorima procesa (PID-ovi).
Netlink je dizajniran i koristi se za prijenos raznih mrežnih informacija između prostora jezgre i procesa korisničkog prostora. Mrežni uslužni programi, kao što je obitelj iproute2 i uslužni programi koji se koriste za konfiguriranje bežičnih upravljačkih programa temeljenih na mac80211, koriste Netlink za komunikaciju s Linux kernelom iz korisničkog prostora. Netlink pruža standardno sučelje temeljeno na utičnicama za procese korisničkog prostora i API na strani kernela za internu upotrebu modula kernela. Netlink je izvorno koristio AF_NETLINK obitelj utičnica.
Do sada u sadašnjem obliku, Sloj podrške za Netlink omogućuje FreeBSD-u korištenje uslužnog programa Linux IP paketa iproute2 za upravljanje mrežnim sučeljima, postavljanje IP adresa, konfiguriranje usmjeravanja i manipuliranje nexthop objektima koji pohranjuju stanje koje se koristi za prosljeđivanje paketa na željeno odredište. Nakon male izmjene datoteka zaglavlja, moguće je koristiti Netlink u Birdovom paketu za usmjeravanje.
Implementacija Netlink-a za FreeBSD pakiran je kao modul kernela koji se može učitavati da, ako je moguće, ne utječe na druge podsustave jezgre i stvara zasebne redove zadataka (tasqueue) za obradu dolaznih poruka kroz protokol i izvođenje operacija u asinkronom načinu. Razlog za prijenos Netlink-a je nedostatak standardnog mehanizma za interakciju s podsustavima jezgre, što dovodi do toga da različiti podsustavi i upravljački programi izmišljaju vlastite protokole.
netlink nudi objedinjeni komunikacijski sloj i proširivi format poruke koji može djelovati kao posrednik koji automatski kombinira različite podatke iz različitih izvora u jedan zahtjev. Na primjer, FreeBSD podsustavi poput devd, jail i pfilctl mogu se prenijeti na Netlink, sada koristeći svoje vlastite ioctl pozive, što će uvelike pojednostaviti izradu aplikacija za rad s tim podsustavima. Dodatno, korištenje Netlink-a za modificiranje nexthop objekata i grupa u hrpu usmjeravanja omogućit će učinkovitiju interakciju s procesima usmjeravanja korisničkog prostora.
Sučelja, adrese, rute, firewall, fibs, vnets, itd. kontroliraju se putem netlinka. To je asinkroni protokol temeljen na TLV-u koji omogućuje komunikacije 1-1 i 1-više. Trenutna implementacija podržava podskup obitelji NETLINK_ROUTE. Implementacija je također kompatibilna s okvirom obitelji NETLINK_GENERIC.
Trenutno implementirane značajke:
- Dobivanje informacija o rutama, nexthops objektima i grupama, mrežnim sučeljima, adresama i susjednim hostovima (arp/ndp).
- Formiranje obavijesti o pojavi i odspajanju mrežnih sučelja, konfiguraciji i uklanjanju adresa, dodavanju i uklanjanju ruta.
- Dodavanje i uklanjanje ruta, sljedećih objekata i grupa, pristupnika, mrežnih sučelja.
- Integracija s Rtsock sučeljem za upravljanje tablicom usmjeravanja.
Vrijedno je spomenuti da je do sada projekt ograničen na podršku NETLINK_ROUTE obitelji operacija za upravljanje stanjem mrežnog podsustava u kernelu.
Konačno, ako vas zanima više o tome, možete se obratiti pojedinostima u sljedeći link.