mirror of
https://github.com/Dasharo/systemd.git
synced 2026-03-06 15:02:31 -08:00
network: several cleanups for LinkOperationalState
- introduce link_required_operstate_for_online() helper function, - use recently introduced macros and helper functions, - unconditionally serialize the minimum and maximum of required operational state.
This commit is contained in:
@@ -71,6 +71,16 @@
|
||||
#include "udev-util.h"
|
||||
#include "vrf.h"
|
||||
|
||||
void link_required_operstate_for_online(Link *link, LinkOperationalStateRange *ret) {
|
||||
assert(link);
|
||||
assert(ret);
|
||||
|
||||
if (link->network && operational_state_range_is_valid(&link->network->required_operstate_for_online))
|
||||
*ret = link->network->required_operstate_for_online;
|
||||
else
|
||||
*ret = LINK_OPERSTATE_RANGE_DEFAULT;
|
||||
}
|
||||
|
||||
bool link_ipv6_enabled(Link *link) {
|
||||
assert(link);
|
||||
|
||||
@@ -1845,12 +1855,16 @@ void link_update_operstate(Link *link, bool also_update_master) {
|
||||
else
|
||||
operstate = LINK_OPERSTATE_ENSLAVED;
|
||||
|
||||
LinkOperationalStateRange req;
|
||||
link_required_operstate_for_online(link, &req);
|
||||
|
||||
/* Only determine online state for managed links with RequiredForOnline=yes */
|
||||
if (!link->network || !link->network->required_for_online)
|
||||
online_state = _LINK_ONLINE_STATE_INVALID;
|
||||
else if (operstate < link->network->required_operstate_for_online.min ||
|
||||
operstate > link->network->required_operstate_for_online.max)
|
||||
|
||||
else if (!operational_state_is_in_range(operstate, &req))
|
||||
online_state = LINK_ONLINE_STATE_OFFLINE;
|
||||
|
||||
else {
|
||||
AddressFamily required_family = link->network->required_family_for_online;
|
||||
bool needs_ipv4 = required_family & ADDRESS_FAMILY_IPV4;
|
||||
@@ -1861,14 +1875,14 @@ void link_update_operstate(Link *link, bool also_update_master) {
|
||||
* to offline in the blocks below. */
|
||||
online_state = LINK_ONLINE_STATE_ONLINE;
|
||||
|
||||
if (link->network->required_operstate_for_online.min >= LINK_OPERSTATE_DEGRADED) {
|
||||
if (req.min >= LINK_OPERSTATE_DEGRADED) {
|
||||
if (needs_ipv4 && ipv4_address_state < LINK_ADDRESS_STATE_DEGRADED)
|
||||
online_state = LINK_ONLINE_STATE_OFFLINE;
|
||||
if (needs_ipv6 && ipv6_address_state < LINK_ADDRESS_STATE_DEGRADED)
|
||||
online_state = LINK_ONLINE_STATE_OFFLINE;
|
||||
}
|
||||
|
||||
if (link->network->required_operstate_for_online.min >= LINK_OPERSTATE_ROUTABLE) {
|
||||
if (req.min >= LINK_OPERSTATE_ROUTABLE) {
|
||||
if (needs_ipv4 && ipv4_address_state < LINK_ADDRESS_STATE_ROUTABLE)
|
||||
online_state = LINK_ONLINE_STATE_OFFLINE;
|
||||
if (needs_ipv6 && ipv6_address_state < LINK_ADDRESS_STATE_ROUTABLE)
|
||||
|
||||
@@ -259,3 +259,5 @@ int manager_rtnl_process_link(sd_netlink *rtnl, sd_netlink_message *message, Man
|
||||
|
||||
int link_flags_to_string_alloc(uint32_t flags, char **ret);
|
||||
const char *kernel_operstate_to_string(int t) _const_;
|
||||
|
||||
void link_required_operstate_for_online(Link *link, LinkOperationalStateRange *ret);
|
||||
|
||||
@@ -630,11 +630,11 @@ static int link_save(Link *link) {
|
||||
fprintf(f, "REQUIRED_FOR_ONLINE=%s\n",
|
||||
yes_no(link->network->required_for_online));
|
||||
|
||||
LinkOperationalStateRange st = link->network->required_operstate_for_online;
|
||||
fprintf(f, "REQUIRED_OPER_STATE_FOR_ONLINE=%s%s%s\n",
|
||||
strempty(link_operstate_to_string(st.min)),
|
||||
st.max != LINK_OPERSTATE_RANGE_DEFAULT.max ? ":" : "",
|
||||
st.max != LINK_OPERSTATE_RANGE_DEFAULT.max ? strempty(link_operstate_to_string(st.max)) : "");
|
||||
LinkOperationalStateRange st;
|
||||
link_required_operstate_for_online(link, &st);
|
||||
|
||||
fprintf(f, "REQUIRED_OPER_STATE_FOR_ONLINE=%s:%s\n",
|
||||
link_operstate_to_string(st.min), link_operstate_to_string(st.max));
|
||||
|
||||
fprintf(f, "REQUIRED_FAMILY_FOR_ONLINE=%s\n",
|
||||
link_required_address_family_to_string(link->network->required_family_for_online));
|
||||
|
||||
Reference in New Issue
Block a user