<p>fixeria has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/17995">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">library: implement SI3 Rest Octets as per 3GPP TS 44.018<br><br>Change-Id: Iaf86f1451a956bf1deef0a9d98fa0513aeb8164b<br>Signed-off-by: Vadim Yanitskiy <axilirator@gmail.com><br>---<br>M bts/gen_links.sh<br>A library/GSM_RestOctets.ttcn<br>2 files changed, 120 insertions(+), 1 deletion(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/95/17995/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/bts/gen_links.sh b/bts/gen_links.sh</span><br><span>index b6921fa..7aa8398 100755</span><br><span>--- a/bts/gen_links.sh</span><br><span>+++ b/bts/gen_links.sh</span><br><span>@@ -33,7 +33,7 @@</span><br><span> gen_links $DIR $FILES</span><br><span> </span><br><span> DIR=../library</span><br><span style="color: hsl(0, 100%, 40%);">-FILES="Misc_Helpers.ttcn General_Types.ttcn GSM_Types.ttcn GSM_RR_Types.ttcn Osmocom_VTY_Functions.ttcn GSM_SystemInformation.ttcn Osmocom_Types.ttcn RLCMAC_Templates.ttcn RLCMAC_Types.ttcn RLCMAC_CSN1_Templates.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 "</span><br><span style="color: hsl(120, 100%, 40%);">+FILES="Misc_Helpers.ttcn General_Types.ttcn GSM_Types.ttcn GSM_RR_Types.ttcn Osmocom_VTY_Functions.ttcn GSM_SystemInformation.ttcn GSM_RestOctets.ttcn Osmocom_Types.ttcn RLCMAC_Templates.ttcn RLCMAC_Types.ttcn RLCMAC_CSN1_Templates.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 "</span><br><span> #FILES+="NS_Emulation.ttcn NS_CodecPort.ttcn NS_CodecPort_CtrlFunct.ttcn NS_CodecPort_CtrlFunctDef.cc "</span><br><span> #FILES+="BSSGP_Emulation.ttcn Osmocom_Gb_Types.ttcn "</span><br><span> FILES+="IPA_Types.ttcn IPA_CodecPort.ttcn IPA_CodecPort_CtrlFunct.ttcn IPA_CodecPort_CtrlFunctDef.cc IPA_Emulation.ttcnpp IPA_CodecPort.ttcn RSL_Types.ttcn RSL_Emulation.ttcn AbisOML_Types.ttcn "</span><br><span>diff --git a/library/GSM_RestOctets.ttcn b/library/GSM_RestOctets.ttcn</span><br><span>new file mode 100644</span><br><span>index 0000000..8f0346d</span><br><span>--- /dev/null</span><br><span>+++ b/library/GSM_RestOctets.ttcn</span><br><span>@@ -0,0 +1,119 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/**</span><br><span style="color: hsl(120, 100%, 40%);">+ * GSM Rest Octets definitions as per 3GPP TS 44.018.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * (C) 2020 Vadim Yanitskiy <axilirator@gmail.com></span><br><span style="color: hsl(120, 100%, 40%);">+ * All rights reserved.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Released under the terms of GNU General Public License, Version 2 or</span><br><span style="color: hsl(120, 100%, 40%);">+ * (at your option) any later version.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * SPDX-License-Identifier: GPL-2.0-or-later</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%);">+module GSM_RestOctets {</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+import from General_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from Osmocom_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* 10.5.2.34 SI 3 Rest Octets */</span><br><span style="color: hsl(120, 100%, 40%);">+type record SI3RestOctets {</span><br><span style="color: hsl(120, 100%, 40%);">+    SelectionParamsOpt      sel_params,</span><br><span style="color: hsl(120, 100%, 40%);">+   PowerOffsetOpt          pwr_offset,</span><br><span style="color: hsl(120, 100%, 40%);">+   BIT1                    si_2ter_ind,</span><br><span style="color: hsl(120, 100%, 40%);">+  BIT1                    early_cm_ind,</span><br><span style="color: hsl(120, 100%, 40%);">+ SchedIfAndWhere         sched_where,</span><br><span style="color: hsl(120, 100%, 40%);">+  GPRSIndicatorOpt        gprs_ind,</span><br><span style="color: hsl(120, 100%, 40%);">+     BIT1                    umts_early_cm_ind,</span><br><span style="color: hsl(120, 100%, 40%);">+    SI2quaterIndicatorOpt   si2_quater_ind,</span><br><span style="color: hsl(120, 100%, 40%);">+       BIT1                    iu_mode_ind ('1'B) optional,</span><br><span style="color: hsl(120, 100%, 40%);">+  SI21IndicatorOpt        si21_ind optional</span><br><span style="color: hsl(120, 100%, 40%);">+     /* ... spare padding ... */</span><br><span style="color: hsl(120, 100%, 40%);">+} with {</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (si_2ter_ind) "CSN.1 L/H"</span><br><span style="color: hsl(120, 100%, 40%);">+   variant (early_cm_ind) "CSN.1 L/H"</span><br><span style="color: hsl(120, 100%, 40%);">+  variant (umts_early_cm_ind) "CSN.1 L/H"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* If Iu mode is not supported in the cell, the Iu Indicator is not sent</span><br><span style="color: hsl(120, 100%, 40%);">+       * within this cell. Iu Indicator is included if and only if GPRS is</span><br><span style="color: hsl(120, 100%, 40%);">+   * not supported, and Iu mode is supported in the cell. */</span><br><span style="color: hsl(120, 100%, 40%);">+    variant (iu_mode_ind) "PRESENCE(gprs_ind.presence = '0'B)"</span><br><span style="color: hsl(120, 100%, 40%);">+  /* SI21 field is only present if 'WHERE' information is not present. */</span><br><span style="color: hsl(120, 100%, 40%);">+       variant (si21_ind) "PRESENCE(sched_where.presence = '0'B)"</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%);">+/* Selection Parameters */</span><br><span style="color: hsl(120, 100%, 40%);">+type record SelectionParams {</span><br><span style="color: hsl(120, 100%, 40%);">+ boolean                 cbq,</span><br><span style="color: hsl(120, 100%, 40%);">+  uint6_t                 cr_offset,</span><br><span style="color: hsl(120, 100%, 40%);">+    uint3_t                 temp_offset,</span><br><span style="color: hsl(120, 100%, 40%);">+  uint5_t                 penalty_time</span><br><span style="color: hsl(120, 100%, 40%);">+} with {</span><br><span style="color: hsl(120, 100%, 40%);">+        variant (cbq) "FIELDLENGTH(1)"</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%);">+/* Optional Selection Parameters: L | H < Selection Parameters > */</span><br><span style="color: hsl(120, 100%, 40%);">+type record SelectionParamsOpt {</span><br><span style="color: hsl(120, 100%, 40%);">+   BIT1                    presence, // L/H</span><br><span style="color: hsl(120, 100%, 40%);">+      SelectionParams         params optional</span><br><span style="color: hsl(120, 100%, 40%);">+} with {</span><br><span style="color: hsl(120, 100%, 40%);">+     variant (presence) "CSN.1 L/H"</span><br><span style="color: hsl(120, 100%, 40%);">+      variant (params) "PRESENCE(presence = '1'B)"</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%);">+/* Optional Power Offset: L | H < Power Offset bit(2) > */</span><br><span style="color: hsl(120, 100%, 40%);">+type record PowerOffsetOpt {</span><br><span style="color: hsl(120, 100%, 40%);">+  BIT1                    presence, // L/H</span><br><span style="color: hsl(120, 100%, 40%);">+      uint2_t                 offset optional</span><br><span style="color: hsl(120, 100%, 40%);">+} with {</span><br><span style="color: hsl(120, 100%, 40%);">+     variant (presence) "CSN.1 L/H"</span><br><span style="color: hsl(120, 100%, 40%);">+      variant (offset) "PRESENCE(presence = '1'B)"</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%);">+/* Scheduling if and where: L | H < WHERE bit(3) > */</span><br><span style="color: hsl(120, 100%, 40%);">+type record SchedIfAndWhere {</span><br><span style="color: hsl(120, 100%, 40%);">+      BIT1                    presence, // L/H</span><br><span style="color: hsl(120, 100%, 40%);">+      uint3_t                 where optional</span><br><span style="color: hsl(120, 100%, 40%);">+} with {</span><br><span style="color: hsl(120, 100%, 40%);">+      variant (presence) "CSN.1 L/H"</span><br><span style="color: hsl(120, 100%, 40%);">+      variant (where) "PRESENCE(presence = '1'B)"</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+type record GPRSIndicator {</span><br><span style="color: hsl(120, 100%, 40%);">+      uint3_t                 ra_colour,</span><br><span style="color: hsl(120, 100%, 40%);">+    BIT1                    si13_pos</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant "" };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Optional GPRS Indicator: L | H < GPRS Indicator > */</span><br><span style="color: hsl(120, 100%, 40%);">+type record GPRSIndicatorOpt {</span><br><span style="color: hsl(120, 100%, 40%);">+   BIT1                    presence, // L/H</span><br><span style="color: hsl(120, 100%, 40%);">+      GPRSIndicator           ind optional</span><br><span style="color: hsl(120, 100%, 40%);">+} with {</span><br><span style="color: hsl(120, 100%, 40%);">+        variant (presence) "CSN.1 L/H"</span><br><span style="color: hsl(120, 100%, 40%);">+      variant (ind) "PRESENCE(presence = '1'B)"</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%);">+/* Optional SI2quater Indicator: L | H < SI2quater Indicator > */</span><br><span style="color: hsl(120, 100%, 40%);">+type record SI2quaterIndicatorOpt {</span><br><span style="color: hsl(120, 100%, 40%);">+       BIT1                    presence, // L/H</span><br><span style="color: hsl(120, 100%, 40%);">+      BIT1                    ind optional</span><br><span style="color: hsl(120, 100%, 40%);">+} with {</span><br><span style="color: hsl(120, 100%, 40%);">+        variant (presence) "CSN.1 L/H"</span><br><span style="color: hsl(120, 100%, 40%);">+      variant (ind) "PRESENCE(presence = '1'B)"</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%);">+/* Optional SI21 Indicator: L | H < SI21 Position > */</span><br><span style="color: hsl(120, 100%, 40%);">+type record SI21IndicatorOpt {</span><br><span style="color: hsl(120, 100%, 40%);">+       BIT1                    presence, // L/H</span><br><span style="color: hsl(120, 100%, 40%);">+      BIT1                    pos optional</span><br><span style="color: hsl(120, 100%, 40%);">+} with {</span><br><span style="color: hsl(120, 100%, 40%);">+        variant (presence) "CSN.1 L/H"</span><br><span style="color: hsl(120, 100%, 40%);">+      variant (pos) "PRESENCE(presence = '1'B)"</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%);">+external function enc_SI3RestOctets(in SI3RestOctets ro) return octetstring</span><br><span style="color: hsl(120, 100%, 40%);">+        with { extension "prototype(convert) encode(RAW)" };</span><br><span style="color: hsl(120, 100%, 40%);">+external function dec_SI3RestOctets(in octetstring stream) return SI3RestOctets</span><br><span style="color: hsl(120, 100%, 40%);">+       with { extension "prototype(convert) decode(RAW)" };</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%);">+} with { encode "RAW"; variant "FIELDORDER(msb)" }</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/17995">change 17995</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/+/17995"/><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: Iaf86f1451a956bf1deef0a9d98fa0513aeb8164b </div>
<div style="display:none"> Gerrit-Change-Number: 17995 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: fixeria <axilirator@gmail.com> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>