diff options
-rw-r--r-- | libmm-common/mm-bearer-properties.c | 7 | ||||
-rw-r--r-- | src/mm-broadband-bearer.c | 14 |
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; |