lynxis lazus has submitted this change. ( https://gerrit.osmocom.org/c/osmo-msc/+/41168?usp=email )
Change subject: vlr: vlr_set_ciph_mode(): use vlr_subscr_security_context instead of umts_aka ......................................................................
vlr: vlr_set_ciph_mode(): use vlr_subscr_security_context instead of umts_aka
Simplifies code when re-transmitting Ciphering Mode Command when using it also for PS.
Change-Id: Ia556bc33d1cf30ef17fed2828908aa0b6b6dc8be --- M include/osmocom/vlr/vlr.h M src/libvlr/vlr.c M src/libvlr/vlr_access_req_fsm.c M src/libvlr/vlr_lu_fsm.c 4 files changed, 24 insertions(+), 16 deletions(-)
Approvals: Jenkins Builder: Verified fixeria: Looks good to me, but someone else must approve lynxis lazus: Looks good to me, approved laforge: Looks good to me, but someone else must approve
diff --git a/include/osmocom/vlr/vlr.h b/include/osmocom/vlr/vlr.h index b1994d0..9b49ff2 100644 --- a/include/osmocom/vlr/vlr.h +++ b/include/osmocom/vlr/vlr.h @@ -488,7 +488,7 @@ int vlr_set_ciph_mode(struct vlr_instance *vlr, struct osmo_fsm_inst *fi, void *msc_conn_ref, - bool umts_aka, + enum vlr_subscr_security_context sec_ctx, bool retrieve_imeisv);
bool vlr_use_umts_aka(struct osmo_auth_vector *vec, bool is_r99); diff --git a/src/libvlr/vlr.c b/src/libvlr/vlr.c index c7b7e63..c9055dc 100644 --- a/src/libvlr/vlr.c +++ b/src/libvlr/vlr.c @@ -1664,19 +1664,35 @@
/* Internal evaluation of requested ciphering mode. * Send set_ciph_mode() to MSC depending on the ciph_mode argument. - * \param[in] vlr VLR instance. - * \param[in] fi Calling FSM instance, for logging. - * \param[in] msc_conn_ref MSC conn to send to. - * \param[in] ciph_mode Ciphering config, to decide whether to do ciphering. + * \param[in] vlr VLR instance. + * \param[in] fi Calling FSM instance, for logging. + * \param[in] msc_conn_ref MSC conn to send to. + * \param[in] sec_ctx the security context to be established. + * \param[in] retrieve_imeisv request the IMEI in the ciphering mode command. * \returns 0 if no ciphering is needed or message was sent successfully, * or a negative value if ciph_mode is invalid or sending failed. */ int vlr_set_ciph_mode(struct vlr_instance *vlr, struct osmo_fsm_inst *fi, void *msc_conn_ref, - bool umts_aka, + enum vlr_subscr_security_context sec_ctx, bool retrieve_imeisv) { + bool umts_aka; + + switch (sec_ctx) { + case VLR_SEC_CTX_GSM: + umts_aka = false; + break; + case VLR_SEC_CTX_UMTS: + umts_aka = true; + break; + case VLR_SEC_CTX_NONE: + return 0; + default: + return -EINVAL; + } + LOGPFSML(fi, LOGL_DEBUG, "Set Ciphering Mode\n"); return vlr->ops.set_ciph_mode(msc_conn_ref, umts_aka, retrieve_imeisv); } diff --git a/src/libvlr/vlr_access_req_fsm.c b/src/libvlr/vlr_access_req_fsm.c index 516f53d..91ff06e 100644 --- a/src/libvlr/vlr_access_req_fsm.c +++ b/src/libvlr/vlr_access_req_fsm.c @@ -297,7 +297,6 @@ { struct proc_arq_priv *par = fi->priv; struct vlr_subscr *vsub = par->vsub; - bool umts_aka;
LOGPFSM(fi, "%s()\n", __func__);
@@ -311,10 +310,7 @@
switch (vsub->sec_ctx) { case VLR_SEC_CTX_GSM: - umts_aka = false; - break; case VLR_SEC_CTX_UMTS: - umts_aka = true; break; default: LOGPFSML(fi, LOGL_ERROR, "Cannot start ciphering, security context is not established\n"); @@ -323,7 +319,7 @@ }
if (vlr_set_ciph_mode(vsub->vlr, fi, par->msc_conn_ref, - umts_aka, + vsub->sec_ctx, vsub->vlr->cfg.retrieve_imeisv_ciphered)) { LOGPFSML(fi, LOGL_ERROR, "Failed to send Ciphering Mode Command\n"); diff --git a/src/libvlr/vlr_lu_fsm.c b/src/libvlr/vlr_lu_fsm.c index 5b2e96b..ec459a1 100644 --- a/src/libvlr/vlr_lu_fsm.c +++ b/src/libvlr/vlr_lu_fsm.c @@ -892,7 +892,6 @@ { struct lu_fsm_priv *lfp = lu_fsm_fi_priv(fi); struct vlr_subscr *vsub = lfp->vsub; - bool umts_aka;
LOGPFSM(fi, "%s()\n", __func__);
@@ -914,10 +913,7 @@
switch (vsub->sec_ctx) { case VLR_SEC_CTX_GSM: - umts_aka = false; - break; case VLR_SEC_CTX_UMTS: - umts_aka = true; break; default: LOGPFSML(fi, LOGL_ERROR, "Cannot start ciphering, security context is not established\n"); @@ -926,7 +922,7 @@ }
if (vlr_set_ciph_mode(vsub->vlr, fi, lfp->msc_conn_ref, - umts_aka, + vsub->sec_ctx, vsub->vlr->cfg.retrieve_imeisv_ciphered)) { LOGPFSML(fi, LOGL_ERROR, "Failed to send Ciphering Mode Command\n");