This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Linux: Implement opensock using Netlink sockets


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]