From fec0a31f41b2996f5756835273c4e8d019bb924d Mon Sep 17 00:00:00 2001 From: Neels Hofmeyr Date: Mon, 30 May 2016 13:09:14 +0200 Subject: libmsc: duplicate gsm0808 / gsm48 functions (towards BSC) In osmo-nitb, libmsc would directly call the functions on the BSC level, not always via the bsc_api. When separating libmsc from libbsc, some functions are missing from the linkage. Hence duplicate these functions to libmsc, add an msc_ prefix for clarity, also add a _tx to gsm0808_cipher_mode(): * add msc_gsm0808_tx_cipher_mode() (dummy/stub) * add msc_gsm48_tx_mm_serv_ack() * add msc_gsm48_tx_mm_serv_rej() Call these from libmsc instead of * gsm0808_cipher_mode() * gsm48_tx_mm_serv_ack() * gsm48_tx_mm_serv_rej() Also add a comment relatd to msc_gsm0808_tx_cipher_mode() in two places. Change-Id: I5b276853d3af71f5e3f0a031fd17b4fff0580020 --- openbsc/src/libmsc/gsm_04_08.c | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) (limited to 'openbsc/src/libmsc/gsm_04_08.c') diff --git a/openbsc/src/libmsc/gsm_04_08.c b/openbsc/src/libmsc/gsm_04_08.c index 4252630f0..813daa4b3 100644 --- a/openbsc/src/libmsc/gsm_04_08.c +++ b/openbsc/src/libmsc/gsm_04_08.c @@ -58,6 +58,7 @@ #include #include #include +#include #include #include @@ -226,8 +227,9 @@ int gsm48_secure_channel(struct gsm_subscriber_connection *conn, int key_seq, return gsm48_tx_mm_auth_req(conn, op->atuple.vec.rand, op->atuple.key_seq); } else if (rc == AUTH_DO_CIPH) { /* Start ciphering directly */ - return gsm0808_cipher_mode(conn, net->a5_encryption, - op->atuple.vec.kc, 8, 0); + /* TODO: specific to A interface, move this away */ + return msc_gsm0808_tx_cipher_mode(conn, net->a5_encryption, + op->atuple.vec.kc, 8, 0); } return -EINVAL; /* not reached */ @@ -908,7 +910,7 @@ static int _gsm48_rx_mm_serv_req_sec_cb( case GSM_SECURITY_NOAVAIL: case GSM_SECURITY_ALREADY: - rc = gsm48_tx_mm_serv_ack(conn); + rc = msc_gsm48_tx_mm_serv_ack(conn); implit_attach(conn); break; @@ -953,14 +955,14 @@ static int gsm48_rx_mm_serv_req(struct gsm_subscriber_connection *conn, struct m DEBUGP(DMM, "<- CM SERVICE REQUEST "); if (msg->data_len < sizeof(struct gsm48_service_request*)) { DEBUGPC(DMM, "wrong sized message\n"); - return gsm48_tx_mm_serv_rej(conn, - GSM48_REJECT_INCORRECT_MESSAGE); + return msc_gsm48_tx_mm_serv_rej(conn, + GSM48_REJECT_INCORRECT_MESSAGE); } if (msg->data_len < req->mi_len + 6) { DEBUGPC(DMM, "does not fit in packet\n"); - return gsm48_tx_mm_serv_rej(conn, - GSM48_REJECT_INCORRECT_MESSAGE); + return msc_gsm48_tx_mm_serv_rej(conn, + GSM48_REJECT_INCORRECT_MESSAGE); } gsm48_mi_to_string(mi_string, sizeof(mi_string), mi, mi_len); @@ -980,8 +982,8 @@ static int gsm48_rx_mm_serv_req(struct gsm_subscriber_connection *conn, struct m tmsi_from_string(mi_string)); } else { DEBUGPC(DMM, "mi_type is not expected: %d\n", mi_type); - return gsm48_tx_mm_serv_rej(conn, - GSM48_REJECT_INCORRECT_MESSAGE); + return msc_gsm48_tx_mm_serv_rej(conn, + GSM48_REJECT_INCORRECT_MESSAGE); } osmo_signal_dispatch(SS_SUBSCR, S_SUBSCR_IDENTITY, (classmark2 + classmark2_len)); @@ -995,8 +997,8 @@ static int gsm48_rx_mm_serv_req(struct gsm_subscriber_connection *conn, struct m /* FIXME: if we don't know the TMSI, inquire abit IMSI and allocate new TMSI */ if (!subscr) - return gsm48_tx_mm_serv_rej(conn, - GSM48_REJECT_IMSI_UNKNOWN_IN_VLR); + return msc_gsm48_tx_mm_serv_rej(conn, + GSM48_REJECT_IMSI_UNKNOWN_IN_VLR); if (!conn->subscr) conn->subscr = subscr; @@ -1119,8 +1121,9 @@ static int gsm48_rx_mm_auth_resp(struct gsm_subscriber_connection *conn, struct DEBUGPC(DMM, "OK\n"); /* Start ciphering */ - return gsm0808_cipher_mode(conn, net->a5_encryption, - conn->sec_operation->atuple.vec.kc, 8, 0); + return msc_gsm0808_tx_cipher_mode(conn, net->a5_encryption, + conn->sec_operation->atuple.vec.kc, + 8, 0); } /* Receive a GSM 04.08 Mobility Management (MM) message */ -- cgit v1.2.3