aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/libmsc/gsm_04_08.c12
-rw-r--r--src/libvlr/vlr.c26
-rw-r--r--src/libvlr/vlr_access_req_fsm.c9
-rw-r--r--src/libvlr/vlr_lu_fsm.c9
4 files changed, 16 insertions, 40 deletions
diff --git a/src/libmsc/gsm_04_08.c b/src/libmsc/gsm_04_08.c
index 126a216e1..c37aeb758 100644
--- a/src/libmsc/gsm_04_08.c
+++ b/src/libmsc/gsm_04_08.c
@@ -339,8 +339,7 @@ int mm_rx_loc_upd_req(struct gsm_subscriber_connection *conn, struct msgb *msg)
net->vlr, conn, vlr_lu_type, tmsi, imsi,
&old_lai, &new_lai,
is_utran || conn->network->authentication_required,
- is_utran? VLR_CIPH_A5_3
- : conn->network->a5_encryption,
+ is_utran || conn->network->a5_encryption,
classmark_is_r99(&conn->classmark),
is_utran,
net->vlr->cfg.assign_tmsi);
@@ -724,8 +723,7 @@ int gsm48_rx_mm_serv_req(struct gsm_subscriber_connection *conn, struct msgb *ms
net->vlr, conn,
VLR_PR_ARQ_T_CM_SERV_REQ, mi-1, &lai,
is_utran || conn->network->authentication_required,
- is_utran? VLR_CIPH_A5_3
- : conn->network->a5_encryption,
+ is_utran || conn->network->a5_encryption,
classmark_is_r99(&conn->classmark),
is_utran);
@@ -1129,8 +1127,7 @@ static int gsm48_rx_rr_pag_resp(struct gsm_subscriber_connection *conn, struct m
net->vlr, conn,
VLR_PR_ARQ_T_PAGING_RESP, mi_lv, &lai,
is_utran || conn->network->authentication_required,
- is_utran? VLR_CIPH_A5_3
- : conn->network->a5_encryption,
+ is_utran || conn->network->a5_encryption,
classmark_is_r99(&conn->classmark),
is_utran);
@@ -3422,7 +3419,6 @@ osmo_static_assert(sizeof(((struct gsm0808_encrypt_info*)0)->key) >= sizeof(((st
/* VLR asks us to start using ciphering */
static int msc_vlr_set_ciph_mode(void *msc_conn_ref,
- enum vlr_ciph ciph,
bool umts_aka,
bool retrieve_imeisv)
{
@@ -3453,7 +3449,7 @@ static int msc_vlr_set_ciph_mode(void *msc_conn_ref,
{
struct gsm0808_encrypt_info ei;
- ei.perm_algo[0] = vlr_ciph_to_gsm0808_alg_id(ciph);
+ ei.perm_algo[0] = vlr_ciph_to_gsm0808_alg_id(conn->network->a5_encryption);
ei.perm_algo_len = 1;
/* In case of UMTS AKA, the Kc for ciphering must be derived from the 3G auth
diff --git a/src/libvlr/vlr.c b/src/libvlr/vlr.c
index 21ef0821f..6750a46f6 100644
--- a/src/libvlr/vlr.c
+++ b/src/libvlr/vlr.c
@@ -1105,33 +1105,15 @@ void vlr_subscr_rx_ciph_res(struct vlr_subscr *vsub, struct vlr_ciph_result *res
int vlr_set_ciph_mode(struct vlr_instance *vlr,
struct osmo_fsm_inst *fi,
void *msc_conn_ref,
- enum vlr_ciph ciph_mode,
+ bool ciph_required,
bool umts_aka,
bool retrieve_imeisv)
{
- switch (ciph_mode) {
- case VLR_CIPH_NONE:
+ if (!ciph_required)
return 0;
- case VLR_CIPH_A5_1:
- case VLR_CIPH_A5_3:
- LOGPFSML(fi, LOGL_DEBUG, "Set Ciphering Mode: %d=%s\n",
- ciph_mode, vlr_ciph_name(ciph_mode));
- return vlr->ops.set_ciph_mode(msc_conn_ref,
- ciph_mode,
- umts_aka,
- retrieve_imeisv);
-
- case VLR_CIPH_A5_2:
- /* TODO policy by user config? */
- LOGPFSML(fi, LOGL_ERROR, "A5/2 ciphering is not allowed\n");
- return -EINVAL;
-
- default:
- LOGPFSML(fi, LOGL_ERROR, "unknown ciphering value: %d\n",
- ciph_mode);
- return -EINVAL;
- }
+ LOGPFSML(fi, LOGL_DEBUG, "Set Ciphering Mode\n");
+ return vlr->ops.set_ciph_mode(msc_conn_ref, umts_aka, retrieve_imeisv);
}
/* Decide whether UMTS AKA should be used.
diff --git a/src/libvlr/vlr_access_req_fsm.c b/src/libvlr/vlr_access_req_fsm.c
index 41e629ed2..556e69426 100644
--- a/src/libvlr/vlr_access_req_fsm.c
+++ b/src/libvlr/vlr_access_req_fsm.c
@@ -79,7 +79,7 @@ struct proc_arq_priv {
uint32_t tmsi;
struct osmo_location_area_id lai;
bool authentication_required;
- enum vlr_ciph ciphering_required;
+ bool ciphering_required;
bool is_r99;
bool is_utran;
bool implicitly_accepted_parq_by_ciphering_cmd;
@@ -277,7 +277,7 @@ static void _proc_arq_vlr_node2_post_ciph(struct osmo_fsm_inst *fi)
static bool is_ciph_required(struct proc_arq_priv *par)
{
- return par->ciphering_required != VLR_CIPH_NONE;
+ return par->ciphering_required;
}
static void _proc_arq_vlr_node2(struct osmo_fsm_inst *fi)
@@ -311,8 +311,7 @@ static bool is_auth_required(struct proc_arq_priv *par)
/* The cases where the authentication procedure should be used
* are defined in 3GPP TS 33.102 */
/* For now we use a default value passed in to vlr_lu_fsm(). */
- return par->authentication_required
- || (par->ciphering_required != VLR_CIPH_NONE);
+ return par->authentication_required || par->ciphering_required;
}
/* after the IMSI is known */
@@ -654,7 +653,7 @@ vlr_proc_acc_req(struct osmo_fsm_inst *parent,
enum vlr_parq_type type, const uint8_t *mi_lv,
const struct osmo_location_area_id *lai,
bool authentication_required,
- enum vlr_ciph ciphering_required,
+ bool ciphering_required,
bool is_r99, bool is_utran)
{
struct osmo_fsm_inst *fi;
diff --git a/src/libvlr/vlr_lu_fsm.c b/src/libvlr/vlr_lu_fsm.c
index e540e2ae9..6c8b53adb 100644
--- a/src/libvlr/vlr_lu_fsm.c
+++ b/src/libvlr/vlr_lu_fsm.c
@@ -644,7 +644,7 @@ struct lu_fsm_priv {
struct osmo_location_area_id old_lai;
struct osmo_location_area_id new_lai;
bool authentication_required;
- enum vlr_ciph ciphering_required;
+ bool ciphering_required;
bool is_r99;
bool is_utran;
bool assign_tmsi;
@@ -665,14 +665,13 @@ static bool is_auth_required(struct lu_fsm_priv *lfp)
/* The cases where the authentication procedure should be used
* are defined in 3GPP TS 33.102 */
/* For now we use a default value passed in to vlr_lu_fsm(). */
- return lfp->authentication_required
- || (lfp->ciphering_required != VLR_CIPH_NONE);
+ return lfp->authentication_required || lfp->ciphering_required;
}
/* Determine if ciphering is required */
static bool is_ciph_required(struct lu_fsm_priv *lfp)
{
- return lfp->ciphering_required != VLR_CIPH_NONE;
+ return lfp->ciphering_required;
}
/* Determine if a HLR Update is required */
@@ -1391,7 +1390,7 @@ vlr_loc_update(struct osmo_fsm_inst *parent,
const struct osmo_location_area_id *old_lai,
const struct osmo_location_area_id *new_lai,
bool authentication_required,
- enum vlr_ciph ciphering_required,
+ bool ciphering_required,
bool is_r99, bool is_utran,
bool assign_tmsi)
{