diff options
author | Dan Williams <dcbw@redhat.com> | 2018-01-22 13:01:02 -0600 |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2018-01-23 13:07:29 -0600 |
commit | 2bf7eae99e81fae932ca672f8148dbac2eb59a5c (patch) | |
tree | 654f2aa2e857e1fab2a15e02b313e5ac4b5b999f /src | |
parent | 16e15d49297f72397f6b691cf7a9ccf47bdae844 (diff) |
mbimcli: add "ip-type" property to --connect
(cherry picked from commit 18eb8aceede2092e4db61ef93caf94f0154c7bf7)
Diffstat (limited to 'src')
-rw-r--r-- | src/mbimcli/mbimcli-basic-connect.c | 64 |
1 files changed, 49 insertions, 15 deletions
diff --git a/src/mbimcli/mbimcli-basic-connect.c b/src/mbimcli/mbimcli-basic-connect.c index b27e179..3b0d5ef 100644 --- a/src/mbimcli/mbimcli-basic-connect.c +++ b/src/mbimcli/mbimcli-basic-connect.c @@ -181,7 +181,7 @@ static GOptionEntry entries[] = { "[SessionID]" }, { "connect", 0, 0, G_OPTION_ARG_STRING, &set_connect_activate_str, - "Connect (allowed keys: session-id, apn, auth (PAP|CHAP|MSCHAPV2), username, password)", + "Connect (allowed keys: session-id, apn, ip-type (ipv4|ipv6|ipv4v6), auth (PAP|CHAP|MSCHAPV2), username, password)", "[\"key=value,...\"]" }, { "query-ip-configuration", 0, G_OPTION_FLAG_OPTIONAL_ARG, G_OPTION_ARG_CALLBACK, G_CALLBACK (query_ip_configuration_arg_parse), @@ -1055,6 +1055,24 @@ mbim_auth_protocol_from_string (const gchar *str, } static gboolean +mbim_context_ip_type_from_string (const gchar *str, + MbimContextIpType *ip_type) +{ + if (g_ascii_strcasecmp (str, "ipv4") == 0) { + *ip_type = MBIM_CONTEXT_IP_TYPE_IPV4; + return TRUE; + } else if (g_ascii_strcasecmp (str, "ipv6") == 0) { + *ip_type = MBIM_CONTEXT_IP_TYPE_IPV6; + return TRUE; + } else if (g_ascii_strcasecmp (str, "ipv4v6") == 0) { + *ip_type = MBIM_CONTEXT_IP_TYPE_IPV4V6; + return TRUE; + } + + return FALSE; +} + +static gboolean connect_session_id_parse (const gchar *str, gboolean allow_empty, guint32 *session_id, @@ -1094,11 +1112,12 @@ connect_session_id_parse (const gchar *str, } typedef struct { - guint32 session_id; - gchar *apn; - MbimAuthProtocol auth_protocol; - gchar *username; - gchar *password; + guint32 session_id; + gchar *apn; + MbimAuthProtocol auth_protocol; + gchar *username; + gchar *password; + MbimContextIpType ip_type; } ConnectActivateProperties; static gboolean connect_activate_properties_handle (const gchar *key, @@ -1136,6 +1155,15 @@ static gboolean connect_activate_properties_handle (const gchar *key, props->username = g_strdup (value); } else if (g_ascii_strcasecmp (key, "password") == 0 && !props->password) { props->password = g_strdup (value); + } else if (g_ascii_strcasecmp (key, "ip-type") == 0) { + if (!mbim_context_ip_type_from_string (value, &props->ip_type)) { + g_set_error (error, + MBIM_CORE_ERROR, + MBIM_CORE_ERROR_FAILED, + "unknown ip type '%s'", + value); + return FALSE; + } } else { g_set_error (error, MBIM_CORE_ERROR, @@ -1149,19 +1177,21 @@ static gboolean connect_activate_properties_handle (const gchar *key, } static gboolean -set_connect_activate_parse (const gchar *str, - guint32 *session_id, - gchar **apn, - MbimAuthProtocol *auth_protocol, - gchar **username, - gchar **password) +set_connect_activate_parse (const gchar *str, + guint32 *session_id, + gchar **apn, + MbimAuthProtocol *auth_protocol, + gchar **username, + gchar **password, + MbimContextIpType *ip_type) { ConnectActivateProperties props = { .session_id = 0, .apn = NULL, .auth_protocol = MBIM_AUTH_PROTOCOL_NONE, .username = NULL, - .password = NULL + .password = NULL, + .ip_type = MBIM_CONTEXT_IP_TYPE_DEFAULT }; gchar **split = NULL; @@ -1170,6 +1200,7 @@ set_connect_activate_parse (const gchar *str, g_assert (auth_protocol != NULL); g_assert (username != NULL); g_assert (password != NULL); + g_assert (ip_type != NULL); if (strchr (str, '=')) { GError *error = NULL; @@ -1231,6 +1262,7 @@ set_connect_activate_parse (const gchar *str, *auth_protocol = props.auth_protocol; *username = props.username; *password = props.password; + *ip_type = props.ip_type; if (split) g_strfreev (split); @@ -2139,13 +2171,15 @@ mbimcli_basic_connect_run (MbimDevice *device, MbimAuthProtocol auth_protocol; gchar *username = NULL; gchar *password = NULL; + MbimContextIpType ip_type = MBIM_CONTEXT_IP_TYPE_DEFAULT; if (!set_connect_activate_parse (set_connect_activate_str, &session_id, &apn, &auth_protocol, &username, - &password)) { + &password, + &ip_type)) { shutdown (FALSE); return; } @@ -2157,7 +2191,7 @@ mbimcli_basic_connect_run (MbimDevice *device, password, MBIM_COMPRESSION_NONE, auth_protocol, - MBIM_CONTEXT_IP_TYPE_DEFAULT, + ip_type, mbim_uuid_from_context_type (MBIM_CONTEXT_TYPE_INTERNET), &error); g_free (apn); |