ipv6: fix net.ipv6.conf.all interface DAD handlers
authorMatteo Croce <mcroce@redhat.com>
Tue, 12 Sep 2017 15:46:37 +0000 (17:46 +0200)
committerDavid S. Miller <davem@davemloft.net>
Tue, 19 Sep 2017 23:44:02 +0000 (16:44 -0700)
commit35e015e1f5773417952fe91ce8790baf9b4237a2
treedd2db12ce379d4f5cda0ae691f70a8f4d26723f8
parent6819a14ecbe2e089e5c5bb74edecafdde2028a00
ipv6: fix net.ipv6.conf.all interface DAD handlers

Currently, writing into
net.ipv6.conf.all.{accept_dad,use_optimistic,optimistic_dad} has no effect.
Fix handling of these flags by:

- using the maximum of global and per-interface values for the
  accept_dad flag. That is, if at least one of the two values is
  non-zero, enable DAD on the interface. If at least one value is
  set to 2, enable DAD and disable IPv6 operation on the interface if
  MAC-based link-local address was found

- using the logical OR of global and per-interface values for the
  optimistic_dad flag. If at least one of them is set to one, optimistic
  duplicate address detection (RFC 4429) is enabled on the interface

- using the logical OR of global and per-interface values for the
  use_optimistic flag. If at least one of them is set to one,
  optimistic addresses won't be marked as deprecated during source address
  selection on the interface.

While at it, as we're modifying the prototype for ipv6_use_optimistic_addr(),
drop inline, and let the compiler decide.

Fixes: 7fd2561e4ebd ("net: ipv6: Add a sysctl to make optimistic addresses useful candidates")
Signed-off-by: Matteo Croce <mcroce@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Documentation/networking/ip-sysctl.txt
net/ipv6/addrconf.c