diff --git a/src/modem-manager/nm-modem-cdma.c b/src/modem-manager/nm-modem-cdma.c index 00e506ac79..3002e790bc 100644 --- a/src/modem-manager/nm-modem-cdma.c +++ b/src/modem-manager/nm-modem-cdma.c @@ -71,7 +71,9 @@ nm_modem_cdma_new (const char *path, return (NMModem *) g_object_new (NM_TYPE_MODEM_CDMA, NM_MODEM_PATH, path, - NM_MODEM_IFACE, data_device, + NM_MODEM_UID, data_device, + NM_MODEM_CONTROL_PORT, NULL, + NM_MODEM_DATA_PORT, data_device, NM_MODEM_IP_METHOD, ip_method, NM_MODEM_CONNECTED, (state == NM_MODEM_STATE_CONNECTED), NULL); diff --git a/src/modem-manager/nm-modem-generic.c b/src/modem-manager/nm-modem-generic.c index 3d1b700e79..0214f1c0c2 100644 --- a/src/modem-manager/nm-modem-generic.c +++ b/src/modem-manager/nm-modem-generic.c @@ -201,7 +201,7 @@ static_stage3_done (DBusGProxy *proxy, DBusGProxyCall *call, gpointer user_data) addr = nm_ip4_address_new (); nm_log_info (LOGD_MB, "(%s): IPv4 static configuration:", - nm_modem_get_iface (NM_MODEM (self))); + nm_modem_get_uid (NM_MODEM (self))); /* IP address */ nm_ip4_address_set_address (addr, g_value_get_uint (g_value_array_get_nth (ret_array, 0))); diff --git a/src/modem-manager/nm-modem-gsm.c b/src/modem-manager/nm-modem-gsm.c index b6854cae59..340ee987e0 100644 --- a/src/modem-manager/nm-modem-gsm.c +++ b/src/modem-manager/nm-modem-gsm.c @@ -113,7 +113,9 @@ nm_modem_gsm_new (const char *path, return (NMModem *) g_object_new (NM_TYPE_MODEM_GSM, NM_MODEM_PATH, path, - NM_MODEM_IFACE, data_device, + NM_MODEM_UID, data_device, + NM_MODEM_CONTROL_PORT, NULL, + NM_MODEM_DATA_PORT, data_device, NM_MODEM_IP_METHOD, ip_method, NM_MODEM_CONNECTED, (state == NM_MODEM_STATE_CONNECTED), NULL); diff --git a/src/modem-manager/nm-modem.c b/src/modem-manager/nm-modem.c index 26c35368f7..5ce7ff79ab 100644 --- a/src/modem-manager/nm-modem.c +++ b/src/modem-manager/nm-modem.c @@ -38,8 +38,10 @@ G_DEFINE_TYPE (NMModem, nm_modem, G_TYPE_OBJECT) enum { PROP_0, - PROP_IFACE, + PROP_CONTROL_PORT, + PROP_DATA_PORT, PROP_PATH, + PROP_UID, PROP_IP_METHOD, PROP_IP_TIMEOUT, PROP_ENABLED, @@ -49,8 +51,10 @@ enum { }; typedef struct { + char *uid; char *path; - char *iface; + char *control_port; + char *data_port; guint32 ip_method; NMPPPManager *ppp_manager; @@ -229,7 +233,7 @@ ppp_stage3_ip4_config_start (NMModem *self, ip_timeout = priv->mm_ip_timeout; } - priv->ppp_manager = nm_ppp_manager_new (priv->iface); + priv->ppp_manager = nm_ppp_manager_new (priv->data_port); if (nm_ppp_manager_start (priv->ppp_manager, req, ppp_name, ip_timeout, &error)) { g_signal_connect (priv->ppp_manager, "state-changed", G_CALLBACK (ppp_state_changed), @@ -592,12 +596,12 @@ nm_modem_device_state_changed (NMModem *self, /*****************************************************************************/ const char * -nm_modem_get_iface (NMModem *self) +nm_modem_get_uid (NMModem *self) { g_return_val_if_fail (self != NULL, NULL); g_return_val_if_fail (NM_IS_MODEM (self), NULL); - return NM_MODEM_GET_PRIVATE (self)->iface; + return NM_MODEM_GET_PRIVATE (self)->uid; } const char * @@ -609,6 +613,24 @@ nm_modem_get_path (NMModem *self) return NM_MODEM_GET_PRIVATE (self)->path; } +const char * +nm_modem_get_control_port (NMModem *self) +{ + g_return_val_if_fail (self != NULL, NULL); + g_return_val_if_fail (NM_IS_MODEM (self), NULL); + + return NM_MODEM_GET_PRIVATE (self)->control_port; +} + +const char * +nm_modem_get_data_port (NMModem *self) +{ + g_return_val_if_fail (self != NULL, NULL); + g_return_val_if_fail (NM_IS_MODEM (self), NULL); + + return NM_MODEM_GET_PRIVATE (self)->data_port; +} + /*****************************************************************************/ static void @@ -632,8 +654,8 @@ constructor (GType type, priv = NM_MODEM_GET_PRIVATE (object); - if (!priv->iface) { - nm_log_err (LOGD_HW, "modem command interface not provided"); + if (!priv->data_port && !priv->control_port) { + nm_log_err (LOGD_HW, "neither modem command nor data interface provided"); goto err; } @@ -659,8 +681,14 @@ get_property (GObject *object, guint prop_id, case PROP_PATH: g_value_set_string (value, priv->path); break; - case PROP_IFACE: - g_value_set_string (value, priv->iface); + case PROP_CONTROL_PORT: + g_value_set_string (value, priv->control_port); + break; + case PROP_DATA_PORT: + g_value_set_string (value, priv->data_port); + break; + case PROP_UID: + g_value_set_string (value, priv->uid); break; case PROP_IP_METHOD: g_value_set_uint (value, priv->ip_method); @@ -691,9 +719,15 @@ set_property (GObject *object, guint prop_id, /* Construct only */ priv->path = g_value_dup_string (value); break; - case PROP_IFACE: + case PROP_CONTROL_PORT: + priv->control_port = g_value_dup_string (value); + break; + case PROP_DATA_PORT: + priv->data_port = g_value_dup_string (value); + break; + case PROP_UID: /* Construct only */ - priv->iface = g_value_dup_string (value); + priv->uid = g_value_dup_string (value); break; case PROP_IP_METHOD: priv->ip_method = g_value_get_uint (value); @@ -731,8 +765,10 @@ finalize (GObject *object) { NMModemPrivate *priv = NM_MODEM_GET_PRIVATE (object); - g_free (priv->iface); + g_free (priv->uid); g_free (priv->path); + g_free (priv->control_port); + g_free (priv->data_port); G_OBJECT_CLASS (nm_modem_parent_class)->finalize (object); } @@ -756,6 +792,14 @@ nm_modem_class_init (NMModemClass *klass) /* Properties */ + g_object_class_install_property + (object_class, PROP_UID, + g_param_spec_string (NM_MODEM_UID, + "UID", + "Modem unique ID", + NULL, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + g_object_class_install_property (object_class, PROP_PATH, g_param_spec_string (NM_MODEM_PATH, @@ -765,13 +809,21 @@ nm_modem_class_init (NMModemClass *klass) G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property - (object_class, PROP_IFACE, - g_param_spec_string (NM_MODEM_IFACE, - "Interface", - "Modem command interface", + (object_class, PROP_CONTROL_PORT, + g_param_spec_string (NM_MODEM_CONTROL_PORT, + "Control port", + "The port controlling the modem", NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + g_object_class_install_property + (object_class, PROP_DATA_PORT, + g_param_spec_string (NM_MODEM_DATA_PORT, + "Data port", + "The port to connect to", + NULL, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); + g_object_class_install_property (object_class, PROP_IP_METHOD, g_param_spec_uint (NM_MODEM_IP_METHOD, diff --git a/src/modem-manager/nm-modem.h b/src/modem-manager/nm-modem.h index d86b1d01a8..fb07a8e092 100644 --- a/src/modem-manager/nm-modem.h +++ b/src/modem-manager/nm-modem.h @@ -36,12 +36,14 @@ G_BEGIN_DECLS #define NM_IS_MODEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_MODEM)) #define NM_MODEM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_MODEM, NMModemClass)) -#define NM_MODEM_PATH "path" -#define NM_MODEM_IFACE "iface" -#define NM_MODEM_IP_METHOD "ip-method" -#define NM_MODEM_IP_TIMEOUT "ip-timeout" -#define NM_MODEM_ENABLED "enabled" -#define NM_MODEM_CONNECTED "connected" +#define NM_MODEM_UID "uid" +#define NM_MODEM_PATH "path" +#define NM_MODEM_CONTROL_PORT "control-port" +#define NM_MODEM_DATA_PORT "data-port" +#define NM_MODEM_IP_METHOD "ip-method" +#define NM_MODEM_IP_TIMEOUT "ip-timeout" +#define NM_MODEM_ENABLED "enabled" +#define NM_MODEM_CONNECTED "connected" #define NM_MODEM_PPP_STATS "ppp-stats" #define NM_MODEM_PPP_FAILED "ppp-failed" @@ -110,8 +112,10 @@ typedef struct { GType nm_modem_get_type (void); -const char * nm_modem_get_iface (NMModem *modem); -const char * nm_modem_get_path (NMModem *modem); +const char *nm_modem_get_path (NMModem *modem); +const char *nm_modem_get_uid (NMModem *modem); +const char *nm_modem_get_control_port (NMModem *modem); +const char *nm_modem_get_data_port (NMModem *modem); NMConnection *nm_modem_get_best_auto_connection (NMModem *self, GSList *connections, diff --git a/src/nm-device-bt.c b/src/nm-device-bt.c index 28a2fe1d2b..9d0d634147 100644 --- a/src/nm-device-bt.c +++ b/src/nm-device-bt.c @@ -611,7 +611,8 @@ nm_device_bt_modem_added (NMDeviceBt *self, const char *driver) { NMDeviceBtPrivate *priv; - const char *modem_iface; + const gchar *modem_data_port; + const gchar *modem_control_port; char *base; NMDeviceState state; NMDeviceStateReason reason = NM_DEVICE_STATE_REASON_NONE; @@ -622,14 +623,15 @@ nm_device_bt_modem_added (NMDeviceBt *self, g_return_val_if_fail (NM_IS_MODEM (modem), FALSE); priv = NM_DEVICE_BT_GET_PRIVATE (self); - modem_iface = nm_modem_get_iface (modem); - g_return_val_if_fail (modem_iface != NULL, FALSE); + modem_data_port = nm_modem_get_data_port (modem); + modem_control_port = nm_modem_get_control_port (modem); + g_return_val_if_fail (modem_data_port != NULL || modem_control_port != NULL, FALSE); if (!priv->rfcomm_iface) return FALSE; base = g_path_get_basename (priv->rfcomm_iface); - if (strcmp (base, modem_iface)) { + if (g_strcmp0 (base, modem_data_port) && g_strcmp0 (base, modem_control_port)) { g_free (base); return FALSE; } @@ -670,6 +672,8 @@ nm_device_bt_modem_added (NMDeviceBt *self, g_signal_connect (modem, NM_MODEM_AUTH_REQUESTED, G_CALLBACK (modem_auth_requested), self); g_signal_connect (modem, NM_MODEM_AUTH_RESULT, G_CALLBACK (modem_auth_result), self); + nm_device_set_ip_iface (NM_DEVICE (self), modem_data_port); + /* Kick off the modem connection */ if (!modem_stage1 (self, modem, &reason)) nm_device_state_changed (NM_DEVICE (self), NM_DEVICE_STATE_FAILED, reason); @@ -1341,7 +1345,7 @@ nm_device_bt_class_init (NMDeviceBtClass *klass) G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_UINT); - signals[PROPERTIES_CHANGED] = + signals[PROPERTIES_CHANGED] = nm_properties_changed_signal_new (object_class, G_STRUCT_OFFSET (NMDeviceBtClass, properties_changed)); diff --git a/src/nm-device-modem.c b/src/nm-device-modem.c index 3e95863b93..8f94491b9c 100644 --- a/src/nm-device-modem.c +++ b/src/nm-device-modem.c @@ -345,7 +345,9 @@ NMDevice * nm_device_modem_new (NMModem *modem, const char *driver) { NMDeviceModemCapabilities caps = NM_DEVICE_MODEM_CAPABILITY_NONE; - const char *type_desc = NULL; + NMDeviceModemCapabilities current_caps = NM_DEVICE_MODEM_CAPABILITY_NONE; + const gchar *type_desc = NULL; + const gchar *ip_iface = NULL; g_return_val_if_fail (modem != NULL, NULL); g_return_val_if_fail (NM_IS_MODEM (modem), NULL); @@ -353,10 +355,14 @@ nm_device_modem_new (NMModem *modem, const char *driver) if (NM_IS_MODEM_CDMA (modem)) { caps = NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO; + current_caps = caps; type_desc = "CDMA/EVDO"; + ip_iface = nm_modem_get_data_port (modem); } else if (NM_IS_MODEM_GSM (modem)) { caps = NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS; + current_caps = caps; type_desc = "GSM/UMTS"; + ip_iface = nm_modem_get_data_port (modem); } else { nm_log_warn (LOGD_MB, "unhandled modem type %s", G_OBJECT_TYPE_NAME (modem)); return NULL; @@ -364,7 +370,8 @@ nm_device_modem_new (NMModem *modem, const char *driver) return (NMDevice *) g_object_new (NM_TYPE_DEVICE_MODEM, NM_DEVICE_UDI, nm_modem_get_path (modem), - NM_DEVICE_IFACE, nm_modem_get_iface (modem), + NM_DEVICE_IFACE, nm_modem_get_uid (modem), + NM_DEVICE_IP_IFACE, ip_iface, NM_DEVICE_DRIVER, driver, NM_DEVICE_TYPE_DESC, type_desc, NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_MODEM, @@ -507,7 +514,7 @@ nm_device_modem_class_init (NMDeviceModemClass *mclass) G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); /* Signals */ - signals[PROPERTIES_CHANGED] = + signals[PROPERTIES_CHANGED] = nm_properties_changed_signal_new (object_class, G_STRUCT_OFFSET (NMDeviceModemClass, properties_changed)); @@ -522,4 +529,3 @@ nm_device_modem_class_init (NMDeviceModemClass *mclass) dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (mclass), &dbus_glib_nm_device_modem_object_info); } - diff --git a/src/nm-manager.c b/src/nm-manager.c index c8ce1157e8..9be0a0d10e 100644 --- a/src/nm-manager.c +++ b/src/nm-manager.c @@ -387,7 +387,8 @@ modem_added (NMModemManager *modem_manager, const char *ip_iface; GSList *iter; - ip_iface = nm_modem_get_iface (modem); + ip_iface = nm_modem_get_data_port (modem); + g_assert (ip_iface); replace_device = find_device_by_ip_iface (NM_MANAGER (user_data), ip_iface); if (replace_device) {