Bug #2544

IPA/SCCPlite not fully supported from new osmo-bsc.git

Added by laforge 9 months ago. Updated 19 days ago.

In Progress
A interface
Target version:
Start date:
Due date:
% Done:


Estimated time:
Spec Reference:


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.

ipa.diff ipa.diff 584 Bytes osmo-bsc patch to switch from M3UA To IPA laforge, 04/17/2018 07:50 PM
osmo-bsc.cfg.ipa osmo-bsc.cfg.ipa 10.9 KB osmo-bsc config file for IPA (use with ipa.diff) laforge, 05/24/2018 06:14 PM
BSC_Tests.cfg BSC_Tests.cfg 2.36 KB BSC_Tests.ttcn config file laforge, 05/24/2018 06:15 PM

Related issues

Related to libosmo-sccp + libosmo-sigtran - Bug #2536: MGCP tunneling missing from IPA support in libosmo-sigtranIn Progress2017-10-05

Related to OsmoBSC - Bug #2012: CTRL interface encapsulation over IPA link is missing when using libosmo-sigtranNew2017-04-15


#1 Updated by laforge 8 months ago

  • Assignee set to laforge

#2 Updated by laforge 8 months ago

  • Priority changed from Normal to Low

#3 Updated by laforge 6 months ago

  • Category set to A interface

#4 Updated by laforge 3 months ago

  • 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

  • MGCP CRCX+MDCX for CN side connection
  • MGCP via UDP and IPA

This should all exist to some extent in the bsc_nat testsuite

#5 Updated by laforge 2 months ago

  • File ipa.diff ipa.diff added
  • Status changed from New to Stalled
  • % Done changed from 0 to 10

Using 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.

#6 Updated by laforge 2 months ago

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.

#7 Updated by laforge 29 days ago

Good news: With the following two modifications, I was able to get most of the BSC_Tests case tests to pass over IPA/SCCPlite:
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

#8 Updated by laforge 28 days ago

  • % Done changed from 20 to 50
See With those above patches I get
  • 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

#9 Updated by laforge 28 days ago

  • % Done changed from 50 to 60 and should bring BSC_Tests.ttcn to fully pass both on AoIP and on SCCPlite (tests still running)

#10 Updated by laforge 28 days ago

  • Related to Bug #2536: MGCP tunneling missing from IPA support in libosmo-sigtran added

#11 Updated by laforge 28 days ago

  • Related to Bug #2012: CTRL interface encapsulation over IPA link is missing when using libosmo-sigtran added

#12 Updated by laforge 28 days ago

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.

#13 Updated by laforge 23 days ago

  • Tags set to SCCPlite

#14 Updated by laforge 19 days ago

the BSC_Tests.ttcn testsuite using a SCCPlite configuration for both test + OsmoBSC is now executed at with results published at

results re looking very good, actually slightly better than AoIP (probably some regression in the tests that I introduced in TC_assignment_cic_only).

Also available in: Atom PDF

Add picture from clipboard (Maximum size: 48.8 MB)