<p>Eric Wild has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/14224">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Extend BTS_Tests.ttcn with test for RSL MODE MODIFY with encryption IE<br><br>This test will currently fail due to a MODE MODIFY NACK, even though the<br>channel mode is not modified.<br>Related: OS##3750<br><br>Change-Id: I4cbea499bb6a331d314e6573548a4540945208b5<br>---<br>M bts/BTS_Tests.ttcn<br>M library/RSL_Types.ttcn<br>2 files changed, 89 insertions(+), 1 deletion(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/24/14224/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn</span><br><span>index 968ed6c..429c784 100644</span><br><span>--- a/bts/BTS_Tests.ttcn</span><br><span>+++ b/bts/BTS_Tests.ttcn</span><br><span>@@ -4834,6 +4834,71 @@</span><br><span>    f_testmatrix_each_chan(pars, refers(f_TC_chan_act_encr));</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Test channel activation with A5/n right from the beginning and RSL MODE MODIFY</span><br><span style="color: hsl(120, 100%, 40%);">+ which should break the en/decryption on purpose by supplying a new key that is unknown to the MS*/</span><br><span style="color: hsl(120, 100%, 40%);">+function f_TC_rsl_modify_encr(charstring id) runs on ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+   f_l1_tune(L1CTL);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_est_dchan(true);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* now we actually need to transmit some data both ways to check if the encryption works */</span><br><span style="color: hsl(120, 100%, 40%);">+   var L1ctlDlMessage dl;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      var octetstring l3 := f_rnd_octstring(20);</span><br><span style="color: hsl(120, 100%, 40%);">+    var RslLinkId link_id := valueof(ts_RslLinkID_DCCH(0));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     /* send UNITDATA_REQ from BTS to MS and expect it to arrive */</span><br><span style="color: hsl(120, 100%, 40%);">+        f_unitdata_mt(link_id, l3);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Send UI frame from MS and expect it to arrive as RLL UNITDATA IND on Abis */</span><br><span style="color: hsl(120, 100%, 40%);">+       f_unitdata_mo(link_id, l3);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ var RSL_Message rsl;</span><br><span style="color: hsl(120, 100%, 40%);">+  rsl := valueof(ts_RSL_MODE_MODIFY_REQ(g_chan_nr, valueof(ts_RSL_ChanMode_SIGN(false))));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    /* modify key to break proper encryption */</span><br><span style="color: hsl(120, 100%, 40%);">+   g_pars.encr.key :=  f_rnd_octstring(8);</span><br><span style="color: hsl(120, 100%, 40%);">+       var RSL_IE ei := valueof(t_RSL_IE(RSL_IE_ENCR_INFO, RSL_IE_Body:{encr_info := g_pars.encr}));</span><br><span style="color: hsl(120, 100%, 40%);">+ rsl.ies := rsl.ies & { ei };</span><br><span style="color: hsl(120, 100%, 40%);">+      RSL.send(rsl);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      timer T0 := 1.0;</span><br><span style="color: hsl(120, 100%, 40%);">+      T0.start;</span><br><span style="color: hsl(120, 100%, 40%);">+     /* Expect RSL MODIFY ACK */</span><br><span style="color: hsl(120, 100%, 40%);">+   alt {</span><br><span style="color: hsl(120, 100%, 40%);">+ [] RSL.receive(tr_RSL_MODE_MODIFY_ACK(g_chan_nr)) {}</span><br><span style="color: hsl(120, 100%, 40%);">+  [] RSL.receive(tr_RSL_MODE_MODIFY_NACK(g_chan_nr, ?)) {</span><br><span style="color: hsl(120, 100%, 40%);">+               Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail,"MODE MODIFY NACK");</span><br><span style="color: hsl(120, 100%, 40%);">+              }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] T0.timeout {</span><br><span style="color: hsl(120, 100%, 40%);">+               Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "MODE MODIFY NACK");</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   var octetstring l3msg := f_rnd_octstring(15);</span><br><span style="color: hsl(120, 100%, 40%);">+ timer T1 := 3.0;</span><br><span style="color: hsl(120, 100%, 40%);">+      /* Send UI frame from MS, do not expect it to arrive as RLL UNITDATA IND on Abis</span><br><span style="color: hsl(120, 100%, 40%);">+      due to broken encryption  */</span><br><span style="color: hsl(120, 100%, 40%);">+  f_tx_lapdm(ts_LAPDm_UI(link_id.sapi, cr_MO_CMD, l3msg), link_id);</span><br><span style="color: hsl(120, 100%, 40%);">+     T1.start;</span><br><span style="color: hsl(120, 100%, 40%);">+     alt {</span><br><span style="color: hsl(120, 100%, 40%);">+ [] RSL.receive(tr_RSL_UNITDATA_IND(g_chan_nr, link_id, l3msg)) {</span><br><span style="color: hsl(120, 100%, 40%);">+              setverdict(fail);</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] T1.timeout {</span><br><span style="color: hsl(120, 100%, 40%);">+               setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* release the channel */</span><br><span style="color: hsl(120, 100%, 40%);">+     f_rsl_chan_deact();</span><br><span style="color: hsl(120, 100%, 40%);">+   f_L1CTL_DM_REL_REQ(L1CTL, g_chan_nr);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_rslem_unregister(0, g_chan_nr);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_rsl_modify_encr() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+ var ConnHdlrPars pars := valueof(t_Pars(t_RslChanNr_Bm(1), ts_RSL_ChanMode_SIGN));</span><br><span style="color: hsl(120, 100%, 40%);">+    pars.encr := valueof(ts_RSL_IE_EncrInfo(RSL_ALG_ID_A5_1, f_rnd_octstring(8)));</span><br><span style="color: hsl(120, 100%, 40%);">+        f_testmatrix_each_chan(pars, refers(f_TC_rsl_modify_encr));</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span> </span><br><span> /* Test unencrypted channel activation followed by explicit ENCR CMD later */</span><br><span> function f_TC_encr_cmd(charstring id) runs on ConnHdlr {</span><br><span>@@ -5201,6 +5266,7 @@</span><br><span>      execute( TC_meas_res_sign_tchh_toa256() );</span><br><span>   execute( TC_rsl_ms_pwr_ctrl() );</span><br><span>     execute( TC_rsl_chan_initial_ta() );</span><br><span style="color: hsl(120, 100%, 40%);">+  execute( TC_rsl_modify_encr() );</span><br><span>     execute( TC_conn_fail_crit() );</span><br><span>      execute( TC_paging_imsi_80percent() );</span><br><span>       execute( TC_paging_tmsi_80percent() );</span><br><span>diff --git a/library/RSL_Types.ttcn b/library/RSL_Types.ttcn</span><br><span>index 4d23c3f..ef3f45b 100644</span><br><span>--- a/library/RSL_Types.ttcn</span><br><span>+++ b/library/RSL_Types.ttcn</span><br><span>@@ -1353,7 +1353,29 @@</span><br><span>                 }</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(120, 100%, 40%);">+ /* 8.4.9 BSC -> BTS */</span><br><span style="color: hsl(120, 100%, 40%);">+     template (value) RSL_Message ts_RSL_MODE_MODIFY_REQ(template (value) RslChannelNr chan_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                 template (value) RSL_IE_ChannelMode mode) := {</span><br><span style="color: hsl(120, 100%, 40%);">+           msg_disc := ts_RSL_MsgDisc(RSL_MDISC_DCHAN, false),</span><br><span style="color: hsl(120, 100%, 40%);">+           msg_type := RSL_MT_MODE_MODIFY_REQ,</span><br><span style="color: hsl(120, 100%, 40%);">+           ies :={</span><br><span style="color: hsl(120, 100%, 40%);">+                       t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := chan_nr}),</span><br><span style="color: hsl(120, 100%, 40%);">+                   t_RSL_IE(RSL_IE_CHAN_MODE, RSL_IE_Body:{chan_mode := mode})</span><br><span style="color: hsl(120, 100%, 40%);">+                   /* lots of optional IEs */</span><br><span style="color: hsl(120, 100%, 40%);">+            }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+     template RSL_Message tr_RSL_MODE_MODIFY_REQ(template RslChannelNr chan_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+                                         template RSL_IE_ChannelMode mode) := {</span><br><span style="color: hsl(120, 100%, 40%);">+           msg_disc := tr_RSL_MsgDisc(RSL_MDISC_DCHAN, false),</span><br><span style="color: hsl(120, 100%, 40%);">+           msg_type := RSL_MT_MODE_MODIFY_REQ,</span><br><span style="color: hsl(120, 100%, 40%);">+           ies :={</span><br><span style="color: hsl(120, 100%, 40%);">+                       tr_RSL_IE(RSL_IE_Body:{chan_nr := chan_nr}),</span><br><span style="color: hsl(120, 100%, 40%);">+                  tr_RSL_IE(RSL_IE_Body:{chan_mode := mode}),</span><br><span style="color: hsl(120, 100%, 40%);">+                   /* lots of optional IEs */</span><br><span style="color: hsl(120, 100%, 40%);">+                    *</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+     </span><br><span>     /* 8.4.10 BTS -> BSC */</span><br><span>   template (value) RSL_Message ts_RSL_MODE_MODIFY_ACK(template (value) RslChannelNr chan_nr) := {</span><br><span>              msg_disc := ts_RSL_MsgDisc(RSL_MDISC_DCHAN, false),</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/14224">change 14224</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/14224"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-ttcn3-hacks </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I4cbea499bb6a331d314e6573548a4540945208b5 </div>
<div style="display:none"> Gerrit-Change-Number: 14224 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Eric Wild <ewild@sysmocom.de> </div>