<p>Harald Welte <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/13706">View Change</a></p><div style="white-space:pre-wrap">Approvals:
Harald Welte: Looks good to me, approved
Jenkins Builder: Verified
</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Revert "fix inter-BSC-HO-incoming for AoIP (1/2)"<br><br>This reverts commit 94c9324fe07cd0ba1277278270c8979d949e49ec.<br>Multiple ttcn3 handover tests were broken due to this commit. Let's<br>merge this once all the other commits pertaining to that fix can be<br>merged as well.<br><br>Fixes: OS#3942<br>Change-Id: I01d93778fb19c601c21f99ec4d2a3ab8a4a48f67<br>---<br>M include/osmocom/bsc/handover_fsm.h<br>M src/osmo-bsc/handover_fsm.c<br>2 files changed, 85 insertions(+), 106 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/bsc/handover_fsm.h b/include/osmocom/bsc/handover_fsm.h</span><br><span>index 7c2145e..4db0890 100644</span><br><span>--- a/include/osmocom/bsc/handover_fsm.h</span><br><span>+++ b/include/osmocom/bsc/handover_fsm.h</span><br><span>@@ -28,10 +28,10 @@</span><br><span> HO_ST_NOT_STARTED,</span><br><span> </span><br><span> HO_ST_WAIT_LCHAN_ACTIVE,</span><br><span style="color: hsl(0, 100%, 40%);">- HO_ST_WAIT_MGW_ENDPOINT_TO_MSC,</span><br><span> HO_ST_WAIT_RR_HO_DETECT,</span><br><span> HO_ST_WAIT_RR_HO_COMPLETE,</span><br><span> HO_ST_WAIT_LCHAN_ESTABLISHED,</span><br><span style="color: hsl(120, 100%, 40%);">+ HO_ST_WAIT_MGW_ENDPOINT_TO_MSC,</span><br><span> </span><br><span> /* The inter-BSC Outgoing Handover FSM has completely separate states, but since it makes sense for it</span><br><span> * to also live in conn->ho.fi, it should share the same event enum. From there it is merely</span><br><span>@@ -46,11 +46,11 @@</span><br><span> HO_EV_LCHAN_ACTIVE,</span><br><span> HO_EV_LCHAN_ESTABLISHED,</span><br><span> HO_EV_LCHAN_ERROR,</span><br><span style="color: hsl(0, 100%, 40%);">- HO_EV_MSC_MGW_OK,</span><br><span style="color: hsl(0, 100%, 40%);">- HO_EV_MSC_MGW_FAIL,</span><br><span> HO_EV_RR_HO_DETECT,</span><br><span> HO_EV_RR_HO_COMPLETE,</span><br><span> HO_EV_RR_HO_FAIL,</span><br><span style="color: hsl(120, 100%, 40%);">+ HO_EV_MSC_MGW_OK,</span><br><span style="color: hsl(120, 100%, 40%);">+ HO_EV_MSC_MGW_FAIL,</span><br><span> HO_EV_CONN_RELEASING,</span><br><span> </span><br><span> HO_OUT_EV_BSSMAP_HO_COMMAND,</span><br><span>diff --git a/src/osmo-bsc/handover_fsm.c b/src/osmo-bsc/handover_fsm.c</span><br><span>index 3b5a660..421c32e 100644</span><br><span>--- a/src/osmo-bsc/handover_fsm.c</span><br><span>+++ b/src/osmo-bsc/handover_fsm.c</span><br><span>@@ -161,10 +161,10 @@</span><br><span> </span><br><span> static const struct state_timeout ho_fsm_timeouts[32] = {</span><br><span> [HO_ST_WAIT_LCHAN_ACTIVE] = { .T = 23042 },</span><br><span style="color: hsl(0, 100%, 40%);">- [HO_ST_WAIT_MGW_ENDPOINT_TO_MSC] = { .T = 23042 },</span><br><span> [HO_ST_WAIT_RR_HO_DETECT] = { .T = 23042 },</span><br><span> [HO_ST_WAIT_RR_HO_COMPLETE] = { .T = 23042 },</span><br><span> [HO_ST_WAIT_LCHAN_ESTABLISHED] = { .T = 23042 },</span><br><span style="color: hsl(120, 100%, 40%);">+ [HO_ST_WAIT_MGW_ENDPOINT_TO_MSC] = { .T = 23042 },</span><br><span> [HO_OUT_ST_WAIT_HO_COMMAND] = { .T = 7 },</span><br><span> [HO_OUT_ST_WAIT_CLEAR] = { .T = 8 },</span><br><span> };</span><br><span>@@ -876,24 +876,10 @@</span><br><span> static void ho_fsm_wait_lchan_active(struct osmo_fsm_inst *fi, uint32_t event, void *data)</span><br><span> {</span><br><span> struct gsm_subscriber_connection *conn = ho_fi_conn(fi);</span><br><span style="color: hsl(0, 100%, 40%);">- struct handover *ho = &conn->ho;</span><br><span> switch (event) {</span><br><span> </span><br><span> case HO_EV_LCHAN_ACTIVE:</span><br><span style="color: hsl(0, 100%, 40%);">- /* - If the lchan is voiceless, no need to even think about the MGW.</span><br><span style="color: hsl(0, 100%, 40%);">- * - If this is an intra-BSC Handover, we already have an RTP stream towards the MSC and aren't</span><br><span style="color: hsl(0, 100%, 40%);">- * touching it.</span><br><span style="color: hsl(0, 100%, 40%);">- * - If we're on SCCPlite, the MSC manages the MGW endpoint, all we do is the BTS side CI, so we can</span><br><span style="color: hsl(0, 100%, 40%);">- * skip the part that would CRCX towards the MSC.</span><br><span style="color: hsl(0, 100%, 40%);">- * So create an MSC side endpoint CI only if a voice lchan is established for an incoming inter-BSC</span><br><span style="color: hsl(0, 100%, 40%);">- * handover on AoIP. Otherwise go on to send a Handover Command and wait for the Detect.</span><br><span style="color: hsl(0, 100%, 40%);">- */</span><br><span style="color: hsl(0, 100%, 40%);">- if (ho->new_lchan->activate.info.requires_voice_stream</span><br><span style="color: hsl(0, 100%, 40%);">- && (ho->scope & HO_INTER_BSC_IN)</span><br><span style="color: hsl(0, 100%, 40%);">- && gscon_is_aoip(conn))</span><br><span style="color: hsl(0, 100%, 40%);">- ho_fsm_state_chg(HO_ST_WAIT_MGW_ENDPOINT_TO_MSC);</span><br><span style="color: hsl(0, 100%, 40%);">- else</span><br><span style="color: hsl(0, 100%, 40%);">- ho_fsm_state_chg(HO_ST_WAIT_RR_HO_DETECT);</span><br><span style="color: hsl(120, 100%, 40%);">+ ho_fsm_state_chg(HO_ST_WAIT_RR_HO_DETECT);</span><br><span> return;</span><br><span> </span><br><span> case HO_EV_LCHAN_ERROR:</span><br><span>@@ -906,76 +892,6 @@</span><br><span> }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/* Only for voice, only for inter-BSC Handover into this BSC, and only for AoIP:</span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * Establish the MGW endpoint CI that points towards the MSC. This needs to happen after the lchan (lchan_rtp_fsm) has</span><br><span style="color: hsl(0, 100%, 40%);">- * created an MGW endpoint with the first CRCX, so that an endpoint is available, and before sending the Handover</span><br><span style="color: hsl(0, 100%, 40%);">- * Request Acknowledge, so that the RTP address and port established towards the MSC can be included in the Handover</span><br><span style="color: hsl(0, 100%, 40%);">- * Request Acknowledge message.</span><br><span style="color: hsl(0, 100%, 40%);">- * (For SCCPlite, the MSC manages the CN side endpoint CI itself, and we don't need to send any RTP address in the</span><br><span style="color: hsl(0, 100%, 40%);">- * Handover Request Acknowledge.)</span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * Actually, it should be possible to kick this off even above in handover_start_inter_bsc_in(), to do the CRCX towards</span><br><span style="color: hsl(0, 100%, 40%);">- * the MSC at the same time as establishing the lchan. The gscon_ensure_mgw_endpoint() doesn't care which one of</span><br><span style="color: hsl(0, 100%, 40%);">- * lchan_rtp_fsm or handover_start_inter_bsc_in() calls it first. The benefit would be that we'd send out the Handover</span><br><span style="color: hsl(0, 100%, 40%);">- * Command ever so slightly sooner -- which isn't critical really, because a) how long does a CRCX take, milliseconds?</span><br><span style="color: hsl(0, 100%, 40%);">- * and b) the time critical part is *after* the Handover Command was kicked off to keep the transition between cells as</span><br><span style="color: hsl(0, 100%, 40%);">- * short as possible. The drawback of doing this earlier is code complexity: receiving the HO_EV_MSC_MGW_OK /</span><br><span style="color: hsl(0, 100%, 40%);">- * HO_EV_MSC_MGW_FAIL events would need to be juggled in between the HO_EV_LCHAN_ACTIVE / HO_EV_LCHAN_ERROR. So the</span><br><span style="color: hsl(0, 100%, 40%);">- * decision for now is to leave it here.</span><br><span style="color: hsl(0, 100%, 40%);">- */</span><br><span style="color: hsl(0, 100%, 40%);">-static void ho_fsm_wait_mgw_endpoint_to_msc_onenter(struct osmo_fsm_inst *fi, uint32_t prev_state)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">- struct gsm_subscriber_connection *conn = ho_fi_conn(fi);</span><br><span style="color: hsl(0, 100%, 40%);">- struct handover *ho = &conn->ho;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- if (!gscon_connect_mgw_to_msc(conn,</span><br><span style="color: hsl(0, 100%, 40%);">- ho->new_lchan,</span><br><span style="color: hsl(0, 100%, 40%);">- ho->inter_bsc_in.msc_assigned_rtp_addr,</span><br><span style="color: hsl(0, 100%, 40%);">- ho->inter_bsc_in.msc_assigned_rtp_port,</span><br><span style="color: hsl(0, 100%, 40%);">- fi,</span><br><span style="color: hsl(0, 100%, 40%);">- HO_EV_MSC_MGW_OK,</span><br><span style="color: hsl(0, 100%, 40%);">- HO_EV_MSC_MGW_FAIL,</span><br><span style="color: hsl(0, 100%, 40%);">- NULL,</span><br><span style="color: hsl(0, 100%, 40%);">- &ho->created_ci_for_msc)) {</span><br><span style="color: hsl(0, 100%, 40%);">- ho_fail(HO_RESULT_ERROR,</span><br><span style="color: hsl(0, 100%, 40%);">- "Unable to connect MGW endpoint to the MSC side");</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static void ho_fsm_wait_mgw_endpoint_to_msc(struct osmo_fsm_inst *fi, uint32_t event, void *data)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">- struct gsm_subscriber_connection *conn = ho_fi_conn(fi);</span><br><span style="color: hsl(0, 100%, 40%);">- const struct mgcp_conn_peer *mgw_info;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- switch (event) {</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- case HO_EV_MSC_MGW_OK:</span><br><span style="color: hsl(0, 100%, 40%);">- /* Ensure the endpoint is really there, and log it. This state is only entered for AoIP connections, see</span><br><span style="color: hsl(0, 100%, 40%);">- * ho_fsm_wait_lchan_active() above. */</span><br><span style="color: hsl(0, 100%, 40%);">- mgw_info = mgwep_ci_get_rtp_info(conn->user_plane.mgw_endpoint_ci_msc);</span><br><span style="color: hsl(0, 100%, 40%);">- if (!mgw_info) {</span><br><span style="color: hsl(0, 100%, 40%);">- ho_fail(HO_RESULT_ERROR,</span><br><span style="color: hsl(0, 100%, 40%);">- "Unable to retrieve RTP port info allocated by MGW for"</span><br><span style="color: hsl(0, 100%, 40%);">- " the MSC side.");</span><br><span style="color: hsl(0, 100%, 40%);">- return;</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">- LOG_HO(conn, LOGL_DEBUG, "MGW's MSC side CI: %s:%u\n",</span><br><span style="color: hsl(0, 100%, 40%);">- mgw_info->addr, mgw_info->port);</span><br><span style="color: hsl(0, 100%, 40%);">- ho_fsm_state_chg(HO_ST_WAIT_RR_HO_DETECT);</span><br><span style="color: hsl(0, 100%, 40%);">- return;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- case HO_EV_MSC_MGW_FAIL:</span><br><span style="color: hsl(0, 100%, 40%);">- ho_fail(HO_RESULT_ERROR,</span><br><span style="color: hsl(0, 100%, 40%);">- "Unable to connect MGW endpoint to the MSC side");</span><br><span style="color: hsl(0, 100%, 40%);">- return;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- default:</span><br><span style="color: hsl(0, 100%, 40%);">- OSMO_ASSERT(false);</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> static void ho_fsm_wait_rr_ho_detect_onenter(struct osmo_fsm_inst *fi, uint32_t prev_state)</span><br><span> {</span><br><span> int rc;</span><br><span>@@ -1093,24 +1009,24 @@</span><br><span> }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static void ho_fsm_post_lchan_established(struct osmo_fsm_inst *fi);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static void ho_fsm_wait_lchan_established_onenter(struct osmo_fsm_inst *fi, uint32_t prev_state)</span><br><span> {</span><br><span> struct gsm_subscriber_connection *conn = ho_fi_conn(fi);</span><br><span> </span><br><span> if (conn->ho.fi && lchan_state_is(conn->ho.new_lchan, LCHAN_ST_ESTABLISHED)) {</span><br><span> LOG_HO(conn, LOGL_DEBUG, "lchan already established earlier\n");</span><br><span style="color: hsl(0, 100%, 40%);">- ho_success();</span><br><span style="color: hsl(120, 100%, 40%);">+ ho_fsm_post_lchan_established(fi);</span><br><span> }</span><br><span> }</span><br><span> </span><br><span> static void ho_fsm_wait_lchan_established(struct osmo_fsm_inst *fi, uint32_t event, void *data)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- struct gsm_subscriber_connection *conn = ho_fi_conn(fi);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> switch (event) {</span><br><span> </span><br><span> case HO_EV_LCHAN_ESTABLISHED:</span><br><span style="color: hsl(0, 100%, 40%);">- ho_success();</span><br><span style="color: hsl(120, 100%, 40%);">+ ho_fsm_post_lchan_established(fi);</span><br><span> break;</span><br><span> </span><br><span> default:</span><br><span>@@ -1118,6 +1034,69 @@</span><br><span> }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static void ho_fsm_post_lchan_established(struct osmo_fsm_inst *fi)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ struct gsm_subscriber_connection *conn = ho_fi_conn(fi);</span><br><span style="color: hsl(120, 100%, 40%);">+ struct handover *ho = &conn->ho;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ if (ho->new_lchan->activate.info.requires_voice_stream</span><br><span style="color: hsl(120, 100%, 40%);">+ && (ho->scope & HO_INTER_BSC_IN))</span><br><span style="color: hsl(120, 100%, 40%);">+ ho_fsm_state_chg(HO_ST_WAIT_MGW_ENDPOINT_TO_MSC);</span><br><span style="color: hsl(120, 100%, 40%);">+ else</span><br><span style="color: hsl(120, 100%, 40%);">+ ho_success();</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 void ho_fsm_wait_mgw_endpoint_to_msc_onenter(struct osmo_fsm_inst *fi, uint32_t prev_state)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ struct gsm_subscriber_connection *conn = ho_fi_conn(fi);</span><br><span style="color: hsl(120, 100%, 40%);">+ struct handover *ho = &conn->ho;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!gscon_connect_mgw_to_msc(conn,</span><br><span style="color: hsl(120, 100%, 40%);">+ ho->new_lchan,</span><br><span style="color: hsl(120, 100%, 40%);">+ ho->inter_bsc_in.msc_assigned_rtp_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+ ho->inter_bsc_in.msc_assigned_rtp_port,</span><br><span style="color: hsl(120, 100%, 40%);">+ fi,</span><br><span style="color: hsl(120, 100%, 40%);">+ HO_EV_MSC_MGW_OK,</span><br><span style="color: hsl(120, 100%, 40%);">+ HO_EV_MSC_MGW_FAIL,</span><br><span style="color: hsl(120, 100%, 40%);">+ NULL,</span><br><span style="color: hsl(120, 100%, 40%);">+ &ho->created_ci_for_msc)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ ho_fail(HO_RESULT_ERROR,</span><br><span style="color: hsl(120, 100%, 40%);">+ "Unable to connect MGW endpoint to the MSC side");</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 void ho_fsm_wait_mgw_endpoint_to_msc(struct osmo_fsm_inst *fi, uint32_t event, void *data)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ struct gsm_subscriber_connection *conn = ho_fi_conn(fi);</span><br><span style="color: hsl(120, 100%, 40%);">+ switch (event) {</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ case HO_EV_MSC_MGW_OK:</span><br><span style="color: hsl(120, 100%, 40%);">+ /* For AoIP, we created the MGW endpoint. Ensure it is really there, and log it. */</span><br><span style="color: hsl(120, 100%, 40%);">+ if (gscon_is_aoip(conn)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ const struct mgcp_conn_peer *mgw_info;</span><br><span style="color: hsl(120, 100%, 40%);">+ mgw_info = mgwep_ci_get_rtp_info(conn->user_plane.mgw_endpoint_ci_msc);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!mgw_info) {</span><br><span style="color: hsl(120, 100%, 40%);">+ ho_fail(HO_RESULT_ERROR,</span><br><span style="color: hsl(120, 100%, 40%);">+ "Unable to retrieve RTP port info allocated by MGW for"</span><br><span style="color: hsl(120, 100%, 40%);">+ " the MSC side.");</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%);">+ LOG_HO(conn, LOGL_DEBUG, "MGW's MSC side CI: %s:%u\n",</span><br><span style="color: hsl(120, 100%, 40%);">+ mgw_info->addr, mgw_info->port);</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ ho_success();</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%);">+ case HO_EV_MSC_MGW_FAIL:</span><br><span style="color: hsl(120, 100%, 40%);">+ ho_fail(HO_RESULT_ERROR,</span><br><span style="color: hsl(120, 100%, 40%);">+ "Unable to connect MGW endpoint to the MSC side");</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%);">+ default:</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(false);</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> /* Inter-BSC OUT */</span><br><span> </span><br><span> static void handover_start_inter_bsc_out(struct gsm_subscriber_connection *conn,</span><br><span>@@ -1206,19 +1185,6 @@</span><br><span> ,</span><br><span> .out_state_mask = 0</span><br><span> | S(HO_ST_WAIT_LCHAN_ACTIVE)</span><br><span style="color: hsl(0, 100%, 40%);">- | S(HO_ST_WAIT_MGW_ENDPOINT_TO_MSC)</span><br><span style="color: hsl(0, 100%, 40%);">- | S(HO_ST_WAIT_RR_HO_DETECT)</span><br><span style="color: hsl(0, 100%, 40%);">- ,</span><br><span style="color: hsl(0, 100%, 40%);">- },</span><br><span style="color: hsl(0, 100%, 40%);">- [HO_ST_WAIT_MGW_ENDPOINT_TO_MSC] = {</span><br><span style="color: hsl(0, 100%, 40%);">- .name = "WAIT_MGW_ENDPOINT_TO_MSC",</span><br><span style="color: hsl(0, 100%, 40%);">- .onenter = ho_fsm_wait_mgw_endpoint_to_msc_onenter,</span><br><span style="color: hsl(0, 100%, 40%);">- .action = ho_fsm_wait_mgw_endpoint_to_msc,</span><br><span style="color: hsl(0, 100%, 40%);">- .in_event_mask = 0</span><br><span style="color: hsl(0, 100%, 40%);">- | S(HO_EV_MSC_MGW_OK)</span><br><span style="color: hsl(0, 100%, 40%);">- | S(HO_EV_MSC_MGW_FAIL)</span><br><span style="color: hsl(0, 100%, 40%);">- ,</span><br><span style="color: hsl(0, 100%, 40%);">- .out_state_mask = 0</span><br><span> | S(HO_ST_WAIT_RR_HO_DETECT)</span><br><span> ,</span><br><span> },</span><br><span>@@ -1256,7 +1222,20 @@</span><br><span> .in_event_mask = 0</span><br><span> | S(HO_EV_LCHAN_ESTABLISHED)</span><br><span> ,</span><br><span style="color: hsl(120, 100%, 40%);">+ .out_state_mask = 0</span><br><span style="color: hsl(120, 100%, 40%);">+ | S(HO_ST_WAIT_MGW_ENDPOINT_TO_MSC)</span><br><span style="color: hsl(120, 100%, 40%);">+ ,</span><br><span> },</span><br><span style="color: hsl(120, 100%, 40%);">+ [HO_ST_WAIT_MGW_ENDPOINT_TO_MSC] = {</span><br><span style="color: hsl(120, 100%, 40%);">+ .name = "WAIT_MGW_ENDPOINT_TO_MSC",</span><br><span style="color: hsl(120, 100%, 40%);">+ .onenter = ho_fsm_wait_mgw_endpoint_to_msc_onenter,</span><br><span style="color: hsl(120, 100%, 40%);">+ .action = ho_fsm_wait_mgw_endpoint_to_msc,</span><br><span style="color: hsl(120, 100%, 40%);">+ .in_event_mask = 0</span><br><span style="color: hsl(120, 100%, 40%);">+ | S(HO_EV_MSC_MGW_OK)</span><br><span style="color: hsl(120, 100%, 40%);">+ | S(HO_EV_MSC_MGW_FAIL)</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> [HO_OUT_ST_WAIT_HO_COMMAND] = {</span><br><span> .name = "inter-BSC-OUT:WAIT_HO_COMMAND",</span><br><span> .action = ho_out_fsm_wait_ho_command,</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/13706">change 13706</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/13706"/><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-MessageType: merged </div>
<div style="display:none"> Gerrit-Change-Id: I01d93778fb19c601c21f99ec4d2a3ab8a4a48f67 </div>
<div style="display:none"> Gerrit-Change-Number: 13706 </div>
<div style="display:none"> Gerrit-PatchSet: 2 </div>
<div style="display:none"> Gerrit-Owner: Daniel Willmann <dwillmann@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Daniel Willmann <dwillmann@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder (1000002) </div>
<div style="display:none"> Gerrit-Reviewer: Neels Hofmeyr <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: lynxis lazus <lynxis@fe80.eu> </div>