On Fri, 2015-03-20 at 01:31 +0100, Sylvain Garaud wrote:
> Hello Dan,
>
> Thank you for the answer.
> I am using NM lib version 0.9.10.0
> I use the dbus-monitor command you provided.
> It helped me greatly to understand my problem.
>
> In most cases the ip info I am interested in was defined when the IP4Config
> propertiesChanges signal was received. But it was not always the case
> depending of the network interface type and disconnection time. My routine
> using the gi.NMClient was also missing to capture some signals that I saw
> with the dbus-monitor as sometimes they were arriving in a burst.
>
> Eventually I implemented the following solution that seems to be working
> properly.
>
> 1. I register a callback on the device "state-changed" signal
> 2. Within the callback, I try immediately to get the ip address inside the
> dhcp4 config.
> 3. If I get it I am done, otherwise it is undefined and I simply register a
> callback on the dhcp4 options signal that hopefully will arrive later.
>
> I tested it with several configuration and it seems to work correctly.
Getting the IP address through the DHCP4 config won't give you user
overrides, secondary IP addresses, or static IP configurations though.
This still sounds like a bug in NM or libnm-glib, and if you still have
the logs from dbus-monitor I'd like to take a look.
Thanks!
Dan
> Thank you so much,
>
> Sylvain
>
>
> On Wed, Mar 18, 2015 at 3:44 PM, Dan Williams <dcbw redhat com> wrote:
>
> > On Sun, 2015-03-15 at 12:46 +0100, Sylvain Garaud wrote:
> > > Hello,
> > >
> > > I am writing a small _javascript_ for gnome to grab the ip addresses of my
> > > network interfaces using imports.gi.NMClient;
> > > Basically I get the devices and connect each device to the
> > > notify::ip4-config signal to be able to update the ip address value when
> > it
> > > changes
> >
> > Which version of NM are you using?
> >
> > this.client = NMC.Client.new();
> > > this.devices = this.client.get_devices();
> > > for each (let device in this.devices) {
> > > device.connect('notify::ip4-config',Lang.bind(this,this._update));
> > > }
> > >
> > > It works fine for the wifi connection but there is a problem with the
> > > ethernet connection.
> > > After turning my ethernet connection up, the signal 'notify::ip4-config'
> > > is fired, the device state is ACTIVATED, so I try to get the ip4 config.
> > > with ipcfg = device.get_ip4_config();
> > > I get a not null ipcfg object, unfortunately ipcfg.get_addresses() is not
> > > defined yet.
> >
> > So that we can narrow the issue down, could you run:
> >
> > dbus-monitor --system
> > "type='signal',sender='org.freedesktop.NetworkManager'"
> >
> > and reproduce the problem? This will let us know the sequence of D-BUs
> > events that come directly from NetworkManager, so that we can see the
> > raw data that libnm/libnm-glib is getting.
> >
> > Dan
>
>
> > > I see in my journalctl log few seconds later, some dhcp network manager
> > > message.
> > >
> > > _update: function(device) {
> > > let ipcfg = device.get_ip4_config();
> > > if (ipcfg != null) {
> > > for each(let addr in ipcfg.get_addresses()){
> > > let num = addr.get_address();
> > > }
> > > }
> > > },
> > >
> > > How to be sure ipcfg.get_addresses() will return something ?
> > > Could someone tell me which signal to use for being sure the ip address
> > is
> > > set when calling ipcfg.get_addresses()? I tried using the
> > > 'notify::dhcp4-config' signal instead 'notify::ip4-config' without much
> > > success.
> > >
> > > Thank you very much for your help,
> > >
> > > Sylvain
> > > _______________________________________________
> > > networkmanager-list mailing list
> > > networkmanager-list gnome org
> > > https://mail.gnome.org/mailman/listinfo/networkmanager-list
> >
> >
> >
Attachment:
dbusmonitor_nm_eth.log
Description: Text document