diff options
-rw-r--r-- | include/osmocom/bsc/gsm_data.h | 1 | ||||
-rw-r--r-- | src/osmo-bsc/assignment_fsm.c | 1 | ||||
-rw-r--r-- | src/osmo-bsc/handover_fsm.c | 1 | ||||
-rw-r--r-- | src/osmo-bsc/lchan_fsm.c | 17 |
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); |