<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bsc/+/23753">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  laforge: 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;">SRVCC: Parse Last Used E-UTRAN PLMN Id in Handover Request<br><br>Whenever SRVCC EUTRAN->GERAN is performed by the CN, it will set the<br>Last Used E-UTRAN PLMN Id in order for the BSS to inform the MS<br>about EUTRAN neighbors once the call is over.<br>The last part (sending EUTRAN neighs) is already implemented, since same<br>thing is done as per CSFB. However, we lacked the first part, where the<br>EUTRAN PLMN Id is recorded for later use.<br><br>Actually, in both cases, we end up building the list of neighbors<br>without taking into accound the PLMN value (hence no filtering of<br>configured neighs), but it only sends such a list if any PLMN was stored<br>there, which means this patch is still necessary for a quick fallback to<br>4G after the call is over.<br><br>Related: SYS#5337<br>Depends: libosmocore.git Change-Id I0e55e947b6fef6dad0cf1a6c16b781bef4cc76c5<br>Change-Id: Ia5008f11a4c36ef8085a2037d4abddd131086e6e<br>---<br>M TODO-RELEASE<br>M include/osmocom/bsc/gsm_data.h<br>M src/osmo-bsc/handover_fsm.c<br>3 files changed, 39 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/TODO-RELEASE b/TODO-RELEASE</span><br><span>index 1a72401..de9e62c 100644</span><br><span>--- a/TODO-RELEASE</span><br><span>+++ b/TODO-RELEASE</span><br><span>@@ -8,3 +8,4 @@</span><br><span> # If any interfaces have been removed or changed since the last public release: c:r:0.</span><br><span> #library     what            description / commit summary line</span><br><span> libosmocore        >1.5.1               needs osmo_bts_features_name(), osmo_bts_features_desc()</span><br><span style="color: hsl(120, 100%, 40%);">+libosmogsm    >1.5.1            enum entry GSM0808_FE_IE_LAST_USED_EUTRAN_PLMN_ID</span><br><span>diff --git a/include/osmocom/bsc/gsm_data.h b/include/osmocom/bsc/gsm_data.h</span><br><span>index 448098b..0bc881b 100644</span><br><span>--- a/include/osmocom/bsc/gsm_data.h</span><br><span>+++ b/include/osmocom/bsc/gsm_data.h</span><br><span>@@ -202,6 +202,8 @@</span><br><span>    uint16_t msc_assigned_cic;</span><br><span>   char msc_assigned_rtp_addr[INET6_ADDRSTRLEN];</span><br><span>        uint16_t msc_assigned_rtp_port;</span><br><span style="color: hsl(120, 100%, 40%);">+       bool last_eutran_plmn_valid;</span><br><span style="color: hsl(120, 100%, 40%);">+  struct osmo_plmn_id last_eutran_plmn;</span><br><span> };</span><br><span> </span><br><span> struct handover {</span><br><span>diff --git a/src/osmo-bsc/handover_fsm.c b/src/osmo-bsc/handover_fsm.c</span><br><span>index f6dad9d..53cafed 100644</span><br><span>--- a/src/osmo-bsc/handover_fsm.c</span><br><span>+++ b/src/osmo-bsc/handover_fsm.c</span><br><span>@@ -417,6 +417,32 @@</span><br><span>         lchan_activate(ho->new_lchan, &info);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* 3GPP TS 48.008 § 3.2.2.58  Old BSS to New BSS Information */</span><br><span style="color: hsl(120, 100%, 40%);">+static void parse_old2new_bss_info(struct gsm_subscriber_connection *conn,</span><br><span style="color: hsl(120, 100%, 40%);">+                              const uint8_t* data, uint16_t len,</span><br><span style="color: hsl(120, 100%, 40%);">+                            struct handover_in_req *req)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+    /* § 3.2.2.58: Information contained here shall take precedence over</span><br><span style="color: hsl(120, 100%, 40%);">+    duplicate information from Information Elements in the HANDOVER</span><br><span style="color: hsl(120, 100%, 40%);">+       REQUEST  as long as the coding is understood by the new BSS */</span><br><span style="color: hsl(120, 100%, 40%);">+     /* § 3.2.2.58: <<Reception of an erroneous "Old BSS to New BSS</span><br><span style="color: hsl(120, 100%, 40%);">+       information" shall not cause a rejection of the HANDOVER REQUEST</span><br><span style="color: hsl(120, 100%, 40%);">+         message; the "Old BSS to New BSS information" information element</span><br><span style="color: hsl(120, 100%, 40%);">+           shall be discarded and the handover resource allocation procedure</span><br><span style="color: hsl(120, 100%, 40%);">+     shall continue>>. See also 3.1.19.7. */</span><br><span style="color: hsl(120, 100%, 40%);">+      struct tlv_parsed tp;</span><br><span style="color: hsl(120, 100%, 40%);">+ if (tlv_parse(&tp, &gsm0808_old_bss_to_new_bss_info_att_tlvdef, data, len, 0, 0) <= 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+           LOG_HO(conn, LOGL_NOTICE, "Failed to parse IE \"Old BSS to New BSS information\"\n");</span><br><span style="color: hsl(120, 100%, 40%);">+             return;</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 (TLVP_VAL(&tp, GSM0808_FE_IE_LAST_USED_EUTRAN_PLMN_ID)) {</span><br><span style="color: hsl(120, 100%, 40%);">+              req->last_eutran_plmn_valid = true;</span><br><span style="color: hsl(120, 100%, 40%);">+                osmo_plmn_from_bcd(TLVP_VAL(&tp, GSM0808_FE_IE_LAST_USED_EUTRAN_PLMN_ID),</span><br><span style="color: hsl(120, 100%, 40%);">+                            &req->last_eutran_plmn);</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> /* 3GPP TS 48.008 § 3.2.1.8 Handover Request */</span><br><span> static bool parse_ho_request(struct gsm_subscriber_connection *conn, const struct msgb *msg,</span><br><span>                        struct handover_in_req *req)</span><br><span>@@ -557,6 +583,10 @@</span><br><span>             return false;</span><br><span>        }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ if ((e = TLVP_GET(tp, GSM0808_IE_OLD_BSS_TO_NEW_BSS_INFORMATION))) {</span><br><span style="color: hsl(120, 100%, 40%);">+          parse_old2new_bss_info(conn, e->val, e->len, req);</span><br><span style="color: hsl(120, 100%, 40%);">+      }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  /* A lot of IEs remain ignored... */</span><br><span> </span><br><span>     return true;</span><br><span>@@ -691,6 +721,12 @@</span><br><span>          info.encr.key_len = req->ei.key_len;</span><br><span>      }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ if (req->last_eutran_plmn_valid) {</span><br><span style="color: hsl(120, 100%, 40%);">+         conn->last_eutran_plmn_valid = true;</span><br><span style="color: hsl(120, 100%, 40%);">+               memcpy(&conn->last_eutran_plmn, &req->last_eutran_plmn,</span><br><span style="color: hsl(120, 100%, 40%);">+                sizeof(conn->last_eutran_plmn));</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  lchan_activate(ho->new_lchan, &info);</span><br><span> }</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bsc/+/23753">change 23753</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/osmo-bsc/+/23753"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-bsc </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Ia5008f11a4c36ef8085a2037d4abddd131086e6e </div>
<div style="display:none"> Gerrit-Change-Number: 23753 </div>
<div style="display:none"> Gerrit-PatchSet: 8 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: dexter <pmaier@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>