<p>laforge <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/libosmocore/+/12452">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  laforge: Looks good to me, but someone else must approve
  pespin: Looks good to me, approved
  fixeria: Looks good to me, but someone else must approve
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">gsup: add OSMO_GSUP_SUPPORTED_RAT_TYPES_IE and OSMO_GSUP_CURRENT_RAT_TYPE_IE<br><br>OSMO_GSUP_SUPPORTED_RAT_TYPES_IE corresponds to the Supported RAT Types<br>Indicator from 3GPP TS 29.002. See 8.1.2 MAP_UPDATE_LOCATION service,<br>which indicates the capabilities of the MSC/VLR to the HLR.<br><br>So far, have room for eight RAT types in the gsup_msg. That is an arbitrary<br>random choice without any rationale.<br><br>OSMO_GSUP_CURRENT_RAT_TYPE_IE is useful to communicate the currently<br>used RAN / RAT type of the current subscriber during Location Updating Request.<br><br>Change-Id: I93850710ab55a605bf61b95063a69682a2899bb1<br>---<br>M include/osmocom/gsm/gsup.h<br>M src/gsm/gsup.c<br>M tests/gsup/gsup_test.err<br>3 files changed, 49 insertions(+), 7 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/gsm/gsup.h b/include/osmocom/gsm/gsup.h</span><br><span>index be85662..49ddb74 100644</span><br><span>--- a/include/osmocom/gsm/gsup.h</span><br><span>+++ b/include/osmocom/gsm/gsup.h</span><br><span>@@ -45,6 +45,7 @@</span><br><span> #include <osmocom/gsm/protocol/gsm_03_40.h></span><br><span> #include <osmocom/gsm/protocol/gsm_04_08_gprs.h></span><br><span> #include <osmocom/gsm/protocol/gsm_08_08.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/gsm/gsm_utils.h></span><br><span> #include <osmocom/crypt/auth.h></span><br><span> </span><br><span> #define OSMO_GSUP_PORT 4222</span><br><span>@@ -86,6 +87,8 @@</span><br><span>        OSMO_GSUP_AUTS_IE                       = 0x26,</span><br><span>      OSMO_GSUP_RES_IE                        = 0x27,</span><br><span>      OSMO_GSUP_CN_DOMAIN_IE                  = 0x28,</span><br><span style="color: hsl(120, 100%, 40%);">+       OSMO_GSUP_SUPPORTED_RAT_TYPES_IE        = 0x29, /* supported RAT types */</span><br><span style="color: hsl(120, 100%, 40%);">+     OSMO_GSUP_CURRENT_RAT_TYPE_IE           = 0x2a, /* currently used RAT type */</span><br><span> </span><br><span>    OSMO_GSUP_SESSION_ID_IE                 = 0x30,</span><br><span>      OSMO_GSUP_SESSION_STATE_IE              = 0x31,</span><br><span>@@ -373,6 +376,10 @@</span><br><span> </span><br><span>   /*! Session Management cause as of 3GPP TS 24.008 10.5.6.6 / Table 10.5.157. */</span><br><span>      enum gsm48_gsm_cause            cause_sm;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   enum osmo_rat_type              current_rat_type;</span><br><span style="color: hsl(120, 100%, 40%);">+     enum osmo_rat_type              supported_rat_types[8]; /*!< arbitrary choice */</span><br><span style="color: hsl(120, 100%, 40%);">+   size_t                          supported_rat_types_len;</span><br><span> };</span><br><span> </span><br><span> int osmo_gsup_decode(const uint8_t *data, size_t data_len,</span><br><span>diff --git a/src/gsm/gsup.c b/src/gsm/gsup.c</span><br><span>index 2e6690e..2f9d85d 100644</span><br><span>--- a/src/gsm/gsup.c</span><br><span>+++ b/src/gsm/gsup.c</span><br><span>@@ -297,6 +297,7 @@</span><br><span>               struct osmo_gsup_message *gsup_msg)</span><br><span> {</span><br><span>        int rc;</span><br><span style="color: hsl(120, 100%, 40%);">+       int i;</span><br><span>       uint8_t tag;</span><br><span>         /* the shift/match functions expect non-const pointers, but we'll</span><br><span>         * either copy the data or cast pointers back to const before returning</span><br><span>@@ -459,6 +460,21 @@</span><br><span>                       gsup_msg->cn_domain = *value;</span><br><span>                     break;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+            case OSMO_GSUP_SUPPORTED_RAT_TYPES_IE:</span><br><span style="color: hsl(120, 100%, 40%);">+                        if (value_len > ARRAY_SIZE(gsup_msg->supported_rat_types)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                            LOGP(DLGSUP, LOGL_ERROR, "nr of supported RAT types %zu > %zu\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                                        value_len, ARRAY_SIZE(gsup_msg->supported_rat_types));</span><br><span style="color: hsl(120, 100%, 40%);">+                             return -GMM_CAUSE_COND_IE_ERR;</span><br><span style="color: hsl(120, 100%, 40%);">+                        }</span><br><span style="color: hsl(120, 100%, 40%);">+                     for (i = 0; i < value_len; i++)</span><br><span style="color: hsl(120, 100%, 40%);">+                            gsup_msg->supported_rat_types[i] = value[i];</span><br><span style="color: hsl(120, 100%, 40%);">+                       gsup_msg->supported_rat_types_len = value_len;</span><br><span style="color: hsl(120, 100%, 40%);">+                     break;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+              case OSMO_GSUP_CURRENT_RAT_TYPE_IE:</span><br><span style="color: hsl(120, 100%, 40%);">+                   gsup_msg->current_rat_type = *value;</span><br><span style="color: hsl(120, 100%, 40%);">+                       break;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>             case OSMO_GSUP_CHARG_CHAR_IE:</span><br><span>                        gsup_msg->pdp_charg_enc = value;</span><br><span>                  gsup_msg->pdp_charg_enc_len = value_len;</span><br><span>@@ -856,6 +872,25 @@</span><br><span>   if ((u8 = gsup_msg->cause_sm))</span><br><span>            msgb_tlv_put(msg, OSMO_GSUP_CAUSE_SM_IE, sizeof(u8), &u8);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+    if (gsup_msg->supported_rat_types_len) {</span><br><span style="color: hsl(120, 100%, 40%);">+           int i;</span><br><span style="color: hsl(120, 100%, 40%);">+                uint8_t *len = msgb_tl_put(msg, OSMO_GSUP_SUPPORTED_RAT_TYPES_IE);</span><br><span style="color: hsl(120, 100%, 40%);">+            *len = gsup_msg->supported_rat_types_len;</span><br><span style="color: hsl(120, 100%, 40%);">+          for (i = 0; i < gsup_msg->supported_rat_types_len; i++) {</span><br><span style="color: hsl(120, 100%, 40%);">+                       if (!gsup_msg->supported_rat_types[i] ||</span><br><span style="color: hsl(120, 100%, 40%);">+                       gsup_msg->supported_rat_types[i] >= OSMO_RAT_COUNT) {</span><br><span style="color: hsl(120, 100%, 40%);">+                               LOGP(DLGSUP, LOGL_ERROR, "Failed to encode RAT type %s (nr %d)\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                               osmo_rat_type_name(gsup_msg->supported_rat_types[i]), i);</span><br><span style="color: hsl(120, 100%, 40%);">+                             return -EINVAL;</span><br><span style="color: hsl(120, 100%, 40%);">+                       }</span><br><span style="color: hsl(120, 100%, 40%);">+                     msgb_v_put(msg, gsup_msg->supported_rat_types[i]);</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%);">+     if (gsup_msg->current_rat_type != OSMO_RAT_UNKNOWN) {</span><br><span style="color: hsl(120, 100%, 40%);">+              u8 = gsup_msg->current_rat_type;</span><br><span style="color: hsl(120, 100%, 40%);">+           msgb_tlv_put(msg, OSMO_GSUP_CURRENT_RAT_TYPE_IE, sizeof(u8), &u8);</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  return 0;</span><br><span> }</span><br><span> </span><br><span>diff --git a/tests/gsup/gsup_test.err b/tests/gsup/gsup_test.err</span><br><span>index e5fe6ee..1da3964 100644</span><br><span>--- a/tests/gsup/gsup_test.err</span><br><span>+++ b/tests/gsup/gsup_test.err</span><br><span>@@ -157,27 +157,27 @@</span><br><span> DLGSUP Stopping DLGSUP logging</span><br><span>   message 0: tested 3584 modifications, 771 parse failures</span><br><span>   message 1: tested 3584 modifications, 770 parse failures</span><br><span style="color: hsl(0, 100%, 40%);">-  message 2: tested 21248 modifications, 2575 parse failures</span><br><span style="color: hsl(120, 100%, 40%);">+  message 2: tested 21248 modifications, 2577 parse failures</span><br><span>   message 3: tested 2816 modifications, 510 parse failures</span><br><span>   message 4: tested 3584 modifications, 770 parse failures</span><br><span style="color: hsl(0, 100%, 40%);">-  message 5: tested 20736 modifications, 4023 parse failures</span><br><span style="color: hsl(120, 100%, 40%);">+  message 5: tested 20736 modifications, 4025 parse failures</span><br><span>   message 6: tested 3584 modifications, 771 parse failures</span><br><span>   message 7: tested 3584 modifications, 770 parse failures</span><br><span>   message 8: tested 2816 modifications, 510 parse failures</span><br><span>   message 9: tested 2816 modifications, 510 parse failures</span><br><span>   message 10: tested 3584 modifications, 770 parse failures</span><br><span>   message 11: tested 3328 modifications, 770 parse failures</span><br><span style="color: hsl(0, 100%, 40%);">-  message 12: tested 54016 modifications, 4626 parse failures</span><br><span style="color: hsl(0, 100%, 40%);">-  message 13: tested 11520 modifications, 1026 parse failures</span><br><span style="color: hsl(120, 100%, 40%);">+  message 12: tested 54016 modifications, 4628 parse failures</span><br><span style="color: hsl(120, 100%, 40%);">+  message 13: tested 11520 modifications, 1028 parse failures</span><br><span>   message 14: tested 5120 modifications, 1030 parse failures</span><br><span style="color: hsl(0, 100%, 40%);">-  message 15: tested 10752 modifications, 1262 parse failures</span><br><span style="color: hsl(120, 100%, 40%);">+  message 15: tested 10752 modifications, 1263 parse failures</span><br><span>   message 16: tested 7680 modifications, 1271 parse failures</span><br><span>   message 17: tested 8448 modifications, 2053 parse failures</span><br><span style="color: hsl(0, 100%, 40%);">-  message 18: tested 11264 modifications, 2307 parse failures</span><br><span style="color: hsl(120, 100%, 40%);">+  message 18: tested 11264 modifications, 2308 parse failures</span><br><span>   message 19: tested 5120 modifications, 1031 parse failures</span><br><span>   message 20: tested 4352 modifications, 1030 parse failures</span><br><span>   message 21: tested 3584 modifications, 771 parse failures</span><br><span style="color: hsl(0, 100%, 40%);">-  message 22: tested 5632 modifications, 771 parse failures</span><br><span style="color: hsl(120, 100%, 40%);">+  message 22: tested 5632 modifications, 772 parse failures</span><br><span>   message 23: tested 3584 modifications, 770 parse failures</span><br><span>   message 24: tested 3584 modifications, 771 parse failures</span><br><span>   message 25: tested 11264 modifications, 2058 parse failures</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmocore/+/12452">change 12452</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/+/12452"/><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: I93850710ab55a605bf61b95063a69682a2899bb1 </div>
<div style="display:none"> Gerrit-Change-Number: 12452 </div>
<div style="display:none"> Gerrit-PatchSet: 4 </div>
<div style="display:none"> Gerrit-Owner: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: fixeria <axilirator@gmail.com> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>