<div dir="ltr">Logic is sound.<div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span style="font-size:12.8px"> the user ends up changing the CID that the device uses for default LTE attachment (e.g. CID=1 for Qualcomm or CID=16 for Huawei ME909u)</span></blockquote><div>Wouldn't this still end up being okay for users too. Once they realize they're using the wrong CDC & switch pdp-cid (& the lte back off timer expires), the next 4g connection attempt should re-set the LTE(1 /14) pdp-cid? That's how I read the Cinterion AT doc.</div><div><br></div><div>Code LGTM</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, May 14, 2017 at 8:51 AM, Aleksander Morgado <span dir="ltr"><<a href="mailto:aleksander@aleksander.es" target="_blank">aleksander@aleksander.es</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Some operators, most notably Verizon, require connection to be<br>
performed through a specific PDP context (#3). This API update allows<br>
the user to specify the PDP CID via a new 'pdp-cid' parameter given in<br>
either the Simple.Connect() or the Modem.CreateBearer() methods.<br>
<br>
This implementation is currently bound to every modem that uses the AT<br>
protocol and the AT+CGDCONT command to manage available PDP contexts.<br>
---<br>
<br>
Hey Dan, Reinhard and Matthew,<br>
<br>
Some months ago we discussed about how we could define the PDP context to be used in a connection, as some operators would require specific PDP contexts (e.g. Verizon would require PDP context #3 for the internet connection).<br>
<br>
This patch is an initial approach to the problem, by letting the user select in which PDP context ID the APN should be configured and selected for the connection.<br>
<br>
This parameter is optional, and if not given we'll default to the original logic of looking for the best CID to use, e.g. by re-using one with the same settings we're requesting, if available.<br>
<br>
This feature may be risky if, as Reinhard pointed out, the user ends up changing the CID that the device uses for default LTE attachment (e.g. CID=1 for Qualcomm or CID=16 for Huawei ME909u). But being it optional, I don't see why we shouldn't have this, if it helps setting up proper connections with operators that require a specific PDP context ID.<br>
<br>
What do you guys think?<br>
<br>
---<br>
cli/mmcli-bearer.c | 9 ++++<br>
docs/reference/libmm-glib/<wbr>libmm-glib-sections.txt | 4 ++<br>
.../org.freedesktop.<wbr>ModemManager1.Modem.xml | 2 +<br>
libmm-glib/mm-bearer-<wbr>properties.c | 59 +++++++++++++++++++++-<br>
libmm-glib/mm-bearer-<wbr>properties.h | 3 ++<br>
libmm-glib/mm-simple-connect-<wbr>properties.c | 34 +++++++++++++<br>
libmm-glib/mm-simple-connect-<wbr>properties.h | 3 ++<br>
src/mm-broadband-bearer.c | 41 ++++++++++-----<br>
src/mm-iface-modem-simple.c | 13 +++--<br>
9 files changed, 150 insertions(+), 18 deletions(-)<br>
<br>
diff --git a/cli/mmcli-bearer.c b/cli/mmcli-bearer.c<br>
index cd9ecca0..daa86148 100644<br>
--- a/cli/mmcli-bearer.c<br>
+++ b/cli/mmcli-bearer.c<br>
@@ -163,11 +163,18 @@ print_bearer_info (MMBearer *bearer)<br>
<br>
if (properties) {<br>
gchar *ip_family_str;<br>
+ gchar *pdp_cid_str = NULL;<br>
+ guint pdp_cid;<br>
<br>
ip_family_str = (mm_bearer_ip_family_build_<wbr>string_from_mask (<br>
mm_bearer_properties_get_ip_<wbr>type (properties)));<br>
+<br>
+ if ((pdp_cid = mm_bearer_properties_get_pdp_<wbr>cid (properties)) != 0)<br>
+ pdp_cid_str = g_strdup_printf ("%u", pdp_cid);<br>
+<br>
g_print (" -------------------------\n"<br>
" Properties | apn: '%s'\n"<br>
+ " | PDP CID: '%s'\n"<br>
" | roaming: '%s'\n"<br>
" | IP type: '%s'\n"<br>
" | user: '%s'\n"<br>
@@ -175,6 +182,7 @@ print_bearer_info (MMBearer *bearer)<br>
" | number: '%s'\n"<br>
" | Rm protocol: '%s'\n",<br>
VALIDATE_NONE (mm_bearer_properties_get_apn (properties)),<br>
+ VALIDATE_NONE (pdp_cid_str),<br>
mm_bearer_properties_get_<wbr>allow_roaming (properties) ? "allowed" : "forbidden",<br>
VALIDATE_UNKNOWN (ip_family_str),<br>
VALIDATE_NONE (mm_bearer_properties_get_user (properties)),<br>
@@ -183,6 +191,7 @@ print_bearer_info (MMBearer *bearer)<br>
VALIDATE_UNKNOWN (mm_modem_cdma_rm_protocol_<wbr>get_string (<br>
mm_bearer_properties_get_rm_<wbr>protocol (properties))));<br>
g_free (ip_family_str);<br>
+ g_free (pdp_cid_str);<br>
}<br>
<br>
/* IPv4 */<br>
diff --git a/docs/reference/libmm-glib/<wbr>libmm-glib-sections.txt b/docs/reference/libmm-glib/<wbr>libmm-glib-sections.txt<br>
index 46f2d923..077e7ee3 100644<br>
--- a/docs/reference/libmm-glib/<wbr>libmm-glib-sections.txt<br>
+++ b/docs/reference/libmm-glib/<wbr>libmm-glib-sections.txt<br>
@@ -779,6 +779,8 @@ mm_simple_connect_properties_<wbr>get_operator_id<br>
mm_simple_connect_properties_<wbr>set_operator_id<br>
mm_simple_connect_properties_<wbr>get_apn<br>
mm_simple_connect_properties_<wbr>set_apn<br>
+mm_simple_connect_properties_<wbr>get_pdp_cid<br>
+mm_simple_connect_properties_<wbr>set_pdp_cid<br>
mm_simple_connect_properties_<wbr>get_allowed_auth<br>
mm_simple_connect_properties_<wbr>set_allowed_auth<br>
mm_simple_connect_properties_<wbr>get_user<br>
@@ -1064,6 +1066,8 @@ mm_bearer_properties_new<br>
<SUBSECTION GettersSetters><br>
mm_bearer_properties_get_apn<br>
mm_bearer_properties_set_apn<br>
+mm_bearer_properties_get_pdp_<wbr>cid<br>
+mm_bearer_properties_set_pdp_<wbr>cid<br>
mm_bearer_properties_get_<wbr>allowed_auth<br>
mm_bearer_properties_set_<wbr>allowed_auth<br>
mm_bearer_properties_get_user<br>
diff --git a/introspection/org.<wbr>freedesktop.ModemManager1.<wbr>Modem.xml b/introspection/org.<wbr>freedesktop.ModemManager1.<wbr>Modem.xml<br>
index a5a236c5..23c14ede 100644<br>
--- a/introspection/org.<wbr>freedesktop.ModemManager1.<wbr>Modem.xml<br>
+++ b/introspection/org.<wbr>freedesktop.ModemManager1.<wbr>Modem.xml<br>
@@ -61,6 +61,8 @@<br>
<variablelist><br>
<varlistentry><term><literal>"<wbr>apn"</literal></term><br>
<listitem><para>Access Point Name, given as a string value (signature <literal>"s"</literal>). Required in 3GPP.</para></listitem></<wbr>varlistentry><br>
+ <varlistentry><term><literal>"<wbr>pdp-cid"</literal></term><br>
+ <listitem><para>PDP context identifier, given as an unsigned 32-bit integer value (signature <literal>"u"</literal>). Optional in 3GPP.</para></listitem></<wbr>varlistentry><br>
<varlistentry><term><literal>"<wbr>ip-type"</literal></term><br>
<listitem><para>Addressing type, given as a <link linkend="MMBearerIpFamily"><wbr>MMBearerIpFamily</link> value (signature <literal>"u"</literal>). Optional in 3GPP and CDMA.</para></listitem></<wbr>varlistentry><br>
<varlistentry><term><literal>"<wbr>allowed-auth"</literal></term><br>
diff --git a/libmm-glib/mm-bearer-<wbr>properties.c b/libmm-glib/mm-bearer-<wbr>properties.c<br>
index c87068ff..8e54f108 100644<br>
--- a/libmm-glib/mm-bearer-<wbr>properties.c<br>
+++ b/libmm-glib/mm-bearer-<wbr>properties.c<br>
@@ -34,6 +34,7 @@<br>
G_DEFINE_TYPE (MMBearerProperties, mm_bearer_properties, G_TYPE_OBJECT);<br>
<br>
#define PROPERTY_APN "apn"<br>
+#define PROPERTY_PDP_CID "pdp-cid"<br>
#define PROPERTY_ALLOWED_AUTH "allowed-auth"<br>
#define PROPERTY_USER "user"<br>
#define PROPERTY_PASSWORD "password"<br>
@@ -45,6 +46,8 @@ G_DEFINE_TYPE (MMBearerProperties, mm_bearer_properties, G_TYPE_OBJECT);<br>
struct _MMBearerPropertiesPrivate {<br>
/* APN */<br>
gchar *apn;<br>
+ /* PDP CID */<br>
+ guint pdp_cid;<br>
/* IP type */<br>
MMBearerIpFamily ip_type;<br>
/* Allowed auth */<br>
@@ -100,6 +103,40 @@ mm_bearer_properties_get_apn (MMBearerProperties *self)<br>
/*****************************<wbr>******************************<wbr>******************/<br>
<br>
/**<br>
+ * mm_bearer_properties_set_pdp_<wbr>cid:<br>
+ * @self: a #MMBearerProperties.<br>
+ * @pdp_cid: PDP context ID.<br>
+ *<br>
+ * Sets the PDP context ID to use in the connection attempt.<br>
+ */<br>
+void<br>
+mm_bearer_properties_set_pdp_<wbr>cid (MMBearerProperties *self,<br>
+ guint pdp_cid)<br>
+{<br>
+ g_return_if_fail (MM_IS_BEARER_PROPERTIES (self));<br>
+<br>
+ self->priv->pdp_cid = pdp_cid;<br>
+}<br>
+<br>
+/**<br>
+ * mm_bearer_properties_get_pdp_<wbr>cid:<br>
+ * @self: a #MMBearerProperties.<br>
+ *<br>
+ * Gets the PDP context ID to use in the connection attempt.<br>
+ *<br>
+ * Returns: the context number, or 0 if not set.<br>
+ */<br>
+guint<br>
+mm_bearer_properties_get_pdp_<wbr>cid (MMBearerProperties *self)<br>
+{<br>
+ g_return_val_if_fail (MM_IS_BEARER_PROPERTIES (self), 0);<br>
+<br>
+ return self->priv->pdp_cid;<br>
+}<br>
+<br>
+/****************************<wbr>******************************<wbr>*******************/<br>
+<br>
+/**<br>
* mm_bearer_properties_set_<wbr>allowed_auth:<br>
* @self: a #MMBearerProperties.<br>
* @allowed_auth: a bitmask of #MMBearerAllowedAuth values. %MM_BEARER_ALLOWED_AUTH_<wbr>UNKNOWN may be given to request the modem-default method.<br>
@@ -361,6 +398,12 @@ mm_bearer_properties_get_<wbr>dictionary (MMBearerProperties *self)<br>
PROPERTY_APN,<br>
g_variant_new_string (self->priv->apn));<br>
<br>
+ if (self->priv->pdp_cid)<br>
+ g_variant_builder_add (&builder,<br>
+ "{sv}",<br>
+ PROPERTY_PDP_CID,<br>
+ g_variant_new_uint32 (self->priv->pdp_cid));<br>
+<br>
if (self->priv->allowed_auth != MM_BEARER_ALLOWED_AUTH_<wbr>UNKNOWN)<br>
g_variant_builder_add (&builder,<br>
"{sv}",<br>
@@ -428,7 +471,16 @@ mm_bearer_properties_consume_<wbr>string (MMBearerProperties *self,<br>
<br>
if (g_str_equal (key, PROPERTY_APN))<br>
mm_bearer_properties_set_apn (self, value);<br>
- else if (g_str_equal (key, PROPERTY_ALLOWED_AUTH)) {<br>
+ else if (g_str_equal (key, PROPERTY_PDP_CID)) {<br>
+ guint aux;<br>
+<br>
+ if (!mm_get_uint_from_str (value, &aux)) {<br>
+ g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_FAILED,<br>
+ "Invalid PDP CID given: %s", value);<br>
+ return FALSE;<br>
+ }<br>
+ mm_bearer_properties_set_pdp_<wbr>cid (self, aux);<br>
+ }else if (g_str_equal (key, PROPERTY_ALLOWED_AUTH)) {<br>
GError *inner_error = NULL;<br>
MMBearerAllowedAuth allowed_auth;<br>
<br>
@@ -548,6 +600,10 @@ mm_bearer_properties_consume_<wbr>variant (MMBearerProperties *properties,<br>
mm_bearer_properties_set_apn (<br>
properties,<br>
g_variant_get_string (value, NULL));<br>
+ else if (g_str_equal (key, PROPERTY_PDP_CID))<br>
+ mm_bearer_properties_set_pdp_<wbr>cid (<br>
+ properties,<br>
+ g_variant_get_uint32 (value));<br>
else if (g_str_equal (key, PROPERTY_ALLOWED_AUTH))<br>
mm_bearer_properties_set_<wbr>allowed_auth (<br>
properties,<br>
@@ -664,6 +720,7 @@ mm_bearer_properties_cmp (MMBearerProperties *a,<br>
MMBearerProperties *b)<br>
{<br>
return ((!g_strcmp0 (a->priv->apn, b->priv->apn)) &&<br>
+ (a->priv->pdp_cid == b->priv->pdp_cid) &&<br>
(a->priv->ip_type == b->priv->ip_type) &&<br>
(!g_strcmp0 (a->priv->number, b->priv->number)) &&<br>
(a->priv->allowed_auth == b->priv->allowed_auth) &&<br>
diff --git a/libmm-glib/mm-bearer-<wbr>properties.h b/libmm-glib/mm-bearer-<wbr>properties.h<br>
index 361c8678..6fc1347d 100644<br>
--- a/libmm-glib/mm-bearer-<wbr>properties.h<br>
+++ b/libmm-glib/mm-bearer-<wbr>properties.h<br>
@@ -59,6 +59,8 @@ MMBearerProperties *mm_bearer_properties_new (void);<br>
<br>
void mm_bearer_properties_set_apn (MMBearerProperties *self,<br>
const gchar *apn);<br>
+void mm_bearer_properties_set_pdp_<wbr>cid (MMBearerProperties *self,<br>
+ guint pdp_cid);<br>
void mm_bearer_properties_set_<wbr>allowed_auth (MMBearerProperties *self,<br>
MMBearerAllowedAuth allowed_auth);<br>
void mm_bearer_properties_set_user (MMBearerProperties *self,<br>
@@ -75,6 +77,7 @@ void mm_bearer_properties_set_rm_<wbr>protocol (MMBearerProperties *self,<br>
MMModemCdmaRmProtocol protocol);<br>
<br>
const gchar *mm_bearer_properties_get_apn (MMBearerProperties *self);<br>
+guint mm_bearer_properties_get_pdp_<wbr>cid (MMBearerProperties *self);<br>
MMBearerAllowedAuth mm_bearer_properties_get_<wbr>allowed_auth (MMBearerProperties *self);<br>
const gchar *mm_bearer_properties_get_user (MMBearerProperties *self);<br>
const gchar *mm_bearer_properties_get_<wbr>password (MMBearerProperties *self);<br>
diff --git a/libmm-glib/mm-simple-<wbr>connect-properties.c b/libmm-glib/mm-simple-<wbr>connect-properties.c<br>
index 200b7c38..c696f50c 100644<br>
--- a/libmm-glib/mm-simple-<wbr>connect-properties.c<br>
+++ b/libmm-glib/mm-simple-<wbr>connect-properties.c<br>
@@ -153,6 +153,40 @@ mm_simple_connect_properties_<wbr>get_apn (MMSimpleConnectProperties *self)<br>
/*****************************<wbr>******************************<wbr>******************/<br>
<br>
/**<br>
+ * mm_simple_connect_properties_<wbr>set_pdp_cid:<br>
+ * @self: a #MMSimpleConnectProperties.<br>
+ * @pdp_cid: PDP context ID.<br>
+ *<br>
+ * Sets the PDP context ID to use in the connection attempt.<br>
+ */<br>
+void<br>
+mm_simple_connect_properties_<wbr>set_pdp_cid (MMSimpleConnectProperties *self,<br>
+ guint pdp_cid)<br>
+{<br>
+ g_return_if_fail (MM_IS_SIMPLE_CONNECT_<wbr>PROPERTIES (self));<br>
+<br>
+ mm_bearer_properties_set_pdp_<wbr>cid (self->priv->bearer_<wbr>properties, pdp_cid);<br>
+}<br>
+<br>
+/**<br>
+ * mm_simple_connect_properties_<wbr>get_pdp_cid:<br>
+ * @self: a #MMSimpleConnectProperties.<br>
+ *<br>
+ * Gets the PDP context ID to use in the connection attempt.<br>
+ *<br>
+ * Returns: the context number, or 0 if not set.<br>
+ */<br>
+guint<br>
+mm_simple_connect_properties_<wbr>get_pdp_cid (MMSimpleConnectProperties *self)<br>
+{<br>
+ g_return_val_if_fail (MM_IS_SIMPLE_CONNECT_<wbr>PROPERTIES (self), 0);<br>
+<br>
+ return mm_bearer_properties_get_pdp_<wbr>cid (self->priv->bearer_<wbr>properties);<br>
+}<br>
+<br>
+/****************************<wbr>******************************<wbr>*******************/<br>
+<br>
+/**<br>
* mm_simple_connect_properties_<wbr>set_allowed_auth:<br>
* @self: a #MMSimpleConnectProperties.<br>
* @allowed_auth: a bitmask of #MMBearerAllowedAuth values. %MM_BEARER_ALLOWED_AUTH_<wbr>UNKNOWN may be given to request the modem-default method.<br>
diff --git a/libmm-glib/mm-simple-<wbr>connect-properties.h b/libmm-glib/mm-simple-<wbr>connect-properties.h<br>
index 3167db0a..5378c5e9 100644<br>
--- a/libmm-glib/mm-simple-<wbr>connect-properties.h<br>
+++ b/libmm-glib/mm-simple-<wbr>connect-properties.h<br>
@@ -65,6 +65,8 @@ void mm_simple_connect_properties_<wbr>set_operator_id (MMSimpleConnectProperties *<br>
const gchar *operator_id);<br>
void mm_simple_connect_properties_<wbr>set_apn (MMSimpleConnectProperties *self,<br>
const gchar *apn);<br>
+void mm_simple_connect_properties_<wbr>set_pdp_cid (MMSimpleConnectProperties *self,<br>
+ guint pdp_cid);<br>
void mm_simple_connect_properties_<wbr>set_allowed_auth (MMSimpleConnectProperties *self,<br>
MMBearerAllowedAuth allowed_auth);<br>
void mm_simple_connect_properties_<wbr>set_user (MMSimpleConnectProperties *self,<br>
@@ -81,6 +83,7 @@ void mm_simple_connect_properties_<wbr>set_number (MMSimpleConnectProperties *<br>
const gchar *mm_simple_connect_properties_<wbr>get_pin (MMSimpleConnectProperties *self);<br>
const gchar *mm_simple_connect_properties_<wbr>get_operator_id (MMSimpleConnectProperties *self);<br>
const gchar *mm_simple_connect_properties_<wbr>get_apn (MMSimpleConnectProperties *self);<br>
+guint mm_simple_connect_properties_<wbr>get_pdp_cid (MMSimpleConnectProperties *self);<br>
MMBearerAllowedAuth mm_simple_connect_properties_<wbr>get_allowed_auth (MMSimpleConnectProperties *self);<br>
const gchar *mm_simple_connect_properties_<wbr>get_user (MMSimpleConnectProperties *self);<br>
const gchar *mm_simple_connect_properties_<wbr>get_password (MMSimpleConnectProperties *self);<br>
diff --git a/src/mm-broadband-bearer.c b/src/mm-broadband-bearer.c<br>
index ac701733..de4fa72e 100644<br>
--- a/src/mm-broadband-bearer.c<br>
+++ b/src/mm-broadband-bearer.c<br>
@@ -732,25 +732,17 @@ initialize_pdp_context_ready (MMBaseModem *modem,<br>
}<br>
<br>
static void<br>
-find_cid_ready (MMBaseModem *modem,<br>
- GAsyncResult *res,<br>
- GTask *task)<br>
+initialize_pdp_context (GTask *task)<br>
{<br>
gchar *apn;<br>
gchar *command;<br>
- GError *error = NULL;<br>
const gchar *pdp_type;<br>
CidSelection3gppContext *ctx;<br>
<br>
ctx = (CidSelection3gppContext *) g_task_get_task_data (task);<br>
<br>
- mm_base_modem_at_sequence_<wbr>full_finish (modem, res, NULL, &error);<br>
- if (error) {<br>
- mm_warn ("Couldn't find best CID to use: '%s'", error->message);<br>
- g_task_return_error (task, error);<br>
- g_object_unref (task);<br>
- return;<br>
- }<br>
+ /* If no error reported, we must have a valid CID to be used */<br>
+ g_assert (ctx->cid != 0);<br>
<br>
/* Validate requested PDP type */<br>
pdp_type = mm_3gpp_get_pdp_type_from_ip_<wbr>family (ctx->ip_family);<br>
@@ -766,9 +758,6 @@ find_cid_ready (MMBaseModem *modem,<br>
return;<br>
}<br>
<br>
- /* If no error reported, we must have a valid CID to be used */<br>
- g_assert (ctx->cid != 0);<br>
-<br>
/* If there's already a PDP context defined, just use it */<br>
if (ctx->use_existing_cid) {<br>
g_task_return_int (task, (gssize) ctx->cid);<br>
@@ -792,6 +781,24 @@ find_cid_ready (MMBaseModem *modem,<br>
g_free (command);<br>
}<br>
<br>
+static void<br>
+find_cid_ready (MMBaseModem *modem,<br>
+ GAsyncResult *res,<br>
+ GTask *task)<br>
+{<br>
+ GError *error = NULL;<br>
+<br>
+ mm_base_modem_at_sequence_<wbr>full_finish (modem, res, NULL, &error);<br>
+ if (error) {<br>
+ mm_warn ("Couldn't find best CID to use: '%s'", error->message);<br>
+ g_task_return_error (task, error);<br>
+ g_object_unref (task);<br>
+ return;<br>
+ }<br>
+<br>
+ initialize_pdp_context (task);<br>
+}<br>
+<br>
static gboolean<br>
parse_cid_range (MMBaseModem *modem,<br>
CidSelection3gppContext *ctx,<br>
@@ -998,6 +1005,12 @@ cid_selection_3gpp (MMBroadbandBearer *self,<br>
task = g_task_new (self, cancellable, callback, user_data);<br>
g_task_set_task_data (task, ctx, (GDestroyNotify) cid_selection_3gpp_context_<wbr>free);<br>
<br>
+ if ((ctx->cid = mm_bearer_properties_get_pdp_<wbr>cid (mm_base_bearer_peek_config (MM_BASE_BEARER (ctx->self)))) != 0) {<br>
+ mm_dbg ("Explicit CID requested by the user: %u", ctx->cid);<br>
+ initialize_pdp_context (task);<br>
+ return;<br>
+ }<br>
+<br>
mm_dbg ("Looking for best CID...");<br>
mm_base_modem_at_sequence_full (ctx->modem,<br>
ctx->primary,<br>
diff --git a/src/mm-iface-modem-simple.c b/src/mm-iface-modem-simple.c<br>
index a16adb19..59d980e4 100644<br>
--- a/src/mm-iface-modem-simple.c<br>
+++ b/src/mm-iface-modem-simple.c<br>
@@ -651,9 +651,10 @@ connect_auth_ready (MMBaseModem *self,<br>
<br>
/* Log about all the parameters being used for the simple connect */<br>
{<br>
- MMBearerAllowedAuth allowed_auth;<br>
- gchar *str;<br>
- MMBearerIpFamily ip_family;<br>
+ MMBearerAllowedAuth allowed_auth;<br>
+ gchar *str;<br>
+ MMBearerIpFamily ip_family;<br>
+ guint aux_uint;<br>
<br>
#define VALIDATE_UNSPECIFIED(str) (str ? str : "unspecified")<br>
<br>
@@ -665,6 +666,12 @@ connect_auth_ready (MMBaseModem *self,<br>
<br>
mm_dbg (" APN: %s", VALIDATE_UNSPECIFIED (mm_simple_connect_properties_<wbr>get_apn (ctx->properties)));<br>
<br>
+ aux_uint = mm_simple_connect_properties_<wbr>get_pdp_cid (ctx->properties);<br>
+ if (aux_uint)<br>
+ mm_dbg (" PDP CID: %u", aux_uint);<br>
+ else<br>
+ mm_dbg (" PDP CID: unspecified");<br>
+<br>
ip_family = mm_simple_connect_properties_<wbr>get_ip_type (ctx->properties);<br>
if (ip_family != MM_BEARER_IP_FAMILY_NONE) {<br>
str = mm_bearer_ip_family_build_<wbr>string_from_mask (ip_family);<br>
--<br>
2.12.2<br>
</blockquote></div><br></div>