diff options
author | Neels Hofmeyr <nhofmeyr@sysmocom.de> | 2016-05-30 13:09:14 +0200 |
---|---|---|
committer | Neels Hofmeyr <nhofmeyr@sysmocom.de> | 2017-02-23 22:27:37 +0100 |
commit | 331c78df5885ac7269682c23bd9b231f7a82a8c7 (patch) | |
tree | 083ba579301c9a56798b8038d7cf35e5c0ca0c9d /openbsc/src/libmsc/gsm_04_08.c | |
parent | 75f53b52794cb31e42f8974358a3ef5034cfc081 (diff) |
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
Diffstat (limited to 'openbsc/src/libmsc/gsm_04_08.c')
-rw-r--r-- | openbsc/src/libmsc/gsm_04_08.c | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/openbsc/src/libmsc/gsm_04_08.c b/openbsc/src/libmsc/gsm_04_08.c index a6559a846..62b18da84 100644 --- a/openbsc/src/libmsc/gsm_04_08.c +++ b/openbsc/src/libmsc/gsm_04_08.c @@ -58,6 +58,7 @@ #include <openbsc/mncc_int.h> #include <osmocom/abis/e1_input.h> #include <osmocom/core/bitvec.h> +#include <openbsc/msc_ifaces.h> #include <osmocom/gsm/gsm48.h> #include <osmocom/gsm/gsm0480.h> @@ -228,8 +229,9 @@ int gsm48_secure_channel(struct gsm_subscriber_connection *conn, int key_seq, 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 */ @@ -926,7 +928,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; @@ -971,14 +973,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); @@ -998,8 +1000,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)); @@ -1013,8 +1015,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; @@ -1248,8 +1250,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); } static int gsm48_rx_mm_auth_fail(struct gsm_subscriber_connection *conn, struct msgb *msg) |