Re: [MM] [PATCH] bearer: allow specifying default IP family for bearers
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
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
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);