<p>Max has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/12568">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">LCLS: make GCR into static member of osmo_lcls<br><br>Most of the time we'll have GCR filled anyway so it make sense to have<br>it as static parameter instead of a pointer to separately allocated<br>structure. Update tests to cover both static and dynamic osmo_lcls<br>allocation variants.<br><br>Change-Id: I905c36d8455911c68c30bc429379b7313dd46aea<br>---<br>M include/osmocom/gsm/gsm0808_utils.h<br>M src/gsm/gsm0808_utils.c<br>M tests/gsm0808/gsm0808_test.c<br>3 files changed, 28 insertions(+), 24 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/68/12568/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/gsm/gsm0808_utils.h b/include/osmocom/gsm/gsm0808_utils.h</span><br><span>index 4a2233e..7c6f707 100644</span><br><span>--- a/include/osmocom/gsm/gsm0808_utils.h</span><br><span>+++ b/include/osmocom/gsm/gsm0808_utils.h</span><br><span>@@ -63,7 +63,8 @@</span><br><span> struct osmo_lcls {</span><br><span>       enum gsm0808_lcls_config config;   /**< §3.2.2.116 Configuration */</span><br><span>      enum gsm0808_lcls_control control; /**< §3.2.2.117 Connection Status Control */</span><br><span style="color: hsl(0, 100%, 40%);">-     struct osmo_gcr_parsed *gcr;       /**< §3.2.2.115 Global Call Reference */</span><br><span style="color: hsl(120, 100%, 40%);">+       struct osmo_gcr_parsed gcr;        /**< §3.2.2.115 Global Call Reference */</span><br><span style="color: hsl(120, 100%, 40%);">+       bool gcr_available;</span><br><span>  bool corr_needed;                  /**< §3.2.2.118 Correlation-Not-Needed */</span><br><span> };</span><br><span> </span><br><span>diff --git a/src/gsm/gsm0808_utils.c b/src/gsm/gsm0808_utils.c</span><br><span>index 2a458c3..9fcccae 100644</span><br><span>--- a/src/gsm/gsm0808_utils.c</span><br><span>+++ b/src/gsm/gsm0808_utils.c</span><br><span>@@ -551,8 +551,8 @@</span><br><span>    uint8_t enc = 0;</span><br><span> </span><br><span>         /* LCLS: §3.2.2.115 Global Call Reference */</span><br><span style="color: hsl(0, 100%, 40%);">-   if (lcls->gcr)</span><br><span style="color: hsl(0, 100%, 40%);">-               enc = gsm0808_enc_gcr(msg, lcls->gcr);</span><br><span style="color: hsl(120, 100%, 40%);">+     if (lcls->gcr_available)</span><br><span style="color: hsl(120, 100%, 40%);">+           enc = gsm0808_enc_gcr(msg, &lcls->gcr);</span><br><span> </span><br><span>   /* LCLS: §3.2.2.116 Configuration */</span><br><span>        if (lcls->config != GSM0808_LCLS_CFG_NA) {</span><br><span>@@ -581,10 +581,9 @@</span><br><span>  *  \returns GCR size or negative on error */</span><br><span> int gsm0808_dec_lcls(struct osmo_lcls *lcls, const struct tlv_parsed *tp)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- int ret = gsm0808_dec_gcr(lcls->gcr, tp);</span><br><span style="color: hsl(0, 100%, 40%);">-    if (ret < 0)</span><br><span style="color: hsl(0, 100%, 40%);">-         return ret;</span><br><span style="color: hsl(120, 100%, 40%);">+   int ret = gsm0808_dec_gcr(&lcls->gcr, tp);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ lcls->gcr_available = (ret < 0) ? false : true;</span><br><span>        lcls->config = tlvp_val8(tp, GSM0808_IE_LCLS_CONFIG, GSM0808_LCLS_CFG_NA);</span><br><span>        lcls->control = tlvp_val8(tp, GSM0808_IE_LCLS_CONN_STATUS_CTRL, GSM0808_LCLS_CSC_NA);</span><br><span>     lcls->corr_needed = TLVP_PRESENT(tp, GSM0808_IE_LCLS_CORR_NOT_NEEDED) ? false : true;</span><br><span>diff --git a/tests/gsm0808/gsm0808_test.c b/tests/gsm0808/gsm0808_test.c</span><br><span>index 546a487..76446ae 100644</span><br><span>--- a/tests/gsm0808/gsm0808_test.c</span><br><span>+++ b/tests/gsm0808/gsm0808_test.c</span><br><span>@@ -445,17 +445,17 @@</span><br><span>        struct sockaddr_in sin;</span><br><span>      struct gsm0808_speech_codec_list sc_list;</span><br><span>    uint32_t call_id = 0xDEADFACE;</span><br><span style="color: hsl(0, 100%, 40%);">-  struct osmo_gcr_parsed gcr = { .net_len = 3, .node = 0xFEED };</span><br><span>       uint8_t Kc[16];</span><br><span>      struct osmo_lcls lcls = {</span><br><span>            .config = GSM0808_LCLS_CFG_BOTH_WAY,</span><br><span>                 .control = GSM0808_LCLS_CSC_CONNECT,</span><br><span style="color: hsl(0, 100%, 40%);">-            .gcr = &gcr,</span><br><span style="color: hsl(120, 100%, 40%);">+              .gcr = { .net_len = 3, .node = 0xFEED },</span><br><span style="color: hsl(120, 100%, 40%);">+              .gcr_available = true,</span><br><span>               .corr_needed = false</span><br><span>         };</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  memset(gcr.cr, 'A', 5);</span><br><span style="color: hsl(0, 100%, 40%);">- memset(gcr.net, 'D', gcr.net_len);</span><br><span style="color: hsl(120, 100%, 40%);">+    memset(lcls.gcr.cr, 'A', 5);</span><br><span style="color: hsl(120, 100%, 40%);">+  memset(lcls.gcr.net, 'D', lcls.gcr.net_len);</span><br><span>         memset(Kc, 'E', 16);</span><br><span> </span><br><span>     memset(&ct, 0, sizeof(ct));</span><br><span>@@ -682,16 +682,16 @@</span><br><span>      };</span><br><span>   uint8_t len;</span><br><span>         struct msgb *msg;</span><br><span style="color: hsl(0, 100%, 40%);">-       struct osmo_gcr_parsed p = { 0 }, g = {</span><br><span style="color: hsl(0, 100%, 40%);">-         .net_len = 3,</span><br><span style="color: hsl(0, 100%, 40%);">-           .net = { 0xf1, 0xf2, 0xf3 },</span><br><span style="color: hsl(0, 100%, 40%);">-            .node = 0xDEAD,</span><br><span style="color: hsl(0, 100%, 40%);">-         .cr = { 0x41, 0x42, 0x43, 0x44, 0x45 },</span><br><span style="color: hsl(0, 100%, 40%);">- };</span><br><span>   int rc;</span><br><span>      struct tlv_parsed tp;</span><br><span style="color: hsl(0, 100%, 40%);">-   struct osmo_lcls lcls_out = { .gcr = &p }, lcls_in = {</span><br><span style="color: hsl(0, 100%, 40%);">-              .gcr = &g,</span><br><span style="color: hsl(120, 100%, 40%);">+        struct osmo_lcls *lcls_out, lcls_in = {</span><br><span style="color: hsl(120, 100%, 40%);">+               .gcr = {</span><br><span style="color: hsl(120, 100%, 40%);">+                      .net_len = 3,</span><br><span style="color: hsl(120, 100%, 40%);">+                 .net = { 0xf1, 0xf2, 0xf3 },</span><br><span style="color: hsl(120, 100%, 40%);">+                  .node = 0xDEAD,</span><br><span style="color: hsl(120, 100%, 40%);">+                       .cr = { 0x41, 0x42, 0x43, 0x44, 0x45 },</span><br><span style="color: hsl(120, 100%, 40%);">+               },</span><br><span style="color: hsl(120, 100%, 40%);">+            .gcr_available = true,</span><br><span>               .config = GSM0808_LCLS_CFG_NA,</span><br><span>               .control = GSM0808_LCLS_CSC_NA,</span><br><span>              .corr_needed = true,</span><br><span>@@ -701,6 +701,10 @@</span><br><span>  if (!msg)</span><br><span>            return;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+   lcls_out = talloc_zero(msg, struct osmo_lcls);</span><br><span style="color: hsl(120, 100%, 40%);">+        if (!lcls_out)</span><br><span style="color: hsl(120, 100%, 40%);">+                return;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>    len = gsm0808_enc_lcls(msg, &lcls_in);</span><br><span>   printf("Testing Global Call Reference IE encoder...\n\t%d bytes added: %s\n",</span><br><span>             len, len == ARRAY_SIZE(res) ? "OK" : "FAIL");</span><br><span>@@ -714,25 +718,25 @@</span><br><span>             abort();</span><br><span>     }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   rc = gsm0808_dec_lcls(&lcls_out, &tp);</span><br><span style="color: hsl(120, 100%, 40%);">+        rc = gsm0808_dec_lcls(lcls_out, &tp);</span><br><span>    if (rc < 0) {</span><br><span>             printf("decoding failed: %s [%s]\n", strerror(-rc), msgb_hexdump(msg));</span><br><span>            abort();</span><br><span>     }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   if (lcls_out.config != lcls_in.config) {</span><br><span style="color: hsl(120, 100%, 40%);">+      if (lcls_out->config != lcls_in.config) {</span><br><span>                 printf("LCLS Config parsed wrong: %s != %s\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                       gsm0808_lcls_config_name(lcls_out.config), gsm0808_lcls_config_name(lcls_in.config));</span><br><span style="color: hsl(120, 100%, 40%);">+                 gsm0808_lcls_config_name(lcls_out->config), gsm0808_lcls_config_name(lcls_in.config));</span><br><span>                 abort();</span><br><span>         }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   if (lcls_out.control != lcls_in.control) {</span><br><span style="color: hsl(120, 100%, 40%);">+    if (lcls_out->control != lcls_in.control) {</span><br><span>               printf("LCLS Control parsed wrong: %s != %s\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                      gsm0808_lcls_control_name(lcls_out.control), gsm0808_lcls_control_name(lcls_in.control));</span><br><span style="color: hsl(120, 100%, 40%);">+                     gsm0808_lcls_control_name(lcls_out->control), gsm0808_lcls_control_name(lcls_in.control));</span><br><span>                 abort();</span><br><span>         }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       if (!osmo_gcr_eq(lcls_out.gcr, lcls_in.gcr)) {</span><br><span style="color: hsl(120, 100%, 40%);">+        if (!osmo_gcr_eq(&lcls_out->gcr, &lcls_in.gcr)) {</span><br><span>                 printf("GCR parsed wrong.\n");</span><br><span>                 abort();</span><br><span>         }</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/12568">change 12568</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/12568"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: libosmocore </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I905c36d8455911c68c30bc429379b7313dd46aea </div>
<div style="display:none"> Gerrit-Change-Number: 12568 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Max <msuraev@sysmocom.de> </div>