aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libmm-common/mm-bearer-properties.c7
-rw-r--r--src/mm-broadband-bearer.c14
2 files changed, 14 insertions, 7 deletions
diff --git a/libmm-common/mm-bearer-properties.c b/libmm-common/mm-bearer-properties.c
index 9afa07f0..8eb665c9 100644
--- a/libmm-common/mm-bearer-properties.c
+++ b/libmm-common/mm-bearer-properties.c
@@ -473,6 +473,13 @@ mm_bearer_properties_init (MMBearerProperties *self)
/* Some defaults */
self->priv->allow_roaming = TRUE;
self->priv->rm_protocol = MM_MODEM_CDMA_RM_PROTOCOL_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 = g_strdup ("IP");
}
static void
diff --git a/src/mm-broadband-bearer.c b/src/mm-broadband-bearer.c
index e7af2772..cf55c7b9 100644
--- a/src/mm-broadband-bearer.c
+++ b/src/mm-broadband-bearer.c
@@ -758,8 +758,9 @@ find_cid_ready (MMBaseModem *modem,
/* Initialize PDP context with our APN */
ctx->cid = g_variant_get_uint32 (result);
- command = g_strdup_printf ("+CGDCONT=%u,\"IP\",\"%s\"",
+ command = g_strdup_printf ("+CGDCONT=%u,\"%s\",\"%s\"",
ctx->cid,
+ mm_bearer_properties_get_ip_type (mm_bearer_peek_config (MM_BEARER (ctx->self))),
mm_bearer_properties_get_apn (mm_bearer_peek_config (MM_BEARER (ctx->self))));
mm_base_modem_at_command_full (ctx->modem,
ctx->primary,
@@ -818,8 +819,7 @@ parse_cid_range (MMBaseModem *modem,
pdp_type = g_match_info_fetch (match_info, 3);
- /* TODO: What about PDP contexts of type "IPV6"? */
- if (g_str_equal (pdp_type, "IP")) {
+ if (g_str_equal (pdp_type, mm_bearer_properties_get_ip_type (mm_bearer_peek_config (MM_BEARER (ctx->self))))) {
gchar *max_cid_range_str;
guint max_cid_range;
@@ -905,7 +905,7 @@ parse_pdp_list (MMBaseModem *modem,
pdp->cid,
pdp->pdp_type ? pdp->pdp_type : "",
pdp->apn ? pdp->apn : "");
- if (g_str_equal (pdp->pdp_type, "IP")) {
+ if (g_str_equal (pdp->pdp_type, mm_bearer_properties_get_ip_type (mm_bearer_peek_config (MM_BEARER (ctx->self))))) {
/* PDP with no APN set? we may use that one if not exact match found */
if (!pdp->apn || !pdp->apn[0]) {
mm_dbg ("Found PDP context with CID %u and no APN",
@@ -917,9 +917,9 @@ parse_pdp_list (MMBaseModem *modem,
apn = mm_bearer_properties_get_apn (mm_bearer_peek_config (MM_BEARER (ctx->self)));
if (apn &&
g_str_equal (pdp->apn, apn)) {
- /* Found a PDP context with the same CID, we'll use it. */
- mm_dbg ("Found PDP context with CID %u for APN '%s'",
- pdp->cid, pdp->apn);
+ /* Found a PDP context with the same CID and PDP type, we'll use it. */
+ mm_dbg ("Found PDP context with CID %u and PDP type %s for APN '%s'",
+ pdp->cid, pdp->pdp_type, pdp->apn);
cid = pdp->cid;
/* In this case, stop searching */
break;