diff options
author | Tom Gundersen <teg@jklm.no> | 2015-10-20 14:59:27 +0200 |
---|---|---|
committer | Tom Gundersen <teg@jklm.no> | 2015-10-20 14:59:27 +0200 |
commit | 14a081a0ff1db125ade7aea3540e5544fd3e57a9 (patch) | |
tree | 62786b58f26036a946779840bcd0fce39a3145eb /src/network/networkd-link.c | |
parent | c91960c5a04a3515c43f50a358588f056b8575a6 (diff) | |
parent | 44de7fb14f0fb5b8fe0f829f128c2c3e64114c0c (diff) |
Merge pull request #1538 from ssahani/ipv62
networkd: add support to configure IPv6 DAD
Diffstat (limited to 'src/network/networkd-link.c')
-rw-r--r-- | src/network/networkd-link.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index f6cc1f8ee2..9d97089576 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -1850,6 +1850,37 @@ static int link_set_ipv6_accept_ra(Link *link) { return 0; } +static int link_set_ipv6_dad_transmits(Link *link) { + char buf[DECIMAL_STR_MAX(unsigned) + 1]; + const char *p = NULL; + int r; + + /* Make this a NOP if IPv6 is not available */ + if (!socket_ipv6_is_supported()) + return 0; + + if (link->flags & IFF_LOOPBACK) + return 0; + + if (link->network->ipv6_dad_transmits < 0) + return 0; + + p = strjoina("/proc/sys/net/ipv6/conf/", link->ifname, "/dad_transmits"); + + xsprintf(buf, "%u", link->network->ipv6_dad_transmits); + + r = write_string_file(p, buf, 0); + if (r < 0) { + /* If the right value is set anyway, don't complain */ + if (verify_one_line_file(p, buf) > 0) + return 0; + + log_link_warning_errno(link, r, "Cannot set IPv6 dad transmits for interface: %m"); + } + + return 0; +} + static int link_configure(Link *link) { int r; @@ -1877,6 +1908,10 @@ static int link_configure(Link *link) { if (r < 0) return r; + r = link_set_ipv6_dad_transmits(link); + if (r < 0) + return r; + if (link_ipv4ll_enabled(link)) { r = ipv4ll_configure(link); if (r < 0) |