Skip to main content

Cell Broadcast Operations Guide

OmniLCS implements a Cell Broadcast Centre (CBC) supporting 2G networks via CBSP, 3G UTRAN networks via SABP, and 4G LTE networks via SBC-AP. The CBC can send, update, and stop broadcast messages across all connected radio access network elements simultaneously.

Send Cell Broadcast

Architecture

2G CBSP Operations

Connection Model

CBSP uses TCP transport per 3GPP TS 48.049. The CBC listens on TCP port 48049 (IANA registered) and BSCs establish inbound connections.

  • Each accepted connection spawns a connection handler under a DynamicSupervisor
  • Connections are tracked in the :cbsp_connections ETS table
  • Connection state is broadcast via PubSub to the LiveView UI

Keep-Alive

The CBC implements proactive keep-alive:

ParameterDefaultDescription
Keep-alive interval30 secondsHow often the CBC sends KEEP-ALIVE to each peer
Keep-alive timeout10 secondsTime to wait for KEEP-ALIVE COMPLETE before marking unhealthy

The CBC both sends proactive KEEP-ALIVE messages and responds to KEEP-ALIVE messages initiated by BSCs with KEEP-ALIVE COMPLETE.

CBSP Message Types

MessageDirectionCodeDescription
WRITE-REPLACECBC -> BSC0x01Send or update a broadcast message
WRITE-REPLACE COMPLETEBSC -> CBC0x02Broadcast accepted by BSC
WRITE-REPLACE FAILUREBSC -> CBC0x03Broadcast rejected by BSC
KILLCBC -> BSC0x04Stop a broadcast
KILL COMPLETEBSC -> CBC0x05Broadcast stopped
KILL FAILUREBSC -> CBC0x06Failed to stop broadcast
LOAD-QUERYCBC -> BSC0x07Query radio resource loading
LOAD-QUERY COMPLETEBSC -> CBC0x08Load information returned
LOAD-QUERY FAILUREBSC -> CBC0x09Load query failed
STATUS-QUERYCBC -> BSC0x0AQuery broadcast delivery status
STATUS-QUERY COMPLETEBSC -> CBC0x0BStatus information returned
STATUS-QUERY FAILUREBSC -> CBC0x0CStatus query failed
RESETCBC -> BSC0x10Reset broadcast state on BSC
RESET COMPLETEBSC -> CBC0x11Reset acknowledged
RESET FAILUREBSC -> CBC0x12Reset failed
RESTARTBSC -> CBC0x13BSC restarted (informational)
FAILUREBSC -> CBC0x14BSC failure indication
ERROR INDICATIONEither0x15Protocol error
KEEP-ALIVEEither0x16Connection supervision
KEEP-ALIVE COMPLETEEither0x17Keep-alive response

CBSP Message Framing

Every CBSP message on the wire is:

+----------+----------+------+
| Length | Type | IEs |
| (3 bytes)| (1 byte) | ... |
+----------+----------+------+

The 3-byte length field covers the type byte plus all IEs (excludes the 3 length bytes themselves).

Cell List Formats

The Cell List IE identifies which cells a broadcast targets. Supported formats:

DiscriminatorValueFormatDescription
CGI0x00MCC+MNC+LAC+CIFull Cell Global Identity
LAC+CI0x01PLMN+LAC+CILocation Area Code + Cell Identity
CI0x02CI onlyCell Identity only
LAI0x04MCC+MNC+LACLocation Area Identity
LAC0x05LAC onlyLocation Area Code
All in BSC0x06(no cells)All cells managed by the BSC

Channel Indicator

ValueNameDescription
0Basic CBCHPrimary Cell Broadcast Channel
1Extended CBCHExtended Cell Broadcast Channel (higher capacity)

3G SABP Operations

The Service Area Broadcast Protocol (SABP) provides the Iu-BC interface between the CBC and RNCs in a 3G UTRAN network, per 3GPP TS 25.419. SABP uses ASN.1 PER aligned encoding over TCP.

Connection Model

SABP uses TCP transport per TS 25.414 §7.1.3.3. The IANA-registered port for SABP is 3452. Per TS 25.419 §5, the CBC initiates connections for normal operations (Write-Replace, Kill, etc.) and the RNC initiates connections only for Failure/Restart Indications. Both sides use destination port 3452 when establishing new connections.

  • Each accepted TCP connection spawns a connection handler under the SABP connection DynamicSupervisor
  • Connections are tracked in the :sabp_connections ETS table
  • Connection state changes are broadcast via PubSub to the LiveView UI
  • TCP keepalive socket option is enabled since SABP has no protocol-level keep-alive mechanism

SABP Message Framing

SABP messages are framed over TCP with a 4-byte big-endian length prefix:

+-------------------+---------------------------+
| Length (4 bytes) | ASN.1 PER Encoded PDU |
| big-endian uint32 | ... |
+-------------------+---------------------------+

The length field specifies the number of bytes in the ASN.1 PER encoded payload that follows. Multiple messages may arrive in a single TCP segment; the connection handler buffers and reassembles as needed.

SABP Procedures

ProcedureCodeClassDirectionDescription
Write-Replace0Class 1CBC -> RNCSend or update a broadcast message
Kill1Class 1CBC -> RNCStop an active broadcast
Load-Status-Enquiry2Class 1CBC -> RNCQuery radio resource loading
Message-Status-Query3Class 1CBC -> RNCQuery broadcast delivery status
Reset4Class 1CBC -> RNCReset broadcast state on RNC
Restart-Indication5Class 2RNC -> CBCRNC restarted, re-send active broadcasts
Failure-Indication6Class 2RNC -> CBCRNC failure indication
Error-Indication7Class 2EitherReport a protocol error

SABP Information Elements

The SABP protocol uses ASN.1-defined Information Elements (IEs). Key IEs used in Write-Replace:

IEIDCriticalityTypeDescription
Broadcast-Message-Content0RejectBinaryEncoded CBS message content
Category1IgnoreEnumMessage priority (high, normal, background, default)
Cause2IgnoreIntegerCause value for failure/error indications
Data-Coding-Scheme4Ignore8-bitHow message content is encoded (e.g., 0x0F for GSM 7-bit)
Message-Identifier6Reject16-bitCB message identifier
New-Serial-Number7Reject16-bitSerial number for the new/updated broadcast
Number-of-Broadcasts-Requested9RejectIntegerTotal broadcast count (0..65535)
Old-Serial-Number10Ignore16-bitSerial number of message being replaced (optional)
Repetition-Period13RejectIntegerSeconds between repetitions (1..4096)
Service-Areas-List15RejectListTarget service areas (list of SAIs)

Service Area Identifier (SAI)

SABP targets broadcasts to specific Service Areas identified by SAIs. Each SAI consists of:

FieldSizeDescription
PLMN Identity3 bytesBCD-encoded MCC+MNC per 3GPP TS 24.008
LAC2 bytesLocation Area Code
SAC2 bytesService Area Code

Broadcast Category

The optional Category IE sets the priority of a broadcast message:

CategoryDescription
high-priorityHighest priority, pre-empts other broadcasts
normal-priorityStandard priority
background-priorityLow priority, does not pre-empt
default-priorityDefault when no category is specified

Restart-Indication and Failure-Indication Handling

When the CBC receives a Restart-Indication from an RNC, the RNC has restarted and lost its broadcast state. The CBC should re-send all active broadcasts to that RNC.

When the CBC receives a Failure-Indication, the RNC is reporting that certain service areas have lost broadcast capability. This is logged and emitted as a telemetry event.

4G SBC-AP Operations

CBC 4G

Connection Model

Per 3GPP TS 29.168 Section 4.3, the CBC initiates SCTP associations to each MME. The MME listens on port 29168 (IANA registered). The SCTP Payload Protocol Identifier (PPID) for SBC-AP is 24.

The transport implements automatic reconnection with exponential backoff:

ParameterValueDescription
Initial reconnect delay5 secondsFirst retry delay after connection failure
Maximum reconnect delay60 secondsMaximum backoff ceiling
SCTP heartbeat interval10 secondsPeer address heartbeat
SCTP path max retransmissions7Before declaring path failure
SCTP RTO max30 secondsMaximum retransmission timeout
SCTP RTO min1 secondMinimum retransmission timeout

SBC-AP Procedures

ProcedureCodeClassDirectionDescription
Write-Replace-Warning0Class 1CBC -> MMESend or update a warning message
Stop-Warning1Class 1CBC -> MMEStop an active warning
Error-Indication2Class 2EitherReport a protocol error
PWS-Restart-Indication3Class 2MME -> CBCMME restarted, re-send active warnings
PWS-Failure-Indication4Class 2MME -> CBCeNB failure, cells lost broadcast capability

Write-Replace-Warning-Request IEs

IEIDCriticalityTypeDescription
Message-Identifier5Reject16-bitCB message identifier (e.g., 0x1112 for CMAS)
Serial-Number11Reject16-bitSerial number with geo scope, msg code, update number
List-of-TAIs14RejectListTracking area identities for the broadcast
Warning-Area-List15IgnoreChoiceTarget area (TAI list, cell list, or emergency area)
Repetition-Period10RejectIntegerSeconds between repetitions (0..4096)
Number-of-Broadcasts-Requested7RejectIntegerTotal broadcast count (0..65535)
Warning-Type18Ignore2 bytesETWS warning type + activation flags
Data-Coding-Scheme3Ignore8-bitHow message content is encoded
Warning-Message-Content16IgnoreBinaryEncoded CBS pages
Omc-Id19IgnoreBinaryOperations centre identifier
Concurrent-Warning-Message-Indicator20RejectBooleanAllow concurrent warnings

Stop-Warning-Request IEs

IEIDCriticalityDescription
Message-Identifier5RejectCB message identifier to stop
Serial-Number11RejectSerial number of the broadcast to stop
List-of-TAIs14Reject(Optional) Limit stop to specific TAIs
Warning-Area-List15Ignore(Optional) Limit stop to specific areas

PWS-Restart-Indication Handling

When the CBC receives a PWS-Restart-Indication from an MME, it re-sends all active broadcasts (those in :sent or :acknowledged status) to that MME. This ensures broadcast continuity after MME restarts.

PWS-Failure-Indication Handling

When the CBC receives a PWS-Failure-Indication, it marks affected broadcasts with a :pws_failure response for the reporting MME association. This is logged as a warning.

Message Formatting

GSM 7-bit Encoding

The default encoding for CBS messages. Each CBS page holds up to 93 septets packed into 82 bytes.

The GSM 7-bit default alphabet maps standard Latin characters plus Greek letters and special symbols. Characters not in the basic alphabet use the extension table (escape sequence 0x1B + extension code), consuming two septets.

The Warning-Message-Content binary structure:

+----------+-------------------------------------------+
| Num Pages| Page 1 (82 bytes packed + 1 byte length) |
| (1 byte) | Page 2 ... |
+----------+-------------------------------------------+

UCS-2 Encoding

For non-Latin scripts (CJK, Arabic, Thai, etc.). Each CBS page holds up to 40 UCS-2 characters (80 bytes of UTF-16BE data), padded to 82 bytes.

Data Coding Scheme (DCS)

EncodingDCS ValueDescription
GSM 7-bit0x0FGSM 7-bit default alphabet, language unspecified
UCS-20x48UCS-2 (UTF-16BE), language unspecified

The DCS can be set explicitly per broadcast or is auto-derived from the encoding parameter.

Serial Number Structure

Per 3GPP TS 23.041 Section 9.4.1.2.1, the 16-bit serial number has internal structure:

+----+------------+--------+
| GS | Msg Code | Update |
| 2b | 10 bits | 4 bits |
+----+------------+--------+
FieldBitsDescription
Geographical Scope (GS)15-140 = Cell-wide immediate, 1 = PLMN-wide, 2 = LA/TA-wide, 3 = Cell-wide
Message Code13-4Identifies the broadcast within its scope (0..1023)
Update Number3-0Incremented for message updates (0..15)

The MessageFormatter.build_serial_number/3 helper constructs a serial number from these components.

Warning Types (ETWS)

The Warning-Type IE is 2 bytes per 3GPP TS 23.041 Section 9.3.24:

Warning TypeOctet 1 ValueDescription
Earthquake0x00Earthquake warning
Tsunami0x01Tsunami warning
Earthquake + Tsunami0x02Combined earthquake and tsunami
Test0x03Test warning
Other0x04Other emergency

Octet 2 activation flags (default 0xC0):

BitValueDescription
Bit 80x80Emergency User Alert (activate alert tone/vibration)
Bit 70x40Popup (automatically display message on screen)

Both bits are set by default (0xC0) to ensure maximum visibility.

Broadcast State Management

State Lifecycle

Persistence

Active broadcasts for 2G, 3G, and 4G are persisted to priv/active_broadcasts.json as JSON. On startup, the Engine reloads this file to restore broadcast state. This allows the CBC to re-send active warnings after application restart. The persistence file stores three separate broadcast maps: active_broadcasts_4g, active_broadcasts_3g, and active_broadcasts_2g3g.

Response Tracking

For 4G broadcasts, each send_broadcast_4g starts a 30-second response timeout timer. Responses from MMEs are correlated by Message-Identifier and Serial-Number. The timer is cancelled when all expected MME peers have responded. Timed-out peers are logged with a :timeout cause.

Active Broadcasts View

Active Broadcasts

The Active Broadcasts page provides a unified view of all in-flight broadcasts across 2G, 3G, and 4G networks.

Broadcast History

The Engine maintains a rolling history of the last 100 4G broadcasts for the LiveView UI and API queries.

Troubleshooting

No MMEs Connected (SBC-AP)

  1. Verify mme_peers configuration contains correct IP addresses and ports
  2. Check that the local_ip is reachable from the MME network
  3. Look for SCTP connection errors in the log: SBC-AP: Failed to connect to MME
  4. Verify SCTP is not blocked by firewalls (protocol 132)
  5. Confirm MME is listening on port 29168

No BSCs Connected (CBSP)

  1. Verify listen_ip and listen_port configuration under :cbsp
  2. Check that TCP port 48049 is not blocked by firewalls
  3. Look for accept errors: CBSP accept failed
  4. Confirm BSC is configured with the CBC IP address and port

No RNCs Connected (SABP)

  1. Verify listen_ip and listen_port configuration under :sabp
  2. Check that TCP port 3452 is not blocked by firewalls
  3. Look for accept errors: SABP accept failed
  4. Confirm RNC is configured with the CBC IP address and port
  5. Check logs for SABP connection closed by peer or SABP TCP error messages

Broadcast Not Delivered

  1. Check the active broadcasts table for response status
  2. Look for WRITE-REPLACE FAILURE or KILL FAILURE messages in the CBSP/SABP message log
  3. Verify cell list format matches what the BSC/RNC/MME expects
  4. For 4G, check that TAC values are valid for the target MME
  5. For 3G, check that Service Area Identifiers (SAIs) are valid for the target RNC
  6. Check the broadcast history for timeout entries

Encoding Issues

  1. For non-Latin text, ensure :ucs2 encoding is selected
  2. Verify the DCS matches the encoding (0x0F for GSM 7-bit, 0x48 for UCS-2)
  3. GSM 7-bit can only represent the GSM default alphabet; unsupported characters are replaced with ?

3GPP References

SpecificationTitle
TS 25.419UTRAN Iu-BC interface: Service Area Broadcast Protocol (SABP)
TS 29.168Cell Broadcast Centre interfaces with the Evolved Packet Core (SBC-AP)
TS 48.049Cell Broadcast Centre Protocol (CBSP)
TS 23.041Technical realization of Cell Broadcast Service (CBS)
TS 23.038Alphabets and language-specific information (DCS, GSM 7-bit)
TS 24.008Mobile radio interface layer 3 specification (PLMN identity encoding)