aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/osmocom/bsc/gsm_data.h1
-rw-r--r--src/osmo-bsc/assignment_fsm.c1
-rw-r--r--src/osmo-bsc/handover_fsm.c1
-rw-r--r--src/osmo-bsc/lchan_fsm.c17
4 files changed, 10 insertions, 10 deletions
diff --git a/include/osmocom/bsc/gsm_data.h b/include/osmocom/bsc/gsm_data.h
index 47ca5e839..ba28a6b1c 100644
--- a/include/osmocom/bsc/gsm_data.h
+++ b/include/osmocom/bsc/gsm_data.h
@@ -528,6 +528,7 @@ struct lchan_activate_info {
/* This always is for a specific lchan, so its lchan->type indicates full or half rate.
* When a dyn TS was selected, the lchan->type has been set to the desired rate. */
enum gsm48_chan_mode chan_mode;
+ struct gsm_encr encr;
/* AMR config */
uint16_t s15_s0;
bool requires_voice_stream;
diff --git a/src/osmo-bsc/assignment_fsm.c b/src/osmo-bsc/assignment_fsm.c
index c17b55509..9c0c40028 100644
--- a/src/osmo-bsc/assignment_fsm.c
+++ b/src/osmo-bsc/assignment_fsm.c
@@ -484,6 +484,7 @@ void assignment_fsm_start(struct gsm_subscriber_connection *conn, struct gsm_bts
.activ_for = FOR_ASSIGNMENT,
.for_conn = conn,
.chan_mode = conn->lchan->ch_mode_rate.chan_mode,
+ .encr = conn->lchan->encr,
.s15_s0 = conn->lchan->ch_mode_rate.s15_s0,
.requires_voice_stream = conn->assignment.requires_voice_stream,
.msc_assigned_cic = req->msc_assigned_cic,
diff --git a/src/osmo-bsc/handover_fsm.c b/src/osmo-bsc/handover_fsm.c
index a3d25d629..9c86b7090 100644
--- a/src/osmo-bsc/handover_fsm.c
+++ b/src/osmo-bsc/handover_fsm.c
@@ -358,6 +358,7 @@ static void handover_start_intra_bsc(struct gsm_subscriber_connection *conn)
.activ_for = FOR_HANDOVER,
.for_conn = conn,
.chan_mode = conn->lchan->tch_mode,
+ .encr = conn->lchan->encr,
.requires_voice_stream = conn->lchan->mgw_endpoint_ci_bts ? true : false,
.msc_assigned_cic = conn->ho.inter_bsc_in.msc_assigned_cic,
.re_use_mgw_endpoint_from_lchan = conn->lchan,
diff --git a/src/osmo-bsc/lchan_fsm.c b/src/osmo-bsc/lchan_fsm.c
index 2b7dc9753..7af2ea01c 100644
--- a/src/osmo-bsc/lchan_fsm.c
+++ b/src/osmo-bsc/lchan_fsm.c
@@ -518,14 +518,6 @@ static void lchan_fsm_wait_ts_ready_onenter(struct osmo_fsm_inst *fi, uint32_t p
lchan->conn = info->for_conn;
- if (old_lchan)
- lchan->encr = old_lchan->encr;
- else {
- lchan->encr = (struct gsm_encr){
- .alg_id = RSL_ENC_ALG_A5(0), /* no encryption */
- };
- }
-
/* If there is a previous lchan, and the new lchan is on the same cell as previous one,
* take over power and TA values. Otherwise, use max power and zero TA. */
if (old_lchan && old_lchan->ts->trx->bts == bts) {
@@ -585,14 +577,17 @@ static void lchan_fsm_wait_ts_ready_onenter(struct osmo_fsm_inst *fi, uint32_t p
use_mgwep_ci = lchan_use_mgw_endpoint_ci_bts(lchan);
LOG_LCHAN(lchan, LOGL_INFO,
- "Activation requested: %s voice=%s MGW-ci=%s type=%s tch-mode=%s\n",
+ "Activation requested: %s voice=%s MGW-ci=%s type=%s tch-mode=%s encr-alg=A5/%u ck=%s\n",
lchan_activate_mode_name(lchan->activate.info.activ_for),
lchan->activate.info.requires_voice_stream ? "yes" : "no",
lchan->activate.info.requires_voice_stream ?
(use_mgwep_ci ? mgwep_ci_name(use_mgwep_ci) : "new")
: "none",
gsm_lchant_name(lchan->type),
- gsm48_chan_mode_name(lchan->tch_mode));
+ gsm48_chan_mode_name(lchan->tch_mode),
+ (lchan->activate.info.encr.alg_id ? : 1)-1,
+ lchan->activate.info.encr.key_len ? osmo_hexdump_nospc(lchan->activate.info.encr.key,
+ lchan->activate.info.encr.key_len) : "none");
/* Ask for the timeslot to make ready for this lchan->type.
* We'll receive LCHAN_EV_TS_READY or LCHAN_EV_TS_ERROR in response. */
@@ -657,6 +652,8 @@ static void lchan_fsm_wait_activ_ack_onenter(struct osmo_fsm_inst *fi, uint32_t
break;
}
+ lchan->encr = lchan->activate.info.encr;
+
rc = rsl_tx_chan_activ(lchan, act_type, ho_ref);
if (rc)
lchan_fail_to(LCHAN_ST_UNUSED, "Tx Chan Activ failed: %s (%d)", strerror(-rc), rc);