From 14153d1b6e8725f995d9ad41e48daf67b140bf6a Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Fri, 15 Feb 2019 12:29:59 +0900 Subject: [PATCH] network: introduce new operational state 'enslaved' If an interface has IFF_SLAVE flag, then its operational state becomes not in 'degraded' or 'carrier', but the new 'enslaved' state. --- src/network/networkd-link.c | 6 ++++++ src/network/networkd-link.h | 1 + 2 files changed, 7 insertions(+) diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index adc33b3865..22905e7079 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -301,6 +301,7 @@ static int link_enable_ipv6(Link *link) { void link_update_operstate(Link *link) { LinkOperationalState operstate; + assert(link); if (link->kernel_operstate == IF_OPER_DORMANT) @@ -342,6 +343,10 @@ void link_update_operstate(Link *link) { else operstate = LINK_OPERSTATE_OFF; + if (IN_SET(operstate, LINK_OPERSTATE_DEGRADED, LINK_OPERSTATE_CARRIER) && + link->flags & IFF_SLAVE) + operstate = LINK_OPERSTATE_ENSLAVED; + if (link->operstate != operstate) { link->operstate = operstate; link_send_changed(link, "OperationalState", NULL); @@ -4215,6 +4220,7 @@ static const char* const link_operstate_table[_LINK_OPERSTATE_MAX] = { [LINK_OPERSTATE_DORMANT] = "dormant", [LINK_OPERSTATE_CARRIER] = "carrier", [LINK_OPERSTATE_DEGRADED] = "degraded", + [LINK_OPERSTATE_ENSLAVED] = "enslaved", [LINK_OPERSTATE_ROUTABLE] = "routable", }; diff --git a/src/network/networkd-link.h b/src/network/networkd-link.h index dcb1ea68dd..2bee3eb500 100644 --- a/src/network/networkd-link.h +++ b/src/network/networkd-link.h @@ -34,6 +34,7 @@ typedef enum LinkOperationalState { LINK_OPERSTATE_DORMANT, LINK_OPERSTATE_CARRIER, LINK_OPERSTATE_DEGRADED, + LINK_OPERSTATE_ENSLAVED, LINK_OPERSTATE_ROUTABLE, _LINK_OPERSTATE_MAX, _LINK_OPERSTATE_INVALID = -1