Netlink - Netlink
Netlink zásuvka rodina je rozhraní Linux jádro použit pro komunikace mezi procesy (IPC) mezi oběma jádro a uživatelském prostoru procesů, a mezi různými uživatelském prostoru procesy, a to způsobem podobným domény zásuvek Unix . Podobně jako u soketů domény Unix a na rozdíl od soketů INET nemůže komunikace Netlink překračovat hranice hostitele. Zatímco však sokety domény Unix používají obor názvů systému souborů , procesy Netlink jsou obvykle řešeny pomocí identifikátorů procesů (PID).
Netlink je navržen a používán pro přenos různých síťových informací mezi jádrovým prostorem a procesy uživatelského prostoru. Síťové nástroje, jako je rodina iproute2 a nástroje používané ke konfiguraci bezdrátových ovladačů na bázi mac80211 , používají Netlink ke komunikaci s jádrem Linuxu z uživatelského prostoru. Netlink poskytuje standardní rozhraní na bázi soketu pro procesy v uživatelském prostoru a API na straně jádra pro interní použití moduly jádra . Netlink původně používal AF_NETLINK
rodinu soketů.
Netlink je navržen tak, aby byl flexibilnějším nástupcem ioctl ; RFC 3549 protokol podrobně popisuje.
Dějiny
Netlink vytvořil Alexey Kuznetsov jako flexibilnější alternativu k důmyslné, ale nešikovné ioctl
komunikační metodě používané pro nastavení a získání možností externích soketů. Jádro Linuxu nadále podporuje ioctl
zpětnou kompatibilitu.
Netlink byl poprvé poskytnut v řadě 2.0 jádra Linuxu, implementované jako znakové zařízení . Do roku 2013 je toto rozhraní zastaralé, ale stále tvoří ioctl komunikační metodu; porovnat použití rtnetlink
. Rozhraní soketu Netlink se objevilo v řadě 2.2 jádra Linuxu.
Struktura paketu
Bitový offset | 0–15 | 16–31 | ||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | Délka zprávy | |||||||||||||||||||||||||||||||
32 | Typ | Vlajky | ||||||||||||||||||||||||||||||
64 | Pořadové číslo | |||||||||||||||||||||||||||||||
96 | PID | |||||||||||||||||||||||||||||||
128+ | Data |
Na rozdíl od soketů BSD využívajících internetové protokoly, jako je TCP , kde se záhlaví zpráv generují automaticky, struct nlmsghdr
musí volající připravit záhlaví zprávy Netlink (dostupné jako ). Soket Netlink obecně funguje v SOCK_RAW
podobném režimu, i když SOCK_DGRAM
byl použit k jeho vytvoření.
Datová část pak obsahuje zprávu specifickou pro subsystém, která může být dále vnořena.
Rodiny soketů Netlink
AF_NETLINK
Rodina nabízí několik protokolů podmnožiny. Každé rozhraní je spojeno s jinou součástí jádra a má jinou podmnožinu zasílání zpráv. Na podmnožinu odkazuje pole protokolu ve volání soketu:
int socket(AF_NETLINK, SOCK_DGRAM or SOCK_RAW, protocol)
Chybí standard SOCK_DGRAM
a SOCK_RAW
není zaručeno, že budou implementovány v dané verzi Linuxu (nebo jiného OS). Některé zdroje uvádějí, že obě možnosti jsou legitimní, a níže uvedený odkaz z Red Hat uvádí, že SOCK_RAW
vždy jde o parametr. Iproute2 však používá oba zaměnitelně.
Protokoly Netlink
Následuje neúplný seznam podporovaných položek protokolu :
- NETLINK_ROUTE
NETLINK_ROUTE
poskytuje informace o směrování a propojení. Tyto informace se používají především pro démony směrování v uživatelském prostoru. Linux implementuje velkou podmnožinu zpráv:
- Odkazová vrstva: RTM_NEWLINK , RTM_DELLINK , RTM_GETLINK , RTM_SETLINK
- Nastavení adresy: RTM_NEWADDR , RTM_DELADDR , RTM_GETADDR
- Směrovací tabulky: RTM_NEWROUTE , RTM_DELROUTE , RTM_GETROUTE
- Sousední mezipaměť: RTM_NEWNEIGH , RTM_DELNEIGH , RTM_GETNEIGH
- Pravidla směrování: RTM_NEWRULE , RTM_DELRULE , RTM_GETRULE
- Nastavení disciplíny ve frontě : RTM_NEWQDISC , RTM_DELQDISC , RTM_GETQDISC
- Třídy provozu používané s frontami: RTM_NEWTCLASS , RTM_DELTCLASS , RTM_GETTCLASS
- Filtry provozu: RTM_NEWTFILTER , RTM_DELTFILTER , RTM_GETTFILTER
- Ostatní: RTM_NEWACTION , RTM_DELACTION , RTM_GETACTION , RTM_NEWPREFIX , RTM_GETPREFIX , RTM_GETMULTICAST , RTM_GETANYCAST , RTM_NEWNEIGHTBL , RTM_GETNEIGHTBL , RTM_SETNEIGHTBL
- NETLINK_FIREWALL
NETLINK_FIREWALL
poskytuje rozhraní pro aplikaci v uživatelském prostoru pro příjem paketů z brány firewall .
- NETLINK_NFLOG
NETLINK_NFLOG
poskytuje rozhraní sloužící ke komunikaci mezi Netfilterem a iptables .
- NETLINK_ARPD
NETLINK_ARPD
poskytuje rozhraní pro správu tabulky ARP z uživatelského prostoru.
- NETLINK_AUDIT
NETLINK_AUDIT
poskytuje rozhraní k subsystému auditu, který se nachází v jádře Linuxu verze 2.6.6 a novějších.
- NETLINK_IP6_FW
NETLINK_IP6_FW
poskytuje rozhraní pro přenos paketů z netfilteru do uživatelského prostoru.
- NETLINK_ROUTE6
- NETLINK_TAPBASE
- NETLINK_NETFILTER
- NETLINK_TCPDIAG
- NETLINK_XFRM
NETLINK_XFRM
poskytuje rozhraní pro správu přidružení zabezpečení IPsec a databází zásad zabezpečení - většinou je používají démoni správce klíčů pomocí protokolu Internet Key Exchange .
- NETLINK_KOBJECT_UEVENT
NETLINK_KOBJECT_UEVENT
poskytuje rozhraní, ve kterém jádro vysílá události, obvykle spotřebované udev .
- NETLINK_GENERIC
Jednou z nevýhod protokolu Netlink je, že počet rodin protokolů je omezen na 32 ( MAX_LINKS
). To je jeden z hlavních důvodů, proč byla generická rodina Netlink vytvořena - poskytnout podporu pro přidání vyššího počtu rodin. Funguje jako multiplexer Netlink a funguje s jedinou rodinou Netlink NETLINK_GENERIC
. Obecný protokol Netlink je založen na protokolu Netlink a používá jeho API.
Uživatelsky definovaný protokol Netlink
Uživatelé mohou přidat obslužný program Netlink do vlastních rutin jádra. To umožňuje vývoj dalších protokolů Netlink k adresování nových modulů jádra.
Viz také
- Srovnání bezdrátových ovladačů open-source - mac80211 založené řidiči spoléhají na Netlink jako API do uživatelského prostoru
- POSIX
Reference
externí odkazy
- Pablo Neira Ayuso, Rafael M. Gasca, Laurent Lefèvre. Komunikace mezi jádrem a uživatelským prostorem v Linuxu pomocí soketů Netlink. Software: Praxe a zkušenosti, 40 (9): 797-810, srpen 2010
- Proč a jak používat zásuvky Netlink
- RFC 3549
- https://netfilter.org/projects/libmnl/ - Minimalistická knihovna pro Netlink - knihovna uživatelského prostoru pro konstrukci a analýzu zpráv Netlink
- https://www.infradead.org/~tgr/libnl - Netlink Protocol Library Suite - plně funkční knihovna pokrývající téměř všechny aspekty práce se zásuvkami Netlink
- Manipulace se síťovým prostředím pomocí RTNETLINK
- Zásuvky Netlink - přehled
- Netlink Protocol Library Suite
- „Linux Kernel Networking“ od Rami Rosena, Apress 2013: Kapitola 2, Netlink Sockets