I kodebasen for FreeBSD er implementeringen af kommunikationsprotokollen Netlink (RFC 3549) blevet accepteret, som bruges i Linux til at organisere interaktionen mellem kernen og processerne i brugerrummet. Projektet er begrænset til understøttelse af familien af NETLINK_ROUTE-operationer til styring af netværkssubsystemets tilstand i kernen.
I sin nuværende form tillader niveauet for understøttelse af Netlink at bruge Linux-værktøjet ip fra iproute2-pakken til at styre netværksgrænseflader, sætte IP-adresser, konfigurere routing og manipulere objekter nexthop, der indeholder data om tilstanden, som bruges til at sende pakker til den ønskede destination. Efter mindre ændringer af headerfilerne er det muligt at bruge Netlink i routingpakken Bird.
Implementeringen af Netlink for FreeBSD er udformet som en modulær kerne, der i videst muligt omfang ikke påvirker andre kerneundersystemer og opretter separate opgavekøer (tasqueue) til behandling af indkomne meddelelser via protokollen og udførelse af operationer asynkront. Årsagen til porteringen af Netlink er det manglende standardmekanisme til interaktion med kerneundersystemerne, hvilket fører til, at forskellige undersystemer og drivere opfinder deres egne protokoller.
Netlink tilbyder et ensartet kommunikationslag og et udvideligt format for meddelelser, som kan fungere som en mægler, der automatisk samler disparate data fra forskellige kilder i én anmodning. For eksempel kan subsystems FreeBSD som devd, jail og pfilctl, som i øjeblikket bruger deres egne ioctl-opkald, oversættes til Netlink, hvilket betydeligt vil lette udviklingen af applikationer til arbejde med disse undersystemer. Desuden vil brugen af Netlink til at ændre objekter og grupper af nexthops i routingstakken muliggøre mere effektiv interaktion med routingprocesserne i brugerrummet.
De nuværende implementerede muligheder:
- Indhentning af oplysninger om ruter, objekter og grupper af nexthops, netværksgrænseflader, adresser og nærliggende værter (arp/ndp).
- Generering af meddelelser om oprettelse og nedlukning af netværksgrænseflader, opstilling og sletning af adresser, tilføjelse og fjernelse af ruter.
- Tilføjelse og fjernelse af ruter, objekter og grupper af nexthops, gateways, netværksgrænseflader.
- Integration med Rtsock-grænsefladen til styring af routing-tabellen.
Kilde: opennet.ru
