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

Aleksander Morgado aleksander at aleksander.es
Thu Dec 3 06:19:07 PST 2015


On Wed, Dec 2, 2015 at 5:46 PM, Džiugas Baltrūnas <dziugas at simula.no> wrote:
> Hi Aleksander,
>
> I fixed the dashes and the '2' part of '3gpp_profile2' was indeed a typo.
>

This has been merged to git master now.

> ---
>  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
>
>



-- 
Aleksander
https://aleksander.es


More information about the libqmi-devel mailing list