Re: Implementing 'route' command using NM+DBUS



On Wed, 2009-11-18 at 17:57 +0100, Syed Md. Ashraful Karim wrote:
> 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)

NetworkManager is intended to control the default internet connection
(and thus the default route and DNS servers).  If NetworkManager can't
do that for a particular use-case, then we should enhance NetworkManager
to do so.  NM simply can't provide the API or desirable behavior it does
provide without handling the default route (endlessly discussed
previously on this list).  If NetworkManager cannot handle the default
internet connection then it may be the case that you want to turn
NetworkManager off.

Dan

> ** 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]