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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Osmocom_Gb_Types: Fix tons of template restriction warnings<br><br>Change-Id: I3da153ce5e83b231501e74b958fcac9f10c00849<br>---<br>M gbproxy/GBProxy_Tests.ttcn<br>M library/BSSGP_Emulation.ttcnpp<br>M library/Osmocom_Gb_Types.ttcn<br>M library/RAW_NS.ttcnpp<br>4 files changed, 275 insertions(+), 143 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/gbproxy/GBProxy_Tests.ttcn b/gbproxy/GBProxy_Tests.ttcn</span><br><span>index ad8874c..0f3b4cb 100644</span><br><span>--- a/gbproxy/GBProxy_Tests.ttcn</span><br><span>+++ b/gbproxy/GBProxy_Tests.ttcn</span><br><span>@@ -1105,7 +1105,7 @@</span><br><span>                       ts_BSSGP_DL_UD(g_pars.tlli, payload, omit, ts_BSSGP_IMSI(g_pars.imsi));</span><br><span>              /* we cannot use pdu_tx as there are some subtle differences in the length field :/ */</span><br><span>               var template (present) PDU_BSSGP pdu_rx :=</span><br><span style="color: hsl(0, 100%, 40%);">-                      tr_BSSGP_DL_UD(g_pars.tlli, payload, tr_BSSGP_IMSI(g_pars.imsi));</span><br><span style="color: hsl(120, 100%, 40%);">+                     tr_BSSGP_DL_UD(g_pars.tlli, payload, ts_BSSGP_IMSI(g_pars.imsi));</span><br><span> </span><br><span>                log("DL-UNITDATA(payload_size=", i);</span><br><span>               f_sgsn2pcu(pdu_tx, pdu_rx);</span><br><span>@@ -2691,11 +2691,11 @@</span><br><span>        f_init();</span><br><span>    f_global_init_ptp();</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        var template (value) PDU_BSSGP pdu_tx := t_BVC_FC_BVC(10240, 2000, 1024, 1000, '01'O);</span><br><span style="color: hsl(120, 100%, 40%);">+        var template (value) PDU_BSSGP pdu_tx := ts_BVC_FC_BVC(10240, 2000, 1024, 1000, '01'O);</span><br><span>      /* we cannot use pdu_tx as there are some subtle differences in the length field :/ */</span><br><span>       var template (present) PDU_BSSGP pdu_rx := tr_BVC_FC_BVC(10240, 2000, 1024, 1000, '01'O);</span><br><span style="color: hsl(0, 100%, 40%);">-       var template (omit) PDU_BSSGP ack_tx :=</span><br><span style="color: hsl(0, 100%, 40%);">-         t_BVC_FC_BVC_ACK(pdu_tx.pDU_BSSGP_FLOW_CONTROL_BVC.tag.unstructured_Value);</span><br><span style="color: hsl(120, 100%, 40%);">+   var template (value) PDU_BSSGP ack_tx :=</span><br><span style="color: hsl(120, 100%, 40%);">+              ts_BVC_FC_BVC_ACK(pdu_tx.pDU_BSSGP_FLOW_CONTROL_BVC.tag.unstructured_Value);</span><br><span> </span><br><span>     /* Send a FC-BVC from BSS to gbproxy, expect an ACK in response */</span><br><span>   G_PCU[0].send(pdu_tx);</span><br><span>@@ -3030,11 +3030,11 @@</span><br><span> </span><br><span>         cont_tx := ts_RAN_Information_Error_RIM_Container(ts_RIM_Application_Identity(RIM_APP_ID_NACC),</span><br><span>                                                        ts_BSSGP_CAUSE(BSSGP_CAUSE_EQUIMENT_FAILURE),</span><br><span style="color: hsl(0, 100%, 40%);">-                                                   omit, valueof(t_BVC_UNBLOCK(23)));</span><br><span style="color: hsl(120, 100%, 40%);">+                                                    omit, valueof(ts_BVC_UNBLOCK(23)));</span><br><span> </span><br><span>    cont_rx := tr_RAN_Information_Error_RIM_Container(tr_RIM_Application_Identity(RIM_APP_ID_NACC),</span><br><span style="color: hsl(0, 100%, 40%);">-                                                   t_BSSGP_CAUSE(BSSGP_CAUSE_EQUIMENT_FAILURE),</span><br><span style="color: hsl(0, 100%, 40%);">-                                                    omit, enc_PDU_BSSGP(valueof(t_BVC_UNBLOCK(23))));</span><br><span style="color: hsl(120, 100%, 40%);">+                                                     ts_BSSGP_CAUSE(BSSGP_CAUSE_EQUIMENT_FAILURE),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                         omit, enc_PDU_BSSGP(valueof(tr_BVC_UNBLOCK(23))));</span><br><span> </span><br><span>     f_rim_pcu2sgsn(ts_PDU_BSSGP_RAN_INFORMATION_ERROR(dst := ts_RIM_Routing_Information(RIM_ADDR_GERAN_CELL_ID, ra_sgsn),</span><br><span>                                                          src := ts_RIM_Routing_Information(RIM_ADDR_GERAN_CELL_ID, ra_pcu),</span><br><span>diff --git a/library/BSSGP_Emulation.ttcnpp b/library/BSSGP_Emulation.ttcnpp</span><br><span>index 4b93a26..1f32cc2 100644</span><br><span>--- a/library/BSSGP_Emulation.ttcnpp</span><br><span>+++ b/library/BSSGP_Emulation.ttcnpp</span><br><span>@@ -439,16 +439,16 @@</span><br><span>    }</span><br><span> </span><br><span>        /* any BLOCK or UNBLOCK for the SIGNALING BVCI are illegal */</span><br><span style="color: hsl(0, 100%, 40%);">-   [] BSCP.receive(f_BnsUdInd(t_BVC_BLOCK(0, ?), 0)) -> value udi {</span><br><span style="color: hsl(120, 100%, 40%);">+   [] BSCP.receive(f_BnsUdInd(tr_BVC_BLOCK(0, ?), 0)) -> value udi {</span><br><span>                 setverdict(fail, "Rx BVC-BLOCK illegal for BVCI=0: ", udi);</span><br><span>        }</span><br><span style="color: hsl(0, 100%, 40%);">-       [] BSCP.receive(f_BnsUdInd(t_BVC_UNBLOCK(0), 0)) -> value udi {</span><br><span style="color: hsl(120, 100%, 40%);">+    [] BSCP.receive(f_BnsUdInd(tr_BVC_UNBLOCK(0), 0)) -> value udi {</span><br><span>          setverdict(fail, "Rx BVC-UNBLOCK illegal for BVCI=0: ", udi);</span><br><span>      }</span><br><span style="color: hsl(0, 100%, 40%);">-       [] BSCP.receive(f_BnsUdInd(t_BVC_BLOCK_ACK(0), 0)) -> value udi {</span><br><span style="color: hsl(120, 100%, 40%);">+  [] BSCP.receive(f_BnsUdInd(tr_BVC_BLOCK_ACK(0), 0)) -> value udi {</span><br><span>                setverdict(fail, "Rx BVC-BLOCK-ACK illegal for BVCI=0: ", udi);</span><br><span>    }</span><br><span style="color: hsl(0, 100%, 40%);">-       [] BSCP.receive(f_BnsUdInd(t_BVC_UNBLOCK_ACK(0), 0)) -> value udi {</span><br><span style="color: hsl(120, 100%, 40%);">+        [] BSCP.receive(f_BnsUdInd(tr_BVC_UNBLOCK_ACK(0), 0)) -> value udi {</span><br><span>              setverdict(fail, "Rx BVC-UNBLOCK-ACK illegal for BVCI=0: ", udi);</span><br><span>  }</span><br><span> </span><br><span>@@ -495,21 +495,21 @@</span><br><span>        }</span><br><span> </span><br><span>        /* any BLOCK or UNBLOCK for the SIGNALING BVCI are illegal */</span><br><span style="color: hsl(0, 100%, 40%);">-   [] BSCP.receive(f_BnsUdInd(t_BVC_BLOCK(0, ?), 0)) -> value udi {</span><br><span style="color: hsl(120, 100%, 40%);">+   [] BSCP.receive(f_BnsUdInd(tr_BVC_BLOCK(0, ?), 0)) -> value udi {</span><br><span>                 setverdict(fail, "Rx BVC-BLOCK illegal for BVCI=0: ", udi);</span><br><span>        }</span><br><span style="color: hsl(0, 100%, 40%);">-       [] BSCP.receive(f_BnsUdInd(t_BVC_UNBLOCK(0), 0)) -> value udi {</span><br><span style="color: hsl(120, 100%, 40%);">+    [] BSCP.receive(f_BnsUdInd(tr_BVC_UNBLOCK(0), 0)) -> value udi {</span><br><span>          setverdict(fail, "Rx BVC-UNBLOCK illegal for BVCI=0: ", udi);</span><br><span>      }</span><br><span style="color: hsl(0, 100%, 40%);">-       [] BSCP.receive(f_BnsUdInd(t_BVC_BLOCK_ACK(0), 0)) -> value udi {</span><br><span style="color: hsl(120, 100%, 40%);">+  [] BSCP.receive(f_BnsUdInd(tr_BVC_BLOCK_ACK(0), 0)) -> value udi {</span><br><span>                setverdict(fail, "Rx BVC-BLOCK-ACK illegal for BVCI=0: ", udi);</span><br><span>    }</span><br><span style="color: hsl(0, 100%, 40%);">-       [] BSCP.receive(f_BnsUdInd(t_BVC_UNBLOCK_ACK(0), 0)) -> value udi {</span><br><span style="color: hsl(120, 100%, 40%);">+        [] BSCP.receive(f_BnsUdInd(tr_BVC_UNBLOCK_ACK(0), 0)) -> value udi {</span><br><span>              setverdict(fail, "Rx BVC-UNBLOCK-ACK illegal for BVCI=0: ", udi);</span><br><span>  }</span><br><span> </span><br><span>        /* Respond to BLOCK for wrong BVCI */</span><br><span style="color: hsl(0, 100%, 40%);">-   [] BSCP.receive(f_BnsUdInd(t_BVC_BLOCK(?, ?), 0)) -> value udi {</span><br><span style="color: hsl(120, 100%, 40%);">+   [] BSCP.receive(f_BnsUdInd(tr_BVC_BLOCK(?, ?), 0)) -> value udi {</span><br><span>                 setverdict(fail, "Rx BVC-BLOCK for unknown BVCI");</span><br><span>                 BSCP.send(f_BnsUdReq(ts_BSSGP_STATUS(0, BSSGP_CAUSE_BVCI_UNKNOWN, udi.bssgp), 0, 0));</span><br><span>        }</span><br><span>@@ -1015,13 +1015,13 @@</span><br><span> }</span><br><span> </span><br><span> private function f_ptp_sendUnblock() runs on BSSGP_BVC_CT {</span><br><span style="color: hsl(0, 100%, 40%);">-     BVC.send(ts_ptp_BnsUdReq(t_BVC_UNBLOCK(g_cfg.bvci), 0, g_bvc_lsp));</span><br><span style="color: hsl(120, 100%, 40%);">+   BVC.send(ts_ptp_BnsUdReq(ts_BVC_UNBLOCK(g_cfg.bvci), 0, g_bvc_lsp));</span><br><span>         g_t1_waits_for_block_ack := false;</span><br><span>   g_T1.start;</span><br><span> }</span><br><span> </span><br><span> private function f_ptp_sendBlock(BssgpCause cause) runs on BSSGP_BVC_CT {</span><br><span style="color: hsl(0, 100%, 40%);">-       BVC.send(ts_ptp_BnsUdReq(t_BVC_BLOCK(g_cfg.bvci, cause), 0, g_bvc_lsp));</span><br><span style="color: hsl(120, 100%, 40%);">+      BVC.send(ts_ptp_BnsUdReq(ts_BVC_BLOCK(g_cfg.bvci, cause), 0, g_bvc_lsp));</span><br><span>    g_t1_waits_for_block_ack := true;</span><br><span>    g_T1.start;</span><br><span>  g_last_block_cause := cause;</span><br><span>@@ -1055,14 +1055,14 @@</span><br><span> private altstep as_ptp_blocked() runs on BSSGP_BVC_CT {</span><br><span>    var NsUnitdataIndication udi;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       [g_T1.running and not g_t1_waits_for_block_ack] BVC.receive(tr_ptp_BnsUdInd(t_BVC_UNBLOCK_ACK(g_cfg.bvci), 0)) {</span><br><span style="color: hsl(120, 100%, 40%);">+      [g_T1.running and not g_t1_waits_for_block_ack] BVC.receive(tr_ptp_BnsUdInd(tr_BVC_UNBLOCK_ACK(g_cfg.bvci), 0)) {</span><br><span>            g_T1.stop;</span><br><span>           f_ptp_change_state(BVC_S_UNBLOCKED);</span><br><span>         }</span><br><span> </span><br><span>        /* Inbound  BVC-UNBLOCK from peer */</span><br><span style="color: hsl(0, 100%, 40%);">-    [g_sgsn_role] BVC.receive(tr_ptp_BnsUdInd(t_BVC_UNBLOCK(g_cfg.bvci), 0)) {</span><br><span style="color: hsl(0, 100%, 40%);">-              BVC.send(ts_ptp_BnsUdReq(t_BVC_UNBLOCK_ACK(g_cfg.bvci), 0, g_bvc_lsp));</span><br><span style="color: hsl(120, 100%, 40%);">+       [g_sgsn_role] BVC.receive(tr_ptp_BnsUdInd(tr_BVC_UNBLOCK(g_cfg.bvci), 0)) {</span><br><span style="color: hsl(120, 100%, 40%);">+           BVC.send(ts_ptp_BnsUdReq(ts_BVC_UNBLOCK_ACK(g_cfg.bvci), 0, g_bvc_lsp));</span><br><span>             f_ptp_change_state(BVC_S_UNBLOCKED);</span><br><span>         }</span><br><span> </span><br><span>@@ -1104,17 +1104,17 @@</span><br><span> #endif</span><br><span> </span><br><span>        /* bogus unblock, just respond with ACK */</span><br><span style="color: hsl(0, 100%, 40%);">-      [] BVC.receive(tr_ptp_BnsUdInd(t_BVC_UNBLOCK(g_cfg.bvci), 0)) -> value udi {</span><br><span style="color: hsl(0, 100%, 40%);">-         BVC.send(ts_ptp_BnsUdReq(t_BVC_UNBLOCK_ACK(g_cfg.bvci), 0, g_bvc_lsp));</span><br><span style="color: hsl(120, 100%, 40%);">+       [] BVC.receive(tr_ptp_BnsUdInd(tr_BVC_UNBLOCK(g_cfg.bvci), 0)) -> value udi {</span><br><span style="color: hsl(120, 100%, 40%);">+              BVC.send(ts_ptp_BnsUdReq(ts_BVC_UNBLOCK_ACK(g_cfg.bvci), 0, g_bvc_lsp));</span><br><span>     }</span><br><span>    /* Respond to BLOCK with BLOCK-ACK + change state */</span><br><span style="color: hsl(0, 100%, 40%);">-    [] BVC.receive(tr_ptp_BnsUdInd(t_BVC_BLOCK(g_cfg.bvci, ?), 0)) -> value udi {</span><br><span style="color: hsl(0, 100%, 40%);">-                BVC.send(ts_ptp_BnsUdReq(t_BVC_BLOCK_ACK(g_cfg.bvci), 0, g_bvc_lsp));</span><br><span style="color: hsl(120, 100%, 40%);">+ [] BVC.receive(tr_ptp_BnsUdInd(tr_BVC_BLOCK(g_cfg.bvci, ?), 0)) -> value udi {</span><br><span style="color: hsl(120, 100%, 40%);">+             BVC.send(ts_ptp_BnsUdReq(ts_BVC_BLOCK_ACK(g_cfg.bvci), 0, g_bvc_lsp));</span><br><span>               g_T1.stop;</span><br><span>           f_ptp_change_state(BVC_S_BLOCKED);</span><br><span>   }</span><br><span>    /* BLOCK-ACK before T1 timeout: mark as blocked */</span><br><span style="color: hsl(0, 100%, 40%);">-      [g_T1.running and g_t1_waits_for_block_ack] BVC.receive(tr_ptp_BnsUdInd(t_BVC_BLOCK_ACK(g_cfg.bvci), 0)) -> value udi {</span><br><span style="color: hsl(120, 100%, 40%);">+    [g_T1.running and g_t1_waits_for_block_ack] BVC.receive(tr_ptp_BnsUdInd(tr_BVC_BLOCK_ACK(g_cfg.bvci), 0)) -> value udi {</span><br><span>          g_T1.stop;</span><br><span>           f_ptp_change_state(BVC_S_BLOCKED);</span><br><span>   }</span><br><span>@@ -1134,11 +1134,11 @@</span><br><span>          } else {</span><br><span>                     /* simply acknowledge all per-BVC Flow Control Messages */</span><br><span>                   var OCT1 tag := udi.bssgp.pDU_BSSGP_FLOW_CONTROL_BVC.tag.unstructured_Value;</span><br><span style="color: hsl(0, 100%, 40%);">-                    BVC.send(ts_ptp_BnsUdReq(t_BVC_FC_BVC_ACK(tag), g_cfg.bvci, g_bvc_lsp));</span><br><span style="color: hsl(120, 100%, 40%);">+                      BVC.send(ts_ptp_BnsUdReq(ts_BVC_FC_BVC_ACK(tag), g_cfg.bvci, g_bvc_lsp));</span><br><span>            }</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   [not g_sgsn_role] BVC.receive(tr_ptp_BnsUdInd(t_BVC_FC_BVC_ACK(?), g_cfg.bvci)) -> value udi {</span><br><span style="color: hsl(120, 100%, 40%);">+     [not g_sgsn_role] BVC.receive(tr_ptp_BnsUdInd(tr_BVC_FC_BVC_ACK(?), g_cfg.bvci)) -> value udi {</span><br><span>           if (GLOBAL.checkstate("Connected")) {</span><br><span>                      GLOBAL.send(udi.bssgp);</span><br><span>              } else {</span><br><span>diff --git a/library/Osmocom_Gb_Types.ttcn b/library/Osmocom_Gb_Types.ttcn</span><br><span>index 82f2aca..687a073 100644</span><br><span>--- a/library/Osmocom_Gb_Types.ttcn</span><br><span>+++ b/library/Osmocom_Gb_Types.ttcn</span><br><span>@@ -816,7 +816,7 @@</span><br><span>              BSSGP_CAUSE_NOT_ALL_REQUESTED_PFC_CREATED       ('3c'H)</span><br><span>      } with { variant "FIELDLENGTH(8)" };</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      private function t_FLUSH_ACTION(template OCT1 act)</span><br><span style="color: hsl(120, 100%, 40%);">+    private function tr_FLUSH_ACTION(template OCT1 act)</span><br><span>  return template Flush_Action {</span><br><span>               var template Flush_Action r;</span><br><span>                 if (istemplatekind(act, "omit")) {</span><br><span>@@ -835,7 +835,16 @@</span><br><span>                  return r;</span><br><span>            }</span><br><span>    }</span><br><span style="color: hsl(0, 100%, 40%);">-       private function t_NO_OCT_AFF(template integer oct_aff)</span><br><span style="color: hsl(120, 100%, 40%);">+       template (value) Flush_Action ts_FLUSH_ACTION(template (value) OCT1 act) := {</span><br><span style="color: hsl(120, 100%, 40%);">+         iEI := '0C'O,</span><br><span style="color: hsl(120, 100%, 40%);">+         ext := '1'B,</span><br><span style="color: hsl(120, 100%, 40%);">+          lengthIndicator := {</span><br><span style="color: hsl(120, 100%, 40%);">+                  length1 := 1</span><br><span style="color: hsl(120, 100%, 40%);">+          },</span><br><span style="color: hsl(120, 100%, 40%);">+            actionValue := act</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%);">+   private function tr_NO_OCT_AFF(template integer oct_aff)</span><br><span>     return template Number_of_octets_affected {</span><br><span>          var template Number_of_octets_affected r;</span><br><span>            if (istemplatekind(oct_aff, "omit")) {</span><br><span>@@ -854,8 +863,16 @@</span><br><span>                      return r;</span><br><span>            }</span><br><span>    }</span><br><span style="color: hsl(120, 100%, 40%);">+     template (value) Number_of_octets_affected ts_NO_OCT_AFF(template (value) integer oct_aff) := {</span><br><span style="color: hsl(120, 100%, 40%);">+               iEI := '25'O,</span><br><span style="color: hsl(120, 100%, 40%);">+         ext := '1'B,</span><br><span style="color: hsl(120, 100%, 40%);">+          lengthIndicator := {</span><br><span style="color: hsl(120, 100%, 40%);">+                  length1 := 3</span><br><span style="color: hsl(120, 100%, 40%);">+          },</span><br><span style="color: hsl(120, 100%, 40%);">+            number_of_octets_transfered_or_deleted :=  int2oct(valueof(oct_aff), 3)</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   private function t_LLC_FRAMES_DISCARDED(template integer frames_discarded)</span><br><span style="color: hsl(120, 100%, 40%);">+    private function tr_LLC_FRAMES_DISCARDED(template integer frames_discarded)</span><br><span>  return template LLC_Frames_Discarded {</span><br><span>               var template LLC_Frames_Discarded r;</span><br><span>                 if (istemplatekind(frames_discarded, "omit")) {</span><br><span>@@ -874,8 +891,17 @@</span><br><span>                     return r;</span><br><span>            }</span><br><span>    }</span><br><span style="color: hsl(120, 100%, 40%);">+     template (value) LLC_Frames_Discarded ts_LLC_FRAMES_DISCARDED(template (value) integer frames_discarded) := {</span><br><span style="color: hsl(120, 100%, 40%);">+         iEI := '0F'O,</span><br><span style="color: hsl(120, 100%, 40%);">+         ext := '1'B,</span><br><span style="color: hsl(120, 100%, 40%);">+          lengthIndicator := {</span><br><span style="color: hsl(120, 100%, 40%);">+                  length1 := 1</span><br><span style="color: hsl(120, 100%, 40%);">+          },</span><br><span style="color: hsl(120, 100%, 40%);">+            number_of_frames_discarded := int2hex(valueof(frames_discarded), 2)</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   private function t_BSSGP_BVCI(template BssgpBvci bvci)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      private function tr_BSSGP_BVCI(template BssgpBvci bvci)</span><br><span>      return template BVCI {</span><br><span>               var template BVCI r;</span><br><span>                 if (istemplatekind(bvci, "omit")) {</span><br><span>@@ -894,7 +920,24 @@</span><br><span>                         return r;</span><br><span>            }</span><br><span>    }</span><br><span style="color: hsl(0, 100%, 40%);">-       private function  t_BSSGP_NSEI(template Nsei nsei)</span><br><span style="color: hsl(120, 100%, 40%);">+    template (value) BVCI ts_BSSGP_BVCI(template (value) BssgpBvci bvci) := {</span><br><span style="color: hsl(120, 100%, 40%);">+             iEI := '04'O,</span><br><span style="color: hsl(120, 100%, 40%);">+         ext := '1'B,</span><br><span style="color: hsl(120, 100%, 40%);">+          lengthIndicator := {</span><br><span style="color: hsl(120, 100%, 40%);">+                  length1 := 2</span><br><span style="color: hsl(120, 100%, 40%);">+          },</span><br><span style="color: hsl(120, 100%, 40%);">+            unstructured_value := int2oct(valueof(bvci), 2)</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     private function f_ts_BSSGP_BVCI(template (omit) BssgpBvci bvci)</span><br><span style="color: hsl(120, 100%, 40%);">+      return template (omit) BVCI {</span><br><span style="color: hsl(120, 100%, 40%);">+         if (istemplatekind(bvci, "omit")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                 return omit;</span><br><span style="color: hsl(120, 100%, 40%);">+          } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      return ts_BSSGP_BVCI(valueof(bvci));</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%);">+   private function t_BSSGP_NSEI(template Nsei nsei)</span><br><span>    return template NSEI_BSSGP {</span><br><span>                 var template NSEI_BSSGP r;</span><br><span>           if (istemplatekind(nsei, "omit")) {</span><br><span>@@ -913,6 +956,22 @@</span><br><span>                         return r;</span><br><span>            }</span><br><span>    }</span><br><span style="color: hsl(120, 100%, 40%);">+     template (value) NSEI_BSSGP ts_BSSGP_NSEI(template (value) Nsei nsei) := {</span><br><span style="color: hsl(120, 100%, 40%);">+            iEI:= '3E'O,</span><br><span style="color: hsl(120, 100%, 40%);">+          ext := '1'B,</span><br><span style="color: hsl(120, 100%, 40%);">+          lengthIndicator := {</span><br><span style="color: hsl(120, 100%, 40%);">+                  length1 := 2</span><br><span style="color: hsl(120, 100%, 40%);">+          },</span><br><span style="color: hsl(120, 100%, 40%);">+            nSEI := int2oct(valueof(nsei), 2)</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+     private function f_ts_BSSGP_NSEI(template (omit) Nsei nsei)</span><br><span style="color: hsl(120, 100%, 40%);">+   return template (omit) NSEI_BSSGP {</span><br><span style="color: hsl(120, 100%, 40%);">+           if (istemplatekind(nsei, "omit")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                 return omit;</span><br><span style="color: hsl(120, 100%, 40%);">+          } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      return ts_BSSGP_NSEI(valueof(nsei));</span><br><span style="color: hsl(120, 100%, 40%);">+          }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span> </span><br><span>        template (value) TLLI_BSSGP ts_BSSGP_TLLI(template (value) GprsTlli tlli) := {</span><br><span>               iEI := '1F'O,</span><br><span>@@ -922,7 +981,7 @@</span><br><span>          },</span><br><span>           tLLI_Value := tlli</span><br><span>   }</span><br><span style="color: hsl(0, 100%, 40%);">-       template TLLI_BSSGP tr_BSSGP_TLLI(template GprsTlli tlli) := {</span><br><span style="color: hsl(120, 100%, 40%);">+        template (present) TLLI_BSSGP tr_BSSGP_TLLI(template (present) GprsTlli tlli) := {</span><br><span>           iEI := '1F'O,</span><br><span>                ext := '1'B,</span><br><span>                 lengthIndicator := {</span><br><span>@@ -964,7 +1023,7 @@</span><br><span>          suspend_Reference_Number_value := susp_ref</span><br><span>   }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   template IMSI_BSSGP tr_BSSGP_IMSI(template hexstring imsi) := {</span><br><span style="color: hsl(120, 100%, 40%);">+       template (present) IMSI_BSSGP tr_BSSGP_IMSI(template (present) hexstring imsi) := {</span><br><span>          iEI := '0D'O,</span><br><span>                ext := '1'B,</span><br><span>                 lengthIndicator := ?,</span><br><span>@@ -973,7 +1032,7 @@</span><br><span>                 digits := imsi</span><br><span>       }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   template IMSI_BSSGP ts_BSSGP_IMSI(hexstring imsi) := {</span><br><span style="color: hsl(120, 100%, 40%);">+        template (value) IMSI_BSSGP ts_BSSGP_IMSI(hexstring imsi) := {</span><br><span>               iEI := '0D'O,</span><br><span>                ext := '1'B,</span><br><span>                 lengthIndicator := { length1 := 0 /* overwritten */ },</span><br><span>@@ -1066,7 +1125,7 @@</span><br><span>               }</span><br><span>            return ret;</span><br><span>  }</span><br><span style="color: hsl(0, 100%, 40%);">-       function t_BSSGP_CAUSE(template BssgpCause cause) return template Cause_BSSGP {</span><br><span style="color: hsl(120, 100%, 40%);">+       function tr_BSSGP_CAUSE(template BssgpCause cause) return template Cause_BSSGP {</span><br><span>             var template Cause_BSSGP ret;</span><br><span>                ret.iEI := '07'O;</span><br><span>            ret.ext := '1'B;</span><br><span>@@ -1079,7 +1138,7 @@</span><br><span>             return ret;</span><br><span>  }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   function t_BSSGP_IE_CellId(template BssgpCellId cid) return template Cell_Identifier {</span><br><span style="color: hsl(120, 100%, 40%);">+        function tr_BSSGP_IE_CellId(template BssgpCellId cid) return template Cell_Identifier {</span><br><span>              var template Cell_Identifier ret := {</span><br><span>                        iEI := '08'O,</span><br><span>                        ext := '1'B,</span><br><span>@@ -1122,6 +1181,27 @@</span><br><span>                }</span><br><span>            return ret;</span><br><span>  }</span><br><span style="color: hsl(120, 100%, 40%);">+     template (value) Cell_Identifier ts_BSSGP_IE_CellId(template (value) BssgpCellId cid) := {</span><br><span style="color: hsl(120, 100%, 40%);">+            iEI := '08'O,</span><br><span style="color: hsl(120, 100%, 40%);">+         ext := '1'B,</span><br><span style="color: hsl(120, 100%, 40%);">+          lengthIndicator := { length1 := 8 },</span><br><span style="color: hsl(120, 100%, 40%);">+          mccDigit1 := cid.ra_id.lai.mcc_mnc[0],</span><br><span style="color: hsl(120, 100%, 40%);">+                mccDigit2 := cid.ra_id.lai.mcc_mnc[1],</span><br><span style="color: hsl(120, 100%, 40%);">+                mccDigit3 := cid.ra_id.lai.mcc_mnc[2],</span><br><span style="color: hsl(120, 100%, 40%);">+                mncDigit3 := cid.ra_id.lai.mcc_mnc[3],</span><br><span style="color: hsl(120, 100%, 40%);">+                mncDigit1 := cid.ra_id.lai.mcc_mnc[4],</span><br><span style="color: hsl(120, 100%, 40%);">+                mncDigit2 := cid.ra_id.lai.mcc_mnc[5],</span><br><span style="color: hsl(120, 100%, 40%);">+                lac := int2oct(valueof(cid.ra_id.lai.lac), 2),</span><br><span style="color: hsl(120, 100%, 40%);">+                rac := int2oct(valueof(cid.ra_id.rac), 1),</span><br><span style="color: hsl(120, 100%, 40%);">+            cI_value := int2oct(valueof(cid.cell_id), 2)</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span style="color: hsl(120, 100%, 40%);">+     function f_ts_BSSGP_IE_CellId(template (omit) BssgpCellId cid) return template (omit) Cell_Identifier {</span><br><span style="color: hsl(120, 100%, 40%);">+               if (istemplatekind(cid, "omit")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                  return omit;</span><br><span style="color: hsl(120, 100%, 40%);">+          } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      return ts_BSSGP_IE_CellId(valueof(cid));</span><br><span style="color: hsl(120, 100%, 40%);">+              }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span> </span><br><span>        template (value) Tag ts_BSSGP_IE_Tag(OCT1 tag) := {</span><br><span>          iEI := '1E'O,</span><br><span>@@ -1161,12 +1241,12 @@</span><br><span> </span><br><span>  /* 10.4.12 */</span><br><span>        template PDU_BSSGP ts_BVC_RESET(BssgpCause cause, BssgpBvci bvci,</span><br><span style="color: hsl(0, 100%, 40%);">-                                       template BssgpCellId cell_id) := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                    template (omit) BssgpCellId cell_id) := {</span><br><span>            pDU_BSSGP_BVC_RESET := {</span><br><span>                     bssgpPduType := '22'O,</span><br><span style="color: hsl(0, 100%, 40%);">-                  bVCI := t_BSSGP_BVCI(bvci),</span><br><span style="color: hsl(120, 100%, 40%);">+                   bVCI := ts_BSSGP_BVCI(bvci),</span><br><span>                         cause := ts_BSSGP_CAUSE(cause),</span><br><span style="color: hsl(0, 100%, 40%);">-                 cell_Identifier := t_BSSGP_IE_CellId(cell_id),</span><br><span style="color: hsl(120, 100%, 40%);">+                        cell_Identifier := f_ts_BSSGP_IE_CellId(cell_id),</span><br><span>                    feature_bitmap := omit,</span><br><span>                      extended_Feature_Bitmap := omit</span><br><span>              }</span><br><span>@@ -1175,20 +1255,20 @@</span><br><span>                                  template BssgpCellId cell_id) := {</span><br><span>           pDU_BSSGP_BVC_RESET := {</span><br><span>                     bssgpPduType := '22'O,</span><br><span style="color: hsl(0, 100%, 40%);">-                  bVCI := t_BSSGP_BVCI(bvci),</span><br><span style="color: hsl(0, 100%, 40%);">-                     cause := t_BSSGP_CAUSE(cause),</span><br><span style="color: hsl(0, 100%, 40%);">-                  cell_Identifier := t_BSSGP_IE_CellId(cell_id),</span><br><span style="color: hsl(120, 100%, 40%);">+                        bVCI := tr_BSSGP_BVCI(bvci),</span><br><span style="color: hsl(120, 100%, 40%);">+                  cause := tr_BSSGP_CAUSE(cause),</span><br><span style="color: hsl(120, 100%, 40%);">+                       cell_Identifier := tr_BSSGP_IE_CellId(cell_id),</span><br><span>                      feature_bitmap := *,</span><br><span>                         extended_Feature_Bitmap := *</span><br><span>                 }</span><br><span>    }</span><br><span> </span><br><span>        /* 10.4.13 */</span><br><span style="color: hsl(0, 100%, 40%);">-   template PDU_BSSGP ts_BVC_RESET_ACK(BssgpBvci bvci, template BssgpCellId cell_id) := {</span><br><span style="color: hsl(120, 100%, 40%);">+        template PDU_BSSGP ts_BVC_RESET_ACK(BssgpBvci bvci, template (omit) BssgpCellId cell_id) := {</span><br><span>                pDU_BSSGP_BVC_RESET_ACK := {</span><br><span>                         bssgpPduType := '23'O,</span><br><span style="color: hsl(0, 100%, 40%);">-                  bVCI := t_BSSGP_BVCI(bvci),</span><br><span style="color: hsl(0, 100%, 40%);">-                     cell_Identifier := t_BSSGP_IE_CellId(cell_id),</span><br><span style="color: hsl(120, 100%, 40%);">+                        bVCI := ts_BSSGP_BVCI(bvci),</span><br><span style="color: hsl(120, 100%, 40%);">+                  cell_Identifier := f_ts_BSSGP_IE_CellId(cell_id),</span><br><span>                    feature_bitmap := omit,</span><br><span>                      extended_Feature_Bitmap := omit</span><br><span>              }</span><br><span>@@ -1196,8 +1276,8 @@</span><br><span>    template PDU_BSSGP tr_BVC_RESET_ACK(template BssgpBvci bvci, template BssgpCellId cell_id) := {</span><br><span>              pDU_BSSGP_BVC_RESET_ACK := {</span><br><span>                         bssgpPduType := '23'O,</span><br><span style="color: hsl(0, 100%, 40%);">-                  bVCI := t_BSSGP_BVCI(bvci),</span><br><span style="color: hsl(0, 100%, 40%);">-                     cell_Identifier := t_BSSGP_IE_CellId(cell_id),</span><br><span style="color: hsl(120, 100%, 40%);">+                        bVCI := tr_BSSGP_BVCI(bvci),</span><br><span style="color: hsl(120, 100%, 40%);">+                  cell_Identifier := tr_BSSGP_IE_CellId(cell_id),</span><br><span>                      feature_bitmap := *,</span><br><span>                         extended_Feature_Bitmap := *</span><br><span>                 }</span><br><span>@@ -1205,40 +1285,67 @@</span><br><span> </span><br><span> </span><br><span>  /* 10.4.10 */</span><br><span style="color: hsl(0, 100%, 40%);">-   template PDU_BSSGP t_BVC_UNBLOCK(template BssgpBvci bvci) := {</span><br><span style="color: hsl(120, 100%, 40%);">+        template (present) PDU_BSSGP tr_BVC_UNBLOCK(template (present) BssgpBvci bvci) := {</span><br><span>          pDU_BSSGP_BVC_UNBLOCK := {</span><br><span>                   bssgpPduType := '24'O,</span><br><span style="color: hsl(0, 100%, 40%);">-                  bVCI := t_BSSGP_BVCI(bvci)</span><br><span style="color: hsl(120, 100%, 40%);">+                    bVCI := tr_BSSGP_BVCI(bvci)</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_BSSGP ts_BVC_UNBLOCK(template (value) BssgpBvci bvci) := {</span><br><span style="color: hsl(120, 100%, 40%);">+               pDU_BSSGP_BVC_UNBLOCK := {</span><br><span style="color: hsl(120, 100%, 40%);">+                    bssgpPduType := '24'O,</span><br><span style="color: hsl(120, 100%, 40%);">+                        bVCI := ts_BSSGP_BVCI(bvci)</span><br><span>          }</span><br><span>    }</span><br><span> </span><br><span>        /* 10.4.11 */</span><br><span style="color: hsl(0, 100%, 40%);">-   template PDU_BSSGP t_BVC_UNBLOCK_ACK(template BssgpBvci bvci) := {</span><br><span style="color: hsl(120, 100%, 40%);">+    template (present) PDU_BSSGP tr_BVC_UNBLOCK_ACK(template (present) BssgpBvci bvci) := {</span><br><span>              pDU_BSSGP_BVC_UNBLOCK_ACK := {</span><br><span>                       bssgpPduType := '25'O,</span><br><span style="color: hsl(0, 100%, 40%);">-                  bVCI := t_BSSGP_BVCI(bvci)</span><br><span style="color: hsl(120, 100%, 40%);">+                    bVCI := tr_BSSGP_BVCI(bvci)</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_BSSGP ts_BVC_UNBLOCK_ACK(template (value) BssgpBvci bvci) := {</span><br><span style="color: hsl(120, 100%, 40%);">+           pDU_BSSGP_BVC_UNBLOCK_ACK := {</span><br><span style="color: hsl(120, 100%, 40%);">+                        bssgpPduType := '25'O,</span><br><span style="color: hsl(120, 100%, 40%);">+                        bVCI := ts_BSSGP_BVCI(bvci)</span><br><span>          }</span><br><span>    }</span><br><span> </span><br><span>        /* 10.4.8 */</span><br><span style="color: hsl(0, 100%, 40%);">-    template PDU_BSSGP t_BVC_BLOCK(template BssgpBvci bvci, template BssgpCause cause) := {</span><br><span style="color: hsl(120, 100%, 40%);">+       template (present) PDU_BSSGP tr_BVC_BLOCK(template (present) BssgpBvci bvci,</span><br><span style="color: hsl(120, 100%, 40%);">+                                            template (present) BssgpCause cause) := {</span><br><span>          pDU_BSSGP_BVC_BLOCK := {</span><br><span>                     bssgpPduType := '20'O,</span><br><span style="color: hsl(0, 100%, 40%);">-                  bVCI := t_BSSGP_BVCI(bvci),</span><br><span style="color: hsl(0, 100%, 40%);">-                     cause := t_BSSGP_CAUSE(cause)</span><br><span style="color: hsl(120, 100%, 40%);">+                 bVCI := tr_BSSGP_BVCI(bvci),</span><br><span style="color: hsl(120, 100%, 40%);">+                  cause := tr_BSSGP_CAUSE(cause)</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_BSSGP ts_BVC_BLOCK(template (value) BssgpBvci bvci,</span><br><span style="color: hsl(120, 100%, 40%);">+                                              template (value) BssgpCause cause) := {</span><br><span style="color: hsl(120, 100%, 40%);">+               pDU_BSSGP_BVC_BLOCK := {</span><br><span style="color: hsl(120, 100%, 40%);">+                      bssgpPduType := '20'O,</span><br><span style="color: hsl(120, 100%, 40%);">+                        bVCI := ts_BSSGP_BVCI(bvci),</span><br><span style="color: hsl(120, 100%, 40%);">+                  cause := ts_BSSGP_CAUSE(cause)</span><br><span>               }</span><br><span>    }</span><br><span> </span><br><span>        /* 10.4.9 */</span><br><span style="color: hsl(0, 100%, 40%);">-    template PDU_BSSGP t_BVC_BLOCK_ACK(template BssgpBvci bvci) := {</span><br><span style="color: hsl(120, 100%, 40%);">+      template (present) PDU_BSSGP tr_BVC_BLOCK_ACK(template (present) BssgpBvci bvci) := {</span><br><span>                pDU_BSSGP_BVC_BLOCK_ACK := {</span><br><span>                         bssgpPduType := '21'O,</span><br><span style="color: hsl(0, 100%, 40%);">-                  bVCI := t_BSSGP_BVCI(bvci)</span><br><span style="color: hsl(120, 100%, 40%);">+                    bVCI := tr_BSSGP_BVCI(bvci)</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_BSSGP ts_BVC_BLOCK_ACK(template (value) BssgpBvci bvci) := {</span><br><span style="color: hsl(120, 100%, 40%);">+             pDU_BSSGP_BVC_BLOCK_ACK := {</span><br><span style="color: hsl(120, 100%, 40%);">+                  bssgpPduType := '21'O,</span><br><span style="color: hsl(120, 100%, 40%);">+                        bVCI := ts_BSSGP_BVCI(bvci)</span><br><span>          }</span><br><span>    }</span><br><span> </span><br><span>        /* 10.4.4 */</span><br><span style="color: hsl(0, 100%, 40%);">-    template PDU_BSSGP t_BVC_FC_BVC(uint16_t bmax, uint16_t bucket_leak_rate,</span><br><span style="color: hsl(120, 100%, 40%);">+     template (value) PDU_BSSGP ts_BVC_FC_BVC(uint16_t bmax, uint16_t bucket_leak_rate,</span><br><span>                                   uint16_t bmax_default_ms, uint16_t r_default_ms, OCT1 tag) := {</span><br><span>              pDU_BSSGP_FLOW_CONTROL_BVC := {</span><br><span>                      bssgpPduType := '26'O,</span><br><span>@@ -1256,7 +1363,7 @@</span><br><span>                               lengthIndicator := {</span><br><span>                                         length1 := 2</span><br><span>                                 },</span><br><span style="color: hsl(0, 100%, 40%);">-                              bmax := f_oct_or_wc(bmax, 2)</span><br><span style="color: hsl(120, 100%, 40%);">+                          bmax := int2oct(bmax, 2)</span><br><span>                     },</span><br><span>                   bucket_Leak_Rate := {</span><br><span>                                iEI := '03'O,</span><br><span>@@ -1264,7 +1371,7 @@</span><br><span>                                lengthIndicator := {</span><br><span>                                         length1 := 2</span><br><span>                                 },</span><br><span style="color: hsl(0, 100%, 40%);">-                              r_Value := f_oct_or_wc(bucket_leak_rate, 2)</span><br><span style="color: hsl(120, 100%, 40%);">+                           r_Value := int2oct(bucket_leak_rate, 2)</span><br><span>                      },</span><br><span>                   bmax_default_MS := {</span><br><span>                                 iEI := '01'O,</span><br><span>@@ -1272,7 +1379,7 @@</span><br><span>                                lengthIndicator := {</span><br><span>                                         length1 := 2</span><br><span>                                 },</span><br><span style="color: hsl(0, 100%, 40%);">-                              bmax := f_oct_or_wc(bmax_default_ms, 2)</span><br><span style="color: hsl(120, 100%, 40%);">+                               bmax := int2oct(bmax_default_ms, 2)</span><br><span>                  },</span><br><span>                   r_default_MS := {</span><br><span>                            iEI := '1C'O,</span><br><span>@@ -1280,7 +1387,7 @@</span><br><span>                                lengthIndicator := {</span><br><span>                                         length1 := 2</span><br><span>                                 },</span><br><span style="color: hsl(0, 100%, 40%);">-                              r_default_MS_value := f_oct_or_wc(r_default_ms, 2)</span><br><span style="color: hsl(120, 100%, 40%);">+                            r_default_MS_value := int2oct(r_default_ms, 2)</span><br><span>                       },</span><br><span>                   bucket_Full_Ratio := omit,</span><br><span>                   bVC_Measurement := omit,</span><br><span>@@ -1341,7 +1448,20 @@</span><br><span>    }</span><br><span> </span><br><span>        /* 10.4.5 */</span><br><span style="color: hsl(0, 100%, 40%);">-    template PDU_BSSGP t_BVC_FC_BVC_ACK(template OCT1 tag) := {</span><br><span style="color: hsl(120, 100%, 40%);">+   template (present) PDU_BSSGP tr_BVC_FC_BVC_ACK(template (present) OCT1 tag) := {</span><br><span style="color: hsl(120, 100%, 40%);">+              pDU_BSSGP_FLOW_CONTROL_BVC_ACK := {</span><br><span style="color: hsl(120, 100%, 40%);">+                   bssgpPduType := '27'O,</span><br><span style="color: hsl(120, 100%, 40%);">+                        tag := {</span><br><span style="color: hsl(120, 100%, 40%);">+                              iEI := '1E'O,</span><br><span style="color: hsl(120, 100%, 40%);">+                         ext := '1'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                          lengthIndicator := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                  length1 := 1</span><br><span style="color: hsl(120, 100%, 40%);">+                          },</span><br><span style="color: hsl(120, 100%, 40%);">+                            unstructured_Value := tag</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%);">+     template (value) PDU_BSSGP ts_BVC_FC_BVC_ACK(template (value) OCT1 tag) := {</span><br><span>                 pDU_BSSGP_FLOW_CONTROL_BVC_ACK := {</span><br><span>                  bssgpPduType := '27'O,</span><br><span>                       tag := {</span><br><span>@@ -1395,7 +1515,7 @@</span><br><span>                                               template (present) OCT1 tag := ?) := {</span><br><span>             pDU_BSSGP_FLOW_CONTROL_MS := {</span><br><span>                       bssgpPduType := '28'O,</span><br><span style="color: hsl(0, 100%, 40%);">-                  tLLI := ts_BSSGP_TLLI(tlli),</span><br><span style="color: hsl(120, 100%, 40%);">+                  tLLI := tr_BSSGP_TLLI(tlli),</span><br><span>                         tag := {</span><br><span>                             iEI := '1E'O,</span><br><span>                                ext := '1'B,</span><br><span>@@ -1460,12 +1580,13 @@</span><br><span>       }</span><br><span> </span><br><span>        /* 10.4.14 */</span><br><span style="color: hsl(0, 100%, 40%);">-   template PDU_BSSGP ts_BSSGP_STATUS(template (omit) BssgpBvci bvci, template BssgpCause cause,</span><br><span style="color: hsl(0, 100%, 40%);">-                                      PDU_BSSGP pdu) := {</span><br><span style="color: hsl(120, 100%, 40%);">+        template (value) PDU_BSSGP ts_BSSGP_STATUS(template (omit) BssgpBvci bvci,</span><br><span style="color: hsl(120, 100%, 40%);">+                                               template (value) BssgpCause cause,</span><br><span style="color: hsl(120, 100%, 40%);">+                                            PDU_BSSGP pdu) := {</span><br><span>               pDU_BSSGP_STATUS := {</span><br><span>                        bssgpPduType := '41'O,</span><br><span style="color: hsl(0, 100%, 40%);">-                  cause := t_BSSGP_CAUSE(cause),</span><br><span style="color: hsl(0, 100%, 40%);">-                  bVCI := t_BSSGP_BVCI(bvci),</span><br><span style="color: hsl(120, 100%, 40%);">+                   cause := ts_BSSGP_CAUSE(cause),</span><br><span style="color: hsl(120, 100%, 40%);">+                       bVCI := f_ts_BSSGP_BVCI(bvci),</span><br><span>                       pDU_in_Error := {</span><br><span>                            iEI := '15'O,</span><br><span>                                ext := '1'B,</span><br><span>@@ -1480,8 +1601,8 @@</span><br><span>                                            template octetstring pdu := ?) := {</span><br><span>               pDU_BSSGP_STATUS := {</span><br><span>                        bssgpPduType := '41'O,</span><br><span style="color: hsl(0, 100%, 40%);">-                  cause := t_BSSGP_CAUSE(cause),</span><br><span style="color: hsl(0, 100%, 40%);">-                  bVCI := t_BSSGP_BVCI(bvci),</span><br><span style="color: hsl(120, 100%, 40%);">+                   cause := tr_BSSGP_CAUSE(cause),</span><br><span style="color: hsl(120, 100%, 40%);">+                       bVCI := tr_BSSGP_BVCI(bvci),</span><br><span>                         pDU_in_Error := {</span><br><span>                            iEI := '15'O,</span><br><span>                                ext := '1'B,</span><br><span>@@ -1596,7 +1717,7 @@</span><br><span>                 peakBitRateGranularity := '00'B</span><br><span>      }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   template QoS_Profile ts_QoS_TLV(template QoS_Profile_V qos) := {</span><br><span style="color: hsl(120, 100%, 40%);">+      template (value) QoS_Profile ts_QoS_TLV(template (value) QoS_Profile_V qos) := {</span><br><span>             iEI := '18'O,</span><br><span>                ext := '1'B,</span><br><span>                 lengthIndicator := { length1 := 3 },</span><br><span>@@ -1608,13 +1729,13 @@</span><br><span>               peakBitRateGranularity := qos.peakBitRateGranularity</span><br><span>         }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   template PDU_Lifetime t_DefaultLifetime(uint16_t delay := 65535) := {</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) PDU_Lifetime t_DefaultLifetime(uint16_t delay := 65535) := {</span><br><span>                iEI := '16'O,</span><br><span>                ext := '1'B,</span><br><span>                 lengthIndicator := {</span><br><span>                         length1 := 2</span><br><span>                 },</span><br><span style="color: hsl(0, 100%, 40%);">-              delay_Value := f_oct_or_wc(delay, 2)</span><br><span style="color: hsl(120, 100%, 40%);">+          delay_Value := int2oct(delay, 2)</span><br><span>     }</span><br><span> </span><br><span>        template DRX_Parameters t_defaultDRXparam := {</span><br><span>@@ -1662,7 +1783,7 @@</span><br><span>       }</span><br><span> </span><br><span>        /* 10.2.1 */</span><br><span style="color: hsl(0, 100%, 40%);">-    template PDU_BSSGP ts_BSSGP_DL_UD(GprsTlli tlli, octetstring pdu,</span><br><span style="color: hsl(120, 100%, 40%);">+     template (value) PDU_BSSGP ts_BSSGP_DL_UD(GprsTlli tlli, octetstring pdu,</span><br><span>                                      template (omit) MSRadioAccessCapabilityV_BSSGP racap := omit,</span><br><span>                                        template (omit) IMSI_BSSGP imsi := omit) := {</span><br><span>              pDU_BSSGP_DL_UNITDATA := {</span><br><span>@@ -1693,8 +1814,8 @@</span><br><span>                   initialLLC_PDU := omit</span><br><span>               }</span><br><span>    }</span><br><span style="color: hsl(0, 100%, 40%);">-       template PDU_BSSGP tr_BSSGP_DL_UD(template (present) GprsTlli tlli, template (present) octetstring pdu,</span><br><span style="color: hsl(0, 100%, 40%);">-                                   template IMSI_BSSGP imsi := omit) := {</span><br><span style="color: hsl(120, 100%, 40%);">+      template (present) PDU_BSSGP tr_BSSGP_DL_UD(template (present) GprsTlli tlli, template (present) octetstring pdu,</span><br><span style="color: hsl(120, 100%, 40%);">+                                       template (omit) IMSI_BSSGP imsi := omit) := {</span><br><span>              pDU_BSSGP_DL_UNITDATA := {</span><br><span>                   bssgpPduType := '00'O,</span><br><span>                       tLLI_current := tlli,</span><br><span>@@ -1725,12 +1846,12 @@</span><br><span>      }</span><br><span> </span><br><span>        /* 10.2.2 */</span><br><span style="color: hsl(0, 100%, 40%);">-    template PDU_BSSGP ts_BSSGP_UL_UD(GprsTlli tlli, BssgpCellId cell_id, octetstring payload) := {</span><br><span style="color: hsl(120, 100%, 40%);">+       template (value) PDU_BSSGP ts_BSSGP_UL_UD(GprsTlli tlli, BssgpCellId cell_id, octetstring payload) := {</span><br><span>              pDU_BSSGP_UL_UNITDATA := {</span><br><span>                   bssgpPduType := '01'O,</span><br><span>                       tLLI := tlli,</span><br><span>                        qoS_Profile := t_defaultQos,</span><br><span style="color: hsl(0, 100%, 40%);">-                    cell_Identifier := t_BSSGP_IE_CellId(cell_id),</span><br><span style="color: hsl(120, 100%, 40%);">+                        cell_Identifier := ts_BSSGP_IE_CellId(cell_id),</span><br><span>                      pFI := omit,</span><br><span>                         lSA_Identifier_List := omit,</span><br><span>                         redirect_Attempt_Flag := omit,</span><br><span>@@ -1749,7 +1870,7 @@</span><br><span>                       bssgpPduType := '01'O,</span><br><span>                       tLLI := tlli,</span><br><span>                        qoS_Profile := ?,</span><br><span style="color: hsl(0, 100%, 40%);">-                       cell_Identifier := t_BSSGP_IE_CellId(cell_id),</span><br><span style="color: hsl(120, 100%, 40%);">+                        cell_Identifier := tr_BSSGP_IE_CellId(cell_id),</span><br><span>                      pFI := *,</span><br><span>                    lSA_Identifier_List := *,</span><br><span>                    redirect_Attempt_Flag := *,</span><br><span>@@ -1770,7 +1891,7 @@</span><br><span>                  iMSI := ?,</span><br><span>                   dRX_Parameters := ?,</span><br><span>                         paging_Field4 := {</span><br><span style="color: hsl(0, 100%, 40%);">-                              bVCI := t_BSSGP_BVCI(bvci)</span><br><span style="color: hsl(120, 100%, 40%);">+                            bVCI := ts_BSSGP_BVCI(bvci)</span><br><span>                  },</span><br><span>                   tLLI := *,</span><br><span>                   channel_needed := *,</span><br><span>@@ -1779,13 +1900,13 @@</span><br><span>                       global_CN_Id := *</span><br><span>            }</span><br><span>    }</span><br><span style="color: hsl(0, 100%, 40%);">-       template PDU_BSSGP ts_BSSGP_CS_PAGING_IMSI(BssgpBvci bvci, hexstring imsi) := {</span><br><span style="color: hsl(120, 100%, 40%);">+       template (value) PDU_BSSGP ts_BSSGP_CS_PAGING_IMSI(BssgpBvci bvci, hexstring imsi) := {</span><br><span>              pDU_BSSGP_PAGING_CS := {</span><br><span>                     bssgpPduType := '07'O,</span><br><span>                       iMSI := ts_BSSGP_IMSI(imsi),</span><br><span>                         dRX_Parameters := t_defaultDRXparam,</span><br><span>                         paging_Field4 := {</span><br><span style="color: hsl(0, 100%, 40%);">-                              bVCI := t_BSSGP_BVCI(bvci)</span><br><span style="color: hsl(120, 100%, 40%);">+                            bVCI := ts_BSSGP_BVCI(bvci)</span><br><span>                  },</span><br><span>                   tLLI := omit,</span><br><span>                        channel_needed := omit,</span><br><span>@@ -1794,13 +1915,13 @@</span><br><span>                    global_CN_Id := omit</span><br><span>                 }</span><br><span>    }</span><br><span style="color: hsl(0, 100%, 40%);">-       template PDU_BSSGP ts_BSSGP_CS_PAGING_PTMSI(BssgpBvci bvci, hexstring imsi, GsmTmsi tmsi) := {</span><br><span style="color: hsl(120, 100%, 40%);">+        template (value) PDU_BSSGP ts_BSSGP_CS_PAGING_PTMSI(BssgpBvci bvci, hexstring imsi, GsmTmsi tmsi) := {</span><br><span>               pDU_BSSGP_PAGING_CS := {</span><br><span>                     bssgpPduType := '07'O,</span><br><span>                       iMSI := ts_BSSGP_IMSI(imsi),</span><br><span>                         dRX_Parameters := t_defaultDRXparam,</span><br><span>                         paging_Field4 := {</span><br><span style="color: hsl(0, 100%, 40%);">-                              bVCI := t_BSSGP_BVCI(bvci)</span><br><span style="color: hsl(120, 100%, 40%);">+                            bVCI := ts_BSSGP_BVCI(bvci)</span><br><span>                  },</span><br><span>                   tLLI := omit,</span><br><span>                        channel_needed := omit,</span><br><span>@@ -1817,7 +1938,7 @@</span><br><span>                      iMSI := ?,</span><br><span>                   dRX_Parameters := *,</span><br><span>                         paging_Field4 := {</span><br><span style="color: hsl(0, 100%, 40%);">-                              bVCI := t_BSSGP_BVCI(bvci)</span><br><span style="color: hsl(120, 100%, 40%);">+                            bVCI := tr_BSSGP_BVCI(bvci)</span><br><span>                  },</span><br><span>                   pFI := *,</span><br><span>                    aBQP := *,</span><br><span>@@ -1826,13 +1947,13 @@</span><br><span>                         eDRX_Paremeters := *</span><br><span>                 }</span><br><span>    }</span><br><span style="color: hsl(0, 100%, 40%);">-       template PDU_BSSGP ts_BSSGP_PS_PAGING_IMSI(BssgpBvci bvci, hexstring imsi) := {</span><br><span style="color: hsl(120, 100%, 40%);">+       template (value) PDU_BSSGP ts_BSSGP_PS_PAGING_IMSI(BssgpBvci bvci, hexstring imsi) := {</span><br><span>              pDU_BSSGP_PAGING_PS := {</span><br><span>                     bssgpPduType := '06'O,</span><br><span>                       iMSI := ts_BSSGP_IMSI(imsi),</span><br><span>                         dRX_Parameters := omit,</span><br><span>                      paging_Field4 := {</span><br><span style="color: hsl(0, 100%, 40%);">-                              bVCI := t_BSSGP_BVCI(bvci)</span><br><span style="color: hsl(120, 100%, 40%);">+                            bVCI := ts_BSSGP_BVCI(bvci)</span><br><span>                  },</span><br><span>                   pFI := omit,</span><br><span>                         aBQP := omit,</span><br><span>@@ -1841,13 +1962,13 @@</span><br><span>                      eDRX_Paremeters := omit</span><br><span>              }</span><br><span>    }</span><br><span style="color: hsl(0, 100%, 40%);">-       template PDU_BSSGP ts_BSSGP_PS_PAGING_PTMSI(BssgpBvci bvci, hexstring imsi, GsmTmsi tmsi) := {</span><br><span style="color: hsl(120, 100%, 40%);">+        template (value) PDU_BSSGP ts_BSSGP_PS_PAGING_PTMSI(BssgpBvci bvci, hexstring imsi, GsmTmsi tmsi) := {</span><br><span>               pDU_BSSGP_PAGING_PS := {</span><br><span>                     bssgpPduType := '06'O,</span><br><span>                       iMSI := ts_BSSGP_IMSI(imsi),</span><br><span>                         dRX_Parameters := omit,</span><br><span>                      paging_Field4 := {</span><br><span style="color: hsl(0, 100%, 40%);">-                              bVCI := t_BSSGP_BVCI(bvci)</span><br><span style="color: hsl(120, 100%, 40%);">+                            bVCI := ts_BSSGP_BVCI(bvci)</span><br><span>                  },</span><br><span>                   pFI := omit,</span><br><span>                         aBQP := omit,</span><br><span>@@ -1877,7 +1998,7 @@</span><br><span>        }</span><br><span> </span><br><span>        template (value) Paging_Field4 ts_BssgpP4Bvci(BssgpBvci bvci) := {</span><br><span style="color: hsl(0, 100%, 40%);">-              bVCI := t_BSSGP_BVCI(bvci)</span><br><span style="color: hsl(120, 100%, 40%);">+            bVCI := ts_BSSGP_BVCI(bvci)</span><br><span>  }</span><br><span> </span><br><span>        template (value) Location_Area ts_BSSGP_LA_ID(GSM_Types.LocationAreaIdentification input) := {</span><br><span>@@ -1941,7 +2062,7 @@</span><br><span>                       routeing_Area := ts_BSSGP_RA_ID(ra_id)</span><br><span>               }</span><br><span>    }</span><br><span style="color: hsl(0, 100%, 40%);">-       template PDU_BSSGP tr_BSSGP_SUSPEND(template GprsTlli tlli, RoutingAreaIdentification ra_id) := {</span><br><span style="color: hsl(120, 100%, 40%);">+     template PDU_BSSGP tr_BSSGP_SUSPEND(template (present) GprsTlli tlli, RoutingAreaIdentification ra_id) := {</span><br><span>          pDU_BSSGP_SUSPEND := {</span><br><span>                       bssgpPduType := '0B'O,</span><br><span>                       tLLI := tr_BSSGP_TLLI(tlli),</span><br><span>@@ -1985,7 +2106,7 @@</span><br><span>                         bssgpPduType := '0D'O,</span><br><span>                       tLLI := tr_BSSGP_TLLI(tlli),</span><br><span>                         routeing_Area := ts_BSSGP_RA_ID(ra_id),</span><br><span style="color: hsl(0, 100%, 40%);">-                 cause := t_BSSGP_CAUSE(cause)</span><br><span style="color: hsl(120, 100%, 40%);">+                 cause := tr_BSSGP_CAUSE(cause)</span><br><span>               }</span><br><span>    }</span><br><span> </span><br><span>@@ -2000,7 +2121,7 @@</span><br><span>                        suspend_Reference_Number := ts_BSSGP_SUSP_REF(susp_ref)</span><br><span>              }</span><br><span>    }</span><br><span style="color: hsl(0, 100%, 40%);">-       template PDU_BSSGP tr_BSSGP_RESUME(template GprsTlli tlli, RoutingAreaIdentification ra_id,</span><br><span style="color: hsl(120, 100%, 40%);">+   template PDU_BSSGP tr_BSSGP_RESUME(template (present) GprsTlli tlli, RoutingAreaIdentification ra_id,</span><br><span>                                           template OCT1 susp_ref) := {</span><br><span>              pDU_BSSGP_RESUME := {</span><br><span>                        bssgpPduType := '0E'O,</span><br><span>@@ -2019,7 +2140,7 @@</span><br><span>                       routeing_Area := ts_BSSGP_RA_ID(ra_id)</span><br><span>               }</span><br><span>    }</span><br><span style="color: hsl(0, 100%, 40%);">-       template PDU_BSSGP tr_BSSGP_RESUME_ACK(template GprsTlli tlli,</span><br><span style="color: hsl(120, 100%, 40%);">+        template PDU_BSSGP tr_BSSGP_RESUME_ACK(template (present) GprsTlli tlli,</span><br><span>                                             RoutingAreaIdentification ra_id) := {</span><br><span>                pDU_BSSGP_RESUME_ACK := {</span><br><span>                    bssgpPduType := '0F'O,</span><br><span>@@ -2038,14 +2159,14 @@</span><br><span>                     cause := ts_BSSGP_CAUSE(cause)</span><br><span>               }</span><br><span>    }</span><br><span style="color: hsl(0, 100%, 40%);">-       template PDU_BSSGP tr_BSSGP_RESUME_NACK(template GprsTlli tlli,</span><br><span style="color: hsl(120, 100%, 40%);">+       template PDU_BSSGP tr_BSSGP_RESUME_NACK(template (present) GprsTlli tlli,</span><br><span>                                            RoutingAreaIdentification ra_id,</span><br><span>                                             template BssgpCause cause) := {</span><br><span>              pDU_BSSGP_RESUME_NACK := {</span><br><span>                   bssgpPduType := '10'O,</span><br><span>                       tLLI := tr_BSSGP_TLLI(tlli),</span><br><span>                         routeing_Area := ts_BSSGP_RA_ID(ra_id),</span><br><span style="color: hsl(0, 100%, 40%);">-                 cause := t_BSSGP_CAUSE(cause)</span><br><span style="color: hsl(120, 100%, 40%);">+                 cause := tr_BSSGP_CAUSE(cause)</span><br><span>               }</span><br><span>    }</span><br><span> </span><br><span>@@ -2181,7 +2302,7 @@</span><br><span>                if (istemplatekind(mccmnc, "omit")) {</span><br><span>                      return omit;</span><br><span>                 } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                        return ts_BSSGP_PlmnId(mccmnc);</span><br><span style="color: hsl(120, 100%, 40%);">+                       return ts_BSSGP_PlmnId(valueof(mccmnc));</span><br><span>             }</span><br><span>    }</span><br><span>    private function f_tr_BSSGP_PlmnId(template BcdMccMnc mccmnc)</span><br><span>@@ -2193,7 +2314,7 @@</span><br><span>                } else if (istemplatekind(mccmnc, "?")) {</span><br><span>                  return ?;</span><br><span>            } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                        return ts_BSSGP_PlmnId(mccmnc);</span><br><span style="color: hsl(120, 100%, 40%);">+                       return ts_BSSGP_PlmnId(valueof(mccmnc));</span><br><span>             }</span><br><span>    }</span><br><span> </span><br><span>@@ -2220,20 +2341,20 @@</span><br><span>              pDU_BSSGP_FLUSH_LL := {</span><br><span>                      bssgpPduType := '2A'O,</span><br><span>                       tLLI := ts_BSSGP_TLLI(tlli),</span><br><span style="color: hsl(0, 100%, 40%);">-                    bVCI_old := t_BSSGP_BVCI(bvci_old),</span><br><span style="color: hsl(0, 100%, 40%);">-                     bVCI_new := t_BSSGP_BVCI(bvci_new),</span><br><span style="color: hsl(0, 100%, 40%);">-                     nSEI := t_BSSGP_NSEI(nsei)</span><br><span style="color: hsl(120, 100%, 40%);">+                    bVCI_old := ts_BSSGP_BVCI(bvci_old),</span><br><span style="color: hsl(120, 100%, 40%);">+                  bVCI_new := f_ts_BSSGP_BVCI(bvci_new),</span><br><span style="color: hsl(120, 100%, 40%);">+                        nSEI := f_ts_BSSGP_NSEI(nsei)</span><br><span>                }</span><br><span>    }</span><br><span style="color: hsl(0, 100%, 40%);">-       template PDU_BSSGP tr_BSSGP_FLUSH_LL(template GprsTlli tlli, template BssgpBvci bvci_old,</span><br><span style="color: hsl(120, 100%, 40%);">+     template PDU_BSSGP tr_BSSGP_FLUSH_LL(template (present) GprsTlli tlli, template BssgpBvci bvci_old,</span><br><span>                                       template (omit) BssgpBvci bvci_new := omit,</span><br><span>                                          template (omit) Nsei nsei := omit) := {</span><br><span>                 pDU_BSSGP_FLUSH_LL := {</span><br><span>                      bssgpPduType := '2A'O,</span><br><span>                       tLLI := tr_BSSGP_TLLI(tlli),</span><br><span style="color: hsl(0, 100%, 40%);">-                    bVCI_old := t_BSSGP_BVCI(bvci_old),</span><br><span style="color: hsl(0, 100%, 40%);">-                     bVCI_new := t_BSSGP_BVCI(bvci_new),</span><br><span style="color: hsl(0, 100%, 40%);">-                     nSEI := t_BSSGP_NSEI(nsei)</span><br><span style="color: hsl(120, 100%, 40%);">+                    bVCI_old := tr_BSSGP_BVCI(bvci_old),</span><br><span style="color: hsl(120, 100%, 40%);">+                  bVCI_new := f_ts_BSSGP_BVCI(bvci_new),</span><br><span style="color: hsl(120, 100%, 40%);">+                        nSEI := f_ts_BSSGP_NSEI(nsei)</span><br><span>                }</span><br><span>    }</span><br><span> </span><br><span>@@ -2245,23 +2366,23 @@</span><br><span>              pDU_BSSGP_FLUSH_LL_ACK := {</span><br><span>                  bssgpPduType := '2B'O,</span><br><span>                       tLLI := ts_BSSGP_TLLI(tlli),</span><br><span style="color: hsl(0, 100%, 40%);">-                    flush_Action := t_FLUSH_ACTION(act),</span><br><span style="color: hsl(0, 100%, 40%);">-                    bVCI_new := t_BSSGP_BVCI(bvci_new),</span><br><span style="color: hsl(0, 100%, 40%);">-                     number_of_octets_affected := t_NO_OCT_AFF(oct_affected),</span><br><span style="color: hsl(0, 100%, 40%);">-                        nSEI := t_BSSGP_NSEI(nsei)</span><br><span style="color: hsl(120, 100%, 40%);">+                    flush_Action := ts_FLUSH_ACTION(act),</span><br><span style="color: hsl(120, 100%, 40%);">+                 bVCI_new := f_ts_BSSGP_BVCI(bvci_new),</span><br><span style="color: hsl(120, 100%, 40%);">+                        number_of_octets_affected := ts_NO_OCT_AFF(oct_affected),</span><br><span style="color: hsl(120, 100%, 40%);">+                     nSEI := f_ts_BSSGP_NSEI(nsei)</span><br><span>                }</span><br><span>    }</span><br><span style="color: hsl(0, 100%, 40%);">-       template PDU_BSSGP tr_BSSGP_FLUSH_LL_ACK(template GprsTlli tlli, template OCT1 act,</span><br><span style="color: hsl(120, 100%, 40%);">+   template PDU_BSSGP tr_BSSGP_FLUSH_LL_ACK(template (present) GprsTlli tlli, template OCT1 act,</span><br><span>                                                 template integer oct_affected,</span><br><span>                                               template (omit) BssgpBvci bvci_new := omit,</span><br><span>                                                  template (omit) Nsei nsei := omit) := {</span><br><span>             pDU_BSSGP_FLUSH_LL_ACK := {</span><br><span>                  bssgpPduType := '2B'O,</span><br><span style="color: hsl(0, 100%, 40%);">-                  tLLI := ts_BSSGP_TLLI(tlli),</span><br><span style="color: hsl(0, 100%, 40%);">-                    flush_Action := t_FLUSH_ACTION(act),</span><br><span style="color: hsl(0, 100%, 40%);">-                    bVCI_new := t_BSSGP_BVCI(bvci_new),</span><br><span style="color: hsl(0, 100%, 40%);">-                     number_of_octets_affected := t_NO_OCT_AFF(oct_affected),</span><br><span style="color: hsl(0, 100%, 40%);">-                        nSEI := t_BSSGP_NSEI(nsei)</span><br><span style="color: hsl(120, 100%, 40%);">+                    tLLI := tr_BSSGP_TLLI(tlli),</span><br><span style="color: hsl(120, 100%, 40%);">+                  flush_Action := tr_FLUSH_ACTION(act),</span><br><span style="color: hsl(120, 100%, 40%);">+                 bVCI_new := f_ts_BSSGP_BVCI(bvci_new),</span><br><span style="color: hsl(120, 100%, 40%);">+                        number_of_octets_affected := tr_NO_OCT_AFF(oct_affected),</span><br><span style="color: hsl(120, 100%, 40%);">+                     nSEI := f_ts_BSSGP_NSEI(nsei)</span><br><span>                }</span><br><span>    }</span><br><span> </span><br><span>@@ -2272,21 +2393,21 @@</span><br><span>              pDU_BSSGP_LLC_DISCARDED := {</span><br><span>                         bssgpPduType := '2C'O,</span><br><span>                       tLLI := ts_BSSGP_TLLI(tlli),</span><br><span style="color: hsl(0, 100%, 40%);">-                    lLC_Frames_Discarded := t_LLC_FRAMES_DISCARDED(frames_discarded),</span><br><span style="color: hsl(0, 100%, 40%);">-                       bVCI := t_BSSGP_BVCI(bvci),</span><br><span style="color: hsl(0, 100%, 40%);">-                     number_of_octets_deleted := t_NO_OCT_AFF(oct_deleted),</span><br><span style="color: hsl(120, 100%, 40%);">+                        lLC_Frames_Discarded := ts_LLC_FRAMES_DISCARDED(frames_discarded),</span><br><span style="color: hsl(120, 100%, 40%);">+                    bVCI := ts_BSSGP_BVCI(bvci),</span><br><span style="color: hsl(120, 100%, 40%);">+                  number_of_octets_deleted := ts_NO_OCT_AFF(oct_deleted),</span><br><span>                      pFI := omit</span><br><span>          }</span><br><span>    }</span><br><span style="color: hsl(0, 100%, 40%);">-       template PDU_BSSGP tr_BSSGP_LLC_DISCARDED(template GprsTlli tlli, template integer frames_discarded,</span><br><span style="color: hsl(120, 100%, 40%);">+  template PDU_BSSGP tr_BSSGP_LLC_DISCARDED(template (present) GprsTlli tlli, template integer frames_discarded,</span><br><span>                                                template BssgpBvci bvci,</span><br><span>                                             template integer oct_deleted) := {</span><br><span>          pDU_BSSGP_LLC_DISCARDED := {</span><br><span>                         bssgpPduType := '2C'O,</span><br><span style="color: hsl(0, 100%, 40%);">-                  tLLI := ts_BSSGP_TLLI(tlli),</span><br><span style="color: hsl(0, 100%, 40%);">-                    lLC_Frames_Discarded := t_LLC_FRAMES_DISCARDED(frames_discarded),</span><br><span style="color: hsl(0, 100%, 40%);">-                       bVCI := t_BSSGP_BVCI(bvci),</span><br><span style="color: hsl(0, 100%, 40%);">-                     number_of_octets_deleted := t_NO_OCT_AFF(oct_deleted),</span><br><span style="color: hsl(120, 100%, 40%);">+                        tLLI := tr_BSSGP_TLLI(tlli),</span><br><span style="color: hsl(120, 100%, 40%);">+                  lLC_Frames_Discarded := tr_LLC_FRAMES_DISCARDED(frames_discarded),</span><br><span style="color: hsl(120, 100%, 40%);">+                    bVCI := tr_BSSGP_BVCI(bvci),</span><br><span style="color: hsl(120, 100%, 40%);">+                  number_of_octets_deleted := tr_NO_OCT_AFF(oct_deleted),</span><br><span>                      pFI := *</span><br><span>             }</span><br><span>    }</span><br><span>@@ -2304,7 +2425,7 @@</span><br><span>                                                 template MSRadioAccessCapabilityV_BSSGP racap) := {</span><br><span>             pDU_BSSGP_RA_CAPABILITY := {</span><br><span>                         bssgpPduType := '02'O,</span><br><span style="color: hsl(0, 100%, 40%);">-                  tLLI := ts_BSSGP_TLLI(tlli),</span><br><span style="color: hsl(120, 100%, 40%);">+                  tLLI := tr_BSSGP_TLLI(tlli),</span><br><span>                         mS_Radio_Access_Capability := tr_BSSGP_IE_MSRAcap(racap)</span><br><span>             }</span><br><span>    }</span><br><span>@@ -2319,10 +2440,10 @@</span><br><span>          }</span><br><span>    }</span><br><span>    template (present) PDU_BSSGP tr_BSSGP_RA_CAP_UPD(template (present) GprsTlli tlli,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                   template OCT1 tag) := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                               template (present) OCT1 tag) := {</span><br><span>               pDU_BSSGP_RA_CAPABILITY_UPDATE := {</span><br><span>                  bssgpPduType := '08'O,</span><br><span style="color: hsl(0, 100%, 40%);">-                  tLLI := ts_BSSGP_TLLI(tlli),</span><br><span style="color: hsl(120, 100%, 40%);">+                  tLLI := tr_BSSGP_TLLI(tlli),</span><br><span>                         tag := tr_BSSGP_IE_Tag(tag)</span><br><span>          }</span><br><span>    }</span><br><span>@@ -2342,11 +2463,11 @@</span><br><span>          }</span><br><span>    }</span><br><span>    template (present) PDU_BSSGP</span><br><span style="color: hsl(0, 100%, 40%);">-    tr_BSSGP_RA_CAP_UPD_ACK(template (present) GprsTlli tlli, template OCT1 tag, template (present) OCT1 cause,</span><br><span style="color: hsl(120, 100%, 40%);">+   tr_BSSGP_RA_CAP_UPD_ACK(template (present) GprsTlli tlli, template (present) OCT1 tag, template (present) OCT1 cause,</span><br><span>                                template MSRadioAccessCapabilityV_BSSGP racap := omit) := {</span><br><span>          pDU_BSSGP_RA_CAPABILITY_UPDATE_ACK := {</span><br><span>                      bssgpPduType := '09'O,</span><br><span style="color: hsl(0, 100%, 40%);">-                  tLLI := ts_BSSGP_TLLI(tlli),</span><br><span style="color: hsl(120, 100%, 40%);">+                  tLLI := tr_BSSGP_TLLI(tlli),</span><br><span>                         tag := tr_BSSGP_IE_Tag(tag),</span><br><span>                         iMSI := omit,</span><br><span>                        rA_Cap_UPDATE_CAUSE := tr_BSSGP_IE_RACU_Cause(cause),</span><br><span>@@ -2375,7 +2496,7 @@</span><br><span>                return ret;</span><br><span>  }</span><br><span>    function tr_BSSGP_RADIO_CAUSE(template BssgpRadioCause cause) return template (present) Radio_Cause {</span><br><span style="color: hsl(0, 100%, 40%);">-           var template Radio_Cause ret;</span><br><span style="color: hsl(120, 100%, 40%);">+         var template (present) Radio_Cause ret;</span><br><span>              ret.iEI := '19'O;</span><br><span>            ret.ext := '1'B;</span><br><span>             ret.lengthIndicator := { length1 := 1 };</span><br><span>@@ -2832,7 +2953,7 @@</span><br><span>              lengthIndicator := {</span><br><span>                        length1 := 0 /* overwritten */</span><br><span>                },</span><br><span style="color: hsl(0, 100%, 40%);">-              reporting_Cell_Identifier := t_Cell_Identifier_V(cid)</span><br><span style="color: hsl(120, 100%, 40%);">+                 reporting_Cell_Identifier := ts_Cell_Identifier_V(cid)</span><br><span>      }</span><br><span>    template RAN_Information_Request_Application_Container_NACC</span><br><span>  tr_RAN_Information_Request_Application_Container_NACC(template BssgpCellId cid := ?) := {</span><br><span>@@ -2841,7 +2962,7 @@</span><br><span>             lengthIndicator := {</span><br><span>                        length1 := ?</span><br><span>                  },</span><br><span style="color: hsl(0, 100%, 40%);">-              reporting_Cell_Identifier := t_Cell_Identifier_V(cid)</span><br><span style="color: hsl(120, 100%, 40%);">+                 reporting_Cell_Identifier := tr_Cell_Identifier_V(cid)</span><br><span>      }</span><br><span> </span><br><span>        /* 3GPP TS 48.018 11.3.63.1.2 */</span><br><span>@@ -2852,7 +2973,7 @@</span><br><span>              lengthIndicator := {</span><br><span>                        length1 := 0 /* overwritten */</span><br><span>                },</span><br><span style="color: hsl(0, 100%, 40%);">-              reporting_Cell_Identifier := t_Cell_Identifier_V(cid)</span><br><span style="color: hsl(120, 100%, 40%);">+                 reporting_Cell_Identifier := ts_Cell_Identifier_V(cid)</span><br><span>      }</span><br><span> </span><br><span>        /* 3GPP TS 48.018 11.3.63.1.3 */</span><br><span>@@ -2863,7 +2984,7 @@</span><br><span>              lengthIndicator := {</span><br><span>                        length1 := 0 /* overwritten */</span><br><span>                },</span><br><span style="color: hsl(0, 100%, 40%);">-              reporting_Cell_Identifier := t_Cell_Identifier_V(cid)</span><br><span style="color: hsl(120, 100%, 40%);">+                 reporting_Cell_Identifier := ts_Cell_Identifier_V(cid)</span><br><span>      }</span><br><span> </span><br><span>        /* 3GPP TS 48.018 11.3.63.2.1 */</span><br><span>@@ -2874,7 +2995,7 @@</span><br><span>              lengthIndicator := {</span><br><span>                        length1 := 0 /* overwritten */</span><br><span>                },</span><br><span style="color: hsl(0, 100%, 40%);">-              reporting_Cell_Identifier := t_Cell_Identifier_V(cid),</span><br><span style="color: hsl(120, 100%, 40%);">+                reporting_Cell_Identifier := ts_Cell_Identifier_V(cid),</span><br><span>              typeBit := bool2bit(psi_type),</span><br><span>               number_of_SI_PSI := int2bit(si_psi_num, 7),</span><br><span>                  sI_PSI := si_psi</span><br><span>@@ -2886,7 +3007,7 @@</span><br><span>             ret.iEI := '4E'O;</span><br><span>            ret.ext := '1'B;</span><br><span>             ret.lengthIndicator := { length1 := ? };</span><br><span style="color: hsl(0, 100%, 40%);">-                ret.reporting_Cell_Identifier := t_Cell_Identifier_V(cid);</span><br><span style="color: hsl(120, 100%, 40%);">+            ret.reporting_Cell_Identifier := tr_Cell_Identifier_V(cid);</span><br><span>                  if (istemplatekind(psi_type, "*")) {</span><br><span>                      ret.typeBit := *;</span><br><span>             } else if (istemplatekind(psi_type, "?")) {</span><br><span>@@ -2913,7 +3034,7 @@</span><br><span>                lengthIndicator := {</span><br><span>                        length1 := 0 /* overwritten */</span><br><span>                },</span><br><span style="color: hsl(0, 100%, 40%);">-              reporting_Cell_Identifier := t_Cell_Identifier_V(cid),</span><br><span style="color: hsl(120, 100%, 40%);">+                reporting_Cell_Identifier := ts_Cell_Identifier_V(cid),</span><br><span>              sI3 := si3</span><br><span>  }</span><br><span> </span><br><span>@@ -2925,7 +3046,7 @@</span><br><span>                 lengthIndicator := {</span><br><span>                        length1 := 0 /* overwritten */</span><br><span>                },</span><br><span style="color: hsl(0, 100%, 40%);">-              reporting_Cell_Identifier := t_Cell_Identifier_V(cid),</span><br><span style="color: hsl(120, 100%, 40%);">+                reporting_Cell_Identifier := ts_Cell_Identifier_V(cid),</span><br><span>              mBMS_data_channel_report := data_ch_report</span><br><span>  }</span><br><span> </span><br><span>@@ -3244,7 +3365,7 @@</span><br><span>        }</span><br><span> </span><br><span>        template RIM_Routing_Address t_RIM_Routing_Address_cid(template BssgpCellId cid := ?) := {</span><br><span style="color: hsl(0, 100%, 40%);">-               cell_Identifier := t_Cell_Identifier_V(cid)</span><br><span style="color: hsl(120, 100%, 40%);">+           cell_Identifier := tr_Cell_Identifier_V(cid)</span><br><span>        }</span><br><span>    template RIM_Routing_Address t_RIM_Routing_Address_rncid(template BssgpCellId cid := ?, template integer rnc_id := ?) := {</span><br><span>            globalRNCID := t_GlobalRNC_ID_BSSGP(cid, rnc_id)</span><br><span>@@ -3256,7 +3377,7 @@</span><br><span>             eHRPD_SectorID := sector</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   function t_Cell_Identifier_V(template BssgpCellId cid) return template Cell_Identifier_V {</span><br><span style="color: hsl(120, 100%, 40%);">+    function tr_Cell_Identifier_V(template BssgpCellId cid) return template Cell_Identifier_V {</span><br><span>          var template Cell_Identifier_V ret := {</span><br><span>                      mccDigit1 := ?,</span><br><span>                      mccDigit2 := ?,</span><br><span>@@ -3296,6 +3417,17 @@</span><br><span>             }</span><br><span>            return ret;</span><br><span>  }</span><br><span style="color: hsl(120, 100%, 40%);">+     template (value) Cell_Identifier_V ts_Cell_Identifier_V(template (value) BssgpCellId cid) := {</span><br><span style="color: hsl(120, 100%, 40%);">+                mccDigit1 := cid.ra_id.lai.mcc_mnc[0],</span><br><span style="color: hsl(120, 100%, 40%);">+                mccDigit2 := cid.ra_id.lai.mcc_mnc[1],</span><br><span style="color: hsl(120, 100%, 40%);">+                mccDigit3 := cid.ra_id.lai.mcc_mnc[2],</span><br><span style="color: hsl(120, 100%, 40%);">+                mncDigit3 := cid.ra_id.lai.mcc_mnc[3],</span><br><span style="color: hsl(120, 100%, 40%);">+                mncDigit1 := cid.ra_id.lai.mcc_mnc[4],</span><br><span style="color: hsl(120, 100%, 40%);">+                mncDigit2 := cid.ra_id.lai.mcc_mnc[5],</span><br><span style="color: hsl(120, 100%, 40%);">+                lac := int2oct(valueof(cid.ra_id.lai.lac), 2),</span><br><span style="color: hsl(120, 100%, 40%);">+                rac := int2oct(valueof(cid.ra_id.rac), 1),</span><br><span style="color: hsl(120, 100%, 40%);">+            cI_value := int2oct(valueof(cid.cell_id), 2)</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span> </span><br><span>        function t_GlobalRNC_ID_BSSGP(template BssgpCellId cid, template integer rnc_id) return template GlobalRNC_ID_BSSGP {</span><br><span>                var template GlobalRNC_ID_BSSGP ret := {</span><br><span>diff --git a/library/RAW_NS.ttcnpp b/library/RAW_NS.ttcnpp</span><br><span>index 81836c7..2aaa770 100644</span><br><span>--- a/library/RAW_NS.ttcnpp</span><br><span>+++ b/library/RAW_NS.ttcnpp</span><br><span>@@ -213,9 +213,9 @@</span><br><span> /* Receive a BSSGP UNBLOCK for given BVCI and ACK it */</span><br><span> altstep as_rx_bvc_unblock_tx_ack(BssgpBvci bvci, boolean oneshot := false, integer idx := 0) runs on RAW_NS_CT {</span><br><span>       var PDU_NS ns_rf;</span><br><span style="color: hsl(0, 100%, 40%);">-       [] NSCP[idx].receive(tr_NS_UNITDATA(t_SduCtrlB, 0, decmatch t_BVC_UNBLOCK(bvci))) -> value ns_rf {</span><br><span style="color: hsl(120, 100%, 40%);">+ [] NSCP[idx].receive(tr_NS_UNITDATA(t_SduCtrlB, 0, decmatch tr_BVC_UNBLOCK(bvci))) -> value ns_rf {</span><br><span>               var PDU_BSSGP bssgp_rx := dec_PDU_BSSGP(ns_rf.pDU_NS_Unitdata.nS_SDU);</span><br><span style="color: hsl(0, 100%, 40%);">-          var PDU_BSSGP bssgp_tx := valueof(t_BVC_UNBLOCK_ACK(bvci));</span><br><span style="color: hsl(120, 100%, 40%);">+           var PDU_BSSGP bssgp_tx := valueof(ts_BVC_UNBLOCK_ACK(bvci));</span><br><span>                 NSCP[idx].send(ts_NS_UNITDATA(t_SduCtrlB, 0, enc_PDU_BSSGP(bssgp_tx)));</span><br><span>              if (not oneshot) { repeat; }</span><br><span>                 }</span><br><span>@@ -229,7 +229,7 @@</span><br><span>                                                              -> value ns_rf {</span><br><span>          var PDU_BSSGP bssgp_rx := dec_PDU_BSSGP(ns_rf.pDU_NS_Unitdata.nS_SDU);</span><br><span>               var OCT1 tag := bssgp_rx.pDU_BSSGP_FLOW_CONTROL_BVC.tag.unstructured_Value;</span><br><span style="color: hsl(0, 100%, 40%);">-             var PDU_BSSGP bssgp_tx := valueof(t_BVC_FC_BVC_ACK(tag));</span><br><span style="color: hsl(120, 100%, 40%);">+             var PDU_BSSGP bssgp_tx := valueof(ts_BVC_FC_BVC_ACK(tag));</span><br><span>           NSCP[idx].send(ts_NS_UNITDATA(t_SduCtrlB, bvci, enc_PDU_BSSGP(bssgp_tx)));</span><br><span>           if (not oneshot) { repeat; }</span><br><span>                 }</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/22731">change 22731</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/+/22731"/><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: I3da153ce5e83b231501e74b958fcac9f10c00849 </div>
<div style="display:none"> Gerrit-Change-Number: 22731 </div>
<div style="display:none"> Gerrit-PatchSet: 6 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>