diff options
author | Thomas Haller <thaller@redhat.com> | 2017-09-26 14:08:27 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2017-10-04 12:20:55 +0200 |
commit | 0919d6e456453e5cac50df9a71556c6e5f03f526 (patch) | |
tree | 7aaa446877769a3d0d30be7d12c8449d725ba95c | |
parent | 28cf44739873273701fff195762478b7a7fb7eef (diff) | |
download | NetworkManager-0919d6e456453e5cac50df9a71556c6e5f03f526.tar.gz |
core: add NMActivationStateFlags "layer2-ready", "ip4-ready", and "ip6-ready"
-rw-r--r-- | libnm-core/nm-dbus-interface.h | 6 | ||||
-rw-r--r-- | src/devices/nm-device.c | 33 | ||||
-rw-r--r-- | src/nm-active-connection.c | 3 |
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"), ); /*****************************************************************************/ |