Harald Welte has uploaded this change for review. ( 
https://gerrit.osmocom.org/12941


Change subject: Osocom_Gb_Types: Add send/receive templates for SNS-SIZE and 
SNS-CONFIG procedure
......................................................................

Osocom_Gb_Types: Add send/receive templates for SNS-SIZE and SNS-CONFIG 
procedure

Change-Id: Iaa12c468a9e665d2050945cfc0a60dab4024071c
---
M library/Osmocom_Gb_Types.ttcn
M pcu/gen_links.sh
M pcu/regen_makefile.sh
3 files changed, 275 insertions(+), 9 deletions(-)



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

diff --git a/library/Osmocom_Gb_Types.ttcn b/library/Osmocom_Gb_Types.ttcn
index c337cb4..86b4d49 100644
--- a/library/Osmocom_Gb_Types.ttcn
+++ b/library/Osmocom_Gb_Types.ttcn
@@ -9,6 +9,7 @@
        import from GSM_RR_Types all;
        import from BSSGP_Types all
        import from NS_Types all
+       import from Native_Functions all;

        type uint16_t Nsvci;
        type uint16_t Nsei;
@@ -81,26 +82,49 @@
                },
                cause := int2oct(enum2int(valueof(cause)), 1)
        }
+       function ts_NS_IE_CAUSE_omit(template (omit) NsCause cause) return 
template (omit) CauseNS {
+               var template (omit) CauseNS ret;
+               if (istemplatekind(cause, "omit")) {
+                       return omit;
+               } else {
+                       ret := {
+                               iEI := '00'O,
+                               ext := '1'B,
+                               lengthIndicator := {
+                                       length1 := 1
+                               },
+                               cause := int2oct(enum2int(valueof(cause)), 1)
+                       }
+                       return ret;
+               }
+       }

        function tr_NS_IE_CAUSE(template NsCause cause) return template CauseNS 
{
                var template CauseNS ret;
                ret.iEI := '00'O;
                ret.ext := '1'B;
                ret.lengthIndicator := { length1 := 1 };
-               if (isvalue(cause)) {
-                       ret.cause := int2oct(enum2int(valueof(cause)), 1);
-               } else {
+               if (istemplatekind(cause, "omit")) {
+                       return omit;
+               } else if (istemplatekind(cause, "*")) {
+                       return *;
+               } else if (istemplatekind(cause, "?")) {
                        ret.cause := ?
+               } else {
+                       ret.cause := int2oct(enum2int(valueof(cause)), 1);
                }
                return ret;
        }

        private function f_oct_or_wc(template integer inp, integer len) return 
template octetstring {
-               if (isvalue(inp)) {
-                       return int2oct(valueof(inp), len);
-               } else {
-                       return ?
+               if (istemplatekind(inp, "omit")) {
+                       return omit;
+               } else if (istemplatekind(inp, "*")) {
+                       return *;
+               } else if (istemplatekind(inp, "?")) {
+                       return ?;
                }
+               return int2oct(valueof(inp), len);
        }

        template (value) NS_VCI ts_NS_IE_NSVCI(Nsvci nsvci) := {
@@ -137,6 +161,40 @@
                nSEI := f_oct_or_wc(nsei, 2)
        }

+       template (value) IP4_Element ts_SNS_IPv4(charstring ip, integer 
udp_port,
+                                                uint8_t sig_weight := 1, 
uint8_t data_weight := 1) := {
+               ipAddress := f_inet_addr(ip),
+               uDP_Port := int2oct(udp_port, 2),
+               signallingWeight := int2oct(sig_weight, 1),
+               dataWeight := int2oct(data_weight, 1)
+       }
+       function tr_SNS_IPv4(template charstring ip, template integer udp_port,
+                               template uint8_t sig_weight := ?, template 
uint8_t data_weight := ?)
+       return template IP4_Element {
+               var template IP4_Element e;
+               if (istemplatekind(ip, "?")) {
+                       e.ipAddress := ?;
+               } else {
+                       e.ipAddress := f_inet_addr(valueof(ip));
+               }
+               if (istemplatekind(udp_port, "?")) {
+                       e.uDP_Port := ?;
+               } else {
+                       e.uDP_Port := int2oct(valueof(udp_port), 2);
+               }
+               if (istemplatekind(sig_weight, "?")) {
+                       e.signallingWeight := ?;
+               } else {
+                       e.signallingWeight := int2oct(valueof(sig_weight), 1);
+               }
+               if (istemplatekind(data_weight, "?")) {
+                       e.dataWeight := ?;
+               } else {
+                       e.dataWeight := int2oct(valueof(data_weight), 1);
+               }
+               return e;
+       }
+

        template (value) PDU_NS ts_NS_RESET(NsCause cause, Nsvci nsvci, Nsei 
nsei) := {
                pDU_NS_Reset := {
@@ -260,6 +318,214 @@
        }

 
+
+       private function ts_num_of_ep(OCT1 iei, template (omit) uint16_t num_ep)
+       return template (omit) NumberOfIP_Endpoints {
+               var template (omit) NumberOfIP_Endpoints t;
+               if (istemplatekind(num_ep, "omit")) {
+                       return omit;
+               } else {
+                       t.iEI := iei;
+                       t.numberOfIP_Endpoints := int2oct(valueof(num_ep), 2);
+                       return t;
+               }
+       }
+       private function tr_num_of_ep(OCT1 iei, template uint16_t num_ep)
+       return template NumberOfIP_Endpoints {
+               var template NumberOfIP_Endpoints t;
+               if (istemplatekind(num_ep, "omit")) {
+                       return omit;
+               } else if (istemplatekind(num_ep, "*")) {
+                       return *;
+               } else if (istemplatekind(num_ep, "?")) {
+                       return ?;
+               } else {
+                       t.iEI := iei;
+                       t.numberOfIP_Endpoints := int2oct(valueof(num_ep), 2);
+                       return t;
+               }
+       }
+
+
+       template (value) ResetFlag ts_SNS_IE_ResetFlag(boolean rst) := {
+               iEI := '0A'O,
+               resetBIT := bool2bit(rst),
+               spare := '0000000'B
+       }
+       template ResetFlag tr_SNS_IE_ResetFlag(template boolean rst) := {
+               iEI := '0A'O,
+               resetBIT := bool2bit_tmpl(rst),
+               spare := '0000000'B
+       }
+
+       template (value) EndFlag ts_SNS_IE_EndFlag(boolean end) := {
+               eBIT := bool2bit(end),
+               spare := '0000000'B
+       }
+       template EndFlag tr_SNS_IE_EndFlag(template boolean end) := {
+               eBIT := bool2bit_tmpl(end),
+               spare := '0000000'B
+       }
+
+       template (value) MaxNumberOfNSVCs ts_SNS_IE_MaxNumOfNSVCs(uint16_t num) 
:= {
+               iEI := '07'O,
+               maxNumberOfNSVCs := int2oct(num, 2)
+       }
+       template MaxNumberOfNSVCs tr_SNS_IE_MaxNumOfNSVCs(template uint16_t 
num) := {
+               iEI := '07'O,
+               maxNumberOfNSVCs := f_oct_or_wc(num, 2)
+       }
+
+       template (value) PDU_NS ts_SNS_SIZE(Nsei nsei, boolean rst_flag := true,
+                               uint16_t max_nsvcs := 2,
+                               template (omit) uint16_t num_v4 := 1,
+                               template (omit) uint16_t num_v6 := omit) := {
+               pDU_SNS_Size := {
+                       nsPduType := '12'O,
+                       nSEI_NS := ts_NS_IE_NSEI(nsei),
+                       resetFlag := ts_SNS_IE_ResetFlag(rst_flag),
+                       maxNumberOfNSVCs := ts_SNS_IE_MaxNumOfNSVCs(max_nsvcs),
+                       numberOfIP4_Endpoints := ts_num_of_ep('08'O, num_v4),
+                       numberOfIP6_Endpoints := ts_num_of_ep('09'O, num_v6)
+               }
+       }
+       template PDU_NS tr_SNS_SIZE(template Nsei nsei, template boolean 
rst_flag := ?,
+                               template uint16_t max_nsvcs := ?,
+                               template uint16_t num_v4 := ?,
+                               template uint16_t num_v6 := *) := {
+               pDU_SNS_Size := {
+                       nsPduType := '12'O,
+                       nSEI_NS := tr_NS_IE_NSEI(nsei),
+                       resetFlag := tr_SNS_IE_ResetFlag(rst_flag),
+                       maxNumberOfNSVCs := tr_SNS_IE_MaxNumOfNSVCs(max_nsvcs),
+                       numberOfIP4_Endpoints := tr_num_of_ep('08'O, num_v4),
+                       numberOfIP6_Endpoints := tr_num_of_ep('09'O, num_v6)
+               }
+       }
+
+       template PDU_NS ts_SNS_SIZE_ACK(Nsei nsei, template (omit) NsCause 
cause) := {
+               pDU_SNS_Size_Ack := {
+                       nsPduType := '13'O,
+                       nSEI_NS := ts_NS_IE_NSEI(nsei),
+                       causeNS := ts_NS_IE_CAUSE_omit(cause)
+               }
+       }
+       template PDU_NS tr_SNS_SIZE_ACK(template Nsei nsei, template NsCause 
cause) := {
+               pDU_SNS_Size_Ack := {
+                       nsPduType := '13'O,
+                       nSEI_NS := tr_NS_IE_NSEI(nsei),
+                       causeNS := tr_NS_IE_CAUSE(cause)
+               }
+       }
+
+       private function ts_SNS_IE_ListIP4(template (omit) IP4_Elements elem)
+       return template (omit) ListofIP4Elements {
+               var template (omit) ListofIP4Elements r;
+               if (istemplatekind(elem, "omit")) {
+                       return omit;
+               } else {
+                       r := {
+                               iEI := '05'O,
+                               ext := '1'B,
+                               lengthIndicator := {
+                                       length1 := 0 /* overwritten */
+                               },
+                               iP4_Elements := elem
+                       }
+                       return r;
+               }
+       }
+       private function tr_SNS_IE_ListIP4(template IP4_Elements elem)
+       return template ListofIP4Elements {
+               var template ListofIP4Elements r;
+               if (istemplatekind(elem, "omit")) {
+                       return omit;
+               } else {
+                       r := {
+                               iEI := '05'O,
+                               ext := '1'B,
+                               lengthIndicator := {
+                                       length1 := ? /* overwritten */
+                               },
+                               iP4_Elements := elem
+                       }
+                       return r;
+               }
+       }
+
+       private function ts_SNS_IE_ListIP6(template (omit) IP6_Elements elem)
+       return template (omit) ListofIP6Elements {
+               var template (omit) ListofIP6Elements r;
+               if (istemplatekind(elem, "omit")) {
+                       return omit;
+               } else {
+                       r := {
+                               iEI := '06'O,
+                               ext := '1'B,
+                               lengthIndicator := {
+                                       length1 := 0 /* overwritten */
+                               },
+                               iP6_Elements := elem
+                       }
+                       return r;
+               }
+       }
+       private function tr_SNS_IE_ListIP6(template IP6_Elements elem)
+       return template ListofIP6Elements {
+               var template ListofIP6Elements r;
+               if (istemplatekind(elem, "omit")) {
+                       return omit;
+               } else {
+                       r := {
+                               iEI := '06'O,
+                               ext := '1'B,
+                               lengthIndicator := {
+                                       length1 := ? /* overwritten */
+                               },
+                               iP6_Elements := elem
+                       }
+                       return r;
+               }
+       }
+
+       template (value) PDU_NS ts_SNS_CONFIG(Nsei nsei, boolean end_flag,
+                                       template (omit) IP4_Elements v4,
+                                       template (omit) IP6_Elements v6 := 
omit) := {
+               pDU_SNS_Config := {
+                       nsPduType := '0F'O,
+                       endFlag := ts_SNS_IE_EndFlag(end_flag),
+                       nSEI_NS := ts_NS_IE_NSEI(nsei),
+                       listofIP4Elements := ts_SNS_IE_ListIP4(v4),
+                       listofIP6Elements := ts_SNS_IE_ListIP6(v6)
+               }
+       }
+       template PDU_NS tr_SNS_CONFIG(template Nsei nsei, template boolean 
end_flag,
+                                       template IP4_Elements v4,
+                                       template IP6_Elements v6 := omit) := {
+               pDU_SNS_Config := {
+                       nsPduType := '0F'O,
+                       endFlag := tr_SNS_IE_EndFlag(end_flag),
+                       nSEI_NS := tr_NS_IE_NSEI(nsei),
+                       listofIP4Elements := tr_SNS_IE_ListIP4(v4),
+                       listofIP6Elements := tr_SNS_IE_ListIP6(v6)
+               }
+       }
+
+       template (value) PDU_NS ts_SNS_CONFIG_ACK(Nsei nsei, template (omit) 
NsCause cause) := {
+               pDU_SNS_Config_Ack := {
+                       nsPduType := '10'O,
+                       nSEI_NS := ts_NS_IE_NSEI(nsei),
+                       causeNS := ts_NS_IE_CAUSE_omit(cause)
+               }
+       }
+       template PDU_NS tr_SNS_CONFIG_ACK(template Nsei nsei, template NsCause 
cause) := {
+               pDU_SNS_Config_Ack := {
+                       nsPduType := '10'O,
+                       nSEI_NS := tr_NS_IE_NSEI(nsei),
+                       causeNS := tr_NS_IE_CAUSE(cause)
+               }
+       }
+
        type record BssgpCellId {
                RoutingAreaIdentification       ra_id,
                CellIdentity                    cell_id
diff --git a/pcu/gen_links.sh b/pcu/gen_links.sh
index 6f33433..6e549eb 100755
--- a/pcu/gen_links.sh
+++ b/pcu/gen_links.sh
@@ -46,7 +46,7 @@


 DIR=../library
-FILES="Misc_Helpers.ttcn General_Types.ttcn GSM_Types.ttcn GSM_RR_Types.ttcn 
Osmocom_Types.ttcn RLCMAC_Types.ttcn RLCMAC_CSN1_Types.ttcn RLCMAC_EncDec.cc 
L1CTL_Types.ttcn L1CTL_PortType.ttcn L1CTL_PortType_CtrlFunct.ttcn 
L1CTL_PortType_CtrlFunctDef.cc LAPDm_RAW_PT.ttcn LAPDm_Types.ttcn "
+FILES="Misc_Helpers.ttcn General_Types.ttcn Native_Functions.ttcn 
Native_FunctionDefs.cc GSM_Types.ttcn GSM_RR_Types.ttcn Osmocom_Types.ttcn 
RLCMAC_Types.ttcn RLCMAC_CSN1_Types.ttcn RLCMAC_EncDec.cc L1CTL_Types.ttcn 
L1CTL_PortType.ttcn L1CTL_PortType_CtrlFunct.ttcn 
L1CTL_PortType_CtrlFunctDef.cc LAPDm_RAW_PT.ttcn LAPDm_Types.ttcn "
 FILES+="NS_Emulation.ttcn NS_CodecPort.ttcn NS_CodecPort_CtrlFunct.ttcn 
NS_CodecPort_CtrlFunctDef.cc "
 FILES+="BSSGP_Emulation.ttcn Osmocom_Gb_Types.ttcn "
 FILES+="LLC_Templates.ttcn L3_Templates.ttcn L3_Common.ttcn "
diff --git a/pcu/regen_makefile.sh b/pcu/regen_makefile.sh
index 7eefd2c..ff712dc 100755
--- a/pcu/regen_makefile.sh
+++ b/pcu/regen_makefile.sh
@@ -1,5 +1,5 @@
 #!/bin/sh

-FILES="*.ttcn BSSGP_EncDec.cc IPL4asp_PT.cc IPL4asp_discovery.cc 
TCCConversion.cc TCCInterface.cc NS_CodecPort_CtrlFunctDef.cc UD_PT.cc 
RLCMAC_EncDec.cc LLC_EncDec.cc L1CTL_PortType_CtrlFunctDef.cc"
+FILES="*.ttcn BSSGP_EncDec.cc IPL4asp_PT.cc IPL4asp_discovery.cc 
TCCConversion.cc TCCInterface.cc NS_CodecPort_CtrlFunctDef.cc UD_PT.cc 
RLCMAC_EncDec.cc LLC_EncDec.cc L1CTL_PortType_CtrlFunctDef.cc 
Native_FunctionDefs.cc"

 ../regen-makefile.sh PCU_Tests.ttcn $FILES

--
To view, visit https://gerrit.osmocom.org/12941
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: Iaa12c468a9e665d2050945cfc0a60dab4024071c
Gerrit-Change-Number: 12941
Gerrit-PatchSet: 1
Gerrit-Owner: Harald Welte <lafo...@gnumonks.org>

Reply via email to