diff options
author | Aleksander Morgado <aleksander@aleksander.es> | 2018-11-14 18:00:38 +0100 |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2018-12-07 16:20:53 +0000 |
commit | 48ba504f4e7e59cde380954fba84a790d34eaef4 (patch) | |
tree | b8ce05110de32c9b73ddb8f7ab0fb1c5107dcdee | |
parent | d6e2c69129900f50dd8c0ed6cb9a7a17c141a85e (diff) | |
download | ModemManager-48ba504f4e7e59cde380954fba84a790d34eaef4.tar.gz |
helpers-mbim: new method to convert IP type settings to/from MM
-rw-r--r-- | src/mm-bearer-mbim.c | 26 | ||||
-rw-r--r-- | src/mm-modem-helpers-mbim.c | 56 | ||||
-rw-r--r-- | src/mm-modem-helpers-mbim.h | 3 |
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 */ |