[PATCH] libqmi-qmicli: extend --wds-start-network with 3gpp-profile and 3gpp2-profile parameters

Džiugas Baltrūnas dziugas at simula.no
Wed Dec 2 08:46:32 PST 2015


Hi Aleksander,

I fixed the dashes and the '2' part of '3gpp_profile2' was indeed a typo.

---
 src/qmicli/qmicli-wds.c | 38 +++++++++++++++++++++++++++++++-------
 1 file changed, 31 insertions(+), 7 deletions(-)

diff --git a/src/qmicli/qmicli-wds.c b/src/qmicli/qmicli-wds.c
index 5e6979d..06a8b92 100644
--- a/src/qmicli/qmicli-wds.c
+++ b/src/qmicli/qmicli-wds.c
@@ -67,7 +67,7 @@ static gboolean noop_flag;

 static GOptionEntry entries[] = {
     { "wds-start-network", 0, 0, G_OPTION_ARG_STRING, &start_network_str,
-      "Start network (allowed keys: apn, auth (PAP|CHAP|BOTH), username,
password, autoconnect=yes)",
+      "Start network (allowed keys: apn, 3gpp-profile, 3gpp2-profile, auth
(PAP|CHAP|BOTH), username, password, autoconnect=yes)",
       "[\"key=value,...\"]"
     },
     { "wds-follow-network", 0, 0, G_OPTION_ARG_NONE, &follow_network_flag,
@@ -332,6 +332,8 @@ packet_status_timeout (void)

 typedef struct {
     gchar                *apn;
+    guint8                profile_index_3gpp;
+    guint8                profile_index_3gpp2;
     QmiWdsAuthentication  auth;
     gboolean              auth_set;
     gchar                *username;
@@ -362,6 +364,16 @@ start_network_properties_handle (const gchar  *key,
         return TRUE;
     }

+    if (g_ascii_strcasecmp (key, "3gpp-profile") == 0 &&
!props->profile_index_3gpp) {
+        props->profile_index_3gpp = atoi (value);
+        return TRUE;
+    }
+
+    if (g_ascii_strcasecmp (key, "3gpp2-profile") == 0 &&
!props->profile_index_3gpp2) {
+        props->profile_index_3gpp2 = atoi (value);
+        return TRUE;
+    }
+
     if (g_ascii_strcasecmp (key, "auth") == 0 && !props->auth_set) {
         if (!qmicli_read_authentication_from_string (value,
&(props->auth))) {
             g_set_error (error,
@@ -413,11 +425,13 @@ start_network_input_create (const gchar *str)
     gchar **split = NULL;
     QmiMessageWdsStartNetworkInput *input = NULL;
     StartNetworkProperties props = {
-        .apn      = NULL,
-        .auth     = QMI_WDS_AUTHENTICATION_NONE,
-        .auth_set = FALSE,
-        .username = NULL,
-        .password = NULL,
+        .apn                 = NULL,
+        .profile_index_3gpp  = 0,
+        .profile_index_3gpp2 = 0,
+        .auth                = QMI_WDS_AUTHENTICATION_NONE,
+        .auth_set            = FALSE,
+        .username            = NULL,
+        .password            = NULL,
     };

     /* An empty string is totally valid (i.e. no TLVs) */
@@ -465,6 +479,14 @@ start_network_input_create (const gchar *str)
     if (props.apn)
         qmi_message_wds_start_network_input_set_apn (input, props.apn,
NULL);

+    /* Set 3GPP profile */
+    if (props.profile_index_3gpp > 0)
+        qmi_message_wds_start_network_input_set_profile_index_3gpp (input,
props.profile_index_3gpp, NULL);
+
+    /* Set 3GPP2 profile */
+    if (props.profile_index_3gpp2 > 0)
+        qmi_message_wds_start_network_input_set_profile_index_3gpp2
(input, props.profile_index_3gpp2, NULL);
+
     /* Set authentication method */
     if (props.auth_set) {
         aux_auth_str = qmi_wds_authentication_build_string_from_mask
(props.auth);
@@ -483,8 +505,10 @@ start_network_input_create (const gchar *str)
     if (props.autoconnect_set)
         qmi_message_wds_start_network_input_set_enable_autoconnect (input,
props.autoconnect, NULL);

-    g_debug ("Network start parameters set (apn: '%s', auth: '%s',
username: '%s', password: '%s', autoconnect: '%s')",
+    g_debug ("Network start parameters set (apn: '%s', 3gpp_profile: '%u',
3gpp2_profile: '%u', auth: '%s', username: '%s', password: '%s',
autoconnect: '%s')",
              props.apn                             ? props.apn
             : "unspecified",
+             props.profile_index_3gpp,
+             props.profile_index_3gpp2,
              aux_auth_str                          ? aux_auth_str
              : "unspecified",
              (props.username && props.username[0]) ? props.username
              : "unspecified",
              (props.password && props.password[0]) ? props.password
              : "unspecified",
-- 
2.1.0


On 2 December 2015 at 15:45, Aleksander Morgado <aleksander at aleksander.es>
wrote:

> Hey,
>
> On Wed, Dec 2, 2015 at 1:07 PM, Džiugas Baltrūnas <dziugas at simula.no>
> wrote:
> > Some modems with multiple PDN connection support (for example, Sierra
> > Wireless MC7304) seem to require the usage of 3GPP(2) Configured Profile
> > Identifier in order to successfully establish more than one active PDN
> > connection. Trying to start a second connection with
> > --wds-start-network="apn=xxx" typically leads to the termination of the
> > first connection. Multiple connections are established as expected when
> > using profile indexes, e.g.:
> >
> > # qmicli -d /dev/cdc-wdm0 --wds-start-network="3gpp-profile=1"
> > # qmicli -d /dev/cdc-wdm1 --wds-start-network="3gpp-profile=2"
> >
> > Note that  pre-configured profile indexes can be obtained using
> > --wds-get-profile-list command or using 'AT+CGCONT?' AT command.
> >
> > ---
> >  src/qmicli/qmicli-wds.c | 38 +++++++++++++++++++++++++++++++-------
> >  1 file changed, 31 insertions(+), 7 deletions(-)
> >
> > diff --git a/src/qmicli/qmicli-wds.c b/src/qmicli/qmicli-wds.c
> > index 5e6979d..94835f9 100644
> > --- a/src/qmicli/qmicli-wds.c
> > +++ b/src/qmicli/qmicli-wds.c
> > @@ -67,7 +67,7 @@ static gboolean noop_flag;
> >
> >  static GOptionEntry entries[] = {
> >      { "wds-start-network", 0, 0, G_OPTION_ARG_STRING,
> &start_network_str,
> > -      "Start network (allowed keys: apn, auth (PAP|CHAP|BOTH), username,
> > password, autoconnect=yes)",
> > +      "Start network (allowed keys: apn, 3gpp-profile, 3gpp2-profile,
> auth
> > (PAP|CHAP|BOTH), username, password, autoconnect=yes)",
> >        "[\"key=value,...\"]"
> >      },
> >      { "wds-follow-network", 0, 0, G_OPTION_ARG_NONE,
> &follow_network_flag,
> > @@ -332,6 +332,8 @@ packet_status_timeout (void)
> >
> >  typedef struct {
> >      gchar                *apn;
> > +    guint8                profile_index_3gpp;
> > +    guint8                profile_index_3gpp2;
> >      QmiWdsAuthentication  auth;
> >      gboolean              auth_set;
> >      gchar                *username;
> > @@ -362,6 +364,16 @@ start_network_properties_handle (const gchar  *key,
> >          return TRUE;
> >      }
> >
> > +    if (g_ascii_strcasecmp (key, "3gpp_profile") == 0 &&
> > !props->profile_index_3gpp) {
> > +        props->profile_index_3gpp = atoi (value);
> > +        return TRUE;
> > +    }
> > +
> > +    if (g_ascii_strcasecmp (key, "3gpp_profile2") == 0 &&
> > !props->profile_index_3gpp2) {
> > +        props->profile_index_3gpp2 = atoi (value);
> > +        return TRUE;
> > +    }
> > +
>
> Aren't the expected keys with a dash instead of an underscore?
>
> Also, I'd suggest to name the 3GPP2 profile one as "3gpp2-profile"
> instead of "3gpp-profile2"
>
>
> >      if (g_ascii_strcasecmp (key, "auth") == 0 && !props->auth_set) {
> >          if (!qmicli_read_authentication_from_string (value,
> > &(props->auth))) {
> >              g_set_error (error,
> > @@ -413,11 +425,13 @@ start_network_input_create (const gchar *str)
> >      gchar **split = NULL;
> >      QmiMessageWdsStartNetworkInput *input = NULL;
> >      StartNetworkProperties props = {
> > -        .apn      = NULL,
> > -        .auth     = QMI_WDS_AUTHENTICATION_NONE,
> > -        .auth_set = FALSE,
> > -        .username = NULL,
> > -        .password = NULL,
> > +        .apn                 = NULL,
> > +        .profile_index_3gpp  = 0,
> > +        .profile_index_3gpp2 = 0,
> > +        .auth                = QMI_WDS_AUTHENTICATION_NONE,
> > +        .auth_set            = FALSE,
> > +        .username            = NULL,
> > +        .password            = NULL,
> >      };
> >
> >      /* An empty string is totally valid (i.e. no TLVs) */
> > @@ -465,6 +479,14 @@ start_network_input_create (const gchar *str)
> >      if (props.apn)
> >          qmi_message_wds_start_network_input_set_apn (input, props.apn,
> > NULL);
> >
> > +    /* Set 3GPP profile */
> > +    if (props.profile_index_3gpp > 0)
> > +        qmi_message_wds_start_network_input_set_profile_index_3gpp
> (input,
> > props.profile_index_3gpp, NULL);
> > +
> > +    /* Set 3GPP2 profile */
> > +    if (props.profile_index_3gpp2 > 0)
> > +        qmi_message_wds_start_network_input_set_profile_index_3gpp2
> (input,
> > props.profile_index_3gpp2, NULL);
> > +
> >      /* Set authentication method */
> >      if (props.auth_set) {
> >          aux_auth_str = qmi_wds_authentication_build_string_from_mask
> > (props.auth);
> > @@ -483,8 +505,10 @@ start_network_input_create (const gchar *str)
> >      if (props.autoconnect_set)
> >          qmi_message_wds_start_network_input_set_enable_autoconnect
> (input,
> > props.autoconnect, NULL);
> >
> > -    g_debug ("Network start parameters set (apn: '%s', auth: '%s',
> > username: '%s', password: '%s', autoconnect: '%s')",
> > +    g_debug ("Network start parameters set (apn: '%s', 3gpp_profile:
> '%u',
> > 3gpp2_profile: '%u', auth: '%s', username: '%s', password: '%s',
> > autoconnect: '%s')",
> >               props.apn                             ? props.apn
> > : "unspecified",
> > +             props.profile_index_3gpp,
> > +             props.profile_index_3gpp2,
> >               aux_auth_str                          ? aux_auth_str
> > : "unspecified",
> >               (props.username && props.username[0]) ? props.username
> > : "unspecified",
> >               (props.password && props.password[0]) ? props.password
> > : "unspecified",
> > --
> > 2.1.0
> >
> >
> > _______________________________________________
> > libqmi-devel mailing list
> > libqmi-devel at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/libqmi-devel
> >
>
>
>
> --
> Aleksander
> https://aleksander.es
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/libqmi-devel/attachments/20151202/cd052d4e/attachment-0001.html>


More information about the libqmi-devel mailing list