<p>laforge <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/13854">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  laforge: Looks good to me, approved
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">RAN_Emulation: Support for PS domain<br><br>So far, the RAN_Emulation only supported the CS domain, and not PS. Let's<br>change that so we can start having IuPS related tests.<br><br>Change-Id: I7ba4662e5a7ba31a2582b0c133b3140c8057678f<br>---<br>M library/RAN_Emulation.ttcnpp<br>1 file changed, 92 insertions(+), 14 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/library/RAN_Emulation.ttcnpp b/library/RAN_Emulation.ttcnpp</span><br><span>index 207adcd..891de09 100644</span><br><span>--- a/library/RAN_Emulation.ttcnpp</span><br><span>+++ b/library/RAN_Emulation.ttcnpp</span><br><span>@@ -101,6 +101,17 @@</span><br><span>   PDU_ML3_NW_MS           dtap</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+type record PDU_DTAP_PS_MO {</span><br><span style="color: hsl(120, 100%, 40%);">+   OCT1                    dlci optional,</span><br><span style="color: hsl(120, 100%, 40%);">+        boolean                 skip_seq_patching optional,</span><br><span style="color: hsl(120, 100%, 40%);">+   PDU_L3_MS_SGSN          dtap</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%);">+type record PDU_DTAP_PS_MT {</span><br><span style="color: hsl(120, 100%, 40%);">+       OCT1                    dlci optional,</span><br><span style="color: hsl(120, 100%, 40%);">+        PDU_L3_SGSN_MS          dtap</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> template PDU_DTAP_MT ts_PDU_DTAP_MT(template PDU_ML3_NW_MS dtap, template OCT1 dlci := omit) := {</span><br><span>       dlci := dlci,</span><br><span>        dtap := dtap</span><br><span>@@ -123,6 +134,29 @@</span><br><span>  dtap := dtap</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+template (value) PDU_DTAP_PS_MT ts_PDU_DTAP_PS_MT(template (value) PDU_L3_SGSN_MS dtap, template (omit) OCT1 dlci := omit) := {</span><br><span style="color: hsl(120, 100%, 40%);">+        dlci := dlci,</span><br><span style="color: hsl(120, 100%, 40%);">+ dtap := dtap</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 (value) PDU_DTAP_PS_MO ts_PDU_DTAP_PS_MO(template (value) PDU_L3_MS_SGSN dtap, template (value) OCT1 dlci := '00'O,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                 boolean skip_seq_patching := false) := {</span><br><span style="color: hsl(120, 100%, 40%);">+    dlci := dlci,</span><br><span style="color: hsl(120, 100%, 40%);">+ skip_seq_patching := skip_seq_patching,</span><br><span style="color: hsl(120, 100%, 40%);">+       dtap := dtap</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 PDU_DTAP_PS_MT tr_PDU_DTAP_PS_MT(template PDU_L3_SGSN_MS dtap, template OCT1 dlci := *) := {</span><br><span style="color: hsl(120, 100%, 40%);">+      dlci := dlci,</span><br><span style="color: hsl(120, 100%, 40%);">+ dtap := dtap</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 PDU_DTAP_PS_MO tr_PDU_DTAP_PS_MO(template PDU_L3_MS_SGSN dtap, template OCT1 dlci := *) := {</span><br><span style="color: hsl(120, 100%, 40%);">+      dlci := dlci,</span><br><span style="color: hsl(120, 100%, 40%);">+ skip_seq_patching := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+       dtap := dtap</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* port between individual per-connection components and this dispatcher */</span><br><span> type port RAN_Conn_PT message {</span><br><span>  inout</span><br><span>@@ -142,6 +176,7 @@</span><br><span> #endif</span><br><span>                /* direct DTAP messages from/to clients */</span><br><span>           PDU_DTAP_MO, PDU_DTAP_MT,</span><br><span style="color: hsl(120, 100%, 40%);">+             PDU_DTAP_PS_MO, PDU_DTAP_PS_MT,</span><br><span>              /* misc indications / requests between SCCP and client */</span><br><span>            RAN_Conn_Prim;</span><br><span> } with { extension "internal" };</span><br><span>@@ -562,24 +597,46 @@</span><br><span>                 var template (omit) OCT1 dlci := fake_dlci_from_sapi(sapi);</span><br><span>          if (g_ran_ops.role_ms) {</span><br><span>                     /* we are the MS, so any message to us must be MT */</span><br><span style="color: hsl(0, 100%, 40%);">-                    var PDU_DTAP_MT mt := {</span><br><span style="color: hsl(0, 100%, 40%);">-                         dlci := omit,</span><br><span style="color: hsl(0, 100%, 40%);">-                           dtap := dec_PDU_ML3_NW_MS(valueof(l3))</span><br><span style="color: hsl(0, 100%, 40%);">-                  };</span><br><span style="color: hsl(0, 100%, 40%);">-                      if (isvalue(dlci)) {</span><br><span style="color: hsl(0, 100%, 40%);">-                            mt.dlci := valueof(dlci)</span><br><span style="color: hsl(120, 100%, 40%);">+                      if (g_ran_ops.ps_domain) {</span><br><span style="color: hsl(120, 100%, 40%);">+                            var PDU_DTAP_PS_MT mt := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                    dlci := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                                 dtap := dec_PDU_L3_SGSN_MS(valueof(l3))</span><br><span style="color: hsl(120, 100%, 40%);">+                               };</span><br><span style="color: hsl(120, 100%, 40%);">+                            if (isvalue(dlci)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                  mt.dlci := valueof(dlci);</span><br><span style="color: hsl(120, 100%, 40%);">+                             }</span><br><span style="color: hsl(120, 100%, 40%);">+                             CLIENT.send(mt) to client;</span><br><span style="color: hsl(120, 100%, 40%);">+                    } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                              var PDU_DTAP_MT mt := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                       dlci := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                                 dtap := dec_PDU_ML3_NW_MS(valueof(l3))</span><br><span style="color: hsl(120, 100%, 40%);">+                                };</span><br><span style="color: hsl(120, 100%, 40%);">+                            if (isvalue(dlci)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                  mt.dlci := valueof(dlci)</span><br><span style="color: hsl(120, 100%, 40%);">+                              }</span><br><span style="color: hsl(120, 100%, 40%);">+                             CLIENT.send(mt) to client;</span><br><span>                   }</span><br><span style="color: hsl(0, 100%, 40%);">-                       CLIENT.send(mt) to client;</span><br><span>           } else {</span><br><span>                     /* we are the Network, so any message to us must be MO */</span><br><span style="color: hsl(0, 100%, 40%);">-                       var PDU_DTAP_MO mo := {</span><br><span style="color: hsl(0, 100%, 40%);">-                         dlci := omit,</span><br><span style="color: hsl(0, 100%, 40%);">-                           dtap := dec_PDU_ML3_MS_NW(valueof(l3))</span><br><span style="color: hsl(0, 100%, 40%);">-                  };</span><br><span style="color: hsl(0, 100%, 40%);">-                      if (isvalue(dlci)) {</span><br><span style="color: hsl(0, 100%, 40%);">-                            mo.dlci := valueof(dlci)</span><br><span style="color: hsl(120, 100%, 40%);">+                      if (g_ran_ops.ps_domain) {</span><br><span style="color: hsl(120, 100%, 40%);">+                            var PDU_DTAP_PS_MO mo := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                    dlci := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                                 dtap := dec_PDU_L3_MS_SGSN(valueof(l3))</span><br><span style="color: hsl(120, 100%, 40%);">+                               };</span><br><span style="color: hsl(120, 100%, 40%);">+                            if (isvalue(dlci)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                  mo.dlci := valueof(dlci);</span><br><span style="color: hsl(120, 100%, 40%);">+                             }</span><br><span style="color: hsl(120, 100%, 40%);">+                             CLIENT.send(mo) to client;</span><br><span style="color: hsl(120, 100%, 40%);">+                    } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                              var PDU_DTAP_MO mo := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                       dlci := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                                 dtap := dec_PDU_ML3_MS_NW(valueof(l3))</span><br><span style="color: hsl(120, 100%, 40%);">+                                };</span><br><span style="color: hsl(120, 100%, 40%);">+                            if (isvalue(dlci)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                  mo.dlci := valueof(dlci)</span><br><span style="color: hsl(120, 100%, 40%);">+                              }</span><br><span style="color: hsl(120, 100%, 40%);">+                             CLIENT.send(mo) to client;</span><br><span>                   }</span><br><span style="color: hsl(0, 100%, 40%);">-                       CLIENT.send(mo) to client;</span><br><span>           }</span><br><span>    }</span><br><span> }</span><br><span>@@ -904,6 +961,8 @@</span><br><span>                 var RANAP_Conn_Req creq;</span><br><span>             var RANAP_PDU ranap;</span><br><span>                 var RAN_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+             var PDU_DTAP_PS_MO ps_mo;</span><br><span style="color: hsl(120, 100%, 40%);">+             var PDU_DTAP_PS_MT ps_mt;</span><br><span> </span><br><span>                /* SCCP -> Client: UNIT-DATA (connectionless SCCP) from a BSC */</span><br><span>          [] RANAP.receive(RANAP_N_UNITDATA_ind:?) -> value rud_ind {</span><br><span>@@ -998,6 +1057,25 @@</span><br><span>                       }</span><br><span>                    }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+         [g_ran_ops.role_ms] CLIENT.receive(PDU_DTAP_PS_MO:?) -> value ps_mo sender vc_conn {</span><br><span style="color: hsl(120, 100%, 40%);">+                       var integer idx := f_idx_by_comp(vc_conn);</span><br><span style="color: hsl(120, 100%, 40%);">+                    /* convert from decoded DTAP to encoded DTAP */</span><br><span style="color: hsl(120, 100%, 40%);">+                       var octetstring l3_enc := enc_PDU_L3_MS_SGSN(ps_mo.dtap);</span><br><span style="color: hsl(120, 100%, 40%);">+                     /* patch correct L3 send sequence number N(SD) into l3_enc */</span><br><span style="color: hsl(120, 100%, 40%);">+                 if (ps_mo.skip_seq_patching == false) {</span><br><span style="color: hsl(120, 100%, 40%);">+                               //f_ML3_patch_seq(ConnectionTable[idx], ps_mo.dtap, l3_enc);</span><br><span style="color: hsl(120, 100%, 40%);">+                  }</span><br><span style="color: hsl(120, 100%, 40%);">+                     f_xmit_raw_l3(ConnectionTable[idx].sccp_conn_id, ps_mo.dlci, l3_enc);</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%);">+           [not g_ran_ops.role_ms] CLIENT.receive(PDU_DTAP_PS_MT:?) -> value ps_mt sender vc_conn {</span><br><span style="color: hsl(120, 100%, 40%);">+                   var integer idx := f_idx_by_comp(vc_conn);</span><br><span style="color: hsl(120, 100%, 40%);">+                    /* convert from decoded DTAP to encoded DTAP */</span><br><span style="color: hsl(120, 100%, 40%);">+                       var octetstring l3_enc := enc_PDU_L3_SGSN_MS(ps_mt.dtap);</span><br><span style="color: hsl(120, 100%, 40%);">+                     f_xmit_raw_l3(ConnectionTable[idx].sccp_conn_id, ps_mt.dlci, l3_enc);</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> #else</span><br><span>               [false] CLIENT.receive {}</span><br><span> #endif</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/13854">change 13854</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/c/osmo-ttcn3-hacks/+/13854"/><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-Change-Id: I7ba4662e5a7ba31a2582b0c133b3140c8057678f </div>
<div style="display:none"> Gerrit-Change-Number: 13854 </div>
<div style="display:none"> Gerrit-PatchSet: 5 </div>
<div style="display:none"> Gerrit-Owner: laforge <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: lynxis lazus <lynxis@fe80.eu> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>