<p>Neels Hofmeyr has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/13582">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">lchan activation: add explicit encryption info to activation<br><br>For intra-BSC handover, the previous encryption is copied from the old lchan,<br>which of course is not available during inter-BSC handover.  Hence the lchan<br>activation info needs to include an explicit encryption information, and we<br>must not rely on the presence of the previous lchan to copy encryption<br>information from.<br><br>Add struct lchan_activate_info.encr to allow passing encryption info through<br>lchan_activate() without requiring a previous struct gsm_lchan to be present.<br><br>Instead of copying from the old lchan, always copy encryption info to<br>lchan_activate_info, and during activation, just before sending the Channel<br>Activation, copy the lchan_activate_info.encr to the new lchan.<br><br>This prepares for upcoming I5b269f50bd2092516bfdf87746196983d3ac49d1 which<br>obtains the encryption information from an intra-BSC-incoming Handover Request<br>message.<br><br>Related: OS#3842<br>Related: I5b269f50bd2092516bfdf87746196983d3ac49d1<br>Change-Id: Ib3d259a5711add65ab7298bfa3977855a17a1642<br>---<br>M include/osmocom/bsc/gsm_data.h<br>M src/osmo-bsc/assignment_fsm.c<br>M src/osmo-bsc/handover_fsm.c<br>M src/osmo-bsc/lchan_fsm.c<br>4 files changed, 10 insertions(+), 10 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/82/13582/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/bsc/gsm_data.h b/include/osmocom/bsc/gsm_data.h</span><br><span>index 47ca5e8..ba28a6b 100644</span><br><span>--- a/include/osmocom/bsc/gsm_data.h</span><br><span>+++ b/include/osmocom/bsc/gsm_data.h</span><br><span>@@ -528,6 +528,7 @@</span><br><span>        /* This always is for a specific lchan, so its lchan->type indicates full or half rate.</span><br><span>    * When a dyn TS was selected, the lchan->type has been set to the desired rate. */</span><br><span>       enum gsm48_chan_mode chan_mode;</span><br><span style="color: hsl(120, 100%, 40%);">+       struct gsm_encr encr;</span><br><span>        /* AMR config */</span><br><span>     uint16_t s15_s0;</span><br><span>     bool requires_voice_stream;</span><br><span>diff --git a/src/osmo-bsc/assignment_fsm.c b/src/osmo-bsc/assignment_fsm.c</span><br><span>index c17b555..9c0c400 100644</span><br><span>--- a/src/osmo-bsc/assignment_fsm.c</span><br><span>+++ b/src/osmo-bsc/assignment_fsm.c</span><br><span>@@ -484,6 +484,7 @@</span><br><span>           .activ_for = FOR_ASSIGNMENT,</span><br><span>                 .for_conn = conn,</span><br><span>            .chan_mode = conn->lchan->ch_mode_rate.chan_mode,</span><br><span style="color: hsl(120, 100%, 40%);">+               .encr = conn->lchan->encr,</span><br><span>             .s15_s0 = conn->lchan->ch_mode_rate.s15_s0,</span><br><span>            .requires_voice_stream = conn->assignment.requires_voice_stream,</span><br><span>          .msc_assigned_cic = req->msc_assigned_cic,</span><br><span>diff --git a/src/osmo-bsc/handover_fsm.c b/src/osmo-bsc/handover_fsm.c</span><br><span>index a3d25d6..9c86b70 100644</span><br><span>--- a/src/osmo-bsc/handover_fsm.c</span><br><span>+++ b/src/osmo-bsc/handover_fsm.c</span><br><span>@@ -358,6 +358,7 @@</span><br><span>                 .activ_for = FOR_HANDOVER,</span><br><span>           .for_conn = conn,</span><br><span>            .chan_mode = conn->lchan->tch_mode,</span><br><span style="color: hsl(120, 100%, 40%);">+             .encr = conn->lchan->encr,</span><br><span>             .requires_voice_stream = conn->lchan->mgw_endpoint_ci_bts ? true : false,</span><br><span>              .msc_assigned_cic = conn->ho.inter_bsc_in.msc_assigned_cic,</span><br><span>               .re_use_mgw_endpoint_from_lchan = conn->lchan,</span><br><span>diff --git a/src/osmo-bsc/lchan_fsm.c b/src/osmo-bsc/lchan_fsm.c</span><br><span>index 2b7dc97..7af2ea0 100644</span><br><span>--- a/src/osmo-bsc/lchan_fsm.c</span><br><span>+++ b/src/osmo-bsc/lchan_fsm.c</span><br><span>@@ -518,14 +518,6 @@</span><br><span> </span><br><span>    lchan->conn = info->for_conn;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if (old_lchan)</span><br><span style="color: hsl(0, 100%, 40%);">-          lchan->encr = old_lchan->encr;</span><br><span style="color: hsl(0, 100%, 40%);">-    else {</span><br><span style="color: hsl(0, 100%, 40%);">-          lchan->encr = (struct gsm_encr){</span><br><span style="color: hsl(0, 100%, 40%);">-                     .alg_id = RSL_ENC_ALG_A5(0),    /* no encryption */</span><br><span style="color: hsl(0, 100%, 40%);">-             };</span><br><span style="color: hsl(0, 100%, 40%);">-      }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>    /* If there is a previous lchan, and the new lchan is on the same cell as previous one,</span><br><span>       * take over power and TA values. Otherwise, use max power and zero TA. */</span><br><span>   if (old_lchan && old_lchan->ts->trx->bts == bts) {</span><br><span>@@ -585,14 +577,17 @@</span><br><span>  use_mgwep_ci = lchan_use_mgw_endpoint_ci_bts(lchan);</span><br><span> </span><br><span>     LOG_LCHAN(lchan, LOGL_INFO,</span><br><span style="color: hsl(0, 100%, 40%);">-               "Activation requested: %s voice=%s MGW-ci=%s type=%s tch-mode=%s\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                "Activation requested: %s voice=%s MGW-ci=%s type=%s tch-mode=%s encr-alg=A5/%u ck=%s\n",</span><br><span>                  lchan_activate_mode_name(lchan->activate.info.activ_for),</span><br><span>                 lchan->activate.info.requires_voice_stream ? "yes" : "no",</span><br><span>            lchan->activate.info.requires_voice_stream ?</span><br><span>                    (use_mgwep_ci ? mgwep_ci_name(use_mgwep_ci) : "new")</span><br><span>                       : "none",</span><br><span>            gsm_lchant_name(lchan->type),</span><br><span style="color: hsl(0, 100%, 40%);">-                gsm48_chan_mode_name(lchan->tch_mode));</span><br><span style="color: hsl(120, 100%, 40%);">+            gsm48_chan_mode_name(lchan->tch_mode),</span><br><span style="color: hsl(120, 100%, 40%);">+             (lchan->activate.info.encr.alg_id ? : 1)-1,</span><br><span style="color: hsl(120, 100%, 40%);">+                lchan->activate.info.encr.key_len ? osmo_hexdump_nospc(lchan->activate.info.encr.key,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                                  lchan->activate.info.encr.key_len) : "none");</span><br><span> </span><br><span>      /* Ask for the timeslot to make ready for this lchan->type.</span><br><span>        * We'll receive LCHAN_EV_TS_READY or LCHAN_EV_TS_ERROR in response. */</span><br><span>@@ -657,6 +652,8 @@</span><br><span>            break;</span><br><span>       }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ lchan->encr = lchan->activate.info.encr;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>     rc = rsl_tx_chan_activ(lchan, act_type, ho_ref);</span><br><span>     if (rc)</span><br><span>              lchan_fail_to(LCHAN_ST_UNUSED, "Tx Chan Activ failed: %s (%d)", strerror(-rc), rc);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/13582">change 13582</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/13582"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-bsc </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: Ib3d259a5711add65ab7298bfa3977855a17a1642 </div>
<div style="display:none"> Gerrit-Change-Number: 13582 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Neels Hofmeyr <nhofmeyr@sysmocom.de> </div>