[PATCH 05/15] modem-manager: rework interface related properties in `NMModem'



The logic behind the `iface' property (which actually is removed) gets split
into three new properties, as follows::

 * `uid': Just defines a new string property which must contain a unique ID of
    the modem, mainly for logging.

 * `control-port': a string property defining which is the control port the
    modem uses. This property is actually optional and may be specified as NULL.
    The main purpose of this property is to allow the easy integration of the
    new ModemManager into the `NMDeviceBt' object. The bluetooth device needs
    to know the port used by the modem; and we cannot use the Data port
    information as that is only available until the bearer is created. Instead,
    for the new ModemManager we will use the control port information exposed.

 * `data-port': a string property defining which is the data port to use in the
    connection. This property is always defined in the `NMModemGsm' and
    `NMModemCdma' objects.
---
 src/modem-manager/nm-modem-cdma.c    |  4 +-
 src/modem-manager/nm-modem-generic.c |  2 +-
 src/modem-manager/nm-modem-gsm.c     |  4 +-
 src/modem-manager/nm-modem.c         | 84 +++++++++++++++++++++++++++++-------
 src/modem-manager/nm-modem.h         | 20 +++++----
 src/nm-device-bt.c                   | 14 +++---
 src/nm-device-modem.c                | 14 ++++--
 src/nm-manager.c                     |  3 +-
 8 files changed, 108 insertions(+), 37 deletions(-)

diff --git a/src/modem-manager/nm-modem-cdma.c b/src/modem-manager/nm-modem-cdma.c
index 00e506a..3002e79 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 3d1b700..0214f1c 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 b6854ca..340ee98 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 26c3536..5ce7ff7 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);
 }
@@ -757,6 +793,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,
 							  "DBus path",
@@ -765,14 +809,22 @@ 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,
 							"IP method",
diff --git a/src/modem-manager/nm-modem.h b/src/modem-manager/nm-modem.h
index d86b1d0..fb07a8e 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 28a2fe1..d59f345 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 3e95863..8f94491 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 c8ce115..9be0a0d 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) {
-- 
1.7.11.7



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]