SIr,<br>Regards.<br><br>Thanks a ton for the reply.<br><br>Thanks, Thanks, Thanks !!!<br><br>That solved it !!!<br><br>Following is the modified program, along with its output (just one quirk; as can be seen from the output, occassionally there are (spurious) 'AccessPointAdded' signals received, *with a blank SSID*. Don't know what the reason may be).<br>
<br><br>Anyways, here is the program (connection-activation logic excluded) and output :<br><br>================================================================================<br>"""<br>LEARNINGS :<br><br>
A system usually has only one (fixed) wireless device hardware.<br>Thus, no callbacks for addition/removal of this device are triggered.<br>(Can't thank you enough Sascha !!! :) :) )<br><br>However, this (single) hardware has the capacity to pair with multiple access-points.<br>
<br>In Networkmanager (at least python APIs), each access-point is<br>represented by its path, which serves as its key. Using this key, other<br>properties (notably SSID) can be retreived.<br><br><br><br>For a wired device, it again is fixed; thus no addition/removal<br>
callbacks (Thanks again Sascha). There is no concept of SSID; a wired device is just<br>a medium for physical connection. Moreover, there is one-to-one<br>correspondence for a wired-device, and the network.<br>"""<br>
<br>"""<br>TESTS DONE ::<br><br>a. Additon/Removal of USB Modem triggers corresponding callbacks.<br>b. Addition/Removal of wireless access-points triggers callbacks.<br>"""<br><br><br>import dbus<br>
from dbus.mainloop.glib import DBusGMainLoop<br><br>DBusGMainLoop(set_as_default=True)<br>bus = dbus.SystemBus()<br><br>"""<br>The names have been designed, keeping in consistency of the<br>nomenclature used in "add_signal_receiver" method.<br>
"""<br>NM_BUS_NAME = 'org.freedesktop.NetworkManager'<br>NM_PATH = '/org/freedesktop/NetworkManager'<br>NM_DBUS_INTERFACE = 'org.freedesktop.NetworkManager'<br>
<br>"""<br>Note that the following is not specifically tied to Network Manager.<br>"""<br>DBUS_PROPS_DBUS_INTERFACE = 'org.freedesktop.DBus.Properties'<br><br>"""<br>
Some more :)<br>"""<br>NM_DEVICE_DBUS_INTERFACE = 'org.freedesktop.NetworkManager.Device'<br>NM_WIRED_DEVICE_INTERFACE = 'org.freedesktop.NetworkManager.Device.Wired'<br>NM_WIFI_DEVICE_INTERFACE = 'org.freedesktop.NetworkManager.Device.Wireless'<br>
NM_ACCESS_POINT_DBUS_INTERFACE = 'org.freedesktop.NetworkManager.AccessPoint'<br><br><br>class NMDbusPathProcessor:<br> """<br> This class encapsulates functions, that would be used for<br> processing any networkmanager-dbus-path.<br>
"""<br><br> def get_nm_object(self, nm_dbus_path):<br> """<br> returns dbus-object for the nm-dbus-path.<br> """<br> return bus.get_object(NM_BUS_NAME, nm_dbus_path)<br>
<br> def get_nm_props_interface(self, nm_dbus_path):<br> """<br> returns the interface, encapsulating the nm-dbus-path.<br> """<br> nm_object = self.get_nm_object(nm_dbus_path)<br>
return dbus.Interface(nm_object, DBUS_PROPS_DBUS_INTERFACE)<br><br><br>nm_dbus_path_processor = NMDbusPathProcessor()<br><br><br>class BaseTypeProcessor:<br> """<br> This class is a virtual class; each subtype of which implements a<br>
particular hierarchy of NetworkManager architecture. (or kind of :)<br> )<br> """<br><br> def __init__(self, base_path):<br> self._base_path = base_path<br> self._base_obj = nm_dbus_path_processor.get_nm_object(base_path)<br>
<br><br> def initiate(self):<br> """<br> Did not put in the __init__, as did not want to get into the<br> dynamics of "use-before-initialization" problem.<br> """<br>
self._base_interface = dbus.Interface(self._base_obj,<br> self.get_interface_identifier())<br><br> """<br> List the exiting things.<br> """<br>
self.existing_things()<br><br><br> """<br> Add callbacks for runtime addition and removal.<br> """<br> bus.add_signal_receiver(self.thing_added_cb,<br> signal_name=self.get_thing_added_signal_name(),<br>
dbus_interface=self.get_interface_identifier())<br> bus.add_signal_receiver(self.thing_removed_cb,<br> signal_name=self.get_thing_removed_signal_name(),<br>
dbus_interface=self.get_interface_identifier())<br><br> def existing_things(self):<br> """<br> Returns the existing "things"<br> For eg., as a starting point of networkmanager, "things" would<br>
be devices.<br> For a wireless device, "things" would be access-points.<br> """<br> all_things_func = self.get_all_things_func()<br> all_things_nm_dbus_paths = all_things_func()<br>
for nm_dbus_path in all_things_nm_dbus_paths:<br> self.show_info('Found', nm_dbus_path)<br> self.extra_processing(nm_dbus_path)<br><br><br> def thing_added_cb(self, nm_dbus_path):<br>
"""<br> callbacks such as 'DeviceAdded', 'AccessPointAdded' always pass<br> a dbus-path to the callback method; this dbus-method is the<br> key. from which further processing takes place.<br>
"""<br> self.show_info('Added', nm_dbus_path)<br> self.extra_processing(nm_dbus_path)<br><br> def thing_removed_cb(self, nm_dbus_path):<br> """<br> callbacks such as 'DeviceRemoved', 'AccessPointRemoved' always<br>
pass a dbus-path key. NOTE THAT NO FURTHER PROCESSING CAN BE<br> DONE ON THIS DBUS-PATH - this is the last-rites method.'<br> """<br> self.show_info('Removed', nm_dbus_path)<br>
# Note that extra processing is SIMPLY NOT POSSIBLE.<br><br> def get_thing_type(self):<br> return NotImplementedError<br><br> def show_info(self, action, nm_dbus_path):<br> print '\n'<br>
thing_type = self.get_thing_type()<br> print action + ' ( ' + thing_type + ' ) :: ' + nm_dbus_path<br><br> def extra_processing(self, nm_dbus_path):<br> """<br> This is optional. A subtype may choose to add extra<br>
functionality"""<br> pass<br><br> def get_all_things_func(self):<br> raise NotImplementedError<br><br> def get_thing_added_signal_name(self):<br> raise NotImplementedError<br>
<br> def get_thing_removed_signal_name(self):<br> raise NotImplementedError<br><br> def get_interface_identifier(self):<br> raise NotImplementedError<br><br><br>class NMAccessPointsProcessor(BaseTypeProcessor):<br>
"""<br> Processor for access-points for a (singular) device.<br> """<br><br> def __init__(self, wireless_device_nm_path):<br> BaseTypeProcessor.__init__(self, wireless_device_nm_path)<br>
<br> def get_thing_type(self):<br> return 'Access Point'<br><br> def get_all_things_func(self):<br> return self._base_interface.GetAccessPoints<br><br> def get_thing_added_signal_name(self):<br>
return 'AccessPointAdded'<br><br> def get_thing_removed_signal_name(self):<br> return 'AccessPointRemoved'<br><br><br>class NMWiredAccessPointsProcessor(NMAccessPointsProcessor):<br> """<br>
Processor for access-points for a (singular) wired device.<br> """<br> """<br> THERE IS ABSOLUTELY NO CONCEPT OF SSID FOR A WIRED DEVICE.<br><br> def __init__(self, wired_device_nm_path):<br>
NMAccessPointsProcessor.__init__(self, wired_device_nm_path)<br><br> def get_interface_identifier(self):<br> return NM_WIRED_DEVICE_INTERFACE<br> """<br><br><br><br>class NMWirelessAccessPointsProcessor(NMAccessPointsProcessor):<br>
"""<br> Processor for access-points for a (singular) wirelessdevice.<br> """<br><br> def __init__(self, wireless_device_nm_path):<br> NMAccessPointsProcessor.__init__(self, wireless_device_nm_path)<br>
<br> def extra_processing(self, nm_wireless_access_point_path):<br> print 'SSID is :: ' + self.get_ssid(nm_wireless_access_point_path)<br><br> def get_ssid(self, nm_wireless_access_point_path):<br> access_point_obj = bus.get_object(NM_BUS_NAME, nm_wireless_access_point_path)<br>
nm_wireless_access_point_props_interface = \<br> nm_dbus_path_processor.get_nm_props_interface(nm_wireless_access_point_path)<br> ssid_dbus_byte_array = nm_wireless_access_point_props_interface.Get(NM_ACCESS_POINT_DBUS_INTERFACE, 'Ssid')<br>
<br> ssid = ""<br> for c in ssid_dbus_byte_array:<br> ssid = ssid + chr(c)<br><br> return ssid<br><br> def get_interface_identifier(self):<br> return NM_WIFI_DEVICE_INTERFACE<br>
<br><br><br>class NMDevicesProcessor(BaseTypeProcessor):<br> """<br> Processor for devices.<br> """<br><br> def __init__(self, nm_path):<br> BaseTypeProcessor.__init__(self, nm_path)<br>
<br> def get_thing_type(self):<br> return 'Device'<br><br> def extra_processing(self, nm_device_path):<br> device_type = self.get_nm_device_type(nm_device_path)<br> print 'Device Type is :: ' + str(device_type)<br>
<br><br> """<br> I REPEAT, THERE IS NO CONCEPT OF SSID FOR A WIRED DEVICE.<br><br> if device_type == 1:<br> print '\nWired Hardware found !!'<br> NMWiredAccessPointsProcessor(nm_device_path).initiate()<br>
"""<br><br><br> if device_type == 2:<br> print '\nWireless Hardware found !!'<br> NMWirelessAccessPointsProcessor(nm_device_path).initiate()<br><br> def get_nm_device_type(self, nm_device_path):<br>
nm_interface = nm_dbus_path_processor.get_nm_props_interface(nm_device_path)<br> return nm_interface.Get(NM_DEVICE_DBUS_INTERFACE, 'DeviceType')<br><br> def get_all_things_func(self):<br> return self._base_interface.GetDevices<br>
<br> def get_thing_added_signal_name(self):<br> return 'DeviceAdded'<br><br> def get_thing_removed_signal_name(self):<br> return 'DeviceRemoved'<br><br> def get_interface_identifier(self):<br>
return NM_DBUS_INTERFACE<br><br><br>try:<br> bus = dbus.SystemBus()<br> NMDevicesProcessor(NM_PATH).initiate()<br>except dbus.DBusException, e:<br> print e<br><br><br><br><br>import gobject<br>gobject.MainLoop().run()<br>
=============================================================================================<br><br><br><br><br>=============================================================================================<br>[ajay@ajay ~]$ python learn_networkmanager.py<br>
<br><br>Found ( Device ) :: /org/freedesktop/NetworkManager/Devices/0<br>Device Type is :: 2<br><br>Wireless Hardware found !!<br><br><br>Found ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/13<br>SSID is :: sr<br>
<br><br>Found ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/11<br>SSID is :: RT2561_6<br><br><br>Found ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/0<br>SSID is :: NegiJuhi<br><br><br>
Found ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/2<br>SSID is :: Ad-hoc Network 1<br><br><br>Found ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/1<br>SSID is :: vanshika<br><br><br>Found ( Device ) :: /org/freedesktop/NetworkManager/Devices/1<br>
Device Type is :: 1<br><br><br>Found ( Device ) :: /org/freedesktop/NetworkManager/Devices/2<br>Device Type is :: 3<br><br><br>Added ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/14<br>SSID is :: <br><br>
<br>Added ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/15<br>SSID is :: 24651045<br><br><br>Added ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/16<br>SSID is :: star<br><br><br>Added ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/17<br>
SSID is :: MTNL<br><br><br>Added ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/18<br>SSID is :: <br><br><br>Removed ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/2<br><br><br>Removed ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/14<br>
<br><br>Removed ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/12<br><br><br>Added ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/19<br>SSID is :: Ad-hoc Network 1<br><br><br>Removed ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/15<br>
<br><br>Added ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/20<br>SSID is :: 24651045<br><br><br>Added ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/21<br>SSID is :: MANUTD<br><br><br>Added ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/22<br>
SSID is :: <br><br><br>Added ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/23<br>SSID is :: <br><br><br>Added ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/24<br>SSID is :: <br><br><br>
Removed ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/20<br><br><br>Removed ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/17<br><br><br>Removed ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/11<br>
<br><br>Removed ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/6<br><br><br>Added ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/25<br>SSID is :: RT2561_6<br><br><br>Removed ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/24<br>
<br><br>Removed ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/23<br><br><br>Removed ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/22<br><br><br>Removed ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/16<br>
<br><br>Removed ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/18<br><br><br>Removed ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/13<br><br><br>Removed ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/10<br>
<br><br>Removed ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/9<br><br><br>Removed ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/8<br><br><br>Removed ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/7<br>
<br><br>Removed ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/5<br><br><br>Removed ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/4<br><br><br>Removed ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/3<br>
<br><br>Removed ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/1<br><br><br>Added ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/26<br>SSID is :: vanshika<br><br><br>Added ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/27<br>
SSID is :: <br><br><br>Added ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/28<br>SSID is :: <br><br><br>Added ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/29<br>SSID is :: <br><br><br>
Added ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/30<br>SSID is :: <br><br><br>Removed ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/21<br><br><br>Added ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/31<br>
SSID is :: sr<br><br><br>Added ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/32<br>SSID is :: 24651045<br><br><br>Added ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/33<br>SSID is :: <br>
<br><br>Added ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/34<br>SSID is :: <br><br><br>Added ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/35<br>SSID is :: <br><br><br>Removed ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/30<br>
<br><br>Added ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/36<br>SSID is :: <br><br><br>Added ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/37<br>SSID is :: <br><br><br>Removed ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/34<br>
<br><br>Removed ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/32<br><br><br>Removed ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/28<br><br><br>Removed ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/27<br>
<br><br>Added ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/38<br>SSID is :: star<br><br><br>Added ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/39<br>SSID is :: <br><br><br>Added ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/40<br>
SSID is :: <br><br><br>Added ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/41<br>SSID is :: <br><br><br>Removed ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/37<br><br><br>Removed ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/36<br>
<br><br>Removed ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/35<br><br><br>Removed ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/33<br><br><br>Removed ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/31<br>
<br><br>Added ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/42<br>SSID is :: sr<br><br><br>Added ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/43<br>SSID is :: <br><br><br>Added ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/44<br>
SSID is :: <br><br><br>Added ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/45<br>SSID is :: <br><br><br>Added ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/46<br>SSID is :: <br><br><br>
Added ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/47<br>SSID is :: <br><br><br>Removed ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/40<br><br><br>Removed ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/39<br>
<br><br>Removed ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/29<br><br><br>Added ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/48<br>SSID is :: <br><br><br>Added ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/49<br>
SSID is :: <br><br><br>Added ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/50<br>SSID is :: <br><br><br>Removed ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/45<br><br><br>Removed ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/44<br>
<br><br>Removed ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/43<br><br><br>Removed ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/42<br><br><br>Added ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/51<br>
SSID is :: MTNL<br><br><br>Removed ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/47<br><br><br>Removed ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/38<br><br><br>Added ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/52<br>
SSID is :: <br><br><br>Removed ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/25<br><br><br>Added ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/53<br>SSID is :: RT2561_6<br><br><br>Added ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/54<br>
SSID is :: MANUTD<br><br><br>Added ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/55<br>SSID is :: <br><br><br>Added ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/56<br>SSID is :: <br><br>
<br>Added ( Access Point ) :: /org/freedesktop/NetworkManager/AccessPoint/57<br>SSID is :: <br><br>Removed ( Device ) :: /org/freedesktop/NetworkManager/Devices/2<br><br>===================================================================================<br>
<br><br>Thanks a ton again :) :) :)<br><br>Regards,<br>Ajay<br><br><br><div class="gmail_quote">On Wed, Mar 7, 2012 at 4:06 AM, Sascha Silbe <span dir="ltr"><<a href="mailto:silbe@activitycentral.com">silbe@activitycentral.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Excerpts from Ajay Garg's message of 2012-03-03 04:46:33 +0100:<br>
<br>
> I have written a very basic python program, that utilizes Networkmanager<br>
> dbus-apis, to detect addition/removal of network devices.<br>
> It's working as expected, when I insert a 3G USB modem (both addition and<br>
> removal callbacks are hit as expected).<br>
><br>
> However, when I try this with<br>
><br>
> a. Inserting/Removing a wired network jack<br>
> b. Enable/Disable Wireless from the Dell Keyboard<br>
> c. On/Off the wireless modem-cum-router-cum-accesspoint<br>
><br>
> neither of the callbacks is hit.<br>
<br>
Yes, that's expected. The signals you connect to are for network<br>
_hardware_ (dis)appearing.<br>
<br>
a) is just making a new (wired) network on the existing wired ethernet<br>
interface available. NM will usually connect automatically to this<br>
new network ASAP.<br>
<br>
b) depends on how its implemented in hardware. On the XO-1, it would<br>
power down the wireless network module completely, causing it to drop<br>
off from USB and thus really cause a DeviceRemoved / DeviceAdded<br>
signal. On most systems, only the radio gets disabled, so the device<br>
will stay visible.<br>
<br>
c) is just making a wireless network (un)available. Depending on<br>
settings, NM may or may not try to connect to it automatically. In<br>
any case there's no hardware that (dis)appears, just a network<br>
(Basic Service Set (BSS) in IEEE 802.11-speak).<br>
<br>
<br>
If you want to see NM connecting to networks, you can either listen to<br>
the StateChanged signal on each device (to see when/if you're connected)<br>
or monitor [1] the (global) ActiveConnections property (which gives you<br>
a list of object paths of the active connection objects [2] that you can<br>
examine further).<br>
<br>
Sascha<br>
<br>
[1] <a href="http://projects.gnome.org/NetworkManager/developers/spec-08.html#org.freedesktop.NetworkManager.PropertiesChanged" target="_blank">http://projects.gnome.org/NetworkManager/developers/spec-08.html#org.freedesktop.NetworkManager.PropertiesChanged</a><br>
[2] <a href="http://projects.gnome.org/NetworkManager/developers/spec-08.html#org.freedesktop.NetworkManager.Connection.Active" target="_blank">http://projects.gnome.org/NetworkManager/developers/spec-08.html#org.freedesktop.NetworkManager.Connection.Active</a><br>
<span class="HOEnZb"><font color="#888888">--<br>
<a href="http://sascha.silbe.org/" target="_blank">http://sascha.silbe.org/</a><br>
<a href="http://www.infra-silbe.de/" target="_blank">http://www.infra-silbe.de/</a><br>
</font></span></blockquote></div><br>