diff options
Diffstat (limited to 'src/nm-device-wired.c')
| -rw-r--r-- | src/nm-device-wired.c | 38 |
1 files changed, 36 insertions, 2 deletions
diff --git a/src/nm-device-wired.c b/src/nm-device-wired.c index 6d459630..5baf5f87 100644 --- a/src/nm-device-wired.c +++ b/src/nm-device-wired.c @@ -418,7 +418,24 @@ act_stage3_ip4_config_start (NMDevice *device, NMIP4Config **out_config, NMDeviceStateReason *reason) { - if (nm_device_is_master (device) && !nm_device_wired_get_carrier (NM_DEVICE_WIRED (device))) { + NMConnection *connection; + NMSettingIP4Config *s_ip4; + const char *method = NULL; + gboolean is_manual = FALSE; + + connection = nm_device_get_connection (device); + if (connection) { + s_ip4 = nm_connection_get_setting_ip4_config (connection); + if (s_ip4) + method = nm_setting_ip4_config_get_method (s_ip4); + + if (g_strcmp0 (method, NM_SETTING_IP4_CONFIG_METHOD_MANUAL) == 0) + is_manual = TRUE; + } + + if ( !is_manual + && nm_device_is_master (device) + && !nm_device_wired_get_carrier (NM_DEVICE_WIRED (device))) { nm_log_info (LOGD_IP4 | NM_DEVICE_WIRED_LOG_LEVEL (device), "(%s): IPv4 config waiting until carrier is on", nm_device_get_ip_iface (device)); @@ -433,7 +450,24 @@ act_stage3_ip6_config_start (NMDevice *device, NMIP6Config **out_config, NMDeviceStateReason *reason) { - if (nm_device_is_master (device) && !nm_device_wired_get_carrier (NM_DEVICE_WIRED (device))) { + NMConnection *connection; + NMSettingIP6Config *s_ip6; + const char *method = NULL; + gboolean is_manual = FALSE; + + connection = nm_device_get_connection (device); + if (connection) { + s_ip6 = nm_connection_get_setting_ip6_config (connection); + if (s_ip6) + method = nm_setting_ip6_config_get_method (s_ip6); + + if (g_strcmp0 (method, NM_SETTING_IP6_CONFIG_METHOD_MANUAL) == 0) + is_manual = TRUE; + } + + if ( !is_manual + && nm_device_is_master (device) + && !nm_device_wired_get_carrier (NM_DEVICE_WIRED (device))) { nm_log_info (LOGD_IP6 | NM_DEVICE_WIRED_LOG_LEVEL (device), "(%s): IPv6 config waiting until carrier is on", nm_device_get_ip_iface (device)); |