diff options
author | Ujjwal Pande <ujjwalpande@google.com> | 2024-05-30 01:02:17 +0000 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2024-06-12 09:39:12 +0000 |
commit | 4b615a2343673f7a6c19734f907c7efa22a32e15 (patch) | |
tree | 53a581997f5fba63df8015b22375dafa7924ed64 | |
parent | 2904510e760fa1fdf491d1ef4574c29d05307b3b (diff) |
broadband-modem-mbim: report network rejections
Changes to expose network rejections for MBIM based modems.
-rw-r--r-- | src/mm-broadband-modem-mbim.c | 16 | ||||
-rw-r--r-- | src/mm-modem-helpers-mbim.c | 82 | ||||
-rw-r--r-- | src/mm-modem-helpers-mbim.h | 1 |
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 */ |