diff --git a/man/systemd.network.xml b/man/systemd.network.xml index ee464ffff4..25a6bc1467 100644 --- a/man/systemd.network.xml +++ b/man/systemd.network.xml @@ -800,6 +800,15 @@ + + IgnoreCarrierLoss= + + A boolean. Allows networkd to retain both the static and dynamic configuration of the + interface even if its carrier is lost. Defaults to false. + + + + diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 736373ae34..463c20774e 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -3500,6 +3500,9 @@ static int link_carrier_lost(Link *link) { assert(link); + if (link->network->ignore_carrier_loss) + return 0; + /* Some devices reset itself while setting the MTU. This causes the DHCP client fall into a loop. * setting_mtu keep track whether the device got reset because of setting MTU and does not drop the * configuration and stop the clients as well. */ diff --git a/src/network/networkd-network-gperf.gperf b/src/network/networkd-network-gperf.gperf index 5d8aede593..0a0c24c69a 100644 --- a/src/network/networkd-network-gperf.gperf +++ b/src/network/networkd-network-gperf.gperf @@ -81,6 +81,7 @@ Network.ProxyARP, config_parse_tristate, Network.IPv6ProxyNDPAddress, config_parse_ipv6_proxy_ndp_address, 0, 0 Network.BindCarrier, config_parse_strv, 0, offsetof(Network, bind_carrier) Network.ConfigureWithoutCarrier, config_parse_bool, 0, offsetof(Network, configure_without_carrier) +Network.IgnoreCarrierLoss, config_parse_bool, 0, offsetof(Network, ignore_carrier_loss) Address.Address, config_parse_address, 0, 0 Address.Peer, config_parse_address, 0, 0 Address.Broadcast, config_parse_broadcast, 0, 0 diff --git a/src/network/networkd-network.h b/src/network/networkd-network.h index f6e62cdd79..d1cdba55a6 100644 --- a/src/network/networkd-network.h +++ b/src/network/networkd-network.h @@ -224,6 +224,7 @@ struct Network { int allmulticast; bool unmanaged; bool configure_without_carrier; + bool ignore_carrier_loss; uint32_t iaid; DUID duid; diff --git a/test/fuzz/fuzz-network-parser/directives.network b/test/fuzz/fuzz-network-parser/directives.network index 209132f239..3fb785baa9 100644 --- a/test/fuzz/fuzz-network-parser/directives.network +++ b/test/fuzz/fuzz-network-parser/directives.network @@ -116,6 +116,7 @@ VLAN= DHCPServer= BindCarrier= VRF= +IgnoreCarrierLoss= [IPv6Prefix] Prefix= OnLink=