X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fsocket-util.c;h=9b4a1b3b48f8aa53f5e6b2ec2aa8a71511024ea0;hp=a2fa13e59440e6e8d2d7b6dcdcdeb28e9dcb0460;hb=8e9b7dd86b26e1fdfedcee221ec5537c18ca5d0c;hpb=0e098b15c76e222f7de381203c0c35a75a5b2f24 diff --git a/src/socket-util.c b/src/socket-util.c index a2fa13e59..9b4a1b3b4 100644 --- a/src/socket-util.c +++ b/src/socket-util.c @@ -506,7 +506,21 @@ bool socket_address_needs_mount(const SocketAddress *a, const char *prefix) { } bool socket_ipv6_is_supported(void) { - return access("/sys/module/ipv6", F_OK) == 0; + char *l = 0; + bool enabled; + + if (access("/sys/module/ipv6", F_OK) != 0) + return 0; + + /* If we can't check "disable" parameter, assume enabled */ + if (read_one_line_file("/sys/module/ipv6/parameters/disable", &l) < 0) + return 1; + + /* If module was loaded with disable=1 no IPv6 available */ + enabled = l[0] == '0'; + free(l); + + return enabled; } static const char* const socket_address_bind_ipv6_only_table[_SOCKET_ADDRESS_BIND_IPV6_ONLY_MAX] = {