diff options
-rw-r--r-- | man/systemd.network.xml | 11 | ||||
-rw-r--r-- | src/network/networkd-link.c | 5 | ||||
-rw-r--r-- | src/network/networkd-network.c | 4 |
3 files changed, 16 insertions, 4 deletions
diff --git a/man/systemd.network.xml b/man/systemd.network.xml index 76f9f4d042..35c897af39 100644 --- a/man/systemd.network.xml +++ b/man/systemd.network.xml @@ -259,8 +259,9 @@ <varlistentry> <term><varname>RequiredForOnline=</varname></term> <listitem> - <para>Takes a boolean or a minimum operational state and an optional maximum operational - state. Please see + <para>Takes a boolean, a minimum operational state (e.g., <literal>carrier</literal>), or a range + of operational state separated with a colon (e.g., <literal>degraded:routable</literal>). + Please see <citerefentry><refentrytitle>networkctl</refentrytitle><manvolnum>1</manvolnum></citerefentry> for possible operational states. When <literal>yes</literal>, the network is deemed required when determining whether the system is online (including when running @@ -270,6 +271,12 @@ minimum and maximum operational state required for the network interface to be considered online.</para> + <para>When <literal>yes</literal> is specified for a CAN device, + <command>systemd-networkd-wait-online</command> deems that the interface is online when its + operational state becomes <literal>carrier</literal>. For an interface with other type, e.g. + <literal>ether</literal>, the interface is deened online when its online state is + <literal>degraded</literal> or <literal>routable</literal>.</para> + <para>Defaults to <literal>yes</literal> when <varname>ActivationPolicy=</varname> is not set, or set to <literal>up</literal>, <literal>always-up</literal>, or <literal>bound</literal>. Defaults to <literal>no</literal> when diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index d553a716fa..57ea9ecb75 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -77,6 +77,11 @@ void link_required_operstate_for_online(Link *link, LinkOperationalStateRange *r if (link->network && operational_state_range_is_valid(&link->network->required_operstate_for_online)) *ret = link->network->required_operstate_for_online; + else if (link->iftype == ARPHRD_CAN) + *ret = (const LinkOperationalStateRange) { + .min = LINK_OPERSTATE_CARRIER, + .max = LINK_OPERSTATE_CARRIER, + }; else *ret = LINK_OPERSTATE_RANGE_DEFAULT; } diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c index 845a8130bd..08c7da5699 100644 --- a/src/network/networkd-network.c +++ b/src/network/networkd-network.c @@ -372,7 +372,7 @@ int network_load_one(Manager *manager, OrderedHashmap **networks, const char *fi .n_ref = 1, .required_for_online = -1, - .required_operstate_for_online = LINK_OPERSTATE_RANGE_DEFAULT, + .required_operstate_for_online = LINK_OPERSTATE_RANGE_INVALID, .activation_policy = _ACTIVATION_POLICY_INVALID, .group = -1, .arp = -1, @@ -1221,7 +1221,7 @@ int config_parse_required_for_online( if (isempty(rvalue)) { network->required_for_online = -1; - network->required_operstate_for_online = LINK_OPERSTATE_RANGE_DEFAULT; + network->required_operstate_for_online = LINK_OPERSTATE_RANGE_INVALID; return 0; } |