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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">library/MNCC: implement MNCCv8 encoding/decoding support<br><br>Change-Id: I5488c5a4cc671e1d6a0d35b2ff4bdda0b0b48c00<br>Related: OS#5164, OS#5282<br>---<br>M library/MNCC_Emulation.ttcn<br>M library/MNCC_EncDec.cc<br>M library/MNCC_Types.ttcn<br>M library/mncc.h<br>4 files changed, 74 insertions(+), 5 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/library/MNCC_Emulation.ttcn b/library/MNCC_Emulation.ttcn</span><br><span>index 66294a4..85556c1 100644</span><br><span>--- a/library/MNCC_Emulation.ttcn</span><br><span>+++ b/library/MNCC_Emulation.ttcn</span><br><span>@@ -38,7 +38,7 @@</span><br><span> import from UD_Types all;</span><br><span> </span><br><span> modulepar {</span><br><span style="color: hsl(0, 100%, 40%);">- int mp_mncc_version := 7;</span><br><span style="color: hsl(120, 100%, 40%);">+     int mp_mncc_version := 8;</span><br><span> }</span><br><span> </span><br><span> /* General "base class" component definition, of which specific implementations</span><br><span>diff --git a/library/MNCC_EncDec.cc b/library/MNCC_EncDec.cc</span><br><span>index f896cd3..ffc2aa8 100644</span><br><span>--- a/library/MNCC_EncDec.cc</span><br><span>+++ b/library/MNCC_EncDec.cc</span><br><span>@@ -9,7 +9,7 @@</span><br><span> </span><br><span> BOOLEAN set__MNCC__version(INTEGER const& version)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-       if (version != 7)</span><br><span style="color: hsl(120, 100%, 40%);">+     if (version != 7 && version != 8)</span><br><span>            return false;</span><br><span>        mncc_sock_version = version;</span><br><span>         return true;</span><br><span>@@ -184,9 +184,19 @@</span><br><span>          strncpy(mncc.imsi, in_sig.imsi(), sizeof(mncc.imsi));</span><br><span>                mncc.lchan_type = in_sig.lchan__type();</span><br><span>              mncc.lchan_mode = in_sig.lchan__mode();</span><br><span style="color: hsl(120, 100%, 40%);">+               if (in_sig.gcr().is_value()) {</span><br><span style="color: hsl(120, 100%, 40%);">+                        const OCTETSTRING &gcr = in_sig.gcr();</span><br><span style="color: hsl(120, 100%, 40%);">+                    if (mncc_sock_version < 8)</span><br><span style="color: hsl(120, 100%, 40%);">+                         TTCN_error("GCR is only available since MNCCv8");</span><br><span style="color: hsl(120, 100%, 40%);">+                   memcpy(&mncc.v8.gcr[0], gcr, sizeof(mncc.v8.gcr));</span><br><span style="color: hsl(120, 100%, 40%);">+                        mncc.fields |= MNCC_F_GCR;</span><br><span style="color: hsl(120, 100%, 40%);">+            }</span><br><span>            if (in_sig.sdp().is_value()) {</span><br><span>                       const CHARSTRING &sdp = in_sig.sdp();</span><br><span style="color: hsl(0, 100%, 40%);">-                       strncpy(&mncc.sdp[0], sdp, sizeof(mncc.sdp));</span><br><span style="color: hsl(120, 100%, 40%);">+                     if (mncc_sock_version > 7)</span><br><span style="color: hsl(120, 100%, 40%);">+                         strncpy(&mncc.v8.sdp[0], sdp, sizeof(mncc.v8.sdp));</span><br><span style="color: hsl(120, 100%, 40%);">+                       else</span><br><span style="color: hsl(120, 100%, 40%);">+                          strncpy(&mncc.v7.sdp[0], sdp, sizeof(mncc.v7.sdp));</span><br><span>              }</span><br><span>            ret_val = OCTETSTRING(sizeof(mncc), (uint8_t *)&mncc);</span><br><span>           }</span><br><span>@@ -361,7 +371,13 @@</span><br><span>             sign.imsi() = CHARSTRING(in_mncc->imsi);</span><br><span>          sign.lchan__type() = in_mncc->lchan_type;</span><br><span>                 sign.lchan__mode() = in_mncc->lchan_mode;</span><br><span style="color: hsl(0, 100%, 40%);">-            sign.sdp() = in_mncc->sdp;</span><br><span style="color: hsl(120, 100%, 40%);">+         if (mncc_sock_version > 7) {</span><br><span style="color: hsl(120, 100%, 40%);">+                       if (in_mncc->fields & MNCC_F_GCR)</span><br><span style="color: hsl(120, 100%, 40%);">+                              sign.gcr() = OCTETSTRING(sizeof(in_mncc->v8.gcr), in_mncc->v8.gcr);</span><br><span style="color: hsl(120, 100%, 40%);">+                     sign.sdp() = in_mncc->v8.sdp;</span><br><span style="color: hsl(120, 100%, 40%);">+              } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      sign.sdp() = in_mncc->v7.sdp;</span><br><span style="color: hsl(120, 100%, 40%);">+              }</span><br><span>            u.signal() = sign;</span><br><span>           break;</span><br><span>       }</span><br><span>diff --git a/library/MNCC_Types.ttcn b/library/MNCC_Types.ttcn</span><br><span>index e396892..1de34a0 100644</span><br><span>--- a/library/MNCC_Types.ttcn</span><br><span>+++ b/library/MNCC_Types.ttcn</span><br><span>@@ -362,6 +362,7 @@</span><br><span>     uint8_t         lchan_type,     /* empty in OSmoMSC */</span><br><span>       uint8_t         lchan_mode,     /* empty in OsmoMSC */</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+    octetstring     gcr optional,</span><br><span>        charstring      sdp optional</span><br><span> };</span><br><span> </span><br><span>@@ -472,6 +473,7 @@</span><br><span>                         imsi := "",</span><br><span>                        lchan_type := 0,</span><br><span>                     lchan_mode := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                      gcr := omit,</span><br><span>                         sdp := omit</span><br><span>          }</span><br><span>    }</span><br><span>@@ -503,6 +505,7 @@</span><br><span>                      imsi := ?,</span><br><span>                   lchan_type := ?,</span><br><span>                     lchan_mode := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                      gcr := *,</span><br><span>                    sdp := *</span><br><span>             }</span><br><span>    }</span><br><span>@@ -537,6 +540,7 @@</span><br><span>                      imsi := imsi,</span><br><span>                        lchan_type := 0,</span><br><span>                     lchan_mode := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                      gcr := omit,</span><br><span>                         sdp := omit</span><br><span>          }</span><br><span>    }</span><br><span>@@ -570,6 +574,7 @@</span><br><span>                      imsi := imsi,</span><br><span>                        lchan_type := ?,</span><br><span>                     lchan_mode := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                      gcr := *,</span><br><span>                    sdp := *</span><br><span>             }</span><br><span>    }</span><br><span>@@ -604,6 +609,7 @@</span><br><span>                      imsi := imsi,</span><br><span>                        lchan_type := 0,</span><br><span>                     lchan_mode := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                      gcr := omit,</span><br><span>                         sdp := omit</span><br><span>          }</span><br><span>    }</span><br><span>@@ -636,6 +642,7 @@</span><br><span>                      imsi := imsi,</span><br><span>                        lchan_type := ?,</span><br><span>                     lchan_mode := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                      gcr := *,</span><br><span>                    sdp := *</span><br><span>             }</span><br><span>    }</span><br><span>@@ -670,6 +677,7 @@</span><br><span>                      imsi := imsi,</span><br><span>                        lchan_type := ?,</span><br><span>                     lchan_mode := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                      gcr := *,</span><br><span>                    sdp := *</span><br><span>             }</span><br><span>    }</span><br><span>@@ -703,6 +711,7 @@</span><br><span>                      imsi := imsi,</span><br><span>                        lchan_type := 0,</span><br><span>                     lchan_mode := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                      gcr := omit,</span><br><span>                         sdp := omit</span><br><span>          }</span><br><span>    }</span><br><span>@@ -735,6 +744,7 @@</span><br><span>                      imsi := "",</span><br><span>                        lchan_type := 0,</span><br><span>                     lchan_mode := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                      gcr := omit,</span><br><span>                         sdp := omit</span><br><span>          }</span><br><span>    }</span><br><span>@@ -767,6 +777,7 @@</span><br><span>                      imsi := ?,</span><br><span>                   lchan_type := ?,</span><br><span>                     lchan_mode := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                      gcr := *,</span><br><span>                    sdp := *</span><br><span>             }</span><br><span>    }</span><br><span>@@ -809,6 +820,7 @@</span><br><span>                      imsi := ?,</span><br><span>                   lchan_type := ?,</span><br><span>                     lchan_mode := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                      gcr := *,</span><br><span>                    sdp := *</span><br><span>             }</span><br><span>    }</span><br><span>@@ -841,6 +853,7 @@</span><br><span>                      imsi := "",</span><br><span>                        lchan_type := 0,</span><br><span>                     lchan_mode := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                      gcr := omit,</span><br><span>                         sdp := omit</span><br><span>          }</span><br><span>    }</span><br><span>@@ -875,6 +888,7 @@</span><br><span>                      imsi := ?,</span><br><span>                   lchan_type := ?,</span><br><span>                     lchan_mode := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                      gcr := *,</span><br><span>                    sdp := *</span><br><span>             }</span><br><span>    }</span><br><span>@@ -908,6 +922,7 @@</span><br><span>                      imsi := "",</span><br><span>                        lchan_type := 0,</span><br><span>                     lchan_mode := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                      gcr := omit,</span><br><span>                         sdp := omit</span><br><span>          }</span><br><span>    }</span><br><span>@@ -944,6 +959,7 @@</span><br><span>                      imsi := "",</span><br><span>                        lchan_type := 0,</span><br><span>                     lchan_mode := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                      gcr := omit,</span><br><span>                         sdp := omit</span><br><span>          }</span><br><span>    }</span><br><span>@@ -978,6 +994,7 @@</span><br><span>                      imsi := ?,</span><br><span>                   lchan_type := ?,</span><br><span>                     lchan_mode := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                      gcr := *,</span><br><span>                    sdp := *</span><br><span>             }</span><br><span>    }</span><br><span>@@ -1012,6 +1029,7 @@</span><br><span>                    imsi := "",</span><br><span>                        lchan_type := 0,</span><br><span>                     lchan_mode := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                      gcr := omit,</span><br><span>                         sdp := omit</span><br><span>          }</span><br><span>    }</span><br><span>@@ -1046,6 +1064,7 @@</span><br><span>                    imsi := "",</span><br><span>                        lchan_type := 0,</span><br><span>                     lchan_mode := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                      gcr := omit,</span><br><span>                         sdp := omit</span><br><span>          }</span><br><span>    }</span><br><span>@@ -1079,6 +1098,7 @@</span><br><span>                    imsi := ?,</span><br><span>                   lchan_type := ?,</span><br><span>                     lchan_mode := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                      gcr := *,</span><br><span>                    sdp := *</span><br><span>             }</span><br><span>    }</span><br><span>@@ -1115,6 +1135,7 @@</span><br><span>                    imsi := ?,</span><br><span>                   lchan_type := ?,</span><br><span>                     lchan_mode := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                      gcr := *,</span><br><span>                    sdp := *</span><br><span>             }</span><br><span>    }</span><br><span>@@ -1148,6 +1169,7 @@</span><br><span>                    imsi := "",</span><br><span>                        lchan_type := 0,</span><br><span>                     lchan_mode := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                      gcr := omit,</span><br><span>                         sdp := omit</span><br><span>          }</span><br><span>    }</span><br><span>@@ -1181,6 +1203,7 @@</span><br><span>                    imsi := "",</span><br><span>                        lchan_type := 0,</span><br><span>                     lchan_mode := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                      gcr := omit,</span><br><span>                         sdp := omit</span><br><span>          }</span><br><span>    }</span><br><span>@@ -1213,6 +1236,7 @@</span><br><span>                    imsi := ?,</span><br><span>                   lchan_type := ?,</span><br><span>                     lchan_mode := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                      gcr := *,</span><br><span>                    sdp := *</span><br><span>             }</span><br><span>    }</span><br><span>@@ -1248,6 +1272,7 @@</span><br><span>                    imsi := ?,</span><br><span>                   lchan_type := ?,</span><br><span>                     lchan_mode := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                      gcr := *,</span><br><span>                    sdp := *</span><br><span>             }</span><br><span>    }</span><br><span>@@ -1281,6 +1306,7 @@</span><br><span>                    imsi := "",</span><br><span>                        lchan_type := 0,</span><br><span>                     lchan_mode := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                      gcr := omit,</span><br><span>                         sdp := omit</span><br><span>          }</span><br><span>    }</span><br><span>@@ -1316,6 +1342,7 @@</span><br><span>                    imsi := "",</span><br><span>                        lchan_type := 0,</span><br><span>                     lchan_mode := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                      gcr := omit,</span><br><span>                         sdp := omit</span><br><span>          }</span><br><span>    }</span><br><span>@@ -1350,6 +1377,7 @@</span><br><span>                    imsi := ?,</span><br><span>                   lchan_type := ?,</span><br><span>                     lchan_mode := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                      gcr := *,</span><br><span>                    sdp := *</span><br><span>             }</span><br><span>    }</span><br><span>@@ -1384,6 +1412,7 @@</span><br><span>                    imsi := ?,</span><br><span>                   lchan_type := ?,</span><br><span>                     lchan_mode := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                      gcr := *,</span><br><span>                    sdp := *</span><br><span>             }</span><br><span>    }</span><br><span>@@ -1417,6 +1446,7 @@</span><br><span>                    imsi := "",</span><br><span>                        lchan_type := 0,</span><br><span>                     lchan_mode := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                      gcr := omit,</span><br><span>                         sdp := omit</span><br><span>          }</span><br><span>    }</span><br><span>@@ -1450,6 +1480,7 @@</span><br><span>                    imsi := "",</span><br><span>                        lchan_type := 0,</span><br><span>                     lchan_mode := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                      gcr := omit,</span><br><span>                         sdp := omit</span><br><span>          }</span><br><span>    }</span><br><span>@@ -1481,6 +1512,7 @@</span><br><span>                    imsi := ?,</span><br><span>                   lchan_type := 0,</span><br><span>                     lchan_mode := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                      gcr := *,</span><br><span>                    sdp := *</span><br><span>             }</span><br><span>    }</span><br><span>@@ -1529,6 +1561,7 @@</span><br><span>                    imsi := "",</span><br><span>                        lchan_type := 0,</span><br><span>                     lchan_mode := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                      gcr := omit,</span><br><span>                         sdp := omit</span><br><span>          }</span><br><span>    }</span><br><span>@@ -1561,6 +1594,7 @@</span><br><span>                    imsi := ?,</span><br><span>                   lchan_type := ?,</span><br><span>                     lchan_mode := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                      gcr := *,</span><br><span>                    sdp := *</span><br><span>             }</span><br><span>    }</span><br><span>@@ -1593,6 +1627,7 @@</span><br><span>                    imsi := ?,</span><br><span>                   lchan_type := ?,</span><br><span>                     lchan_mode := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                      gcr := *,</span><br><span>                    sdp := *</span><br><span>             }</span><br><span>    }</span><br><span>@@ -1625,6 +1660,7 @@</span><br><span>                    imsi := "",</span><br><span>                        lchan_type := 0,</span><br><span>                     lchan_mode := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                      gcr := omit,</span><br><span>                         sdp := omit</span><br><span>          }</span><br><span>    }</span><br><span>@@ -1657,6 +1693,7 @@</span><br><span>                    imsi := "",</span><br><span>                        lchan_type := 0,</span><br><span>                     lchan_mode := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                      gcr := omit,</span><br><span>                         sdp := omit</span><br><span>          }</span><br><span>    }</span><br><span>@@ -1697,6 +1734,7 @@</span><br><span>                    imsi := ?,</span><br><span>                   lchan_type := ?,</span><br><span>                     lchan_mode := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                      gcr := *,</span><br><span>                    sdp := *</span><br><span>             }</span><br><span>    }</span><br><span>@@ -1729,6 +1767,7 @@</span><br><span>                    imsi := "",</span><br><span>                        lchan_type := 0,</span><br><span>                     lchan_mode := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                      gcr := omit,</span><br><span>                         sdp := omit</span><br><span>          }</span><br><span>    }</span><br><span>@@ -1761,6 +1800,7 @@</span><br><span>                    imsi := "",</span><br><span>                        lchan_type := 0,</span><br><span>                     lchan_mode := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                      gcr := omit,</span><br><span>                         sdp := omit</span><br><span>          }</span><br><span>    }</span><br><span>@@ -1794,6 +1834,7 @@</span><br><span>                    imsi := ?,</span><br><span>                   lchan_type := ?,</span><br><span>                     lchan_mode := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                      gcr := *,</span><br><span>                    sdp := *</span><br><span>             }</span><br><span>    }</span><br><span>@@ -1826,6 +1867,7 @@</span><br><span>                    imsi := "",</span><br><span>                        lchan_type := 0,</span><br><span>                     lchan_mode := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                      gcr := omit,</span><br><span>                         sdp := omit</span><br><span>          }</span><br><span>    }</span><br><span>@@ -1859,6 +1901,7 @@</span><br><span>                    imsi := "",</span><br><span>                        lchan_type := 0,</span><br><span>                     lchan_mode := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                      gcr := *,</span><br><span>                    sdp := *</span><br><span>             }</span><br><span>    }</span><br><span>@@ -1899,6 +1942,7 @@</span><br><span>                    imsi := "",</span><br><span>                        lchan_type := 0,</span><br><span>                     lchan_mode := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                      gcr := omit,</span><br><span>                         sdp := omit</span><br><span>          }</span><br><span>    }</span><br><span>diff --git a/library/mncc.h b/library/mncc.h</span><br><span>index 1e45c37..f70f9bd 100644</span><br><span>--- a/library/mncc.h</span><br><span>+++ b/library/mncc.h</span><br><span>@@ -230,6 +230,7 @@</span><br><span> #define MNCC_F_CCCAP            0x0800</span><br><span> #define MNCC_F_KEYPAD         0x1000</span><br><span> #define MNCC_F_SIGNAL         0x2000</span><br><span style="color: hsl(120, 100%, 40%);">+#define MNCC_F_GCR              0x4000</span><br><span> </span><br><span> struct gsm_mncc {</span><br><span>      /* context based information */</span><br><span>@@ -267,7 +268,15 @@</span><br><span>       unsigned char   lchan_type;</span><br><span>  unsigned char   lchan_mode;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- char            sdp[1024];</span><br><span style="color: hsl(120, 100%, 40%);">+    union {</span><br><span style="color: hsl(120, 100%, 40%);">+               struct {</span><br><span style="color: hsl(120, 100%, 40%);">+                      char sdp[1024];</span><br><span style="color: hsl(120, 100%, 40%);">+               } v7;</span><br><span style="color: hsl(120, 100%, 40%);">+         struct {</span><br><span style="color: hsl(120, 100%, 40%);">+                      uint8_t gcr[16];</span><br><span style="color: hsl(120, 100%, 40%);">+                      char sdp[1024];</span><br><span style="color: hsl(120, 100%, 40%);">+               } v8;</span><br><span style="color: hsl(120, 100%, 40%);">+ };</span><br><span> };</span><br><span> </span><br><span> struct gsm_data_frame {</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/26008">change 26008</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/+/26008"/><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: I5488c5a4cc671e1d6a0d35b2ff4bdda0b0b48c00 </div>
<div style="display:none"> Gerrit-Change-Number: 26008 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: keith <keith@rhizomatica.org> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: osmith <osmith@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>