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
- Status changed from In Progress to Resolved
- % Done changed from 90 to 100
All patches to get osmo-bsc working against an SCCPlite MSC have been merged to master.
Everything from USSD through voice calls works.
As always, there may be remaining issues with corner cases or other MSC vendors, but let's close this initial issue.