<p>pespin <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/libosmocore/+/22438">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  pespin: Looks good to me, approved
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">gprs_bssgp_rim: add functions to convert a RIM-RI to a string<br><br>RIM routing formation structs can contain different variants of address<br>identifiers, so it is difficult for an API user to pick the _name()<br>function to generate a human readable string. Lets add<br>bssgp_rim_ri_name() and bssgp_rim_ri_name_buf() to make printing a<br>routing identifier easier.<br><br>Change-Id: Idca6bdccffe663aea71a0183ca3ea5bb5b59e702<br>Related: SYS#5103<br>---<br>M include/osmocom/gprs/gprs_bssgp_rim.h<br>M src/gb/gprs_bssgp_rim.c<br>M src/gb/libosmogb.map<br>3 files changed, 66 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/gprs/gprs_bssgp_rim.h b/include/osmocom/gprs/gprs_bssgp_rim.h</span><br><span>index 55341de..418c1bd 100644</span><br><span>--- a/include/osmocom/gprs/gprs_bssgp_rim.h</span><br><span>+++ b/include/osmocom/gprs/gprs_bssgp_rim.h</span><br><span>@@ -66,6 +66,8 @@</span><br><span>  * address type (discr) of variable length. */</span><br><span> #define BSSGP_RIM_ROUTING_INFO_MAXLEN 14</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+char *bssgp_rim_ri_name_buf(char *buf, size_t buf_len, const struct bssgp_rim_routing_info *ri);</span><br><span style="color: hsl(120, 100%, 40%);">+const char *bssgp_rim_ri_name(const struct bssgp_rim_routing_info *ri);</span><br><span> int bssgp_parse_rim_ri(struct bssgp_rim_routing_info *ri, const uint8_t *buf, unsigned int len);</span><br><span> int bssgp_create_rim_ri(uint8_t *buf, const struct bssgp_rim_routing_info *ri);</span><br><span> </span><br><span>diff --git a/src/gb/gprs_bssgp_rim.c b/src/gb/gprs_bssgp_rim.c</span><br><span>index 844268a..15d6e22 100644</span><br><span>--- a/src/gb/gprs_bssgp_rim.c</span><br><span>+++ b/src/gb/gprs_bssgp_rim.c</span><br><span>@@ -146,6 +146,68 @@</span><br><span>   return len;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/*! Encode a RIM Routing information into a human readable string.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[buf] user provided string buffer to store the resulting string.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[buf_len] maximum length of string buffer.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] ri user provided input data struct.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \returns pointer to the beginning of the resulting string stored in string buffer. */</span><br><span style="color: hsl(120, 100%, 40%);">+char *bssgp_rim_ri_name_buf(char *buf, size_t buf_len, const struct bssgp_rim_routing_info *ri)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ char plmn_str[16];</span><br><span style="color: hsl(120, 100%, 40%);">+    char enb_id_str[16];</span><br><span style="color: hsl(120, 100%, 40%);">+  char g_id_ps_str[32];</span><br><span style="color: hsl(120, 100%, 40%);">+ struct osmo_plmn_id plmn;</span><br><span style="color: hsl(120, 100%, 40%);">+     struct osmo_cell_global_id_ps g_id_ps;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      if (!ri)</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%);">+        switch (ri->discr) {</span><br><span style="color: hsl(120, 100%, 40%);">+       case BSSGP_RIM_ROUTING_INFO_GERAN:</span><br><span style="color: hsl(120, 100%, 40%);">+            g_id_ps.rai.rac = ri->geran.raid.rac;</span><br><span style="color: hsl(120, 100%, 40%);">+              g_id_ps.rai.lac.lac = ri->geran.raid.lac;</span><br><span style="color: hsl(120, 100%, 40%);">+          g_id_ps.rai.lac.plmn.mcc = ri->geran.raid.mcc;</span><br><span style="color: hsl(120, 100%, 40%);">+             g_id_ps.rai.lac.plmn.mnc_3_digits = ri->geran.raid.mnc_3_digits;</span><br><span style="color: hsl(120, 100%, 40%);">+           g_id_ps.rai.lac.plmn.mnc = ri->geran.raid.mnc;</span><br><span style="color: hsl(120, 100%, 40%);">+             g_id_ps.cell_identity = ri->geran.cid;</span><br><span style="color: hsl(120, 100%, 40%);">+             snprintf(buf, buf_len, "%s-%s", bssgp_rim_routing_info_discr_str(ri->discr),</span><br><span style="color: hsl(120, 100%, 40%);">+                      osmo_cgi_ps_name_buf(g_id_ps_str, sizeof(g_id_ps_str), &g_id_ps));</span><br><span style="color: hsl(120, 100%, 40%);">+               break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case BSSGP_RIM_ROUTING_INFO_UTRAN:</span><br><span style="color: hsl(120, 100%, 40%);">+            g_id_ps.rai.rac = ri->utran.raid.rac;</span><br><span style="color: hsl(120, 100%, 40%);">+              g_id_ps.rai.lac.lac = ri->utran.raid.lac;</span><br><span style="color: hsl(120, 100%, 40%);">+          g_id_ps.rai.lac.plmn.mcc = ri->utran.raid.mcc;</span><br><span style="color: hsl(120, 100%, 40%);">+             g_id_ps.rai.lac.plmn.mnc_3_digits = ri->utran.raid.mnc_3_digits;</span><br><span style="color: hsl(120, 100%, 40%);">+           g_id_ps.rai.lac.plmn.mnc = ri->utran.raid.mnc;</span><br><span style="color: hsl(120, 100%, 40%);">+             g_id_ps.cell_identity = ri->utran.rncid;</span><br><span style="color: hsl(120, 100%, 40%);">+           snprintf(buf, buf_len, "%s-%s", bssgp_rim_routing_info_discr_str(ri->discr),</span><br><span style="color: hsl(120, 100%, 40%);">+                      osmo_cgi_ps_name_buf(g_id_ps_str, sizeof(g_id_ps_str), &g_id_ps));</span><br><span style="color: hsl(120, 100%, 40%);">+               break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case BSSGP_RIM_ROUTING_INFO_EUTRAN:</span><br><span style="color: hsl(120, 100%, 40%);">+           plmn.mcc = ri->eutran.tai.mcc;</span><br><span style="color: hsl(120, 100%, 40%);">+             plmn.mnc = ri->eutran.tai.mnc;</span><br><span style="color: hsl(120, 100%, 40%);">+             plmn.mnc_3_digits = ri->eutran.tai.mnc_3_digits;</span><br><span style="color: hsl(120, 100%, 40%);">+           snprintf(buf, buf_len, "%s-%s-%u-%s", bssgp_rim_routing_info_discr_str(ri->discr),</span><br><span style="color: hsl(120, 100%, 40%);">+                        osmo_plmn_name_buf(plmn_str, sizeof(plmn_str), &plmn), ri->eutran.tai.tac,</span><br><span style="color: hsl(120, 100%, 40%);">+                     osmo_hexdump_buf(enb_id_str, sizeof(enb_id_str), ri->eutran.global_enb_id,</span><br><span style="color: hsl(120, 100%, 40%);">+                                          ri->eutran.global_enb_id_len, "", false));</span><br><span style="color: hsl(120, 100%, 40%);">+             break;</span><br><span style="color: hsl(120, 100%, 40%);">+        default:</span><br><span style="color: hsl(120, 100%, 40%);">+              snprintf(buf, buf_len, "invalid");</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 buf;</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%);">+/*! Encode a RIM Routing information into a human readable string.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] ri user provided input data struct.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \returns pointer to the resulting string. */</span><br><span style="color: hsl(120, 100%, 40%);">+const char *bssgp_rim_ri_name(const struct bssgp_rim_routing_info *ri)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ static __thread char rim_ri_buf[64];</span><br><span style="color: hsl(120, 100%, 40%);">+  return bssgp_rim_ri_name_buf(rim_ri_buf, sizeof(rim_ri_buf), ri);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /*! Decode a RAN Information Request Application Container for NACC (3GPP TS 48.018, section 11.3.63.1.1).</span><br><span>  *  \param[out] user provided memory for decoded data struct.</span><br><span>  *  \param[in] buf user provided memory with the encoded value data of the IE.</span><br><span>diff --git a/src/gb/libosmogb.map b/src/gb/libosmogb.map</span><br><span>index b4d7fdb..c6bbc78 100644</span><br><span>--- a/src/gb/libosmogb.map</span><br><span>+++ b/src/gb/libosmogb.map</span><br><span>@@ -35,6 +35,8 @@</span><br><span> bssgp_parse_rim_ri;</span><br><span> bssgp_ran_inf_app_id_strs;</span><br><span> bssgp_rim_routing_info_discr_strs;</span><br><span style="color: hsl(120, 100%, 40%);">+bssgp_rim_ri_name_buf;</span><br><span style="color: hsl(120, 100%, 40%);">+bssgp_rim_ri_name;</span><br><span> bssgp_set_bssgp_callback;</span><br><span> bssgp_tx_bvc_block;</span><br><span> bssgp_tx_bvc_reset;</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmocore/+/22438">change 22438</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/libosmocore/+/22438"/><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-Change-Id: Idca6bdccffe663aea71a0183ca3ea5bb5b59e702 </div>
<div style="display:none"> Gerrit-Change-Number: 22438 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </div>
<div style="display:none"> Gerrit-Owner: dexter <pmaier@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>