aboutsummaryrefslogtreecommitdiff
path: root/src/mm-modem-helpers-mbim.c
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@aleksander.es>2021-04-05 00:07:01 +0200
committerAleksander Morgado <aleksander@aleksander.es>2021-04-29 10:13:22 +0000
commit72879e4095bde2ee354a61f475ebc8bc847541c5 (patch)
treeca5b49dbad5d356e12019ef5e005c4017ec8730f /src/mm-modem-helpers-mbim.c
parent49b63cc62b46777c419b6a8e63629d228953fe95 (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.c64
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)
{