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.
This commit is contained in:
Yu Watanabe 2019-02-15 12:29:59 +09:00
parent 7fcee28417
commit 14153d1b6e
2 changed files with 7 additions and 0 deletions

View 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",
};

View 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