Releases/0.2/NetworkAPI

Mamona Network API

This page describe NetworkManager dbus methods that were adopted as Mamona Network API. Only some methods are described here, mainly the basic ones. We will describe more methods on demand.

Mamona provides (through NetworkManager) an API to network management. We chose 0.6.6 because 0.7 tree is a little bit unstable. The tested encryption are:

  • Open (No encryption)
  • WEP 64/128 bits Open/Shared
  • WPA version 1/2 PSK TKIP/CCMP

As the 0.6.x branch has a continuous background scanning we made a patch to prevent this feature.
The --no-scan daemon option, a dbus method call (performScan) and a dbus signal (ScanPerformed) were created to save more battery when using wifi.

You can control NetworkManager through dbus-send or netm-cli? (project that rsalveti have adapted).

Below you can find the dbus methods description.

List Network Devices

SERVICE: org.freedesktop.NetworkManager
PATH: /org/freedesktop/NetworkManager

METHOD: getDevices()

Ask for a network scanning (*)

(*) Added by Mamona Team

SERVICE: org.freedesktop.NetworkManager
PATH: /org/freedesktop/NetworkManager/Devices/<INTERFACE>

INTERFACE: eth0, eth1, wlan0, ath0, ...

METHOD: performScan()

NOTE: This method call is non-blocking. The results are available when the signal ScanPerformed is emitted.
This signal has the parameter "OBJPATH:/org/freedesktop/NetworkManager/Devices/<INTERFACE>"

Get device properties (including network AP list)

SERVICE: org.freedesktop.NetworkManager
PATH: /org/freedesktop/NetworkManager/Devices/<INTERFACE>

INTERFACE: eth0, eth1, wlan0, ath0, ...

METHOD: getProperties()

Get network information

SERVICE: org.freedesktop.NetworkManager
PATH: /org/freedesktop/NetworkManager/Devices/<INTERFACE>/Networks/<SSID>

INTERFACE: eth0, eth1, wlan0, ath0, ...
SSID: The network ssid string

METHOD: getProperties()

Connect

SERVICE: org.freedesktop.NetworkManager
PATH: /org/freedesktop/NetworkManager

INTERFACE: eth0, eth1, wlan0, ath0, ...
SSID: The network ssid string

Constants used to connect

* INT32 we_cipher
	IW_AUTH_CIPHER_NONE		1	# Open
	IW_AUTH_CIPHER_WEP40		2	# WEP 64bits
	IW_AUTH_CIPHER_WEP104		10	# WEP 128bits
	NM_AUTH_TYPE_WPA_PSK_AUTO	0	# Automatic selection TKIP/CCMP
	IW_AUTH_CIPHER_TKIP		4	# WPA1/WPA2 TKIP
	IW_AUTH_CIPHER_CCMP		8	# WPA1/WPA2 CCMP
	NM_AUTH_TYPE_WPA_EAP		20
	NM_AUTH_TYPE_LEAP		40

* INT32 auth_alg
	IW_AUTH_ALG_OPEN_SYSTEM		1	# WEP 40/104 open
	IW_AUTH_ALG_SHARED_KEY		2	# WEP 40/104 shared

* INT32 wpa_version
	IW_AUTH_WPA_VERSION_WPA		2	# WPA1
	IW_AUTH_WPA_VERSION_WPA2	4	# WPA2

* INT32 key_mgmt
	IW_AUTH_KEY_MGMT_802_1X		1	# WPA Enterprise
	IW_AUTH_KEY_MGMT_PSK		2	# WPA PSK

Open

METHOD: setActiveDevice (OBJPATH dev, STRING ssid, INT32 we_cipher)

dev : /org/freedesktop/NetworkManager/Devices/<INTERFACE>
ssid : <SSID>
we_cipher : IW_AUTH_CIPHER_NONE

WEP 64/128 bits open/shared

METHOD: setActiveDevice (OBJPATH dev, STRING ssid, INT32 we_cipher, STRING key, INT32 auth_alg)

dev : /org/freedesktop/NetworkManager/Devices/<INTERFACE>
ssid : <SSID>
we_cipher: IW_AUTH_CIPHER_WEP40 | IW_AUTH_CIPHER_WEP104
key(*) : HEXA password
auth_alg : IW_AUTH_ALG_OPEN_SYSTEM | IW_AUTH_ALG_SHARED_KEY

(*) More informations about hex/ascii WEP keys:
 http://it.toolbox.com/blogs/unwired/converting-a-phrase-to-hex-for-a-wep-key-13024
 http://it.toolbox.com/blogs/unwired/wep-encryption-40-64-104-128-bitwhats-the-difference-12705

WPA1/WPA2 PSK

METHOD: setActiveDevice (OBJPATH dev, STRING ssid, INT32 we_cipher, STRING key, INT32 wpa_version, INT32 key_mgmt)

dev : /org/freedesktop/NetworkManager/Devices/<INTERFACE>
ssid : <SSID>
we_cipher : NM_AUTH_TYPE_WPA_PSK_AUTO | IW_AUTH_CIPHER_TKIP | IW_AUTH_CIPHER_CCMP
key(*) : 256-bits PSK password (SHA1 like)
wpa_version: IW_AUTH_WPA_VERSION_WPA | IW_AUTH_WPA_VERSION_WPA2
key_mgmt : IW_AUTH_KEY_MGMT_PSK

(*) to generate a 256-bits PSK password from a ASCII password run

sh$ wpa_passphrase <SSID> <PASSWORD>

Template of dbus-send command

If you wanna control NetworkManager, you can use dbus-send, use the following template:

sh$ dbus-send --system --type=method_call --print-reply --dest=<SERVICE> <PATH> \
<SERVICE>.<METHOD_CALL> <METHOD PARAMETERS>

The method parameters are separated by spaces and has the format <TYPE>:<VALUE>

For instance, to connect to a WPA1-PSK network you can use:

sh$ dbus-send --system --type=method_call --print-reply --dest=org.freedesktop.NetworkManager \
/org/freedesktop/NetworkManager org.freedesktop.NetworkManager.setActiveDevice \
objpath:/org/freedesktop/NetworkManager/Devices/wlan0 string:mamonawifi int32:0 \
string:f16b81c4cfe0228b15f4f33b1911f32a8b843014c657fc07a1b7421cfcf2fab0 int32:2 int32:2