diff options
author | Aleksander Morgado <aleksander@aleksander.es> | 2021-04-05 00:07:01 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2021-04-29 10:13:22 +0000 |
commit | 72879e4095bde2ee354a61f475ebc8bc847541c5 (patch) | |
tree | ca5b49dbad5d356e12019ef5e005c4017ec8730f /src/mm-modem-helpers-mbim.c | |
parent | 49b63cc62b46777c419b6a8e63629d228953fe95 (diff) |
broadband-modem-mbim: implement profile management support
We use the "Provisioned Contexts" message support to add and edit
profiles.
We also use the same message, with context-type set to "none" to
attempt deleting it, although that doesn't seem to be fully supported
by all modems. E.g. the EM7345 (FIH7160_V1.1_MODEM_01.1349.12) will
still report contexts 'deleted' in this way, with the context-type set
to "none".ยบ
Diffstat (limited to 'src/mm-modem-helpers-mbim.c')
-rw-r--r-- | src/mm-modem-helpers-mbim.c | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/src/mm-modem-helpers-mbim.c b/src/mm-modem-helpers-mbim.c index e418969f..c907b22e 100644 --- a/src/mm-modem-helpers-mbim.c +++ b/src/mm-modem-helpers-mbim.c @@ -408,6 +408,70 @@ mm_bearer_allowed_auth_to_mbim_auth_protocol (MMBearerAllowedAuth bearer_auth, /*****************************************************************************/ +MMBearerApnType +mm_bearer_apn_type_from_mbim_context_type (MbimContextType context_type) +{ + switch (context_type) { + case MBIM_CONTEXT_TYPE_INTERNET: + return MM_BEARER_APN_TYPE_DEFAULT; + case MBIM_CONTEXT_TYPE_VPN: + return MM_BEARER_APN_TYPE_PRIVATE; + case MBIM_CONTEXT_TYPE_VOICE: + return MM_BEARER_APN_TYPE_VOICE; + case MBIM_CONTEXT_TYPE_PURCHASE: + return MM_BEARER_APN_TYPE_MANAGEMENT; + case MBIM_CONTEXT_TYPE_IMS: + return MM_BEARER_APN_TYPE_IMS; + case MBIM_CONTEXT_TYPE_MMS: + return MM_BEARER_APN_TYPE_MMS; + case MBIM_CONTEXT_TYPE_INVALID: + case MBIM_CONTEXT_TYPE_NONE: + case MBIM_CONTEXT_TYPE_LOCAL: + case MBIM_CONTEXT_TYPE_VIDEO_SHARE: + /* some types unused right now */ + default: + return MM_BEARER_APN_TYPE_NONE; + } +} + +MbimContextType +mm_bearer_apn_type_to_mbim_context_type (MMBearerApnType apn_type, + gpointer log_object, + GError **error) +{ + g_autofree gchar *str = NULL; + + /* NOTE: the input is a BITMASK, so we try to find a "best match" */ + + if (apn_type == MM_BEARER_APN_TYPE_NONE) { + mm_obj_dbg (log_object, "using default (internet) APN type"); + return MBIM_CONTEXT_TYPE_INTERNET; + } + + if (apn_type & MM_BEARER_APN_TYPE_DEFAULT) + return MBIM_CONTEXT_TYPE_INTERNET; + if (apn_type & MM_BEARER_APN_TYPE_IMS) + return MBIM_CONTEXT_TYPE_IMS; + if (apn_type & MM_BEARER_APN_TYPE_MMS) + return MBIM_CONTEXT_TYPE_MMS; + if (apn_type &MM_BEARER_APN_TYPE_MANAGEMENT) + return MBIM_CONTEXT_TYPE_PURCHASE; + if (apn_type & MM_BEARER_APN_TYPE_VOICE) + return MBIM_CONTEXT_TYPE_VOICE; + if (apn_type & MM_BEARER_APN_TYPE_PRIVATE) + return MBIM_CONTEXT_TYPE_VPN; + + str = mm_bearer_apn_type_build_string_from_mask (apn_type); + g_set_error (error, + MM_CORE_ERROR, + MM_CORE_ERROR_UNSUPPORTED, + "Unsupported APN types (%s)", + str); + return MBIM_CONTEXT_TYPE_NONE; +} + +/*****************************************************************************/ + MMBearerIpFamily mm_bearer_ip_family_from_mbim_context_ip_type (MbimContextIpType ip_type) { |