diff options
author | Tom Gundersen <teg@jklm.no> | 2014-08-19 18:59:28 +0200 |
---|---|---|
committer | Tom Gundersen <teg@jklm.no> | 2014-08-19 19:01:38 +0200 |
commit | 81163121e649523b4071f67ddc03c2db649036c5 (patch) | |
tree | aecf3c318234a39f00f8fff10258f1a780ea1573 | |
parent | cf8bd44339b00330fdbc91041d6731ba8aba9fec (diff) |
networkd: don't consider deprecated or tentative addresses when determining operstate
https://bugs.freedesktop.org/show_bug.cgi?id=81287
-rw-r--r-- | src/network/networkd-link.c | 10 | ||||
-rw-r--r-- | src/network/networkd.h | 1 |
2 files changed, 11 insertions, 0 deletions
diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index b5f5863e6b..dff3270f2a 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -1386,6 +1386,13 @@ int link_rtnl_process_address(sd_rtnl *rtnl, sd_rtnl_message *message, return 0; } + r = sd_rtnl_message_addr_get_flags(message, &address->flags); + if (r < 0) { + log_warning_link(link, + "rtnl: received address with invalid flags, ignoring"); + return 0; + } + switch (address->family) { case AF_INET: r = sd_rtnl_message_read_in_addr(message, IFA_LOCAL, @@ -1658,6 +1665,9 @@ static void link_update_operstate(Link *link) { /* if we have carrier, check what addresses we have */ LIST_FOREACH(addresses, address, link->addresses) { + if (address->flags & (IFA_F_TENTATIVE | IFA_F_DEPRECATED)) + continue; + if (address->scope < scope) scope = address->scope; } diff --git a/src/network/networkd.h b/src/network/networkd.h index c8d89d212b..ab5df1aa3c 100644 --- a/src/network/networkd.h +++ b/src/network/networkd.h @@ -126,6 +126,7 @@ struct Address { int family; unsigned char prefixlen; unsigned char scope; + unsigned char flags; char *label; struct in_addr broadcast; |