3GPP LCLS (Local Call, Local Switch)
====================================
:author:	Harald Welte <laforge@gnumonks.org>
:copyright:	2018 by Harald Welte (License: CC-BY-SA)
:backend:	slidy
:max-width:	45em

== Classic GSM User Plane

* user plane joins signaling plane at all times
* voice circuit between two phones in same BTS
** goes from BTS to BSC (Abis) where a BSC-colocated TRAU is located
** goes from BSC to MSC (A, typiclaly G.711))
** returns from MSC to same BSC
** returns from same BSC to same BTS
* this is of course far from optimal

== Problems with classic approach

* works great with low-latency, land-based/wired TDM network
* works not well with remote sites connected via satellite (VSAT)
** maritime sector
** rural BTSs in areas where no other back-haul is available
* various vendors have implemented proprietary solutions
** conveniently creating vendor lock-in

== 3GPP LCLS to the rescue

* official 3GPP standard appears to solve the problem in interoperable fashion
* underlying principle quite simple:
** each call gets a _Global Call Reference_ on A inerface
** this allows BSC to identify two legs of same call
** this enables BSC to locally switch the user plane between such calls

image::lcls-overview.png[width=100%]

== 3GPP LCLS problem domains

* early media / alerting phase
* what about playback of voice announcements ("your prepaid account is low")?
* what about lawful interception?
* what about hand-over implications (intra-BSC, inter-BSC, inter-MSC, inter-RAT, ...)?

== 3GPP LCLS early media

image::lcls-conn_model_1.png[width=100%]

== 3GPP LCLS early media

image::lcls-conn_model_2.png[width=100%]

== 3GPP LCLS tone / announcement

image::lcls-announcement.png[width=100%]

== 3GPP LCLS: Negotiation in CN

* don't blindly activate LCLS, but _negotiate_ it
** all calls start non-locally switched
* LCLS negotiation on Nc interface (ISUP, BICC, SIP-I) between MSCs
* LCLS negotiation only succeeds if all CN (MSC) support it
** LCLS-Negotiation-Request IE
** LCLS-Negotiation-Response IE
** LCLS-Configuration-Preference IE

== 3GPP LCLS Negotiation results

* variety of different possible media configurations (examples)
** classic non-local (non-LCLS)
** connected both-way in BSS (basic LCLS)
** connected both way in BSS _and_ bi-casted UL to CN
** connected both way in BSS _and_ send access DL from CN
*** BSS may combine or replace local DL data with DL data from CN
** connected both way in BSS _and_ send access DL from CN, block local DL

== 3GPP LCLS: Implications on A / BSSMAP

* BSS is instructed about media configuration in BSSMAP
** during call establishment
*** BSSMAP ASSIGNMENT REQ with GCR + LCLS-Config IEs
*** BSSMAP ASSIGNMENT COMPLETE with LCLS-BSS-Status IE
** during handover
*** BSSMAP HANDOVER COMPLETE with LCLS-BSS-Status IE
** at any other time
*** BSSMAP LCLS-NOTIFICATION from BSS -> MSS
*** BSSMAP LCLS-CONNECT-CONTROL message MSS -> BSS

== 3GPP LCLS: Osmocom Support

. minimal sub-set without bi-casting
.. in OsmoBSC
... added BSSMAP LCLS IEs/Messages
... use MGCP to re-configure the CN-side RTP connection on OsmoMGW
... development was test-driven (TTCN-3 tests written first)
.. in OsmoMSC
... currently not implemented yet

== 3GPP LCLS: Osmocom Restrictions

. RTP audio looping is done in BSC-colocated MGW
.. saves RTP on A interface between BSC and MSC
.. doesn't save RTP round-trip on Abis between BTS and BSC
. In deployments with a centralized BSC, that's insufficient
.. you want true RTP loop-back betwen the BTSs involved in locally switched call
. implementation pending, should happen rather soon


== Further Reading

* 3GPP TS 23.284 http://www.3gpp.org/DynaReport/23284.htm
* 3GPP WI 430001 (LCLS-CN) http://www.3gpp.org/DynaReport/WiCr--440021.htm
* 3GPP WI 440021 http://www.3gpp.org/DynaReport/WiCr--440021.htm
* http://osmocom.org/projects/cellular-infrastructure/wiki/Local_Call_Local_Switch
* Osmocom tickets
** http://osmocom.org/issues/1602
** http://osmocom.org/issues/2487

== EOF

End of File
