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
