aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@aleksander.es>2022-07-25 21:51:56 +0200
committerAleksander Morgado <aleksander@aleksander.es>2022-07-25 20:43:07 +0000
commita32538fa3287aaedc2ecf7baa269ad1c4f3485a0 (patch)
treec83e96c5c33dca7c3aabd920e7bb672e79a91562
parent57637132c92214f7d30dd1a672c2075764e91120 (diff)
helpers-mbim: report correct network availability from mbim bitmask
MbimProviderState is a bitset, so don't try to match exact values in a switch statement when converting to MMModem3gppNetworkAvailability. Fixes https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/issues/524
-rw-r--r--src/mm-modem-helpers-mbim.c27
1 files changed, 15 insertions, 12 deletions
diff --git a/src/mm-modem-helpers-mbim.c b/src/mm-modem-helpers-mbim.c
index 757d3abc..651ecc45 100644
--- a/src/mm-modem-helpers-mbim.c
+++ b/src/mm-modem-helpers-mbim.c
@@ -268,20 +268,23 @@ mm_modem_access_technology_from_mbim_data_class (MbimDataClass data_class)
MMModem3gppNetworkAvailability
mm_modem_3gpp_network_availability_from_mbim_provider_state (MbimProviderState state)
{
- switch (state) {
- case MBIM_PROVIDER_STATE_HOME:
- case MBIM_PROVIDER_STATE_PREFERRED:
- case MBIM_PROVIDER_STATE_VISIBLE:
- case MBIM_PROVIDER_STATE_PREFERRED_MULTICARRIER:
- return MM_MODEM_3GPP_NETWORK_AVAILABILITY_AVAILABLE;
- case MBIM_PROVIDER_STATE_REGISTERED:
+ /* MbimProviderState is a bitmask!
+ *
+ * We don't explicitly process MBIM_PROVIDER_STATE_PREFERRED,
+ * MBIM_PROVIDER_STATE_PREFERRED_MULTICARRIER or MBIM_PROVIDER_STATE_HOME,
+ * so we don't report at MM level the type of operator it is (home,
+ * preferred or non-preferred), just its availability.
+ */
+ if (state & MBIM_PROVIDER_STATE_REGISTERED)
return MM_MODEM_3GPP_NETWORK_AVAILABILITY_CURRENT;
- case MBIM_PROVIDER_STATE_FORBIDDEN:
+
+ if (state & MBIM_PROVIDER_STATE_FORBIDDEN)
return MM_MODEM_3GPP_NETWORK_AVAILABILITY_FORBIDDEN;
- case MBIM_PROVIDER_STATE_UNKNOWN:
- default:
- return MM_MODEM_3GPP_NETWORK_AVAILABILITY_UNKNOWN;
- }
+
+ if (state & MBIM_PROVIDER_STATE_VISIBLE)
+ return MM_MODEM_3GPP_NETWORK_AVAILABILITY_AVAILABLE;
+
+ return MM_MODEM_3GPP_NETWORK_AVAILABILITY_UNKNOWN;
}
/*****************************************************************************/