MM never passes MBIM_CONTEXT_IP_TYPE_DEFAULT which would require paying
attention to the ip_type in the reply to figure out what type the modem
activated.  Instead, MM always specifies the ip_type it wants to activate,
and some modems (K5160) return a different type in the response.  The modem
is required to activate the type MM asks for or return an error, so if
the activation was successful we can safely assume the modem activated
the ip_type we want, and we can ignore the ip_type in the response.
---
 src/mm-bearer-mbim.c | 24 +++++++++++++-----------
 1 file changed, 13 insertions(+), 11 deletions(-)

diff --git a/src/mm-bearer-mbim.c b/src/mm-bearer-mbim.c
index 8c69fb3..5db5f32 100644
--- a/src/mm-bearer-mbim.c
+++ b/src/mm-bearer-mbim.c
@@ -581,7 +581,6 @@ connect_set_ready (MbimDevice *device,
     MbimMessage *response;
     guint32 session_id;
     MbimActivationState activation_state;
-    MbimContextIpType ip_type;
     guint32 nw_error;
 
     response = mbim_device_command_finish (device, res, &error);
@@ -595,7 +594,7 @@ connect_set_ready (MbimDevice *device,
                 &session_id,
                 &activation_state,
                 NULL, /* voice_call_state */
-                &ip_type,
+                NULL, /* ip_type */
                 NULL, /* context_type */
                 &nw_error,
                 &inner_error)) {
@@ -604,11 +603,15 @@ connect_set_ready (MbimDevice *device,
                     g_error_free (error);
                 error = mm_mobile_equipment_error_from_mbim_nw_error 
(nw_error);
             } else {
-                ctx->ip_type = ip_type;
+                /* Report the ip_type we originally requested, since the 
ip_type
+                 * from the response is only relevant if the requested used
+                 * MBIM_CONTEXT_IP_TYPE_DEFAULT, which MM never does.  Some
+                 * devices (K5160) report the wrong type in the response.
+                 */
                 mm_dbg ("Session ID '%u': %s (IP type: %s)",
                         session_id,
                         mbim_activation_state_get_string (activation_state),
-                        mbim_context_ip_type_get_string (ip_type));
+                        mbim_context_ip_type_get_string (ctx->ip_type));
             }
         } else {
             /* Prefer the error from the result to the parsing error */
@@ -816,7 +819,6 @@ connect_context_step (ConnectContext *ctx)
         const gchar *user;
         const gchar *password;
         MbimAuthProtocol auth;
-        MbimContextIpType ip_type;
         MMBearerIpFamily ip_family;
         GError *error = NULL;
 
@@ -870,13 +872,13 @@ connect_context_step (ConnectContext *ctx)
         }
 
         if (ip_family == MM_BEARER_IP_FAMILY_IPV4)
-            ip_type = MBIM_CONTEXT_IP_TYPE_IPV4;
+            ctx->ip_type = MBIM_CONTEXT_IP_TYPE_IPV4;
         else if (ip_family == MM_BEARER_IP_FAMILY_IPV6)
-            ip_type = MBIM_CONTEXT_IP_TYPE_IPV6;
+            ctx->ip_type = MBIM_CONTEXT_IP_TYPE_IPV6;
         else if (ip_family == MM_BEARER_IP_FAMILY_IPV4V6)
-            ip_type = MBIM_CONTEXT_IP_TYPE_IPV4V6;
+            ctx->ip_type = MBIM_CONTEXT_IP_TYPE_IPV4V6;
         else if (ip_family == (MM_BEARER_IP_FAMILY_IPV4 | 
MM_BEARER_IP_FAMILY_IPV6))
-            ip_type = MBIM_CONTEXT_IP_TYPE_IPV4_AND_IPV6;
+            ctx->ip_type = MBIM_CONTEXT_IP_TYPE_IPV4_AND_IPV6;
         else if (ip_family == MM_BEARER_IP_FAMILY_NONE ||
                  ip_family == MM_BEARER_IP_FAMILY_ANY)
             /* A valid default IP family should have been specified */
@@ -896,7 +898,7 @@ connect_context_step (ConnectContext *ctx)
             return;
         }
 
-        mm_dbg ("Launching %s connection with APN '%s'...", 
mbim_context_ip_type_get_string (ip_type), apn);
+        mm_dbg ("Launching %s connection with APN '%s'...", 
mbim_context_ip_type_get_string (ctx->ip_type), apn);
         message = (mbim_message_connect_set_new (
                        ctx->self->priv->session_id,
                        MBIM_ACTIVATION_COMMAND_ACTIVATE,
@@ -905,7 +907,7 @@ connect_context_step (ConnectContext *ctx)
                        password ? password : "",
                        MBIM_COMPRESSION_NONE,
                        auth,
-                       ip_type,
+                       ctx->ip_type,
                        mbim_uuid_from_context_type 
(MBIM_CONTEXT_TYPE_INTERNET),
                        &error));
         if (!message) {
-- 
2.5.5


_______________________________________________
ModemManager-devel mailing list
ModemManager-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/modemmanager-devel

Reply via email to