Project

General

Profile

Feature #1845

Full BSC/MSC split in NITB/MSC

Added by laforge almost 5 years ago. Updated about 4 years ago.

Status:
Closed
Priority:
Normal
Assignee:
Category:
-
Start date:
11/18/2016
Due date:
% Done:

100%

Resolution:
Spec Reference:

Description

In order to continuously test and use the AoverIP interface, we will need to split the NITB/MSC code and remove libbsc from it. Instead, add an AoIP interface that can talk to osmo-bsc. This will make the IuCS and the A/GERAN world align with each other and most likely mean we'll give up NITB altogether.


Related issues

Related to OpenBSC - Feature #2017: Cleanup deprecated, make breaking changes for BSC/MSC splitRejected04/20/2017

Related to OsmoNITB - Feature #1712: 3G VoiceClosed05/14/2016

Related to OsmoMSC - Bug #2276: Make sure A and Iu can run alongside each other.Closed05/20/2017

Has duplicate OsmoNITB - Feature #1594: Split of BSC part from CoreNITB partRejected02/23/2016

Precedes OsmoMSC - Feature #1609: Inter-BSC hand-over is missing (MSC side)Resolved11/21/201611/21/2016

Associated revisions

Revision 89fecbff (diff)
Added by neels about 4 years ago

mscsplit: various preparations to separate MSC from BSC

Disable large parts of the code that depend on BSC presence. The code sections
disabled by #if BEFORE_MSCSPLIT shall be modified or dropped in the course of
adding the A-interface.

Don't set msg->lchan nor msg->dst.
Don't use lchan in libmsc.
Decouple lac from bts.

Prepare entry/exit point for MSC -> BSC and MSC -> RNC communication:
Add msc_ifaces.[hc], a_iface.c, with a general msc_tx_dtap() to redirect to
different interfaces depending on the actual subscriber connection.
While iu_tx() is going to be functional fairly soon, the a_tx() is going to be
just a dummy for some time (see comment).
Add Iu specific fields in gsm_subscriber_connection: the UE connection pointer
and an indicator for the Integrity Protection status on Iu (to be fully
implemented in later commits).
Add lac member to gsm_subscriber_connection, to allow decoupling from
bts->location_area_code. The conn->lac will actually be set in iu.c in an
upcoming commit ("add iucs.[hc]").

move to libcommon-cs: gsm48_extract_mi(), gsm48_paging_extract_mi().

libmsc: duplicate gsm0808 / gsm48 functions (towards BSC).
In osmo-nitb, libmsc would directly call the functions on the BSC level, not
always via the bsc_api. When separating libmsc from libbsc, some functions are
missing from the linkage.
Hence duplicate these functions to libmsc, add an msc_ prefix for clarity, also
add a _tx to gsm0808_cipher_mode():
  • add msc_gsm0808_tx_cipher_mode() (dummy/stub)
  • add msc_gsm48_tx_mm_serv_ack()
  • add msc_gsm48_tx_mm_serv_rej()
    Call these from libmsc instead of
  • gsm0808_cipher_mode()
  • gsm48_tx_mm_serv_ack()
  • gsm48_tx_mm_serv_rej()
    Also add a comment related to msc_gsm0808_tx_cipher_mode() in two places.

Remove internal RTP streaming code; OsmoNITB supported that, but for OsmoMSC,
this will be done with an external MGCP gateway.

Remove LCHAN_MODIFY from internal MNCC state machine.

Temporarily disable all paging to be able to link libmsc without libbsc.
Skip the paging part of channel_test because the paging is now disabled.
Employ fake paging shims in order for msc_vlr_tests to still work.

msc_compl_l3(): publish in .h, tweak return value. Use new libmsc enum values
for return val, to avoid dependency on libbsc headers. Make callable from
other scopes: publish in osmo_msc.h and remove 'static' in osmo_msc.c

add gsm_encr to subscr_conn
move subscr_request to gsm_subscriber.h
subscr_request_channel() -> subscr_request_conn()
move to libmsc: osmo_stats_vty_add_cmds()
gsm_04_08: remove apply_codec_restrictions()
gsm0408_test: use NULL for root ctx
move to libbsc: gsm_bts_neighbor()
move to libbsc: lchan_next_meas_rep()
move vty config for t3212 to network level (periodic lu)
remove unneccessary linking from some tests
remove handle_abisip_signal()
abis_rsl.c: don't use libvlr from libbsc

gsm_subscriber_connection: put the LAC here, so that it is available without
accessing conn->bts. In bsc_api.c, place this lac in conn for the sake of
transition: Iu and A will use this new field to pass the LAC around, but in a
completely separate OsmoBSC this is not actually needed. It can be removed
again from osmo-bsc.git when the time has come.

Siemens MRPCI: completely drop sending the MRPCI messages for now, they shall
be added in osmo-bsc once the A-Interface code has settled. See OS#2389.

Related: OS#1845 OS#2257 OS#2389
Change-Id: Id3705236350d5f69e447046b0a764bbabc3d493c

Revision ce4d88bd (diff)
Added by neels about 4 years ago

mscsplit: various preparations to separate MSC from BSC

Disable large parts of the code that depend on BSC presence. The code sections
disabled by #if BEFORE_MSCSPLIT shall be modified or dropped in the course of
adding the A-interface.

Don't set msg->lchan nor msg->dst.
Don't use lchan in libmsc.
Decouple lac from bts.

Prepare entry/exit point for MSC -> BSC and MSC -> RNC communication:
Add msc_ifaces.[hc], a_iface.c, with a general msc_tx_dtap() to redirect to
different interfaces depending on the actual subscriber connection.
While iu_tx() is going to be functional fairly soon, the a_tx() is going to be
just a dummy for some time (see comment).
Add Iu specific fields in gsm_subscriber_connection: the UE connection pointer
and an indicator for the Integrity Protection status on Iu (to be fully
implemented in later commits).
Add lac member to gsm_subscriber_connection, to allow decoupling from
bts->location_area_code. The conn->lac will actually be set in iu.c in an
upcoming commit ("add iucs.[hc]").

move to libcommon-cs: gsm48_extract_mi(), gsm48_paging_extract_mi().

libmsc: duplicate gsm0808 / gsm48 functions (towards BSC).
In osmo-nitb, libmsc would directly call the functions on the BSC level, not
always via the bsc_api. When separating libmsc from libbsc, some functions are
missing from the linkage.
Hence duplicate these functions to libmsc, add an msc_ prefix for clarity, also
add a _tx to gsm0808_cipher_mode():
  • add msc_gsm0808_tx_cipher_mode() (dummy/stub)
  • add msc_gsm48_tx_mm_serv_ack()
  • add msc_gsm48_tx_mm_serv_rej()
    Call these from libmsc instead of
  • gsm0808_cipher_mode()
  • gsm48_tx_mm_serv_ack()
  • gsm48_tx_mm_serv_rej()
    Also add a comment related to msc_gsm0808_tx_cipher_mode() in two places.

Remove internal RTP streaming code; OsmoNITB supported that, but for OsmoMSC,
this will be done with an external MGCP gateway.

Remove LCHAN_MODIFY from internal MNCC state machine.

Temporarily disable all paging to be able to link libmsc without libbsc.
Skip the paging part of channel_test because the paging is now disabled.
Employ fake paging shims in order for msc_vlr_tests to still work.

msc_compl_l3(): publish in .h, tweak return value. Use new libmsc enum values
for return val, to avoid dependency on libbsc headers. Make callable from
other scopes: publish in osmo_msc.h and remove 'static' in osmo_msc.c

add gsm_encr to subscr_conn
move subscr_request to gsm_subscriber.h
subscr_request_channel() -> subscr_request_conn()
move to libmsc: osmo_stats_vty_add_cmds()
gsm_04_08: remove apply_codec_restrictions()
gsm0408_test: use NULL for root ctx
move to libbsc: gsm_bts_neighbor()
move to libbsc: lchan_next_meas_rep()
move vty config for t3212 to network level (periodic lu)
remove unneccessary linking from some tests
remove handle_abisip_signal()
abis_rsl.c: don't use libvlr from libbsc

gsm_subscriber_connection: put the LAC here, so that it is available without
accessing conn->bts. In bsc_api.c, place this lac in conn for the sake of
transition: Iu and A will use this new field to pass the LAC around, but in a
completely separate OsmoBSC this is not actually needed. It can be removed
again from osmo-bsc.git when the time has come.

Siemens MRPCI: completely drop sending the MRPCI messages for now, they shall
be added in osmo-bsc once the A-Interface code has settled. See OS#2389.

Related: OS#1845 OS#2257 OS#2389
Change-Id: Id3705236350d5f69e447046b0a764bbabc3d493c

Revision 5dd2508c (diff)
Added by neels about 4 years ago

mscsplit: various preparations to separate MSC from BSC

Disable large parts of the code that depend on BSC presence. The code sections
disabled by #if BEFORE_MSCSPLIT shall be modified or dropped in the course of
adding the A-interface.

Don't set msg->lchan nor msg->dst.
Don't use lchan in libmsc.
Decouple lac from bts.

Prepare entry/exit point for MSC -> BSC and MSC -> RNC communication:
Add msc_ifaces.[hc], a_iface.c, with a general msc_tx_dtap() to redirect to
different interfaces depending on the actual subscriber connection.
While iu_tx() is going to be functional fairly soon, the a_tx() is going to be
just a dummy for some time (see comment).
Add Iu specific fields in gsm_subscriber_connection: the UE connection pointer
and an indicator for the Integrity Protection status on Iu (to be fully
implemented in later commits).
Add lac member to gsm_subscriber_connection, to allow decoupling from
bts->location_area_code. The conn->lac will actually be set in iu.c in an
upcoming commit ("add iucs.[hc]").

move to libcommon-cs: gsm48_extract_mi(), gsm48_paging_extract_mi().

libmsc: duplicate gsm0808 / gsm48 functions (towards BSC).
In osmo-nitb, libmsc would directly call the functions on the BSC level, not
always via the bsc_api. When separating libmsc from libbsc, some functions are
missing from the linkage.
Hence duplicate these functions to libmsc, add an msc_ prefix for clarity, also
add a _tx to gsm0808_cipher_mode():
  • add msc_gsm0808_tx_cipher_mode() (dummy/stub)
  • add msc_gsm48_tx_mm_serv_ack()
  • add msc_gsm48_tx_mm_serv_rej()
    Call these from libmsc instead of
  • gsm0808_cipher_mode()
  • gsm48_tx_mm_serv_ack()
  • gsm48_tx_mm_serv_rej()
    Also add a comment related to msc_gsm0808_tx_cipher_mode() in two places.

Remove internal RTP streaming code; OsmoNITB supported that, but for OsmoMSC,
this will be done with an external MGCP gateway.

Remove LCHAN_MODIFY from internal MNCC state machine.

Temporarily disable all paging to be able to link libmsc without libbsc.
Skip the paging part of channel_test because the paging is now disabled.
Employ fake paging shims in order for msc_vlr_tests to still work.

msc_compl_l3(): publish in .h, tweak return value. Use new libmsc enum values
for return val, to avoid dependency on libbsc headers. Make callable from
other scopes: publish in osmo_msc.h and remove 'static' in osmo_msc.c

add gsm_encr to subscr_conn
move subscr_request to gsm_subscriber.h
subscr_request_channel() -> subscr_request_conn()
move to libmsc: osmo_stats_vty_add_cmds()
gsm_04_08: remove apply_codec_restrictions()
gsm0408_test: use NULL for root ctx
move to libbsc: gsm_bts_neighbor()
move to libbsc: lchan_next_meas_rep()
move vty config for t3212 to network level (periodic lu)
remove unneccessary linking from some tests
remove handle_abisip_signal()
abis_rsl.c: don't use libvlr from libbsc

gsm_subscriber_connection: put the LAC here, so that it is available without
accessing conn->bts. In bsc_api.c, place this lac in conn for the sake of
transition: Iu and A will use this new field to pass the LAC around, but in a
completely separate OsmoBSC this is not actually needed. It can be removed
again from osmo-bsc.git when the time has come.

Siemens MRPCI: completely drop sending the MRPCI messages for now, they shall
be added in osmo-bsc once the A-Interface code has settled. See OS#2389.

Related: OS#1845 OS#2257 OS#2389
Change-Id: Id3705236350d5f69e447046b0a764bbabc3d493c

History

#1 Updated by laforge almost 5 years ago

#2 Updated by neels over 4 years ago

  • Subject changed from Full BSC/MSC split in NITB/CSCN to Full BSC/MSC split in NITB/MSC
  • Description updated (diff)

#3 Updated by laforge over 4 years ago

  • Assignee set to neels

#4 Updated by laforge over 4 years ago

  • Precedes Feature #1609: Inter-BSC hand-over is missing (MSC side) added

#5 Updated by neels over 4 years ago

  • Status changed from New to In Progress
  • % Done changed from 0 to 50

While this has definitely been ongoing for a long time, it's hard to set a meaningful percentage.
Recent progress includes separation of gprs, bsc and msc subscribers on the openbsc master branch,
and combination of the 3G with VLR efforts.

On the 3G branch (sysmocom/iu), there is an OsmoMSC, i.e. an OsmoNITB without a BSC, that talks
to IuCS and has code stubs to add an A-interface, which will talk to the BSC. This OsmoMSC will
become the new main circuit-switched solution from Osmocom. For now it can only do 3G.

#6 Updated by neels over 4 years ago

  • Has duplicate Feature #1594: Split of BSC part from CoreNITB part added

#7 Updated by msuraev over 4 years ago

  • Related to Feature #2017: Cleanup deprecated, make breaking changes for BSC/MSC split added

#8 Updated by neels over 4 years ago

The AoIP developments by dexter are progressing well, we may soon have a complete OsmoMSC, i.e. one that works for both 3G and 2G and allows us to split MSC and BSC for good.

#9 Updated by neels over 4 years ago

#10 Updated by neels over 4 years ago

  • Related to Bug #2276: Make sure A and Iu can run alongside each other. added

#11 Updated by neels over 4 years ago

  • Status changed from In Progress to Resolved
  • % Done changed from 50 to 100

Splitting into separate repositories is ongoing. The code itself is pretty much separated, and the remaining bits will be inherently taken care of by the issue about separate repositories: #2257

#12 Updated by laforge about 4 years ago

  • Status changed from Resolved to Closed

Also available in: Atom PDF

Add picture from clipboard (Maximum size: 48.8 MB)