summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2017-09-26 14:08:27 +0200
committerThomas Haller <thaller@redhat.com>2017-10-04 12:20:55 +0200
commit0919d6e456453e5cac50df9a71556c6e5f03f526 (patch)
tree7aaa446877769a3d0d30be7d12c8449d725ba95c
parent28cf44739873273701fff195762478b7a7fb7eef (diff)
downloadNetworkManager-0919d6e456453e5cac50df9a71556c6e5f03f526.tar.gz
core: add NMActivationStateFlags "layer2-ready", "ip4-ready", and "ip6-ready"
-rw-r--r--libnm-core/nm-dbus-interface.h6
-rw-r--r--src/devices/nm-device.c33
-rw-r--r--src/nm-active-connection.c3
3 files changed, 42 insertions, 0 deletions
diff --git a/libnm-core/nm-dbus-interface.h b/libnm-core/nm-dbus-interface.h
index 632f14a819..857de7da58 100644
--- a/libnm-core/nm-dbus-interface.h
+++ b/libnm-core/nm-dbus-interface.h
@@ -882,6 +882,9 @@ typedef enum {
* @NM_ACTIVATION_STATE_FLAG_NONE: an alias for numeric zero, no flags set.
* @NM_ACTIVATION_STATE_FLAG_IS_MASTER: the device is a master.
* @NM_ACTIVATION_STATE_FLAG_IS_SLAVE: the device is a slave.
+ * @NM_ACTIVATION_STATE_FLAG_LAYER2_READY: layer2 is activated and ready.
+ * @NM_ACTIVATION_STATE_FLAG_IP4_READY: IPv4 setting is completed.
+ * @NM_ACTIVATION_STATE_FLAG_IP6_READY: IPv6 setting is completed.
*
* Flags describing the current activation state.
*
@@ -892,6 +895,9 @@ typedef enum { /*< flags >*/
NM_ACTIVATION_STATE_FLAG_IS_MASTER = (1LL << 0),
NM_ACTIVATION_STATE_FLAG_IS_SLAVE = (1LL << 1),
+ NM_ACTIVATION_STATE_FLAG_LAYER2_READY = (1LL << 2),
+ NM_ACTIVATION_STATE_FLAG_IP4_READY = (1LL << 3),
+ NM_ACTIVATION_STATE_FLAG_IP6_READY = (1LL << 4),
} NMActivationStateFlags;
#endif /* __NM_DBUS_INTERFACE_H__ */
diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c
index cf73ee016a..814935a21f 100644
--- a/src/devices/nm-device.c
+++ b/src/devices/nm-device.c
@@ -746,6 +746,25 @@ nm_device_sys_iface_state_set (NMDevice *self,
nm_assert (priv->sys_iface_state == sys_iface_state);
}
+static void
+_active_connection_set_state_flags_full (NMDevice *self,
+ NMActivationStateFlags flags,
+ NMActivationStateFlags mask)
+{
+ NMActiveConnection *ac;
+
+ ac = NM_ACTIVE_CONNECTION (nm_device_get_act_request (self));
+ if (ac)
+ nm_active_connection_set_state_flags_full (ac, flags, mask);
+}
+
+static void
+_active_connection_set_state_flags (NMDevice *self,
+ NMActivationStateFlags flags)
+{
+ _active_connection_set_state_flags_full (self, flags, flags);
+}
+
/*****************************************************************************/
void
@@ -993,6 +1012,17 @@ _set_ip_state (NMDevice *self, int addr_family, IpState new_state)
(int) new_state,
_ip_state_to_string (new_state));
*p = new_state;
+
+ if (new_state == IP_DONE) {
+ /* we only set the IPx_READY flag once we reay IP_DONE state. We don't clear it,
+ * even if we later enter IP_FAIL state.
+ *
+ * This is not guaranteed behavior, but seems to make sense for now. */
+ _active_connection_set_state_flags (self,
+ addr_family == AF_INET
+ ? NM_ACTIVATION_STATE_FLAG_IP4_READY
+ : NM_ACTIVATION_STATE_FLAG_IP6_READY);
+ }
}
}
@@ -8085,6 +8115,9 @@ activate_stage3_ip_config_start (NMDevice *self)
_set_ip_state (self, AF_INET, IP_WAIT);
_set_ip_state (self, AF_INET6, IP_WAIT);
+ _active_connection_set_state_flags (self,
+ NM_ACTIVATION_STATE_FLAG_LAYER2_READY);
+
nm_device_state_changed (self, NM_DEVICE_STATE_IP_CONFIG, NM_DEVICE_STATE_REASON_NONE);
/* Device should be up before we can do anything with it */
diff --git a/src/nm-active-connection.c b/src/nm-active-connection.c
index 5fec60c21a..f7d02eedbc 100644
--- a/src/nm-active-connection.c
+++ b/src/nm-active-connection.c
@@ -150,6 +150,9 @@ NM_UTILS_FLAGS2STR_DEFINE_STATIC (_state_flags_to_string, NMActivationStateFlags
NM_UTILS_FLAGS2STR (NM_ACTIVATION_STATE_FLAG_NONE, "none"),
NM_UTILS_FLAGS2STR (NM_ACTIVATION_STATE_FLAG_IS_MASTER, "is-master"),
NM_UTILS_FLAGS2STR (NM_ACTIVATION_STATE_FLAG_IS_SLAVE, "is-slave"),
+ NM_UTILS_FLAGS2STR (NM_ACTIVATION_STATE_FLAG_LAYER2_READY, "layer2-ready"),
+ NM_UTILS_FLAGS2STR (NM_ACTIVATION_STATE_FLAG_IP4_READY, "ip4-ready"),
+ NM_UTILS_FLAGS2STR (NM_ACTIVATION_STATE_FLAG_IP6_READY, "ip6-ready"),
);
/*****************************************************************************/