Netlink - Netlink

Netlink
Stabilní uvolnění
5.14.7  Upravte to na Wikidata / 22. září 2021 ; Před 0 dny ( 22. září 2021 )
Náhled vydání
5.15-rc2  Upravte to na Wikidata / 19. září 2021 ; Před 3 dny ( 19. září 2021 )
Operační systém Linux
Plošina Linuxové jádro
Typ Rozhraní pro programování aplikací
Licence Obecná veřejná licence GNU
webová stránka wiki .linuxfoundation .org /networking /generic _netlink _howto

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_NETLINKrodinu 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é ioctlkomunikační metodě používané pro nastavení a získání možností externích soketů. Jádro Linuxu nadále podporuje ioctlzpě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 nlmsghdrmusí volající připravit záhlaví zprávy Netlink (dostupné jako ). Soket Netlink obecně funguje v SOCK_RAWpodobném režimu, i když SOCK_DGRAMbyl 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_NETLINKRodina 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_DGRAMa SOCK_RAWnení 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_RAWvž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_ROUTEposkytuje 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_FIREWALLposkytuje rozhraní pro aplikaci v uživatelském prostoru pro příjem paketů z brány firewall .

NETLINK_NFLOG

NETLINK_NFLOGposkytuje rozhraní sloužící ke komunikaci mezi Netfilterem a iptables .

NETLINK_ARPD

NETLINK_ARPDposkytuje 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_XFRMposkytuje 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_UEVENTposkytuje 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é

Reference

externí odkazy