summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@aleksander.es>2018-11-14 18:00:38 +0100
committerDan Williams <dcbw@redhat.com>2018-12-07 16:20:53 +0000
commit48ba504f4e7e59cde380954fba84a790d34eaef4 (patch)
treeb8ce05110de32c9b73ddb8f7ab0fb1c5107dcdee
parentd6e2c69129900f50dd8c0ed6cb9a7a17c141a85e (diff)
downloadModemManager-48ba504f4e7e59cde380954fba84a790d34eaef4.tar.gz
helpers-mbim: new method to convert IP type settings to/from MM
-rw-r--r--src/mm-bearer-mbim.c26
-rw-r--r--src/mm-modem-helpers-mbim.c56
-rw-r--r--src/mm-modem-helpers-mbim.h3
3 files changed, 61 insertions, 24 deletions
diff --git a/src/mm-bearer-mbim.c b/src/mm-bearer-mbim.c
index 8bf5d7709..a776c7f1f 100644
--- a/src/mm-bearer-mbim.c
+++ b/src/mm-bearer-mbim.c
@@ -973,30 +973,10 @@ connect_context_step (GTask *task)
g_free (str);
}
- if (ip_family == MM_BEARER_IP_FAMILY_IPV4)
- ctx->ip_type = MBIM_CONTEXT_IP_TYPE_IPV4;
- else if (ip_family == MM_BEARER_IP_FAMILY_IPV6)
- ctx->ip_type = MBIM_CONTEXT_IP_TYPE_IPV6;
- else if (ip_family == MM_BEARER_IP_FAMILY_IPV4V6)
- ctx->ip_type = MBIM_CONTEXT_IP_TYPE_IPV4V6;
- else if (ip_family == (MM_BEARER_IP_FAMILY_IPV4 | MM_BEARER_IP_FAMILY_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 */
- g_assert_not_reached ();
- else {
- gchar * str;
-
- str = mm_bearer_ip_family_build_string_from_mask (ip_family);
- g_task_return_new_error (
- task,
- MM_CORE_ERROR,
- MM_CORE_ERROR_UNSUPPORTED,
- "Unsupported IP type configuration: '%s'",
- str);
+ ctx->ip_type = mm_bearer_ip_family_to_mbim_context_ip_type (ip_family, &error);
+ if (error) {
+ g_task_return_error (task, error);
g_object_unref (task);
- g_free (str);
return;
}
diff --git a/src/mm-modem-helpers-mbim.c b/src/mm-modem-helpers-mbim.c
index fd5948bba..2e196c102 100644
--- a/src/mm-modem-helpers-mbim.c
+++ b/src/mm-modem-helpers-mbim.c
@@ -357,7 +357,7 @@ mm_bearer_allowed_auth_to_mbim_auth_protocol (MMBearerAllowedAuth bearer_auth,
g_set_error (error,
MM_CORE_ERROR,
MM_CORE_ERROR_UNSUPPORTED,
- "No match for the requested authentication methods (%s)",
+ "Unsupported authentication methods (%s)",
str);
g_free (str);
return MBIM_AUTH_PROTOCOL_NONE;
@@ -365,6 +365,60 @@ mm_bearer_allowed_auth_to_mbim_auth_protocol (MMBearerAllowedAuth bearer_auth,
/*****************************************************************************/
+MMBearerIpFamily
+mm_bearer_ip_family_from_mbim_context_ip_type (MbimContextIpType ip_type)
+{
+ switch (ip_type) {
+ case MBIM_CONTEXT_IP_TYPE_IPV4:
+ return MM_BEARER_IP_FAMILY_IPV4;
+ case MBIM_CONTEXT_IP_TYPE_IPV6:
+ return MM_BEARER_IP_FAMILY_IPV6;
+ case MBIM_CONTEXT_IP_TYPE_IPV4V6:
+ return MM_BEARER_IP_FAMILY_IPV4V6;
+ case MBIM_CONTEXT_IP_TYPE_IPV4_AND_IPV6:
+ return MM_BEARER_IP_FAMILY_IPV4 | MM_BEARER_IP_FAMILY_IPV6;
+ default:
+ return MM_BEARER_IP_FAMILY_NONE;
+ }
+}
+
+MbimContextIpType
+mm_bearer_ip_family_to_mbim_context_ip_type (MMBearerIpFamily ip_family,
+ GError **error)
+{
+ gchar *str;
+
+ /* NOTE: the input is a BITMASK, so we try to find a "best match" */
+
+ switch ((guint)ip_family) {
+ case MM_BEARER_IP_FAMILY_IPV4:
+ return MBIM_CONTEXT_IP_TYPE_IPV4;
+ case MM_BEARER_IP_FAMILY_IPV6:
+ return MBIM_CONTEXT_IP_TYPE_IPV6;
+ case MM_BEARER_IP_FAMILY_IPV4V6:
+ return MBIM_CONTEXT_IP_TYPE_IPV4V6;
+ case (MM_BEARER_IP_FAMILY_IPV4 | MM_BEARER_IP_FAMILY_IPV6):
+ return MBIM_CONTEXT_IP_TYPE_IPV4_AND_IPV6;
+ case MM_BEARER_IP_FAMILY_NONE:
+ case MM_BEARER_IP_FAMILY_ANY:
+ /* A valid default IP family should have been specified */
+ g_assert_not_reached ();
+ default:
+ break;
+ }
+
+ str = mm_bearer_ip_family_build_string_from_mask (ip_family);
+ g_set_error (error,
+ MM_CORE_ERROR,
+ MM_CORE_ERROR_UNSUPPORTED,
+ "Unsupported IP type configuration: '%s'",
+ str);
+ g_free (str);
+ return MBIM_CONTEXT_IP_TYPE_DEFAULT;
+}
+
+/*****************************************************************************/
+
MMSmsState
mm_sms_state_from_mbim_message_status (MbimSmsStatus status)
{
diff --git a/src/mm-modem-helpers-mbim.h b/src/mm-modem-helpers-mbim.h
index 3ae190eea..a648cac9f 100644
--- a/src/mm-modem-helpers-mbim.h
+++ b/src/mm-modem-helpers-mbim.h
@@ -42,6 +42,9 @@ GError *mm_mobile_equipment_error_from_mbim_nw_error (MbimNwError nw_error);
MMBearerAllowedAuth mm_bearer_allowed_auth_from_mbim_auth_protocol (MbimAuthProtocol auth_protocol);
MbimAuthProtocol mm_bearer_allowed_auth_to_mbim_auth_protocol (MMBearerAllowedAuth bearer_auth,
GError **error);
+MMBearerIpFamily mm_bearer_ip_family_from_mbim_context_ip_type (MbimContextIpType ip_type);
+MbimContextIpType mm_bearer_ip_family_to_mbim_context_ip_type (MMBearerIpFamily ip_family,
+ GError **error);
/*****************************************************************************/
/* MBIM/SMS to MM translations */