Re: [MM] [PATCH] bearer: allow specifying default IP family for bearers

2013-04-22 Thread Aleksander Morgado
On 04/22/2013 03:50 AM, Ben Chan wrote:
 This patch adds a 'bearer-default-ip-family' property to MMBearer, which
 specifies the default IP family to use for a bearer when no explicit
 value is given via the simple connect properties. The default IP family
 is set to IPv4 in MMBearer but can be overridden by a MMBearer subclass,
 which allows a modem plugin to specify an appropriate default value.

The logic to use the new property was added only in the
MMBroadbandBearer subclass; all the other available MMBearer subclasses
(QMI, MBIM) should also get modified to use this new default value.

Some more comments below.


 ---
  libmm-glib/mm-bearer-properties.c |  8 +---
  src/mm-bearer.c   | 25 +
  src/mm-bearer.h   |  2 ++
  src/mm-broadband-bearer.c | 25 +
  4 files changed, 49 insertions(+), 11 deletions(-)
 
 diff --git a/libmm-glib/mm-bearer-properties.c 
 b/libmm-glib/mm-bearer-properties.c
 index 6526ed0..2f59fee 100644
 --- a/libmm-glib/mm-bearer-properties.c
 +++ b/libmm-glib/mm-bearer-properties.c
 @@ -674,13 +674,7 @@ mm_bearer_properties_init (MMBearerProperties *self)
  self-priv-allow_roaming = TRUE;
  self-priv-rm_protocol = MM_MODEM_CDMA_RM_PROTOCOL_UNKNOWN;
  self-priv-allowed_auth = MM_BEARER_ALLOWED_AUTH_UNKNOWN;
 -
 -/* At some point in the future, this default should probably be changed
 - * to IPV4V6. However, presently support for this PDP type is rare. An
 - * even better approach would likely be to query which PDP types the
 - * modem supports (using AT+CGDCONT=?), and set the default accordingly
 - */
 -self-priv-ip_type = MM_BEARER_IP_FAMILY_IPV4;
 +self-priv-ip_type = MM_BEARER_IP_FAMILY_UNKNOWN;
  }
  
  static void
 diff --git a/src/mm-bearer.c b/src/mm-bearer.c
 index 9e96bde..d047e11 100644
 --- a/src/mm-bearer.c
 +++ b/src/mm-bearer.c
 @@ -57,6 +57,7 @@ enum {
  PROP_MODEM,
  PROP_STATUS,
  PROP_CONFIG,
 +PROP_DEFAULT_IP_FAMILY,
  PROP_LAST
  };
  
 @@ -73,6 +74,8 @@ struct _MMBearerPrivate {
  MMBearerStatus status;
  /* Configuration of the bearer */
  MMBearerProperties *config;
 +/* Default IP family of this bearer */
 +MMBearerIpFamily default_ip_family;
  
  /* Cancellable for connect() */
  GCancellable *connect_cancellable;
 @@ -844,6 +847,12 @@ mm_bearer_get_config (MMBearer *self)
  NULL);
  }
  
 +MMBearerIpFamily
 +mm_bearer_get_default_ip_family (MMBearer *self)
 +{
 +return self-priv-default_ip_family;
 +}
 +
  
 /*/
  
  static void
 @@ -969,6 +978,9 @@ set_property (GObject *object,
  g_variant_unref (dictionary);
  break;
  }
 +case PROP_DEFAULT_IP_FAMILY:
 +self-priv-default_ip_family = g_value_get_enum (value);
 +break;
  default:
  G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
  break;
 @@ -999,6 +1011,9 @@ get_property (GObject *object,
  case PROP_CONFIG:
  g_value_set_object (value, self-priv-config);
  break;
 +case PROP_DEFAULT_IP_FAMILY:
 +g_value_set_enum (value, self-priv-default_ip_family);
 +break;
  default:
  G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
  break;
 @@ -1015,6 +1030,7 @@ mm_bearer_init (MMBearer *self)
  self-priv-status = MM_BEARER_STATUS_DISCONNECTED;
  self-priv-reason_3gpp = CONNECTION_FORBIDDEN_REASON_NONE;
  self-priv-reason_cdma = CONNECTION_FORBIDDEN_REASON_NONE;
 +self-priv-default_ip_family = MM_BEARER_IP_FAMILY_IPV4;
  
  /* Set defaults */
  mm_gdbus_bearer_set_interface (MM_GDBUS_BEARER (self), NULL);
 @@ -,6 +1127,15 @@ mm_bearer_class_init (MMBearerClass *klass)
   MM_TYPE_BEARER_PROPERTIES,
   G_PARAM_READWRITE);
  g_object_class_install_property (object_class, PROP_CONFIG, 
 properties[PROP_CONFIG]);
 +
 +properties[PROP_DEFAULT_IP_FAMILY] =
 +g_param_spec_enum (MM_BEARER_DEFAULT_IP_FAMILY,
 +   Bearer default IP family,
 +   IP family to use for this bearer when no IP 
 family is specified,
 +   MM_TYPE_BEARER_IP_FAMILY,
 +   MM_BEARER_IP_FAMILY_IPV4,
 +   G_PARAM_READWRITE);
 +g_object_class_install_property (object_class, PROP_DEFAULT_IP_FAMILY, 
 properties[PROP_DEFAULT_IP_FAMILY]);
  }
  
  
 /*/
 diff --git a/src/mm-bearer.h b/src/mm-bearer.h
 index c617297..cc71bfd 100644
 --- a/src/mm-bearer.h
 +++ b/src/mm-bearer.h
 @@ -58,6 +58,7 @@ typedef struct _MMBearerPrivate MMBearerPrivate;
  #define MM_BEARER_MODEM  bearer-modem
  #define MM_BEARER_STATUS bearer-status
  #define 

Re: [MM] [PATCH] bearer: allow specifying default IP family for bearers

2013-04-22 Thread Ben Chan
Thanks. Submitted a revised patch.

- Ben


On Mon, Apr 22, 2013 at 12:42 AM, Aleksander Morgado
aleksan...@lanedo.comwrote:

 On 04/22/2013 03:50 AM, Ben Chan wrote:
  This patch adds a 'bearer-default-ip-family' property to MMBearer, which
  specifies the default IP family to use for a bearer when no explicit
  value is given via the simple connect properties. The default IP family
  is set to IPv4 in MMBearer but can be overridden by a MMBearer subclass,
  which allows a modem plugin to specify an appropriate default value.

 The logic to use the new property was added only in the
 MMBroadbandBearer subclass; all the other available MMBearer subclasses
 (QMI, MBIM) should also get modified to use this new default value.

 Some more comments below.


  ---
   libmm-glib/mm-bearer-properties.c |  8 +---
   src/mm-bearer.c   | 25 +
   src/mm-bearer.h   |  2 ++
   src/mm-broadband-bearer.c | 25 +
   4 files changed, 49 insertions(+), 11 deletions(-)
 
  diff --git a/libmm-glib/mm-bearer-properties.c
 b/libmm-glib/mm-bearer-properties.c
  index 6526ed0..2f59fee 100644
  --- a/libmm-glib/mm-bearer-properties.c
  +++ b/libmm-glib/mm-bearer-properties.c
  @@ -674,13 +674,7 @@ mm_bearer_properties_init (MMBearerProperties *self)
   self-priv-allow_roaming = TRUE;
   self-priv-rm_protocol = MM_MODEM_CDMA_RM_PROTOCOL_UNKNOWN;
   self-priv-allowed_auth = MM_BEARER_ALLOWED_AUTH_UNKNOWN;
  -
  -/* At some point in the future, this default should probably be
 changed
  - * to IPV4V6. However, presently support for this PDP type is rare.
 An
  - * even better approach would likely be to query which PDP types the
  - * modem supports (using AT+CGDCONT=?), and set the default
 accordingly
  - */
  -self-priv-ip_type = MM_BEARER_IP_FAMILY_IPV4;
  +self-priv-ip_type = MM_BEARER_IP_FAMILY_UNKNOWN;
   }
 
   static void
  diff --git a/src/mm-bearer.c b/src/mm-bearer.c
  index 9e96bde..d047e11 100644
  --- a/src/mm-bearer.c
  +++ b/src/mm-bearer.c
  @@ -57,6 +57,7 @@ enum {
   PROP_MODEM,
   PROP_STATUS,
   PROP_CONFIG,
  +PROP_DEFAULT_IP_FAMILY,
   PROP_LAST
   };
 
  @@ -73,6 +74,8 @@ struct _MMBearerPrivate {
   MMBearerStatus status;
   /* Configuration of the bearer */
   MMBearerProperties *config;
  +/* Default IP family of this bearer */
  +MMBearerIpFamily default_ip_family;
 
   /* Cancellable for connect() */
   GCancellable *connect_cancellable;
  @@ -844,6 +847,12 @@ mm_bearer_get_config (MMBearer *self)
   NULL);
   }
 
  +MMBearerIpFamily
  +mm_bearer_get_default_ip_family (MMBearer *self)
  +{
  +return self-priv-default_ip_family;
  +}
  +
 
  
 /*/
 
   static void
  @@ -969,6 +978,9 @@ set_property (GObject *object,
   g_variant_unref (dictionary);
   break;
   }
  +case PROP_DEFAULT_IP_FAMILY:
  +self-priv-default_ip_family = g_value_get_enum (value);
  +break;
   default:
   G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
   break;
  @@ -999,6 +1011,9 @@ get_property (GObject *object,
   case PROP_CONFIG:
   g_value_set_object (value, self-priv-config);
   break;
  +case PROP_DEFAULT_IP_FAMILY:
  +g_value_set_enum (value, self-priv-default_ip_family);
  +break;
   default:
   G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
   break;
  @@ -1015,6 +1030,7 @@ mm_bearer_init (MMBearer *self)
   self-priv-status = MM_BEARER_STATUS_DISCONNECTED;
   self-priv-reason_3gpp = CONNECTION_FORBIDDEN_REASON_NONE;
   self-priv-reason_cdma = CONNECTION_FORBIDDEN_REASON_NONE;
  +self-priv-default_ip_family = MM_BEARER_IP_FAMILY_IPV4;
 
   /* Set defaults */
   mm_gdbus_bearer_set_interface (MM_GDBUS_BEARER (self), NULL);
  @@ -,6 +1127,15 @@ mm_bearer_class_init (MMBearerClass *klass)
MM_TYPE_BEARER_PROPERTIES,
G_PARAM_READWRITE);
   g_object_class_install_property (object_class, PROP_CONFIG,
 properties[PROP_CONFIG]);
  +
  +properties[PROP_DEFAULT_IP_FAMILY] =
  +g_param_spec_enum (MM_BEARER_DEFAULT_IP_FAMILY,
  +   Bearer default IP family,
  +   IP family to use for this bearer when no IP
 family is specified,
  +   MM_TYPE_BEARER_IP_FAMILY,
  +   MM_BEARER_IP_FAMILY_IPV4,
  +   G_PARAM_READWRITE);
  +g_object_class_install_property (object_class,
 PROP_DEFAULT_IP_FAMILY, properties[PROP_DEFAULT_IP_FAMILY]);
   }
 
 
  
 /*/
  diff --git a/src/mm-bearer.h b/src/mm-bearer.h
  index c617297..cc71bfd 

[MM] [PATCH] bearer: allow specifying default IP family for bearers

2013-04-21 Thread Ben Chan
This patch adds a 'bearer-default-ip-family' property to MMBearer, which
specifies the default IP family to use for a bearer when no explicit
value is given via the simple connect properties. The default IP family
is set to IPv4 in MMBearer but can be overridden by a MMBearer subclass,
which allows a modem plugin to specify an appropriate default value.
---
 libmm-glib/mm-bearer-properties.c |  8 +---
 src/mm-bearer.c   | 25 +
 src/mm-bearer.h   |  2 ++
 src/mm-broadband-bearer.c | 25 +
 4 files changed, 49 insertions(+), 11 deletions(-)

diff --git a/libmm-glib/mm-bearer-properties.c 
b/libmm-glib/mm-bearer-properties.c
index 6526ed0..2f59fee 100644
--- a/libmm-glib/mm-bearer-properties.c
+++ b/libmm-glib/mm-bearer-properties.c
@@ -674,13 +674,7 @@ mm_bearer_properties_init (MMBearerProperties *self)
 self-priv-allow_roaming = TRUE;
 self-priv-rm_protocol = MM_MODEM_CDMA_RM_PROTOCOL_UNKNOWN;
 self-priv-allowed_auth = MM_BEARER_ALLOWED_AUTH_UNKNOWN;
-
-/* At some point in the future, this default should probably be changed
- * to IPV4V6. However, presently support for this PDP type is rare. An
- * even better approach would likely be to query which PDP types the
- * modem supports (using AT+CGDCONT=?), and set the default accordingly
- */
-self-priv-ip_type = MM_BEARER_IP_FAMILY_IPV4;
+self-priv-ip_type = MM_BEARER_IP_FAMILY_UNKNOWN;
 }
 
 static void
diff --git a/src/mm-bearer.c b/src/mm-bearer.c
index 9e96bde..d047e11 100644
--- a/src/mm-bearer.c
+++ b/src/mm-bearer.c
@@ -57,6 +57,7 @@ enum {
 PROP_MODEM,
 PROP_STATUS,
 PROP_CONFIG,
+PROP_DEFAULT_IP_FAMILY,
 PROP_LAST
 };
 
@@ -73,6 +74,8 @@ struct _MMBearerPrivate {
 MMBearerStatus status;
 /* Configuration of the bearer */
 MMBearerProperties *config;
+/* Default IP family of this bearer */
+MMBearerIpFamily default_ip_family;
 
 /* Cancellable for connect() */
 GCancellable *connect_cancellable;
@@ -844,6 +847,12 @@ mm_bearer_get_config (MMBearer *self)
 NULL);
 }
 
+MMBearerIpFamily
+mm_bearer_get_default_ip_family (MMBearer *self)
+{
+return self-priv-default_ip_family;
+}
+
 /*/
 
 static void
@@ -969,6 +978,9 @@ set_property (GObject *object,
 g_variant_unref (dictionary);
 break;
 }
+case PROP_DEFAULT_IP_FAMILY:
+self-priv-default_ip_family = g_value_get_enum (value);
+break;
 default:
 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 break;
@@ -999,6 +1011,9 @@ get_property (GObject *object,
 case PROP_CONFIG:
 g_value_set_object (value, self-priv-config);
 break;
+case PROP_DEFAULT_IP_FAMILY:
+g_value_set_enum (value, self-priv-default_ip_family);
+break;
 default:
 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 break;
@@ -1015,6 +1030,7 @@ mm_bearer_init (MMBearer *self)
 self-priv-status = MM_BEARER_STATUS_DISCONNECTED;
 self-priv-reason_3gpp = CONNECTION_FORBIDDEN_REASON_NONE;
 self-priv-reason_cdma = CONNECTION_FORBIDDEN_REASON_NONE;
+self-priv-default_ip_family = MM_BEARER_IP_FAMILY_IPV4;
 
 /* Set defaults */
 mm_gdbus_bearer_set_interface (MM_GDBUS_BEARER (self), NULL);
@@ -,6 +1127,15 @@ mm_bearer_class_init (MMBearerClass *klass)
  MM_TYPE_BEARER_PROPERTIES,
  G_PARAM_READWRITE);
 g_object_class_install_property (object_class, PROP_CONFIG, 
properties[PROP_CONFIG]);
+
+properties[PROP_DEFAULT_IP_FAMILY] =
+g_param_spec_enum (MM_BEARER_DEFAULT_IP_FAMILY,
+   Bearer default IP family,
+   IP family to use for this bearer when no IP family 
is specified,
+   MM_TYPE_BEARER_IP_FAMILY,
+   MM_BEARER_IP_FAMILY_IPV4,
+   G_PARAM_READWRITE);
+g_object_class_install_property (object_class, PROP_DEFAULT_IP_FAMILY, 
properties[PROP_DEFAULT_IP_FAMILY]);
 }
 
 /*/
diff --git a/src/mm-bearer.h b/src/mm-bearer.h
index c617297..cc71bfd 100644
--- a/src/mm-bearer.h
+++ b/src/mm-bearer.h
@@ -58,6 +58,7 @@ typedef struct _MMBearerPrivate MMBearerPrivate;
 #define MM_BEARER_MODEM  bearer-modem
 #define MM_BEARER_STATUS bearer-status
 #define MM_BEARER_CONFIG bearer-config
+#define MM_BEARER_DEFAULT_IP_FAMILY bearer-deafult-ip-family
 
 typedef enum { /* underscore_name=mm_bearer_status */
 MM_BEARER_STATUS_DISCONNECTED,
@@ -103,6 +104,7 @@ const gchar*mm_bearer_get_path(MMBearer 
*bearer);
 MMBearerStatus  mm_bearer_get_status  (MMBearer *bearer);
 MMBearerProperties *mm_bearer_peek_config (MMBearer *self);