2 # cnetworkmanager: Command Line Interface for NetworkManager
3 # by: http://en.opensuse.org/User:Mvidner
4 # license: http://creativecommons.org/licenses/by/3.0/
7 print "cnetworkmanager %s - Command Line Interface for NetworkManager" % VERSION
15 from dbus
.mainloop
.glib
import DBusGMainLoop
16 DBusGMainLoop(set_as_default
=True)
28 bus
= dbus
.SystemBus()
30 # FOOC = connection (service) string
31 # FOOI = interface string
34 # foopi = property interface
35 NMC
= 'org.freedesktop.NetworkManager'
37 PI
= 'org.freedesktop.DBus.Properties'
38 SSC
= "org.freedesktop.NetworkManagerSystemSettings"
39 USC
= "org.freedesktop.NetworkManagerUserSettings"
43 ii
= dbus
.Interface(obj
, 'org.freedesktop.DBus.Introspectable')
46 # TODO: pull them from introspection.xml
47 NM_STATE
= ["UNKNOWN", "ASLEEP", "CONNECTING", "CONNECTED", "DISCONNECTED",]
50 nmo
= bus
.get_object(NMC
, opath
)
51 nmi
= dbus
.Interface(nmo
, NMI
)
52 nmpi
= dbus
.Interface(nmo
, PI
)
54 print "state:", NM_STATE
[nmpi
.Get(NMI
, "State")]
55 print "wifi:", nmpi
.Get(NMI
, "WirelessEnabled")
56 print "wifi hw:", nmpi
.Get(NMI
, "WirelessHardwareEnabled")
57 # nmpi.Set(NMI, "WirelessEnabled", True)
61 devices
= nmi
.GetDevices()
62 for device
in devices
:
67 print "Active Connections"
68 aconns
= nmpi
.Get(NMI
, "ActiveConnections")
73 def dump_aconn(opath
):
74 co
= bus
.get_object(NMC
, opath
)
75 copi
= dbus
.Interface(co
, PI
)
76 for P
in ["ServiceName", "Connection", "SpecificObject", "SharedServiceName", "SharedConnection", "Devices"]:
77 print " %s: %s" % (P
, copi
.Get(NMI
, P
))
79 def dump_nm_06(opath
):
80 nmo
= bus
.get_object(NMC
, opath
)
81 nmi
= dbus
.Interface(nmo
, NMI
)
83 print "state:", NM_STATE
[nmi
.state()]
86 devices
= nmi
.getDevices()
87 for device
in devices
:
89 dump_device_06(device
)
92 print "Active Connections"
94 print nmi
.GetActiveConnections()
96 def bitmask_str(map, value
):
98 for mask
, s
in map.iteritems():
99 if value
& mask
: ret
.append(s
)
104 ret
.append("%d" % (i32
% 256))
106 ret
.append("%d" % (i32
% 256))
108 ret
.append("%d" % (i32
% 256))
110 ret
.append("%d" % (i32
% 256))
114 NM_DEVICE_CAP
= {1: "NM_SUPPORTED", 2: "CARRIER_DETECT",}
117 "UNKNOWN", "UNMANAGED", "UNAVAILABLE", "DISCONNECTED", "PREPARE", "CONFIG",
118 "NEED_AUTH", "IP_CONFIG", "ACTIVATED", "FAILED",]
120 DEVICE_TYPE
= ["UNKNOWN", "802_3_ETHERNET", "802_11_WIRELESS", "GSM", "CDMA",]
122 def dump_ip4config(opath
):
124 o
= bus
.get_object(NMC
, opath
)
125 pi
= dbus
.Interface(o
, PI
)
126 for P
in ["Address", "Netmask", "Broadcast", "Gateway",]:
127 print " %s: %s" % (P
, ip_str(pi
.Get(NMI
, P
)))
128 for P
in ["Hostname", "Nameservers", "Domains", "NisDomain", "NisServers"]:
129 print " %s: %s" % (P
, pi
.Get(NMI
, P
))
132 def dump_device(opath
):
133 devo
= bus
.get_object(NMC
, opath
)
134 devpi
= dbus
.Interface(devo
, PI
)
135 # "Ip4Config", only for NM_DEVICE_STATE_ACTIVATED
136 for P
in ["Udi", "Interface", "Driver",]:
137 print " %s: %s" % (P
, devpi
.Get(NMI
, P
))
138 addr
= devpi
.Get(NMI
, "Ip4Address")
139 print " Ip4Address:", ip_str(addr
)
140 caps
= devpi
.Get(NMI
, "Capabilities")
141 print " Capabilities:", bitmask_str(NM_DEVICE_CAP
, caps
)
142 state
= NM_DEVICE_STATE
[devpi
.Get(NMI
, "State")]
143 print " Dev State:", state
144 if state
== "ACTIVATED":
145 dump_ip4config(devpi
.Get(NMI
, "Ip4Config"))
146 dt
= DEVICE_TYPE
[devpi
.Get(NMI
, "DeviceType")]
147 print " Dev Type:", dt
148 if dt
== "802_3_ETHERNET":
149 dump_device_eth(opath
)
150 elif dt
== "802_11_WIRELESS":
151 dump_device_wifi(opath
)
153 def dump_device_06(opath
):
154 devo
= bus
.get_object(NMC
, opath
)
156 devi
= dbus
.Interface(devo
, NMI
+ ".Device")
157 print " Driver:", devi
.getDriver()
158 props
= devi
.getProperties()
159 # TODO: annotate struct
163 def dump_device_eth(opath
):
164 devo
= bus
.get_object(NMC
, opath
)
165 devpi
= dbus
.Interface(devo
, PI
)
166 for P
in ["HwAddress", "Speed", "Carrier"]:
167 print " %s: %s" % (P
, devpi
.Get(NMI
, P
))
169 IW_MODE
= ["AUTO", "ADHOC", "INFRA", "MASTER", "REPEAT", "SECOND", "MONITOR",]
171 NM_802_11_DEVICE_CAP
= {1:"CIPHER_WEP40", 2:"CIPHER_WEP104", 4:"CIPHER_TKIP",
172 8:"CIPHER_CCMP", 16:"WPA", 32:"RSN",}
174 def dump_device_wifi(opath
):
175 devo
= bus
.get_object(NMC
, opath
)
176 devpi
= dbus
.Interface(devo
, PI
)
177 print " Dev Mode:", IW_MODE
[devpi
.Get(NMI
, "Mode")]
178 wcaps
= devpi
.Get(NMI
, "WirelessCapabilities")
179 print " Wifi Capabilities:", bitmask_str(NM_802_11_DEVICE_CAP
, wcaps
)
180 for P
in ["HwAddress", "Bitrate", "ActiveAccessPoint"]:
181 print " %s: %s" % (P
, devpi
.Get(NMI
, P
))
183 print " Access Points"
184 wdevi
= dbus
.Interface(devo
, NMI
+ ".Device.Wireless")
185 aps
= wdevi
.GetAccessPoints()
188 dump_access_point(ap
)
190 NM_802_11_AP_FLAGS
= {1: "PRIVACY",}
193 1: "PAIR_WEP40", 2: "PAIR_WEP104", 4: "PAIR_TKIP", 8: "PAIR_CCMP",
194 16: "GROUP_WEP40", 32: "GROUP_WEP104", 64: "GROUP_TKIP",
195 128: "GROUP_CCMP", 256: "KEY_MGMT_PSK", 512: "KEY_MGMT_802_1X",}
203 def dump_access_point(opath
):
204 apo
= bus
.get_object(NMC
, opath
)
205 appi
= dbus
.Interface(apo
, PI
)
206 print " Ssid:", ssid_str(appi
.Get(NMI
, "Ssid"))
207 # FIXME strength as number
208 for P
in ["Frequency", "HwAddress", "MaxBitrate",]:
209 print " %s: %s" % (P
, appi
.Get(NMI
, P
))
210 print " Strength:", int(appi
.Get(NMI
, "Strength"))
211 print " AP Mode:", IW_MODE
[appi
.Get(NMI
, "Mode")]
212 print " AP Flags:", bitmask_str(NM_802_11_AP_FLAGS
,
213 appi
.Get(NMI
, "Flags"))
214 print " AP WPA Flags:", bitmask_str(NM_802_11_AP_SEC
,
215 appi
.Get(NMI
, "WpaFlags"))
216 print " AP RSN Flags:", bitmask_str(NM_802_11_AP_SEC
,
217 appi
.Get(NMI
, "RsnFlags"))
219 def dump_settings(svc
, obj
):
220 si
= dbus
.Interface(obj
, 'org.freedesktop.NetworkManagerSettings')
221 conns
= si
.ListConnections()
223 dump_settings_conn(svc
, conn
)
225 def dump_system_settings(svc
, obj
):
226 sspi
= dbus
.Interface(obj
, PI
)
227 print "Unmanaged Devices"
228 umds
= sspi
.Get(NMI
, "UnmanagedDevices")
231 dump_settings_conn(svc
, conn
)
233 def dump_settings_dict(settings
):
234 for n1
, v1
in settings
.iteritems():
236 for n2
, v2
in v1
.iteritems():
237 print " %s: %s" % (n2
, v2
)
239 def dump_settings_conn(svc
, opath
):
241 co
= bus
.get_object(svc
, opath
)
242 ci
= dbus
.Interface(co
, 'org.freedesktop.NetworkManagerSettings.Connection')
243 print " Id:", ci
.GetID()
244 settings
= ci
.GetSettings()
245 dump_settings_dict(settings
)
246 si
= dbus
.Interface(co
, 'org.freedesktop.NetworkManagerSettings.Connection.Secrets')
248 secrets
= si
.GetSecrets("802-11-wireless-security",[],False)
249 dump_settings_dict(secrets
)
252 loop
= gobject
.MainLoop()
262 if arg
== "-h" or arg
== "--help":
266 elif arg
== "-d" or arg
== "--dev":
268 elif arg
== "-c" or arg
== "--actcon":
270 elif arg
== "-u" or arg
== "--usrcon":
272 elif arg
== "-s" or arg
== "--syscon":
274 elif arg
== "-a" or arg
== "--ap":
276 DUMP_DEVS
= True # aps are under wifi devs
280 elif arg
== "--loop":
285 print " -6, --06 assume NetworkManager 0.6 API"
286 print " -d, --dev list devices"
287 print " -c, --actcon list active connections"
288 print " -s, --syscon list system connection settings"
289 print " -u, --usrcon list user connection settings (can CRASH nm-applet)"
290 print " -a, --ap list found access points"
292 print " --loop loop to show dbus signals"
295 nmp
= '/org/freedesktop/NetworkManager'
296 # TODO autodetect (try getDevices?)
303 print "SYSTEM Connections"
304 sso
= bus
.get_object(SSC
, '/org/freedesktop/NetworkManagerSettings')
305 dump_settings(SSC
, sso
)
306 dump_system_settings(SSC
, sso
)
309 print "USER Connections"
310 uso
= bus
.get_object(USC
, '/org/freedesktop/NetworkManagerSettings')
311 dump_settings(USC
, uso
)
315 class UserSettings(dbus
.service
.Object
):
316 def __init__(self
, opath
):
317 dbus
.service
.Object
.__init
__(self
, bus
, opath
)
319 @dbus.service
.method(dbus_interface
='org.freedesktop.NetworkManagerSettings',
320 in_signature
='', out_signature
='ao')
321 def ListConnections(self
):
322 return ["/org/freedesktop/NetworkManagerSettings/1"]
324 #this is for EMITTING a signal, not receiving it
325 @dbus.service
.signal(dbus_interface
='org.freedesktop.NetworkManagerSettings',
327 def NewConnection(self
, opath
):
328 print "signalling newconn:", opath
330 class Connection(dbus
.service
.Object
):
331 def __init__(self
, opath
):
332 dbus
.service
.Object
.__init
__(self
, bus
, opath
)
334 @dbus.service
.method(dbus_interface
='org.freedesktop.NetworkManagerSettings.Connection',
335 in_signature
='', out_signature
='a{sa{sv}}')
336 def GetSettings(self
):
340 'type': '802-11-wireless',
343 'ssid': dbus
.ByteArray('frogs'),
344 'mode': 'infrastructure',
345 'security': '802-11-wireless-security',
347 '802-11-wireless-security': {
350 # 'auth-alg': 'shared',
353 @dbus.service
.method(dbus_interface
='org.freedesktop.NetworkManagerSettings.Connection.Secrets',
354 in_signature
='sasb', out_signature
='a{sa{sv}}')
355 def GetSecrets(self
,tag
,hints
,ask
):
357 '802-11-wireless-security': {
361 'wep-key0': '66666666666666666666666666', # secret hint
366 nmo
= bus
.get_object(NMC
, nmp
)
367 nmi
= dbus
.Interface(nmo
, NMI
)
369 us
= UserSettings("/org/freedesktop/NetworkManagerSettings")
370 c
= Connection("/org/freedesktop/NetworkManagerSettings/1")
372 bus
.request_name(USC
)
373 #os.system("sleep 3")
375 def reply_handler(*args
):
380 def uni_handler(*args
):
389 nmi
.ActivateConnection(USC
,
390 "/org/freedesktop/NetworkManagerSettings/1",
391 # "/org/freedesktop/Hal/devices/net_00_11_d8_70_00_2f", # ralink
392 "/org/freedesktop/Hal/devices/net_00_11_d8_70_00_2f_0", # ralink
393 "/org/freedesktop/NetworkManager/AccessPoint/0",
394 reply_handler
=reply_handler
,
395 error_handler
=uni_handler
,
409 words
= map (a1
, words
)
410 return sep
.join(words
)
412 def abbr_signal_handler(*args
, **kwargs
):
413 ifc
= kwargs
["interface"]
414 sig
= kwargs
["member"]
415 opath
= kwargs
["path"]
416 line
= "A %s: %s: %s%s" % (abbrev(ifc
,".") , abbrev(opath
,"/") , sig
, args
)
419 bus
.add_signal_receiver(abbr_signal_handler
,
421 interface_keyword
="interface",
422 member_keyword
="member")
425 us
.NewConnection("/org/freedesktop/NetworkManagerSettings/1")