diff options
-rw-r--r-- | include/osmocom/msc/vlr.h | 16 | ||||
-rw-r--r-- | src/libmsc/a_iface.c | 2 |
2 files changed, 17 insertions, 1 deletions
diff --git a/include/osmocom/msc/vlr.h b/include/osmocom/msc/vlr.h index 9e6b12c33..640d35b46 100644 --- a/include/osmocom/msc/vlr.h +++ b/include/osmocom/msc/vlr.h @@ -7,6 +7,7 @@ #include <osmocom/gsm/protocol/gsm_23_003.h> #include <osmocom/gsm/protocol/gsm_04_08_gprs.h> #include <osmocom/gsm/gsm23003.h> +#include <osmocom/gsm/gsm0808.h> #include <osmocom/msc/gsm_data.h> // for GSM_NAME_LENGTH #include <osmocom/msc/gsm_subscriber.h> @@ -172,6 +173,21 @@ enum vlr_ciph { VLR_CIPH_A5_3, /*< A5/3, 'new secure' encryption */ }; +static inline uint8_t vlr_ciph_to_gsm0808_alg_id(enum vlr_ciph ciph) +{ + switch (ciph) { + default: + case VLR_CIPH_NONE: + return GSM0808_ALG_ID_A5_0; + case VLR_CIPH_A5_1: + return GSM0808_ALG_ID_A5_1; + case VLR_CIPH_A5_2: + return GSM0808_ALG_ID_A5_2; + case VLR_CIPH_A5_3: + return GSM0808_ALG_ID_A5_3; + } +} + struct vlr_ops { /* encode + transmit an AUTH REQ towards the MS. * \param[in] at auth tuple providing rand, key_seq and autn. diff --git a/src/libmsc/a_iface.c b/src/libmsc/a_iface.c index f863517c4..69b4c0991 100644 --- a/src/libmsc/a_iface.c +++ b/src/libmsc/a_iface.c @@ -198,7 +198,7 @@ int a_iface_tx_cipher_mode(const struct gsm_subscriber_connection *conn, if (include_imeisv) crm_ptr = &crm; - ei.perm_algo[0] = (uint8_t) (1 << cipher); + ei.perm_algo[0] = vlr_ciph_to_gsm0808_alg_id(cipher); ei.perm_algo_len = 1; msg_resp = gsm0808_create_cipher(&ei, crm_ptr); |