]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: introduce new operational state 'enslaved'
authorYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 15 Feb 2019 03:29:59 +0000 (12:29 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 15 Feb 2019 22:15:49 +0000 (07:15 +0900)
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
src/network/networkd-link.h

index adc33b3865f3e0d40779740bdfd0311b692d92c9..22905e707902e90eceb6be9596d0f8f525f0a9e0 100644 (file)
@@ -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",
 };
 
index dcb1ea68dd987ae5ad170dbdc298edb38a2bdb73..2bee3eb5001eab6f3506b8f3e3619244971efb20 100644 (file)
@@ -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