Hi,

On Tue, 2014-04-29 at 20:18 -0400, Eduardo Abinader wrote:
> The following two patches are related somehow in the
> scenario where wifi dongle is removed and inserted again,
> and systemd-udev renames device. 
> Sytemd-udev may have predefined device names, which does 
> not necessarily follow kernel device sequential 
> numbering. The renaming of the device causes the kernel 
> to issue a new RTM_NEWLINK, but keeping same ifindex, thus 
> falling in a scenario where connman is unable to handle 
> currently. Observe there is no RTM_DELLINK message being 
> issued in this rename action.
> 
> Patch(1/2): tried to rely on ifi_change, but I do not feel
> secure to use it, as it is still stated to be set as
> 0xfffffff and reserved for future use, although have found
> a pattern for the values filled in by rtnetlink by running and 
> also taking a look at kernel code. 
> (refer also to this link: 
> https://lists.connman.net/pipermail/connman/2012-September/011232.html)

I gave this a head scratching, seems there are a few more pieces in this
puzzle. Sent an RFC patch set regarding the issue as well, that one
eliminates device->interface completely. It may or may not be what we
want, at least it temporarily gets the problem solved by not storing
anything at all.

That RFC patch set exposes one interesting thing: the
connman_inet_ifname/connman_inet_ifindex function pair uses and ioctl to
get the desired name or index. This is information we'd readily have in
struct device, were we to track ifname changes properly. Those ioctls
are totally unnecessary, we should make our code better and use what we
already get for free.

My proposal on the whole affair would be this:
 - provide proper and simple rtnl ifname tracking for the device
   structure, perhaps by adding ifname to the newlink callback
   function and keep the device in sync with all necessary blacklisting.
   This basically keeps device->interface that RFC 2/3 eliminated.
 - create something like connman_device_ifname/connman_device_ifindex
   function pairs that query the device structures for the necessary
   information.
 - switch over from connman_inet_ifname/connman_inet_ifindex to the new
   ones and eliminate these ioctl based ones

Problem is that I didn't look any further, perhaps the only argument
there is around when connman_device_ifname is used is the index, not the
whole device struct. Thus one may need to do another mapping between
ifname and device struct in order to get the index. Or something.

Any takers for this task?

> Patch(2/2): while preparing this patch, noticed segfault in 
> scan_callback, when removing wifi dongle. Thus the second 
> patch refers to this occurrence.

Yep, this one I'll apply. Thanks!

Cheers,

        Patrik


_______________________________________________
connman mailing list
connman@connman.net
https://lists.connman.net/mailman/listinfo/connman

Reply via email to