IPA/SCCPlite not fully supported from new osmo-bsc.git
During the migration from openbsc.git to osmo-bsc.git we introduced libosmo-sigtran as the A interface transport and have validated both M3UA and SUA. Hoewer, the partial implementation of IPA/SCCPlite has never been completed and/or tested.
We should re-introduce this capability in order to deprecate osmo-bsc-sccplite which is built in the old openbsc.git repository.
- Priority changed from Low to High
I've been brainstorming a bit and have come up with the following ideas on how to do this:
SCCPlite in osmo-bsc¶
Compared to the existing 3GPP AoIP code, we need to do (only!):
- skip all AoIP transport address bits,
- instead determine MGCP endpoint from ASSIGNMENT CMD CIC
- skip the MSC-side MGCP connection (+fsm)
- keep the BTS-side MGCP connection to the MGW
- have MSC talk directly to bsc MGW using MGCP
MGCP inside IPA in osmo-bsc¶
The bsc-nat may send MGCP inside the same IPA connection as used for SCCPlite (for NAT traversal):
- IPA-to-UDP proxy for OSMO_EXT_MTCP sub-stream (inside libosmo-sigtran ipa.c)
- extract MGCP command from IPA MGCP sub-stream and re-inject via local UDP socket (emulating call-agent)
- received data on local UDP socket is passed into IPA MGCP sub-stream
- need to use different IP address for call agent than the BSC-internal one dealing with the BTS-side MGCP connection!
CTRL commands via IPA in osmo-bsc¶
the msc/bsc_nat may send CTRL commands inside the same IPA connection that also passes SCCPlite (for NAT traversal)
- IPA-to-IPA proxy for OSMO_EXT_CTRL sub-stream (inside libosmo-siggtran ipa.c)
- extract OSMO_EXT_CTRL from SCCPlite link, put into another IPA link (CTRL to bsc or other local process)
- take OSMO_EXT_CTRL from other local IPA link and put into SCCPlite link
- could alternatively dispatch internally using ctrl_cmd_handle() or the like
TTCN-3 tests for SCCPlite¶
- ASSIGNMENT with CIC
- MGCP CRCX+MDCX for CN side connection
- MGCP via UDP and IPA
This should all exist to some extent in the bsc_nat testsuite
Using https://gerrit.osmocom.org/7860 and a very trivial patch to osmo-bsc, I can make at least parts of the existing BSC_Tests.ttcn run against osmo-bsc over IPA/SCCPlite on TCP port 5000.
the following tests start to fail with the above-mentioned hack to switch from M3UA to IPA:
pass->FAIL BSC_Tests.TC_ctrl pass->FAIL BSC_Tests.TC_chan_rel_rll_rel_ind pass->FAIL BSC_Tests.TC_chan_rel_conn_fail pass->FAIL BSC_Tests.TC_chan_rel_hard_clear pass->FAIL BSC_Tests.TC_chan_rel_a_reset pass->FAIL BSC_Tests.TC_assignment_cic_only pass->FAIL BSC_Tests.TC_assignment_csd pass->FAIL BSC_Tests.TC_assignment_ctm pass->FAIL BSC_Tests.TC_assignment_fr_a5_0 pass->FAIL BSC_Tests.TC_assignment_fr_a5_1 pass->FAIL BSC_Tests.TC_assignment_fr_a5_1_codec_missing pass->FAIL BSC_Tests.TC_assignment_fr_a5_3 pass->FAIL BSC_Tests.TC_assignment_fr_a5_4 pass->FAIL BSC_Tests.TC_assignment_codec_fr pass->FAIL BSC_Tests.TC_assignment_codec_hr pass->FAIL BSC_Tests.TC_assignment_codec_efr pass->FAIL BSC_Tests.TC_assignment_codec_amr_f pass->FAIL BSC_Tests.TC_assignment_codec_amr_h pass->FAIL BSC_Tests.TC_classmark pass->FAIL BSC_Tests.TC_unsol_ass_fail pass->FAIL BSC_Tests.TC_unsol_ass_compl pass->FAIL BSC_Tests.TC_unsol_ho_fail pass->FAIL BSC_Tests.TC_err_82_short_msg pass->FAIL BSC_Tests.TC_err_84_unknown_msg pass->FAIL BSC_Tests.TC_ho_int
the reasons have not yet been analyzed. The assignment related failures were expected, but many others don't have an obvious explanation yet.
- File osmo-bsc.cfg.ipa osmo-bsc.cfg.ipa added
- File BSC_Tests.cfg BSC_Tests.cfg added
- Status changed from Stalled to In Progress
- % Done changed from 10 to 20
- use the "point-code override dpc 0.23.1" in the osmo-bsc.cfg (see full example attached)
Comparing expected results ./expected-results.xml against results in junit-xml-471.log -------------------- pass BSC_Tests.TC_ctrl_msc_connection_status pass BSC_Tests.TC_ctrl_msc0_connection_status pass BSC_Tests.TC_ctrl pass BSC_Tests.TC_chan_act_noreply pass BSC_Tests.TC_chan_act_counter pass BSC_Tests.TC_chan_act_ack_noest pass BSC_Tests.TC_chan_act_ack_est_ind_noreply pass BSC_Tests.TC_chan_act_ack_est_ind_refused pass BSC_Tests.TC_chan_act_nack pass BSC_Tests.TC_chan_exhaustion pass BSC_Tests.TC_chan_rel_rll_rel_ind pass BSC_Tests.TC_chan_rel_conn_fail pass BSC_Tests.TC_chan_rel_hard_clear pass BSC_Tests.TC_chan_rel_hard_rlsd pass BSC_Tests.TC_chan_rel_a_reset pass BSC_Tests.TC_outbound_connect pass BSC_Tests.TC_assignment_cic_only pass BSC_Tests.TC_assignment_csd pass BSC_Tests.TC_assignment_ctm xfail BSC_Tests.TC_assignment_sign pass BSC_Tests.TC_assignment_fr_a5_0 pass BSC_Tests.TC_assignment_fr_a5_1 pass BSC_Tests.TC_assignment_fr_a5_1_codec_missing pass BSC_Tests.TC_assignment_fr_a5_3 pass BSC_Tests.TC_assignment_fr_a5_4 pass BSC_Tests.TC_ciph_mode_a5_0 pass BSC_Tests.TC_ciph_mode_a5_1 pass BSC_Tests.TC_ciph_mode_a5_3 pass BSC_Tests.TC_assignment_codec_fr pass BSC_Tests.TC_assignment_codec_hr pass BSC_Tests.TC_assignment_codec_efr pass BSC_Tests.TC_assignment_codec_amr_f pass BSC_Tests.TC_assignment_codec_amr_h pass BSC_Tests.TC_rll_est_ind_inact_lchan pass BSC_Tests.TC_rll_est_ind_inval_sapi1 pass BSC_Tests.TC_rll_est_ind_inval_sapi3 pass BSC_Tests.TC_rll_est_ind_inval_sacch pass BSC_Tests.TC_paging_imsi_nochan pass BSC_Tests.TC_paging_tmsi_nochan pass BSC_Tests.TC_paging_tmsi_any pass BSC_Tests.TC_paging_tmsi_sdcch pass BSC_Tests.TC_paging_tmsi_tch_f pass BSC_Tests.TC_paging_tmsi_tch_hf pass BSC_Tests.TC_paging_imsi_nochan_cgi pass BSC_Tests.TC_paging_imsi_nochan_lac_ci pass BSC_Tests.TC_paging_imsi_nochan_ci xfail BSC_Tests.TC_paging_imsi_nochan_lai xfail BSC_Tests.TC_paging_imsi_nochan_lac pass BSC_Tests.TC_paging_imsi_nochan_all pass BSC_Tests.TC_paging_imsi_nochan_plmn_lac_rnc pass BSC_Tests.TC_paging_imsi_nochan_rnc pass BSC_Tests.TC_paging_imsi_nochan_lac_rnc pass BSC_Tests.TC_paging_imsi_nochan_lacs pass BSC_Tests.TC_paging_imsi_nochan_lacs_empty pass BSC_Tests.TC_paging_imsi_nochan_cgi_unknown_cid pass BSC_Tests.TC_paging_imsi_a_reset pass BSC_Tests.TC_paging_imsi_load pass BSC_Tests.TC_paging_counter pass BSC_Tests.TC_rsl_drop_counter pass BSC_Tests.TC_rsl_unknown_unit_id pass BSC_Tests.TC_oml_unknown_unit_id pass BSC_Tests.TC_classmark pass BSC_Tests.TC_unsol_ass_fail pass BSC_Tests.TC_unsol_ass_compl pass BSC_Tests.TC_unsol_ho_fail pass BSC_Tests.TC_err_82_short_msg pass BSC_Tests.TC_err_84_unknown_msg pass BSC_Tests.TC_ho_int pass BSC_Tests.TC_bssap_rlsd_does_not_cause_bssmap_reset xfail BSC_Tests.TC_bssmap_clear_does_not_cause_bssmap_reset xfail BSC_Tests.TC_ms_rel_ind_does_not_cause_bssmap_reset pass->FAIL BSC_Tests.TC_dyn_pdch_ipa_act_deact pass->FAIL BSC_Tests.TC_dyn_pdch_ipa_act_nack pass->FAIL BSC_Tests.TC_dyn_pdch_osmo_act_deact pass->FAIL BSC_Tests.TC_dyn_pdch_osmo_act_nack
So this menas we're down to the following four cases that render different results whether used via M3UA or IPA:
pass->FAIL BSC_Tests.TC_dyn_pdch_ipa_act_deact pass->FAIL BSC_Tests.TC_dyn_pdch_ipa_act_nack pass->FAIL BSC_Tests.TC_dyn_pdch_osmo_act_deact pass->FAIL BSC_Tests.TC_dyn_pdch_osmo_act_nack
- % Done changed from 20 to 50
- IPA/SCCPlite established to BSC_Tests.ttcn (in IPA mode)
- OsmoBSC uses "1@mgw" for the MGCP endpoint name, derived from CIC in BSSMAP ASSIGNMENT REQ
- OsmoBSC skips creating/modifying the MSC-side MGCP connection while still doing IPA CRCX/MDCX and the BTS-side connection
- % Done changed from 50 to 60
https://gerrit.osmocom.org/#/c/osmo-ttcn3-hacks/+/9323 and https://gerrit.osmocom.org/#/c/osmo-ttcn3-hacks/+/9324 should bring BSC_Tests.ttcn to fully pass both on AoIP and on SCCPlite (tests still running)
all patches mentioned before have been merged (both to OsmoBSC and BSC_Tests.ttcn). I guess we're pretty much at a point where it would be worth testing it against a 3rd party MSC.
Please note only direct connections between the MSC and the OsmoBSC will work, not via bsc-nat, as the latter expects MGCP (#2536) and possibly CTRL (#2012) tunneling via the IPA multiplex, and also might want to use osmux.
the BSC_Tests.ttcn testsuite using a SCCPlite configuration for both test + OsmoBSC is now executed at https://jenkins.osmocom.org/jenkins/view/TTCN3/job/ttcn3-bsc-test-sccplite/ with results published at https://jenkins.osmocom.org/jenkins/view/TTCN3/job/ttcn3-bsc-test-sccplite/test_results_analyzer/
results re looking very good, actually slightly better than AoIP (probably some regression in the tests that I introduced in