Re: Implementing 'route' command using NM+DBUS



Hi Dan,
Thanks a lot. It was great help. I got most of the things clear from this mail.

The things I want to work with is,
Firstly, I want to check the available network connections (interfaces) and then want to choose a particular connection/interface of my own as the default connection, not the one by default provided by NM, (as sometime I prefer other parameters 3G/satellite/wlan connections etc. e.g. 3G connections are preferable than a satellite terminal connection through Ethernet)

** So please let me know, how can I change the default route to a particular connection (or interface eth0/wlan1/wlan2/pp0 etc.). I found no such type of method in NM DBus Spec. I tried with
org.freedesktop.NetworkManager-> ActivateConnection ( s: service_name, o: connection, o: device, o: specific_object ) → o
by my own method call, 
    ni->activateConnection(activeCon.serviceName(), activeCon.connection(), devicePath, activeCon.specificObject());

but it did not work as I expected.
The Qt project folder with binary executable - nm, test source code - main.cpp is dumped at http://folk.ntnu.no/ashraful/code/nm/

[> work like , "route delete default", then "route add default ..."]

I have tested with your tips and it works well. Got all the connections, their corresponding interfaces and current default route.
One deviance is that, when I deactivate a connection, the connection is deactivated, shows in the small window, but NM runs again and establish another connection with the same device. i.e. I have two WLAN, WLAN1 and WLAN2, connection with WLAN2 is deactivated by dbus call, but the device become again active.

Regards,
Ashraf


On Tue, 2009-11-17 at 13:23 -0800, Dan Williams wrote:
On Mon, 2009-11-16 at 18:42 +0100, Syed Md. Ashraful Karim wrote:
> Hi Lorn,
> Thanks your very much for the link on Qt and NM Dbus wrapper
> implementations. it saved my last weeks attempts to connect NM using
> Qt. However, still I missed something, like finding routes/ip address
> in the IP4Config interface, default gateway etc. 

There's a few resources that can help you.  The introspection data is
what the NM DBus interface is directly constructed from.  You can figure
out the supported properties and methods there.

http://cgit.freedesktop.org/NetworkManager/NetworkManager/tree/introspection

The D-Bus specification is also constructed directly from the
introspection data:

http://projects.gnome.org/NetworkManager/developers/spec-08.html

A description of how NM configuration and settings work is here:

http://live.gnome.org/NetworkManagerConfiguration

> Can you please help finding out,
> - default gateway of each interface

The IP4Config object provides you a list of IP addresses, and each
address can have a gateway.

For example, lets get the current active connection list:

[dcbw localhost ~]$ dbus-send --system --print-reply --dest=org.freedesktop.NetworkManager /org/freedesktop/NetworkManager org.freedesktop.DBus.Properties.Get string:org.freedesktop.NetworkManager string:ActiveConnections
method return sender=:1.406 -> dest=:1.612 reply_serial=2
   variant       array [
         object path "/org/freedesktop/NetworkManager/ActiveConnection/7"
         object path "/org/freedesktop/NetworkManager/ActiveConnection/8"
      ]

And get the Devices property for the first active connection:

[dcbw localhost ~]$ dbus-send --system --print-reply --dest=org.freedesktop.NetworkManager /org/freedesktop/NetworkManager/ActiveConnection/7 org.freedesktop.DBus.Properties.Get string:org.freedesktop.NetworkManager.ActiveConnection string:Devices
method return sender=:1.406 -> dest=:1.613 reply_serial=2
   variant       array [
         object path "/org/freedesktop/NetworkManager/Devices/1"
      ]

Great, we've got the active hardware device.  Let's get it's IP4Config object:

dcbw localhost ~]$ dbus-send --system --print-reply --dest=org.freedesktop.NetworkManager /org/freedesktop/NetworkManager/Devices/1 org.freedesktop.DBus.Properties.Get string:org.freedesktop.NetworkManager.Device string:Ip4Config
method return sender=:1.406 -> dest=:1.617 reply_serial=2
   variant       object path "/org/freedesktop/NetworkManager/IP4Config/4"

Now, lets ask the IP4 config object what IP addresses it has:

[dcbw localhost ~]$ dbus-send --system --print-reply --dest=org.freedesktop.NetworkManager /org/freedesktop/NetworkManager/IP4Config/4 org.freedesktop.DBus.Properties.Get string:org.freedesktop.NetworkManager.IP4Config string:Addresses
method return sender=:1.406 -> dest=:1.621 reply_serial=2
   variant       array [
         array [
            uint32 1711384768
            uint32 24
            uint32 16885952
         ]
      ]

from the D-Bus specification, we know the format of the reply.  The 3rd
uint32 is the that addresses gateway in network byte order.  Most
devices will only have one.   But that is the gateway you're looking
for.

> - current default route of the system, and how can I change the
> default route using NM Dbus, ( earlier i was calling command line tool
> like, route add/delete default gw ... ). Now I want to do it by DBus
> call to NM

To change the default route, tell NetworkManager to activate another
network connection that should have the default route that you want.
What exactly are you trying to do?

> - How to activate a particular interface (wlan0/eth0/ppp0). I cannot
> use the following function in your class, how could I get these
> parameters? is activateConnection means to set the default route to
> that interface? or is there any way to set the default route to a
> particular interface/ or its gateway?

NetworkManager works on "Connection" objects, which describe all the
settings needed to connect to a particular network.  You tell
NetworkManager to activate a certain connection, not a specific device.
Connections can also apply to more than one device, or only to a
specific device.  Device names change and users can plug all sorts of
devices into the system, so you almost never want to activate "eth0"
because an ethernet device wont' always be eth0.

Connections are stored by "settings services" (see
NetworkManagerConfiguration linked to above).  There are two of these;
the user settings service, which is typically an applet running in the
user's session, and a system settings service which is usually
NetworkManager itself.

So you tell NetworkManager to activate a connection provided by one of
the two settings services.  The D-Bus specification has more details on
that as well in the description of the ActivateConnection method.

Dan





[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]