cosmetic prep: publish vlr_use_umts_aka() decision

During Set Ciphering Mode on GERAN, it is required to know whether UMTS AKA is
used to decide which Kc to pick. Change static function is_umts_auth() into
public vlr_use_umts_aka(), so future patches can re-use it.

Prepares: If04e405426c55a81341747a9b450a69188525d5c
Change-Id: I85d784c62ecbabdb6186a3dae4dcd554e7921041
This commit is contained in:
Neels Hofmeyr 2017-12-18 02:06:44 +01:00
parent 703638e79a
commit e3d72d7827
3 changed files with 20 additions and 11 deletions

View File

@ -435,5 +435,7 @@ int vlr_set_ciph_mode(struct vlr_instance *vlr,
enum vlr_ciph ciph_mode,
bool retrieve_imeisv);
bool vlr_use_umts_aka(struct osmo_auth_vector *vec, bool is_r99);
void log_set_filter_vlr_subscr(struct log_target *target,
struct vlr_subscr *vlr_subscr);

View File

@ -1122,6 +1122,23 @@ int vlr_set_ciph_mode(struct vlr_instance *vlr,
}
}
/* Decide whether UMTS AKA should be used.
* UTRAN networks are by definition R99 capable, and the auth vector is required to contain UMTS AKA
* tokens. This is expected to be verified by the caller. On GERAN, UMTS AKA must be used iff MS and
* GERAN are R99 capable and UMTS AKA tokens are available.
* \param[in] vec Auth tokens (received from the HLR).
* \param[in] is_r99 True when BTS and GERAN are R99 capable.
* \returns true to use UMTS AKA, false to use pre-R99 GSM AKA.
*/
bool vlr_use_umts_aka(struct osmo_auth_vector *vec, bool is_r99)
{
if (!is_r99)
return false;
if (!(vec->auth_types & OSMO_AUTH_TYPE_UMTS))
return false;
return true;
}
void log_set_filter_vlr_subscr(struct log_target *target,
struct vlr_subscr *vlr_subscr)
{

View File

@ -211,16 +211,6 @@ static void auth_fsm_onenter_failed(struct osmo_fsm_inst *fi, uint32_t prev_stat
vlr_subscr_tx_auth_fail_rep(vsub);
}
static bool is_umts_auth(struct auth_fsm_priv *afp,
uint32_t auth_types)
{
if (!afp->is_r99)
return false;
if (!(auth_types & OSMO_AUTH_TYPE_UMTS))
return false;
return true;
}
/* Terminate the Auth FSM Instance and notify parent */
static void auth_fsm_term(struct osmo_fsm_inst *fi, enum vlr_auth_fsm_result res)
{
@ -268,7 +258,7 @@ static int _vlr_subscr_authenticate(struct osmo_fsm_inst *fi)
afp->auth_requested = true;
vsub->last_tuple = at;
vsub->vlr->ops.tx_auth_req(vsub->msc_conn_ref, at,
is_umts_auth(afp, at->vec.auth_types));
vlr_use_umts_aka(&at->vec, afp->is_r99));
return 0;
}