diff options
author | Vadim Yanitskiy <vyanitskiy@sysmocom.de> | 2022-05-01 01:36:12 +0300 |
---|---|---|
committer | laforge <laforge@osmocom.org> | 2022-05-03 12:52:58 +0000 |
commit | 0dd96e9391384aa189e4e48e843a2bc1fc77ae15 (patch) | |
tree | 6d787930d4d83fcc17a3779a91030a6054a52512 | |
parent | 1567bac64c3a3b76497b527f4ddf6dfab2388114 (diff) |
BTS_Tests: workaround addr='0.0.0.0' in f_rtpem_activate()
If a CRXC message contains optional remote IP and port IEs, the
CRCX ACK received from the BTS is expected to contain its listen
address and port. In some cases osmo-bts may indicate nonsense
addr='0.0.0.0', and indeed the RTP_Emulation component is not gonna
like this. This makes both BTS_Tests.TC_speech_rtp_tch[fh] test
cases fail whenever executed in Docker:
Connection refused (unexpected)
Let's work this around by sending the remote IP and port IEs in
additional MDCX message and omitting them in CRCX. This mimics
osmo-bsc's behavior and makes both test cases pass.
Change-Id: I03453e72f62819989dfe6aa12d8bd889fced1046
Related: OS#5242
-rw-r--r-- | bts/BTS_Tests.ttcn | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn index 06fe43b5..c2de5383 100644 --- a/bts/BTS_Tests.ttcn +++ b/bts/BTS_Tests.ttcn @@ -2532,16 +2532,28 @@ runs on ConnHdlr { var PortNumber rtpem_bind_port := mp_rtpem_bind_port; f_rtpem_bind(RTPEM_CTRL, mp_rtpem_bind_ip, rtpem_bind_port); - /* Step 3: send CRCX with the configured address/port to the IUT */ - var RSL_Message rsl_pdu := f_rsl_transceive_ret( - ts_RSL_IPA_CRCX(g_chan_nr, f_inet_addr(mp_rtpem_bind_ip), rtpem_bind_port), + /* Step 3a: send CRCX to create an RTP connection at the IUT */ + var RSL_Message crcx_ack := f_rsl_transceive_ret( + /* FIXME (OS#5242): do not include Remote IP/Port IEs because + * osmo-bts would respond with nonsense listen addr='0.0.0.0'. */ + ts_RSL_IPA_CRCX(g_chan_nr, omit, omit), tr_RSL_IPA_CRCX_ACK(g_chan_nr, ?, ?, ?), "IPA CRCX ACK"); - - /* Step 4: connect to the IUT's address/port parsed from CRCX ACK */ - var HostName local_addr := f_inet_ntoa(rsl_pdu.ies[2].body.ipa_local_ip); - var PortNumber local_port := rsl_pdu.ies[3].body.ipa_local_port; - f_rtpem_connect(RTPEM_CTRL, local_addr, local_port); + var uint16_t conn_id := crcx_ack.ies[1].body.ipa_conn_id; + + /* Step 3b: send MDCX with the configured address/port to the IUT */ + var RSL_Message mdcx_ack := f_rsl_transceive_ret( + ts_RSL_IPA_MDCX(g_chan_nr, conn_id, + remote_ip := f_inet_addr(mp_rtpem_bind_ip), + remote_port := rtpem_bind_port, + rtp_pt2 := 0), + tr_RSL_IPA_MDCX_ACK(g_chan_nr, conn_id, ?, ?, ?), + "IPA MDCX ACK"); + + /* Step 4: connect to the IUT's address/port parsed from MDCX ACK */ + var HostName bts_bind_ip := f_inet_ntoa(mdcx_ack.ies[2].body.ipa_local_ip); + var PortNumber bts_bind_port := mdcx_ack.ies[3].body.ipa_local_port; + f_rtpem_connect(RTPEM_CTRL, bts_bind_ip, bts_bind_port); /* Step 5: set the given RTP emulation mode */ f_rtpem_mode(RTPEM_CTRL, mode); |