V létě jsme v tichosti vydali NetworkManager 0.9.6, který obsahoval především hromadu menších oprav a vylepšení. NetworkManager 0.9.8 jsme stihli vydat těsně před brněnskou Developer Conference, která proběhla o víkendu 23. a 24. února 2013, a tentokrát jej ohlašujeme s plnou parádou.

Většina naší práce na této verzi se již objevila ve Fedoře 18, včetně nějakých těch chyb, které jsme mezitím stihli opravit. Přesto bych se s vámi rád podělil o vlastnosti obou těchto vydání, tedy o nejpodstatnější ze změn, které proběhly od vydání 0.9.4 do vydání 0.9.8. Ačkoli očekávám dílčí dolaďování této větve, toto vydání považuji za velký krok vpřed.

Servery a virtualizace

Protože byly hlavní oblastí využití NetworkManageru především notebooky, není úplně jednoduché tento software transformovat do podoby vhodné pro servery a především pro interoperabilitu s virtualizačními nástroji. Hodně lidí věří tomu, že je potřeba NetworkManager zahodit a postavit nový nástroj na zelené louce. My jsme došli k závěru, že si vystačíme se zahazováním a masivním předěláváním jednotlivých jeho částí.

Práce na NetworkManageru tedy v současné době znamená mnohem více refactoringu než práce na nových vlastnostech. To stejné platí pro opravy různých chyb a nedostatků. Je tu i spousta věcí, které nelze se zachováním kompatibility změnit ze dne na den, a tak vymýšlíme různé možnosti, jak opravy zasadit do stávajícího stavu. V oblasti nekompatibilních změn se držíme zpátky a udržujeme stabilitu API 0.9.x, jak se dá.

Bridging a bonding

Nová verze NetworkManageru obsahuje dlouho očekávanou podporu spojování ethernetových rozhraní do virtuálních bridgů. Tato funkcionalita byla přijata jako vlastnost do Fedory 19. Podpora bondingu byla součástí NetworkManageru již delší dobu, ale v dřívějších vydáních se mi bonding nepodařilo zprovoznit. Z toho důvodu je i bonding oznámený jako vlastnost pro F19.

Přidání konfigurace bridgů bylo relativně jednoduché. Problémy nastaly při řešení vnitřních závislostí uvnitř NetworkManageru. Nakonec to dopadlo tak, že se musel restrukturalizovat kód zajišťující fungování rozhraní závislých na jiných rozhraních. Refactoring podpory síťových rozhraní dále probíhá i po vydání 0.9.8. Další úpravy si vyžádala podpora dynamické konfigurace adres na těchto rozhraních. NetworkManager reaguje na události od jádra a veškeré akce spouští až ve chvíli, kdy to má skutečně smysl. Například klient DHCP se spouští až ve chvíli, kdy je bridge připravený odesílat pakety.

Přestože bude podpora obou virtuálních rozhraní ohlášena s Fedorou 19, buildy s jejich podporou jsou už nějakou dobu součástí Fedory 18. Vzniklé mezidobí bude využito ke stabilizaci nových vlastností a přípravě ostatních softwarových balíků na využití nových možností.

Připojení k VPN

Automatické připojování k VPN je netriviální problém. Ve většině případů uživatelé chtěli, aby se některé z fyzických připojení nepovažovalo za dokončené, dokud nedojde k aktivaci VPN. Toho je nyní možné dosáhnout pomocí svázání konfigurace fyzického rozhraní s konkrétní VPN. Rozhraní pro VPN pluginy od verze 0.9.6 podporuje IPv6, ale zatím jej implementuje pouze plugin pro OpenConnect.

Podpora pro přímé připojení k ADSL

Verze 0.9.6 přinesla základní podporu ADSL. Podle informací v commitu jsou podporovány protokoly PPPoE a PPPoA. Z kódu není patrné, zda je podporován protokol IPv6, nicméně sám jsem ADSL nezoušel ani na IPv4. PPP v NetworkManageru by obecně mělo dualstack zvládat. Prohlédněte si ukázku konfigurace v nativním formátu.

[connection]
id=MYISP
uuid=34d04e69-fdd9-4231-af2c-25ed1f34dc1e
type=adsl
timestamp=1304621332

[adsl]
username=user@myisp.com
password=mypassword
vpi=8
vci=35
encapsulation=vcmux
protocol=pppoa

[ipv6]
method=ignore

[ipv4]
method=auto

Automatická konfigurace připojení k síti

Už verze 0.9.6 přinesla značné zlepšení v oblasti dynamické konfigurace IPv6 oproti původnímu stavu. Nové vydání NetworkManageru k tomu přidává velké množství oprav týkajících se protokolů DHCPv4 a DHCPv6. Zlepšení podpory IPv6 v předchozí verzi vzbudilo zájem o tuto oblast a kontaktovalo nás hned několik lidí ochotných přispět vlastním kódem. I tak máme stále problémy s nedostatečnou podporou autokonfigurace ze strany jádra a řešíme, zda jaderný kód přizpůsobit našim potřebám, nebo ho ignorovat a použít implementaci v userspace.

DHCPv6 je nyní použitelné v sítích s podporou dynamického DNS. Opravili jsme i podporu DUID, tedy identifikátoru, který se v DHCPv6 používá místo MAC adresy. Jako identifikátor teď při výchozím nastavení používáme UUID z /etc/machine-id.

Během vývoje těchto dvou verzí došlo k opravám v dalších balících. Patří mezi ně linuxové jádro, libnl, dhclient a další. Bohužel stále platí, že opravy dhclienta upstream přijímá sporadicky. V rámci čištění kódu jsme po konzultaci se zástupci distribucí odstranili podporu pro zastaralý dhclient 3.x. Podpora pro dhcpcd je spíše zanedbávána.

Příkazové rozhraní a D-Bus API

Součástí balíku NetworkManager je i základní, leč neustále se zlepšující, příkazové rozhraní. Při troše štěstí z něj postupem času vykouzlíme použitelný nástroj pro konfiguraci sítě. Pro závislé projekty je vhodnější použít stabilní D-Bus API nebo ještě lépe knihovnu libnm-glib. CLI nástroj se bude ještě hodně měnit.

Příjemnou novinkou v 0.9.6 byla podpora připojení k bezdrátovým sítím z příkazové řádky. Samozřejmostí je i možnost vypsat nalezené bezdrátové sítě.

nmcli device wifi list
nmcli device wifi connect MySSID password VelmiTajneHeslo

V D-Bus API přibyla možnost ručně spustit vyhledání okolních sítí a získat informace o použitém ovladači a firmwaru.

Komunikace s operačním systémem

V rámci čištění kódu a přípravy na začlenění nové mezivrstvy pro komunikaci s operačním systémem jsme odstranili podporu pro libnl 1.x a 2.x. Pro ulehčení údržby kódu podporujeme pouze libnl 3.2.7 a novější. Odstranění podpory pro starší verze libnl nám mimo jiné umožnilo odstranit velké množství kódu ošetřujícího absenci funcionality v těchto verzích. Díky tomu nemusíme používat různá zastaralá rozhraní jádra a vyhýbáme se tak obrovskému množství chyb, které by se projevily jen na některých distribucích.

Podpora distribucí

NetworkManager dosud podporoval pouze konkrétní distribuce. Kompilace na neznámé distribuci končila chybou. Nakonec se ukázalo, že většina distribučně specifického kódu vůbec nebyla potřeba. Zbyly pouze čtyři konfigurační pluginy a podpora pro nepřímou úpravu /etc/resolv.conf pomocí SUSE netconfig. Konfigurační volbu --with-distro, která toto zajišťovala, jsme odstranili a místo toho lze vypínat/zapínat jednotlivé pluginy i netconfig.

Vydání 0.9.8 lze tedy zkompilovat na libovolné linuxové distribuci za předpokladu, že jsou splněny prerekvizity. Detekce konkrétních distribucí se stále používá pro doladění výchozí konfigurace pěti nových voleb.

Závěrem

Opravili jsme mnoho různých chyb a nedostatků. Přidali jsme automaticky generovanou manuálovou stránku nm-settings s tabulkou konfiguračních voleb dostupných přes D-Bus API a nativní konfigurační formát keyfile.

Doufám, že jsem vám to příliš nezkomplikoval informováním o posledních dvou vydáních zároveň. Pro další informace o tom, co se na vás v NetworkManageru a linuxovém síťování chystá, doporučuji navštívit seznam připravovaných vlastností na Fedora Wiki a upstreamovou bugzillu. Kdo jste mě nestihli odchytit na Developer Conference, můžete se na mě obrátit s dotazy o týden později v Praze na konferenci InstallFest.