summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Gundersen <teg@jklm.no>2014-08-19 18:59:28 +0200
committerTom Gundersen <teg@jklm.no>2014-08-19 19:01:38 +0200
commit81163121e649523b4071f67ddc03c2db649036c5 (patch)
treeaecf3c318234a39f00f8fff10258f1a780ea1573
parentcf8bd44339b00330fdbc91041d6731ba8aba9fec (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.c10
-rw-r--r--src/network/networkd.h1
2 files changed, 11 insertions, 0 deletions
diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c
index b5f5863e6..dff3270f2 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 c8d89d212..ab5df1aa3 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;