fixeria has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/14550


Change subject: library/ranap: enrich both t(s|r)_RANAP_DirectTransfer templates
......................................................................

library/ranap: enrich both t(s|r)_RANAP_DirectTransfer templates

Instead of having two similar variants of RANAP_DirectTransfer:

  - t(s|r)_RANAP_DirectTransfer, and
  - t(s|r)_RANAP_DirectTransferSAPI,

let's make the first one more flexible, and drop the last one.
This is achieved by introducing two supplementary functions:

  - f_gen_ts_dt_ies(), and
  - f_gen_tr_dt_ies,

which dynamically compose DirectTransfer.protocolIEs.

Change-Id: I7333d08c4d5a72159bfbd50fe8e7b1084cd61b9e
---
M library/RAN_Emulation.ttcnpp
M library/ranap/RANAP_Templates.ttcn
2 files changed, 84 insertions(+), 94 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks 
refs/changes/50/14550/1

diff --git a/library/RAN_Emulation.ttcnpp b/library/RAN_Emulation.ttcnpp
index de5b7f3..c7f67c4 100644
--- a/library/RAN_Emulation.ttcnpp
+++ b/library/RAN_Emulation.ttcnpp
@@ -1097,12 +1097,7 @@
 #ifdef RAN_EMULATION_RANAP
        case (RAN_PROTOCOL_RANAP) {
                var RANAP_PDU ranap;
-               if (false /* SAPI */) {
-                       var RANAP_IEs.SAPI sapi := sapi_0;
-                       ranap := valueof(ts_RANAP_DirectTransferSAPI(l3_enc, 
sapi));
-               } else {
-                       ranap := valueof(ts_RANAP_DirectTransfer(l3_enc));
-               }
+               ranap := valueof(ts_RANAP_DirectTransfer(l3_enc, sapi := 
sapi_0));
                RANAP.send(ts_RANAP_DATA_req(sccp_conn_id, ranap));
                }
 #endif
diff --git a/library/ranap/RANAP_Templates.ttcn 
b/library/ranap/RANAP_Templates.ttcn
index e55f212..fdced83 100644
--- a/library/ranap/RANAP_Templates.ttcn
+++ b/library/ranap/RANAP_Templates.ttcn
@@ -998,25 +998,94 @@
  * Direct Transfer
  
*****************************************************************************************************/

+private function f_gen_ts_dt_ies(template (value) NAS_PDU nas,
+                                template (omit) SAPI sapi,
+                                template (value) DirectTransfer.protocolIEs 
opt_ies)
+return DirectTransfer.protocolIEs {
+       var DirectTransfer.protocolIEs ies := {
+               /* NAS PDU is mandatory */
+               {
+                       id := id_NAS_PDU,
+                       criticality := ignore,
+                       value_ := {
+                               nAS_PDU := valueof(nas)
+                       }
+               }
+       };
+
+       /* Optional IEs, e.g. LAI, RAC, SAI */
+       ies := ies & valueof(opt_ies);
+
+       /* Optional SAPI is the last IE */
+       if (isvalue(sapi)) {
+               ies := ies & {{
+                       id := id_SAPI,
+                       criticality := ignore,
+                       value_ := {
+                               sAPI := valueof(sapi)
+                       }
+               }};
+       }
+
+       return ies;
+}
+
+private function f_gen_tr_dt_ies(template NAS_PDU nas,
+                                template SAPI sapi,
+                                template DirectTransfer.protocolIEs opt_ies)
+return template DirectTransfer.protocolIEs {
+       var template DirectTransfer.protocolIEs ies := {
+               /* NAS PDU is mandatory */
+               {
+                       id := id_NAS_PDU,
+                       criticality := ignore,
+                       value_ := {
+                               nAS_PDU := nas
+                       }
+               }
+       };
+
+       /* Optional IEs start from index 1 */
+       var integer idx := 1;
+
+       /* Optional IEs, e.g. LAI, RAC, SAI */
+       if (istemplatekind(opt_ies, "*")) {
+               ies[idx] := *;
+               idx := idx + 1;
+       } else if (not istemplatekind(opt_ies, "omit")) {
+               for (var integer i := 0; i < lengthof(opt_ies); i := i + 1) {
+                       ies[idx] := opt_ies[idx];
+                       idx := idx + 1;
+               }
+       }
+
+       /* Optional SAPI is the last IE */
+       if (istemplatekind(sapi, "*")) {
+               ies[idx] := *;
+       } else if (not istemplatekind(sapi, "omit")) {
+               ies[idx] := {
+                       id := id_SAPI,
+                       criticality := ignore,
+                       value_ := {
+                               sAPI := sapi
+                       }
+               };
+       }
+
+       return ies;
+}
+
 template (value) RANAP_PDU
 ts_RANAP_DirectTransfer(template (value) NAS_PDU nas,
-                       /* template DirectTransfer.protocolIEs ies := {}, */
+                       template (omit) SAPI sapi := sapi_0,
+                       template (value) DirectTransfer.protocolIEs ies := {},
                        template (omit) DirectTransfer.protocolExtensions exts 
:= omit) := {
        initiatingMessage := {
                procedureCode := id_DirectTransfer,
                criticality := ignore,
                value_ := {
                        directTransfer := {
-                               protocolIEs := {
-                                       {
-                                               id := id_NAS_PDU,
-                                               criticality := ignore,
-                                               value_ := {
-                                                       nAS_PDU := nas
-                                               }
-                                       }
-                                       /* LAI, RAC, SAI */
-                               },
+                               protocolIEs := f_gen_ts_dt_ies(nas, sapi, ies),
                                protocolExtensions := exts
                        }
                }
@@ -1025,88 +1094,14 @@
 template RANAP_PDU
 tr_RANAP_DirectTransfer(template NAS_PDU nas,
                        template SAPI sapi := sapi_0,
-                       /* template DirectTransfer.protocolIEs ies := {}, */
+                       template DirectTransfer.protocolIEs ies := *,
                        template DirectTransfer.protocolExtensions exts := *) 
:= {
        initiatingMessage := {
                procedureCode := id_DirectTransfer,
                criticality := ignore,
                value_ := {
                        directTransfer := {
-                               protocolIEs := {
-                                       {
-                                               id := id_NAS_PDU,
-                                               criticality := ignore,
-                                               value_ := {
-                                                       nAS_PDU := nas
-                                               }
-                                       },
-                                       * /* LAI, RAC, SAI */
-                               },
-                               protocolExtensions := exts
-                       }
-               }
-       }
-}
-
-template (value) RANAP_PDU
-ts_RANAP_DirectTransferSAPI(template (value) NAS_PDU nas,
-                           template (value) SAPI sapi := sapi_0,
-                           /* template DirectTransfer.protocolIEs ies := {}, */
-                           template (omit) DirectTransfer.protocolExtensions 
exts := omit) := {
-       initiatingMessage := {
-               procedureCode := id_DirectTransfer,
-               criticality := ignore,
-               value_ := {
-                       directTransfer := {
-                               protocolIEs := {
-                                       {
-                                               id := id_NAS_PDU,
-                                               criticality := ignore,
-                                               value_ := {
-                                                       nAS_PDU := nas
-                                               }
-                                       },
-                                       /* LAI, RAC, SAI */
-                                       {
-                                               id := id_SAPI,
-                                               criticality := ignore,
-                                               value_ := {
-                                                       sAPI := sapi
-                                               }
-                                       }
-                               },
-                               protocolExtensions := exts
-                       }
-               }
-       }
-}
-template RANAP_PDU
-tr_RANAP_DirectTransferSAPI(template NAS_PDU nas,
-                           template SAPI sapi := sapi_0,
-                           /* template DirectTransfer.protocolIEs ies := {}, */
-                           template DirectTransfer.protocolExtensions exts := 
*) := {
-       initiatingMessage := {
-               procedureCode := id_DirectTransfer,
-               criticality := ignore,
-               value_ := {
-                       directTransfer := {
-                               protocolIEs := {
-                                       {
-                                               id := id_NAS_PDU,
-                                               criticality := ignore,
-                                               value_ := {
-                                                       nAS_PDU := nas
-                                               }
-                                       },
-                                       *, /* LAI, RAC, SAI */
-                                       {
-                                               id := id_SAPI,
-                                               criticality := ignore,
-                                               value_ := {
-                                                       sAPI := sapi
-                                               }
-                                       }
-                               },
+                               protocolIEs := f_gen_tr_dt_ies(nas, sapi, ies),
                                protocolExtensions := exts
                        }
                }
@@ -1412,7 +1407,7 @@
        var integer i;

        /* InitialUE message has no SAPI */
-       if (match(ranap, tr_RANAP_DirectTransfer(?, ?))) {
+       if (match(ranap, tr_RANAP_DirectTransfer(?, omit))) {
                var DirectTransfer.protocolIEs ies := 
ranap.initiatingMessage.value_.directTransfer.protocolIEs;
                for (i := 0; i < lengthof(ies); i := i+1) {
                        if (ies[i].id == id_SAPI) {

--
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/14550
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: I7333d08c4d5a72159bfbd50fe8e7b1084cd61b9e
Gerrit-Change-Number: 14550
Gerrit-PatchSet: 1
Gerrit-Owner: fixeria <axilira...@gmail.com>
Gerrit-MessageType: newchange

Reply via email to