aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--openbsc/include/openbsc/osmo_msc.h1
-rw-r--r--openbsc/src/libmsc/gsm_04_08.c21
-rw-r--r--openbsc/src/libmsc/iucs_ranap.c6
-rw-r--r--openbsc/src/libmsc/msc_ifaces.c3
-rw-r--r--openbsc/tests/msc_vlr/msc_vlr_test_umts_authen.err4
5 files changed, 30 insertions, 5 deletions
diff --git a/openbsc/include/openbsc/osmo_msc.h b/openbsc/include/openbsc/osmo_msc.h
index d6d2b116b..64c37346f 100644
--- a/openbsc/include/openbsc/osmo_msc.h
+++ b/openbsc/include/openbsc/osmo_msc.h
@@ -77,6 +77,7 @@ int msc_compl_l3(struct gsm_subscriber_connection *conn,
void msc_dtap(struct gsm_subscriber_connection *conn, uint8_t link_id, struct msgb *msg);
void msc_cipher_mode_compl(struct gsm_subscriber_connection *conn,
struct msgb *msg, uint8_t alg_id);
+void msc_rx_sec_mode_compl(struct gsm_subscriber_connection *conn);
void msc_conn_close(struct gsm_subscriber_connection *conn, uint32_t cause);
bool msc_subscr_conn_is_accepted(struct gsm_subscriber_connection *conn);
diff --git a/openbsc/src/libmsc/gsm_04_08.c b/openbsc/src/libmsc/gsm_04_08.c
index 8dbe2dbea..db7558e2c 100644
--- a/openbsc/src/libmsc/gsm_04_08.c
+++ b/openbsc/src/libmsc/gsm_04_08.c
@@ -3784,9 +3784,13 @@ static int msc_vlr_set_ciph_mode(void *msc_conn_ref,
switch (conn->via_ran) {
case RAN_GERAN_A:
+ DEBUGP(DMM, "-> CIPHER MODE COMMAND %s\n",
+ vlr_subscr_name(conn->vsub));
return msc_gsm0808_tx_cipher_mode(conn, ciph, tuple->vec.kc, 8,
retrieve_imeisv);
case RAN_UTRAN_IU:
+ DEBUGP(DMM, "-> SECURITY MODE CONTROL %s\n",
+ vlr_subscr_name(conn->vsub));
return iu_tx_sec_mode_cmd(conn->iu.ue_ctx, tuple, 0, 1);
default:
@@ -3798,6 +3802,23 @@ static int msc_vlr_set_ciph_mode(void *msc_conn_ref,
return -ENOTSUP;
}
+void msc_rx_sec_mode_compl(struct gsm_subscriber_connection *conn)
+{
+ struct vlr_ciph_result vlr_res = {};
+
+ if (!conn || !conn->vsub) {
+ LOGP(DMM, LOGL_ERROR,
+ "Rx Security Mode Complete for invalid conn\n");
+ return;
+ }
+
+ DEBUGP(DMM, "<- SECURITY MODE COMPLETE %s\n",
+ vlr_subscr_name(conn->vsub));
+
+ vlr_res.cause = VLR_CIPH_COMPL;
+ vlr_subscr_rx_ciph_res(conn->vsub, &vlr_res);
+}
+
/* VLR informs us that the subscriber data has somehow been modified */
static void msc_vlr_subscr_update(struct vlr_subscr *subscr)
{
diff --git a/openbsc/src/libmsc/iucs_ranap.c b/openbsc/src/libmsc/iucs_ranap.c
index 7215b6c69..7990d9aaa 100644
--- a/openbsc/src/libmsc/iucs_ranap.c
+++ b/openbsc/src/libmsc/iucs_ranap.c
@@ -32,6 +32,7 @@
#include <openbsc/iucs.h>
#include <openbsc/vlr.h>
#include <openbsc/iucs_ranap.h>
+#include <openbsc/osmo_msc.h>
/* To continue authorization after a Security Mode Complete */
int gsm0408_authorize(struct gsm_subscriber_connection *conn);
@@ -54,8 +55,6 @@ static int iucs_rx_rab_assign(struct gsm_subscriber_connection *conn,
int iucs_rx_sec_mode_compl(struct gsm_subscriber_connection *conn,
RANAP_SecurityModeCompleteIEs_t *ies)
{
- struct vlr_ciph_result vlr_res = {};
-
OSMO_ASSERT(conn->via_ran == RAN_UTRAN_IU);
/* TODO evalute ies */
@@ -67,8 +66,7 @@ int iucs_rx_sec_mode_compl(struct gsm_subscriber_connection *conn,
conn->iu.integrity_protection = INTEGRITY_PROTECTION_IK;
- vlr_res.cause = VLR_CIPH_COMPL;
- vlr_subscr_rx_ciph_res(conn->vsub, &vlr_res);
+ msc_rx_sec_mode_compl(conn);
return 0;
}
diff --git a/openbsc/src/libmsc/msc_ifaces.c b/openbsc/src/libmsc/msc_ifaces.c
index f3d11fbbc..1a7d878a2 100644
--- a/openbsc/src/libmsc/msc_ifaces.c
+++ b/openbsc/src/libmsc/msc_ifaces.c
@@ -76,7 +76,8 @@ int msc_gsm48_tx_mm_serv_ack(struct gsm_subscriber_connection *conn)
gh->proto_discr = GSM48_PDISC_MM;
gh->msg_type = GSM48_MT_MM_CM_SERV_ACC;
- DEBUGP(DMM, "-> CM SERVICE ACCEPT\n");
+ DEBUGP(DMM, "-> CM SERVICE ACCEPT %s\n",
+ vlr_subscr_name(conn->vsub));
return msc_tx_dtap(conn, msg);
}
diff --git a/openbsc/tests/msc_vlr/msc_vlr_test_umts_authen.err b/openbsc/tests/msc_vlr/msc_vlr_test_umts_authen.err
index b953a8147..d98c5dc63 100644
--- a/openbsc/tests/msc_vlr/msc_vlr_test_umts_authen.err
+++ b/openbsc/tests/msc_vlr/msc_vlr_test_umts_authen.err
@@ -523,6 +523,7 @@ DIUCS 0: IMSI:901700000010650 Iu link 0x23, conn_id 42
DIUCS subscribers registered: 1
DIUCS Found IuCS subscriber for link_id 0x23, conn_id 2a
DIUCS IuCS security mode complete for IMSI:901700000010650
+DMM <- SECURITY MODE COMPLETE IMSI:901700000010650
DVLR vlr_lu_fsm(901700000010650){VLR_ULA_S_WAIT_CIPH}: Received Event VLR_ULA_E_CIPH_RES
DVLR vlr_lu_fsm(901700000010650){VLR_ULA_S_WAIT_CIPH}: vlr_loc_upd_post_ciph()
DIUCS IMSI:901700000010650: tx CommonID 901700000010650
@@ -705,6 +706,7 @@ DIUCS 0: MSISDN:42342 Iu link 0x23, conn_id 42
DIUCS subscribers registered: 1
DIUCS Found IuCS subscriber for link_id 0x23, conn_id 2a
DIUCS IuCS security mode complete for MSISDN:42342
+DMM <- SECURITY MODE COMPLETE MSISDN:42342
DVLR Process_Access_Request_VLR(901700000010650){PR_ARQ_S_WAIT_CIPH}: Received Event PR_ARQ_E_CIPH_RES
DVLR Process_Access_Request_VLR(901700000010650){PR_ARQ_S_WAIT_CIPH}: _proc_arq_vlr_node2_post_ciph()
DIUCS MSISDN:42342: tx CommonID 901700000010650
@@ -840,6 +842,7 @@ DIUCS 0: MSISDN:42342 Iu link 0x23, conn_id 42
DIUCS subscribers registered: 1
DIUCS Found IuCS subscriber for link_id 0x23, conn_id 2a
DIUCS IuCS security mode complete for MSISDN:42342
+DMM <- SECURITY MODE COMPLETE MSISDN:42342
DVLR Process_Access_Request_VLR(901700000010650){PR_ARQ_S_WAIT_CIPH}: Received Event PR_ARQ_E_CIPH_RES
DVLR Process_Access_Request_VLR(901700000010650){PR_ARQ_S_WAIT_CIPH}: _proc_arq_vlr_node2_post_ciph()
DIUCS MSISDN:42342: tx CommonID 901700000010650
@@ -1243,6 +1246,7 @@ DIUCS 0: IMSI:901700000010650 Iu link 0x23, conn_id 42
DIUCS subscribers registered: 1
DIUCS Found IuCS subscriber for link_id 0x23, conn_id 2a
DIUCS IuCS security mode complete for IMSI:901700000010650
+DMM <- SECURITY MODE COMPLETE IMSI:901700000010650
DVLR vlr_lu_fsm(901700000010650){VLR_ULA_S_WAIT_CIPH}: Received Event VLR_ULA_E_CIPH_RES
DVLR vlr_lu_fsm(901700000010650){VLR_ULA_S_WAIT_CIPH}: vlr_loc_upd_post_ciph()
DIUCS IMSI:901700000010650: tx CommonID 901700000010650