<p>Max <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/12492">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Harald Welte: Looks good to me, approved
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">LCLS: add string dump helpers<br><br>Add functions to dump LCLS (without GCR) and GCR. Dumping entire struct<br>results in inconveniently long string hence the separate functions. Both<br>use talloc functions so they expect caller to take care of providing<br>proper allocation context and freeing memory.<br><br>Change-Id: Ic3609224c8f3282d667e75f68bc20327e36eb9e6<br>---<br>M include/osmocom/gsm/gsm0808_utils.h<br>M src/gsm/gsm0808_utils.c<br>M src/gsm/gsm29205.c<br>M src/gsm/libosmogsm.map<br>M tests/gsm0808/gsm0808_test.c<br>M tests/gsm0808/gsm0808_test.ok<br>6 files changed, 54 insertions(+), 3 deletions(-)<br><br></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 e1e345d..2b48be7 100644</span><br><span>--- a/include/osmocom/gsm/gsm0808_utils.h</span><br><span>+++ b/include/osmocom/gsm/gsm0808_utils.h</span><br><span>@@ -68,6 +68,9 @@</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%);">+char *osmo_lcls_dump(const struct osmo_lcls *lcls);</span><br><span style="color: hsl(120, 100%, 40%);">+char *osmo_gcr_dump(const struct osmo_lcls *lcls);</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 54ec19c..606899e 100644</span><br><span>--- a/src/gsm/gsm0808_utils.c</span><br><span>+++ b/src/gsm/gsm0808_utils.c</span><br><span>@@ -28,6 +28,7 @@</span><br><span> #include <errno.h></span><br><span> #include <osmocom/gsm/protocol/gsm_08_08.h></span><br><span> #include <osmocom/gsm/gsm48.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/gsm/gsm0808.h></span><br><span> #include <osmocom/gsm/gsm0808_utils.h></span><br><span> </span><br><span> #define IP_V4_ADDR_LEN 4</span><br><span>@@ -591,6 +592,45 @@</span><br><span>       return ret;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static char dbuf[256];</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Dump LCLS parameters (GCR excluded) into string for printing.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] lcls pointer to the struct to print.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \returns string representation of LCLS or NULL on error. */</span><br><span style="color: hsl(120, 100%, 40%);">+char *osmo_lcls_dump(const struct osmo_lcls *lcls)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+        struct osmo_strbuf s = { .buf = dbuf, .len = 256 };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!lcls)</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%);">+        OSMO_STRBUF_PRINTF(s, "LCLS Config: %s, Control: %s, Correlation-Needed: %u",</span><br><span style="color: hsl(120, 100%, 40%);">+                          gsm0808_lcls_config_name(lcls->config),</span><br><span style="color: hsl(120, 100%, 40%);">+                    gsm0808_lcls_control_name(lcls->control),</span><br><span style="color: hsl(120, 100%, 40%);">+                          lcls->corr_needed);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   return dbuf;</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%);">+/*! Dump GCR struct into string for printing.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] lcls pointer to the struct to print.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \returns string representation of GCR or NULL on error. */</span><br><span style="color: hsl(120, 100%, 40%);">+char *osmo_gcr_dump(const struct osmo_lcls *lcls)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   struct osmo_strbuf s = { .buf = dbuf, .len = 256 };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!lcls)</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%);">+        if (lcls->gcr_available) {</span><br><span style="color: hsl(120, 100%, 40%);">+         OSMO_STRBUF_PRINTF(s, "GCR NetID 0x%s, ", osmo_hexdump_nospc(lcls->gcr.net, lcls->gcr.net_len));</span><br><span style="color: hsl(120, 100%, 40%);">+              /* osmo_hexdump() uses static buffers so we can't call it twice withing the same parameter list */</span><br><span style="color: hsl(120, 100%, 40%);">+                OSMO_STRBUF_PRINTF(s, "Node 0x%x, CallRefID 0x%s", lcls->gcr.node, osmo_hexdump_nospc(lcls->gcr.cr, 5));</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%);">+   return dbuf;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /*! Encode TS 08.08 Encryption Information IE</span><br><span>  *  \param[out] msg Message Buffer to which IE is to be appended</span><br><span>  *  \param[in] ei Encryption Information to be encoded</span><br><span>diff --git a/src/gsm/gsm29205.c b/src/gsm/gsm29205.c</span><br><span>index 0d34468..6ceb8ee 100644</span><br><span>--- a/src/gsm/gsm29205.c</span><br><span>+++ b/src/gsm/gsm29205.c</span><br><span>@@ -20,9 +20,12 @@</span><br><span>  *</span><br><span>  */</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#include "config.h"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #include <osmocom/gsm/protocol/gsm_08_08.h></span><br><span> #include <osmocom/gsm/gsm29205.h></span><br><span> #include <osmocom/gsm/gsm0808.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/utils.h></span><br><span> #include <osmocom/core/msgb.h></span><br><span> #include <osmocom/gsm/tlv.h></span><br><span> </span><br><span>diff --git a/src/gsm/libosmogsm.map b/src/gsm/libosmogsm.map</span><br><span>index 48757a7..2d47d7a 100644</span><br><span>--- a/src/gsm/libosmogsm.map</span><br><span>+++ b/src/gsm/libosmogsm.map</span><br><span>@@ -247,6 +247,8 @@</span><br><span> osmo_enc_gcr;</span><br><span> osmo_dec_gcr;</span><br><span> osmo_gcr_eq;</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_gcr_dump;</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_lcls_dump;</span><br><span> </span><br><span> gsm0858_rsl_ul_meas_enc;</span><br><span> </span><br><span>diff --git a/tests/gsm0808/gsm0808_test.c b/tests/gsm0808/gsm0808_test.c</span><br><span>index 65fef53..af90d00 100644</span><br><span>--- a/tests/gsm0808/gsm0808_test.c</span><br><span>+++ b/tests/gsm0808/gsm0808_test.c</span><br><span>@@ -760,11 +760,12 @@</span><br><span>         }</span><br><span> </span><br><span>      if (!osmo_gcr_eq(&lcls_out->gcr, &lcls_in.gcr)) {</span><br><span style="color: hsl(0, 100%, 40%);">-            printf("GCR parsed wrong.\n");</span><br><span style="color: hsl(120, 100%, 40%);">+              printf("GCR parsed wrong:\n\t%s\n\t%s\n", osmo_gcr_dump(lcls_out), osmo_gcr_dump(&lcls_in));</span><br><span>                 abort();</span><br><span>         }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- printf("\tdecoded %d bytes: %s\n", rc, rc == len ? "OK" : "FAIL");</span><br><span style="color: hsl(120, 100%, 40%);">+      printf("\tdecoded %d bytes: %s:\n%s\n", rc, rc == len ? "OK" : "FAIL", osmo_lcls_dump(lcls_out));</span><br><span style="color: hsl(120, 100%, 40%);">+       printf("\t%s\n", osmo_gcr_dump(lcls_out));</span><br><span>         msgb_free(msg);</span><br><span> }</span><br><span> </span><br><span>diff --git a/tests/gsm0808/gsm0808_test.ok b/tests/gsm0808/gsm0808_test.ok</span><br><span>index 7819e7a..e7df007 100644</span><br><span>--- a/tests/gsm0808/gsm0808_test.ok</span><br><span>+++ b/tests/gsm0808/gsm0808_test.ok</span><br><span>@@ -27,7 +27,9 @@</span><br><span> Testing prepend DTAP</span><br><span> Testing Global Call Reference IE encoder...</span><br><span>         15 bytes added: OK</span><br><span style="color: hsl(0, 100%, 40%);">-      decoded 15 bytes: OK</span><br><span style="color: hsl(120, 100%, 40%);">+  decoded 15 bytes: OK:</span><br><span style="color: hsl(120, 100%, 40%);">+LCLS Config: Not available, Control: Not available, Correlation-Needed: 1</span><br><span style="color: hsl(120, 100%, 40%);">+      GCR NetID 0xf1f2f3, Node 0xdead, CallRefID 0x4142434445</span><br><span> test_gsm0808_enc_dec_cell_id_list_lac: encoded: 1a 07 05 01 24 ab cd 56 78 (rc = 9)</span><br><span> ------- test_cell_id_list_add</span><br><span>      cell_id_list == CGI[0]:{}</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/12492">change 12492</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/12492"/><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: merged </div>
<div style="display:none"> Gerrit-Change-Id: Ic3609224c8f3282d667e75f68bc20327e36eb9e6 </div>
<div style="display:none"> Gerrit-Change-Number: 12492 </div>
<div style="display:none"> Gerrit-PatchSet: 15 </div>
<div style="display:none"> Gerrit-Owner: Max <msuraev@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder (1000002) </div>
<div style="display:none"> Gerrit-Reviewer: Max <msuraev@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Neels Hofmeyr <nhofmeyr@sysmocom.de> </div>