NAS Reject
The purpose of this tutorial is to show you how to Reject a NAS message that you specified. This tutorial shows two different ways of testing NAS reject : One with configuration file and the other one with Remote API. There are roughly two ways of performing NAS Reject in Amarisoft Callbox as listed below.
- Reject through configuration file
- Reject through Remote API
This tutorial shows both ways.
Table of Contents
- NAS Reject
- Test Setup
- Key Configuration Parameters
- Test 1 : Attach Reject with the cause # 14 (LTE)
- Test 2 : Attach Reject with the cause # 14 with Remote API (LTE) - attach_reject_filter
- Test 3 : Reject Periodic Registration with the cause # 22 and t3512with Remote API (NR SA)
- Test 4 : Attach Reject with the cause # 20 and then Attach Accept(removing reject) with Remote API (LTE) - emm_procedure_filter
- Test 5 : PDN Connectivity Reject with the cause # 27 with Remote API (LTE) - esm_procedure_filter
- Test 6 : Initial Registration Reject with the cause # 22 with Remote API (NR SA)
- Test 7 : Attach Reject/TAU Reject with the cause # 22 with Remote API (LTE) - T3412, T3402
Test Setup
This tutorial does not require any special test setup. Just to have one cell configuration with one UE connection is enough.
Key Configuration Parameters
Followings are important configuration parameters for this tutorial. You may click on the items for the descriptions from Amarisoft documents.
- config_set
- registration_initial
- registration_initial_reject_error
- registration_mobility_periodic
- registration_mobility_periodic_error
- emm_procedure_filter
- attach_reject_error
- pdn_list
- esm_procedure_filter
Test 1 : Attach Reject with the cause # 14 (LTE)
In this test, I will configure in such a way that eNB reject every attach request from every UE with the cause #14
Configuration
You can use any of LTE configuration for this tutorial (e.g, enb.default.cfg).
I used mme-ims-nas-reject.cfg which is copied and modified from mme-ims.cfg
Add attach_reject_filter: {"*", 0, "imsi": 1 } and attach_reject_error : error code in mme-ims-nas-reject.cfg as shown below.
Perform the Test
Power on UE and check the protocol log to see if the Attach is rejected as intended. You see that 'Attach Reject' is sent and check out the EMM cause as intended.
Depending on the type of reject cause, UE may retry the NAS request. The number of retry would vary depending the type of the reject cause. If you configure the reject filter in the configuration file, all of the NAS request set in the configuration will be rejected regardless of how may times it is requested. If you want to remove the reject and accept the request, you need to use RemoteAPI.
Test 2 : Attach Reject with the cause # 14 with Remote API (LTE) - attach_reject_filter
Basically what this test does is same as Test 1, but in this test I will not change any configuration in mme-ims.cfg file. I will setup the reject filter using Remote API (NOTE : If you are not familiar with RemoteAPI, please check out this tutorial and make some basic practice first about Remote API and then try this).
Configuration
You can use any of LTE configuration for this tutorial (e.g, enb.default.cfg).
I used mme-ims.cfg without any modification.
Perform the Test
Start the trace log. Do not power on UE yet. Run the remote API before powering on UE in this case because what you are trying to do in this test is to reject the initial attach. The reject should be configured before UE attempts the initial attach.
Send RemoteAPI command as shown below : ./ws.js mme '{"message": "config_set","attach_reject_filter":{"*": 0,"001010123456789": 1}, "attach_reject_error": 14}'
Test 3 : Reject Periodic Registration with the cause # 22 and t3512with Remote API (NR SA)
I will setup the reject filter using Remote API (NOTE : If you are not familiar with RemoteAPI, please check out this tutorial and make some basic practice first about Remote API and then try this).
Configuration
You can use any of NR SA for this tutorial (e.g, gnb-sa.cfg).
I used mme-ims.cfg without any modification.
Perform the Test
Start the trace log. Do not power on UE yet. Run the remote API before powering on UE in this case because what you are trying to do in this test is to reject the initial attach. The reject should be configured before UE attempts the initial attach.
Run this remoteAPI command as shown below : ./ws.js mme '{"message": "config_set","t3512":30}'. This commend is to let UE retry periodically when the registration gets rejected.
Run this Remote API command as shown below : ./ws.js mme '{"message": "config_set","5gmm_procedure_filter":{"registration_mobility_periodic":"reject"},"registration_mobility_periodic_error":22}'
Now power on UE and check the behavior in WebGUI.
You would notice that T3512 is set as configured.
After some time in idle mode, UE attemps periodic registration.
The periodic registration is rejected with the cause as configured by the RemoteAPI.
Test 4 : Attach Reject with the cause # 20 and then Attach Accept(removing reject) with Remote API (LTE) - emm_procedure_filter
Basically what this test does is same as Test 2, but with different RemoteAPI command. An advantage of using this command is that you can change the filter so that eNB accept Attach request again if you like.
I will setup the reject filter using Remote API (NOTE : If you are not familiar with RemoteAPI, please check out this tutorial and make some basic practice first about Remote API and then try this).
Configuration
You can use any of LTE configuration for this tutorial (e.g, enb.default.cfg).
I used mme-ims.cfg without any modification.
Perform the Test
Start the trace log. Do not power on UE yet. Run the remote API before powering on UE in this case because what you are trying to do in this test is to reject the initial attach. The reject should be configured before UE attempts the initial attach.
Send RemoteAPI command as shown below : ./ws.js mme '{"message": "config_set","emm_procedure_filter":{"attach":"reject"},"attach_reject_error":20}'
You may let eNB accept the Attach after a few rejection. In that case, you can let it accept using following RemoteAPI command.
./ws.js mme '{"message": "config_set","emm_procedure_filter":{"attach":"treat"}}'
You can verify the operation in the log as shown below. While "attach" is set to "reject", all the Attach Request gets rejected. When "attach" is set to "treat", the Attach Request is accepted.
Test 5 : PDN Connectivity Reject with the cause # 27 with Remote API (LTE) - esm_procedure_filter
This test show you how to reject PDN Connectivity Request for a certain APN and how to remove the rejected condition and accept the message again.
I will setup the reject filter using Remote API (NOTE : If you are not familiar with RemoteAPI, please check out this tutorial and make some basic practice first about Remote API and then try this).
Configuration
You can use any of LTE configuration for this tutorial (e.g, enb.default.cfg).
I used mme-ims.cfg without any modification.
Perform the Test
Start the trace log. Do not power on UE yet. Run the remote API before powering on UE in this case because what you are trying to do in this test is to reject the initial attach. The reject should be configured before UE attempts the initial attach.
Send RemoteAPI command as shown below : ./ws.js mme '{"message": "config_set", "pdn_list":[{"apn":"ims","esm_procedure_filter":{"pdn_connectivity":"reject"}}],"pdn_connect_reject_error":27}'
You may let eNB accept the Attach after a few rejection. In that case, you can let it accept using following RemoteAPI command.
./ws.js mme '{"message": "config_set", "pdn_list":[{"apn":"ims","esm_procedure_filter":{"pdn_connectivity":"treat"}}]}'
'
You can verify the operation in the log as shown below. While "pdn_connectivity" is set to "reject", all the PDN Connectivity Request messages get rejected.
After you set "pdn_connectity" to "treat" by RemoteAPI, you see the PDN Connectivity Request gets accepted.
Test 6 : Initial Registration Reject with the cause # 22 with Remote API (NR SA)
I will setup the reject filter using Remote API (NOTE : If you are not familiar with RemoteAPI, please check out this tutorial and make some basic practice first about Remote API and then try this).
Configuration
You can use any of NR SA for this tutorial (e.g, gnb-sa.cfg).
I used mme-ims.cfg without any modification.
Perform the Test
Start the trace log. Do not power on UE yet. Run the remote API before powering on UE in this case because what you are trying to do in this test is to reject the initial attach. The reject should be configured before UE attempts the initial attach.
Before powering on UE, run this Remote API command as shown below : ./ws.js mme '{"message": "config_set","5gmm_procedure_filter":{"registration_initial":"reject"},"registration_initial_reject_error": 22}' and confirm that the initial registration get rejected. '
Now power on UE and check the behavior in WebGUI. You see the registration got rejected with the cause of 22.
Now tun the following command as below : ./ws.js mme '{"message": "config_set","5gmm_procedure_filter":{"registration_initial":"treat"}}'. This let mme to allow registration.
Confirm that registration gets accepted. (
Test 7 : Attach Reject/TAU Reject with the cause # 22 with Remote API (LTE) - T3412, T3402
The purpose of this test is to show how to configure Attach Reject and TAU Reject and see how follow up sequence goes on depending on T3402.
Configuration
You can use any of LTE configuration for this tutorial (e.g, enb.default.cfg).
I used mme-ims.cfg without any modification.
Sub test 1 : Attach Reject with #22 - default T3402
The purpose of this sub test is to verify if UE retries Attach Request based on T3402 in response to Attach Reject with #22. Overall verification sequence is
i) Network does not configure T3402 meaning that UE should use the default value of 12 min
ii) UE send attach request
iii) Network send attach reject with #22
iv) repeat ii)~iii) 4 more times
v) UE wait for t3402 expiration without retrying
vi) UE send attach request again
Perform the Test
Start the trace log. Do not power on UE yet. Run the remote API before powering on UE in this case because what you are trying to do in this test is to reject the initial attach. The reject should be configured before UE attempts the initial attach.
Send RemoteAPI command as shown below : ./ws.js mme '{"message": "config_set","attach_reject_filter":{"*": 0,"001010123456789": 1}, "attach_reject_error": 22}''
And then Power on UE and check out the log to see if UE works as expected
UE send Attach Request.
Network send Attach Reject with the cause of #20(0x16) and UE start retry Attach Request
After 5 times of retry of Attach Request and Reject, UE wait for t3412 expiration and then retry on t3412 expiration. In this case, Network didn't send any message(e.g, Attach Accept) with t3412 value. so UE applies the default t3412 value(12 min).
Sub test 2 : TAU Reject with #22 - user specified T3402
The purpose of this sub test is to verify if UE retries Tracking Area Update Request based on T3402 in response to Tracking Area Update Reject with #22. Overall verification sequence is
i) UE send Attach Request
ii) Network send attach accept with user specified T3412 and T3402
iii) UE send Tracking Area Update Request on T3412 expiration
iv) Network send Tracking Area Update Reject with #22
v) check UE behavior and see if it works as expected
- Amarisoft UEsim : Worked as expected (To make this work as expected, I needed to shorten inactivity_timer of enb.cfg. I tried with 10 sec, 5 sec and 3 sec of inactivity_timer and 3 sec inactivity_timer worked the best)
- Commercial UE : Keep retrying Tracking Area Update Request with the interval of 10 sec and never wait for T3402 value
Perform the Test
Start the trace log. Do not power on UE yet. Run the remote API before powering on UE in this case because what you are trying to do in this test is to reject the initial attach. The reject should be configured before UE attempts the initial attach.
Send RemoteAPI command as shown below : ./ws.js mme '{"message": "config_set","t3412":120}'
Send RemoteAPI command as shown below : ./ws.js mme '{"message": "config_set","t3402":60}'
Send RemoteAPI command as shown below : ./ws.js mme '{"message": "config_set","emm_procedure_filter":{"tracking_area_updating":"reject"},"tracking_area_update_reject_error": 22}'
And then Power on UE and check out the log to see if UE works as expected
UE send Attach Request.
Network send Attach Accept with both t3412 (2min) and t3402(one min).
After attach complete, UE wait for t3412 expiration (2 min in this case) and start sending Tracking Area Update Request.
Network send Tracking Area Update Reject with #22 (0x16).
Following is the Amarisoft UEsim log from the same test. The good thing about UEsim log for UEtimer test is that it shows Timer status in the log. If you are using commercial UE for this test, you need to get measure to check out the UE log showing Timer status, otherwise troubleshoot (finding the root cause of the problem) is impossible.