Starting March 27, 2025, we recommend using android-latest-release
instead of aosp-main
to build and contribute to AOSP. For more information, see Changes to AOSP.
Multi-operator network support
Stay organized with collections
Save and categorize content based on your preferences.
Devices launching with Android 11 or higher can provide
support for multiple public land mobile networks (PLMNs). Android
11 includes methods in the
cell identification APIs
to get information about a cell's supported PLMNs to distinguish between
cellular service providers and network operators.
Multi-PLMN support provides flexibility to mobile network operators (MNOs) by
allowing them to broadcast multiple identities. This is primarily required to
support sharing agreements where common hardware or towers are used by multiple
MNOs. In a multi-PLMN scenario, when a device chooses to register using a
particular tower, it selects the PLMN to use for that registration, which locks
the device's profile to that PLMN for all ensuing communication. The
getRegisteredPlmn
method retrieves the registered PLMN for the device.
Implementation
To support multi-PLMN on devices running Android 11
or higher, implement the functions in the following locations in
IRadio
.
IRadio.hal and IRadioResponse.hal
In the Radio 1.5 HAL, to support multi-PLMN, information about the network the
device registers on is reported differently than previous versions. First, the
registered PLMN (RPLMN) is reported separately because on multi-PLMN cells, the
RPLMN might not be the primary PLMN-ID. And in the CellIdentity
structures,
the cell provides a primary PLMN-ID and a list of additional PLMN-IDs. The RPLMN
must be the primary PLMN-ID or one of the additional PLMN-IDs indicated in the
CellIdentity
structure.
The changes in the Radio 1.5 HAL impact the following two HAL methods in
IRadio.hal
(and their corresponding response methods in
IRadioResponse.hal
).
getDataRegState_1_5
and getDataRegStateResult_1_5(RegStateResult
result)
getVoiceRegState_1_5
and getVoiceRegStateResult_1_5(RegStateresult
result)
types.hal
Implement the following
in types.hal
:
ClosedSubscriberGroupInfo
: Included optionally with every
CellIdentity
instance. This structure is used to provide details about
the closed subscriber group to which a cell belongs, if any. This is
commonly used to identity small cells such as personal LTE devices. It
can also be used in deployments such as CBRS LTE.
CellIdentityLte
: Supports a list of additional PLMN-IDs.
CellIdentityWcdma
: Supports a list of additional PLMN-IDs.
CellIdentityTdscdma
: Supports a list of additional PLMN-IDs.
RegStateResult
: Includes an updated CellIdentity
structure and a
field to indicate the RPLMN.
Validation
To test your implementation, run the following CTS test:
CellInfoTest
while registered to a multi-operator radio access network (MORAN) or
multi-operator core network (MOCN).
Content and code samples on this page are subject to the licenses described in the Content License. Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
Last updated 2025-06-18 UTC.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-06-18 UTC."],[],[],null,["# Multi-operator network support\n\nDevices launching with Android 11 or higher can provide\nsupport for multiple public land mobile networks (PLMNs). Android\n11 includes methods in the\n[cell identification APIs](https://developer.android.com/reference/android/telephony/CellIdentity)\nto get information about a cell's supported PLMNs to distinguish between\ncellular service providers and network operators.\n\nMulti-PLMN support provides flexibility to mobile network operators (MNOs) by\nallowing them to broadcast multiple identities. This is primarily required to\nsupport sharing agreements where common hardware or towers are used by multiple\nMNOs. In a multi-PLMN scenario, when a device chooses to register using a\nparticular tower, it selects the PLMN to use for that registration, which locks\nthe device's *profile* to that PLMN for all ensuing communication. The\n[`getRegisteredPlmn`](https://developer.android.com/reference/android/telephony/NetworkRegistrationInfo#getRegisteredPlmn())\nmethod retrieves the registered PLMN for the device.\n\nImplementation\n--------------\n\nTo support multi-PLMN on devices running Android 11\nor higher, implement the functions in the following locations in\n[`IRadio`](https://android.googlesource.com/platform/hardware/interfaces/+/refs/heads/android16-release/radio/1.5/).\n\n### IRadio.hal and IRadioResponse.hal\n\nIn the Radio 1.5 HAL, to support multi-PLMN, information about the network the\ndevice registers on is reported differently than previous versions. First, the\nregistered PLMN (RPLMN) is reported separately because on multi-PLMN cells, the\nRPLMN might not be the primary PLMN-ID. And in the `CellIdentity` structures,\nthe cell provides a primary PLMN-ID and a list of additional PLMN-IDs. The RPLMN\nmust be the primary PLMN-ID or one of the additional PLMN-IDs indicated in the\n`CellIdentity` structure.\n\nThe changes in the Radio 1.5 HAL impact the following two HAL methods in\n[`IRadio.hal`](https://android.googlesource.com/platform/hardware/interfaces/+/refs/heads/android16-release/radio/1.5/IRadio.hal)\n(and their corresponding response methods in\n[`IRadioResponse.hal`](https://android.googlesource.com/platform/hardware/interfaces/+/refs/heads/android16-release/radio/1.5/IRadioResponse.hal)).\n\n- `getDataRegState_1_5` and `getDataRegStateResult_1_5(RegStateResult\n result)`\n- `getVoiceRegState_1_5` and `getVoiceRegStateResult_1_5(RegStateresult\n result)`\n\n### types.hal\n\nImplement the following\nin [`types.hal`](https://android.googlesource.com/platform/hardware/interfaces/+/refs/heads/android16-release/radio/1.5/types.hal):\n\n- `ClosedSubscriberGroupInfo`: Included optionally with every `CellIdentity` instance. This structure is used to provide details about the closed subscriber group to which a cell belongs, if any. This is commonly used to identity *small cells* such as personal LTE devices. It can also be used in deployments such as CBRS LTE.\n- `CellIdentityLte`: Supports a list of additional PLMN-IDs.\n- `CellIdentityWcdma`: Supports a list of additional PLMN-IDs.\n- `CellIdentityTdscdma`: Supports a list of additional PLMN-IDs.\n- `RegStateResult`: Includes an updated `CellIdentity` structure and a field to indicate the RPLMN.\n\nValidation\n----------\n\nTo test your implementation, run the following CTS test:\n[`CellInfoTest`](https://android.googlesource.com/platform/cts/+/3c3d33a/tests/tests/telephony/src/android/telephony/cts/CellInfoTest.java)\nwhile registered to a multi-operator radio access network (MORAN) or\nmulti-operator core network (MOCN)."]]