summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--man/systemd.network.xml11
-rw-r--r--src/network/networkd-link.c5
-rw-r--r--src/network/networkd-network.c4
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;
}