broadband-modem-mbim: allow normalizing the nw error value
Required for modems that don't provide a correct 3GPP network error value.
This commit is contained in:
+17
-6
@@ -927,6 +927,7 @@ connect_set_ready (MbimDevice *device,
|
||||
error = g_steal_pointer (&inner_error);
|
||||
} else {
|
||||
/* Report the IP type we asked for and the one returned by the modem */
|
||||
nw_error = mm_broadband_modem_mbim_normalize_nw_error (ctx->modem, nw_error);
|
||||
mm_obj_dbg (self, "session ID '%u': %s (requested IP type: %s, activated IP type: %s, nw error: %s)",
|
||||
session_id,
|
||||
mbim_activation_state_get_string (activation_state),
|
||||
@@ -1604,15 +1605,17 @@ typedef enum {
|
||||
} DisconnectStep;
|
||||
|
||||
typedef struct {
|
||||
MMPortMbim *mbim;
|
||||
guint session_id;
|
||||
DisconnectStep step;
|
||||
MMPortMbim *mbim;
|
||||
MMBroadbandModemMbim *modem;
|
||||
guint session_id;
|
||||
DisconnectStep step;
|
||||
} DisconnectContext;
|
||||
|
||||
static void
|
||||
disconnect_context_free (DisconnectContext *ctx)
|
||||
{
|
||||
g_object_unref (ctx->mbim);
|
||||
g_object_unref (ctx->modem);
|
||||
g_slice_free (DisconnectContext, ctx);
|
||||
}
|
||||
|
||||
@@ -1732,6 +1735,7 @@ disconnect_set_ready (MbimDevice *device,
|
||||
goto out;
|
||||
}
|
||||
|
||||
nw_error = mm_broadband_modem_mbim_normalize_nw_error (ctx->modem, nw_error);
|
||||
if (g_error_matches (error, MBIM_STATUS_ERROR, MBIM_STATUS_ERROR_FAILURE) && parsed_result && nw_error != 0) {
|
||||
g_assert (!inner_error);
|
||||
g_error_free (error);
|
||||
@@ -1801,9 +1805,10 @@ disconnect (MMBaseBearer *_self,
|
||||
GAsyncReadyCallback callback,
|
||||
gpointer user_data)
|
||||
{
|
||||
MMBearerMbim *self = MM_BEARER_MBIM (_self);
|
||||
DisconnectContext *ctx;
|
||||
GTask *task;
|
||||
MMBearerMbim *self = MM_BEARER_MBIM (_self);
|
||||
DisconnectContext *ctx;
|
||||
GTask *task;
|
||||
g_autoptr(MMBaseModem) modem = NULL;
|
||||
|
||||
task = g_task_new (self, NULL, callback, user_data);
|
||||
|
||||
@@ -1815,11 +1820,17 @@ disconnect (MMBaseBearer *_self,
|
||||
return;
|
||||
}
|
||||
|
||||
g_object_get (self,
|
||||
MM_BASE_BEARER_MODEM, &modem,
|
||||
NULL);
|
||||
g_assert (modem);
|
||||
|
||||
mm_obj_dbg (self, "launching disconnection on data port (%s/%s)",
|
||||
mm_port_subsys_get_string (mm_port_get_subsys (self->priv->data)),
|
||||
mm_port_get_device (self->priv->data));
|
||||
|
||||
ctx = g_slice_new0 (DisconnectContext);
|
||||
ctx->modem = MM_BROADBAND_MODEM_MBIM (g_object_ref (modem));
|
||||
ctx->mbim = g_object_ref (self->priv->mbim);
|
||||
ctx->session_id = self->priv->session_id;
|
||||
ctx->step = DISCONNECT_STEP_FIRST;
|
||||
|
||||
@@ -401,6 +401,18 @@ mm_broadband_modem_mbim_peek_port_mbim_for_data (MMBroadbandModemMbim *self,
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
guint32
|
||||
mm_broadband_modem_mbim_normalize_nw_error (MMBroadbandModemMbim *self,
|
||||
guint32 nw_error)
|
||||
{
|
||||
if (MM_BROADBAND_MODEM_MBIM_GET_CLASS (self)->normalize_nw_error)
|
||||
return MM_BROADBAND_MODEM_MBIM_GET_CLASS (self)->normalize_nw_error (self, nw_error);
|
||||
|
||||
return nw_error;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
gboolean
|
||||
mm_broadband_modem_mbim_is_context_type_ext_supported (MMBroadbandModemMbim *self)
|
||||
{
|
||||
@@ -4020,6 +4032,7 @@ lte_attach_info_query_ready (MbimDevice *device,
|
||||
if (nw_error) {
|
||||
const gchar *nw_error_str;
|
||||
|
||||
nw_error = mm_broadband_modem_mbim_normalize_nw_error (self, nw_error);
|
||||
nw_error_str = mbim_nw_error_get_string (nw_error);
|
||||
if (nw_error_str)
|
||||
mm_obj_dbg (self, "LTE attach info network error reported: %s", nw_error_str);
|
||||
@@ -4975,6 +4988,7 @@ common_process_register_state (MMBroadbandModemMbim *self,
|
||||
}
|
||||
}
|
||||
|
||||
nw_error = mm_broadband_modem_mbim_normalize_nw_error (self, nw_error);
|
||||
nw_error_str = mbim_nw_error_get_string (nw_error);
|
||||
available_data_classes_str = mbim_data_class_build_string_from_mask (available_data_classes);
|
||||
preferred_data_classes_str = mbim_data_class_build_string_from_mask (preferred_data_classes);
|
||||
@@ -5091,6 +5105,7 @@ basic_connect_notification_connect (MMBroadbandModemMbim *self,
|
||||
ReportDisconnectedStatusContext ctx;
|
||||
g_autoptr(GError) connection_error = NULL;
|
||||
|
||||
nw_error = mm_broadband_modem_mbim_normalize_nw_error (self, nw_error);
|
||||
connection_error = mm_error_from_mbim_nw_error (nw_error, self);
|
||||
|
||||
mm_obj_dbg (self, "session ID '%u' was deactivated: %s", session_id, connection_error->message);
|
||||
@@ -5418,6 +5433,7 @@ common_process_packet_service (MMBroadbandModemMbim *self,
|
||||
}
|
||||
|
||||
frequency_range_str = mbim_frequency_range_build_string_from_mask (frequency_range);
|
||||
nw_error = mm_broadband_modem_mbim_normalize_nw_error (self, nw_error);
|
||||
nw_error_str = mbim_nw_error_get_string (nw_error);
|
||||
|
||||
mm_obj_dbg (self, "packet service update:");
|
||||
@@ -5750,6 +5766,7 @@ ms_basic_connect_extensions_notification_lte_attach_info (MMBroadbandModemMbim *
|
||||
if (nw_error) {
|
||||
const gchar *nw_error_str;
|
||||
|
||||
nw_error = mm_broadband_modem_mbim_normalize_nw_error (self, nw_error);
|
||||
nw_error_str = mbim_nw_error_get_string (nw_error);
|
||||
if (nw_error_str)
|
||||
mm_obj_dbg (self, "LTE attach info network error reported: %s", nw_error_str);
|
||||
@@ -6834,9 +6851,9 @@ register_state_set_ready (MbimDevice *device,
|
||||
(mbim_message_response_get_result (response, MBIM_MESSAGE_TYPE_COMMAND_DONE, &error) ||
|
||||
g_error_matches (error, MBIM_STATUS_ERROR, MBIM_STATUS_ERROR_FAILURE))) {
|
||||
g_autoptr(GError) inner_error = NULL;
|
||||
MbimNwError nw_error = 0;
|
||||
MbimNwError normalized_nw_error = 0;
|
||||
|
||||
if (!common_process_register_state (self, device, response, &nw_error, &inner_error)) {
|
||||
if (!common_process_register_state (self, device, response, &normalized_nw_error, &inner_error)) {
|
||||
mm_obj_warn (self, "%s", inner_error->message);
|
||||
/* Prefer the error from the result to the parsing error */
|
||||
if (!error)
|
||||
@@ -6852,9 +6869,9 @@ register_state_set_ready (MbimDevice *device,
|
||||
* that is the case, log about it and ignore the error; we are anyway
|
||||
* reloading the registration info after the set, so it should not be
|
||||
* a big issue. */
|
||||
if (nw_error) {
|
||||
if (normalized_nw_error) {
|
||||
g_clear_error (&error);
|
||||
error = mm_error_from_mbim_nw_error (nw_error, self);
|
||||
error = mm_error_from_mbim_nw_error (normalized_nw_error, self);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -9787,12 +9804,12 @@ packet_service_set_ready (MbimDevice *device,
|
||||
(mbim_message_response_get_result (response, MBIM_MESSAGE_TYPE_COMMAND_DONE, &error) ||
|
||||
g_error_matches (error, MBIM_STATUS_ERROR, MBIM_STATUS_ERROR_FAILURE))) {
|
||||
g_autoptr(GError) inner_error = NULL;
|
||||
guint32 nw_error = 0;
|
||||
guint32 normalized_nw_error = 0;
|
||||
|
||||
if (!common_process_packet_service (self,
|
||||
device,
|
||||
response,
|
||||
&nw_error,
|
||||
&normalized_nw_error,
|
||||
&packet_service_state,
|
||||
&inner_error)) {
|
||||
mm_obj_warn (self, "%s", inner_error->message);
|
||||
@@ -9801,9 +9818,9 @@ packet_service_set_ready (MbimDevice *device,
|
||||
error = g_steal_pointer (&inner_error);
|
||||
} else {
|
||||
/* Prefer the NW error if available */
|
||||
if (nw_error) {
|
||||
if (normalized_nw_error) {
|
||||
g_clear_error (&error);
|
||||
error = mm_error_from_mbim_nw_error (nw_error, self);
|
||||
error = mm_error_from_mbim_nw_error (normalized_nw_error, self);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,6 +43,8 @@ struct _MMBroadbandModemMbimClass{
|
||||
MMPortMbim * (* peek_port_mbim_for_data) (MMBroadbandModemMbim *self,
|
||||
MMPort *data,
|
||||
GError **error);
|
||||
guint32 (* normalize_nw_error) (MMBroadbandModemMbim *self,
|
||||
guint32 nw_error);
|
||||
};
|
||||
|
||||
GType mm_broadband_modem_mbim_get_type (void);
|
||||
@@ -64,6 +66,9 @@ MMPortMbim *mm_broadband_modem_mbim_get_port_mbim_for_data (MMBroadbandModemMbi
|
||||
MMPort *data,
|
||||
GError **error);
|
||||
|
||||
guint32 mm_broadband_modem_mbim_normalize_nw_error (MMBroadbandModemMbim *self,
|
||||
guint32 nw_error);
|
||||
|
||||
void mm_broadband_modem_mbim_set_unlock_retries (MMBroadbandModemMbim *self,
|
||||
MMModemLock lock_type,
|
||||
guint32 remaining_attempts);
|
||||
|
||||
Reference in New Issue
Block a user