diff --git a/src/modem-manager/nm-modem.c b/src/modem-manager/nm-modem.c index 48f9296edf..528f08bcdb 100644 --- a/src/modem-manager/nm-modem.c +++ b/src/modem-manager/nm-modem.c @@ -152,7 +152,7 @@ ppp_stats (NMPPPManager *ppp_manager, } static NMActStageReturn -ppp_stage2_config (NMDevice *device, NMDeviceStateReason *reason) +ppp_stage3_ip4_config_start (NMDevice *device, NMDeviceStateReason *reason) { NMModemPrivate *priv = NM_MODEM_GET_PRIVATE (device); NMActRequest *req; @@ -246,7 +246,7 @@ static_stage3_done (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_da } static NMActStageReturn -static_stage3_config (NMDevice *device, NMDeviceStateReason *reason) +static_stage3_ip4_config_start (NMDevice *device, NMDeviceStateReason *reason) { dbus_g_proxy_begin_call (nm_modem_get_proxy (NM_MODEM (device), MM_DBUS_INTERFACE_MODEM), "GetIP4Config", static_stage3_done, @@ -278,30 +278,6 @@ static_stage4 (NMDevice *device, NMIP4Config **config, NMDeviceStateReason *reas /*****************************************************************************/ -static NMActStageReturn -real_act_stage2_config (NMDevice *device, NMDeviceStateReason *reason) -{ - NMActStageReturn ret; - - switch (NM_MODEM_GET_PRIVATE (device)->ip_method) { - case MM_MODEM_IP_METHOD_PPP: - ret = ppp_stage2_config (device, reason); - break; - case MM_MODEM_IP_METHOD_STATIC: - ret = NM_ACT_STAGE_RETURN_SUCCESS; - break; - case MM_MODEM_IP_METHOD_DHCP: - ret = NM_ACT_STAGE_RETURN_SUCCESS; - break; - default: - g_warning ("Invalid IP method"); - ret = NM_ACT_STAGE_RETURN_FAILURE; - break; - } - - return ret; -} - static NMActStageReturn real_act_stage3_ip4_config_start (NMDevice *device, NMDeviceStateReason *reason) { @@ -309,10 +285,10 @@ real_act_stage3_ip4_config_start (NMDevice *device, NMDeviceStateReason *reason) switch (NM_MODEM_GET_PRIVATE (device)->ip_method) { case MM_MODEM_IP_METHOD_PPP: - ret = NM_ACT_STAGE_RETURN_SUCCESS; + ret = ppp_stage3_ip4_config_start (device, reason); break; case MM_MODEM_IP_METHOD_STATIC: - ret = static_stage3_config (device, reason); + ret = static_stage3_ip4_config_start (device, reason); break; case MM_MODEM_IP_METHOD_DHCP: ret = NM_DEVICE_CLASS (nm_modem_parent_class)->act_stage3_ip4_config_start (device, reason); @@ -610,7 +586,6 @@ nm_modem_class_init (NMModemClass *klass) object_class->finalize = finalize; device_class->get_generic_capabilities = real_get_generic_capabilities; - device_class->act_stage2_config = real_act_stage2_config; device_class->act_stage3_ip4_config_start = real_act_stage3_ip4_config_start; device_class->act_stage4_get_ip4_config = real_act_stage4_get_ip4_config; device_class->deactivate_quickly = real_deactivate_quickly; diff --git a/src/nm-device-ethernet.c b/src/nm-device-ethernet.c index bdb740ed90..f4f84d5994 100644 --- a/src/nm-device-ethernet.c +++ b/src/nm-device-ethernet.c @@ -1260,7 +1260,7 @@ ppp_ip4_config (NMPPPManager *ppp_manager, } static NMActStageReturn -pppoe_stage2_config (NMDeviceEthernet *self, NMDeviceStateReason *reason) +pppoe_stage3_ip4_config_start (NMDeviceEthernet *self, NMDeviceStateReason *reason) { NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self); NMConnection *connection; @@ -1304,35 +1304,48 @@ pppoe_stage2_config (NMDeviceEthernet *self, NMDeviceStateReason *reason) static NMActStageReturn real_act_stage2_config (NMDevice *device, NMDeviceStateReason *reason) { - NMSettingConnection *s_connection; + NMSettingConnection *s_con; const char *connection_type; - NMActStageReturn ret; + NMActStageReturn ret = NM_ACT_STAGE_RETURN_SUCCESS; g_return_val_if_fail (reason != NULL, NM_ACT_STAGE_RETURN_FAILURE); - s_connection = NM_SETTING_CONNECTION (device_get_setting (device, NM_TYPE_SETTING_CONNECTION)); - g_assert (s_connection); + s_con = NM_SETTING_CONNECTION (device_get_setting (device, NM_TYPE_SETTING_CONNECTION)); + g_assert (s_con); - connection_type = nm_setting_connection_get_connection_type (s_connection); + /* 802.1x has to run before any IP configuration since the 802.1x auth + * process opens the port up for normal traffic. + */ + connection_type = nm_setting_connection_get_connection_type (s_con); if (!strcmp (connection_type, NM_SETTING_WIRED_SETTING_NAME)) { NMSetting8021x *security; security = (NMSetting8021x *) device_get_setting (device, NM_TYPE_SETTING_802_1X); if (security) ret = nm_8021x_stage2_config (NM_DEVICE_ETHERNET (device), reason); - else - ret = NM_ACT_STAGE_RETURN_SUCCESS; - } else if (!strcmp (connection_type, NM_SETTING_PPPOE_SETTING_NAME)) - ret = pppoe_stage2_config (NM_DEVICE_ETHERNET (device), reason); - else { - nm_warning ("Invalid connection type '%s' for ethernet device", connection_type); - *reason = NM_DEVICE_STATE_REASON_CONFIG_FAILED; - ret = NM_ACT_STAGE_RETURN_FAILURE; } return ret; } +static NMActStageReturn +real_act_stage3_ip4_config_start (NMDevice *device, NMDeviceStateReason *reason) +{ + NMSettingConnection *s_con; + const char *connection_type; + + g_return_val_if_fail (reason != NULL, NM_ACT_STAGE_RETURN_FAILURE); + + s_con = NM_SETTING_CONNECTION (device_get_setting (device, NM_TYPE_SETTING_CONNECTION)); + g_assert (s_con); + + connection_type = nm_setting_connection_get_connection_type (s_con); + if (!strcmp (connection_type, NM_SETTING_PPPOE_SETTING_NAME)) + return pppoe_stage3_ip4_config_start (NM_DEVICE_ETHERNET (device), reason); + + return NM_DEVICE_CLASS (nm_device_ethernet_parent_class)->act_stage3_ip4_config_start (device, reason); +} + static NMActStageReturn real_act_stage4_get_ip4_config (NMDevice *device, NMIP4Config **config, @@ -1775,6 +1788,7 @@ nm_device_ethernet_class_init (NMDeviceEthernetClass *klass) parent_class->check_connection_compatible = real_check_connection_compatible; parent_class->act_stage2_config = real_act_stage2_config; + parent_class->act_stage3_ip4_config_start = real_act_stage3_ip4_config_start; parent_class->act_stage4_get_ip4_config = real_act_stage4_get_ip4_config; parent_class->deactivate_quickly = real_deactivate_quickly; parent_class->spec_match_list = spec_match_list;