Project

General

Profile

Bug #2544

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

Added by laforge about 1 year ago. Updated about 1 month ago.

Status:
Resolved
Priority:
High
Assignee:
Category:
A interface
Target version:
-
Start date:
10/06/2017
Due date:
% Done:

100%

Spec Reference:
Tags:

Description

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-sigtranStalled2017-10-05

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

Related to libosmo-sccp + libosmo-sigtran - Bug #3391: SCCPlite SIGTRAN fails to acknowledge an IPA Identity ACK when the connection is established, expects Identity GET insteadResolved2018-07-10

Related to libosmo-sccp + libosmo-sigtran - Bug #3392: SCCPlite: xua_asp_fsm.c hardcodes a routing keyRejected2018-07-11

Related to libosmo-sccp + libosmo-sigtran - Bug #3393: SCCPlite: memory leak upon receiving xua_msgResolved2018-07-11

History

#1 Updated by laforge 12 months ago

  • Assignee set to laforge

#2 Updated by laforge 12 months ago

  • Priority changed from Normal to Low

#3 Updated by laforge 10 months ago

  • Category set to A interface

#4 Updated by laforge 6 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

  • 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

#5 Updated by laforge 6 months ago

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

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.

#6 Updated by laforge 6 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 5 months 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 5 months 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 5 months ago

  • % 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)

#10 Updated by laforge 5 months ago

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

#11 Updated by laforge 5 months ago

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

#12 Updated by laforge 5 months 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 5 months ago

  • Tags set to SCCPlite

#14 Updated by laforge 5 months ago

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 TC_assignment_cic_only).

#15 Updated by laforge 4 months ago

  • Assignee changed from laforge to neels
  • % Done changed from 60 to 90

#16 Updated by neels 3 months ago

During testing against an actual SCCPlite MSC, I identified various problems still. Linking to issues...

#17 Updated by neels 3 months ago

  • Related to Bug #3391: SCCPlite SIGTRAN fails to acknowledge an IPA Identity ACK when the connection is established, expects Identity GET instead added

#18 Updated by neels 3 months ago

  • Related to Bug #3392: SCCPlite: xua_asp_fsm.c hardcodes a routing key added

#19 Updated by neels 3 months ago

  • Related to Bug #3393: SCCPlite: memory leak upon receiving xua_msg added

#20 Updated by neels about 1 month ago

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

Also available in: Atom PDF

Add picture from clipboard (Maximum size: 48.8 MB)