summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2017-06-01 23:08:30 +0200
committerThomas Haller <thaller@redhat.com>2017-06-02 21:06:08 +0200
commitc79a97657bfeef34aa376394bc61f49d46391695 (patch)
treeefc462dd62a04406f8ccac04baa698f142f47380
parentc3aa52530c4cc62f1d43802da094b9c7d7a4ff11 (diff)
downloadNetworkManager-c79a97657bfeef34aa376394bc61f49d46391695.tar.gz
device: transform NM_DEVICE_IS_MASTER gobject property to field in NMDeviceClass
We don't need this flexibility of having a full fledged GObject property for is-master. The property value only depends on the device's class.
-rw-r--r--src/devices/nm-device-bond.c3
-rw-r--r--src/devices/nm-device-bridge.c3
-rw-r--r--src/devices/nm-device.c30
-rw-r--r--src/devices/nm-device.h5
-rw-r--r--src/devices/team/nm-device-team.c3
5 files changed, 19 insertions, 25 deletions
diff --git a/src/devices/nm-device-bond.c b/src/devices/nm-device-bond.c
index 3325c9485e..18291397db 100644
--- a/src/devices/nm-device-bond.c
+++ b/src/devices/nm-device-bond.c
@@ -613,6 +613,7 @@ reapply_connection (NMDevice *device, NMConnection *con_old, NMConnection *con_n
static void
nm_device_bond_init (NMDeviceBond * self)
{
+ nm_assert (nm_device_is_master (NM_DEVICE (self)));
}
static void
@@ -622,6 +623,7 @@ nm_device_bond_class_init (NMDeviceBondClass *klass)
NM_DEVICE_CLASS_DECLARE_TYPES (klass, NM_SETTING_BOND_SETTING_NAME, NM_LINK_TYPE_BOND)
+ parent_class->is_master = TRUE;
parent_class->get_generic_capabilities = get_generic_capabilities;
parent_class->is_available = is_available;
parent_class->check_connection_compatible = check_connection_compatible;
@@ -662,7 +664,6 @@ create_device (NMDeviceFactory *factory,
NM_DEVICE_TYPE_DESC, "Bond",
NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_BOND,
NM_DEVICE_LINK_TYPE, NM_LINK_TYPE_BOND,
- NM_DEVICE_IS_MASTER, TRUE,
NULL);
}
diff --git a/src/devices/nm-device-bridge.c b/src/devices/nm-device-bridge.c
index c281dbad0c..166e1bdd27 100644
--- a/src/devices/nm-device-bridge.c
+++ b/src/devices/nm-device-bridge.c
@@ -494,6 +494,7 @@ create_and_realize (NMDevice *device,
static void
nm_device_bridge_init (NMDeviceBridge * self)
{
+ nm_assert (nm_device_is_master (NM_DEVICE (self)));
}
static void
@@ -503,6 +504,7 @@ nm_device_bridge_class_init (NMDeviceBridgeClass *klass)
NM_DEVICE_CLASS_DECLARE_TYPES (klass, NM_SETTING_BRIDGE_SETTING_NAME, NM_LINK_TYPE_BRIDGE)
+ parent_class->is_master = TRUE;
parent_class->get_generic_capabilities = get_generic_capabilities;
parent_class->is_available = is_available;
parent_class->check_connection_compatible = check_connection_compatible;
@@ -543,7 +545,6 @@ create_device (NMDeviceFactory *factory,
NM_DEVICE_TYPE_DESC, "Bridge",
NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_BRIDGE,
NM_DEVICE_LINK_TYPE, NM_LINK_TYPE_BRIDGE,
- NM_DEVICE_IS_MASTER, TRUE,
NULL);
}
diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c
index 6d26ef8944..de3bc687eb 100644
--- a/src/devices/nm-device.c
+++ b/src/devices/nm-device.c
@@ -188,7 +188,6 @@ NM_GOBJECT_PROPERTIES_DEFINE (NMDevice,
PROP_IFINDEX,
PROP_AVAILABLE_CONNECTIONS,
PROP_PHYSICAL_PORT_ID,
- PROP_IS_MASTER,
PROP_MASTER,
PROP_PARENT,
PROP_HW_ADDRESS,
@@ -451,7 +450,6 @@ typedef struct _NMDevicePrivate {
gulong master_ready_id;
/* slave management */
- bool is_master;
CList slaves; /* list of SlaveInfo */
NMMetered metered;
@@ -2192,7 +2190,7 @@ carrier_changed (NMDevice *self, gboolean carrier)
if (priv->ignore_carrier && !carrier)
return;
- if (priv->is_master) {
+ if (nm_device_is_master (self)) {
/* Bridge/bond/team carrier does not affect its own activation,
* but when carrier comes on, if there are slaves waiting,
* it will restart them.
@@ -3531,7 +3529,9 @@ nm_device_master_release_slaves (NMDevice *self)
gboolean
nm_device_is_master (NMDevice *self)
{
- return NM_DEVICE_GET_PRIVATE (self)->is_master;
+ g_return_val_if_fail (NM_IS_DEVICE (self), FALSE);
+
+ return NM_DEVICE_GET_CLASS (self)->is_master;
}
/**
@@ -4190,7 +4190,7 @@ nm_device_check_slave_connection_compatible (NMDevice *self, NMConnection *slave
priv = NM_DEVICE_GET_PRIVATE (self);
- if (!priv->is_master)
+ if (!nm_device_is_master (self))
return FALSE;
/* All masters should have connection type set */
@@ -6033,14 +6033,14 @@ act_stage3_ip4_config_start (NMDevice *self,
g_return_val_if_fail (connection, NM_ACT_STAGE_RETURN_FAILURE);
if ( connection_ip4_method_requires_carrier (connection, NULL)
- && priv->is_master
+ && nm_device_is_master (self)
&& !priv->carrier) {
_LOGI (LOGD_IP4 | LOGD_DEVICE,
"IPv4 config waiting until carrier is on");
return NM_ACT_STAGE_RETURN_IP_WAIT;
}
- if (priv->is_master && ip4_requires_slaves (connection)) {
+ if (nm_device_is_master (self) && ip4_requires_slaves (connection)) {
/* If the master has no ready slaves, and depends on slaves for
* a successful IPv4 attempt, then postpone IPv4 addressing.
*/
@@ -7634,14 +7634,14 @@ act_stage3_ip6_config_start (NMDevice *self,
g_return_val_if_fail (connection, NM_ACT_STAGE_RETURN_FAILURE);
if ( connection_ip6_method_requires_carrier (connection, NULL)
- && priv->is_master
+ && nm_device_is_master (self)
&& !priv->carrier) {
_LOGI (LOGD_IP6 | LOGD_DEVICE,
"IPv6 config waiting until carrier is on");
return NM_ACT_STAGE_RETURN_IP_WAIT;
}
- if (priv->is_master && ip6_requires_slaves (connection)) {
+ if (nm_device_is_master (self) && ip6_requires_slaves (connection)) {
/* If the master has no ready slaves, and depends on slaves for
* a successful IPv6 attempt, then postpone IPv6 addressing.
*/
@@ -13880,10 +13880,6 @@ set_property (GObject *object, guint prop_id,
/* construct-only */
priv->rfkill_type = g_value_get_uint (value);
break;
- case PROP_IS_MASTER:
- /* construct-only */
- priv->is_master = g_value_get_boolean (value);
- break;
case PROP_PERM_HW_ADDRESS:
/* construct-only */
priv->hw_addr_perm = g_value_dup_string (value);
@@ -14018,9 +14014,6 @@ get_property (GObject *object, guint prop_id,
case PROP_PHYSICAL_PORT_ID:
g_value_set_string (value, priv->physical_port_id);
break;
- case PROP_IS_MASTER:
- g_value_set_boolean (value, priv->is_master);
- break;
case PROP_MASTER:
g_value_set_object (value, nm_device_get_master (self));
break;
@@ -14283,11 +14276,6 @@ nm_device_class_init (NMDeviceClass *klass)
NULL,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
- obj_properties[PROP_IS_MASTER] =
- g_param_spec_boolean (NM_DEVICE_IS_MASTER, "", "",
- FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
- G_PARAM_STATIC_STRINGS);
obj_properties[PROP_MASTER] =
g_param_spec_object (NM_DEVICE_MASTER, "", "",
NM_TYPE_DEVICE,
diff --git a/src/devices/nm-device.h b/src/devices/nm-device.h
index 171dfdc1c8..b5c933c94e 100644
--- a/src/devices/nm-device.h
+++ b/src/devices/nm-device.h
@@ -120,7 +120,6 @@ nm_device_state_reason_check (NMDeviceStateReason reason)
#define NM_DEVICE_TYPE_DESC "type-desc" /* Internal only */
#define NM_DEVICE_RFKILL_TYPE "rfkill-type" /* Internal only */
#define NM_DEVICE_IFINDEX "ifindex" /* Internal only */
-#define NM_DEVICE_IS_MASTER "is-master" /* Internal only */
#define NM_DEVICE_MASTER "master" /* Internal only */
#define NM_DEVICE_HAS_PENDING_ACTION "has-pending-action" /* Internal only */
@@ -196,6 +195,10 @@ typedef struct {
const char *connection_type;
const NMLinkType *link_types;
+ /* Whether the device type is a master-type. This depends purely on the
+ * type (NMDeviceClass), not the actual device instance. */
+ bool is_master:1;
+
void (*state_changed) (NMDevice *device,
NMDeviceState new_state,
NMDeviceState old_state,
diff --git a/src/devices/team/nm-device-team.c b/src/devices/team/nm-device-team.c
index c457e91242..2986664105 100644
--- a/src/devices/team/nm-device-team.c
+++ b/src/devices/team/nm-device-team.c
@@ -822,6 +822,7 @@ get_property (GObject *object, guint prop_id,
static void
nm_device_team_init (NMDeviceTeam * self)
{
+ nm_assert (nm_device_is_master (NM_DEVICE (self)));
}
static void
@@ -854,7 +855,6 @@ nm_device_team_new (const char *iface)
NM_DEVICE_TYPE_DESC, "Team",
NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_TEAM,
NM_DEVICE_LINK_TYPE, NM_LINK_TYPE_TEAM,
- NM_DEVICE_IS_MASTER, TRUE,
NULL);
}
@@ -887,6 +887,7 @@ nm_device_team_class_init (NMDeviceTeamClass *klass)
object_class->dispose = dispose;
object_class->get_property = get_property;
+ parent_class->is_master = TRUE;
parent_class->create_and_realize = create_and_realize;
parent_class->get_generic_capabilities = get_generic_capabilities;
parent_class->is_available = is_available;