broadband-modem-qmi: report network rejections
Changes to expose network rejections for QMI based modems.
This commit is contained in:
committed by
Aleksander Morgado
parent
4b615a2343
commit
a95c2d2ad9
@@ -5408,6 +5408,7 @@ network_reject_indication_cb (QmiClientNas *client,
|
||||
guint16 mcc = 0;
|
||||
guint16 mnc = 0;
|
||||
guint32 closed_subscriber_group = 0;
|
||||
gboolean has_pcs_digit;
|
||||
|
||||
mm_obj_warn (self, "network reject indication received");
|
||||
if (qmi_indication_nas_network_reject_output_get_service_domain (output, &service_domain, NULL))
|
||||
@@ -5416,12 +5417,28 @@ network_reject_indication_cb (QmiClientNas *client,
|
||||
mm_obj_warn (self, " radio interface: %s", qmi_nas_radio_interface_get_string (radio_interface));
|
||||
if (qmi_indication_nas_network_reject_output_get_reject_cause (output, &reject_cause, NULL))
|
||||
mm_obj_warn (self, " reject cause: %s", qmi_nas_reject_cause_get_string (reject_cause));
|
||||
if (qmi_indication_nas_network_reject_output_get_plmn (output, &mcc, &mnc, NULL, NULL)) {
|
||||
if (qmi_indication_nas_network_reject_output_get_plmn (output, &mcc, &mnc, &has_pcs_digit, NULL)) {
|
||||
mm_obj_warn (self, " mcc: %" G_GUINT16_FORMAT, mcc);
|
||||
mm_obj_warn (self, " mnc: %" G_GUINT16_FORMAT, mnc);
|
||||
}
|
||||
if (qmi_indication_nas_network_reject_output_get_closed_subscriber_group (output, &closed_subscriber_group, NULL))
|
||||
mm_obj_warn (self, " closed subscriber group: %u", closed_subscriber_group);
|
||||
|
||||
if (mm_iface_modem_is_3gpp (MM_IFACE_MODEM (self))) {
|
||||
MMNetworkError mm_nw_error;
|
||||
MMModemAccessTechnology access_technology;
|
||||
g_autofree gchar *operator_id = NULL;
|
||||
|
||||
mm_nw_error = mm_modem_nw_error_from_qmi_nw_error (reject_cause);
|
||||
access_technology = mm_modem_access_technology_from_qmi_radio_interface (radio_interface);
|
||||
if (has_pcs_digit)
|
||||
operator_id = g_strdup_printf ("%.3" G_GUINT16_FORMAT "%.3" G_GUINT16_FORMAT, mcc, mnc);
|
||||
else
|
||||
operator_id = g_strdup_printf ("%.3" G_GUINT16_FORMAT "%.2" G_GUINT16_FORMAT, mcc, mnc);
|
||||
|
||||
mm_iface_modem_3gpp_update_network_rejection (MM_IFACE_MODEM_3GPP (self),
|
||||
mm_nw_error, operator_id, NULL, access_technology);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
@@ -2140,6 +2140,65 @@ mm_modem_registration_state_from_qmi_system_info (QmiMessageNasGetSystemInfoOutp
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
static const MMNetworkError qmi_mm_nw_errors[] = {
|
||||
[QMI_NAS_REJECT_CAUSE_NONE] = MM_NETWORK_ERROR_NONE,
|
||||
[QMI_NAS_REJECT_CAUSE_IMSI_UNKNOWN_IN_HLR] = MM_NETWORK_ERROR_IMSI_UNKNOWN_IN_HLR,
|
||||
[QMI_NAS_REJECT_CAUSE_ILLEGAL_UE] = MM_NETWORK_ERROR_ILLEGAL_MS,
|
||||
[QMI_NAS_REJECT_CAUSE_IMSI_UNKNOWN_IN_VLR] = MM_NETWORK_ERROR_IMSI_UNKNOWN_IN_VLR,
|
||||
[QMI_NAS_REJECT_CAUSE_IMEI_NOT_ACCEPTED] = MM_NETWORK_ERROR_IMEI_NOT_ACCEPTED,
|
||||
[QMI_NAS_REJECT_CAUSE_ILLEGAL_ME] = MM_NETWORK_ERROR_ILLEGAL_ME,
|
||||
[QMI_NAS_REJECT_CAUSE_PS_SERVICES_NOT_ALLOWED] = MM_NETWORK_ERROR_GPRS_NOT_ALLOWED,
|
||||
[QMI_NAS_REJECT_CAUSE_PS_AND_NON_PS_SERVICES_NOT_ALLOWED] = MM_NETWORK_ERROR_GPRS_AND_NON_GPRS_NOT_ALLOWED,
|
||||
[QMI_NAS_REJECT_CAUSE_UE_IDENTITY_NOT_DERIVED_BY_NETWORK] = MM_NETWORK_ERROR_MS_IDENTITY_NOT_DERIVED_BY_NETWORK,
|
||||
[QMI_NAS_REJECT_CAUSE_IMPLICITLY_DETACHED] = MM_NETWORK_ERROR_IMPLICITLY_DETACHED,
|
||||
[QMI_NAS_REJECT_CAUSE_PLMN_NOT_ALLOWED] = MM_NETWORK_ERROR_PLMN_NOT_ALLOWED,
|
||||
[QMI_NAS_REJECT_CAUSE_LOCATION_AREA_NOT_ALLOWED] = MM_NETWORK_ERROR_LOCATION_AREA_NOT_ALLOWED,
|
||||
[QMI_NAS_REJECT_CAUSE_ROAMING_IN_LOCATION_AREA_NOT_ALLOWED] = MM_NETWORK_ERROR_ROAMING_NOT_ALLOWED_IN_LOCATION_AREA,
|
||||
[QMI_NAS_REJECT_CAUSE_PS_SERVICES_IN_LOCATION_AREA_NOT_ALLOWED] = MM_NETWORK_ERROR_GPRS_NOT_ALLOWED_IN_PLMN,
|
||||
[QMI_NAS_REJECT_CAUSE_NO_SUITABLE_CELLS_IN_LOCATION_AREA] = MM_NETWORK_ERROR_NO_CELLS_IN_LOCATION_AREA,
|
||||
[QMI_NAS_REJECT_CAUSE_MSC_TEMPORARILY_NOT_REACHABLE] = MM_NETWORK_ERROR_MSC_TEMPORARILY_NOT_REACHABLE,
|
||||
[QMI_NAS_REJECT_CAUSE_NETWORK_FAILURE] = MM_NETWORK_ERROR_NETWORK_FAILURE,
|
||||
[QMI_NAS_REJECT_CAUSE_CS_DOMAIN_NOT_AVAILABLE] = MM_NETWORK_ERROR_CS_DOMAIN_NOT_AVAILABLE,
|
||||
[QMI_NAS_REJECT_CAUSE_ESM_FAILURE] = MM_NETWORK_ERROR_ESM_FAILURE,
|
||||
[QMI_NAS_REJECT_CAUSE_MAC_FAILURE] = MM_NETWORK_ERROR_MAC_FAILURE,
|
||||
[QMI_NAS_REJECT_CAUSE_SYNCH_FAILURE] = MM_NETWORK_ERROR_SYNCH_FAILURE,
|
||||
[QMI_NAS_REJECT_CAUSE_CONGESTION] = MM_NETWORK_ERROR_CONGESTION,
|
||||
[QMI_NAS_REJECT_CAUSE_CSG_NOT_AUTHORIZED] = MM_NETWORK_ERROR_NOT_AUTHORIZED_FOR_CSG,
|
||||
[QMI_NAS_REJECT_CAUSE_NON_EPS_AUTHENTICATION_UNACCEPTABLE] = MM_NETWORK_ERROR_GSM_AUTHENTICATION_UNACCEPTABLE,
|
||||
[QMI_NAS_REJECT_CAUSE_REDIRECTION_TO_5GCN_REQUIRED] = MM_NETWORK_ERROR_REDIRECTION_TO_5GCN_REQUIRED,
|
||||
[QMI_NAS_REJECT_CAUSE_SERVICE_OPTION_NOT_SUPPORTED] = MM_NETWORK_ERROR_SERVICE_OPTION_NOT_SUPPORTED,
|
||||
[QMI_NAS_REJECT_CAUSE_REQUESTED_SERVICE_OPTION_NOT_SUBSCRIBED] = MM_NETWORK_ERROR_REQUESTED_SERVICE_OPTION_NOT_SUBSCRIBED,
|
||||
[QMI_NAS_REJECT_CAUSE_SERVICE_OPTION_TEMPORARILY_OUT_OF_ORDER] = MM_NETWORK_ERROR_SERVICE_OPTION_TEMPORARILY_OUT_OF_ORDER,
|
||||
[QMI_NAS_REJECT_CAUSE_REQUESTED_SERVICE_OPTION_NOT_AUTHORIZED] = MM_NETWORK_ERROR_REQUESTED_SERVICE_OPTION_NOT_AUTHORIZED,
|
||||
[QMI_NAS_REJECT_CAUSE_CALL_CANNOT_BE_IDENTIFIED] = MM_NETWORK_ERROR_CALL_CANNOT_BE_IDENTIFIED,
|
||||
[QMI_NAS_REJECT_CAUSE_CS_SERVICE_TEMPORARILY_NOT_AVAILABLE] = MM_NETWORK_ERROR_CS_SERVICE_TEMPORARILY_NOT_AVAILABLE,
|
||||
[QMI_NAS_REJECT_CAUSE_NO_EPS_BEARER_CONTEXT_ACTIVATED] = MM_NETWORK_ERROR_NO_PDP_CONTEXT_ACTIVATED,
|
||||
[QMI_NAS_REJECT_CAUSE_SEVERE_NETWORK_FAILURE] = MM_NETWORK_ERROR_SYNTACTICAL_ERROR_IN_THE_TFT_OPERATION,
|
||||
[QMI_NAS_REJECT_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE] = MM_NETWORK_ERROR_SEMANTICALLY_INCORRECT_MESSAGE,
|
||||
[QMI_NAS_REJECT_CAUSE_INVALID_MANDATORY_INFORMATION] = MM_NETWORK_ERROR_INVALID_MANDATORY_INFORMATION,
|
||||
[QMI_NAS_REJECT_CAUSE_MESSAGE_TYPE_NON_EXISTENT] = MM_NETWORK_ERROR_MESSAGE_TYPE_NON_EXISTENT_OR_NOT_IMPLEMENTED,
|
||||
[QMI_NAS_REJECT_CAUSE_MESSAGE_TYPE_NOT_COMPATIBLE] = MM_NETWORK_ERROR_MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE,
|
||||
[QMI_NAS_REJECT_CAUSE_INFORMATION_ELEMENT_NON_EXISTENT] = MM_NETWORK_ERROR_INFORMATION_ELEMENT_NON_EXISTENT_OR_NOT_IMPLEMENTED,
|
||||
[QMI_NAS_REJECT_CAUSE_CONDITIONAL_INFORMATION_ELEMENT_ERROR] = MM_NETWORK_ERROR_CONDITIONAL_IE_ERROR,
|
||||
[QMI_NAS_REJECT_CAUSE_MESSAGE_NOT_COMPATIBLE] = MM_NETWORK_ERROR_MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE,
|
||||
[QMI_NAS_REJECT_CAUSE_UNSPECIFIED_PROTOCOL_ERROR] = MM_NETWORK_ERROR_PROTOCOL_ERROR_UNSPECIFIED,
|
||||
};
|
||||
|
||||
|
||||
MMNetworkError
|
||||
mm_modem_nw_error_from_qmi_nw_error (QmiNasRejectCause nw_error)
|
||||
{
|
||||
if (nw_error < G_N_ELEMENTS (qmi_mm_nw_errors)) {
|
||||
/* convert to nw error */
|
||||
return qmi_mm_nw_errors[nw_error];
|
||||
}
|
||||
|
||||
/* fallback */
|
||||
return MM_NETWORK_ERROR_UNKNOWN;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
QmiWmsStorageType
|
||||
mm_sms_storage_to_qmi_storage_type (MMSmsStorage storage)
|
||||
{
|
||||
|
||||
@@ -111,6 +111,8 @@ MMModemCdmaRegistrationState mm_modem_cdma_registration_state_from_qmi_registrat
|
||||
|
||||
MMModemCdmaActivationState mm_modem_cdma_activation_state_from_qmi_activation_state (QmiDmsActivationState state);
|
||||
|
||||
MMNetworkError mm_modem_nw_error_from_qmi_nw_error (QmiNasRejectCause nw_error);
|
||||
|
||||
/*****************************************************************************/
|
||||
/* QMI NAS System Info processor */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user