Portál AbcLinuxu, 30. dubna 2025 14:00

NetworkManager, D-Bus, Python, ...

15.2.2008 16:11 | Přečteno: 4565× | Linux | Výběrový blog

Prvý pokus o ovládnutie NetworkManager-a z command line

Mojim zamerom bolo naimplementovat funkcne ovladanie siete s NetworkManager z CLI, pripadne pridat ncurses frontend. NetworkManager je vyborny system zvlast pre bezdratove siete.Venoval som tomu par dni svojho ITO, vacsinu casu som stravil citanim zdrojakov NetworkManager/KNetworkManager. Nakoniec som to nedokoncil, ale snad neskor ;-)

Testovacie prostredie bolo openSUSE11.0Alpha2 s NetworkManager0.7 a KDE s KNetworkManager. S NM som komunikoval pomocou D-Bus v interaktivnom Pythone, cele vo VirtualBox.

Tri sietovky, jedna aktivovana pomocou KNetworkManager
user@linux-qgo5:~> ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
2: net0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast
qlen 1000
    link/ether 08:00:27:6b:5a:9a brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global net0
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast
qlen 1000
    link/ether 08:00:27:f2:40:32 brd ff:ff:ff:ff:ff:ff
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast
qlen 1000
    link/ether 08:00:27:53:da:ef brd ff:ff:ff:ff:ff:ff
Priklad interaktivnej session:
# vytvorim si objekt D-Bus systemovy kanal
>>> import dbus
>>> bus = dbus.SystemBus()

# vytvorim si proxy objekt pre NetworkManager
>>> nm = bus.get_object('org.freedesktop.NetworkManager', '/org/freedesktop/NetworkManager')

# zavolame state() na zistenie stavu NM (3 znamena connected)
>>> nm.state()
dbus.UInt32(3L)

# zobrazit si aktivne spojenia (mam jedno, vytvorene KNetworkManager-om)
>>> nm.GetActiveConnections()

dbus.Array([dbus.Struct((dbus.String(u'org.freedesktop.NetworkManagerUserSettings'),
dbus.ObjectPath('/org/freedesktop/NetworkManagerSettings/Connection/1'),
dbus.ObjectPath('/org/freedesktop/NetworkManagerSettings/Connection/1'),
dbus.Array([dbus.ObjectPath('/org/freedesktop/Hal/devices/net_08_00_27_6b_5a_9a')],
signature=dbus.Signature('o'))), signature=None)], signature=dbus.Signature('(sooao)'))


# Co tu je zaujimave je identifikator spojenia a sietovej karty
# Ku obidvom si vytvorim proxy objekt
>>> net0 = bus.get_object('org.freedesktop.NetworkManager', '/org/freedesktop/Hal/devicesnet_08_00_27_6b_5a_9a')

>>> con1 = bus.get_object('org.freedesktop.NetworkManager', '/org/freedesktop/NetworkManagerSettings/Connection/1')

# priklad ziskania vlastnosti DeviceType
>>> net0_props = dbus.Interface(net0, 'org.freedesktop.DBus.Properties')
>>> net0_props.Get('org.freedesktop.NetworkManager.Device', 'DeviceType')

# A to najdolezitejsie: odpojenie a pripojenie spojenia
net0.Disconnect()
nm.ActivateDevice(net0, 'org.freedesktop.NetworkManagerUserSettings', con1, con1)
TODO:

V tomto priklade som pouzil uz existujuce spojenie vytvorene v KNetworkManager. To je dane architekturou NetworkManager, kde Connection s uzivatelskym nastavenim je vytvorene vo "frontende" a propagovane backendu. Takze toto treba naimplementovat (reimplementovat nm-plugin), aby sa to pohlo dalej. Az budem mat zase cas ;-), tak s tym pohnem

       

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

15.2.2008 16:27 David Jaša | skóre: 44 | blog: Dejvův blog
Rozbalit Rozbalit vše Re: NetworkManager, D-Bus, Python, ...
Odpovědět | Sbalit | Link | Blokovat | Admin
Super. CLI rozhraní je jedna z věcí, které NM v současné době nejvíce chybí...
oVirt | SPICE
belisarivs avatar 15.2.2008 16:48 belisarivs | skóre: 22 | blog: Psychobláboly
Rozbalit Rozbalit vše Re: NetworkManager, D-Bus, Python, ...
Souhlas. Ty graficke nejsou zrovna neomylne.
IRC is just multiplayer notepad.
15.2.2008 17:12 miso | skóre: 36 | blog: iSCSI_initiator_howto | Praha
Rozbalit Rozbalit vše Re: NetworkManager, D-Bus, Python, ...
Neomylne? Mozes to rozviest?
Project Satan infects Calculon with Werecar virus
17.2.2008 15:21 Jan Grmela | skóre: 45 | blog: Kilo šťávy z lachtana | Brno
Rozbalit Rozbalit vše Re: NetworkManager, D-Bus, Python, ...
Souhlas, příklad za všechny: Pokud si nastavím WiFi (eduroam MZLU, WPA Enterprise, TLS) v klikátku KNetworkmanager, tak se za boha nemůžu na internet připojit, vyjde tak 1 z 10 pokusů, který běží stejně tak 30 sekund a potom spadne. Když to stejné provedu z konzole pomocí wpa_supplicantu a dhclienta, tak je to na první pokus a spojení pak drží libovolně dlouho. A nepomohl ani update na novější verzi, která má právě toto údajně řešit (openSUSE 10.3).
17.2.2008 18:16 David Jaša | skóre: 44 | blog: Dejvův blog
Rozbalit Rozbalit vše Re: NetworkManager, D-Bus, Python, ...
Narazil jsem na podobný bug v Ubuntu 8.04, v 7.10 (které vyšlo ve stejné době jako oS 10.3) mi to jelo bez problémů.

BTW opravdu používáte EAP/TLS s klientskými certifikáty? Není to EAP/TTLS nebo EAP/PEAP?
xvasek avatar 18.2.2008 06:58 xvasek | skóre: 21 | blog: | Zlín
Rozbalit Rozbalit vše Re: NetworkManager, D-Bus, Python, ...
Když už to tady pitváme - lze se připojit na síť, kde neběží DHCP? Já ve Fedora 7 / Gnome applet potupně vypínám networkmanager a mířím do konzole...
18.2.2008 07:13 Käyttäjä 11133 | skóre: 58 | blog: Ajattelee menneisyyttä
Rozbalit Rozbalit vše Re: NetworkManager, D-Bus, Python, ...
V SUSE normálně přes YaST :-) Nebo přímou konfigurací sysconfigu ;-)
18.2.2008 08:41 miso | skóre: 36 | blog: iSCSI_initiator_howto | Praha
Rozbalit Rozbalit vše Re: NetworkManager, D-Bus, Python, ...
Pokial mas napisanu konfiguraciu v /etc/sysconfig/network-scripts/ifcfg-* tak ju NM0.6 pouzije (ale pokial sa chces prepinat medzi dvomi sietami bez dhcp, tak to uz je problem).
V NM0.7 je uz dialog "Use manual IP configuration", kde si mozes rucne zadat vsetky udaje
Project Satan infects Calculon with Werecar virus
18.2.2008 08:45 hydrandt | skóre: 35 | blog: Kanál | Herzogenburg
Rozbalit Rozbalit vše Re: NetworkManager, D-Bus, Python, ...
Jestli je to tak, hodnotím kladně a těším se :)
I am Jack's wasted life.
xvasek avatar 18.2.2008 18:54 xvasek | skóre: 21 | blog: | Zlín
Rozbalit Rozbalit vše Re: NetworkManager, D-Bus, Python, ...
Tak nejsem blbý, jenom nemám aktuální software. :-) Díky.
18.2.2008 08:44 hydrandt | skóre: 35 | blog: Kanál | Herzogenburg
Rozbalit Rozbalit vše Re: NetworkManager, D-Bus, Python, ...
Taky si myslím, že přímé a jednoduché nastavení pevné IP by mělo být v KNetworkManageru a ekvivalentech nějak pěkně integrováno. Aspoň by bylo stejné gui ve všech distrech.
I am Jack's wasted life.
thingie avatar 15.2.2008 21:26 thingie | skóre: 8
Rozbalit Rozbalit vše Re: NetworkManager, D-Bus, Python, ...
Odpovědět | Sbalit | Link | Blokovat | Admin
Okolo d-busu by bylo dobré mít nějaký rozumný dokumentační zdroj jaká rozhraní jsou k dosažení a jak se používají. Protože teď je u velkého množství nástrojů jediná použitelná dokumentace zdrojáky a introspekce na sběrnici, což je, nezlobte se na mne, špatný.

(A ano, na tohle si konstantně stěžuju tak půl roku, už.)
Růžové lži.
15.2.2008 22:31 Kyosuke | skóre: 28 | blog: nalady_v_modre
Rozbalit Rozbalit vše Re: NetworkManager, D-Bus, Python, ...
Nejlepší bude dokumentaci D-Busu přidat do budoucí nejlepší linuxové dokumentace na světě. :-)
thingie avatar 15.2.2008 22:35 thingie | skóre: 8
Rozbalit Rozbalit vše Re: NetworkManager, D-Bus, Python, ...
Co to proboha je.
Růžové lži.
16.2.2008 15:47 miso | skóre: 36 | blog: iSCSI_initiator_howto | Praha
Rozbalit Rozbalit vše Re: NetworkManager, D-Bus, Python, ...
Specialne u NetworkManager projektu su naozaj najlepsie zdrojaky a introspect xml subory, alebo .Introspect() metoda. Vyvoj prebieha rychlo a dost neriadene/neorganizovane, som rad vobec za komentare v zdrojakoch :-(
Project Satan infects Calculon with Werecar virus
29.4.2008 19:27 Martin Vidner | Praha
Rozbalit Rozbalit vše Re: NetworkManager, D-Bus, Python, ...
Odpovědět | Sbalit | Link | Blokovat | Admin
Nevim presne, kdy se to zmenilo, ale v openSUSE 11.0 Beta 1 get_object nestaci, jinak dostanete zavadejici hlasku o odepreni pristupovych prav. Spravne ma byt:
nm = dbus.Interface(bus.get_object('org.freedesktop.NetworkManager', '/org/freedesktop/NetworkManager'), 'org.freedesktop.NetworkManager')
5.6.2008 10:46 Martin Vidner | Praha
Rozbalit Rozbalit vše Re: NetworkManager, D-Bus, Python, ...
Odpovědět | Sbalit | Link | Blokovat | Admin
Napsal jsem cnetworkmanager. Oznameni zde.

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.