This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
dexter gerrit-no-reply at lists.osmocom.orgdexter has uploaded this change for review. ( https://gerrit.osmocom.org/10039
Change subject: handover_logic: make sure IPACC is done before MGCP
......................................................................
handover_logic: make sure IPACC is done before MGCP
During handover, the IPACC negotiaton on RSL level must be done
at least to the point where the BSC knows the IP-Address and the
Port of the new BTS. Only when this data is known the handover
logic may emit the GSCON_EV_HO_COMPL to tell the GSCON FSM that
the handover is complete (including IPACC)
- Add a signal handler that listens to SS_ABISIP signals.
- In cases where IPACC has not been done yet, postpone GSCON_EV_HO_COMPL
and let it send by the signal handler as soon as S_ABISIP_CRCX_ACK
arrives.
Change-Id: I01f05f5d8abe07a0d063e84a1984ac5797afb4f7
Related: OS#3396
---
M include/osmocom/bsc/gsm_data.h
M src/osmo-bsc/handover_logic.c
M tests/handover/handover_test.c
3 files changed, 47 insertions(+), 2 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/39/10039/1
diff --git a/include/osmocom/bsc/gsm_data.h b/include/osmocom/bsc/gsm_data.h
index 5794617..1106176 100644
--- a/include/osmocom/bsc/gsm_data.h
+++ b/include/osmocom/bsc/gsm_data.h
@@ -428,6 +428,12 @@
uint8_t rr_cause;
bool valid;
} ass_compl;
+
+ /* info we need to postpone the GSCON_EV_HO_COMPL event
+ * (see also handover_logic.c, function ho_gsm48_ho_compl() */
+ struct {
+ bool postponed;
+ } ho_compl;
} abis_ip;
uint8_t rqd_ta;
diff --git a/src/osmo-bsc/handover_logic.c b/src/osmo-bsc/handover_logic.c
index 960bf69..ebc80b2 100644
--- a/src/osmo-bsc/handover_logic.c
+++ b/src/osmo-bsc/handover_logic.c
@@ -329,8 +329,19 @@
handover_free(ho);
new_lchan->conn->ho = NULL;
- /* Inform the GSCON FSM that the handover is complete */
- osmo_fsm_inst_dispatch(new_lchan->conn->fi, GSCON_EV_HO_COMPL, NULL);
+ /* It may be that the RSL RTP port/IP negotiation is not done yet. In
+ * this case we may not acknowledge the handover as completed yet. We
+ * must postpone GSCON_EV_HO_COMPL and wait for S_ABISIP_CRCX_ACK in
+ * order to be sure that the RTP port/IP information inside
+ * lchan->abis_ip is populated with valid data.
+ * (see also callback function: abisip_sig_cb()) */
+ if (new_lchan->abis_ip.bound_port != 0) {
+ /* Inform the GSCON FSM that the handover is complete */
+ osmo_fsm_inst_dispatch(new_lchan->conn->fi, GSCON_EV_HO_COMPL, NULL);
+ new_lchan->abis_ip.ho_compl.postponed = false;
+ } else
+ new_lchan->abis_ip.ho_compl.postponed = true;
+
return 0;
}
@@ -392,6 +403,25 @@
return 0;
}
+static int abisip_sig_cb(unsigned int subsys, unsigned int signal,
+ void *handler_data, void *signal_data)
+{
+ struct gsm_lchan *lchan = signal_data;
+
+ if (subsys != SS_ABISIP)
+ return 0;
+
+ switch (signal) {
+ case S_ABISIP_CRCX_ACK:
+ if (lchan->abis_ip.ho_compl.postponed) {
+ lchan->abis_ip.ho_compl.postponed = false;
+ osmo_fsm_inst_dispatch(lchan->conn->fi, GSCON_EV_HO_COMPL, NULL);
+ }
+ break;
+ }
+ return 0;
+}
+
static int ho_logic_sig_cb(unsigned int subsys, unsigned int signal,
void *handler_data, void *signal_data)
{
@@ -437,6 +467,11 @@
static __attribute__((constructor)) void on_dso_load_ho_logic(void)
{
osmo_signal_register_handler(SS_LCHAN, ho_logic_sig_cb, NULL);
+
+ /* Note: We must also listen to ABISIP events to make sure that all
+ * RTP port/IP negotiation with the BTS is done before we acknowledge
+ * the handover as completed. */
+ osmo_signal_register_handler(SS_ABISIP, abisip_sig_cb, NULL);
}
/* Count number of currently ongoing handovers
diff --git a/tests/handover/handover_test.c b/tests/handover/handover_test.c
index 769fd06..57e7c11 100644
--- a/tests/handover/handover_test.c
+++ b/tests/handover/handover_test.c
@@ -416,6 +416,10 @@
msg->l2h = (unsigned char *)rh;
msg->l3h = (unsigned char *)gh;
+ /* Pretend that the the IPACC negotiation has been done already */
+ lchan->abis_ip.bound_port = 1;
+ lchan->abis_ip.ho_compl.postponed = false;
+
abis_rsl_rcvmsg(msg);
}
--
To view, visit https://gerrit.osmocom.org/10039
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: I01f05f5d8abe07a0d063e84a1984ac5797afb4f7
Gerrit-Change-Number: 10039
Gerrit-PatchSet: 1
Gerrit-Owner: dexter <pmaier at sysmocom.de>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20180718/a86e245e/attachment.htm>