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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">gsm23003: Add MME domain name related helper functions<br><br>osmo_gen_mme_group_domain(), osmo_gen_mme_group_domain() and<br>osmo_gen_home_network_domain()<br><br>Change-Id: Ia882d9db05ec0037e593aeebea21bc31adb680bb<br>---<br>M include/osmocom/gsm/gsm23003.h<br>M include/osmocom/gsm/protocol/gsm_23_003.h<br>M src/gsm/gsm23003.c<br>M src/gsm/libosmogsm.map<br>M tests/gsm23003/gsm23003_test.c<br>M tests/gsm23003/gsm23003_test.ok<br>6 files changed, 185 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/gsm/gsm23003.h b/include/osmocom/gsm/gsm23003.h</span><br><span>index fd4f369..2f380ae 100644</span><br><span>--- a/include/osmocom/gsm/gsm23003.h</span><br><span>+++ b/include/osmocom/gsm/gsm23003.h</span><br><span>@@ -101,6 +101,7 @@</span><br><span> const char *osmo_lai_name(const struct osmo_location_area_id *lai);</span><br><span> const char *osmo_cgi_name(const struct osmo_cell_global_id *cgi);</span><br><span> const char *osmo_cgi_name2(const struct osmo_cell_global_id *cgi);</span><br><span style="color: hsl(120, 100%, 40%);">+const char *osmo_gummei_name(const struct osmo_gummei *gummei);</span><br><span> </span><br><span> void osmo_plmn_to_bcd(uint8_t *bcd_dst, const struct osmo_plmn_id *plmn);</span><br><span> void osmo_plmn_from_bcd(const uint8_t *bcd_src, struct osmo_plmn_id *plmn);</span><br><span>@@ -120,3 +121,9 @@</span><br><span> </span><br><span> int osmo_mnc_cmp(uint16_t a_mnc, bool a_mnc_3_digits, uint16_t b_mnc, bool b_mnc_3_digits);</span><br><span> int osmo_plmn_cmp(const struct osmo_plmn_id *a, const struct osmo_plmn_id *b);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+int osmo_gen_home_network_domain(char *out, const struct osmo_plmn_id *plmn);</span><br><span style="color: hsl(120, 100%, 40%);">+int osmo_parse_home_network_domain(struct osmo_plmn_id *out, const char *in);</span><br><span style="color: hsl(120, 100%, 40%);">+int osmo_gen_mme_domain(char *out, const struct osmo_gummei *gummei);</span><br><span style="color: hsl(120, 100%, 40%);">+int osmo_gen_mme_group_domain(char *out, uint16_t mmegi, const struct osmo_plmn_id *plmn);</span><br><span style="color: hsl(120, 100%, 40%);">+int osmo_parse_mme_domain(struct osmo_gummei *out, const char *in);</span><br><span>diff --git a/include/osmocom/gsm/protocol/gsm_23_003.h b/include/osmocom/gsm/protocol/gsm_23_003.h</span><br><span>index 0e66939..ee697ff 100644</span><br><span>--- a/include/osmocom/gsm/protocol/gsm_23_003.h</span><br><span>+++ b/include/osmocom/gsm/protocol/gsm_23_003.h</span><br><span>@@ -24,3 +24,9 @@</span><br><span>                                    GSM23003_IMEI_SNR_NUM_DIGITS + 1)</span><br><span> #define GSM23003_IMEISV_NUM_DIGITS        (GSM23003_IMEI_TAC_NUM_DIGITS + \</span><br><span>                                     GSM23003_IMEI_SNR_NUM_DIGITS + 2)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Chapter 19.2 "epc.mnc000.mcc000.3gppnetwork.org" */</span><br><span style="color: hsl(120, 100%, 40%);">+#define GSM23003_HOME_NETWORK_DOMAIN_LEN        33</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Chapter 19.4.2.4: "mmec00.mmegi0000.mme.epc.mnc000.mcc000.3gppnetwork.org" */</span><br><span style="color: hsl(120, 100%, 40%);">+#define GSM23003_MME_DOMAIN_LEN                       55</span><br><span>diff --git a/src/gsm/gsm23003.c b/src/gsm/gsm23003.c</span><br><span>index 2c3b21e..4fdad48 100644</span><br><span>--- a/src/gsm/gsm23003.c</span><br><span>+++ b/src/gsm/gsm23003.c</span><br><span>@@ -169,6 +169,14 @@</span><br><span>       bcd[0] = val % 10;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+const char *osmo_gummei_name(const struct osmo_gummei *gummei)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+        static char buf[32];</span><br><span style="color: hsl(120, 100%, 40%);">+  snprintf(buf, sizeof(buf), "%s-%04x-%02x", osmo_plmn_name(&gummei->plmn),</span><br><span style="color: hsl(120, 100%, 40%);">+             gummei->mme.group_id, gummei->mme.code);</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> /* Convert MCC + MNC to BCD representation</span><br><span>  * \param[out] bcd_dst caller-allocated memory for output</span><br><span>  * \param[in] mcc Mobile Country Code</span><br><span>@@ -297,3 +305,81 @@</span><br><span>          return 1;</span><br><span>    return osmo_mnc_cmp(a->mnc, a->mnc_3_digits, b->mnc, b->mnc_3_digits);</span><br><span> }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Generate TS 23.003 Section 19.2 Home Network Realm/Domain (text form)</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param out[out] caller-provided output buffer, at least 33 bytes long</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param plmn[in] Osmocom representation of PLMN ID (MCC + MNC)</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \returns number of characters printed (excluding NUL); negative on error */</span><br><span style="color: hsl(120, 100%, 40%);">+int osmo_gen_home_network_domain(char *out, const struct osmo_plmn_id *plmn)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  if (plmn->mcc > 999)</span><br><span style="color: hsl(120, 100%, 40%);">+            return -EINVAL;</span><br><span style="color: hsl(120, 100%, 40%);">+       if (plmn->mnc > 999)</span><br><span style="color: hsl(120, 100%, 40%);">+            return -EINVAL;</span><br><span style="color: hsl(120, 100%, 40%);">+       return sprintf(out, "epc.mnc%03u.mcc%03u.3gppnetwork.org", plmn->mnc, plmn->mcc);</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%);">+/*! Parse a TS 23.003 Section 19.2 Home Network Realm/Domain (text form) into a \ref osmo_plmn_id</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param out[out] caller-allocated output structure</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param in[in] character string representation to be parsed</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \returns 0 on success; negative on error */</span><br><span style="color: hsl(120, 100%, 40%);">+int osmo_parse_home_network_domain(struct osmo_plmn_id *out, const char *in)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+    int rc;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     memset(out, 0, sizeof(*out));</span><br><span style="color: hsl(120, 100%, 40%);">+ rc = sscanf(in, "epc.mnc%03hu.mcc%03hu.3gppnetwork.org", &out->mnc, &out->mcc);</span><br><span style="color: hsl(120, 100%, 40%);">+       if (rc < 0)</span><br><span style="color: hsl(120, 100%, 40%);">+                return rc;</span><br><span style="color: hsl(120, 100%, 40%);">+    if (rc != 2)</span><br><span style="color: hsl(120, 100%, 40%);">+          return -EINVAL;</span><br><span style="color: hsl(120, 100%, 40%);">+       return 0;</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%);">+/*! Generate TS 23.003 Section 19.4.2.4 MME Domain (text form)</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param out[out] caller-provided output buffer, at least 56 bytes long</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param gummei[in] Structure representing the Globally Unique MME Identifier</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \returns number of characters printed (excluding NUL); negative on error */</span><br><span style="color: hsl(120, 100%, 40%);">+int osmo_gen_mme_domain(char *out, const struct osmo_gummei *gummei)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  char domain[GSM23003_HOME_NETWORK_DOMAIN_LEN+1];</span><br><span style="color: hsl(120, 100%, 40%);">+      int rc;</span><br><span style="color: hsl(120, 100%, 40%);">+       rc = osmo_gen_home_network_domain(domain, &gummei->plmn);</span><br><span style="color: hsl(120, 100%, 40%);">+      if (rc < 0)</span><br><span style="color: hsl(120, 100%, 40%);">+                return rc;</span><br><span style="color: hsl(120, 100%, 40%);">+    return sprintf(out, "mmec%02x.mmegi%04x.mme.%s", gummei->mme.code, gummei->mme.group_id, domain);</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%);">+/*! Parse a TS 23.003 Section 19.4.2.4 MME Domain (text form) into a \ref osmo_gummei</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param out[out] caller-allocated output GUMMEI structure</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param in[in] character string representation to be parsed</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \returns 0 on success; negative on error */</span><br><span style="color: hsl(120, 100%, 40%);">+int osmo_parse_mme_domain(struct osmo_gummei *out, const char *in)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   int rc;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     memset(out, 0, sizeof(*out));</span><br><span style="color: hsl(120, 100%, 40%);">+ rc = sscanf(in, "mmec%02hhx.mmegi%04hx.mme.epc.mnc%03hu.mcc%03hu.3gppnetwork.org",</span><br><span style="color: hsl(120, 100%, 40%);">+              &out->mme.code, &out->mme.group_id,</span><br><span style="color: hsl(120, 100%, 40%);">+             &out->plmn.mnc, &out->plmn.mcc);</span><br><span style="color: hsl(120, 100%, 40%);">+    if (rc < 0)</span><br><span style="color: hsl(120, 100%, 40%);">+                return rc;</span><br><span style="color: hsl(120, 100%, 40%);">+    if (rc != 4)</span><br><span style="color: hsl(120, 100%, 40%);">+          return -EINVAL;</span><br><span style="color: hsl(120, 100%, 40%);">+       return 0;</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%);">+/*! Generate TS 23.003 Section 19.4.2.4 MME Group Domain (text form)</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param out[out] caller-provided output buffer, at least 56 bytes long</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param mmegi[in] MME Group Identifier</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param plmn[in] Osmocom representation of PLMN ID (MCC + MNC)</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \returns number of characters printed (excluding NUL); negative on error */</span><br><span style="color: hsl(120, 100%, 40%);">+int osmo_gen_mme_group_domain(char *out, uint16_t mmegi, const struct osmo_plmn_id *plmn)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  char domain[GSM23003_HOME_NETWORK_DOMAIN_LEN+1];</span><br><span style="color: hsl(120, 100%, 40%);">+      int rc;</span><br><span style="color: hsl(120, 100%, 40%);">+       rc = osmo_gen_home_network_domain(domain, plmn);</span><br><span style="color: hsl(120, 100%, 40%);">+      if (rc < 0)</span><br><span style="color: hsl(120, 100%, 40%);">+                return rc;</span><br><span style="color: hsl(120, 100%, 40%);">+    return sprintf(out, "mmegi%04x.mme.%s", mmegi, domain);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span>diff --git a/src/gsm/libosmogsm.map b/src/gsm/libosmogsm.map</span><br><span>index 3cc2ec5..4813e13 100644</span><br><span>--- a/src/gsm/libosmogsm.map</span><br><span>+++ b/src/gsm/libosmogsm.map</span><br><span>@@ -315,9 +315,15 @@</span><br><span> osmo_rai_name;</span><br><span> osmo_cgi_name;</span><br><span> osmo_cgi_name2;</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_gummei_name;</span><br><span> osmo_mnc_from_str;</span><br><span> osmo_mnc_cmp;</span><br><span> osmo_plmn_cmp;</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_gen_home_network_domain;</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_parse_home_network_domain;</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_gen_mme_domain;</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_parse_mme_domain;</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_gen_mme_group_domain;</span><br><span> gsm48_chan_mode_names;</span><br><span> gsm_chan_t_names;</span><br><span> gsm48_pdisc_names;</span><br><span>diff --git a/tests/gsm23003/gsm23003_test.c b/tests/gsm23003/gsm23003_test.c</span><br><span>index 947aa18..79965cf 100644</span><br><span>--- a/tests/gsm23003/gsm23003_test.c</span><br><span>+++ b/tests/gsm23003/gsm23003_test.c</span><br><span>@@ -24,8 +24,10 @@</span><br><span> #include <stdio.h></span><br><span> #include <errno.h></span><br><span> #include <strings.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <string.h></span><br><span> </span><br><span> #include <osmocom/gsm/gsm23003.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/gsm/protocol/gsm_23_003.h></span><br><span> #include <osmocom/core/utils.h></span><br><span> </span><br><span> #define BOOL_STR(b) ((b)? "true" : "false")</span><br><span>@@ -170,6 +172,76 @@</span><br><span>      return pass;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static bool test_gummei_name()</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+      static const struct osmo_gummei gummei = {</span><br><span style="color: hsl(120, 100%, 40%);">+            .plmn = { .mcc = 901, .mnc = 70 },</span><br><span style="color: hsl(120, 100%, 40%);">+            .mme = { .group_id = 0xA123, .code = 0xB1 }</span><br><span style="color: hsl(120, 100%, 40%);">+   };</span><br><span style="color: hsl(120, 100%, 40%);">+    const char *out;</span><br><span style="color: hsl(120, 100%, 40%);">+      bool pass = true;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   out = osmo_gummei_name(&gummei);</span><br><span style="color: hsl(120, 100%, 40%);">+  printf("%s\n", out);</span><br><span style="color: hsl(120, 100%, 40%);">+        if (strcmp(out, "901-70-a123-b1"))</span><br><span style="color: hsl(120, 100%, 40%);">+          pass = false;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       return pass;</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%);">+static bool test_domain_gen()</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   static const struct osmo_gummei gummei = {</span><br><span style="color: hsl(120, 100%, 40%);">+            .plmn = { .mcc = 901, .mnc = 70 },</span><br><span style="color: hsl(120, 100%, 40%);">+            .mme = { .group_id = 0xA123, .code = 0xB1 }</span><br><span style="color: hsl(120, 100%, 40%);">+   };</span><br><span style="color: hsl(120, 100%, 40%);">+    char out[GSM23003_MME_DOMAIN_LEN];</span><br><span style="color: hsl(120, 100%, 40%);">+    bool pass = true;</span><br><span style="color: hsl(120, 100%, 40%);">+     int rc;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     rc = osmo_gen_home_network_domain(out, &gummei.plmn);</span><br><span style="color: hsl(120, 100%, 40%);">+     if (rc < 0)</span><br><span style="color: hsl(120, 100%, 40%);">+                pass = false;</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("%s -> %s\n", osmo_plmn_name(&gummei.plmn), out);</span><br><span style="color: hsl(120, 100%, 40%);">+     if (strcmp(out, "epc.mnc070.mcc901.3gppnetwork.org"))</span><br><span style="color: hsl(120, 100%, 40%);">+               pass = false;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       rc = osmo_gen_mme_domain(out, &gummei);</span><br><span style="color: hsl(120, 100%, 40%);">+   printf("%s -> %s\n", osmo_gummei_name(&gummei), out);</span><br><span style="color: hsl(120, 100%, 40%);">+        if (strcmp(out, "mmecb1.mmegia123.mme.epc.mnc070.mcc901.3gppnetwork.org"))</span><br><span style="color: hsl(120, 100%, 40%);">+          pass = false;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       return pass;</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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static bool test_domain_parse()</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+       static const char *mme_dom_valid = "mmec01.mmegiA001.mme.epc.mnc070.mcc901.3gppnetwork.org";</span><br><span style="color: hsl(120, 100%, 40%);">+        static const char *home_dom_valid = "epc.mnc070.mcc901.3gppnetwork.org";</span><br><span style="color: hsl(120, 100%, 40%);">+    struct osmo_gummei gummei;</span><br><span style="color: hsl(120, 100%, 40%);">+    struct osmo_plmn_id plmn;</span><br><span style="color: hsl(120, 100%, 40%);">+     bool pass = true;</span><br><span style="color: hsl(120, 100%, 40%);">+     int rc;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     rc = osmo_parse_home_network_domain(&plmn, home_dom_valid);</span><br><span style="color: hsl(120, 100%, 40%);">+       if (rc < 0)</span><br><span style="color: hsl(120, 100%, 40%);">+                pass = false;</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("%s -> %s\n", home_dom_valid, osmo_plmn_name(&plmn));</span><br><span style="color: hsl(120, 100%, 40%);">+ if (plmn.mcc != 901 || plmn.mnc != 70)</span><br><span style="color: hsl(120, 100%, 40%);">+                pass = false;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       rc = osmo_parse_mme_domain(&gummei, mme_dom_valid);</span><br><span style="color: hsl(120, 100%, 40%);">+       if (rc < 0)</span><br><span style="color: hsl(120, 100%, 40%);">+                pass = false;</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("%s -> %s\n", mme_dom_valid, osmo_gummei_name(&gummei));</span><br><span style="color: hsl(120, 100%, 40%);">+      if (gummei.plmn.mcc != 901 || gummei.plmn.mnc != 70 ||</span><br><span style="color: hsl(120, 100%, 40%);">+            gummei.mme.group_id != 0xA001 || gummei.mme.code != 1)</span><br><span style="color: hsl(120, 100%, 40%);">+            pass = false;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       return pass;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> int main(int argc, char **argv)</span><br><span> {</span><br><span>    bool pass = true;</span><br><span>@@ -177,6 +249,9 @@</span><br><span>      pass = pass && test_valid_imsi();</span><br><span>    pass = pass && test_valid_msisdn();</span><br><span>  pass = pass && test_mnc_from_str();</span><br><span style="color: hsl(120, 100%, 40%);">+   pass = pass && test_gummei_name();</span><br><span style="color: hsl(120, 100%, 40%);">+    pass = pass && test_domain_gen();</span><br><span style="color: hsl(120, 100%, 40%);">+     pass = pass && test_domain_parse();</span><br><span> </span><br><span>      OSMO_ASSERT(pass);</span><br><span> </span><br><span>diff --git a/tests/gsm23003/gsm23003_test.ok b/tests/gsm23003/gsm23003_test.ok</span><br><span>index b435f45..c64f515 100644</span><br><span>--- a/tests/gsm23003/gsm23003_test.ok</span><br><span>+++ b/tests/gsm23003/gsm23003_test.ok</span><br><span>@@ -59,3 +59,8 @@</span><br><span> 13: " 023" rc=-22 mnc=0 mnc_3_digits=0 pass</span><br><span> 14: "023 " rc=-22 mnc=0 mnc_3_digits=0 pass</span><br><span> 15: "023 " rc=-22 mnc=0 mnc_3_digits=0 pass</span><br><span style="color: hsl(120, 100%, 40%);">+901-70-a123-b1</span><br><span style="color: hsl(120, 100%, 40%);">+901-70 -> epc.mnc070.mcc901.3gppnetwork.org</span><br><span style="color: hsl(120, 100%, 40%);">+901-70-a123-b1 -> mmecb1.mmegia123.mme.epc.mnc070.mcc901.3gppnetwork.org</span><br><span style="color: hsl(120, 100%, 40%);">+epc.mnc070.mcc901.3gppnetwork.org -> 901-70</span><br><span style="color: hsl(120, 100%, 40%);">+mmec01.mmegiA001.mme.epc.mnc070.mcc901.3gppnetwork.org -> 901-70-a001-01</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/11411">change 11411</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/11411"/><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: Ia882d9db05ec0037e593aeebea21bc31adb680bb </div>
<div style="display:none"> Gerrit-Change-Number: 11411 </div>
<div style="display:none"> Gerrit-PatchSet: 2 </div>
<div style="display:none"> Gerrit-Owner: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder (1000002) </div>