pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/26804 )
Change subject: RTP_Emulation: Fix race condition where Init is answered while connect is in progress ......................................................................
RTP_Emulation: Fix race condition where Init is answered while connect is in progress
HNB test connects the RTP socket on the HNBGW side once it receives the Audio-CONN_ESTABLISH.cnf with the ip+port info. However, while doing so, osmo-hnodeb is already sending an Init which then the RTP_Emulation (connection in progress) tries to answer with an Init-ACK.
RTP_Emulation.ttcn:201 Called on RTPEM_CTRL to TC_cs_mo_call-RTPEM(6) @RTP_Emulation.RTPEM_connect : { remote_host := "172.18.33.20", remote_port := 16384 } ... IuUP_Emulation.ttcn:76 dec_IuUP_PDU(): Decoded @IuUP_Types.IuUP_PDU: { type_14 := { pdu_type := 14, ack_nack := IuUP_ACKNACK_CTRL (0), frame_nr := 0, iuup_version := 0, procedure_ind := IuUP_PRI_INITIALIZATION (0), header_crc := 55, payload_crc := 637, u := { proc_sending := { payload := '060051673C0127000082000000000300'O } } } } ... RTP_Emulation.ttcn:355 Sent on RTP to system @RTP_CodecPort.RTP_Send : { connId := 1, msg := { rtp := { version := 2, padding_ind := '0'B, extension_ind := '0'B, CSRC_count := 0, marker_bit := '0'B, payload_type := 96, sequence_number := 0, time_stamp := '00000000000000000000000000000000'B, SSRC_id := '11011110101011011011111011101111'B, CSRCs := omit, ext_header := omit, data := 'E4002400'O } } } ... RTP_Emulation.ttcn:355 Message enqueued on RTP from system @Socket_API_Definitions.PortEvent : { result := { errorCode := ERROR_SOCKET (4), connId := 1, os_error_code := 89, os_error_text := "Destination address required" } } id 2
Change-Id: I61200ddb035b310eced871a9954dfcbf1dc49360 --- M library/RTP_Emulation.ttcn 1 file changed, 6 insertions(+), 2 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/04/26804/1
diff --git a/library/RTP_Emulation.ttcn b/library/RTP_Emulation.ttcn index 8c5dbc9..f4d926e 100644 --- a/library/RTP_Emulation.ttcn +++ b/library/RTP_Emulation.ttcn @@ -448,6 +448,10 @@ mtc.stop; } g_tx_connected := true; + /* Send any pending IuUP CTRL message whichwas delayed due to not being connected: */ + if (isvalue(g_iuup_ent.pending_tx_pdu)) { + f_tx_rtp(''O); + } CTRL.reply(RTPEM_connect:{g_remote_host, g_remote_port}); } [] CTRL.getcall(RTPEM_mode:{RTPEM_MODE_NONE}) { @@ -511,7 +515,7 @@ if (lengthof(rx_rtp.msg.rtp.data) != 0) { /* Unexpected RTP payload (user data) arrived: */ g_stats_rtp.num_pkts_rx_err_disabled := g_stats_rtp.num_pkts_rx_err_disabled+1; - } else if (isvalue(g_iuup_ent.pending_tx_pdu)) { + } else if (g_tx_connected and isvalue(g_iuup_ent.pending_tx_pdu)) { /* IuUP Control packet was received and requires sending back something: */ f_tx_rtp(''O); } @@ -536,7 +540,7 @@ rx_rtp.msg.rtp.data := f_IuUP_Em_rx_decaps(g_iuup_ent, rx_rtp.msg.rtp.data); /* IuUP Control packet was received which may require sending back something: */ if (lengthof(rx_rtp.msg.rtp.data) == 0) { - if (isvalue(g_iuup_ent.pending_tx_pdu)) { + if (g_tx_connected and isvalue(g_iuup_ent.pending_tx_pdu)) { f_tx_rtp(''O); } repeat;
laforge has posted comments on this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/26804 )
Change subject: RTP_Emulation: Fix race condition where Init is answered while connect is in progress ......................................................................
Patch Set 1: Code-Review+2
laforge has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/26804 )
Change subject: RTP_Emulation: Fix race condition where Init is answered while connect is in progress ......................................................................
RTP_Emulation: Fix race condition where Init is answered while connect is in progress
HNB test connects the RTP socket on the HNBGW side once it receives the Audio-CONN_ESTABLISH.cnf with the ip+port info. However, while doing so, osmo-hnodeb is already sending an Init which then the RTP_Emulation (connection in progress) tries to answer with an Init-ACK.
RTP_Emulation.ttcn:201 Called on RTPEM_CTRL to TC_cs_mo_call-RTPEM(6) @RTP_Emulation.RTPEM_connect : { remote_host := "172.18.33.20", remote_port := 16384 } ... IuUP_Emulation.ttcn:76 dec_IuUP_PDU(): Decoded @IuUP_Types.IuUP_PDU: { type_14 := { pdu_type := 14, ack_nack := IuUP_ACKNACK_CTRL (0), frame_nr := 0, iuup_version := 0, procedure_ind := IuUP_PRI_INITIALIZATION (0), header_crc := 55, payload_crc := 637, u := { proc_sending := { payload := '060051673C0127000082000000000300'O } } } } ... RTP_Emulation.ttcn:355 Sent on RTP to system @RTP_CodecPort.RTP_Send : { connId := 1, msg := { rtp := { version := 2, padding_ind := '0'B, extension_ind := '0'B, CSRC_count := 0, marker_bit := '0'B, payload_type := 96, sequence_number := 0, time_stamp := '00000000000000000000000000000000'B, SSRC_id := '11011110101011011011111011101111'B, CSRCs := omit, ext_header := omit, data := 'E4002400'O } } } ... RTP_Emulation.ttcn:355 Message enqueued on RTP from system @Socket_API_Definitions.PortEvent : { result := { errorCode := ERROR_SOCKET (4), connId := 1, os_error_code := 89, os_error_text := "Destination address required" } } id 2
Change-Id: I61200ddb035b310eced871a9954dfcbf1dc49360 --- M library/RTP_Emulation.ttcn 1 file changed, 6 insertions(+), 2 deletions(-)
Approvals: Jenkins Builder: Verified laforge: Looks good to me, approved
diff --git a/library/RTP_Emulation.ttcn b/library/RTP_Emulation.ttcn index 8c5dbc9..f4d926e 100644 --- a/library/RTP_Emulation.ttcn +++ b/library/RTP_Emulation.ttcn @@ -448,6 +448,10 @@ mtc.stop; } g_tx_connected := true; + /* Send any pending IuUP CTRL message whichwas delayed due to not being connected: */ + if (isvalue(g_iuup_ent.pending_tx_pdu)) { + f_tx_rtp(''O); + } CTRL.reply(RTPEM_connect:{g_remote_host, g_remote_port}); } [] CTRL.getcall(RTPEM_mode:{RTPEM_MODE_NONE}) { @@ -511,7 +515,7 @@ if (lengthof(rx_rtp.msg.rtp.data) != 0) { /* Unexpected RTP payload (user data) arrived: */ g_stats_rtp.num_pkts_rx_err_disabled := g_stats_rtp.num_pkts_rx_err_disabled+1; - } else if (isvalue(g_iuup_ent.pending_tx_pdu)) { + } else if (g_tx_connected and isvalue(g_iuup_ent.pending_tx_pdu)) { /* IuUP Control packet was received and requires sending back something: */ f_tx_rtp(''O); } @@ -536,7 +540,7 @@ rx_rtp.msg.rtp.data := f_IuUP_Em_rx_decaps(g_iuup_ent, rx_rtp.msg.rtp.data); /* IuUP Control packet was received which may require sending back something: */ if (lengthof(rx_rtp.msg.rtp.data) == 0) { - if (isvalue(g_iuup_ent.pending_tx_pdu)) { + if (g_tx_connected and isvalue(g_iuup_ent.pending_tx_pdu)) { f_tx_rtp(''O); } repeat;