[[smscb]]
== SMSCB (Cell Broadcast)

OsmoBSC supports SMS Cell Broadcast (SMSCB) services (CBS).  This
includes the CBSP protocol to interact with a CBC (Cell Broadcast
Centre) such as OsmoCBC, as well as the scheduling of SMSCB messages on
both the BASIC and EXTENDED CBCH and transmission of related RSL
messages to the attached BTS.

More high-level information can be found at
https://en.wikipedia.org/wiki/Cell_Broadcast and the related
specification is <<3gpp-ts-23-041>>.

In order to use SMSCB with OsmoBSC, you will need to

* Configure OsmoBSC as either CBSP server or client
* Use a channel combination including a CBCH on the BTSs

=== Enabling a CBCH channel combination

On the Um interface, SMSCB are transmitted via the CBCH (Cell Broadcast
Channel).  The CBCH is a separate downlink-only logical channel which
must be activated on any of the BTSs requiring CBSP support.

The channel combination is configured in the `timeslot` node of each TRX.

The two `phys_chan_config` supporting CBCH are `CCCH+SDCCH4+CBCH` and
`SDCCH/8+CBCH`.  Please note that the CBCH steals one of the SDCCH, so
a SDCCH/4 will only have three remaining SDCCH, and a SDCCH/8 will
have only seven remaining SDCCH.

=== Configuring the CBSP connection

CBSP is the protocol between BSC and CBC.  It operates over TCP.

According to 3GPP TS 48.049, a BSC typically operates as a TCP server,
and the CBC connects as TCP client.  This would require the CBC to have
out-of-band knowledge of all the BSCs in the network (and their IP
addresses).

In order to comply with the specifications, OsmoBSC supports this mode
of operation as CBSP TCP server.  However, to make network operation and
configuration more simple, it also can operate in TCP client mode,
connecting to the CBC.  This way the BSCs need to know the CBC IP
address, but not vice-versa.

The BSC can operate in either CBSP TCP server mode or CBSP TCP client mode.

The CBC related configuration of OsmoBSC can be found in the `cbc` configuration
node of the VTY interface.

The default port number for the CBSP server is 48049, according to the CBSP
specification. Hence it normally suffices to configure only the IP addresses for
the remote CBC server or the local CBSP server:

.Example: Configure CBSP TCP client to connect to CBC at 1.2.3.4:48049 in osmo-bsc.cfg
----
cbc
 mode client
 client
  remote-ip 1.2.3.4
----

In server mode, the default configuration is 127.0.0.1:48049, so it suffices to
set `mode server` to accept CBSP connections from localhost:

----
cbc
 mode server
----

To also listen for inbound CBSP connections on all interfaces, both IPv4 and
IPv6:

.Example: Configure CBSP TCP server to listen on all interfaces in osmo-bsc.cfg
----
cbc
 mode server
 server
  local-ip ::
----

Should non-standard port numbers be required, these can be configured with the
`client` / `local-port` or the `server` / `remote-port` settings.

The `client` config also supports an explicit local bind for connecting to the
remote CBC, using `client` / `local-ip` and `local-port`.

IP addresses for client and server can remain configured at the same time, and
the `mode` command can be used to switch between client and server operation.
The `mode` command takes immediate effect, no restart of OsmoBSC is required.
After changing `cbc` IP addresses in the telnet VTY, it is required to switch
`mode` to `disabled` and back to `client` or `server` to take effect.

.Example: Disable the CBSP link in the telnet VTY
----
OsmoBSC> enable
OsmoBSC# configure terminal
OsmoBSC(config)# cbc
OsmoBSC(config-cbc)# mode disabled
OsmoBSC(config-cbc)# end
----

For more details on the available configuration commands, please check the OsmoBSC VTY Reference.

=== Counters

OsmoBSC has two Cell Broadcast related rate counter groups for each BTS:

* the basic CBCH ("cell broadcast channel 0")
* the extended CBCH ("cell broadcast channel 1")

See below example for a situation where no CBS messages were received yet from the CBC,
and hence only NULL messages have been sent on both basic and extended CBCH:

.Example: CBCH related rate counters on a BTS that didn't receive any CBS messages
----
cell broadcast channel 1:
         cbch:rcvd_queued:          0 (0/s 0/m 0/h 0/d) Received + queued CBCH messages (Abis)
        cbch:rcvd_dropped:          0 (0/s 0/m 0/h 0/d) Received + dropped CBCH messages (Abis)
         cbch:sent_single:          0 (0/s 0/m 0/h 0/d) Sent single CBCH messages (Um)
        cbch:sent_default:          0 (0/s 0/m 0/h 0/d) Sent default CBCH messages (Um)
           cbch:sent_null:      31366 (0/s 45/m 2677/h 30588/d) Sent NULL CBCH messages (Um)
cell broadcast channel 0:
         cbch:rcvd_queued:          0 (0/s 0/m 0/h 0/d) Received + queued CBCH messages (Abis)
        cbch:rcvd_dropped:          0 (0/s 0/m 0/h 0/d) Received + dropped CBCH messages (Abis)
         cbch:sent_single:          0 (0/s 0/m 0/h 0/d) Sent single CBCH messages (Um)
        cbch:sent_default:          0 (0/s 0/m 0/h 0/d) Sent default CBCH messages (Um)
           cbch:sent_null:      31366 (1/s 46/m 2676/h 30588/d) Sent NULL CBCH messages (Um)
----
