NR NPN (Non Public Network)
This tutorial is to show you how to configure and test NR NPN. NPN (Non Public Network) is another word for Private Network. We have used the term Private Network since long again from 4G but the implementation of Private Network hadn't clearly been defined in 3GPP. Recently (in 3GPP Release 16) this feature is formally defined / specified in 3GPP with the name of NPN (Non Public Network). Even though I would not say every detailed implementation of NPN is defined in 3GPP, roughtly 3 or 4 different high level architecture of the implementation are frequently mentioned in various documents. Followings are a list of common architectures of NPN implementation. As of now, Amarisoft product support [A],[B],[D].
- [A] SNPN (Standalone Non-Public Network)
 - [B] PNI-NPN (Public Network Integrated Non-Public Network) with Shared RAN
 - [C] PNI-NPN (Public Network Integrated Non-Public Network) with Shared RAN and Core Network CP
 - [D] PNI-NPN (Public Network Integrated Non-Public Network) with Shared RAN and Core Network CP & UP
 
Table of Contents
Introduction
Non-Public Networks (NPN), commonly referred to as Private Networks, represent a significant advancement in the evolution of mobile communications, particularly with the introduction of 5G New Radio (NR) technology. Traditionally, the deployment and management of private cellular networks lacked a standardized framework within 3GPP specifications, leading to fragmented implementations across industries and vendors. However, with the formalization of NPN in 3GPP Release 16, the telecommunications ecosystem now benefits from a unified set of guidelines and architectural models that define how private cellular networks can be deployed, managed, and integrated with public mobile networks. NPNs are designed to provide organizations—ranging from enterprises and factories to campuses and critical infrastructure—with dedicated, secure, and customizable wireless connectivity that leverages the high performance, low latency, and enhanced reliability of 5G NR. Architecturally, NPNs can be realized in several forms: as Standalone Non-Public Networks (SNPN), which are completely isolated from public mobile networks; or as Public Network Integrated Non-Public Networks (PNI-NPN), where the private network shares certain resources such as the Radio Access Network (RAN) or even core network components with the public operator. These flexible deployment options enable tailored solutions that can address stringent security, privacy, and performance requirements unique to diverse enterprise environments. The growing support for NPN in commercial products, such as those from Amarisoft, underscores its increasing relevance for industries seeking to harness the transformative potential of 5G through private network deployments. This tutorial provides a comprehensive guide on configuring and testing NR NPN, equipping learners with the foundational knowledge and hands-on skills necessary to navigate the intricacies of modern private 5G networks.
- 
    Context and Background
    
- NPNs, or Non-Public Networks, are standardized private 5G network solutions introduced in 3GPP Release 16.
 - They enable enterprises to deploy customized, secure, and high-performance wireless networks separate from or in conjunction with public mobile operator infrastructure.
 - Multiple architectural models exist for NPN deployment, including Standalone NPN (SNPN) and Public Network Integrated NPN (PNI-NPN), each offering varying levels of integration and resource sharing.
 - NPNs address critical requirements for industries such as manufacturing, logistics, healthcare, and utilities, where control over connectivity, security, and data privacy is paramount.
 
 - 
    Relevance and Importance of the Tutorial
    
- Provides step-by-step guidance for configuring and testing 5G NR NPNs using industry-standard approaches and commercially available solutions.
 - Helps learners understand the fundamental concepts, architecture, and deployment scenarios for private 5G networks as defined by 3GPP.
 - Equips professionals and engineers with practical skills to implement, validate, and troubleshoot NPN deployments in real-world environments.
 - Addresses the growing demand for private 5G networks across multiple industry sectors, supporting digital transformation and Industry 4.0 initiatives.
 
 - 
    Learning Outcomes
    
- Gain a comprehensive understanding of NPN architecture, deployment models, and integration options within the 5G NR ecosystem.
 - Acquire hands-on knowledge for configuring NPN features using supported platforms and software.
 - Learn to test and validate NPN deployments to ensure performance, security, and reliability.
 - Develop the ability to assess use cases and requirements for different NPN architectures (e.g., SNPN, PNI-NPN).
 
 - 
    Prerequisite Knowledge and Skills
    
- Foundational understanding of 5G NR technology and 3GPP standards.
 - Basic familiarity with cellular network architecture, including RAN and Core Network components.
 - Experience with network configuration and management tools is beneficial.
 - Prior exposure to private network concepts and enterprise networking is helpful but not mandatory.
 
 
Summary of the Tutorial
This tutorial demonstrates low-layer testing of PNI-NPN (Public Network Integrated Non-Public Network) functionality in a single cell environment. The focus is on configuring, executing, and verifying the operation of PNI-NPN on an Amarisoft-based test system, with an option to use either a commercial UE or Amarisoft UEsim as the Device Under Test (DUT). The summary below details the test procedure, key configuration steps, and verification methodology as described in the tutorial.
- Test Setup
    
- The setup supports two options:
        
- Setup A: Using a commercial UE that supports UE assistance information with Release Preference.
 - Setup B: Using Amarisoft UEsim as the DUT (this is the one used in the walkthrough).
 
 - The SIM card included with the system is used as-is. Configuration changes should follow the referenced Configuration Guide.
 
 - The setup supports two options:
        
 - Key Configuration Parameters
    
- Critical configuration parameters include:
        
- cag_info_list: Contains parameters such as plmn, cag_info, and network_name.
 - network_name: To be set in relevant configuration files.
 
 
 - Critical configuration parameters include:
        
 - Test 1: PNI-NPN Single Cell
    
- This test verifies PNI-NPN operation within a single cell by configuring the network and DUT appropriately, then validating the correct NPN operation through logs and system outputs.
 
- Configuration Steps
        
- Prepare gNB (callbox) configuration by copying and modifying the base configuration file (e.g., gnb-sa-pni-npn-1.cfg).
 - Configure network information for NPN, including cag_info_list parameter for SIB1 broadcast.
 - Prepare and modify MME and UE database files (mme-ims-pni-npn-1.cfg and ue_db-ims-pni-npn-1.cfg), ensuring that plmn and cag_supported are set correctly and that ue_db entries match the expected PLMN and CAG IDs.
 - On the UEsim, configure ue-nr-sa-pni-npn-1.cfg so that the cag_info_list matches the network and set as_release to 16 or higher (for commercial UE, this step is unnecessary; just ensure UE support for the relevant feature).
 - Sample configuration entries for matching CAG IDs are provided, showing various orders of the cag_id_list.
 
 - Test Execution Steps
        
- Start the LTE service on the callbox and verify the cell broadcast of multiple PLMNs as configured.
 - Check which PLMN the AMF is connected to; ensure the DUT attempts to attach to a supported PLMN.
 - Start trace logging to capture all relevant signaling messages and procedures.
 - Power on the UE (or UEsim) and allow it to complete the initial attach procedure.
 - Verify successful cell camping and initial attach for the NPN configuration. Detailed verification is performed by analyzing the trace and log files.
 
 - Verification & Log Analysis
        
- Analyze logs to ensure:
            
- NG setup is completed, with gNB advertising the correct globalGNB-ID and broadcast PLMNs.
 - SIB1 broadcasts correct plmn-IdentityInfoList and npn-IdentityInfoList as per configuration.
 - UE selects and notifies the chosen CAG PLMN in the appropriate signaling message.
 - gNB communicates selected CAG information to the core network.
 - Core network responds with the attached PLMN via registration accept.
 - Allowed CAG IDs are communicated to the gNB from the core network as per the database configuration.
 
 
 - Analyze logs to ensure:
            
 
 
Summary of Methodology:
- Configure the test environment (callbox, core network, and UE/UEsim) to support PNI-NPN operation with the proper PLMN and CAG information in all relevant components.
 - Run the test by powering up the system and UE, ensuring the UE camps on the correct cell and network broadcasts proper NPN identifiers.
 - Use logs and trace analysis to verify each step of the procedure, confirming end-to-end signaling and configuration correctness.
 - All critical configuration values (PLMN, CAG IDs, and support flags) must be consistent and correctly set across callbox, core network, and UE configurations.
 
Test Setup
Test setup for this tutorial is as shown below. This is just for low layer testing, you may not need any complicated IP layer setup.
- SIM Card used in this tutorial is the one delivered with the system as it is.
 - If you want to change the configuration, The tutorial Configuration Guide would help
 
If you have a commercial UE that support UE assistance information with Release Preference, you can use the Setup A. If you don't have any commercial UE supporting this feature but have Amarisoft UEsim you can use Setup B. In this Test, Setup B is used.
Setup A
This is the setup for the case where you use a commercial phone as DUT.

Setup B
This is the setup for the case where you use Amarisoft UEsim as DUT.

Key Configuration Parameters
Followings are important configuration parameters for this tutorial. You may click on the items for the descriptions from Amarisoft documents.
- cag_info_list : In this link, you can find the descriptions for all the parameters below.
 - plmn
 - cag_info
 - network_name
 - network_name
 
Test 1 : PNI-NPN Single Cell
This test show a test case where you configure PNI-NPN (Public Network Integrated Non-Public Network) in single cell and verify the operation.
Configuration
The configuration shown here is common configuration for all the subtests belonging to Test 1 and I will not show this configuration repeatedly for every subtest.
I have used gnb-sa-pni-npn-1.cfg which is copied and modified from gnb-sa.cfg on Callbox (gNB)

I am using mme-ims-pni-npn-1.cfg and ue_db-ims-pni-npn-1.cfg which are copied from mme-ims.cfg and ue_db-ims.cfg respectively.

On UEsim, I used ue-nr-sa-pni-npn-1.cfg which has been copied and modified from ue-nr-sa.cfg (

gnb-sa-pni-npn-1.cfg is configured as follows.
Configure network information for NPN which will be broadcast in SIB1 using cag_info_list parameter.

mme-ims-pni-npn-1.cfg is configured as shown below.
Specify the plmn to which UE is supposed to camp on and enable NPN support by setting cag_supported : true. Then include a ue_db that carries the cag_info_list.

ue_db-ims-pni-npn-1.cfg is configured as shown below.
In the ue_db, there should be at least one item that should match the plmn specified in enb.cfg and mme.cfg.

{plmn: "00104", cag_id_list: [7, 80, 90], cag_only_ind: true}
{plmn: "00104", cag_id_list: [80,7, 90], cag_only_ind: true}
{plmn: "00104", cag_id_list: [80,90, 7], cag_only_ind: true}
ue-nr-sa-pni-npn-1.cfg is configured as shown below.
The ue in the ue_list should carry a cag_info_list that match the camping cag specified in callbox (enb.cfg and mme.cfg) and set as_release to 16 or higher (

Perform the Test
Run lte service on callbox and check 'cell' command. You would notice the multiple PLMNs you configured in enb.cfg as shown below. Note that the plmn in cell command output shows all the plmns specified in cell configuration.

Check which PLMN is connected to AMF as shown below. If DUT try to attach to different PLMN from the one shown below, it will be rejected by core network (AMF).

Now start trace logging.
![]()
Power on UE on UEsim (If your DUT is a commercial phone, turn on the phone)

Wait until the DUT complete the initial attach. If UE successfully camp onto the cell, you may assume that NPN works but the details should be verified from the captured log. Not much details in the trace log shown here.

Log Analysis
Following is the log snapshot that are involved in UE assistance information message and handling process.
Make if NG setup process is properly completed with NGAP log. Here you see gNB notifies plmn 001-01 as globalGNB-ID and notifies 001-01,001-04,001-05 as broadcast PLMNs.

Then confirm that the plmn-IdentityInfoList and npn-IdentityInfoList in SIB1 is broadcast as configured in enb.cnf.
Here you see PLMN 001-01 is broadcast in plmn-IdentityInfoList and in npn-IdentityInfoList.

Here you see PLMN 001-04 and 001-05 are listed in npn-IdentityInfoList as specified in enb.cfg

When UE camp on, it notifies that the CAG plmn it selected via selectedPLMN-Identity IE in RRC setup Complete message.

Based on the cag plmn selection from the UE, gNB notifies about the selected cag information to core network via pNI-NPN-Access-Information IE in NGAP message (Initial UE message).

Then Network notifies the attached PLMN back to UE via 5G-GUTI in Registration Accept message.

Core Network notifies gNB of all the plmn as associated cag id list via allowed-PNI-NPI-List in the NGAP message Initial Context Setup Message. The information in this list is configured by cag_info_list specified in ue_db.

RRC / NAS Signaling
SIB1 (SA)
: This is SIB1 containing npn configurations
{
message c1: systemInformationBlockType1: {
cellSelectionInfo {
...
},
cellAccessRelatedInfo {
plmn-IdentityInfoList {
{
plmn-IdentityList {
{
mcc {
0,
0,
1
},
mnc {
0,
1
}
}
},
trackingAreaCode '000000'H,
cellIdentity '001234501'H,
cellReservedForOperatorUse notReserved
}
},
cellReservedForOtherUse true,
npn-IdentityInfoList-r16 {
{
npn-IdentityList-r16 {
pni-npn-r16: {
plmn-Identity-r16 {
mcc {
0,
0,
1
},
mnc {
0,
1
}
},
cag-IdentityList-r16 {
{
cag-Identity-r16 '00000001'H
},
{
cag-Identity-r16 '00000002'H
},
{
cag-Identity-r16 '00000003'H
},
{
cag-Identity-r16 '00000004'H
}
}
}
},
trackingAreaCode-r16 '000000'H,
cellIdentity-r16 '001234501'H,
cellReservedForOperatorUse-r16 reserved
},
{
npn-IdentityList-r16 {
pni-npn-r16: {
plmn-Identity-r16 {
mcc {
0,
0,
1
},
mnc {
0,
4
}
},
cag-IdentityList-r16 {
{
cag-Identity-r16 '00000007'H
},
{
cag-Identity-r16 '00000008'H
},
{
cag-Identity-r16 '00000009'H
}
}
},
pni-npn-r16: {
plmn-Identity-r16 {
mcc {
0,
0,
1
},
mnc {
0,
5
}
},
cag-IdentityList-r16 {
{
cag-Identity-r16 '00000002'H
},
{
cag-Identity-r16 '00000200'H
}
}
}
},
trackingAreaCode-r16 '000001'H,
cellIdentity-r16 '001234501'H,
cellReservedForOperatorUse-r16 reserved
}
}
},
connEstFailureControl {
...
},
servingCellConfigCommon {
...
},
ue-TimersAndConstants {
...
}
}
}
RrcSetupComplete (SA)
: This is RrcSetupComplte message showing the cag plmn that UE selected
{
message c1: rrcSetupComplete: {
rrc-TransactionIdentifier 0,
criticalExtensions rrcSetupComplete: {
selectedPLMN-Identity 5,
dedicatedNAS-Message '7E004179000D0100F110F0FF000010325476982E02E0E0'H,
nonCriticalExtension {
nonCriticalExtension {
ul-RRC-Segmentation-r16 true
}
}
}
}
}