<p>dexter has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/libosmocore/+/22438">View Change</a></p><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, 64 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/38/22438/1</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 0810c8e..432805c 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>@@ -64,6 +64,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%);">+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..d89e526 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,66 @@</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%);">+ static __thread char rai_buf[32];</span><br><span style="color: hsl(120, 100%, 40%);">+     static __thread char plmn_buf[16];</span><br><span style="color: hsl(120, 100%, 40%);">+    static __thread char en_bid_buf[16];</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_routing_area_id rai;</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%);">+            rai.rac = ri->geran.raid.rac;</span><br><span style="color: hsl(120, 100%, 40%);">+              rai.lac.lac = ri->geran.raid.lac;</span><br><span style="color: hsl(120, 100%, 40%);">+          rai.lac.plmn.mcc = ri->geran.raid.mcc;</span><br><span style="color: hsl(120, 100%, 40%);">+             rai.lac.plmn.mnc_3_digits = ri->geran.raid.mnc_3_digits;</span><br><span style="color: hsl(120, 100%, 40%);">+           rai.lac.plmn.mnc = ri->geran.raid.mnc;</span><br><span style="color: hsl(120, 100%, 40%);">+             snprintf(buf, buf_len, "%s-%s-%u", bssgp_rim_routing_info_discr_str(ri->discr),</span><br><span style="color: hsl(120, 100%, 40%);">+                   osmo_rai_name2_buf(rai_buf, sizeof(rai_buf), &rai), ri->geran.cid);</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%);">+            rai.rac = ri->utran.raid.rac;</span><br><span style="color: hsl(120, 100%, 40%);">+              rai.lac.lac = ri->utran.raid.lac;</span><br><span style="color: hsl(120, 100%, 40%);">+          rai.lac.plmn.mcc = ri->utran.raid.mcc;</span><br><span style="color: hsl(120, 100%, 40%);">+             rai.lac.plmn.mnc_3_digits = ri->utran.raid.mnc_3_digits;</span><br><span style="color: hsl(120, 100%, 40%);">+           rai.lac.plmn.mnc = ri->utran.raid.mnc;</span><br><span style="color: hsl(120, 100%, 40%);">+             snprintf(buf, buf_len, "%s-%s-%u", bssgp_rim_routing_info_discr_str(ri->discr),</span><br><span style="color: hsl(120, 100%, 40%);">+                   osmo_rai_name2_buf(rai_buf, sizeof(rai_buf), &rai), ri->utran.rncid);</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_buf, sizeof(plmn_buf), &plmn), ri->eutran.tai.tac,</span><br><span style="color: hsl(120, 100%, 40%);">+                     osmo_hexdump_buf(en_bid_buf, sizeof(en_bid_buf), 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%);">+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: 1 </div>
<div style="display:none"> Gerrit-Owner: dexter <pmaier@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>