<p>Max has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/12491">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">LCLS: add allocator function<br><br>Change-Id: If67cf93ae3dd449e96156485fe1baaf013df3f77<br>---<br>M include/osmocom/gsm/gsm0808_utils.h<br>M src/gsm/gsm0808_utils.c<br>M src/gsm/libosmogsm.map<br>M tests/gsm0808/gsm0808_test.c<br>4 files changed, 32 insertions(+), 11 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/91/12491/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..2d86a7d 100644</span><br><span>--- a/include/osmocom/gsm/gsm0808_utils.h</span><br><span>+++ b/include/osmocom/gsm/gsm0808_utils.h</span><br><span>@@ -67,6 +67,8 @@</span><br><span>  bool corr_needed;                  /**< §3.2.2.118 Correlation-Not-Needed */</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+struct osmo_lcls *osmo_lcls_alloc(void *ctx);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> extern const struct value_string gsm0808_cell_id_discr_names[];</span><br><span> static inline const char *gsm0808_cell_id_discr_name(enum CELL_IDENT id_discr)</span><br><span> { return get_value_string(gsm0808_cell_id_discr_names, id_discr); }</span><br><span>diff --git a/src/gsm/gsm0808_utils.c b/src/gsm/gsm0808_utils.c</span><br><span>index 2a458c3..90388fa 100644</span><br><span>--- a/src/gsm/gsm0808_utils.c</span><br><span>+++ b/src/gsm/gsm0808_utils.c</span><br><span>@@ -575,6 +575,22 @@</span><br><span>      return enc;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/*! Dynamically allocate LCLS parameters struct.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] ctx context pointer to hang the result off</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \returns osmo_lcls pointer or NULL on error */</span><br><span style="color: hsl(120, 100%, 40%);">+struct osmo_lcls *osmo_lcls_alloc(void *ctx)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+        struct osmo_lcls *r = talloc_zero(ctx, struct osmo_lcls);</span><br><span style="color: hsl(120, 100%, 40%);">+     if (!r)</span><br><span style="color: hsl(120, 100%, 40%);">+               return NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        r->gcr = talloc_zero(r, struct osmo_gcr_parsed);</span><br><span style="color: hsl(120, 100%, 40%);">+   if (!r->gcr)</span><br><span style="color: hsl(120, 100%, 40%);">+               return NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        return r;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /*! Decode LCLS parameters to a given msgb, 3GPP TS 48.008 §3.2.2.115 - 3.2.2.120.</span><br><span>  *  \param[out] lcls Caller-provided memory to store LCLS-related data</span><br><span>  *  \param[in] tp IE values to be decoded</span><br><span>diff --git a/src/gsm/libosmogsm.map b/src/gsm/libosmogsm.map</span><br><span>index bb97878..6b5f0ae 100644</span><br><span>--- a/src/gsm/libosmogsm.map</span><br><span>+++ b/src/gsm/libosmogsm.map</span><br><span>@@ -38,6 +38,7 @@</span><br><span> abis_nm_get_sw_conf;</span><br><span> abis_nm_get_sw_desc_len;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+osmo_lcls_alloc;</span><br><span> osmo_sitype_strs;</span><br><span> osmo_c4;</span><br><span> osmo_get_rand_id;</span><br><span>diff --git a/tests/gsm0808/gsm0808_test.c b/tests/gsm0808/gsm0808_test.c</span><br><span>index 40e2b87..cb0df88 100644</span><br><span>--- a/tests/gsm0808/gsm0808_test.c</span><br><span>+++ b/tests/gsm0808/gsm0808_test.c</span><br><span>@@ -682,7 +682,7 @@</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(120, 100%, 40%);">+       struct osmo_gcr_parsed g = {</span><br><span>                 .net_len = 3,</span><br><span>                .net = { 0xf1, 0xf2, 0xf3 },</span><br><span>                 .node = 0xDEAD,</span><br><span>@@ -690,7 +690,7 @@</span><br><span>        };</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(120, 100%, 40%);">+    struct osmo_lcls *lcls_out, lcls_in = {</span><br><span>              .gcr = &g,</span><br><span>               .config = GSM0808_LCLS_CFG_NA,</span><br><span>               .control = GSM0808_LCLS_CSC_NA,</span><br><span>@@ -701,6 +701,8 @@</span><br><span>        if (!msg)</span><br><span>            return;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+   lcls_out = osmo_lcls_alloc(msg);</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,29 +716,29 @@</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.gcr->net_len != g.net_len) {</span><br><span style="color: hsl(0, 100%, 40%);">-            printf("Network ID length parsed wrong: %u != %u\n", lcls_out.gcr->net_len, g.net_len);</span><br><span style="color: hsl(120, 100%, 40%);">+  if (lcls_out->gcr->net_len != g.net_len) {</span><br><span style="color: hsl(120, 100%, 40%);">+              printf("Network ID length parsed wrong: %u != %u\n", lcls_out->gcr->net_len, g.net_len);</span><br><span>             abort();</span><br><span>     }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   if (lcls_out.gcr->node != g.node) {</span><br><span style="color: hsl(0, 100%, 40%);">-          printf("Node ID parsed wrong: 0x%X != 0x%X\n", lcls_out.gcr->node, g.node);</span><br><span style="color: hsl(120, 100%, 40%);">+      if (lcls_out->gcr->node != g.node) {</span><br><span style="color: hsl(120, 100%, 40%);">+            printf("Node ID parsed wrong: 0x%X != 0x%X\n", lcls_out->gcr->node, g.node);</span><br><span>                 abort();</span><br><span>     }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   if (memcmp(lcls_out.gcr->net, g.net, g.net_len) != 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-              printf("Network ID parsed wrong: %s\n", osmo_hexdump(lcls_out.gcr->net, lcls_out.gcr->net_len));</span><br><span style="color: hsl(120, 100%, 40%);">+      if (memcmp(lcls_out->gcr->net, g.net, g.net_len) != 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                printf("Network ID parsed wrong: %s\n", osmo_hexdump(lcls_out->gcr->net, lcls_out->gcr->net_len));</span><br><span>             abort();</span><br><span>     }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   if (memcmp(lcls_out.gcr->cr, g.cr, 5) != 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                printf("Call ref. ID parsed wrong: %s\n", osmo_hexdump(lcls_out.gcr->cr, 5));</span><br><span style="color: hsl(120, 100%, 40%);">+    if (memcmp(lcls_out->gcr->cr, g.cr, 5) != 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+          printf("Call ref. ID parsed wrong: %s\n", osmo_hexdump(lcls_out->gcr->cr, 5));</span><br><span>               abort();</span><br><span>     }</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/12491">change 12491</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/12491"/><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: If67cf93ae3dd449e96156485fe1baaf013df3f77 </div>
<div style="display:none"> Gerrit-Change-Number: 12491 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Max <msuraev@sysmocom.de> </div>