MSC Pool and NRI
This document describes the MSC-in-Pool architecture implemented by OmniMSC by Omnitouch per 3GPP TS 23.236. Pooling allows multiple MSC servers to share a common pool area, providing load distribution across MSCs and resilience against individual MSC failures.
For pool-aware routing behavior, see Routing. For the Pool page in the web interface, see Control Panel Guide. For configuration parameters, see Configuration Reference. For TMSI allocation details including the no-rollback design and NRI embedding, see Security.
MSC-in-Pool Concept
In a traditional architecture, each BSC connects to a single MSC. If that MSC fails, all subscribers served by its BSCs lose service. MSC pooling addresses this limitation by allowing BSCs to connect to multiple MSCs simultaneously via the A-Flex interface. Any MSC in the pool can serve any subscriber arriving from any BSC in the pool area.
The key mechanism enabling pool operation is the Network Resource Identifier (NRI), a bit field embedded in the TMSI that identifies which MSC allocated that TMSI. When a subscriber presents a TMSI to a BSC, the BSC extracts the NRI and routes the signalling to the correct MSC. If that MSC is unavailable, the BSC selects an alternative MSC from the pool, and the receiving MSC handles the subscriber locally.
Each BSC maintains SCTP associations to every MSC in the pool. For returning subscribers, the BSC uses the NRI in the TMSI to select the MSC that originally registered the subscriber. For new subscribers (no TMSI or null NRI), the BSC uses round-robin or load-based selection.
Network Resource Identifier (NRI)
The NRI is encoded within the 32-bit TMSI allocated by the MSC. The 8 most significant bits (bits 31-24) are reserved; the NRI field starts at bit 23 and extends downward for nri_bitlength bits. The remaining low-order bits (bit 23 - nri_bitlength down to bit 0) are the random portion of the TMSI. The length of the NRI field is configurable and must be identical across all pool members.
TMSI Bit Layout
For a 10-bit NRI, the reserved field is bits 31-24 (8 bits), the NRI occupies bits 23-14 (10 bits), and the random portion is bits 13-0 (14 bits):
The default NRI bit length is 10, supporting up to 1024 distinct NRI values. Smaller deployments may use fewer bits. The random portion is always 24 - nri_bitlength bits wide.
| NRI Bit Length | Maximum NRI Values | Remaining (Random) TMSI Bits |
|---|---|---|
| 5 | 32 | 19 |
| 8 | 256 | 16 |
| 10 | 1024 | 14 |
The "null NRI" (default value 0, configurable via null_nri) indicates that the TMSI was not assigned by any pool member. A subscriber presenting a null NRI is treated as a new subscriber and accepted locally with a fresh TMSI allocation.
TMSI Allocation
When pool mode is active, OmniMSC embeds one of its assigned NRI values into every TMSI it allocates. The allocation process generates a random 32-bit base TMSI and then overwrites the NRI bit field with the MSC's designated NRI value. This ensures that any BSC in the pool area can determine which MSC owns a given subscriber by inspecting the TMSI. For general TMSI allocation and confirmation behavior (including the no-rollback design choice), see Security.
The MSC uses its first configured NRI value as the default for new allocations. All NRI values assigned to the MSC are recognized as "local" when evaluating incoming TMSIs.
Configuration
Pool membership is configured under the pool key in the MSC configuration (see Configuration Reference). The essential parameters are:
| Parameter | Default | Description |
|---|---|---|
| enabled | false | Master switch for pooling. Must be set to true for the pool configuration to take effect; when false (or absent) the MSC operates in standalone (non-pooled) mode. |
| pool_id | nil | Pool identifier. All MSCs in the same pool must share the same pool_id. |
| nri_bitlength | 10 | Number of bits used for the NRI field in the TMSI. Must be identical across all pool members. Valid range: 1 through 10. |
| nri_values | (empty list) | List of NRI values owned by this MSC instance. TMSIs allocated by this MSC will contain one of these values. NRI ranges must not overlap between pool members. |
| members | (empty list) | List of other MSC instances in the pool. Each member entry includes a logical name, address, port, and assigned NRI values. Used for NRI-based subscriber relaying and health monitoring. |
Each member entry in the members list requires:
| Parameter | Description |
|---|---|
| name | Logical name of the remote pool member |
| address | IP address or hostname of the remote MSC, used as the target of the health liveness probe |
| port | Signalling port on the remote MSC (default 2905), probed via a TCP or SCTP connection attempt to determine member health |
| nri_values | NRI values assigned to the remote member, used to identify which MSC owns a given TMSI |
Foreign NRI Handling
When a subscriber presents a TMSI containing an NRI that belongs to a different pool member, the receiving MSC must decide how to handle the subscriber. This situation arises when the BSC's NRI-based selection function (NNSF) routes to the wrong MSC, or when the owning MSC is unavailable.
The Pool Manager always accepts the subscriber locally and reallocates the TMSI with a local NRI value. The decision on how to resolve the subscriber's identity depends on the owning MSC's health status:
| Owning MSC Status | Behavior |
|---|---|
| Reachable | Send MAP SendIdentification to the owning MSC to retrieve the IMSI and authentication vectors, then continue the location update with the received identity |
| Unreachable | Request the IMSI directly from the UE via an Identity Request, then fetch authentication vectors from the HLR |
| Unknown | Same behavior as unreachable; request the IMSI from the UE |
In all cases, the subscriber is re-registered at the receiving MSC with a new TMSI containing a local NRI value.
Pool Member Health Tracking
Each MSC in the pool monitors the health of other pool members. The health state is tracked per member and directly affects foreign NRI handling behavior.
| Member State | Description | Effect on Foreign NRI Handling |
|---|---|---|
| Up | Member is responding to health probes | Foreign NRI subscribers are identified via MAP SendIdentification to the owning MSC |
| Down | Member has not responded within the timeout period | Foreign NRI subscribers are identified by requesting the IMSI from the UE |
| Unknown | Initial state before health probes have completed | Treated the same as Down |
| Draining | Member has announced a drain for maintenance | No new subscribers are relayed; existing sessions are maintained until completion |
When a pool member restarts, it broadcasts MAP Reset to all pool members. Receiving MSCs mark all subscriber records originally belonging to the reset MSC for re-registration on next contact. Health state changes are broadcast to the Control Panel via PubSub for real-time visibility.
Rolling Upgrade Procedure
Pool architecture enables zero-downtime upgrades by draining and upgrading one MSC at a time.
- Set the target MSC to draining state via the Control Panel or API. BSCs stop sending new subscribers to this MSC; existing sessions continue.
- Wait for active calls to complete naturally. Monitor the active call count on the dashboard.
- Issue Clear Command to any remaining BSC connections.
- Stop the MSC process. Remaining subscribers will re-register on other pool members at next contact.
- Apply the software update or configuration change.
- Start the upgraded MSC. It establishes SCTP associations with BSCs and announces itself via MAP Reset.
- The MSC begins accepting new subscribers. BSCs include it in their selection algorithm.
- Verify health on the Pool page: member state is Up, NRI allocation is correct, subscribers are registering.
Repeat for each MSC in the pool.
Pool LiveView Page
The Pool page in the Control Panel displays:
- Pool identity: pool ID, local NRI values, NRI bit length.
- Member status table: name, address and port, NRI range, health state (Up, Down, or Draining), last probe timestamp, and subscriber count per member.
- NRI distribution chart: visual distribution of subscribers across NRI ranges.
- Foreign NRI events: recent foreign NRI encounters showing the TMSI presented, owning MSC, and outcome (relayed via MAP SendIdentification, resolved via IMSI request, or failed).
- Pool statistics: total pool subscribers, local versus foreign NRI ratio, relay success rate.
3GPP Specification References
| Specification | Title | Relevance |
|---|---|---|
| TS 23.236 | Intra-domain connection of RAN nodes to multiple CN nodes | MSC Pool architecture, NRI format, BSC selection |
| TS 23.012 | Location Management Procedures | VLR interaction with pool operation |
| TS 29.002 | MAP Specification | MAP SendIdentification, MAP Reset for pool coordination |
| TS 48.008 | BSC-MSC Interface (A-Flex) | A-Flex extensions for pool-aware BSSAP signalling |