[PATCH] Linux: Implement opensock using Netlink sockets

Florian Weimer fweimer@redhat.com
Mon Jun 18 14:25:00 GMT 2018


On 06/18/2018 03:56 PM, Adhemerval Zanella wrote:
> 
> 
> On 18/06/2018 07:50, Florian Weimer wrote:
>> inet/tst-inet6_scopeid_pton uses __opensock indirectly, to call ioctl
>> with SIOCGIFINDEX, and it still works after this change.
>>
>> 2018-06-18  Florian Weimer  <fweimer@redhat.com>
>>
>> 	* sysdeps/unix/sysv/linux/opensock.c (__opensock): Unconditionally
>> 	return a Netlink socket.
>> 	* sysdeps/unix/sysv/linux/s390/opensock.c: Remove file.
> 
> Similar to a previous attempt to use AF_NETLINK sockets as default [1],
> I am seeing some regression on testcases with Linux 4.4.0-116-generic:
> 
> FAIL: inet/bug-if1
> FAIL: inet/test_ifindex
> FAIL: inet/tst-inet6_scopeid_pton
> 
> $ ./testrun.sh inet/bug-if1
> errno = 95 (Operation not supported), expected 6 (No such device or address)
> 
> $ strace -f ./testrun.sh inet/bug-if1 --direct
> [...]
> socket(AF_NETLINK, SOCK_DGRAM|SOCK_CLOEXEC, NETLINK_ROUTE) = 3
> ioctl(3, SIOCGIFNAME, {ifr_index=0})    = -1 EOPNOTSUPP (Operation not supported)
> [...]

Huh.  Any idea why this happens?  I don't see how this is possible based 
on the kernel sources.

Ahh, it's been fixed since then.  Netlink sockets were one of the few 
which did not perform ENOIOCTLCMD fallback.  This was changed in kernel 4.6:

commit 025c68186e07afaededa84143f1a22f273cd3f67
Author: David Decotigny <decot@googlers.com>
Date:   Mon Mar 21 10:15:35 2016 -0700

     netlink: add support for NIC driver ioctls

     By returning -ENOIOCTLCMD, sock_do_ioctl() falls back to calling
     dev_ioctl(), which provides support for NIC driver ioctls, which
     includes ethtool support. This is similar to the way ioctls are
     handled in udp.c or tcp.c.

     This removes the requirement that ethtool for example be tied to the
     support of a specific L3 protocol (ethtool uses an AF_INET socket
     today).

It's unfortunate that it took that long to make this change.

Thanks,
Florian



More information about the Libc-alpha mailing list