aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorUjjwal Pande <ujjwalpande@google.com>2024-05-30 01:02:17 +0000
committerAleksander Morgado <aleksander@aleksander.es>2024-06-12 09:39:12 +0000
commit4b615a2343673f7a6c19734f907c7efa22a32e15 (patch)
tree53a581997f5fba63df8015b22375dafa7924ed64 /src
parent2904510e760fa1fdf491d1ef4574c29d05307b3b (diff)
broadband-modem-mbim: report network rejections
Changes to expose network rejections for MBIM based modems.
Diffstat (limited to 'src')
-rw-r--r--src/mm-broadband-modem-mbim.c16
-rw-r--r--src/mm-modem-helpers-mbim.c82
-rw-r--r--src/mm-modem-helpers-mbim.h1
3 files changed, 99 insertions, 0 deletions
diff --git a/src/mm-broadband-modem-mbim.c b/src/mm-broadband-modem-mbim.c
index 412d26bf..910a93ac 100644
--- a/src/mm-broadband-modem-mbim.c
+++ b/src/mm-broadband-modem-mbim.c
@@ -5061,6 +5061,22 @@ common_process_register_state (MMBroadbandModemMbim *self,
mm_obj_dbg (self, "available data classes: '%s'", available_data_classes_str);
mm_obj_dbg (self, "preferred data classes: '%s'", preferred_data_classes_str);
+ if ((register_state != MBIM_REGISTER_STATE_HOME) &&
+ (register_state != MBIM_REGISTER_STATE_ROAMING) &&
+ mm_iface_modem_is_3gpp (MM_IFACE_MODEM (self))) {
+ MMNetworkError mm_nw_error;
+ MMModemAccessTechnology access_technology;
+
+ mm_nw_error = mm_modem_nw_error_from_mbim_nw_error (nw_error);
+ access_technology = mm_modem_access_technology_from_mbim_data_class (available_data_classes);
+
+ mm_iface_modem_3gpp_update_network_rejection (MM_IFACE_MODEM_3GPP (self),
+ mm_nw_error,
+ provider_id,
+ provider_name,
+ access_technology);
+ }
+
update_registration_info (self,
FALSE,
register_state,
diff --git a/src/mm-modem-helpers-mbim.c b/src/mm-modem-helpers-mbim.c
index a778b413..7cae6a32 100644
--- a/src/mm-modem-helpers-mbim.c
+++ b/src/mm-modem-helpers-mbim.c
@@ -1496,6 +1496,88 @@ mm_error_from_mbim_nw_error (MbimNwError nw_error,
"Unknown error");
}
+static const MMNetworkError mbim_mm_nw_errors[] = {
+ [MBIM_NW_ERROR_NONE] = MM_NETWORK_ERROR_NONE,
+ [MBIM_NW_ERROR_IMSI_UNKNOWN_IN_HLR] = MM_NETWORK_ERROR_IMSI_UNKNOWN_IN_HLR,
+ [MBIM_NW_ERROR_ILLEGAL_MS] = MM_NETWORK_ERROR_ILLEGAL_MS,
+ [MBIM_NW_ERROR_IMSI_UNKNOWN_IN_VLR] = MM_NETWORK_ERROR_IMSI_UNKNOWN_IN_VLR,
+ [MBIM_NW_ERROR_IMEI_NOT_ACCEPTED] = MM_NETWORK_ERROR_IMEI_NOT_ACCEPTED,
+ [MBIM_NW_ERROR_ILLEGAL_ME] = MM_NETWORK_ERROR_ILLEGAL_ME,
+ [MBIM_NW_ERROR_GPRS_NOT_ALLOWED] = MM_NETWORK_ERROR_GPRS_NOT_ALLOWED,
+ [MBIM_NW_ERROR_GPRS_AND_NON_GPRS_NOT_ALLOWED] = MM_NETWORK_ERROR_GPRS_AND_NON_GPRS_NOT_ALLOWED,
+ [MBIM_NW_ERROR_MS_IDENTITY_NOT_DERIVED_BY_NETWORK] = MM_NETWORK_ERROR_MS_IDENTITY_NOT_DERIVED_BY_NETWORK,
+ [MBIM_NW_ERROR_IMPLICITLY_DETACHED] = MM_NETWORK_ERROR_IMPLICITLY_DETACHED,
+ [MBIM_NW_ERROR_PLMN_NOT_ALLOWED] = MM_NETWORK_ERROR_PLMN_NOT_ALLOWED,
+ [MBIM_NW_ERROR_LOCATION_AREA_NOT_ALLOWED] = MM_NETWORK_ERROR_LOCATION_AREA_NOT_ALLOWED,
+ [MBIM_NW_ERROR_ROAMING_NOT_ALLOWED_IN_LOCATION_AREA] = MM_NETWORK_ERROR_ROAMING_NOT_ALLOWED_IN_LOCATION_AREA,
+ [MBIM_NW_ERROR_GPRS_NOT_ALLOWED_IN_PLMN] = MM_NETWORK_ERROR_GPRS_NOT_ALLOWED_IN_PLMN,
+ [MBIM_NW_ERROR_NO_CELLS_IN_LOCATION_AREA] = MM_NETWORK_ERROR_NO_CELLS_IN_LOCATION_AREA,
+ [MBIM_NW_ERROR_MSC_TEMPORARILY_NOT_REACHABLE] = MM_NETWORK_ERROR_MSC_TEMPORARILY_NOT_REACHABLE,
+ [MBIM_NW_ERROR_NETWORK_FAILURE] = MM_NETWORK_ERROR_NETWORK_FAILURE,
+ [MBIM_NW_ERROR_MAC_FAILURE] = MM_NETWORK_ERROR_MAC_FAILURE,
+ [MBIM_NW_ERROR_SYNCH_FAILURE] = MM_NETWORK_ERROR_SYNCH_FAILURE,
+ [MBIM_NW_ERROR_CONGESTION] = MM_NETWORK_ERROR_CONGESTION,
+ [MBIM_NW_ERROR_GSM_AUTHENTICATION_UNACCEPTABLE] = MM_NETWORK_ERROR_GSM_AUTHENTICATION_UNACCEPTABLE,
+ [MBIM_NW_ERROR_NOT_AUTHORIZED_FOR_CSG] = MM_NETWORK_ERROR_NOT_AUTHORIZED_FOR_CSG,
+ [MBIM_NW_ERROR_INSUFFICIENT_RESOURCES] = MM_NETWORK_ERROR_INSUFFICIENT_RESOURCES,
+ [MBIM_NW_ERROR_MISSING_OR_UNKNOWN_APN] = MM_NETWORK_ERROR_MISSING_OR_UNKNOWN_APN,
+ [MBIM_NW_ERROR_UNKNOWN_PDP_ADDRESS_OR_TYPE] = MM_NETWORK_ERROR_UNKNOWN_PDP_ADDRESS_OR_TYPE,
+ [MBIM_NW_ERROR_USER_AUTHENTICATION_FAILED] = MM_NETWORK_ERROR_USER_AUTHENTICATION_FAILED,
+ [MBIM_NW_ERROR_ACTIVATION_REJECTED_BY_GGSN_OR_GW] = MM_NETWORK_ERROR_ACTIVATION_REJECTED_BY_GGSN_OR_GW,
+ [MBIM_NW_ERROR_ACTIVATION_REJECTED_UNSPECIFIED] = MM_NETWORK_ERROR_REDIRECTION_TO_5GCN_REQUIRED,
+ [MBIM_NW_ERROR_SERVICE_OPTION_NOT_SUPPORTED] = MM_NETWORK_ERROR_SERVICE_OPTION_NOT_SUPPORTED,
+ [MBIM_NW_ERROR_REQUESTED_SERVICE_OPTION_NOT_SUBSCRIBED] = MM_NETWORK_ERROR_REQUESTED_SERVICE_OPTION_NOT_SUBSCRIBED,
+ [MBIM_NW_ERROR_SERVICE_OPTION_TEMPORARILY_OUT_OF_ORDER] = MM_NETWORK_ERROR_SERVICE_OPTION_TEMPORARILY_OUT_OF_ORDER,
+ [MBIM_NW_ERROR_NO_PDP_CONTEXT_ACTIVATED] = MM_NETWORK_ERROR_NO_PDP_CONTEXT_ACTIVATED,
+ [MBIM_NW_ERROR_SEMANTIC_ERROR_IN_THE_TFT_OPERATION] = MM_NETWORK_ERROR_SEMANTIC_ERROR_IN_THE_TFT_OPERATION,
+ [MBIM_NW_ERROR_SYNTACTICAL_ERROR_IN_THE_TFT_OPERATION] = MM_NETWORK_ERROR_SYNTACTICAL_ERROR_IN_THE_TFT_OPERATION,
+ [MBIM_NW_ERROR_UNKNOWN_PDP_CONTEXT] = MM_NETWORK_ERROR_UNKNOWN_PDP_CONTEXT,
+ [MBIM_NW_ERROR_SEMANTIC_ERRORS_IN_PACKET_FILTER] = MM_NETWORK_ERROR_SEMANTIC_ERRORS_IN_PACKET_FILTER,
+ [MBIM_NW_ERROR_SYNTACTICAL_ERRORS_IN_PACKET_FILTER] = MM_NETWORK_ERROR_SYNTACTICAL_ERRORS_IN_PACKET_FILTER,
+ [MBIM_NW_ERROR_PDP_CONTEXT_WITHOUT_TFT_ALREADY_ACTIVATED] = MM_NETWORK_ERROR_PDP_CONTEXT_WITHOUT_TFT_ALREADY_ACTIVATED,
+ [MBIM_NW_ERROR_REQUEST_REJECTED_OR_BEARER_CONTROL_MODE_VIOLATION] = MM_NETWORK_ERROR_REQUEST_REJECTED_OR_BEARER_CONTROL_MODE_VIOLATION,
+ [MBIM_NW_ERROR_LAST_PDN_DISCONNECTION_NOT_ALLOWED] = MM_NETWORK_ERROR_LAST_PDN_DISCONNECTION_NOT_ALLOWED,
+ [MBIM_NW_ERROR_PDP_TYPE_IPV4_ONLY_ALLOWED] = MM_NETWORK_ERROR_PDP_TYPE_IPV4_ONLY_ALLOWED,
+ [MBIM_NW_ERROR_PDP_TYPE_IPV6_ONLY_ALLOWED] = MM_NETWORK_ERROR_PDP_TYPE_IPV6_ONLY_ALLOWED,
+ [MBIM_NW_ERROR_NO_NETWORK_SLICES_AVAILABLE] = MM_NETWORK_ERROR_NO_NETWORK_SLICES_AVAILABLE,
+ [MBIM_NW_ERROR_MAXIMUM_NUMBER_OF_PDP_CONTEXTS_REACHED] = MM_NETWORK_ERROR_MAXIMUM_NUMBER_OF_PDP_CONTEXTS_REACHED,
+ [MBIM_NW_ERROR_REQUESTED_APN_NOT_SUPPORTED_IN_CURRENT_RAT_AND_PLMN] = MM_NETWORK_ERROR_REQUESTED_APN_NOT_SUPPORTED_IN_CURRENT_RAT_AND_PLMN,
+ [MBIM_NW_ERROR_INSUFFICIENT_RESOURCES_FOR_SPECIFIC_SLICE_AND_DNN] = MM_NETWORK_ERROR_INSUFFICIENT_RESOURCES_FOR_SPECIFIC_SLICE_AND_DNN,
+ [MBIM_NW_ERROR_INSUFFICIENT_RESOURCES_FOR_SPECIFIC_SLICE] = MM_NETWORK_ERROR_INSUFFICIENT_RESOURCES_FOR_SPECIFIC_SLICE,
+ [MBIM_NW_ERROR_NGKSI_ALREADY_IN_USE] = MM_NETWORK_ERROR_NGKSI_ALREADY_IN_USE,
+ [MBIM_NW_ERROR_NON_3GPP_ACCESS_TO_5GCN_NOT_ALLOWED] = MM_NETWORK_ERROR_NON_3GPP_ACCESS_TO_5GCN_NOT_ALLOWED,
+ [MBIM_NW_ERROR_SERVING_NETWORK_NOT_AUTHORIZED] = MM_NETWORK_ERROR_SERVING_NETWORK_NOT_AUTHORIZED,
+ [MBIM_NW_ERROR_TEMPORARILY_NOT_AUTHORIZED_FOR_THIS_SNPN] = MM_NETWORK_ERROR_TEMPORARILY_NOT_AUTHORIZED_FOR_THIS_SNPN,
+ [MBIM_NW_ERROR_PERMANENTLY_NOT_AUTHORIZED_FOR_THIS_SNPN] = MM_NETWORK_ERROR_PERMANENTLY_NOT_AUTHORIZED_FOR_THIS_SNPN,
+ [MBIM_NW_ERROR_NOT_AUTHORIZED_FOR_THIS_CAG_OR_AUTHORIZED_FOR_CAG_CELLS_ONLY] = MM_NETWORK_ERROR_NOT_AUTHORIZED_FOR_THIS_CAG_OR_AUTHORIZED_FOR_CAG_CELLS_ONLY,
+ [MBIM_NW_ERROR_WIRELINE_ACCESS_AREA_NOT_ALLOWED] = MM_NETWORK_ERROR_WIRELINE_ACCESS_AREA_NOT_ALLOWED,
+ [MBIM_NW_ERROR_PAYLOAD_WAS_NOT_FORWARDED] = MM_NETWORK_ERROR_PAYLOAD_WAS_NOT_FORWARDED,
+ [MBIM_NW_ERROR_DNN_NOT_SUPPORTED_OR_NOT_SUBSCRIBED_IN_THE_SLICE] = MM_NETWORK_ERROR_DNN_NOT_SUPPORTED_OR_NOT_SUBSCRIBED_IN_THE_SLICE,
+ [MBIM_NW_ERROR_INSUFFICIENT_USER_PLANE_RESOURCES_FOR_THE_PDU_SESSION] = MM_NETWORK_ERROR_INSUFFICIENT_USER_PLANE_RESOURCES_FOR_THE_PDU_SESSION,
+ [MBIM_NW_ERROR_SEMANTICALLY_INCORRECT_MESSAGE] = MM_NETWORK_ERROR_SEMANTICALLY_INCORRECT_MESSAGE,
+ [MBIM_NW_ERROR_INVALID_MANDATORY_INFORMATION] = MM_NETWORK_ERROR_INVALID_MANDATORY_INFORMATION,
+ [MBIM_NW_ERROR_MESSAGE_TYPE_NON_EXISTENT_OR_NOT_IMPLEMENTED] = MM_NETWORK_ERROR_MESSAGE_TYPE_NON_EXISTENT_OR_NOT_IMPLEMENTED,
+ [MBIM_NW_ERROR_MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE] = MM_NETWORK_ERROR_MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE,
+ [MBIM_NW_ERROR_INFORMATION_ELEMENT_NON_EXISTENT_OR_NOT_IMPLEMENTED] = MM_NETWORK_ERROR_INFORMATION_ELEMENT_NON_EXISTENT_OR_NOT_IMPLEMENTED,
+ [MBIM_NW_ERROR_CONDITIONAL_IE_ERROR] = MM_NETWORK_ERROR_CONDITIONAL_IE_ERROR,
+ [MBIM_NW_ERROR_MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE] = MM_NETWORK_ERROR_MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE,
+ [MBIM_NW_ERROR_PROTOCOL_ERROR_UNSPECIFIED] = MM_NETWORK_ERROR_PROTOCOL_ERROR_UNSPECIFIED,
+ [MBIM_NW_ERROR_APN_RESTRICTION_VALUE_INCOMPATIBLE_WITH_ACTIVE_PDP_CONTEXT] = MM_NETWORK_ERROR_APN_RESTRICTION_VALUE_INCOMPATIBLE_WITH_ACTIVE_PDP_CONTEXT,
+ [MBIM_NW_ERROR_MULTIPLE_ACCESSES_TO_A_PDN_CONNECTION_NOT_ALLOWED] = MM_NETWORK_ERROR_MULTIPLE_ACCESSES_TO_A_PDN_CONNECTION_NOT_ALLOWED,
+};
+
+MMNetworkError
+mm_modem_nw_error_from_mbim_nw_error (MbimNwError nw_error)
+{
+ if (nw_error < G_N_ELEMENTS (mbim_mm_nw_errors)) {
+ /* convert to nw error */
+ return mbim_mm_nw_errors[nw_error];
+ }
+
+ /* fallback */
+ return MM_NETWORK_ERROR_UNKNOWN;
+}
+
/*****************************************************************************/
void
diff --git a/src/mm-modem-helpers-mbim.h b/src/mm-modem-helpers-mbim.h
index 059dd25c..ca5b1e21 100644
--- a/src/mm-modem-helpers-mbim.h
+++ b/src/mm-modem-helpers-mbim.h
@@ -185,5 +185,6 @@ gdouble mm_nrarfcn_to_frequency (guint32 nrarfcn,
void mm_register_mbim_errors (void);
GError *mm_error_from_mbim_nw_error (MbimNwError nw_error,
gpointer log_object);
+MMNetworkError mm_modem_nw_error_from_mbim_nw_error (MbimNwError nw_error);
#endif /* MM_MODEM_HELPERS_MBIM_H */