From 816bcac1297556f884750adfc3f8af6c3afcec70 Mon Sep 17 00:00:00 2001 From: Wen Liang Date: Thu, 1 Apr 2021 14:45:52 -0400 Subject: [PATCH] device: add and use function `set_interface_flags_full()` When device update `interface_flags`, call the function `set_interface_flags_full()`. Signed-off-by: Wen Liang --- src/core/devices/nm-device.c | 49 ++++++++++++++----- .../nm-libnm-core-utils.h | 6 +++ 2 files changed, 42 insertions(+), 13 deletions(-) diff --git a/src/core/devices/nm-device.c b/src/core/devices/nm-device.c index 7caaa50016..dd8c6d96fb 100644 --- a/src/core/devices/nm-device.c +++ b/src/core/devices/nm-device.c @@ -2600,6 +2600,30 @@ _active_connection_set_state_flags(NMDevice *self, NMActivationStateFlags flags) /*****************************************************************************/ +static gboolean +set_interface_flags_full(NMDevice * self, + NMDeviceInterfaceFlags mask, + NMDeviceInterfaceFlags interface_flags, + gboolean notify) +{ + NMDevicePrivate * priv = NM_DEVICE_GET_PRIVATE(self); + NMDeviceInterfaceFlags f; + + nm_assert(!!mask); + nm_assert(!NM_FLAGS_ANY(mask, ~_NM_DEVICE_INTERFACE_FLAG_ALL)); + nm_assert(!NM_FLAGS_ANY(interface_flags, ~mask)); + + f = (priv->interface_flags & ~mask) | (interface_flags & mask); + + if (f == priv->interface_flags) + return FALSE; + + priv->interface_flags = f; + if (notify) + _notify(self, PROP_INTERFACE_FLAGS); + return TRUE; +} + void nm_device_assume_state_get(NMDevice * self, gboolean * out_assume_state_guess_assume, @@ -5030,18 +5054,16 @@ nm_device_set_carrier(NMDevice *self, gboolean carrier) if (NM_FLAGS_ALL(priv->capabilities, NM_DEVICE_CAP_CARRIER_DETECT | NM_DEVICE_CAP_NONSTANDARD_CARRIER)) { - if (carrier) - priv->interface_flags |= NM_DEVICE_INTERFACE_FLAG_CARRIER; - else - priv->interface_flags &= ~NM_DEVICE_INTERFACE_FLAG_CARRIER; - notify_flags = TRUE; + notify_flags = set_interface_flags_full(self, + NM_DEVICE_INTERFACE_FLAG_CARRIER, + carrier ? NM_DEVICE_INTERFACE_FLAG_CARRIER + : NM_DEVICE_INTERFACE_FLAG_NONE, + FALSE); } priv->carrier = carrier; - if (notify_flags) - nm_gobject_notify_together(self, PROP_CARRIER, PROP_INTERFACE_FLAGS); - else - _notify(self, PROP_CARRIER); + + nm_gobject_notify_together(self, PROP_CARRIER, notify_flags ? PROP_INTERFACE_FLAGS : PROP_0); if (priv->carrier) { _LOGI(LOGD_DEVICE, "carrier: link connected"); @@ -5282,10 +5304,11 @@ device_update_interface_flags(NMDevice *self, const NMPlatformLink *plink) flags |= NM_DEVICE_INTERFACE_FLAG_CARRIER; } - if (flags != priv->interface_flags) { - priv->interface_flags = flags; - _notify(self, PROP_INTERFACE_FLAGS); - } + set_interface_flags_full(self, + NM_DEVICE_INTERFACE_FLAG_UP | NM_DEVICE_INTERFACE_FLAG_LOWER_UP + | NM_DEVICE_INTERFACE_FLAG_CARRIER, + flags, + TRUE); } static gboolean diff --git a/src/libnm-core-aux-intern/nm-libnm-core-utils.h b/src/libnm-core-aux-intern/nm-libnm-core-utils.h index e2a350e57a..346398fd6d 100644 --- a/src/libnm-core-aux-intern/nm-libnm-core-utils.h +++ b/src/libnm-core-aux-intern/nm-libnm-core-utils.h @@ -98,6 +98,12 @@ gboolean nm_utils_vlan_priority_map_parse_str(NMVlanPriorityMap map_type, /*****************************************************************************/ +#define _NM_DEVICE_INTERFACE_FLAG_ALL \ + ((NMDeviceInterfaceFlags)(NM_DEVICE_INTERFACE_FLAG_UP | NM_DEVICE_INTERFACE_FLAG_LOWER_UP \ + | NM_DEVICE_INTERFACE_FLAG_CARRIER)) + +/*****************************************************************************/ + #define NM_OVS_EXTERNAL_ID_NM_PREFIX "NM." #define NM_OVS_EXTERNAL_ID_NM_CONNECTION_UUID "NM.connection.uuid"