Netlink - Netlink
![]() | tento článek případně obsahuje původní výzkum.Leden 2012) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
Stabilní uvolnění | 5.9.13[1] (8. prosince 2020 ) [±] |
---|---|
Náhled verze | 5.10-rc7[2] (6. prosince 2020 ) [±] |
Operační systém | Linux |
Plošina | Linuxové jádro |
Typ | Aplikační programovací rozhraní |
Licence | GNU General Public License |
webová stránka | wiki |
The Netlink zásuvka rodina je Rozhraní jádra Linuxu používá meziprocesová komunikace (IPC) mezi jádrem a uživatelský prostor procesy a mezi různými procesy v uživatelském prostoru podobným způsobem jako Unixové doménové zásuvky. Podobně jako Unixové doménové zásuvky a na rozdíl od Zásuvky INET „Komunikace Netlink nemůže překročit hranice hostitele. Zatímco však zásuvky domény Unix používají souborový systém jmenný prostor, procesy Netlink jsou obvykle řešeny identifikátory procesu (PID).[3]
Netlink je navržen a používán pro přenos různých síťových informací mezi prostor jádra a procesy uživatelského prostoru. Síťové nástroje, například iproute2 rodina a nástroje použité pro konfiguraci mac80211 - založené na bezdrátových ovladačích, používejte ke komunikaci s Linuxové jádro z uživatelského prostoru. Netlink poskytuje standard zásuvka rozhraní založené na procesech uživatelského prostoru a na straně jádra API pro interní použití moduly jádra. Netlink původně používal AF_NETLINK
rodina zásuvek.
Netlink je navržen tak, aby byl flexibilnějším nástupcem ioctl; RFC 3549 podrobně popisuje protokol.
Dějiny
Netlink vytvořil Alexey Kuznetsov[4] jako flexibilnější alternativa k sofistikované, ale trapné ioctl
komunikační metoda použitá pro nastavení a získání možností externího soketu Linuxové jádro nadále podporuje ioctl
pro zpětnou kompatibilitu.
Netlink byl poprvé poskytnut v sérii 2.0 jádra Linuxu, implementované jako znakové zařízení. Do roku 2013 je toto rozhraní zastaralé, ale stále tvoří ioctl komunikační metoda; porovnat použití rtnetlink
.[5] Rozhraní zásuvky Netlink se objevilo v řadě 2.2 jádra Linuxu.
Struktura paketů
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 BSD zásuvky pomocí internetových protokolů, jako je TCP, kde se automaticky generují záhlaví zpráv, záhlaví zprávy Netlink (k dispozici jako struktura nlmsghdr
) musí být připraven volajícím. Zásuvka Netlink obecně funguje v a SOCK_RAW
-jako režim, 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
The AF_NETLINK
rodina nabízí více podmnožin protokolů. Každá rozhraní s jinou komponentou jádra a má jinou podmnožinu zpráv. Na podmnožinu odkazuje pole protokolu ve volání soketu:
int zásuvka (AF_NETLINK, SOCK_DGRAM nebo SOCK_RAW, protokol)
Chybí standard, SOCK_DGRAM
a SOCK_RAW
není zaručeno, že budou implementovány v daném vydání Linuxu (nebo jiného OS). Některé zdroje uvádějí, že obě možnosti jsou legitimní, a odkaz níže z červená čepice tvrdí, že SOCK_RAW
je vždy parametr. Iproute2 však používá obojí zaměnitelně.
Protokoly Netlink
Neúplný seznam podporovaných protokol následují záznamy:
- NETLINK_ROUTE
NETLINK_ROUTE
poskytuje informace o směrování a odkazu. Tyto informace se používají především pro démony směrování uživatelského 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é u front: 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 firewall.
- NETLINK_NFLOG
NETLINK_NFLOG
poskytuje rozhraní používané ke komunikaci mezi Netfilter a iptables.
- NETLINK_ARPD
NETLINK_ARPD
poskytuje rozhraní pro správu ARP tabulka z uživatelského prostoru.
- NETLINK_AUDIT
NETLINK_AUDIT
poskytuje rozhraní k subsystému auditu nalezenému v linuxovém jádře verze 2.6.6 a novější.
- 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 IPsec bezpečnostní asociace a databáze zásad zabezpečení - nejčastěji používané démony správce klíčů používajícími Internetová výměna klíčů protokol.
- NETLINK_KOBJECT_UEVENT
NETLINK_KOBJECT_UEVENT
poskytuje rozhraní, ve kterém jádro vysílá události, které obvykle spotřebovává 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 vytvořena obecná rodina Netlink - aby poskytla podporu pro přidání většího počtu rodin. Funguje jako multiplexer Netlink a pracuje s jednou rodinou Netlink NETLINK_GENERIC
. Obecný protokol Netlink je založen na protokolu Netlink a používá jeho API.
Uživatelem definovaný protokol Netlink
Uživatelé mohou přidat obslužnou rutinu Netlink do svých vlastních rutin jádra. To umožňuje vývoj dalších protokolů Netlink pro adresování nových modulů jádra.[6]
Viz také
- Porovnání bezdrátových ovladačů s otevřeným zdrojovým kódem – mac80211 - založené ovladače se spoléhají na Netlink jako API do uživatelského prostoru
- POSIX
Reference
- ^ Kroah-Hartman, Greg (8. prosince 2020). „Linux 5.9.13“. LKML (Poštovní seznam). Citováno 8. prosince 2020.
- ^ Torvalds, Linus (6. prosince 2020). „Linux 5.10-rc7“. LKML (Poštovní seznam). Citováno 7. prosince 2020.
- ^ „NETLINK (7) - Linux Programmer's Manual“.
- ^ „kernel / git / torvalds / linux.git: root / net / core / rtnetlink.c“. Strom zdroje linuxového jádra. kernel.org. Citováno 2014-05-27.
- ^ Crowcroft, Jon; Phillips, Iain, eds. (2002). Implementace protokolu TCP / IP a Linux: systémový kód pro Linux Internet. Série Wiley Networking Council. Wiley. p. 624. ISBN 9780471408826. Citováno 2013-05-21.
Všechny zprávy rtnetlink se skládají z hlavičky zprávy netlink a připojených atributů.
- ^ Proč a jak používat zásuvky Netlink
externí odkazy
- Pablo Neira Ayuso, Rafael M. Gasca, Laurent Lefèvre. Komunikace mezi jádrem a uživatelským prostorem v systému Linux pomocí zásuvek Netlink. Software: Practice and Experience, 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
- Netlink Sockets - přehled
- Netlink Protocol Library Suite
- „Linux Kernel Networking“ od Rami Rosen, Apress 2013: Kapitola 2, Netlink Sockets