aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksandermj@chromium.org>2024-05-08 14:13:36 +0000
committerAleksander Morgado <aleksandermj@chromium.org>2024-05-29 09:08:18 +0000
commit6c92749d20aeab1c6094c7c592df5a7e58d611a4 (patch)
treeccbbed220f3368fba04d551cc500375d819427a3
parent9fcff66406ebd1c70cd18e3e3c300c41ba166392 (diff)
broadband-modem-cinterion: use generic initial EPS bearer management logic
The Cinterion specific implementation relies on the generic one but adds the authentication information support using ^SGAUTH. The loading of the initial EPS bearer status (i.e. the one agreed with the network, not the settings) no longer has any Cinterion specific behavior. The auth settings are NOT reported in the initial EPS bearer status.
-rw-r--r--src/plugins/cinterion/mm-broadband-modem-cinterion.c445
1 files changed, 117 insertions, 328 deletions
diff --git a/src/plugins/cinterion/mm-broadband-modem-cinterion.c b/src/plugins/cinterion/mm-broadband-modem-cinterion.c
index 3df1d948..066d946d 100644
--- a/src/plugins/cinterion/mm-broadband-modem-cinterion.c
+++ b/src/plugins/cinterion/mm-broadband-modem-cinterion.c
@@ -114,9 +114,6 @@ struct _MMBroadbandModemCinterionPrivate {
/* Flags for model-based behaviors */
MMCinterionModemFamily modem_family;
MMCinterionRadioBandFormat rb_format;
-
- /* Initial EPS bearer context number */
- gint initial_eps_bearer_cid;
};
/*****************************************************************************/
@@ -1113,12 +1110,29 @@ modem_3gpp_cleanup_unsolicited_events (MMIfaceModem3gpp *self,
/*****************************************************************************/
/* Common operation to load expected CID for the initial EPS bearer */
-static gboolean
-load_initial_eps_bearer_cid_finish (MMBroadbandModemCinterion *self,
- GAsyncResult *res,
- GError **error)
+static gint
+load_initial_eps_bearer_cid_finish (MMBroadbandModem *self,
+ GAsyncResult *res,
+ GError **error)
{
- return g_task_propagate_boolean (G_TASK (res), error);
+ return g_task_propagate_int (G_TASK (res), error);
+}
+
+static void
+load_initial_eps_bearer_cid_parent_ready (MMBroadbandModem *self,
+ GAsyncResult *res,
+ GTask *task)
+{
+ GError *error = NULL;
+ gint cid;
+
+
+ cid = MM_BROADBAND_MODEM_CLASS (mm_broadband_modem_cinterion_parent_class)->load_initial_eps_bearer_cid_finish (self, res, &error);
+ if (error)
+ g_task_return_error (task, error);
+ else
+ g_task_return_int (task, cid);
+ g_object_unref (task);
}
static void
@@ -1129,39 +1143,37 @@ scfg_prov_cfg_query_ready (MMBaseModem *_self,
MMBroadbandModemCinterion *self = MM_BROADBAND_MODEM_CINTERION (_self);
g_autoptr(GError) error = NULL;
const gchar *response;
+ gint cid;
response = mm_base_modem_at_command_finish (_self, res, &error);
- if (!response)
- mm_obj_dbg (self, "couldn't query MNO profiles: %s", error->message);
-
- else if (!mm_cinterion_provcfg_response_to_cid (response,
- MM_BROADBAND_MODEM_CINTERION (self)->priv->modem_family,
- mm_broadband_modem_get_current_charset (MM_BROADBAND_MODEM (self)),
- self,
- &self->priv->initial_eps_bearer_cid,
- &error))
- mm_obj_dbg (self, "failed processing list of MNO profiles: %s", error->message);
-
- if (self->priv->initial_eps_bearer_cid < 0) {
- mm_obj_dbg (self, "using default EPS bearer context id: 1");
- self->priv->initial_eps_bearer_cid = 1;
- } else
- mm_obj_dbg (self, "loaded EPS bearer context id from list of MNO profiles: %d", self->priv->initial_eps_bearer_cid);
+ if (response && mm_cinterion_provcfg_response_to_cid (response,
+ MM_BROADBAND_MODEM_CINTERION (self)->priv->modem_family,
+ mm_broadband_modem_get_current_charset (MM_BROADBAND_MODEM (self)),
+ self,
+ &cid,
+ &error)) {
+ mm_obj_dbg (self, "loaded EPS bearer context id from list of MNO profiles: %d", cid);
+ g_task_return_int (task, cid);
+ g_object_unref (task);
+ return;
+ }
- /* This operation really never fails */
- g_task_return_boolean (task, TRUE);
- g_object_unref (task);
+ mm_obj_dbg (self, "couldn't load EPS bearer context id from list of MNO profiles: %s", error->message);
+
+ /* otherwise, call the more generic parent implementation */
+ MM_BROADBAND_MODEM_CLASS (mm_broadband_modem_cinterion_parent_class)->load_initial_eps_bearer_cid (
+ MM_BROADBAND_MODEM (self),
+ (GAsyncReadyCallback) load_initial_eps_bearer_cid_parent_ready,
+ task);
}
static void
-load_initial_eps_bearer_cid (MMBroadbandModemCinterion *self,
- GAsyncReadyCallback callback,
- gpointer user_data)
+load_initial_eps_bearer_cid (MMBroadbandModem *self,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
{
GTask *task;
- g_assert (self->priv->initial_eps_bearer_cid < 0);
-
task = g_task_new (self, NULL, callback, user_data);
mm_base_modem_at_command (MM_BASE_MODEM (self),
"^SCFG=\"MEopMode/Prov/Cfg\"",
@@ -1173,6 +1185,7 @@ load_initial_eps_bearer_cid (MMBroadbandModemCinterion *self,
/*****************************************************************************/
/* Set initial EPS bearer settings */
+
static gboolean
modem_3gpp_set_initial_eps_bearer_settings_finish (MMIfaceModem3gpp *self,
GAsyncResult *res,
@@ -1190,8 +1203,7 @@ set_initial_eps_auth_ready (MMBaseModem *_self,
GError *error = NULL;
if (!mm_base_modem_at_command_finish (_self, res, &error)) {
- mm_obj_warn (self, "couldn't configure context %d auth settings: %s",
- self->priv->initial_eps_bearer_cid, error->message);
+ mm_obj_warn (self, "couldn't configure initial EPS bearer auth settings: %s", error->message);
g_task_return_error (task, error);
} else
g_task_return_boolean (task, TRUE);
@@ -1199,30 +1211,32 @@ set_initial_eps_auth_ready (MMBaseModem *_self,
}
static void
-set_initial_eps_cgdcont_ready (MMBaseModem *_self,
- GAsyncResult *res,
- GTask *task)
+set_initial_eps_bearer_settings_parent_ready (MMIfaceModem3gpp *_self,
+ GAsyncResult *res,
+ GTask *task)
{
MMBroadbandModemCinterion *self = MM_BROADBAND_MODEM_CINTERION (_self);
MMBearerProperties *properties;
GError *error = NULL;
g_autofree gchar *auth_cmd = NULL;
+ gint cid;
- if (!mm_base_modem_at_command_finish (_self, res, &error)) {
- mm_obj_warn (self, "couldn't configure context %d settings: %s",
- self->priv->initial_eps_bearer_cid, error->message);
+ if (!iface_modem_3gpp_parent->set_initial_eps_bearer_settings_finish (_self, res, &error)) {
g_task_return_error (task, error);
g_object_unref (task);
return;
}
+ cid = mm_broadband_modem_get_initial_eps_bearer_cid (MM_BROADBAND_MODEM (self));
+ g_assert (cid >= 0);
+
properties = g_task_get_task_data (task);
auth_cmd = mm_cinterion_build_auth_string (self,
MM_BROADBAND_MODEM_CINTERION (self)->priv->modem_family,
properties,
- self->priv->initial_eps_bearer_cid);
+ cid);
mm_base_modem_at_command (
- _self,
+ MM_BASE_MODEM (self),
auth_cmd,
20,
FALSE,
@@ -1231,324 +1245,92 @@ set_initial_eps_cgdcont_ready (MMBaseModem *_self,
}
static void
-modem_3gpp_set_initial_eps_bearer_settings (MMIfaceModem3gpp *_self,
+modem_3gpp_set_initial_eps_bearer_settings (MMIfaceModem3gpp *self,
MMBearerProperties *properties,
GAsyncReadyCallback callback,
gpointer user_data)
{
- MMBroadbandModemCinterion *self = MM_BROADBAND_MODEM_CINTERION (_self);
- GTask *task;
- const gchar *apn;
- g_autofree gchar *quoted_apn = NULL;
- g_autofree gchar *apn_cmd = NULL;
- const gchar *ip_family_str;
- MMBearerIpFamily ip_family;
-
- /* The initial EPS bearer settings should have already been loaded */
- g_assert (self->priv->initial_eps_bearer_cid >= 0);
+ GTask *task;
task = g_task_new (self, NULL, callback, user_data);
g_task_set_task_data (task, g_object_ref (properties), (GDestroyNotify) g_object_unref);
- ip_family = mm_bearer_properties_get_ip_type (properties);
- if (ip_family == MM_BEARER_IP_FAMILY_NONE || ip_family == MM_BEARER_IP_FAMILY_ANY)
- ip_family = MM_BEARER_IP_FAMILY_IPV4;
-
- ip_family_str = mm_3gpp_get_pdp_type_from_ip_family (ip_family);
- apn = mm_bearer_properties_get_apn (properties);
- mm_obj_dbg (self, "context %d with APN '%s' and PDP type '%s'",
- self->priv->initial_eps_bearer_cid, apn, ip_family_str);
- quoted_apn = mm_at_quote_string (apn);
- apn_cmd = g_strdup_printf ("+CGDCONT=%u,\"%s\",%s",
- self->priv->initial_eps_bearer_cid, ip_family_str, quoted_apn);
- mm_base_modem_at_command (
- MM_BASE_MODEM (self),
- apn_cmd,
- 20,
- FALSE,
- (GAsyncReadyCallback)set_initial_eps_cgdcont_ready,
+ /* First, use parent implementation to initialize the basic settings of the profile */
+ iface_modem_3gpp_parent->set_initial_eps_bearer_settings (
+ self,
+ properties,
+ (GAsyncReadyCallback)set_initial_eps_bearer_settings_parent_ready,
task);
}
/*****************************************************************************/
-/* Common initial EPS bearer info loading for both:
- * - runtime status
- * - configuration settings
- */
-
-typedef enum {
- COMMON_LOAD_INITIAL_EPS_STEP_FIRST = 0,
- COMMON_LOAD_INITIAL_EPS_STEP_PROFILE,
- COMMON_LOAD_INITIAL_EPS_STEP_APN,
- COMMON_LOAD_INITIAL_EPS_STEP_AUTH,
- COMMON_LOAD_INITIAL_EPS_STEP_LAST,
-} CommonLoadInitialEpsStep;
-
-typedef struct {
- MMBearerProperties *properties;
- CommonLoadInitialEpsStep step;
- gboolean runtime;
-} CommonLoadInitialEpsContext;
-
-static void
-common_load_initial_eps_context_free (CommonLoadInitialEpsContext *ctx)
-{
- g_clear_object (&ctx->properties);
- g_slice_free (CommonLoadInitialEpsContext, ctx);
-}
+/* Initial EPS bearer settings loading -> set configuration */
static MMBearerProperties *
-common_load_initial_eps_bearer_finish (MMIfaceModem3gpp *self,
- GAsyncResult *res,
- GError **error)
-{
- return MM_BEARER_PROPERTIES (g_task_propagate_pointer (G_TASK (res), error));
-}
-
-static void common_load_initial_eps_step (GTask *task);
-
-static void
-common_load_initial_eps_auth_ready (MMBaseModem *_self,
- GAsyncResult *res,
- GTask *task)
-{
- MMBroadbandModemCinterion *self = MM_BROADBAND_MODEM_CINTERION (_self);
- const gchar *response;
- CommonLoadInitialEpsContext *ctx;
- g_autoptr(GError) error = NULL;
- MMBearerAllowedAuth auth = MM_BEARER_ALLOWED_AUTH_UNKNOWN;
- g_autofree gchar *username = NULL;
-
- ctx = (CommonLoadInitialEpsContext *) g_task_get_task_data (task);
-
- response = mm_base_modem_at_command_finish (_self, res, &error);
- if (!response)
- mm_obj_dbg (self, "couldn't load context %d auth settings: %s",
- self->priv->initial_eps_bearer_cid, error->message);
- else if (!mm_cinterion_parse_sgauth_response (response, self->priv->initial_eps_bearer_cid, &auth, &username, &error))
- mm_obj_dbg (self, "couldn't parse context %d auth settings: %s", self->priv->initial_eps_bearer_cid, error->message);
- else {
- mm_bearer_properties_set_allowed_auth (ctx->properties, auth);
- mm_bearer_properties_set_user (ctx->properties, username);
- }
-
- /* Go to next step */
- ctx->step++;
- common_load_initial_eps_step (task);
-}
-
-static void
-common_load_initial_eps_load_cid_ready (MMBroadbandModemCinterion *self,
- GAsyncResult *res,
- GTask *task)
+modem_3gpp_load_initial_eps_bearer_settings_finish (MMIfaceModem3gpp *self,
+ GAsyncResult *res,
+ GError **error)
{
- CommonLoadInitialEpsContext *ctx;
-
- ctx = (CommonLoadInitialEpsContext *) g_task_get_task_data (task);
-
- load_initial_eps_bearer_cid_finish (self, res, NULL);
- g_assert (self->priv->initial_eps_bearer_cid >= 0);
-
- /* Go to next step */
- ctx->step++;
- common_load_initial_eps_step (task);
+ return g_task_propagate_pointer (G_TASK (res), error);
}
static void
-common_load_initial_eps_cgcontrdp_ready (MMBaseModem *_self,
- GAsyncResult *res,
- GTask *task)
+load_initial_eps_bearer_settings_auth_ready (MMBaseModem *self,
+ GAsyncResult *res,
+ GTask *task)
{
- MMBroadbandModemCinterion *self = MM_BROADBAND_MODEM_CINTERION (_self);
- const gchar *response;
- CommonLoadInitialEpsContext *ctx;
- g_autofree gchar *apn = NULL;
- g_autoptr(GError) error = NULL;
+ const gchar *response;
+ g_autoptr(GError) error = NULL;
+ MMBearerAllowedAuth auth = MM_BEARER_ALLOWED_AUTH_UNKNOWN;
+ g_autofree gchar *username = NULL;
+ gint cid;
+ MMBearerProperties *properties;
- ctx = (CommonLoadInitialEpsContext *) g_task_get_task_data (task);
-
- /* errors aren't fatal */
- response = mm_base_modem_at_command_finish (_self, res, &error);
- if (!response)
- mm_obj_dbg (self, "couldn't load context %d settings: %s",
- self->priv->initial_eps_bearer_cid, error->message);
- else if (!mm_3gpp_parse_cgcontrdp_response (response, NULL, NULL, &apn, NULL, NULL, NULL, NULL, NULL, &error))
- mm_obj_dbg (self, "couldn't parse CGDCONTRDP response: %s", error->message);
- else
- mm_bearer_properties_set_apn (ctx->properties, apn);
-
- /* Go to next step */
- ctx->step++;
- common_load_initial_eps_step (task);
-}
-
-static void
-common_load_initial_eps_cgdcont_ready (MMBaseModem *_self,
- GAsyncResult *res,
- GTask *task)
-{
- MMBroadbandModemCinterion *self = MM_BROADBAND_MODEM_CINTERION (_self);
- const gchar *response;
- CommonLoadInitialEpsContext *ctx;
- g_autoptr(GError) error = NULL;
+ properties = g_task_get_task_data (task);
- ctx = (CommonLoadInitialEpsContext *) g_task_get_task_data (task);
+ cid = mm_broadband_modem_get_initial_eps_bearer_cid (MM_BROADBAND_MODEM (self));
+ g_assert (cid >= 0);
- /* errors aren't fatal */
- response = mm_base_modem_at_command_finish (_self, res, &error);
+ response = mm_base_modem_at_command_finish (self, res, &error);
if (!response)
- mm_obj_dbg (self, "couldn't load context %d status: %s",
- self->priv->initial_eps_bearer_cid, error->message);
+ mm_obj_dbg (self, "couldn't load auth settings: %s", error->message);
+ else if (!mm_cinterion_parse_sgauth_response (response, cid, &auth, &username, &error))
+ mm_obj_dbg (self, "couldn't parse auth settings for cid %d: %s", cid, error->message);
else {
- GList *context_list;
-
- context_list = mm_3gpp_parse_cgdcont_read_response (response, &error);
- if (!context_list)
- if (error)
- mm_obj_dbg (self, "couldn't parse CGDCONT response: %s", error->message);
- else
- mm_obj_dbg (self, "No PDP contexts found.");
- else {
- GList *l;
-
- for (l = context_list; l; l = g_list_next (l)) {
- MM3gppPdpContext *pdp = l->data;
-
- if (pdp->cid == (guint) self->priv->initial_eps_bearer_cid) {
- mm_bearer_properties_set_ip_type (ctx->properties, pdp->pdp_type);
- mm_bearer_properties_set_apn (ctx->properties, pdp->apn ? pdp->apn : "");
- break;
- }
- }
- if (!l)
- mm_obj_dbg (self, "no status reported for context %d", self->priv->initial_eps_bearer_cid);
- mm_3gpp_pdp_context_list_free (context_list);
- }
+ mm_bearer_properties_set_allowed_auth (properties, auth);
+ mm_bearer_properties_set_user (properties, username);
}
- /* Go to next step */
- ctx->step++;
- common_load_initial_eps_step (task);
+ g_task_return_pointer (task, g_object_ref (properties), g_object_unref);
+ g_object_unref (task);
}
static void
-common_load_initial_eps_step (GTask *task)
+load_initial_eps_bearer_settings_parent_ready (MMIfaceModem3gpp *_self,
+ GAsyncResult *res,
+ GTask *task)
{
- MMBroadbandModemCinterion *self;
- CommonLoadInitialEpsContext *ctx;
-
- self = g_task_get_source_object (task);
- ctx = g_task_get_task_data (task);
-
- switch (ctx->step) {
- case COMMON_LOAD_INITIAL_EPS_STEP_FIRST:
- ctx->step++;
- /* fall through */
-
- case COMMON_LOAD_INITIAL_EPS_STEP_PROFILE:
- /* Initial EPS bearer CID initialization run once only */
- if (G_UNLIKELY (self->priv->initial_eps_bearer_cid < 0)) {
- load_initial_eps_bearer_cid (
- self,
- (GAsyncReadyCallback)common_load_initial_eps_load_cid_ready,
- task);
- return;
- }
- ctx->step++;
- /* fall through */
-
- case COMMON_LOAD_INITIAL_EPS_STEP_APN:
- if (ctx->runtime) {
- g_autofree gchar *cmd = NULL;
-
- cmd = g_strdup_printf ("+CGCONTRDP=%u", self->priv->initial_eps_bearer_cid);
- mm_base_modem_at_command (
- MM_BASE_MODEM (self),
- cmd,
- 20,
- FALSE,
- (GAsyncReadyCallback)common_load_initial_eps_cgcontrdp_ready,
- task);
- } else {
- mm_base_modem_at_command (
- MM_BASE_MODEM (self),
- "+CGDCONT?",
- 20,
- FALSE,
- (GAsyncReadyCallback)common_load_initial_eps_cgdcont_ready,
- task);
- }
- return;
-
- case COMMON_LOAD_INITIAL_EPS_STEP_AUTH:
- mm_base_modem_at_command (
- MM_BASE_MODEM (self),
- "^SGAUTH?",
- 20,
- FALSE,
- (GAsyncReadyCallback)common_load_initial_eps_auth_ready,
- task);
- return;
+ MMBroadbandModemCinterion *self = MM_BROADBAND_MODEM_CINTERION (_self);
+ MMBearerProperties *properties;
+ GError *error = NULL;
- case COMMON_LOAD_INITIAL_EPS_STEP_LAST:
- g_task_return_pointer (task, g_steal_pointer (&ctx->properties), g_object_unref);
+ properties = iface_modem_3gpp_parent->load_initial_eps_bearer_settings_finish (_self, res, &error);
+ if (!properties) {
+ g_task_return_error (task, error);
g_object_unref (task);
return;
-
- default:
- g_assert_not_reached ();
}
-}
-
-static void
-common_load_initial_eps_bearer (MMIfaceModem3gpp *self,
- gboolean runtime,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GTask *task;
- CommonLoadInitialEpsContext *ctx;
-
- task = g_task_new (self, NULL, callback, user_data);
-
- /* Setup context */
- ctx = g_slice_new0 (CommonLoadInitialEpsContext);
- ctx->runtime = runtime;
- ctx->properties = mm_bearer_properties_new ();
- ctx->step = COMMON_LOAD_INITIAL_EPS_STEP_FIRST;
- g_task_set_task_data (task, ctx, (GDestroyNotify) common_load_initial_eps_context_free);
- common_load_initial_eps_step (task);
-}
-
-/*****************************************************************************/
-/* Initial EPS bearer runtime status loading */
+ /* store result temporarily as task data */
+ g_task_set_task_data (task, properties, (GDestroyNotify) g_object_unref);
-static MMBearerProperties *
-modem_3gpp_load_initial_eps_bearer_finish (MMIfaceModem3gpp *self,
- GAsyncResult *res,
- GError **error)
-{
- return common_load_initial_eps_bearer_finish (self, res, error);
-}
-
-static void
-modem_3gpp_load_initial_eps_bearer (MMIfaceModem3gpp *self,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- common_load_initial_eps_bearer (self, TRUE, callback, user_data);
-}
-
-/*****************************************************************************/
-/* Initial EPS bearer settings loading -> set configuration */
-
-static MMBearerProperties *
-modem_3gpp_load_initial_eps_bearer_settings_finish (MMIfaceModem3gpp *self,
- GAsyncResult *res,
- GError **error)
-{
- return common_load_initial_eps_bearer_finish (self, res, error);
+ mm_base_modem_at_command (
+ MM_BASE_MODEM (self),
+ "^SGAUTH?",
+ 20,
+ FALSE,
+ (GAsyncReadyCallback)load_initial_eps_bearer_settings_auth_ready,
+ task);
}
static void
@@ -1556,7 +1338,15 @@ modem_3gpp_load_initial_eps_bearer_settings (MMIfaceModem3gpp *self,
GAsyncReadyCallback callback,
gpointer user_data)
{
- common_load_initial_eps_bearer (self, FALSE, callback, user_data);
+ GTask *task;
+
+ task = g_task_new (self, NULL, callback, user_data);
+
+ /* First, use parent implementation to load the basic settings of the profile */
+ iface_modem_3gpp_parent->load_initial_eps_bearer_settings (
+ self,
+ (GAsyncReadyCallback)load_initial_eps_bearer_settings_parent_ready,
+ task);
}
/*****************************************************************************/
@@ -2971,7 +2761,6 @@ mm_broadband_modem_cinterion_init (MMBroadbandModemCinterion *self)
MMBroadbandModemCinterionPrivate);
/* Initialize private variables */
- self->priv->initial_eps_bearer_cid = -1;
self->priv->sind_psinfo_support = FEATURE_SUPPORT_UNKNOWN;
self->priv->swwan_support = FEATURE_SUPPORT_UNKNOWN;
self->priv->smoni_support = FEATURE_SUPPORT_UNKNOWN;
@@ -3323,8 +3112,6 @@ iface_modem_3gpp_init (MMIfaceModem3gppInterface *iface)
iface->cleanup_unsolicited_events = modem_3gpp_cleanup_unsolicited_events;
iface->cleanup_unsolicited_events_finish = modem_3gpp_setup_cleanup_unsolicited_events_finish;
- iface->load_initial_eps_bearer = modem_3gpp_load_initial_eps_bearer;
- iface->load_initial_eps_bearer_finish = modem_3gpp_load_initial_eps_bearer_finish;
iface->load_initial_eps_bearer_settings = modem_3gpp_load_initial_eps_bearer_settings;
iface->load_initial_eps_bearer_settings_finish = modem_3gpp_load_initial_eps_bearer_settings_finish;
iface->set_initial_eps_bearer_settings = modem_3gpp_set_initial_eps_bearer_settings;
@@ -3433,4 +3220,6 @@ mm_broadband_modem_cinterion_class_init (MMBroadbandModemCinterionClass *klass)
/* Virtual methods */
object_class->finalize = finalize;
broadband_modem_class->setup_ports = setup_ports;
+ broadband_modem_class->load_initial_eps_bearer_cid = load_initial_eps_bearer_cid;
+ broadband_modem_class->load_initial_eps_bearer_cid_finish = load_initial_eps_bearer_cid_finish;
}