diff --git a/ci-scripts/conf_files/gNB_SA_CU.conf b/ci-scripts/conf_files/gNB_SA_CU.conf
index a757bb8ccd..d619c8311b 100644
--- a/ci-scripts/conf_files/gNB_SA_CU.conf
+++ b/ci-scripts/conf_files/gNB_SA_CU.conf
@@ -169,7 +169,7 @@ gNBs =
////////// AMF parameters:
- amf_ip_address = ( { ipv4 = "192.168.5.233";
+ amf_ip_address = ( { ipv4 = "192.168.70.132";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
@@ -178,11 +178,10 @@ gNBs =
NETWORK_INTERFACES :
{
-
- GNB_INTERFACE_NAME_FOR_NG_AMF = "eth0";
- GNB_IPV4_ADDRESS_FOR_NG_AMF = "CI_GNB_IP_ADDR";
- GNB_INTERFACE_NAME_FOR_NGU = "eth0";
- GNB_IPV4_ADDRESS_FOR_NGU = "CI_GNB_IP_ADDR";
+ GNB_INTERFACE_NAME_FOR_NG_AMF = "demo-oai";
+ GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.70.129/24";
+ GNB_INTERFACE_NAME_FOR_NGU = "demo-oai";
+ GNB_IPV4_ADDRESS_FOR_NGU = "192.168.70.129/24";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};
}
diff --git a/ci-scripts/main.py b/ci-scripts/main.py
index 4674be4966..1a7607d5d5 100644
--- a/ci-scripts/main.py
+++ b/ci-scripts/main.py
@@ -706,6 +706,8 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
# On CI bench w/ containers, we need to validate if IP routes are set
if EPC.IPAddress == '172.21.16.136':
CONTAINERS.CheckAndAddRoute('porcepix', EPC.IPAddress, EPC.UserName, EPC.Password)
+ if EPC.IPAddress == '172.21.16.137':
+ CONTAINERS.CheckAndAddRoute('nepes', EPC.IPAddress, EPC.UserName, EPC.Password)
if CONTAINERS.eNBIPAddress == '172.21.16.127':
CONTAINERS.CheckAndAddRoute('asterix', CONTAINERS.eNBIPAddress, CONTAINERS.eNBUserName, CONTAINERS.eNBPassword)
if CONTAINERS.eNB1IPAddress == '172.21.16.127':
@@ -714,6 +716,8 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
CONTAINERS.CheckAndAddRoute('obelix', CONTAINERS.eNBIPAddress, CONTAINERS.eNBUserName, CONTAINERS.eNBPassword)
if CONTAINERS.eNB1IPAddress == '172.21.16.128':
CONTAINERS.CheckAndAddRoute('obelix', CONTAINERS.eNB1IPAddress, CONTAINERS.eNB1UserName, CONTAINERS.eNB1Password)
+ if CONTAINERS.eNBIPAddress == '172.21.16.109' or CONTAINERS.eNBIPAddress == 'ofqot':
+ CONTAINERS.CheckAndAddRoute('ofqot', CONTAINERS.eNBIPAddress, CONTAINERS.eNBUserName, CONTAINERS.eNBPassword)
if CONTAINERS.eNBIPAddress == '172.21.16.137':
CONTAINERS.CheckAndAddRoute('nepes', CONTAINERS.eNBIPAddress, CONTAINERS.eNBUserName, CONTAINERS.eNBPassword)
if CONTAINERS.eNB1IPAddress == '172.21.16.137':
diff --git a/ci-scripts/xml_files/container_4g_l2sim_proxy.xml b/ci-scripts/xml_files/container_4g_l2sim_proxy.xml
index 153cfffda6..2d841cbc69 100644
--- a/ci-scripts/xml_files/container_4g_l2sim_proxy.xml
+++ b/ci-scripts/xml_files/container_4g_l2sim_proxy.xml
@@ -36,7 +36,7 @@
1
1
True
- a6169d8
+ a2fa216
diff --git a/ci-scripts/xml_files/container_l2sim_proxy.xml b/ci-scripts/xml_files/container_l2sim_proxy.xml
index e4fe9be275..a237d7be5f 100644
--- a/ci-scripts/xml_files/container_l2sim_proxy.xml
+++ b/ci-scripts/xml_files/container_l2sim_proxy.xml
@@ -36,7 +36,7 @@
1
1
True
- a6169d8
+ a2fa216
diff --git a/ci-scripts/xml_files/container_nsa_b200_quectel.xml b/ci-scripts/xml_files/container_nsa_b200_quectel.xml
index 2f469ef23e..ee5430010f 100644
--- a/ci-scripts/xml_files/container_nsa_b200_quectel.xml
+++ b/ci-scripts/xml_files/container_nsa_b200_quectel.xml
@@ -86,14 +86,14 @@
Custom_Command
- Disable Sleep States (obelix)
- obelix
+ Disable Sleep States (ofqot)
+ ofqot
sudo cpupower idle-set -D 0
Custom_Command
- Enable Sleep States (obelix)
- obelix
+ Enable Sleep States (ofqot)
+ ofqot
sudo cpupower idle-set -E
diff --git a/ci-scripts/xml_files/container_sa_b200_quectel.xml b/ci-scripts/xml_files/container_sa_b200_quectel.xml
index ae22723494..b862d90cfb 100644
--- a/ci-scripts/xml_files/container_sa_b200_quectel.xml
+++ b/ci-scripts/xml_files/container_sa_b200_quectel.xml
@@ -57,13 +57,13 @@
Custom_Command
Disable Sleep States
- nepes
+ ofqot
sudo cpupower idle-set -D 0
Custom_Command
Enable Sleep States
- nepes
+ ofqot
sudo cpupower idle-set -E
@@ -161,14 +161,14 @@
Custom_Command
Trigger Reestablishment
- nepes
+ ofqot
echo ci force_reestab | nc -N 192.168.68.194 9090 | grep -E 'force-remove UE RNTI [0-9a-f]{4} from RLC to trigger reestablishment'
yes
Custom_Command
Verify Reestablishment
- nepes
+ ofqot
echo ci get_reestab_count | nc -N 192.168.68.194 9090 | grep -E 'UE RNTI [0-9a-f]{4} reestab 1 reconf_after_reestab 1'
yes
diff --git a/ci-scripts/xml_files/container_sa_f1_b200_quectel.xml b/ci-scripts/xml_files/container_sa_f1_b200_quectel.xml
index 2f6aad7eef..3fab62b265 100644
--- a/ci-scripts/xml_files/container_sa_f1_b200_quectel.xml
+++ b/ci-scripts/xml_files/container_sa_f1_b200_quectel.xml
@@ -93,13 +93,13 @@
Custom_Command
Disable Sleep States
- nepes
+ ofqot
sudo cpupower idle-set -D 0
Custom_Command
Enable Sleep States
- nepes
+ ofqot
sudo cpupower idle-set -E
diff --git a/common/ngran_types.h b/common/ngran_types.h
index ddd1ec2cca..95ad167961 100644
--- a/common/ngran_types.h
+++ b/common/ngran_types.h
@@ -54,4 +54,7 @@ typedef enum { CPtype = 0, UPtype } E1_t;
#define NODE_IS_DU(nOdE_TyPe) ((nOdE_TyPe) == ngran_eNB_DU || (nOdE_TyPe) == ngran_gNB_DU)
#define NODE_IS_MBMS(nOdE_TyPe) ((nOdE_TyPe) == ngran_eNB_MBMS_STA)
#define GTPV1_U_PORT_NUMBER (2152)
+
+typedef enum { non_dynamic, dynamic } fiveQI_type_t;
+#define maxSRBs 4
#endif
diff --git a/common/utils/telnetsrv/telnetsrv_ci.c b/common/utils/telnetsrv/telnetsrv_ci.c
index b7c19f6c8e..3f4930d02b 100644
--- a/common/utils/telnetsrv/telnetsrv_ci.c
+++ b/common/utils/telnetsrv/telnetsrv_ci.c
@@ -49,7 +49,7 @@ static int get_single_ue_rnti(void)
return -1;
// verify it exists in RRC as well
- rrc_gNB_ue_context_t *rrcue = rrc_gNB_get_ue_context(RC.nrrrc[0], ue->rnti);
+ rrc_gNB_ue_context_t *rrcue = rrc_gNB_get_ue_context_by_rnti(RC.nrrrc[0], ue->rnti);
if (!rrcue)
return -1;
@@ -82,7 +82,7 @@ int get_reestab_count(char *buf, int debug, telnet_printfunc_t prnt)
ERROR_MSG_RET("RNTI needs to be [1,0xfffe]\n");
}
- rrc_gNB_ue_context_t *ue = rrc_gNB_get_ue_context(RC.nrrrc[0], rnti);
+ rrc_gNB_ue_context_t *ue = rrc_gNB_get_ue_context_by_rnti(RC.nrrrc[0], rnti);
if (!ue)
ERROR_MSG_RET("could not find UE with RNTI %04x\n", rnti);
@@ -107,7 +107,7 @@ int trigger_reestab(char *buf, int debug, telnet_printfunc_t prnt)
}
// verify it exists in RRC as well
- rrc_gNB_ue_context_t *rrcue = rrc_gNB_get_ue_context(RC.nrrrc[0], rnti);
+ rrc_gNB_ue_context_t *rrcue = rrc_gNB_get_ue_context_by_rnti(RC.nrrrc[0], rnti);
if (!rrcue)
ERROR_MSG_RET("could not find UE with RNTI %04x\n", rnti);
diff --git a/doc/tutorial_resources/oai-cn5g/conf/oai-amf.conf b/doc/tutorial_resources/oai-cn5g/conf/oai-amf.conf
deleted file mode 100644
index 628899eb7d..0000000000
--- a/doc/tutorial_resources/oai-cn5g/conf/oai-amf.conf
+++ /dev/null
@@ -1,146 +0,0 @@
-################################################################################
-# Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The OpenAirInterface Software Alliance licenses this file to You under
-# the OAI Public License, Version 1.1 (the "License"); you may not use this file
-# except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.openairinterface.org/?page_id=698
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#-------------------------------------------------------------------------------
-# For more information about the OpenAirInterface (OAI) Software Alliance:
-# contact@openairinterface.org
-################################################################################
-
-AMF =
-{
- INSTANCE_ID = 0; # 0 is the default
- PID_DIRECTORY = "/var/run"; # /var/run is the default
-
- AMF_NAME = "OAI-AMF";
-
- RELATIVE_CAPACITY = 30;
- # Display statistics about whole system (in seconds)
- STATISTICS_TIMER_INTERVAL = 20; # YOUR CONFIG HERE
-
- CORE_CONFIGURATION:
- {
- EMERGENCY_SUPPORT = "false";
- };
-
- GUAMI:
- {
- MCC = "001"; MNC = "01"; RegionID = "128"; AMFSetID = "1"; AMFPointer = "1" # YOUR GUAMI CONFIG HERE
- }
-
- SERVED_GUAMI_LIST = (
- {MCC = "001"; MNC = "01"; RegionID = "128"; AMFSetID = "1"; AMFPointer = "0"} #48bits
- );
-
- PLMN_SUPPORT_LIST = (
- {
- MCC = "001"; MNC = "01"; TAC = 0x0001; # YOUR PLMN CONFIG HERE
- SLICE_SUPPORT_LIST = (
- {SST = 1,SD= "0xFFFFFF"} #SST, SD value can be decimal or hexadecimal
- )
- }
- ); # At the moment only one PLMN configuration is supported
-
- INTERFACES:
- {
- # AMF binded interface for N1/N2 interface (NGAP)
- NGAP_AMF:
- {
- INTERFACE_NAME = "eth0"; # YOUR NETWORK CONFIG HERE
- IPV4_ADDRESS = "read";
- PORT = 38412; # YOUR NETWORK CONFIG HERE
- PPID = 60; # YOUR NETWORK CONFIG HERE
- };
-
- # AMF binded interface for SBI (N11 (SMF)/N12 (AUSF), etc.)
- SBI:
- {
- INTERFACE_NAME = "eth0"; # YOUR NETWORK CONFIG HERE
- IPV4_ADDRESS = "read";
- PORT = 80; # YOUR NETWORK CONFIG HERE
- API_VERSION = "v1"; # YOUR AMF API VERSION CONFIG HERE
- HTTP2_PORT = 8080; # YOUR NETWORK CONFIG HERE
-
- SMF_INSTANCES_POOL = (
- {SMF_INSTANCE_ID = 1; IPV4_ADDRESS = "192.168.70.133"; PORT = "80"; HTTP2_PORT = 8080, VERSION = "v1"; FQDN = "oai-smf", SELECTED = "true"} # YOUR SMF CONFIG HERE
- );
- };
-
- NRF :
- {
- IPV4_ADDRESS = "192.168.70.130"; # YOUR NRF CONFIG HERE
- PORT = 80; # YOUR NRF CONFIG HERE (default: 80)
- API_VERSION = "v1"; # YOUR NRF API VERSION FOR SBI CONFIG HERE
- FQDN = "oai-nrf" # YOUR NRF FQDN CONFIG HERE
- };
-
- AUSF :
- {
- IPV4_ADDRESS = "192.168.70.138"; # YOUR AUSF CONFIG HERE
- PORT = 80; # YOUR AUSF CONFIG HERE (default: 80)
- API_VERSION = "v1"; # YOUR AUSF API VERSION FOR SBI CONFIG HERE
- FQDN = "oai-ausf" # YOUR AUSF FQDN CONFIG HERE
- };
-
- NSSF :
- {
- IPV4_ADDRESS = "192.168.70.138"; # YOUR NSSF CONFIG HERE
- PORT = 80; # YOUR NSSF CONFIG HERE (default: 80)
- API_VERSION = "v2"; # YOUR NSSF API VERSION FOR SBI CONFIG HERE
- FQDN = "oai-nssf" # YOUR NSSF FQDN CONFIG HERE
- };
- };
-
- SUPPORT_FEATURES:
- {
- # STRING, {"yes", "no"},
- NF_REGISTRATION = "yes"; # Set to yes if AMF resgisters to an NRF
- NRF_SELECTION = "no"; # Set to yes to enable NRF discovery and selection
- SMF_SELECTION = "no"; # Set to yes to enable SMF discovery and selection
- EXTERNAL_NRF = "no"; # Set to yes if AMF works with an external NRF
- EXTERNAL_NSSF = "no";
- EXTERNAL_AUSF = "yes"; # Set to yes if AMF works with an external AUSF
- EXTERNAL_UDM = "no"; # Set to yes if AMF works with an external UDM
- USE_FQDN_DNS = "no"; # Set to yes if AMF relies on a DNS to resolve NRF/SMF/UDM/AUSF's FQDN
- USE_HTTP2 = "no"; # Set to yes to enable HTTP2 for AMF server
-}
-
- AUTHENTICATION:
- { #NOT USED because authentication requests go via AUSF
- ## MySQL mandatory options
- MYSQL_server = "mysql"; # MySQL Server address
- MYSQL_user = "root"; # Database server login
- MYSQL_pass = "linux"; # Database server password
- MYSQL_db = "oai_db"; # Your database name
-
- ## OP
- RANDOM = "true";
- };
-
- NAS:
- {
- ORDERED_SUPPORTED_INTEGRITY_ALGORITHM_LIST = [ "NIA1" , "NIA1" , "NIA2" ]; #Default [ "NIA0" , "NIA1" , "NIA2" ];
- ORDERED_SUPPORTED_CIPHERING_ALGORITHM_LIST = [ "NEA0" , "NEA1" , "NEA2" ]; #Default [ "NEA0" , "NEA1" , "NEA2" ];
- };
-
-};
-
-
-MODULES =
-{
- NGAP_MESSAGE = (
- {MSG_NAME = "NGSetupRequest"; ProcedureCode = 21; TypeOfMessage = "initialMessage"}
- );
-};
diff --git a/doc/tutorial_resources/oai-cn5g/conf/oai-ausf.conf b/doc/tutorial_resources/oai-cn5g/conf/oai-ausf.conf
deleted file mode 100644
index b5c8344550..0000000000
--- a/doc/tutorial_resources/oai-cn5g/conf/oai-ausf.conf
+++ /dev/null
@@ -1,62 +0,0 @@
-################################################################################
-# Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The OpenAirInterface Software Alliance licenses this file to You under
-# the OAI Public License, Version 1.1 (the "License"); you may not use this file
-# except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.openairinterface.org/?page_id=698
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#-------------------------------------------------------------------------------
-# For more information about the OpenAirInterface (OAI) Software Alliance:
-# contact@openairinterface.org
-################################################################################
-
-AUSF =
-{
- INSTANCE_ID = 0;
- PID_DIRECTORY = "/var/run";
- AUSF_NAME = "OAI_AUSF";
-
- INTERFACES:{
- # AUSF binded interface for SBI interface (e.g., communication with AMF, UDM)
- SBI:{
- INTERFACE_NAME = "eth0"; # YOUR NETWORK CONFIG HERE
- IPV4_ADDRESS = "read";
- PORT = 80; # YOUR NETWORK CONFIG HERE (default: 80)
- API_VERSION = "v1"; # YOUR API VERSION FOR UDM CONFIG HERE
- HTTP2_PORT = 8080; # YOUR NETWORK CONFIG HERE
- };
- };
-
- # SUPPORT FEATURES
- SUPPORT_FEATURES:{
- # STRING, {"yes", "no"},
- USE_FQDN_DNS = "no"; # Set to yes if AUSF will relying on a DNS to resolve UDM's FQDN
- USE_HTTP2 = "no"; # Set to yes to enable HTTP2 for AMF server
- REGISTER_NRF = "no"; # Set to 'yes' if AUSF resgisters to an NRF
- }
-
- # UDM Information
- UDM:{
- IPV4_ADDRESS = "192.168.70.137"; # YOUR NETWORK CONFIG HERE
- PORT = 80; # YOUR NETWORK CONFIG HERE (default: 80)
- API_VERSION = "v1"; # YOUR API VERSION FOR UDM CONFIG HERE
- FQDN = "oai-udm" # YOUR UDM FQDN CONFIG HERE
- };
-
- NRF :
- {
- IPV4_ADDRESS = "192.168.70.130"; # YOUR NRF CONFIG HERE
- PORT = 80; # YOUR NRF CONFIG HERE (default: 80)
- API_VERSION = "v1"; # YOUR NRF API VERSION HERE
- FQDN = "oai-nrf";
- };
-};
\ No newline at end of file
diff --git a/doc/tutorial_resources/oai-cn5g/conf/oai-nrf.conf b/doc/tutorial_resources/oai-cn5g/conf/oai-nrf.conf
deleted file mode 100644
index 80dd6fbcef..0000000000
--- a/doc/tutorial_resources/oai-cn5g/conf/oai-nrf.conf
+++ /dev/null
@@ -1,39 +0,0 @@
-################################################################################
-# Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The OpenAirInterface Software Alliance licenses this file to You under
-# the OAI Public License, Version 1.1 (the "License"); you may not use this file
-# except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.openairinterface.org/?page_id=698
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#-------------------------------------------------------------------------------
-# For more information about the OpenAirInterface (OAI) Software Alliance:
-# contact@openairinterface.org
-################################################################################
-
-NRF =
-{
- INSTANCE = 0; # 0 is the default
- PID_DIRECTORY = "/var/run"; # /var/run is the default
-
-
- SBI_INTERFACE :
- {
- # NRF binded interface for SBI interface (e.g., communication with other NFs e.g., AMF, SMF, UDM)
- INTERFACE_NAME = "eth0"; # YOUR NETWORK CONFIG HERE
- IPV4_ADDRESS = "read";
- PORT = 80; # YOUR NETWORK CONFIG HERE (default: 80)
- HTTP2_PORT = 8080; # YOUR NETWORK CONFIG HERE
- API_VERSION = "v1"; # YOUR NRF API VERSION CONFIG HERE
- };
-
-};
-
diff --git a/doc/tutorial_resources/oai-cn5g/conf/oai-smf.conf b/doc/tutorial_resources/oai-cn5g/conf/oai-smf.conf
deleted file mode 100644
index f39a5c875d..0000000000
--- a/doc/tutorial_resources/oai-cn5g/conf/oai-smf.conf
+++ /dev/null
@@ -1,131 +0,0 @@
-################################################################################
-# Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The OpenAirInterface Software Alliance licenses this file to You under
-# the OAI Public License, Version 1.1 (the "License"); you may not use this file
-# except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.openairinterface.org/?page_id=698
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#-------------------------------------------------------------------------------
-# For more information about the OpenAirInterface (OAI) Software Alliance:
-# contact@openairinterface.org
-################################################################################
-
-SMF =
-{
- FQDN = "oai-smf";
- INSTANCE = 1; # 0 is the default
- PID_DIRECTORY = "/var/run"; # /var/run is the default
-
- INTERFACES :
- {
- N4 :
- {
- # SMF binded interface for N4 communication (UPF)
- INTERFACE_NAME = "eth0"; # YOUR NETWORK CONFIG HERE
- IPV4_ADDRESS = "read";
- };
-
- SBI :
- {
- # SMF binded interface for SBI interface (e.g., communication with AMF, UDM)
- INTERFACE_NAME = "eth0"; # YOUR NETWORK CONFIG HERE
- IPV4_ADDRESS = "read";
- PORT = 80; # YOUR NETWORK CONFIG HERE (default: 80)
- HTTP2_PORT = 8080; # YOUR NETWORK CONFIG HERE
- API_VERSION = "v1"; # YOUR SMF API VERSION CONFIG HERE
- };
-
- };
-
- # DNN configurations with pool of UE assigned IP addresses
- # Do not make IP pools overlap
- # first IPv4 address X.Y.Z.1 is reserved for GTP network device on UPF
- DNN_LIST = (
- # PDU_SESSION_TYPE choice in {IPv4, IPv6, IPv4v6}
- {DNN_NI = "oai"; PDU_SESSION_TYPE = "IPv4"; IPV4_RANGE = "12.1.1.2 - 12.1.1.254"; IPV6_PREFIX = "2001:1:2::/64"},
- {DNN_NI = "openairinterface"; PDU_SESSION_TYPE = "IPv4v6"; IPV4_RANGE = "12.1.2.2 - 12.1.2.254"; IPV6_PREFIX = "2001:1:2::/64"},
- {DNN_NI = "ims"; PDU_SESSION_TYPE = "IPv4v6"; IPV4_RANGE = "12.2.1.1 - 12.2.1.254"; IPV6_PREFIX = "2001:1:2::/64"}
- );
-
- # DNS address communicated to UEs
- DEFAULT_DNS_IPV4_ADDRESS = "8.8.8.8"; # YOUR DNS CONFIG HERE
- DEFAULT_DNS_SEC_IPV4_ADDRESS = "4.4.4.4"; # YOUR DNS CONFIG HERE
- DEFAULT_DNS_IPV6_ADDRESS = "2001:4860:4860::8888"; # YOUR DNS CONFIG HERE
- DEFAULT_DNS_SEC_IPV6_ADDRESS = "2001:4860:4860::8844"; # YOUR DNS CONFIG HERE
-
- DEFAULT_CSCF_IPV4_ADDRESS = "192.168.70.139"; #not defined at the moment
- DEFAULT_CSCF_IPV6_ADDRESS = "fe80::7915:f408:1787:db8b";
-
- #Default UE MTU
- UE_MTU = 1500;
-
- # SUPPORT FEATURES
- SUPPORT_FEATURES:
- {
- # STRING, {"yes", "no"},
- REGISTER_NRF = "yes"; # Set to yes if SMF resgisters to an NRF
- DISCOVER_UPF = "yes"; # Set to yes to enable UPF discovery and selection
- FORCE_PUSH_PROTOCOL_CONFIGURATION_OPTIONS = "no"; # Non standard feature, normally should be set to "no",
- # but you may need to set to yes for UE that do not explicitly request a PDN address through NAS signalling
- USE_LOCAL_SUBSCRIPTION_INFO = "yes"; # Set to yes if SMF uses local subscription information instead of from an UDM
- USE_FQDN_DNS = "no"; # Set to yes if AMF/UDM/NRF/UPF will relying on a DNS to resolve FQDN
- HTTP_VERSION = 1; # Default: 1
- USE_NETWORK_INSTANCE = "no" # Set yes if network instance is to be used for given UPF
- DISCOVER_PCF = "no";
- USE_LOCAL_PCC_RULES = "yes";
- INCLUDE_DL_PDR_IN_PFCP_SESSION_ESTAB = "no";
- ENABLE_REL15_SUPPORT = "no";
- }
-
- AMF :
- {
- IPV4_ADDRESS = "192.168.70.132"; # YOUR AMF CONFIG HERE
- PORT = 80; # YOUR AMF CONFIG HERE (default: 80)
- API_VERSION = "v1"; # YOUR AMF API VERSION FOR SBI CONFIG HERE
- FQDN = "oai-amf" # YOUR AMF FQDN CONFIG HERE
- };
-
- UDM :
- {
- IPV4_ADDRESS = "192.168.70.137"; # YOUR UDM CONFIG HERE
- PORT = 80; # YOUR UDM CONFIG HERE (default: 80)
- API_VERSION = "v1"; # YOUR UDM API VERSION FOR SBI CONFIG HERE
- FQDN = "oai-udm" # YOUR UDM FQDN CONFIG HERE
- };
-
- NRF :
- {
- IPV4_ADDRESS = "192.168.70.130"; # YOUR NRF CONFIG HERE
- PORT = 80; # YOUR NRF CONFIG HERE (default: 80)
- API_VERSION = "v1"; # YOUR NRF API VERSION FOR SBI CONFIG HERE
- FQDN = "oai-nrf" # YOUR NRF FQDN CONFIG HERE
- };
-
- UPF_LIST = (
- {IPV4_ADDRESS = "192.168.70.134" ; FQDN = "oai-spgwu-tiny"; NWI_LIST = ({DOMAIN_ACCESS = "access.oai.org", DOMAIN_CORE = "core.oai.org"})}
- ); # NWI_LIST IS OPTIONAL PARAMETER
- # Not in use because information is getting fetched from UDR
- LOCAL_CONFIGURATION :
- {
- SESSION_MANAGEMENT_SUBSCRIPTION_LIST = (
- { NSSAI_SST = 1; NSSAI_SD = "0xFFFFFF", DNN = "oai", DEFAULT_SESSION_TYPE = "IPv4", DEFAULT_SSC_MODE = 1,
- QOS_PROFILE_5QI = 1, QOS_PROFILE_PRIORITY_LEVEL = 1, QOS_PROFILE_ARP_PRIORITY_LEVEL = 15, QOS_PROFILE_ARP_PREEMPTCAP = "NOT_PREEMPT",
- QOS_PROFILE_ARP_PREEMPTVULN = "NOT_PREEMPTABLE", SESSION_AMBR_UL = "10000Mbps", SESSION_AMBR_DL = "10000Mbps"},
- { NSSAI_SST = 1; NSSAI_SD = "0xFFFFFF", DNN = "openairinterface", DEFAULT_SESSION_TYPE = "IPv4v6", DEFAULT_SSC_MODE = 1,
- QOS_PROFILE_5QI = 1, QOS_PROFILE_PRIORITY_LEVEL = 1, QOS_PROFILE_ARP_PRIORITY_LEVEL = 15, QOS_PROFILE_ARP_PREEMPTCAP = "NOT_PREEMPT",
- QOS_PROFILE_ARP_PREEMPTVULN = "NOT_PREEMPTABLE", SESSION_AMBR_UL = "10000Mbps", SESSION_AMBR_DL = "10000Mbps"},
- { NSSAI_SST = 1; NSSAI_SD = "0xFFFFFF", DNN = "ims", DEFAULT_SESSION_TYPE = "IPv4v6", DEFAULT_SSC_MODE = 1,
- QOS_PROFILE_5QI = 1, QOS_PROFILE_PRIORITY_LEVEL = 1, QOS_PROFILE_ARP_PRIORITY_LEVEL = 15, QOS_PROFILE_ARP_PREEMPTCAP = "NOT_PREEMPT",
- QOS_PROFILE_ARP_PREEMPTVULN = "NOT_PREEMPTABLE", SESSION_AMBR_UL = "330Mbps", SESSION_AMBR_DL = "330Mbps"}
- );
- };
-};
diff --git a/doc/tutorial_resources/oai-cn5g/conf/oai-spgwu-tiny.conf b/doc/tutorial_resources/oai-cn5g/conf/oai-spgwu-tiny.conf
deleted file mode 100644
index 2b2078231e..0000000000
--- a/doc/tutorial_resources/oai-cn5g/conf/oai-spgwu-tiny.conf
+++ /dev/null
@@ -1,138 +0,0 @@
-################################################################################
-# Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The OpenAirInterface Software Alliance licenses this file to You under
-# the OAI Public License, Version 1.1 (the "License"); you may not use this file
-# except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.openairinterface.org/?page_id=698
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#-------------------------------------------------------------------------------
-# For more information about the OpenAirInterface (OAI) Software Alliance:
-# contact@openairinterface.org
-################################################################################
-SPGW-U =
-{
- FQDN = "gw1.spgw.node.epc.mnc01.mcc001.3gpp.org"; # FQDN for 4G
- INSTANCE = 0; # 0 is the default
- PID_DIRECTORY = "/var/run"; # /var/run is the default
-
- #ITTI_TASKS :
- #{
- #ITTI_TIMER_SCHED_PARAMS :
- #{
- #CPU_ID = 1;
- #SCHED_POLICY = "SCHED_FIFO"; # Values in { SCHED_OTHER, SCHED_IDLE, SCHED_BATCH, SCHED_FIFO, SCHED_RR }
- #SCHED_PRIORITY = 85;
- #};
- #S1U_SCHED_PARAMS :
- #{
- #CPU_ID = 1;
- #SCHED_POLICY = "SCHED_FIFO"; # Values in { SCHED_OTHER, SCHED_IDLE, SCHED_BATCH, SCHED_FIFO, SCHED_RR }
- #SCHED_PRIORITY = 84;
- #};
- #SX_SCHED_PARAMS :
- #{
- #CPU_ID = 1;
- #SCHED_POLICY = "SCHED_FIFO"; # Values in { SCHED_OTHER, SCHED_IDLE, SCHED_BATCH, SCHED_FIFO, SCHED_RR }
- #SCHED_PRIORITY = 84;
- #};
- #ASYNC_CMD_SCHED_PARAMS :
- #{
- #CPU_ID = 1;
- #SCHED_POLICY = "SCHED_FIFO"; # Values in { SCHED_OTHER, SCHED_IDLE, SCHED_BATCH, SCHED_FIFO, SCHED_RR }
- #SCHED_PRIORITY = 84;
- #};
- #};
-
- INTERFACES :
- {
- S1U_S12_S4_UP :
- {
- # S-GW binded interface for S1-U (N3) communication (GTPV1-U) can be ethernet interface, virtual ethernet interface, we don't advise wireless interfaces
- INTERFACE_NAME = "eth0"; # STRING, interface name, YOUR NETWORK CONFIG HERE
- IPV4_ADDRESS = "read"; # STRING, CIDR or "read to let app read interface configured IP address
- #PORT = 2152; # Default is 2152
- SCHED_PARAMS :
- {
- #CPU_ID = 2;
- SCHED_POLICY = "SCHED_FIFO"; # Values in { SCHED_OTHER, SCHED_IDLE, SCHED_BATCH, SCHED_FIFO, SCHED_RR }
- SCHED_PRIORITY = 98;
- POOL_SIZE = 1; # NUM THREADS
- };
- };
- SX :
- {
- # S/P-GW binded interface for SX (N4) communication
- INTERFACE_NAME = "eth0"; # STRING, interface name
- IPV4_ADDRESS = "read"; # STRING, CIDR or "read" to let app read interface configured IP address
- #PORT = 8805; # Default is 8805
- SCHED_PARAMS :
- {
- #CPU_ID = 1;
- SCHED_POLICY = "SCHED_FIFO"; # Values in { SCHED_OTHER, SCHED_IDLE, SCHED_BATCH, SCHED_FIFO, SCHED_RR }
- SCHED_PRIORITY = 88;
- POOL_SIZE = 1; # NUM THREADS
- };
- };
- SGI :
- {
- # No config to set, the software will set the SGi (N6) interface to the interface used for the default route.
- INTERFACE_NAME = "eth0"; # STRING, interface name or "default_gateway"
- IPV4_ADDRESS = "read"; # STRING, CIDR or "read" to let app read interface configured IP address
- SCHED_PARAMS :
- {
- #CPU_ID = 3;
- SCHED_POLICY = "SCHED_FIFO"; # Values in { SCHED_OTHER, SCHED_IDLE, SCHED_BATCH, SCHED_FIFO, SCHED_RR }
- SCHED_PRIORITY = 99;
- POOL_SIZE = 1; # NUM THREADS
- };
- };
- };
-
- SNAT = "yes"; # SNAT Values in {yes, no}
- PDN_NETWORK_LIST = (
- {NETWORK_IPV4 = "12.1.0.0/16";} # 1 ITEM SUPPORTED ONLY
- );
- # SMF LIST
- SPGW-C_LIST = (
- {IPV4_ADDRESS="192.168.70.133" ;}
- );
-
- NON_STANDART_FEATURES :
- {
- BYPASS_UL_PFCP_RULES = "no"; # 'no' for standard features, yes for enhancing UL throughput
- };
-
- SUPPORT_5G_FEATURES:
- {
- # STRING, {"yes", "no"},
- ENABLE_5G_FEATURES = "yes" # Set to 'yes' to support 5G Features
- REGISTER_NRF = "yes"; # Set to 'yes' if UPF resgisters to an NRF
- USE_FQDN_NRF = "no"; # Set to 'yes' if UPF relies on a DNS/FQDN service to resolve NRF's FQDN
- UPF_FQDN_5G = "oai-spgwu-tiny"; #Set FQDN of UPF
-
- NRF :
- {
- IPV4_ADDRESS = "192.168.70.130"; # YOUR NRF CONFIG HERE
- PORT = 80; # YOUR NRF CONFIG HERE (default: 80)
- HTTP_VERSION = 1; #Set HTTP version for NRF (1 or 2)Default 1
- API_VERSION = "v1"; # YOUR NRF API VERSION HERE
- FQDN = "oai-nrf";
- };
-
- # Additional info to be sent to NRF for supporting Network Slicing
- UPF_INFO = (
- { NSSAI_SST = 1; NSSAI_SD = "0xFFFFFF"; DNN_LIST = ({DNN = "oai";}); },
- { NSSAI_SST = 1; NSSAI_SD = "0xFFFFFF"; DNN_LIST = ({DNN = "openairinterface";}); },
- { NSSAI_SST = 1; NSSAI_SD = "0xFFFFFF"; DNN_LIST = ({DNN = "ims";}); }
- );
- }
-};
\ No newline at end of file
diff --git a/doc/tutorial_resources/oai-cn5g/conf/oai-udm.conf b/doc/tutorial_resources/oai-cn5g/conf/oai-udm.conf
deleted file mode 100644
index 7654346a06..0000000000
--- a/doc/tutorial_resources/oai-cn5g/conf/oai-udm.conf
+++ /dev/null
@@ -1,63 +0,0 @@
-################################################################################
-# Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The OpenAirInterface Software Alliance licenses this file to You under
-# the OAI Public License, Version 1.1 (the "License"); you may not use this file
-# except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.openairinterface.org/?page_id=698
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#-------------------------------------------------------------------------------
-# For more information about the OpenAirInterface (OAI) Software Alliance:
-# contact@openairinterface.org
-################################################################################
-
-UDM =
-{
- INSTANCE_ID = 0;
- PID_DIRECTORY = "/var/run";
-
- UDM_NAME = "OAI_UDM";
-
- INTERFACES:{
- # UDM binded interface for SBI interface (e.g., communication with UDR, AUSF)
- SBI:{
- INTERFACE_NAME = "eth0"; # YOUR NETWORK CONFIG HERE
- IPV4_ADDRESS = "read";
- PORT = 80; # YOUR NETWORK CONFIG HERE (default: 80)
- PPID = 60;
- API_VERSION = "v1";
- HTTP2_PORT = 8080; # YOUR NETWORK CONFIG HERE
- };
- };
-
- # SUPPORT FEATURES
- SUPPORT_FEATURES: {
- # STRING, {"yes", "no"},
- USE_FQDN_DNS = "no"; # Set to yes if UDM will relying on a DNS to resolve UDR's FQDN
- USE_HTTP2 = "no"; # Set to yes to enable HTTP2 for AUSF server
- REGISTER_NRF = "no"; # Set to 'yes' if UDM resgisters to an NRF
- }
-
- UDR:{
- IPV4_ADDRESS = "192.168.70.136"; # YOUR NETWORK CONFIG HERE
- PORT = 80; # YOUR NETWORK CONFIG HERE (default: 80)
- API_VERSION = "v1"; # YOUR API VERSION FOR UDR CONFIG HERE
- FQDN = "oai-udr" # YOUR UDR FQDN CONFIG HERE
- };
-
- NRF :
- {
- IPV4_ADDRESS = "192.168.70.130"; # YOUR NRF CONFIG HERE
- PORT = 80; # YOUR NRF CONFIG HERE (default: 80)
- API_VERSION = "v1"; # YOUR NRF API VERSION HERE
- FQDN = "oai-nrf"; # YOUR NRF FQDN HERE
- };
-};
\ No newline at end of file
diff --git a/doc/tutorial_resources/oai-cn5g/conf/oai-udr.conf b/doc/tutorial_resources/oai-cn5g/conf/oai-udr.conf
deleted file mode 100644
index ba88f99f7f..0000000000
--- a/doc/tutorial_resources/oai-cn5g/conf/oai-udr.conf
+++ /dev/null
@@ -1,66 +0,0 @@
-################################################################################
-# Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The OpenAirInterface Software Alliance licenses this file to You under
-# the OAI Public License, Version 1.1 (the "License"); you may not use this file
-# except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.openairinterface.org/?page_id=698
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#-------------------------------------------------------------------------------
-# For more information about the OpenAirInterface (OAI) Software Alliance:
-# contact@openairinterface.org
-################################################################################
-UDR =
-{
- INSTANCE_ID = 0; # 0 is the default
- PID_DIRECTORY = "/var/run"; # /var/run is the default
- UDR_NAME = "OAI_UDR";
-
-
- SUPPORT_FEATURES:{
- USE_FQDN_DNS = "no"; # Set to yes if UDR will relying on a DNS to resolve UDM's FQDN
- REGISTER_NRF = "no"; # Set to yes if UDR resgisters to an NRF
- USE_HTTP2 = "no"; # Set to yes to enable HTTP2 for UDR server
- DATABASE = "MySQL"; # Set to 'MySQL'/'Cassandra' to use MySQL/Cassandra
- };
-
- INTERFACES:
- {
- # NUDR Interface (SBI)
- NUDR:
- {
- INTERFACE_NAME = "eth0";
- IPV4_ADDRESS = "read";
- PORT = 80; # Default value: 80
- HTTP2_PORT = 8080;
- API_VERSION = "v1";
- };
- };
-
- NRF:
- {
- IPV4_ADDRESS = "192.168.70.130";
- PORT = 80; # Default value: 80
- API_VERSION = "v1";
- FQDN = "oai-nrf";
- };
-
- MYSQL:
- {
- # MySQL options
- MYSQL_SERVER = "mysql";
- MYSQL_USER = "root";
- MYSQL_PASS = "linux";
- MYSQL_DB = "oai_db";
- DB_CONNECTION_TIMEOUT = 300; # Reset the connection to the DB after expiring the timeout (in second)
- };
-};
-
diff --git a/doc/tutorial_resources/oai-cn5g/docker-compose.yml b/doc/tutorial_resources/oai-cn5g/docker-compose.yml
index b00a6b3c94..b57942fea0 100644
--- a/doc/tutorial_resources/oai-cn5g/docker-compose.yml
+++ b/doc/tutorial_resources/oai-cn5g/docker-compose.yml
@@ -37,78 +37,197 @@ services:
oai-udr:
container_name: "oai-udr"
image: oaisoftwarealliance/oai-udr:develop
- entrypoint: ["/openair-udr/bin/oai_udr", "-c", "/openair-udr/etc/udr.conf", "-o"]
+ environment:
+ - TZ=Europe/Paris
+ - UDR_NAME=OAI_UDR
+ - UDR_INTERFACE_NAME_FOR_NUDR=eth0
+ - MYSQL_IPV4_ADDRESS=mysql
+ - MYSQL_USER=test
+ - MYSQL_PASS=test
+ - MYSQL_DB=oai_db
+ - WAIT_MYSQL=120
+ - USE_FQDN_DNS=yes
+ - REGISTER_NRF=yes
+ - NRF_IPV4_ADDRESS=192.168.70.130
+ - NRF_FQDN=oai-nrf
depends_on:
- mysql
- oai-nrf
- volumes:
- - ./conf/oai-udr.conf:/openair-udr/etc/udr.conf
networks:
public_net:
ipv4_address: 192.168.70.136
oai-udm:
container_name: "oai-udm"
image: oaisoftwarealliance/oai-udm:develop
- entrypoint: ["/openair-udm/bin/oai_udm", "-c", "/openair-udm/etc/udm.conf", "-o"]
+ environment:
+ - TZ=Europe/Paris
+ - UDM_NAME=OAI_UDM
+ - SBI_IF_NAME=eth0
+ - REGISTER_NRF=yes
+ - USE_FQDN_DNS=yes
+ - UDR_IP_ADDRESS=192.168.70.136
+ - UDR_FQDN=oai-udr
+ - NRF_IPV4_ADDRESS=192.168.70.130
+ - NRF_FQDN=oai-nrf
depends_on:
- oai-nrf
- volumes:
- - ./conf/oai-udm.conf:/openair-udm/etc/udm.conf
+ - oai-udr
networks:
public_net:
ipv4_address: 192.168.70.137
oai-ausf:
container_name: "oai-ausf"
image: oaisoftwarealliance/oai-ausf:develop
- entrypoint: ["/openair-ausf/bin/oai_ausf", "-c", "/openair-ausf/etc/ausf.conf", "-o"]
+ environment:
+ - TZ=Europe/Paris
+ - AUSF_NAME=OAI_AUSF
+ - SBI_IF_NAME=eth0
+ - USE_FQDN_DNS=yes
+ - REGISTER_NRF=yes
+ - UDM_IP_ADDRESS=192.168.70.137
+ - UDM_FQDN=oai-udm
+ - NRF_IPV4_ADDRESS=192.168.70.130
+ - NRF_FQDN=oai-nrf
depends_on:
- oai-nrf
- volumes:
- - ./conf/oai-ausf.conf:/openair-ausf/etc/ausf.conf
+ - oai-udm
networks:
public_net:
ipv4_address: 192.168.70.138
oai-nrf:
container_name: "oai-nrf"
image: oaisoftwarealliance/oai-nrf:develop
- entrypoint: ["/openair-nrf/bin/oai_nrf", "-c", "/openair-nrf/etc/nrf.conf", "-o"]
- volumes:
- - ./conf/oai-nrf.conf:/openair-nrf/etc/nrf.conf
+ environment:
+ - TZ=Europe/Paris
+ - NRF_INTERFACE_NAME_FOR_SBI=eth0
networks:
public_net:
ipv4_address: 192.168.70.130
oai-amf:
container_name: "oai-amf"
image: oaisoftwarealliance/oai-amf:develop
- entrypoint: ["/openair-amf/bin/oai_amf", "-c", "/openair-amf/etc/amf.conf", "-o"]
+ environment:
+ - TZ=Europe/Paris
+ # PLMN informations
+ - MCC=001
+ - MNC=01
+ - REGION_ID=128
+ - AMF_SET_ID=1
+ - SERVED_GUAMI_MCC_0=001
+ - SERVED_GUAMI_MNC_0=01
+ - SERVED_GUAMI_REGION_ID_0=128
+ - SERVED_GUAMI_AMF_SET_ID_0=1
+ - PLMN_SUPPORT_MCC=001
+ - PLMN_SUPPORT_MNC=01
+ - PLMN_SUPPORT_TAC=0x0001
+ # Slice 0 (1, 0xFFFFFF)
+ - SST_0=1
+ - AMF_INTERFACE_NAME_FOR_NGAP=eth0
+ - AMF_INTERFACE_NAME_FOR_N11=eth0
+ # One single SMF instance
+ - SMF_INSTANCE_ID_0=1
+ - SMF_FQDN_0=oai-smf
+ - SMF_IPV4_ADDR_0=192.168.70.133
+ - SELECTED_0=true
+ # Interaction with other NFs
+ - NF_REGISTRATION=yes
+ - USE_FQDN_DNS=yes
+ - EXTERNAL_AUSF=yes
+ # Algorithm choices
+ - CIPH_ALGO_LIST=["NEA0" , "NEA1" , "NEA2"]
+ - INT_ALGO_LIST=["NIA1" , "NIA2"]
+ # Other NF
+ - NRF_IPV4_ADDRESS=192.168.70.130
+ - NRF_FQDN=oai-nrf
+ - AUSF_IPV4_ADDRESS=192.168.70.138
+ - AUSF_FQDN=oai-ausf
+ - UDM_IPV4_ADDRESS=192.168.70.137
+ - UDM_FQDN=oai-udm
depends_on:
- oai-nrf
- volumes:
- - ./conf/oai-amf.conf:/openair-amf/etc/amf.conf
+ - oai-ausf
networks:
public_net:
ipv4_address: 192.168.70.132
oai-smf:
container_name: "oai-smf"
image: oaisoftwarealliance/oai-smf:develop
- entrypoint: ["/openair-smf/bin/oai_smf", "-c", "/openair-smf/etc/smf.conf", "-o"]
+ environment:
+ - TZ=Europe/Paris
+ - SMF_INTERFACE_NAME_FOR_N4=eth0
+ - SMF_INTERFACE_NAME_FOR_SBI=eth0
+ - DEFAULT_DNS_IPV4_ADDRESS=8.8.8.8
+ - DEFAULT_DNS_SEC_IPV4_ADDRESS=4.4.4.4
+ - AMF_IPV4_ADDRESS=192.168.70.132
+ - AMF_FQDN=oai-amf
+ - UDM_IPV4_ADDRESS=192.168.70.137
+ - UDM_FQDN=oai-udm
+ - UPF_IPV4_ADDRESS=192.168.70.134
+ - UPF_FQDN_0=oai-spgwu-tiny
+ - NRF_IPV4_ADDRESS=192.168.70.130
+ - NRF_FQDN=oai-nrf
+ - USE_LOCAL_SUBSCRIPTION_INFO=yes
+ - REGISTER_NRF=yes
+ - DISCOVER_UPF=yes
+ - USE_FQDN_DNS=yes
+ - UE_MTU=1500
+ # Slice 0 (1, 0xFFFFFF)
+ - DNN_NI0=oai
+ - TYPE0=IPv4
+ - DNN_RANGE0=12.1.1.2 - 12.1.1.254
+ - NSSAI_SST0=1
+ - SESSION_AMBR_UL0=10Gbps
+ - SESSION_AMBR_DL0=10Gbps
+ # Slice 1 (1, 0xFFFFFF)
+ - DNN_NI1=openairinterface
+ - TYPE1=IPv4v6
+ - DNN_RANGE1=12.1.2.2 - 12.1.2.254
+ - NSSAI_SST1=1
+ - SESSION_AMBR_UL1=10Gbps
+ - SESSION_AMBR_DL1=10Gbps
+ # Slice 2 for ims
+ - DNN_NI2=ims
+ - TYPE2=IPv4v6
+ - DNN_RANGE2=12.1.9.2 - 12.1.9.254
+ - NSSAI_SST2=1
+ - SESSION_AMBR_UL2=10Gbps
+ - SESSION_AMBR_DL2=10Gbps
+ # IMS server
+ - DEFAULT_CSCF_IPV4_ADDRESS=192.168.70.139
depends_on:
- oai-nrf
- volumes:
- - ./conf/oai-smf.conf:/openair-smf/etc/smf.conf
+ - oai-amf
networks:
public_net:
ipv4_address: 192.168.70.133
oai-spgwu-tiny:
container_name: "oai-spgwu-tiny"
image: oaisoftwarealliance/oai-spgwu-tiny:develop
- #for ims we need to execute below command once the container is running
- # iptables -t nat -A POSTROUTING -o eth0 -s 12.2.1.0/24 -j SNAT --to 192.168.70.134
- entrypoint: ["/openair-spgwu-tiny/bin/oai_spgwu", "-c", "/openair-spgwu-tiny/etc/spgw_u.conf","-o"]
+ environment:
+ - TZ=Europe/Paris
+ - SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP=eth0
+ - SGW_INTERFACE_NAME_FOR_SX=eth0
+ - PGW_INTERFACE_NAME_FOR_SGI=eth0
+ - NETWORK_UE_NAT_OPTION=yes
+ - NETWORK_UE_IP=12.1.0.0/16
+ - ENABLE_5G_FEATURES=yes
+ - REGISTER_NRF=yes
+ - USE_FQDN_NRF=yes
+ - UPF_FQDN_5G=oai-spgwu-tiny
+ - NRF_IPV4_ADDRESS=192.168.70.130
+ - NRF_FQDN=oai-nrf
+ # Slice 0 (1, 0xFFFFFF)
+ - NSSAI_SST_0=1
+ - DNN_0=oai
+ # Slice 1 (1, 0xFFFFFF)
+ - NSSAI_SST_1=1
+ - DNN_1=openairinterface
+ # Slice 2 (1, 0xFFFFFF)
+ - NSSAI_SST_2=1
+ - DNN_2=ims
depends_on:
- oai-nrf
- volumes:
- - ./conf/oai-spgwu-tiny.conf:/openair-spgwu-tiny/etc/spgw_u.conf
+ - oai-smf
cap_add:
- NET_ADMIN
- SYS_ADMIN
@@ -127,7 +246,7 @@ services:
depends_on:
- oai-spgwu-tiny
healthcheck:
- test: /bin/bash -c "ip r | grep 12.1.1"
+ test: /bin/bash -c "ip r | grep 12.1.0"
interval: 10s
timeout: 5s
retries: 5
diff --git a/docker/Dockerfile.phySim.rhel8.2 b/docker/Dockerfile.phySim.rhel8.2
index 0264c78731..6abbd52832 100644
--- a/docker/Dockerfile.phySim.rhel8.2
+++ b/docker/Dockerfile.phySim.rhel8.2
@@ -84,6 +84,8 @@ COPY --from=phy-sim-build \
/lib64/libforms.so.2 \
/lib64/libblas.so.3 \
/lib64/liblapack.so.3 \
+ /lib64/libexslt.so.0 \
+ /lib64/libxslt.so.1 \
/usr/lib64/libasan.so.5 \
/oai-ran/cmake_targets/ran_build/build/libdfts.so \
/oai-ran/cmake_targets/ran_build/build/libldpc.so \
diff --git a/executables/nr-ue.c b/executables/nr-ue.c
index 26ccec80b4..075789e12b 100644
--- a/executables/nr-ue.c
+++ b/executables/nr-ue.c
@@ -352,8 +352,7 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg)
mac->scc_SIB->tdd_UL_DL_ConfigurationCommon,
ul_info.slot_tx, mac->frame_type)) {
LOG_D(NR_MAC, "Slot %d. calling nr_ue_ul_ind() and nr_ue_pucch_scheduler() from %s\n", ul_info.slot_tx, __FUNCTION__);
- nr_ue_scheduler(NULL, &ul_info);
- nr_ue_prach_scheduler(mod_id, ul_info.frame_tx, ul_info.slot_tx);
+ nr_ue_ul_scheduler(&ul_info);
nr_ue_pucch_scheduler(mod_id, ul_info.frame_tx, ul_info.slot_tx, NULL);
}
if (!IS_SOFTMODEM_NOS1 && get_softmodem_params()->sa) {
diff --git a/executables/nr-uesoftmodem.c b/executables/nr-uesoftmodem.c
index d3d8090be5..eb6e160ec3 100644
--- a/executables/nr-uesoftmodem.c
+++ b/executables/nr-uesoftmodem.c
@@ -510,13 +510,13 @@ int main( int argc, char **argv ) {
nr_band);
}
else{
- if(mac->if_module != NULL && mac->if_module->phy_config_request != NULL)
- mac->if_module->phy_config_request(&mac->phy_config);
-
+ DevAssert(mac->if_module != NULL && mac->if_module->phy_config_request != NULL);
+ mac->if_module->phy_config_request(&mac->phy_config);
+ mac->phy_config_request_sent = true;
fapi_nr_config_request_t *nrUE_config = &UE[CC_id]->nrUE_config;
nr_init_frame_parms_ue(&UE[CC_id]->frame_parms, nrUE_config,
- *mac->scc->downlinkConfigCommon->frequencyInfoDL->frequencyBandList.list.array[0]);
+ *mac->scc->downlinkConfigCommon->frequencyInfoDL->frequencyBandList.list.array[0]);
}
init_nr_ue_vars(UE[CC_id], 0, abstraction_flag);
diff --git a/nfapi/open-nFAPI/nfapi/public_inc/nfapi_interface.h b/nfapi/open-nFAPI/nfapi/public_inc/nfapi_interface.h
index f14d5220bd..5e8fde4487 100644
--- a/nfapi/open-nFAPI/nfapi/public_inc/nfapi_interface.h
+++ b/nfapi/open-nFAPI/nfapi/public_inc/nfapi_interface.h
@@ -1085,7 +1085,7 @@ typedef struct
// These TLVs are used by the VNF to configure the RF in the PNF
nfapi_uint16_tlv_t max_transmit_power;
- nfapi_uint16_tlv_t earfcn;
+ nfapi_uint32_tlv_t earfcn;
nfapi_nmm_frequency_bands_t nmm_gsm_frequency_bands;
nfapi_nmm_frequency_bands_t nmm_umts_frequency_bands;
diff --git a/nfapi/open-nFAPI/nfapi/src/nfapi_p5.c b/nfapi/open-nFAPI/nfapi/src/nfapi_p5.c
index ce9c22f7f7..d8d9858eeb 100644
--- a/nfapi/open-nFAPI/nfapi/src/nfapi_p5.c
+++ b/nfapi/open-nFAPI/nfapi/src/nfapi_p5.c
@@ -505,7 +505,7 @@ static uint8_t pack_param_response(void *msg, uint8_t **ppWritePackedMsg, uint8_
pack_tlv(NFAPI_NFAPI_TIMING_INFO_MODE_TAG, &(pNfapiMsg->nfapi_config.timing_info_mode), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
pack_tlv(NFAPI_NFAPI_TIMING_INFO_PERIOD_TAG, &(pNfapiMsg->nfapi_config.timing_info_period), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
pack_tlv(NFAPI_NFAPI_MAXIMUM_TRANSMIT_POWER_TAG, &(pNfapiMsg->nfapi_config.max_transmit_power), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_NFAPI_EARFCN_TAG, &(pNfapiMsg->nfapi_config.earfcn), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
+ pack_tlv(NFAPI_NFAPI_EARFCN_TAG, &(pNfapiMsg->nfapi_config.earfcn), ppWritePackedMsg, end, &pack_uint32_tlv_value) &&
pack_tlv(NFAPI_NFAPI_NMM_GSM_FREQUENCY_BANDS_TAG, &(pNfapiMsg->nfapi_config.nmm_gsm_frequency_bands), ppWritePackedMsg, end, &pack_nmm_frequency_bands_value) &&
pack_tlv(NFAPI_NFAPI_NMM_UMTS_FREQUENCY_BANDS_TAG, &(pNfapiMsg->nfapi_config.nmm_umts_frequency_bands), ppWritePackedMsg, end, &pack_nmm_frequency_bands_value) &&
pack_tlv(NFAPI_NFAPI_NMM_LTE_FREQUENCY_BANDS_TAG, &(pNfapiMsg->nfapi_config.nmm_lte_frequency_bands), ppWritePackedMsg, end, &pack_nmm_frequency_bands_value) &&
@@ -693,7 +693,7 @@ static uint8_t pack_config_request(void *msg, uint8_t **ppWritePackedMsg, uint8_
pack_tlv(NFAPI_NFAPI_TIMING_INFO_MODE_TAG, &(pNfapiMsg->nfapi_config.timing_info_mode), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
pack_tlv(NFAPI_NFAPI_TIMING_INFO_PERIOD_TAG, &(pNfapiMsg->nfapi_config.timing_info_period), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
pack_tlv(NFAPI_NFAPI_MAXIMUM_TRANSMIT_POWER_TAG, &(pNfapiMsg->nfapi_config.max_transmit_power), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_NFAPI_EARFCN_TAG, &(pNfapiMsg->nfapi_config.earfcn), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
+ pack_tlv(NFAPI_NFAPI_EARFCN_TAG, &(pNfapiMsg->nfapi_config.earfcn), ppWritePackedMsg, end, &pack_uint32_tlv_value) &&
pack_tlv(NFAPI_NFAPI_NMM_GSM_FREQUENCY_BANDS_TAG, &(pNfapiMsg->nfapi_config.nmm_gsm_frequency_bands), ppWritePackedMsg, end, &pack_nmm_frequency_bands_value) &&
pack_tlv(NFAPI_NFAPI_NMM_UMTS_FREQUENCY_BANDS_TAG, &(pNfapiMsg->nfapi_config.nmm_umts_frequency_bands), ppWritePackedMsg, end, &pack_nmm_frequency_bands_value) &&
pack_tlv(NFAPI_NFAPI_NMM_LTE_FREQUENCY_BANDS_TAG, &(pNfapiMsg->nfapi_config.nmm_lte_frequency_bands), ppWritePackedMsg, end, &pack_nmm_frequency_bands_value) &&
@@ -1492,7 +1492,7 @@ static uint8_t unpack_param_response(uint8_t **ppReadPackedMsg, uint8_t *end, vo
{ NFAPI_NFAPI_TIMING_INFO_MODE_TAG, &pNfapiMsg->nfapi_config.timing_info_mode, &unpack_uint8_tlv_value},
{ NFAPI_NFAPI_TIMING_INFO_PERIOD_TAG, &pNfapiMsg->nfapi_config.timing_info_period, &unpack_uint8_tlv_value},
{ NFAPI_NFAPI_MAXIMUM_TRANSMIT_POWER_TAG, &pNfapiMsg->nfapi_config.max_transmit_power, &unpack_uint16_tlv_value},
- { NFAPI_NFAPI_EARFCN_TAG, &pNfapiMsg->nfapi_config.earfcn, &unpack_uint16_tlv_value},
+ { NFAPI_NFAPI_EARFCN_TAG, &pNfapiMsg->nfapi_config.earfcn, &unpack_uint32_tlv_value},
{ NFAPI_NFAPI_NMM_GSM_FREQUENCY_BANDS_TAG, &pNfapiMsg->nfapi_config.nmm_gsm_frequency_bands, &unpack_nmm_frequency_bands_value},
{ NFAPI_NFAPI_NMM_UMTS_FREQUENCY_BANDS_TAG, &pNfapiMsg->nfapi_config.nmm_umts_frequency_bands, &unpack_nmm_frequency_bands_value},
{ NFAPI_NFAPI_NMM_LTE_FREQUENCY_BANDS_TAG, &pNfapiMsg->nfapi_config.nmm_lte_frequency_bands, &unpack_nmm_frequency_bands_value},
@@ -1705,7 +1705,7 @@ static uint8_t unpack_config_request(uint8_t **ppReadPackedMsg, uint8_t *end, vo
{ NFAPI_NFAPI_TIMING_INFO_MODE_TAG, &pNfapiMsg->nfapi_config.timing_info_mode, &unpack_uint8_tlv_value},
{ NFAPI_NFAPI_TIMING_INFO_PERIOD_TAG, &pNfapiMsg->nfapi_config.timing_info_period, &unpack_uint8_tlv_value},
{ NFAPI_NFAPI_MAXIMUM_TRANSMIT_POWER_TAG, &pNfapiMsg->nfapi_config.max_transmit_power, &unpack_uint16_tlv_value},
- { NFAPI_NFAPI_EARFCN_TAG, &pNfapiMsg->nfapi_config.earfcn, &unpack_uint16_tlv_value},
+ { NFAPI_NFAPI_EARFCN_TAG, &pNfapiMsg->nfapi_config.earfcn, &unpack_uint32_tlv_value},
{ NFAPI_NFAPI_NMM_GSM_FREQUENCY_BANDS_TAG, &pNfapiMsg->nfapi_config.nmm_gsm_frequency_bands, &unpack_nmm_frequency_bands_value},
{ NFAPI_NFAPI_NMM_UMTS_FREQUENCY_BANDS_TAG, &pNfapiMsg->nfapi_config.nmm_umts_frequency_bands, &unpack_nmm_frequency_bands_value},
{ NFAPI_NFAPI_NMM_LTE_FREQUENCY_BANDS_TAG, &pNfapiMsg->nfapi_config.nmm_lte_frequency_bands, &unpack_nmm_frequency_bands_value},
diff --git a/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c b/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c
index d10beb9807..81abf5f1ee 100644
--- a/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c
+++ b/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c
@@ -120,7 +120,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
nfapi_nr_pusch_pdu_t *pusch_pdu,
int *max_ch) {
- c16_t pilot[3280] __attribute__((aligned(16)));
+ c16_t pilot[3280] __attribute__((aligned(32)));
const int chest_freq = gNB->chest_freq;
#ifdef DEBUG_CH
@@ -164,9 +164,9 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
const uint8_t u = pusch_pdu->dfts_ofdm.low_papr_group_number;
const uint8_t v = pusch_pdu->dfts_ofdm.low_papr_sequence_number;
int16_t *dmrs_seq = gNB_dmrs_lowpaprtype1_sequence[u][v][index];
+ LOG_D(PHY,"Transform Precoding params. u: %d, v: %d, index for dmrsseq: %d\n", u, v, index);
AssertFatal(index >= 0, "Num RBs not configured according to 3GPP 38.211 section 6.3.1.4. For PUSCH with transform precoding, num RBs cannot be multiple of any other primenumber other than 2,3,5\n");
AssertFatal(dmrs_seq != NULL, "DMRS low PAPR seq not found, check if DMRS sequences are generated");
- LOG_D(PHY,"Transform Precoding params. u: %d, v: %d, index for dmrsseq: %d\n", u, v, index);
nr_pusch_lowpaprtype1_dmrs_rx(gNB, Ns, dmrs_seq, (int32_t *)pilot, 1000, 0, nb_rb_pusch, 0, pusch_pdu->dmrs_config_type);
#ifdef DEBUG_PUSCH
printf ("NR_UL_CHANNEL_EST: index %d, u %d,v %d\n", index, u, v);
@@ -183,7 +183,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
#endif
- c16_t ul_ls_est[symbolSize];
+ c16_t ul_ls_est[symbolSize] __attribute__((aligned(32)));
memset(ul_ls_est, 0, sizeof(c16_t) * symbolSize);
memset(&gNB->measurements.delay[ul_id], 0, sizeof(gNB->measurements.delay[ul_id]));
diff --git a/openair1/PHY/TOOLS/oai_dfts.c b/openair1/PHY/TOOLS/oai_dfts.c
index 56787efd6f..51ddd336e3 100644
--- a/openair1/PHY/TOOLS/oai_dfts.c
+++ b/openair1/PHY/TOOLS/oai_dfts.c
@@ -9068,7 +9068,7 @@ void idft(uint8_t sizeidx, int16_t *input,int16_t *output,unsigned char scale_fl
int sz=idft_ftab[sizeidx].size;
int16_t tmp[sz*2] __attribute__ ((aligned(32))); // input and output are not in right type (int16_t instead of c16_t)
memcpy(tmp, input, sizeof tmp);
- dft_ftab[sizeidx].func(tmp,output,scale_flag);
+ idft_ftab[sizeidx].func(tmp,output,scale_flag);
} else
idft_ftab[sizeidx].func(input,output,scale_flag);
};
diff --git a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
index e3134c24f6..b64be34f6e 100644
--- a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
+++ b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
@@ -421,7 +421,8 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){
for (int i = 0; i < ul_config->number_pdus; ++i){
AssertFatal(ul_config->ul_config_list[i].pdu_type <= FAPI_NR_UL_CONFIG_TYPES,"pdu_type %d out of bounds\n",ul_config->ul_config_list[i].pdu_type);
- LOG_D(PHY, "In %s i %d: processing %s PDU of %d total UL PDUs (ul_config %p) \n", __FUNCTION__, i, ul_pdu_type[ul_config->ul_config_list[i].pdu_type - 1], ul_config->number_pdus, ul_config);
+ LOG_D(PHY, "[%d.%d] i %d: processing %s PDU of %d total UL PDUs (ul_config %p) \n",
+ scheduled_response->frame, slot, i, ul_pdu_type[ul_config->ul_config_list[i].pdu_type - 1], ul_config->number_pdus, ul_config);
uint8_t pdu_type = ul_config->ul_config_list[i].pdu_type, current_harq_pid, gNB_id = 0;
/* PRACH */
@@ -447,7 +448,6 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){
LOG_D(PHY, "In %s i %d: copy pusch_config_pdu nrOfLayers:%d, num_dmrs_cdm_grps_no_data:%d \n", __FUNCTION__, i, pusch_config_pdu->nrOfLayers,pusch_config_pdu->num_dmrs_cdm_grps_no_data);
memcpy(pusch_pdu, pusch_config_pdu, sizeof(nfapi_nr_ue_pusch_pdu_t));
-
if (scheduled_response->tx_request) {
for (int j=0; jtx_request->number_of_pdus; j++) {
fapi_nr_tx_request_body_t *tx_req_body = &scheduled_response->tx_request->tx_request_body[j];
@@ -541,17 +541,10 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){
return 0;
}
-
-
-
-int8_t nr_ue_phy_config_request(nr_phy_config_t *phy_config){
-
+int8_t nr_ue_phy_config_request(nr_phy_config_t *phy_config)
+{
fapi_nr_config_request_t *nrUE_config = &PHY_vars_UE_g[phy_config->Mod_id][phy_config->CC_id]->nrUE_config;
-
if(phy_config != NULL)
memcpy(nrUE_config,&phy_config->config_req,sizeof(fapi_nr_config_request_t));
-
return 0;
}
-
-
diff --git a/openair1/SIMULATION/NR_PHY/dlsim.c b/openair1/SIMULATION/NR_PHY/dlsim.c
index 0fa2f94554..077490c3a9 100644
--- a/openair1/SIMULATION/NR_PHY/dlsim.c
+++ b/openair1/SIMULATION/NR_PHY/dlsim.c
@@ -852,6 +852,7 @@ int main(int argc, char **argv)
UE->chest_time = chest_type[1];
UE_mac->if_module = nr_ue_if_module_init(0);
+ UE_mac->state = UE_CONNECTED;
unsigned int available_bits=0;
unsigned char *estimated_output_bit;
diff --git a/openair2/COMMON/e1ap_messages_types.h b/openair2/COMMON/e1ap_messages_types.h
index 941d95b044..7a88344efc 100644
--- a/openair2/COMMON/e1ap_messages_types.h
+++ b/openair2/COMMON/e1ap_messages_types.h
@@ -24,6 +24,7 @@
#ifndef E1AP_MESSAGES_TYPES_H
#define E1AP_MESSAGES_TYPES_H
+#include "common/ngran_types.h"
#include "f1ap_messages_types.h"
#include "ngap_messages_types.h"
diff --git a/openair2/COMMON/ngap_messages_types.h b/openair2/COMMON/ngap_messages_types.h
index 70412e8368..87426eff98 100644
--- a/openair2/COMMON/ngap_messages_types.h
+++ b/openair2/COMMON/ngap_messages_types.h
@@ -29,7 +29,7 @@
#ifndef NGAP_MESSAGES_TYPES_H_
#define NGAP_MESSAGES_TYPES_H_
-
+#include "common/ngran_types.h"
#include "LTE_asn_constant.h"
//-------------------------------------------------------------------------------------------//
// Defines to access message fields.
@@ -49,7 +49,7 @@
#define NGAP_UE_CTXT_MODIFICATION_RESP(mSGpTR) (mSGpTR)->ittiMsg.ngap_ue_ctxt_modification_resp
#define NGAP_UE_CTXT_MODIFICATION_FAIL(mSGpTR) (mSGpTR)->ittiMsg.ngap_ue_ctxt_modification_fail
#define NGAP_PDUSESSION_SETUP_RESP(mSGpTR) (mSGpTR)->ittiMsg.ngap_pdusession_setup_resp
-#define NGAP_PDUSESSION_SETUP_FAIL(mSGpTR) (mSGpTR)->ittiMsg.ngap_pdusession_setup_req_fail
+#define NGAP_PDUSESSION_SETUP_FAIL(mSGpTR) (mSGpTR)->ittiMsg.ngap_pdusession_setup_request_fail
#define NGAP_PDUSESSION_MODIFY_RESP(mSGpTR) (mSGpTR)->ittiMsg.ngap_pdusession_modify_resp
#define NGAP_PATH_SWITCH_REQ(mSGpTR) (mSGpTR)->ittiMsg.ngap_path_switch_req
#define NGAP_PATH_SWITCH_REQ_ACK(mSGpTR) (mSGpTR)->ittiMsg.ngap_path_switch_req_ack
@@ -194,6 +194,13 @@ typedef enum ngap_rrc_establishment_cause_e {
NGAP_RRC_CAUSE_LAST
} ngap_rrc_establishment_cause_t;
+typedef struct pdusession_level_qos_parameter_s {
+ uint8_t qfi;
+ uint64_t fiveQI;
+ fiveQI_type_t fiveQI_type;
+ ngap_allocation_retention_priority_t allocation_retention_priority;
+} pdusession_level_qos_parameter_t;
+
typedef struct ngap_guami_s {
uint16_t mcc;
uint16_t mnc;
@@ -242,7 +249,7 @@ typedef struct ngap_nas_pdu_s {
uint8_t *buffer;
/* Length of the octet string */
uint32_t length;
-} ngap_nas_pdu_t, ngap_ue_radio_cap_t;
+} ngap_pdu_t;
typedef struct ngap_mobility_restriction_s{
ngap_plmn_identity_t serving_plmn;
@@ -267,43 +274,22 @@ typedef struct ngap_transport_layer_addr_s {
uint8_t buffer[20]; // in network byte order
} ngap_transport_layer_addr_t;
-#define TRANSPORT_LAYER_ADDR_COPY(dEST,sOURCE) \
- do { \
- AssertFatal(sOURCE.len <= 20); \
- memcpy(dEST.buffer, sOURCE.buffer, sOURCE.len); \
- dEST.length = sOURCE.length; \
- } while (0)
-
-typedef enum {
- non_dynamic,
- dynamic
-} fiveQI_type_t;
-
-typedef struct pdusession_level_qos_parameter_s {
- uint8_t qfi;
- uint64_t fiveQI;
- fiveQI_type_t fiveQI_type;
- ngap_allocation_retention_priority_t allocation_retention_priority;
-} pdusession_level_qos_parameter_t;
-
typedef struct pdusession_s {
/* Unique pdusession_id for the UE. */
- uint8_t pdusession_id;
-
- uint8_t nb_qos;
+ int pdusession_id;
+ ngap_pdu_t nas_pdu;
+ ngap_pdu_t pdusessionTransfer;
+ uint8_t nb_qos;
/* Quality of service for this pdusession */
pdusession_level_qos_parameter_t qos[QOSFLOW_MAX_VALUE];
- /* The NAS PDU should be forwarded by the RRC layer to the NAS layer */
- ngap_nas_pdu_t nas_pdu;
/* The transport layer address for the IP packets */
- ngap_transport_layer_addr_t upf_addr;
+ ngap_transport_layer_addr_t upf_addr;
/* S-GW Tunnel endpoint identifier */
- uint32_t gtp_teid;
+ uint32_t gtp_teid;
/* Stores the DRB ID of the DRBs used by this PDU Session */
- uint8_t used_drbs[NGAP_MAX_DRBS_PER_UE];
+ uint8_t used_drbs[NGAP_MAX_DRBS_PER_UE];
} pdusession_t;
-
typedef enum pdusession_qosflow_mapping_ind_e{
QOSFLOW_MAPPING_INDICATION_UL = 0,
QOSFLOW_MAPPING_INDICATION_DL = 1,
@@ -313,7 +299,7 @@ typedef enum pdusession_qosflow_mapping_ind_e{
typedef struct pdusession_associate_qosflow_s{
uint8_t qfi;
pdusession_qosflow_mapping_ind_t qos_flow_mapping_ind;
-}pdusession_associate_qosflow_t;
+} pdusession_associate_qosflow_t;
typedef struct pdusession_setup_s {
/* Unique pdusession_id for the UE. */
@@ -332,36 +318,6 @@ typedef struct pdusession_setup_s {
pdusession_associate_qosflow_t associated_qos_flows[QOSFLOW_MAX_VALUE];
} pdusession_setup_t;
-typedef struct pdusession_tobe_added_s {
- /* Unique pdusession_id for the UE. */
- uint8_t pdusession_id;
-
- /* Unique drb_ID for the UE. */
- uint8_t drb_ID;
-
- /* The transport layer address for the IP packets */
- ngap_transport_layer_addr_t upf_addr;
-
- /* S-GW Tunnel endpoint identifier */
- uint32_t gtp_teid;
-} pdusession_tobe_added_t;
-
-typedef struct pdusession_admitted_tobe_added_s {
- /* Unique pdusession_id for the UE. */
- uint8_t pdusession_id;
-
- /* Unique drb_ID for the UE. */
- uint8_t drb_ID;
-
- /* The transport layer address for the IP packets */
- ngap_transport_layer_addr_t gnb_addr;
-
- /* S-GW Tunnel endpoint identifier */
- uint32_t gtp_teid;
-} pdusession_admitted_tobe_added_t;
-
-
-
typedef struct pdusession_tobeswitched_s {
/* Unique pdusession_id for the UE. */
uint8_t pdusession_id;
@@ -394,9 +350,12 @@ typedef enum ngap_Cause_e {
NGAP_CAUSE_NAS,
NGAP_CAUSE_PROTOCOL,
NGAP_CAUSE_MISC,
- /* Extensions may appear below */
-
-} ngap_Cause_t;
+ NGAP_Cause_PR_choice_ExtensionS,
+ //Evilish manual duplicate of asn.1 grammar
+ //because it is human work, whereas it can be generated by machine
+ //and because humans manual copy creates bugs
+ //and we create multiple names for the same thing, that is a source of confusion
+} ngap_Cause_t;
typedef enum ngap_Cause_radio_network_e {
NGAP_CAUSE_RADIO_NETWORK_UNSPECIFIED,
@@ -453,7 +412,6 @@ typedef struct pdusession_failed_s {
/* Unique pdusession_id for the UE. */
uint8_t pdusession_id;
/* Cause of the failure */
- // cause_t cause;
ngap_Cause_t cause;
uint8_t cause_value;
} pdusession_failed_t;
@@ -541,7 +499,7 @@ typedef struct ngap_deregistered_gnb_ind_s {
*/
typedef struct ngap_nas_first_req_s {
/* UE id for initial connection to NGAP */
- uint16_t ue_initial_id;
+ uint32_t gNB_ue_ngap_id;
/* the chosen PLMN identity as index, see TS 36.331 6.2.2 RRC Connection
* Setup Complete. This index here is zero-based, unlike the standard! */
@@ -551,7 +509,7 @@ typedef struct ngap_nas_first_req_s {
ngap_rrc_establishment_cause_t establishment_cause;
/* NAS PDU */
- ngap_nas_pdu_t nas_pdu;
+ ngap_pdu_t nas_pdu;
/* If this flag is set NGAP layer is expecting the GUAMI. If = 0,
* the temporary s-tmsi is used.
@@ -561,15 +519,14 @@ typedef struct ngap_nas_first_req_s {
typedef struct ngap_uplink_nas_s {
/* Unique UE identifier within an gNB */
- uint32_t gNB_ue_ngap_id;
-
+ uint32_t gNB_ue_ngap_id;
/* NAS pdu */
- ngap_nas_pdu_t nas_pdu;
+ ngap_pdu_t nas_pdu;
} ngap_uplink_nas_t;
typedef struct ngap_ue_cap_info_ind_s {
uint32_t gNB_ue_ngap_id;
- ngap_ue_radio_cap_t ue_radio_cap;
+ ngap_pdu_t ue_radio_cap;
} ngap_ue_cap_info_ind_t;
typedef struct ngap_initial_context_setup_resp_s {
@@ -594,7 +551,7 @@ typedef struct ngap_initial_context_setup_fail_s {
typedef struct ngap_nas_non_delivery_ind_s {
uint32_t gNB_ue_ngap_id;
- ngap_nas_pdu_t nas_pdu;
+ ngap_pdu_t nas_pdu;
/* TODO: add cause */
} ngap_nas_non_delivery_ind_t;
@@ -621,33 +578,24 @@ typedef struct ngap_ue_ctxt_modification_resp_s {
} ngap_ue_ctxt_modification_resp_t;
typedef struct ngap_ue_release_complete_s {
-
uint32_t gNB_ue_ngap_id;
-
} ngap_ue_release_complete_t;
//-------------------------------------------------------------------------------------------//
// NGAP -> RRC messages
typedef struct ngap_downlink_nas_s {
/* UE id for initial connection to NGAP */
- uint16_t ue_initial_id;
-
- /* Unique UE identifier within an gNB */
- uint32_t gNB_ue_ngap_id;
-
+ uint32_t gNB_ue_ngap_id;
/* NAS pdu */
- ngap_nas_pdu_t nas_pdu;
+ ngap_pdu_t nas_pdu;
} ngap_downlink_nas_t;
typedef struct ngap_initial_context_setup_req_s {
/* UE id for initial connection to NGAP */
- uint16_t ue_initial_id;
-
- /* gNB ue ngap id as initialized by NGAP layer */
uint32_t gNB_ue_ngap_id;
- uint64_t amf_ue_ngap_id:40;
+ uint64_t amf_ue_ngap_id;
/* UE aggregate maximum bitrate */
ngap_ambr_t ue_ambr;
@@ -676,7 +624,7 @@ typedef struct ngap_initial_context_setup_req_s {
/* Nas Pdu */
uint8_t nas_pdu_flag;
- ngap_nas_pdu_t nas_pdu;
+ ngap_pdu_t nas_pdu;
} ngap_initial_context_setup_req_t;
@@ -702,17 +650,22 @@ typedef struct ngap_paging_ind_s {
ngap_paging_priority_t paging_priority;
} ngap_paging_ind_t;
+typedef struct {
+ /* Unique pdusession_id for the UE. */
+ int pdusession_id;
+ ngap_pdu_t nas_pdu;
+ ngap_pdu_t pdusessionTransfer;
+} pdusession_setup_req_t;
+
typedef struct ngap_pdusession_setup_req_s {
/* UE id for initial connection to NGAP */
- uint16_t ue_initial_id;
+ uint32_t gNB_ue_ngap_id;
/* AMF UE id */
- uint64_t amf_ue_ngap_id:40;
-
- /* gNB ue ngap id as initialized by NGAP layer */
- uint32_t gNB_ue_ngap_id;
+ uint64_t amf_ue_ngap_id;
/* S-NSSAI */
+ // Fixme: illogical, nssai is part of each pdu session
ngap_allowed_NSSAI_t allowed_nssai[8];
/* Number of pdusession to be setup in the list */
@@ -730,8 +683,7 @@ typedef struct ngap_pdusession_setup_req_s {
} ngap_pdusession_setup_req_t;
typedef struct ngap_pdusession_setup_resp_s {
- uint32_t gNB_ue_ngap_id;
-
+ uint32_t gNB_ue_ngap_id;
/* Number of pdusession setup-ed in the list */
uint8_t nb_of_pdusessions;
/* list of pdusession setup-ed by RRC layers */
@@ -744,7 +696,6 @@ typedef struct ngap_pdusession_setup_resp_s {
} ngap_pdusession_setup_resp_t;
typedef struct ngap_path_switch_req_s {
-
uint32_t gNB_ue_ngap_id;
/* Number of pdusession setup-ed in the list */
@@ -754,13 +705,12 @@ typedef struct ngap_path_switch_req_s {
pdusession_setup_t pdusessions_tobeswitched[NGAP_MAX_PDUSESSION];
/* AMF UE id */
- uint64_t amf_ue_ngap_id:40;
+ uint64_t amf_ue_ngap_id;
ngap_guami_t ue_guami;
uint16_t ue_initial_id;
-
- /* Security algorithms */
+ /* Security algorithms */
ngap_security_capabilities_t security_capabilities;
} ngap_path_switch_req_t;
@@ -773,7 +723,7 @@ typedef struct ngap_path_switch_req_ack_s {
uint32_t gNB_ue_ngap_id;
/* AMF UE id */
- uint64_t amf_ue_ngap_id:40;
+ uint64_t amf_ue_ngap_id;
/* UE aggregate maximum bitrate */
ngap_ambr_t ue_ambr;
@@ -801,7 +751,7 @@ typedef struct ngap_pdusession_modification_ind_s {
uint32_t gNB_ue_ngap_id;
/* AMF UE id */
- uint64_t amf_ue_ngap_id:40;
+ uint64_t amf_ue_ngap_id;
/* Number of pdusession setup-ed in the list */
uint8_t nb_of_pdusessions_tobemodified;
@@ -830,10 +780,7 @@ typedef struct ngap_ue_release_command_s {
typedef struct pdusession_release_s {
/* Unique pdusession_id for the UE. */
uint8_t pdusession_id;
- /* Octet string data */
- uint8_t *transfer_buffer;
- /* Length of the octet string */
- uint32_t transfer_length;
+ ngap_pdu_t data;
} pdusession_release_t;
typedef struct ngap_ue_release_req_s {
@@ -842,16 +789,13 @@ typedef struct ngap_ue_release_req_s {
uint8_t nb_of_pdusessions;
/* list of pdusession resource by RRC layers */
pdusession_release_t pdusessions[NGAP_MAX_PDUSESSION];
- ngap_Cause_t cause;
+ ngap_Cause_t cause;
long cause_value;
} ngap_ue_release_req_t, ngap_ue_release_resp_t;
typedef struct ngap_pdusession_modify_req_s {
- /* UE id for initial connection to NGAP */
- uint16_t ue_initial_id;
-
/* AMF UE id */
- uint64_t amf_ue_ngap_id:40;
+ uint64_t amf_ue_ngap_id;
/* gNB ue ngap id as initialized by NGAP layer */
uint32_t gNB_ue_ngap_id;
@@ -879,13 +823,13 @@ typedef struct ngap_pdusession_modify_resp_s {
typedef struct ngap_pdusession_release_command_s {
/* AMF UE id */
- uint64_t amf_ue_ngap_id:40;
+ uint64_t amf_ue_ngap_id;
/* gNB ue ngap id as initialized by NGAP layer */
uint32_t gNB_ue_ngap_id;
/* The NAS PDU should be forwarded by the RRC layer to the NAS layer */
- ngap_nas_pdu_t nas_pdu;
+ ngap_pdu_t nas_pdu;
/* Number of pdusession to be released in the list */
uint8_t nb_pdusessions_torelease;
@@ -897,7 +841,7 @@ typedef struct ngap_pdusession_release_command_s {
typedef struct ngap_pdusession_release_resp_s {
/* AMF UE id */
- uint64_t amf_ue_ngap_id:40;
+ uint64_t amf_ue_ngap_id;
/* gNB ue ngap id as initialized by NGAP layer */
uint32_t gNB_ue_ngap_id;
diff --git a/openair2/COMMON/platform_types.h b/openair2/COMMON/platform_types.h
index c6308a4465..c3d5999b62 100644
--- a/openair2/COMMON/platform_types.h
+++ b/openair2/COMMON/platform_types.h
@@ -230,8 +230,7 @@ typedef struct protocol_ctxt_s {
#define ENB_INSTANCE_TO_MODULE_ID( iNSTANCE )iNSTANCE
//NR
-#define GNB_MODULE_ID_TO_INSTANCE( mODULE_iD ) mODULE_iD
-#define GNB_INSTANCE_TO_MODULE_ID( iNSTANCE )iNSTANCE
+#define GNB_MODULE_ID_TO_INSTANCE(mODULE_iD) mODULE_iD
#define MODULE_ID_TO_INSTANCE(mODULE_iD, iNSTANCE, eNB_fLAG) \
do { \
diff --git a/openair2/E1AP/e1ap_common.c b/openair2/E1AP/e1ap_common.c
index 2db1ecef65..caf97b680d 100644
--- a/openair2/E1AP/e1ap_common.c
+++ b/openair2/E1AP/e1ap_common.c
@@ -220,16 +220,15 @@ int e1ap_encode_send(E1_t type, e1ap_setup_req_t *setupReq, E1AP_E1AP_PDU_t *pdu
if (encoded < 0) {
LOG_E(E1AP, "%s: Failed to encode E1AP message\n", func);
return -1;
- } else {
- MessageDef *message = itti_alloc_new_message((type==CPtype)?TASK_CUCP_E1:TASK_CUUP_E1, 0, SCTP_DATA_REQ);
- sctp_data_req_t *s = &message->ittiMsg.sctp_data_req;
- s->assoc_id = setupReq->assoc_id;
- s->buffer = buffer;
- s->buffer_length = encoded;
- s->stream = stream;
- LOG_I(E1AP, "%s: Sending ITTI message to SCTP Task\n", func);
- itti_send_msg_to_task(TASK_SCTP, 0 /*unused by callee*/, message);
}
+ MessageDef *message = itti_alloc_new_message((type == CPtype) ? TASK_CUCP_E1 : TASK_CUUP_E1, 0, SCTP_DATA_REQ);
+ sctp_data_req_t *s = &message->ittiMsg.sctp_data_req;
+ s->assoc_id = setupReq->assoc_id;
+ s->buffer = buffer;
+ s->buffer_length = encoded;
+ s->stream = stream;
+ LOG_I(E1AP, "%s: Sending ITTI message to SCTP Task\n", func);
+ itti_send_msg_to_task(TASK_SCTP, 0 /*unused by callee*/, message);
return encoded;
}
diff --git a/openair2/E1AP/e1ap_setup.c b/openair2/E1AP/e1ap_setup.c
index 349e3dcab5..76f8029b64 100644
--- a/openair2/E1AP/e1ap_setup.c
+++ b/openair2/E1AP/e1ap_setup.c
@@ -111,7 +111,7 @@ MessageDef *RCconfig_NR_CU_E1(bool separate_CUUP_process)
e1Setup->localAddressF1U = strdup(*(GNBParamList.paramarray[0][GNB_LOCAL_S_ADDRESS_IDX].strptr));
e1Setup->localPortF1U = *(GNBParamList.paramarray[0][GNB_LOCAL_S_PORTD_IDX].uptr);
get_NGU_S1U_addr(&e1Setup->localAddressN3, &e1Setup->localPortN3);
- e1Setup->remotePortN3 = GTPV1_U_PORT_NUMBER;
+ e1Setup->remotePortN3 = e1Setup->localPortN3 ;
if (separate_CUUP_process) {
paramlist_def_t GNBE1ParamList = {GNB_CONFIG_STRING_E1_PARAMETERS, NULL, 0};
diff --git a/openair2/ENB_APP/RRC_config_tools.c b/openair2/ENB_APP/RRC_config_tools.c
index c0cd1b5a6f..210266ca3a 100644
--- a/openair2/ENB_APP/RRC_config_tools.c
+++ b/openair2/ENB_APP/RRC_config_tools.c
@@ -73,6 +73,12 @@ static const eutra_band_t eutra_bands[] = {
{42, 3400 * MHz, 3600 * MHz, 3400 * MHz, 3600 * MHz, TDD},
{43, 3600 * MHz, 3800 * MHz, 3600 * MHz, 3800 * MHz, TDD},
{44, 703 * MHz, 803 * MHz, 703 * MHz, 803 * MHz, TDD},
+ // ...
+ {65, 1920 * MHz, 2010 * MHz, 2110 * MHz, 2200 * MHz, FDD},
+ {66, 1710 * MHz, 1780 * MHz, 2110 * MHz, 2200 * MHz, FDD},
+ {71, 663 * MHz, 698 * MHz, 617 * MHz, 652 * MHz, FDD},
+ {72, 451 * MHz, 456 * MHz, 461 * MHz, 466 * MHz, FDD},
+ {73, 450 * MHz, 455 * MHz, 460 * MHz, 465 * MHz, FDD},
};
diff --git a/openair2/F1AP/f1ap_cu_task.c b/openair2/F1AP/f1ap_cu_task.c
index a04524f241..901932f54b 100644
--- a/openair2/F1AP/f1ap_cu_task.c
+++ b/openair2/F1AP/f1ap_cu_task.c
@@ -57,7 +57,7 @@ static void cu_task_handle_sctp_association_ind(instance_t instance, sctp_new_as
f1ap_cu_data->sctp_in_streams = sctp_new_association_ind->in_streams;
f1ap_cu_data->sctp_out_streams = sctp_new_association_ind->out_streams;
f1ap_cu_data->default_sctp_stream_id = 0;
- if (RC.nrrrc[GNB_INSTANCE_TO_MODULE_ID(instance)]->node_type != ngran_gNB_CUCP) {
+ if (RC.nrrrc[instance]->node_type != ngran_gNB_CUCP) {
getCxt(CUtype, instance)->gtpInst = cu_task_create_gtpu_instance(IPaddrs);
AssertFatal(getCxt(CUtype, instance)->gtpInst > 0, "Failed to create CU F1-U UDP listener");
} else
diff --git a/openair2/F1AP/f1ap_cu_ue_context_management.c b/openair2/F1AP/f1ap_cu_ue_context_management.c
index fea0d9d91c..0cb476b2d7 100644
--- a/openair2/F1AP/f1ap_cu_ue_context_management.c
+++ b/openair2/F1AP/f1ap_cu_ue_context_management.c
@@ -947,13 +947,13 @@ int CU_handle_UE_CONTEXT_RELEASE_COMPLETE(instance_t instance,
protocol_ctxt_t ctxt;
PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, instance, GNB_FLAG_YES, rnti, 0, 0, instance);
- struct rrc_gNB_ue_context_s *ue_context_p = rrc_gNB_get_ue_context(RC.nrrrc[instance], rnti);
+ rrc_gNB_ue_context_t *ue_context_p = rrc_gNB_get_ue_context_by_rnti(RC.nrrrc[instance], rnti);
if (ue_context_p) {
MessageDef *msg = itti_alloc_new_message(TASK_CU_F1, 0, NGAP_UE_CONTEXT_RELEASE_COMPLETE);
NGAP_UE_CONTEXT_RELEASE_COMPLETE(msg).gNB_ue_ngap_id = ue_context_p->ue_context.gNB_ue_ngap_id;
itti_send_msg_to_task(TASK_NGAP, instance, msg);
- rrc_gNB_remove_ue_context(&ctxt, RC.nrrrc[instance], ue_context_p);
+ rrc_gNB_remove_ue_context(RC.nrrrc[instance], ue_context_p);
} else {
LOG_E(F1AP, "could not find ue_context of UE RNTI %x\n", rnti);
}
@@ -1600,7 +1600,7 @@ int CU_handle_UE_CONTEXT_MODIFICATION_RESPONSE(instance_t instance,
F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID, true);
f1ap_ue_context_modification_resp->gNB_DU_ue_id = ie->value.choice.GNB_DU_UE_F1AP_ID;
- LOG_D(F1AP, "f1ap_ue_context_setup_resp->gNB_DU_ue_id is: %d \n", f1ap_ue_context_modification_resp->gNB_DU_ue_id);
+ LOG_D(F1AP, "f1ap_ue_context_modification_resp->gNB_DU_ue_id is: %d \n", f1ap_ue_context_modification_resp->gNB_DU_ue_id);
f1ap_ue_context_modification_resp->rnti =
f1ap_get_rnti_by_du_id(CUtype, instance, f1ap_ue_context_modification_resp->gNB_DU_ue_id);
diff --git a/openair2/F1AP/f1ap_itti_messaging.c b/openair2/F1AP/f1ap_itti_messaging.c
index e45edcc3a3..12386b69d6 100644
--- a/openair2/F1AP/f1ap_itti_messaging.c
+++ b/openair2/F1AP/f1ap_itti_messaging.c
@@ -31,7 +31,7 @@ void f1ap_itti_send_sctp_data_req(bool isCu, instance_t instance, uint8_t *buffe
sctp_data_req->assoc_id = f1ap_assoc_id(isCu,instance);
sctp_data_req->buffer = buffer;
sctp_data_req->buffer_length = buffer_length;
- sctp_data_req->stream = stream;
+ sctp_data_req->stream = stream;
LOG_D(F1AP, "Sending ITTI message to SCTP Task\n");
itti_send_msg_to_task(TASK_SCTP, instance, message_p);
}
diff --git a/openair2/GNB_APP/MACRLC_nr_paramdef.h b/openair2/GNB_APP/MACRLC_nr_paramdef.h
index 5845787275..5d69fbc6f2 100644
--- a/openair2/GNB_APP/MACRLC_nr_paramdef.h
+++ b/openair2/GNB_APP/MACRLC_nr_paramdef.h
@@ -71,6 +71,7 @@
#define CONFIG_STRING_MACRLC_UL_HARQ_ROUND_MAX "ul_harq_round_max"
#define CONFIG_STRING_MACRLC_MIN_GRANT_PRB "min_grant_prb"
#define CONFIG_STRING_MACRLC_MIN_GRANT_MCS "min_grant_mcs"
+#define CONFIG_STRING_MACRLC_IDENTITY_PM "identity_precoding_matrix"
#define HLP_MACRLC_UL_PRBBLACK "SNR threshold to decide whether a PRB will be blacklisted or not"
#define HLP_MACRLC_DL_BLER_UP "Upper threshold of BLER to decrease DL MCS"
@@ -83,6 +84,7 @@
#define HLP_MACRLC_UL_HARQ_MAX "Maximum number of UL HARQ rounds"
#define HLP_MACRLC_MIN_GRANT_PRB "Minimal Periodic ULSCH Grant PRBs"
#define HLP_MACRLC_MIN_GRANT_MCS "Minimal Periodic ULSCH Grant MCS"
+#define HLP_MACRLC_IDENTITY_PM "Flag to use only identity matrix in DL precoding"
/*-------------------------------------------------------------------------------------------------------------------------------------------------------*/
/* MacRLC configuration parameters */
@@ -123,6 +125,7 @@
{CONFIG_STRING_MACRLC_UL_HARQ_ROUND_MAX, HLP_MACRLC_UL_HARQ_MAX, 0, .u8ptr=NULL, .defintval=4, TYPE_UINT8, 0}, \
{CONFIG_STRING_MACRLC_MIN_GRANT_PRB, HLP_MACRLC_MIN_GRANT_PRB, 0, .u8ptr=NULL, .defintval=5, TYPE_UINT8, 0}, \
{CONFIG_STRING_MACRLC_MIN_GRANT_MCS, HLP_MACRLC_MIN_GRANT_MCS, 0, .u8ptr=NULL, .defintval=9, TYPE_UINT8, 0}, \
+ {CONFIG_STRING_MACRLC_IDENTITY_PM, HLP_MACRLC_IDENTITY_PM, PARAMFLAG_BOOL, .u8ptr=NULL, .defintval=0, TYPE_UINT8, 0}, \
}
// clang-format off
@@ -159,6 +162,7 @@
#define MACRLC_UL_HARQ_ROUND_MAX_IDX 30
#define MACRLC_MIN_GRANT_PRB_IDX 31
#define MACRLC_MIN_GRANT_MCS_IDX 32
+#define MACRLC_IDENTITY_PM_IDX 33
#define MACRLCPARAMS_CHECK { \
{ .s5 = { NULL } }, \
@@ -194,6 +198,7 @@
{ .s2 = { config_check_intrange, {1, 8} } }, /* UL max HARQ rounds */ \
{ .s5 = { NULL } }, \
{ .s5 = { NULL } }, \
+ { .s2 = { NULL } }, \
}
/*---------------------------------------------------------------------------------------------------------------------------------------------------------*/
diff --git a/openair2/GNB_APP/RRC_nr_paramsvalues.h b/openair2/GNB_APP/RRC_nr_paramsvalues.h
index c704fc8bee..e6e32233c8 100644
--- a/openair2/GNB_APP/RRC_nr_paramsvalues.h
+++ b/openair2/GNB_APP/RRC_nr_paramsvalues.h
@@ -84,7 +84,6 @@
#define GNB_CONFIG_STRING_MSG1SUBCARRIERSPACING "msg1_SubcarrierSpacing"
#define GNB_CONFIG_STRING_RESTRICTEDSETCONFIG "restrictedSetConfig"
#define GNB_CONFIG_STRING_MSG3TRANSFPREC "msg3_transformPrecoder"
-#define GNB_CONFIG_STRING_PUSCHTIMEDOMAINALLOCATIONLIST "puschTimeDomainAllocationList"
#define GNB_CONFIG_STRING_MSG3DELTAPREABMLE "msg3_DeltaPreamble"
#define GNB_CONFIG_STRING_P0NOMINALWITHGRANT "p0_NominalWithGrant"
#define GNB_CONFIG_STRING_PUCCHGROUPHOPPING "pucchGroupHopping"
diff --git a/openair2/GNB_APP/gnb_config.c b/openair2/GNB_APP/gnb_config.c
index 52a7bd9799..46044ca6df 100644
--- a/openair2/GNB_APP/gnb_config.c
+++ b/openair2/GNB_APP/gnb_config.c
@@ -173,7 +173,7 @@ void prepare_scc(NR_ServingCellConfigCommon_t *scc) {
scc->uplinkConfigCommon->initialUplinkBWP->pusch_ConfigCommon->present = NR_SetupRelease_PUSCH_ConfigCommon_PR_setup;
scc->uplinkConfigCommon->initialUplinkBWP->pusch_ConfigCommon->choice.setup = CALLOC(1,sizeof(struct NR_PUSCH_ConfigCommon));
- scc->uplinkConfigCommon->initialUplinkBWP->pusch_ConfigCommon->choice.setup->groupHoppingEnabledTransformPrecoding = CALLOC(1,sizeof(long));
+ scc->uplinkConfigCommon->initialUplinkBWP->pusch_ConfigCommon->choice.setup->groupHoppingEnabledTransformPrecoding = NULL;
scc->uplinkConfigCommon->initialUplinkBWP->pusch_ConfigCommon->choice.setup->pusch_TimeDomainAllocationList = CALLOC(1,sizeof(struct NR_PUSCH_TimeDomainResourceAllocationList));
scc->uplinkConfigCommon->initialUplinkBWP->pusch_ConfigCommon->choice.setup->msg3_DeltaPreamble = CALLOC(1,sizeof(long));
@@ -936,6 +936,7 @@ void RCconfig_nr_macrlc() {
ul_bler_options->harq_round_max = *(MacRLC_ParamList.paramarray[j][MACRLC_UL_HARQ_ROUND_MAX_IDX].u8ptr);
RC.nrmac[j]->min_grant_prb = *(MacRLC_ParamList.paramarray[j][MACRLC_MIN_GRANT_PRB_IDX].u8ptr);
RC.nrmac[j]->min_grant_mcs = *(MacRLC_ParamList.paramarray[j][MACRLC_MIN_GRANT_MCS_IDX].u8ptr);
+ RC.nrmac[j]->identity_pm = *(MacRLC_ParamList.paramarray[j][MACRLC_IDENTITY_PM_IDX].u8ptr);
RC.nrmac[j]->num_ulprbbl = num_prbbl;
memcpy(RC.nrmac[j]->ulprbbl, prbbl, 275 * sizeof(prbbl[0]));
} // for (j=0;jsiblock1->message.choice.c1->choice.systemInformationBlockType1;
- AssertFatal(sib1->cellAccessRelatedInfo.plmn_IdentityList.list.array[0]->plmn_IdentityList.list.count > 0,
+ AssertFatal(sib1->cellAccessRelatedInfo.plmn_IdentityInfoList.list.array[0]->plmn_IdentityList.list.count > 0,
"plmn info isn't there\n");
AssertFatal(mnc_digit_length == 2 || mnc_digit_length == 3,
"impossible mnc_digit_length %d\n", mnc_digit_length);
- NR_PLMN_Identity_t *plmn_Identity = sib1->cellAccessRelatedInfo.plmn_IdentityList.list.array[0]
+ NR_PLMN_Identity_t *plmn_Identity = sib1->cellAccessRelatedInfo.plmn_IdentityInfoList.list.array[0]
->plmn_IdentityList.list.array[0];
// check if mcc is different and return failure if so
diff --git a/openair2/LAYER2/MAC/config.c b/openair2/LAYER2/MAC/config.c
index 732ebd4d4a..f584c6a0b4 100644
--- a/openair2/LAYER2/MAC/config.c
+++ b/openair2/LAYER2/MAC/config.c
@@ -119,10 +119,14 @@ static const eutra_bandentry_t eutra_bandtable[] = {
{44, 7030, 8030, 7030, 8030, 455900},
{45, 14470, 14670, 14470, 14670, 465900},
{46, 51500, 59250, 51500, 59250, 467900},
+ {64, 0, 0, 0, 0, 60140},//reserved
{65, 19200, 20100, 21100, 22000, 655360},
{66, 17100, 18000, 21100, 22000, 664360},
{67, 0, 0, 7380, 7580, 67336 },
- {68, 6980, 7280, 7530, 7830, 67536 }
+ {68, 6980, 7280, 7530, 7830, 67536 },
+ {71, 6630, 6980, 6170, 6520, 68586 },
+ {72, 4510, 4560, 4610, 4660, 68936 },
+ {73, 4500, 4550, 4600, 4650, 68986 }
};
@@ -132,11 +136,12 @@ uint32_t to_earfcn(int eutra_bandP, uint32_t dl_CarrierFreq, uint32_t bw) {
uint32_t dl_CarrierFreq_by_100k = dl_CarrierFreq / 100000;
int bw_by_100 = bw / 100;
int i;
- AssertFatal(eutra_bandP < 69, "eutra_band %d > 68\n", eutra_bandP);
+ AssertFatal(eutra_bandP < 74, "eutra_band %d > 74\n", eutra_bandP);
for (i = 0; i < BANDTABLE_SIZE && eutra_bandtable[i].band != eutra_bandP; i++);
AssertFatal(i < BANDTABLE_SIZE, "i %d >= BANDTABLE_SIZE %ld\n", i, BANDTABLE_SIZE);
+ AssertFatal(eutra_bandP != 64, "LTE b64 is a reserved band");
AssertFatal(dl_CarrierFreq_by_100k >= eutra_bandtable[i].dl_min,
"Band %d, bw %u : DL carrier frequency %u Hz < %u\n",
eutra_bandP, bw, dl_CarrierFreq,
@@ -148,17 +153,19 @@ uint32_t to_earfcn(int eutra_bandP, uint32_t dl_CarrierFreq, uint32_t bw) {
eutra_bandtable[i].dl_max - bw_by_100);
return (dl_CarrierFreq_by_100k - eutra_bandtable[i].dl_min +
(eutra_bandtable[i].N_OFFs_DL / 10));
-}
+ }
+
uint32_t to_earfcn_DL(int eutra_bandP, long long int dl_CarrierFreq, uint32_t bw) {
uint32_t dl_CarrierFreq_by_100k = dl_CarrierFreq / 100000;
int bw_by_100 = bw / 100;
int i;
- AssertFatal(eutra_bandP < 69, "eutra_band %d > 68\n", eutra_bandP);
+ AssertFatal(eutra_bandP < 74, "eutra_band %d > 74\n", eutra_bandP);
for (i = 0; i < BANDTABLE_SIZE && eutra_bandtable[i].band != eutra_bandP; i++);
AssertFatal(i < BANDTABLE_SIZE, "i = %d , it will trigger out-of-bounds read.\n",i);
+ AssertFatal(eutra_bandP != 64, "LTE b64 is a reserved band");
AssertFatal(dl_CarrierFreq_by_100k >= eutra_bandtable[i].dl_min,
"Band %d, bw %u : DL carrier frequency %lld Hz < %u\n",
eutra_bandP, bw, dl_CarrierFreq,
@@ -170,17 +177,19 @@ uint32_t to_earfcn_DL(int eutra_bandP, long long int dl_CarrierFreq, uint32_t bw
eutra_bandtable[i].dl_max - bw_by_100);
return (dl_CarrierFreq_by_100k - eutra_bandtable[i].dl_min +
(eutra_bandtable[i].N_OFFs_DL / 10));
-}
+ }
+
uint32_t to_earfcn_UL(int eutra_bandP, long long int ul_CarrierFreq, uint32_t bw) {
uint32_t ul_CarrierFreq_by_100k = ul_CarrierFreq / 100000;
int bw_by_100 = bw / 100;
int i;
- AssertFatal(eutra_bandP < 69, "eutra_band %d > 68\n", eutra_bandP);
+ AssertFatal(eutra_bandP < 74, "eutra_band %d > 74\n", eutra_bandP);
for (i = 0; i < BANDTABLE_SIZE && eutra_bandtable[i].band != eutra_bandP; i++);
AssertFatal(i < BANDTABLE_SIZE, "i = %d , it will trigger out-of-bounds read.\n",i);
+ AssertFatal(eutra_bandP != 64, "LTE b64 is a reserved band");
AssertFatal(ul_CarrierFreq_by_100k >= eutra_bandtable[i].ul_min,
"Band %d, bw %u : UL carrier frequency %lld Hz < %u\n",
eutra_bandP, bw, ul_CarrierFreq,
@@ -196,11 +205,12 @@ uint32_t to_earfcn_UL(int eutra_bandP, long long int ul_CarrierFreq, uint32_t bw
uint32_t from_earfcn(int eutra_bandP, uint32_t dl_earfcn) {
int i;
- AssertFatal(eutra_bandP < 69, "eutra_band %d > 68\n", eutra_bandP);
+ AssertFatal(eutra_bandP < 74, "eutra_band %d > 74\n", eutra_bandP);
for (i = 0; i < BANDTABLE_SIZE && eutra_bandtable[i].band != eutra_bandP; i++);
AssertFatal(i < BANDTABLE_SIZE, "i %d >= BANDTABLE_SIZE %ld\n", i, BANDTABLE_SIZE);
+ AssertFatal(eutra_bandP != 64, "LTE b64 is a reserved band");
return (eutra_bandtable[i].dl_min +
(dl_earfcn - (eutra_bandtable[i].N_OFFs_DL / 10))) * 100000;
}
diff --git a/openair2/LAYER2/NR_MAC_COMMON/nr_mac.h b/openair2/LAYER2/NR_MAC_COMMON/nr_mac.h
index 8c8d8373d2..9465d69e8b 100644
--- a/openair2/LAYER2/NR_MAC_COMMON/nr_mac.h
+++ b/openair2/LAYER2/NR_MAC_COMMON/nr_mac.h
@@ -602,7 +602,7 @@ typedef struct NR_UE_UL_BWP {
NR_CSI_MeasConfig_t *csi_MeasConfig;
NR_SRS_Config_t *srs_Config;
long *msg3_DeltaPreamble;
- uint8_t transform_precoding;
+ long transform_precoding;
uint8_t mcs_table;
nr_dci_format_t dci_format;
int max_fb_time;
diff --git a/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c b/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
index a137f10dd8..04b7bf8975 100644
--- a/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
+++ b/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
@@ -2832,15 +2832,18 @@ uint16_t get_nr_srs_offset(NR_SRS_PeriodicityAndOffset_t periodicityAndOffset) {
// Set the transform precoding status according to 6.1.3 of 3GPP TS 38.214 version 16.3.0 Release 16:
// - "UE procedure for applying transform precoding on PUSCH"
-uint8_t get_transformPrecoding(const NR_UE_UL_BWP_t *current_UL_BWP, nr_dci_format_t dci_format, uint8_t configuredGrant)
+long get_transformPrecoding(const NR_UE_UL_BWP_t *current_UL_BWP, nr_dci_format_t dci_format, uint8_t configuredGrant)
{
if (configuredGrant && current_UL_BWP->configuredGrantConfig && current_UL_BWP->configuredGrantConfig->transformPrecoder)
return *current_UL_BWP->configuredGrantConfig->transformPrecoder;
if (dci_format == NR_UL_DCI_FORMAT_0_1 && current_UL_BWP && current_UL_BWP->pusch_Config && current_UL_BWP->pusch_Config->transformPrecoder)
return *current_UL_BWP->pusch_Config->transformPrecoder;
- else
- return current_UL_BWP->rach_ConfigCommon->msg3_transformPrecoder ? 0 : 1;
+
+ if (current_UL_BWP->rach_ConfigCommon && current_UL_BWP->rach_ConfigCommon->msg3_transformPrecoder)
+ return NR_PUSCH_Config__transformPrecoder_enabled;
+
+ return NR_PUSCH_Config__transformPrecoder_disabled;
}
uint8_t get_pusch_nb_antenna_ports(NR_PUSCH_Config_t *pusch_Config,
@@ -3415,7 +3418,7 @@ uint16_t nr_dci_size(const NR_UE_DL_BWP_t *DL_BWP,
if(pusch_Config &&
pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB != NULL){
NR_DMRS_UplinkConfig = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup;
- xb = ul_ant_bits(NR_DMRS_UplinkConfig,transformPrecoder);
+ xb = ul_ant_bits(NR_DMRS_UplinkConfig, transformPrecoder);
}
if (xa>xb)
dci_pdu->antenna_ports.nbits = xa;
diff --git a/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h b/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h
index a6cc264c02..58fe0899db 100644
--- a/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h
+++ b/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h
@@ -160,7 +160,7 @@ uint8_t compute_nr_root_seq(NR_RACH_ConfigCommon_t *rach_config,
uint8_t unpaired,
frequency_range_t);
-int ul_ant_bits(NR_DMRS_UplinkConfig_t *NR_DMRS_UplinkConfig,long transformPrecoder);
+int ul_ant_bits(NR_DMRS_UplinkConfig_t *NR_DMRS_UplinkConfig, long transformPrecoder);
uint8_t get_pdsch_mcs_table(long *mcs_Table, int dci_format, int rnti_type, int ss_type);
@@ -268,13 +268,11 @@ bool set_ul_ptrs_values(NR_PTRS_UplinkConfig_t *ul_ptrs_config,
uint8_t NrOfSymbols);
/* \brief Set the transform precoding according to 6.1.3 of 3GPP TS 38.214 version 16.3.0 Release 16
-@param *pusch_config, pointer to pusch config
-@param *ubwp pointer to uplink bwp
-@param *dci_format pointer to dci format
-@param rnti_type rnti type
+@param *current_UL_BWP pointer to uplink bwp
+@param dci_format dci format
@param configuredGrant indicates whether a configured grant was received or not
@returns transformPrecoding value */
-uint8_t get_transformPrecoding(const NR_UE_UL_BWP_t *current_UL_BWP, nr_dci_format_t dci_format, uint8_t configuredGrant);
+long get_transformPrecoding(const NR_UE_UL_BWP_t *current_UL_BWP, nr_dci_format_t dci_format, uint8_t configuredGrant);
void nr_mac_gNB_rrc_ul_failure(const module_id_t Mod_instP,
const int CC_idP,
diff --git a/openair2/LAYER2/NR_MAC_UE/config_ue.c b/openair2/LAYER2/NR_MAC_UE/config_ue.c
index 89346dfeda..8ab321b9e1 100644
--- a/openair2/LAYER2/NR_MAC_UE/config_ue.c
+++ b/openair2/LAYER2/NR_MAC_UE/config_ue.c
@@ -684,6 +684,7 @@ void configure_current_BWP(NR_UE_MAC_INST_t *mac,
NRRIV2PRBOFFSET(mac->scc_SIB->downlinkConfigCommon.initialDownlinkBWP.genericParameters.locationAndBandwidth, MAX_BWP_SIZE);
UL_BWP->initial_BWPStart = mac->scc ? NRRIV2PRBOFFSET(mac->scc->uplinkConfigCommon->initialUplinkBWP->genericParameters.locationAndBandwidth, MAX_BWP_SIZE) :
NRRIV2PRBOFFSET(mac->scc_SIB->uplinkConfigCommon->initialUplinkBWP.genericParameters.locationAndBandwidth, MAX_BWP_SIZE);
+
}
@@ -732,6 +733,7 @@ int nr_rrc_mac_config_req_ue(module_id_t module_id,
build_ssb_to_ro_map(mac);//->scc, mac->phy_config.config_req.cell_config.frame_duplex_type);
if (!get_softmodem_params()->emulate_l1)
mac->if_module->phy_config_request(&mac->phy_config);
+ mac->phy_config_request_sent = true;
}
if(scell_group_config != NULL ){
mac->cg = scell_group_config;
diff --git a/openair2/LAYER2/NR_MAC_UE/mac_defs.h b/openair2/LAYER2/NR_MAC_UE/mac_defs.h
index 8c76eb3826..e3f4247bd6 100644
--- a/openair2/LAYER2/NR_MAC_UE/mac_defs.h
+++ b/openair2/LAYER2/NR_MAC_UE/mac_defs.h
@@ -159,10 +159,11 @@
/*!\brief UE layer 2 status */
typedef enum {
- UE_CONNECTION_OK = 0,
- UE_CONNECTION_LOST,
- UE_PHY_RESYNCH,
- UE_PHY_HO_PRACH
+ UE_NOT_SYNC = 0,
+ UE_SYNC,
+ UE_PERFORMING_RA,
+ UE_WAIT_TX_ACK_MSG4,
+ UE_CONNECTED
} NR_UE_L2_STATE_t;
typedef enum {
@@ -380,7 +381,7 @@ typedef struct {
/*!\brief Top level UE MAC structure */
typedef struct {
-
+ NR_UE_L2_STATE_t state;
NR_ServingCellConfigCommon_t *scc;
NR_ServingCellConfigCommonSIB_t *scc_SIB;
NR_CellGroupConfig_t *cg;
@@ -406,6 +407,7 @@ typedef struct {
NR_ControlResourceSet_t *coreset[MAX_NUM_BWP_UE][FAPI_NR_MAX_CORESET_PER_BWP];
NR_SearchSpace_t *SSpace[MAX_NUM_BWP_UE][FAPI_NR_MAX_SS];
+ bool phy_config_request_sent;
frame_type_t frame_type;
/// Type0-PDCCH seach space
diff --git a/openair2/LAYER2/NR_MAC_UE/mac_proto.h b/openair2/LAYER2/NR_MAC_UE/mac_proto.h
index eb773672d4..6015fe27bc 100644
--- a/openair2/LAYER2/NR_MAC_UE/mac_proto.h
+++ b/openair2/LAYER2/NR_MAC_UE/mac_proto.h
@@ -120,7 +120,8 @@ NR_UE_MAC_INST_t *get_mac_inst(
performs BSR/SR/PHR procedures, random access procedure handler and DLSCH/ULSCH procedures.
\param dl_info DL indication
\param ul_info UL indication*/
-NR_UE_L2_STATE_t nr_ue_scheduler(nr_downlink_indication_t *dl_info, nr_uplink_indication_t *ul_info);
+void nr_ue_ul_scheduler(nr_uplink_indication_t *ul_info);
+void nr_ue_dl_scheduler(nr_downlink_indication_t *dl_info);
/**\brief fill nr_scheduled_response struct instance
@param nr_scheduled_response_t * pointer to scheduled_response instance to fill
@@ -435,7 +436,7 @@ void configure_ss_coreset(NR_UE_MAC_INST_t *mac,
NR_BWP_Id_t dl_bwp_id);
static uint8_t nr_extract_dci_info(NR_UE_MAC_INST_t *mac,
- uint8_t dci_format,
+ nr_dci_format_t dci_format,
uint8_t dci_size,
uint16_t rnti,
int ss_type,
@@ -466,6 +467,12 @@ int get_rnti_type(NR_UE_MAC_INST_t *mac, uint16_t rnti);
// - 6.1.4.2 of TS 38.214
// - 6.4.1.1.1 of TS 38.211
// - 6.3.1.7 of 38.211
-int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac, NR_tda_info_t *tda_info, nfapi_nr_ue_pusch_pdu_t *pusch_config_pdu, dci_pdu_rel15_t *dci, RAR_grant_t *rar_grant, uint16_t rnti, uint8_t *dci_format);
+int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac,
+ NR_tda_info_t *tda_info,
+ nfapi_nr_ue_pusch_pdu_t *pusch_config_pdu,
+ dci_pdu_rel15_t *dci,
+ RAR_grant_t *rar_grant,
+ uint16_t rnti,
+ const nr_dci_format_t *dci_format);
#endif
/** @}*/
diff --git a/openair2/LAYER2/NR_MAC_UE/main_ue_nr.c b/openair2/LAYER2/NR_MAC_UE/main_ue_nr.c
index 662548231b..7fb2295f2d 100644
--- a/openair2/LAYER2/NR_MAC_UE/main_ue_nr.c
+++ b/openair2/LAYER2/NR_MAC_UE/main_ue_nr.c
@@ -53,6 +53,8 @@ NR_UE_MAC_INST_t * nr_l2_init_ue(NR_UE_RRC_INST_t* rrc_inst) {
nr_ue_mac_inst = (NR_UE_MAC_INST_t *)calloc(sizeof(NR_UE_MAC_INST_t),NB_NR_UE_MAC_INST);
nr_ue_mac_inst->first_sync_frame = -1;
nr_ue_mac_inst->sib1_decoded = false;
+ nr_ue_mac_inst->phy_config_request_sent = false;
+ nr_ue_mac_inst->state = UE_NOT_SYNC;
for (int j=0;jstate = UE_PERFORMING_RA;
RA_config_t *ra = &mac->ra;
ra->RA_active = 1;
ra->ra_PreambleIndex = -1;
@@ -164,25 +164,25 @@ void init_RA(module_id_t mod_id,
NR_SearchSpaceId_t ss_id = -1;
NR_SearchSpace_t *ss = NULL;
- if(mac->scc_SIB) {
- commonSearchSpaceList = mac->scc_SIB->downlinkConfigCommon.initialDownlinkBWP.pdcch_ConfigCommon->choice.setup->commonSearchSpaceList;
- ss_id = *mac->scc_SIB->downlinkConfigCommon.initialDownlinkBWP.pdcch_ConfigCommon->choice.setup->ra_SearchSpace;
- }
- else{
- if (mac->scc) {
- NR_SearchSpaceId_t *ra_ss = mac->scc->downlinkConfigCommon->initialDownlinkBWP->pdcch_ConfigCommon->choice.setup->ra_SearchSpace;
- if (ra_ss) {
- commonSearchSpaceList = mac->scc->downlinkConfigCommon->initialDownlinkBWP->pdcch_ConfigCommon->choice.setup->commonSearchSpaceList;
- ss_id = *mac->scc->downlinkConfigCommon->initialDownlinkBWP->pdcch_ConfigCommon->choice.setup->ra_SearchSpace;
- }
+ if (mac->scc) {
+ NR_SearchSpaceId_t *ra_ss = mac->scc->downlinkConfigCommon->initialDownlinkBWP->pdcch_ConfigCommon->choice.setup->ra_SearchSpace;
+ if (ra_ss) {
+ commonSearchSpaceList = mac->scc->downlinkConfigCommon->initialDownlinkBWP->pdcch_ConfigCommon->choice.setup->commonSearchSpaceList;
+ ss_id = *ra_ss;
}
- if (ss_id < 0) {
- if (mac->current_DL_BWP.bwp_id>0) {
- ra_ss = mac->DLbwp[mac->current_DL_BWP.bwp_id-1]->bwp_Common->pdcch_ConfigCommon->choice.setup->ra_SearchSpace;
- if (ra_ss) {
- commonSearchSpaceList = mac->DLbwp[mac->current_DL_BWP.bwp_id-1]->bwp_Common->pdcch_ConfigCommon->choice.setup->commonSearchSpaceList;
- ss_id = *mac->DLbwp[mac->current_DL_BWP.bwp_id-1]->bwp_Common->pdcch_ConfigCommon->choice.setup->ra_SearchSpace;
- }
+ } else if (mac->scc_SIB) {
+ NR_SearchSpaceId_t *ra_ss = mac->scc_SIB->downlinkConfigCommon.initialDownlinkBWP.pdcch_ConfigCommon->choice.setup->ra_SearchSpace;
+ if (ra_ss) {
+ commonSearchSpaceList = mac->scc_SIB->downlinkConfigCommon.initialDownlinkBWP.pdcch_ConfigCommon->choice.setup->commonSearchSpaceList;
+ ss_id = *ra_ss;
+ }
+ }
+ if (ss_id < 0) {
+ if (mac->current_DL_BWP.bwp_id>0) {
+ ra_ss = mac->DLbwp[mac->current_DL_BWP.bwp_id-1]->bwp_Common->pdcch_ConfigCommon->choice.setup->ra_SearchSpace;
+ if (ra_ss) {
+ commonSearchSpaceList = mac->DLbwp[mac->current_DL_BWP.bwp_id-1]->bwp_Common->pdcch_ConfigCommon->choice.setup->commonSearchSpaceList;
+ ss_id = *ra_ss;
}
}
}
@@ -312,11 +312,11 @@ int8_t nr_get_DELTA_PREAMBLE(module_id_t mod_id, int CC_id, uint16_t prach_forma
mu = 4;
break;
- case NR_SubcarrierSpacing_spare3:
+ case NR_SubcarrierSpacing_kHz480_v1700:
mu = 5;
break;
- case NR_SubcarrierSpacing_spare2:
+ case NR_SubcarrierSpacing_kHz960_v1700:
mu = 6;
break;
@@ -734,8 +734,8 @@ uint8_t nr_ue_get_rach(module_id_t mod_id,
int CC_id,
frame_t frame,
uint8_t gNB_id,
- int nr_slot_tx){
-
+ int nr_slot_tx)
+{
NR_UE_MAC_INST_t *mac = get_mac_inst(mod_id);
RA_config_t *ra = &mac->ra;
NR_RACH_ConfigDedicated_t *rach_ConfigDedicated = ra->rach_ConfigDedicated;
@@ -1007,27 +1007,21 @@ void nr_ra_succeeded(module_id_t mod_id, frame_t frame, int slot){
RA_config_t *ra = &mac->ra;
if (ra->cfra) {
-
LOG_I(MAC, "[UE %d][%d.%d][RAPROC] RA procedure succeeded. CF-RA: RAR successfully received.\n", mod_id, frame, slot);
-
+ mac->state = UE_CONNECTED;
ra->RA_window_cnt = -1;
-
} else {
-
LOG_A(MAC, "[UE %d][%d.%d][RAPROC] RA procedure succeeded. CB-RA: Contention Resolution is successful.\n", mod_id, frame, slot);
-
ra->RA_contention_resolution_timer_active = 0;
mac->crnti = ra->t_crnti;
ra->t_crnti = 0;
-
LOG_D(MAC, "In %s: [UE %d][%d.%d] CB-RA: cleared contention resolution timer...\n", __FUNCTION__, mod_id, frame, slot);
-
+ mac->state = UE_WAIT_TX_ACK_MSG4;
}
LOG_D(MAC, "In %s: [UE %d] clearing RA_active flag...\n", __FUNCTION__, mod_id);
ra->RA_active = 0;
ra->ra_state = RA_SUCCEEDED;
-
}
// Handling failure of RA procedure @ MAC layer
diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_dci_configuration.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_dci_configuration.c
index 9d691514ed..e5b246f5c1 100644
--- a/openair2/LAYER2/NR_MAC_UE/nr_ue_dci_configuration.c
+++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_dci_configuration.c
@@ -268,7 +268,7 @@ void ue_dci_configuration(NR_UE_MAC_INST_t *mac, fapi_nr_dl_config_request_t *dl
uint8_t bwp_id = mac->current_DL_BWP.bwp_id;
//NR_ServingCellConfig_t *scd = mac->scg->spCellConfig->spCellConfigDedicated;
- NR_BWP_DownlinkDedicated_t *bwpd = (bwp_id>0) ? mac->DLbwp[bwp_id-1]->bwp_Dedicated : mac->cg->spCellConfig->spCellConfigDedicated->initialDownlinkBWP;
+ NR_BWP_DownlinkDedicated_t *bwpd = (bwp_id>0) ? mac->DLbwp[bwp_id-1]->bwp_Dedicated : (mac->cg ? mac->cg->spCellConfig->spCellConfigDedicated->initialDownlinkBWP : NULL);
NR_BWP_DownlinkCommon_t *bwp_Common = (bwp_id>0) ? mac->DLbwp[bwp_id-1]->bwp_Common : &mac->scc_SIB->downlinkConfigCommon.initialDownlinkBWP;
LOG_D(NR_MAC, "[DCI_CONFIG] ra_rnti %p (%x) crnti %p (%x) t_crnti %p (%x)\n", &ra->ra_rnti, ra->ra_rnti, &mac->crnti, mac->crnti, &ra->t_crnti, ra->t_crnti);
@@ -376,7 +376,7 @@ void ue_dci_configuration(NR_UE_MAC_INST_t *mac, fapi_nr_dl_config_request_t *dl
// this is an USS
if (ss->searchSpaceType->choice.ue_Specific &&
ss->searchSpaceType->choice.ue_Specific->dci_Formats == NR_SearchSpace__searchSpaceType__ue_Specific__dci_Formats_formats0_1_And_1_1 &&
- (ra->ra_state == RA_SUCCEEDED || get_softmodem_params()->phy_test) &&
+ mac->state == UE_CONNECTED &&
mac->crnti > 0) {
// Monitors DCI 01 and 11 scrambled with C-RNTI, or CS-RNTI(s), or SP-CSI-RNTI
LOG_D(NR_MAC, "[DCI_CONFIG] Configure monitoring of PDCCH candidates in the user specific search space\n");
@@ -417,6 +417,6 @@ void ue_dci_configuration(NR_UE_MAC_INST_t *mac, fapi_nr_dl_config_request_t *dl
} // for ss_id
}
else {
- AssertFatal(1==0,"Handle DCI searching when CellGroup without dedicated BWP\n");
+ LOG_E(MAC,"Cannot handle DCI without dedicated BWP\n");
}
}
diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
index f9bc506102..4190331a3e 100644
--- a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
+++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
@@ -319,6 +319,11 @@ int8_t nr_ue_decode_mib(module_id_t module_id,
mac->dl_config_request.sfn = frame;
mac->dl_config_request.slot = ssb_start_symbol/14;
+ if(get_softmodem_params()->phy_test)
+ mac->state = UE_CONNECTED;
+ else if(mac->state == UE_NOT_SYNC)
+ mac->state = UE_SYNC;
+
return 0;
}
@@ -431,8 +436,8 @@ int nr_ue_process_dci_indication_pdu(module_id_t module_id,int cc_id, int gNB_in
int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, frame_t frame, int slot, dci_pdu_rel15_t *dci, fapi_nr_dci_indication_pdu_t *dci_ind) {
uint16_t rnti = dci_ind->rnti;
- uint8_t dci_format = dci_ind->dci_format;
int coreset_type = dci_ind->coreset_type == NFAPI_NR_CSET_CONFIG_PDCCH_CONFIG; // 0 for coreset0, 1 otherwise
+ nr_dci_format_t dci_format = dci_ind->dci_format;
int ret = 0;
int pucch_res_set_cnt = 0, valid = 0;
frame_t frame_tx = 0;
@@ -1295,9 +1300,11 @@ void nr_ue_configure_pucch(NR_UE_MAC_INST_t *mac,
NR_PUSCH_Config_t *pusch_Config = current_UL_BWP ? current_UL_BWP->pusch_Config : NULL;
if (pusch_Config) {
pusch_id = pusch_Config->dataScramblingIdentityPUSCH;
- if (pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA != NULL)
+ if (pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA != NULL &&
+ pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA->choice.setup->transformPrecodingDisabled != NULL)
id0 = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA->choice.setup->transformPrecodingDisabled->scramblingID0;
- else if (pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB != NULL)
+ else if (pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB != NULL &&
+ pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup->transformPrecodingDisabled != NULL)
id0 = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup->transformPrecodingDisabled->scramblingID0;
}
@@ -2386,7 +2393,7 @@ void nr_ue_send_sdu(nr_downlink_indication_t *dl_info, NR_UL_TIME_ALIGNMENT_t *u
}
static uint8_t nr_extract_dci_info(NR_UE_MAC_INST_t *mac,
- uint8_t dci_format,
+ nr_dci_format_t dci_format,
uint8_t dci_size,
uint16_t rnti,
int ss_type,
@@ -2850,8 +2857,8 @@ static uint8_t nr_extract_dci_info(NR_UE_MAC_INST_t *mac,
break;
case NR_DL_DCI_FORMAT_1_1:
- switch(rnti_type)
- {
+ switch(rnti_type)
+ {
case NR_RNTI_C:
//Identifier for DCI formats
pos++;
@@ -3051,9 +3058,12 @@ static uint8_t nr_extract_dci_info(NR_UE_MAC_INST_t *mac,
break;
}
break;
- }
-
- return 0;
+
+ default: // other DCI formats
+ break;
+ }
+
+ return 0;
}
///////////////////////////////////
diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
index 5c68295739..deeb4a181a 100644
--- a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
+++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
@@ -145,8 +145,7 @@ void ul_layers_config(NR_UE_MAC_INST_t *mac, nfapi_nr_ue_pusch_pdu_t *pusch_conf
NR_SRS_Config_t *srs_config = current_UL_BWP->srs_Config;
NR_PUSCH_Config_t *pusch_Config = current_UL_BWP->pusch_Config;
- long transformPrecoder = get_transformPrecoding(current_UL_BWP, dci_format, 0);
- pusch_config_pdu->transform_precoding = transformPrecoder;
+ long transformPrecoder = pusch_config_pdu->transform_precoding;
/* PRECOD_NBR_LAYERS */
// 0 bits if the higher layer parameter txConfig = nonCodeBook
@@ -240,34 +239,6 @@ void ul_layers_config(NR_UE_MAC_INST_t *mac, nfapi_nr_ue_pusch_pdu_t *pusch_conf
}
}
}
-
- /*-------------------- Changed to enable Transform precoding in RF SIM------------------------------------------------*/
-
- /*if (pusch_config_pdu->transformPrecoder == transformPrecoder_enabled) {
-
- pusch_config_dedicated->transform_precoder = transformPrecoder_enabled;
-
- if(pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA != NULL) {
-
- NR_DMRS_UplinkConfig_t *NR_DMRS_ulconfig = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA->choice.setup;
-
- if (NR_DMRS_ulconfig->dmrs_Type == NULL)
- pusch_config_dedicated->dmrs_ul_for_pusch_mapping_type_a.dmrs_type = 1;
- if (NR_DMRS_ulconfig->maxLength == NULL)
- pusch_config_dedicated->dmrs_ul_for_pusch_mapping_type_a.max_length = 1;
-
- } else if(pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB != NULL) {
-
- NR_DMRS_UplinkConfig_t *NR_DMRS_ulconfig = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup;
-
- if (NR_DMRS_ulconfig->dmrs_Type == NULL)
- pusch_config_dedicated->dmrs_ul_for_pusch_mapping_type_b.dmrs_type = 1;
- if (NR_DMRS_ulconfig->maxLength == NULL)
- pusch_config_dedicated->dmrs_ul_for_pusch_mapping_type_b.max_length = 1;
-
- }
- } else
- pusch_config_dedicated->transformPrecoder = ttransformPrecoder_disabled;*/
}
// todo: this function shall be reviewed completely because of the many comments left by the author
@@ -278,11 +249,11 @@ void ul_ports_config(NR_UE_MAC_INST_t *mac, int *n_front_load_symb, nfapi_nr_ue_
NR_PUSCH_Config_t *pusch_Config = mac->current_UL_BWP.pusch_Config;
AssertFatal(pusch_Config!=NULL,"pusch_Config shouldn't be null\n");
- long transformPrecoder = get_transformPrecoding(&mac->current_UL_BWP, dci_format, 0);
+ long transformPrecoder = pusch_config_pdu->transform_precoding;
+ LOG_D(NR_MAC,"transformPrecoder %s\n", transformPrecoder==NR_PUSCH_Config__transformPrecoder_disabled ? "disabled" : "enabled");
+
long *max_length = NULL;
long *dmrs_type = NULL;
- LOG_D(NR_MAC,"transformPrecoder %s\n",transformPrecoder==NR_PUSCH_Config__transformPrecoder_disabled?"disabled":"enabled");
-
if (pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA) {
max_length = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA->choice.setup->maxLength;
dmrs_type = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA->choice.setup->dmrs_Type;
@@ -451,7 +422,13 @@ void ul_ports_config(NR_UE_MAC_INST_t *mac, int *n_front_load_symb, nfapi_nr_ue_
// - 6.1.4.2 of TS 38.214
// - 6.4.1.1.1 of TS 38.211
// - 6.3.1.7 of 38.211
-int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac, NR_tda_info_t *tda_info, nfapi_nr_ue_pusch_pdu_t *pusch_config_pdu, dci_pdu_rel15_t *dci, RAR_grant_t *rar_grant, uint16_t rnti, uint8_t *dci_format)
+int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac,
+ NR_tda_info_t *tda_info,
+ nfapi_nr_ue_pusch_pdu_t *pusch_config_pdu,
+ dci_pdu_rel15_t *dci,
+ RAR_grant_t *rar_grant,
+ uint16_t rnti,
+ const nr_dci_format_t *dci_format)
{
int f_alloc;
@@ -570,9 +547,7 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac, NR_tda_info_t *tda_info, nfapi_nr
}
/* Transform precoding */
- if (rnti_type != NR_RNTI_CS || (rnti_type == NR_RNTI_CS && dci->ndi == 1)) {
- pusch_config_pdu->transform_precoding = get_transformPrecoding(current_UL_BWP, *dci_format, 0);
- }
+ pusch_config_pdu->transform_precoding = get_transformPrecoding(current_UL_BWP, *dci_format, 0);
/*DCI format-related configuration*/
if (*dci_format == NR_UL_DCI_FORMAT_0_0) {
@@ -606,7 +581,6 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac, NR_tda_info_t *tda_info, nfapi_nr
pusch_config_pdu->scid = dci->dmrs_sequence_initialization.val;
/* TRANSFORM PRECODING ------------------------------------------------------------------------------------------*/
-
if (pusch_config_pdu->transform_precoding == NR_PUSCH_Config__transformPrecoder_enabled) {
pusch_config_pdu->num_dmrs_cdm_grps_no_data = 2;
@@ -616,15 +590,15 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac, NR_tda_info_t *tda_info, nfapi_nr
NR_DMRS_ulconfig->transformPrecodingEnabled->nPUSCH_Identity != NULL)
n_RS_Id = *NR_DMRS_ulconfig->transformPrecodingEnabled->nPUSCH_Identity;
else
- n_RS_Id = *mac->scc->physCellId;
+ n_RS_Id = mac->physCellId;
// U as specified in section 6.4.1.1.1.2 in 38.211, if sequence hopping and group hopping are disabled
pusch_config_pdu->dfts_ofdm.low_papr_group_number = n_RS_Id % 30;
// V as specified in section 6.4.1.1.1.2 in 38.211 V = 0 if sequence hopping and group hopping are disabled
- if ((NR_DMRS_ulconfig->transformPrecodingEnabled->sequenceGroupHopping == NULL) &&
- (NR_DMRS_ulconfig->transformPrecodingEnabled->sequenceHopping == NULL))
- pusch_config_pdu->dfts_ofdm.low_papr_sequence_number = 0;
+ if (!NR_DMRS_ulconfig || !NR_DMRS_ulconfig->transformPrecodingEnabled ||
+ (!NR_DMRS_ulconfig->transformPrecodingEnabled->sequenceGroupHopping && !NR_DMRS_ulconfig->transformPrecodingEnabled->sequenceHopping))
+ pusch_config_pdu->dfts_ofdm.low_papr_sequence_number = 0;
else
AssertFatal(1==0,"SequenceGroupHopping or sequenceHopping are NOT Supported\n");
@@ -790,8 +764,8 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac, NR_tda_info_t *tda_info, nfapi_nr
}
// Periodic SRS scheduling
-bool nr_ue_periodic_srs_scheduling(module_id_t mod_id, frame_t frame, slot_t slot) {
-
+bool nr_ue_periodic_srs_scheduling(module_id_t mod_id, frame_t frame, slot_t slot)
+{
bool srs_scheduled = false;
NR_UE_MAC_INST_t *mac = get_mac_inst(mod_id);
@@ -912,185 +886,171 @@ bool nr_ue_periodic_srs_scheduling(module_id_t mod_id, frame_t frame, slot_t slo
// 1. TODO: Call RRC for link status return to PHY
// 2. TODO: Perform SR/BSR procedures for scheduling feedback
// 3. TODO: Perform PHR procedures
-NR_UE_L2_STATE_t nr_ue_scheduler(nr_downlink_indication_t *dl_info, nr_uplink_indication_t *ul_info){
+void nr_ue_dl_scheduler(nr_downlink_indication_t *dl_info)
+{
+ module_id_t mod_id = dl_info->module_id;
+ uint32_t gNB_index = dl_info->gNB_index;
+ int cc_id = dl_info->cc_id;
+ frame_t rx_frame = dl_info->frame;
+ slot_t rx_slot = dl_info->slot;
+ NR_UE_MAC_INST_t *mac = get_mac_inst(mod_id);
- if (dl_info){
+ fapi_nr_dl_config_request_t *dl_config = &mac->dl_config_request;
- module_id_t mod_id = dl_info->module_id;
- uint32_t gNB_index = dl_info->gNB_index;
- int cc_id = dl_info->cc_id;
- frame_t rx_frame = dl_info->frame;
- slot_t rx_slot = dl_info->slot;
- NR_UE_MAC_INST_t *mac = get_mac_inst(mod_id);
+ nr_scheduled_response_t scheduled_response;
+ nr_dcireq_t dcireq;
- fapi_nr_dl_config_request_t *dl_config = &mac->dl_config_request;
+ if(mac->state == UE_CONNECTED) {
- nr_scheduled_response_t scheduled_response;
- nr_dcireq_t dcireq;
+ dcireq.module_id = mod_id;
+ dcireq.gNB_index = gNB_index;
+ dcireq.cc_id = cc_id;
+ dcireq.frame = rx_frame;
+ dcireq.slot = rx_slot;
+ dcireq.dl_config_req.number_pdus = 0;
+ nr_ue_dcireq(&dcireq); //to be replaced with function pointer later
+ mac->dl_config_request = dcireq.dl_config_req;
- if(mac->cg != NULL){ // we have a cg
+ nr_schedule_csirs_reception(mac, rx_frame, rx_slot);
+ nr_schedule_csi_for_im(mac, rx_frame, rx_slot);
+ dcireq.dl_config_req = mac->dl_config_request;
- dcireq.module_id = mod_id;
- dcireq.gNB_index = gNB_index;
- dcireq.cc_id = cc_id;
- dcireq.frame = rx_frame;
- dcireq.slot = rx_slot;
- dcireq.dl_config_req.number_pdus = 0;
- nr_ue_dcireq(&dcireq); //to be replaced with function pointer later
- mac->dl_config_request = dcireq.dl_config_req;
-
- nr_schedule_csirs_reception(mac, rx_frame, rx_slot);
- nr_schedule_csi_for_im(mac, rx_frame, rx_slot);
- dcireq.dl_config_req = mac->dl_config_request;
-
- fill_scheduled_response(&scheduled_response, &dcireq.dl_config_req, NULL, NULL, mod_id, cc_id, rx_frame, rx_slot, dl_info->phy_data);
- if(mac->if_module != NULL && mac->if_module->scheduled_response != NULL) {
- LOG_D(NR_MAC,"1# scheduled_response transmitted, %d, %d\n", rx_frame, rx_slot);
+ fill_scheduled_response(&scheduled_response, &dcireq.dl_config_req, NULL, NULL, mod_id, cc_id, rx_frame, rx_slot, dl_info->phy_data);
+ if(mac->if_module != NULL && mac->if_module->scheduled_response != NULL) {
+ LOG_D(NR_MAC,"1# scheduled_response transmitted, %d, %d\n", rx_frame, rx_slot);
+ mac->if_module->scheduled_response(&scheduled_response);
+ }
+ }
+ else if (mac->state == UE_PERFORMING_RA) {
+ // this is for Msg2/Msg4
+ if (mac->ra.ra_state >= WAIT_RAR) {
+ fapi_nr_dl_config_dci_dl_pdu_rel15_t *rel15 = &dl_config->dl_config_list[dl_config->number_pdus].dci_config_pdu.dci_config_rel15;
+ rel15->num_dci_options = mac->ra.ra_state == WAIT_RAR ? 1 : 2;
+ rel15->dci_format_options[0] = NR_DL_DCI_FORMAT_1_0;
+ if (mac->ra.ra_state == WAIT_CONTENTION_RESOLUTION)
+ rel15->dci_format_options[1] = NR_UL_DCI_FORMAT_0_0; // msg3 retransmission
+ config_dci_pdu(mac, rel15, dl_config, mac->ra.ra_state == WAIT_RAR ? NR_RNTI_RA : NR_RNTI_TC , mac->ra.ss->searchSpaceId);
+ fill_dci_search_candidates(mac->ra.ss, rel15, -1 , -1);
+ dl_config->number_pdus = 1;
+ LOG_D(MAC,"mac->cg %p: Calling fill_scheduled_response rnti %x, type0_pdcch, num_pdus %d\n",mac->cg,rel15->rnti,dl_config->number_pdus);
+ fill_scheduled_response(&scheduled_response, dl_config, NULL, NULL, mod_id, cc_id, rx_frame, rx_slot, dl_info->phy_data);
+ if(mac->if_module != NULL && mac->if_module->scheduled_response != NULL)
mac->if_module->scheduled_response(&scheduled_response);
- }
}
- else {
- // this is for Msg2/Msg4
- if (mac->ra.ra_state >= WAIT_RAR) {
- fapi_nr_dl_config_dci_dl_pdu_rel15_t *rel15 = &dl_config->dl_config_list[dl_config->number_pdus].dci_config_pdu.dci_config_rel15;
- rel15->num_dci_options = mac->ra.ra_state == WAIT_RAR ? 1 : 2;
- rel15->dci_format_options[0] = NR_DL_DCI_FORMAT_1_0;
- if (mac->ra.ra_state == WAIT_CONTENTION_RESOLUTION)
- rel15->dci_format_options[1] = NR_UL_DCI_FORMAT_0_0; // msg3 retransmission
- config_dci_pdu(mac, rel15, dl_config, mac->ra.ra_state == WAIT_RAR ? NR_RNTI_RA : NR_RNTI_TC , mac->ra.ss->searchSpaceId);
- fill_dci_search_candidates(mac->ra.ss, rel15, -1 , -1);
- dl_config->number_pdus = 1;
- LOG_D(MAC,"mac->cg %p: Calling fill_scheduled_response rnti %x, type0_pdcch, num_pdus %d\n",mac->cg,rel15->rnti,dl_config->number_pdus);
- fill_scheduled_response(&scheduled_response, dl_config, NULL, NULL, mod_id, cc_id, rx_frame, rx_slot, dl_info->phy_data);
- if(mac->if_module != NULL && mac->if_module->scheduled_response != NULL)
- mac->if_module->scheduled_response(&scheduled_response);
- }
- else
- {
- dl_config->number_pdus = 0;
- }
- }
- } else if (ul_info) {
+ }
+ else
+ dl_config->number_pdus = 0;
+}
- int cc_id = ul_info->cc_id;
- frame_t frame_tx = ul_info->frame_tx;
- slot_t slot_tx = ul_info->slot_tx;
- module_id_t mod_id = ul_info->module_id;
- uint32_t gNB_index = ul_info->gNB_index;
+void nr_ue_ul_scheduler(nr_uplink_indication_t *ul_info)
+{
+ int cc_id = ul_info->cc_id;
+ frame_t frame_tx = ul_info->frame_tx;
+ slot_t slot_tx = ul_info->slot_tx;
+ module_id_t mod_id = ul_info->module_id;
+ uint32_t gNB_index = ul_info->gNB_index;
- NR_UE_MAC_INST_t *mac = get_mac_inst(mod_id);
- RA_config_t *ra = &mac->ra;
+ NR_UE_MAC_INST_t *mac = get_mac_inst(mod_id);
+ RA_config_t *ra = &mac->ra;
- fapi_nr_ul_config_request_t *ul_config = get_ul_config_request(mac, slot_tx);
- if (!ul_config) {
- LOG_E(NR_MAC, "mac->ul_config is null!\n");
- }
+ fapi_nr_ul_config_request_t *ul_config = get_ul_config_request(mac, slot_tx);
+ if (!ul_config)
+ LOG_E(NR_MAC, "mac->ul_config is null!\n");
+ if(mac->state < UE_CONNECTED) {
nr_ue_get_rach(mod_id, cc_id, frame_tx, gNB_index, slot_tx);
- // Periodic SRS scheduling
+ nr_ue_prach_scheduler(mod_id, frame_tx, slot_tx);
+ }
+
+ // Periodic SRS scheduling
+ if(mac->state == UE_CONNECTED)
nr_ue_periodic_srs_scheduling(mod_id, frame_tx, slot_tx);
- // Schedule ULSCH only if the current frame and slot match those in ul_config_req
- // AND if a UL grant (UL DCI or Msg3) has been received (as indicated by num_pdus)
- if (ul_config){
- pthread_mutex_lock(&ul_config->mutex_ul_config);
- if ((ul_info->slot_tx == ul_config->slot && ul_info->frame_tx == ul_config->sfn) && ul_config->number_pdus > 0){
+ // Schedule ULSCH only if the current frame and slot match those in ul_config_req
+ // AND if a UL grant (UL DCI or Msg3) has been received (as indicated by num_pdus)
+ if (ul_config) {
+ pthread_mutex_lock(&ul_config->mutex_ul_config);
+ if ((ul_info->slot_tx == ul_config->slot && ul_info->frame_tx == ul_config->sfn) && ul_config->number_pdus > 0){
- LOG_D(NR_MAC, "In %s:[%d.%d]: number of UL PDUs: %d with UL transmission in [%d.%d]\n", __FUNCTION__, frame_tx, slot_tx, ul_config->number_pdus, ul_config->sfn, ul_config->slot);
+ LOG_D(NR_MAC, "[%d.%d]: number of UL PDUs: %d with UL transmission in [%d.%d]\n", frame_tx, slot_tx, ul_config->number_pdus, ul_config->sfn, ul_config->slot);
- uint8_t ulsch_input_buffer_array[NFAPI_MAX_NUM_UL_PDU][MAX_ULSCH_PAYLOAD_BYTES];
- nr_scheduled_response_t scheduled_response;
- fapi_nr_tx_request_t tx_req;
- //tx_req.slot = slot_tx;
- //tx_req.sfn = frame_tx;
- tx_req.slot = slot_tx;
- tx_req.sfn = frame_tx;
- tx_req.number_of_pdus = 0;
+ uint8_t ulsch_input_buffer_array[NFAPI_MAX_NUM_UL_PDU][MAX_ULSCH_PAYLOAD_BYTES];
+ nr_scheduled_response_t scheduled_response;
+ fapi_nr_tx_request_t tx_req;
+ tx_req.slot = slot_tx;
+ tx_req.sfn = frame_tx;
+ tx_req.number_of_pdus = 0;
- for (int j = 0; j < ul_config->number_pdus; j++) {
- uint8_t *ulsch_input_buffer = ulsch_input_buffer_array[tx_req.number_of_pdus];
+ for (int j = 0; j < ul_config->number_pdus; j++) {
+ uint8_t *ulsch_input_buffer = ulsch_input_buffer_array[tx_req.number_of_pdus];
- fapi_nr_ul_config_request_pdu_t *ulcfg_pdu = &ul_config->ul_config_list[j];
+ fapi_nr_ul_config_request_pdu_t *ulcfg_pdu = &ul_config->ul_config_list[j];
- if (ulcfg_pdu->pdu_type == FAPI_NR_UL_CONFIG_TYPE_PUSCH) {
- int mac_pdu_exist = 0;
- uint16_t TBS_bytes = ulcfg_pdu->pusch_config_pdu.pusch_data.tb_size;
- LOG_D(NR_MAC,"harq_id %d, NDI %d NDI_DCI %d, TBS_bytes %d (ra_state %d)\n",
- ulcfg_pdu->pusch_config_pdu.pusch_data.harq_process_id,
- mac->UL_ndi[ulcfg_pdu->pusch_config_pdu.pusch_data.harq_process_id],
- ulcfg_pdu->pusch_config_pdu.pusch_data.new_data_indicator,
- TBS_bytes,ra->ra_state);
- if (ra->ra_state == WAIT_RAR && !ra->cfra){
- memcpy(ulsch_input_buffer, mac->ulsch_pdu.payload, TBS_bytes);
- LOG_D(NR_MAC,"[RAPROC] Msg3 to be transmitted:\n");
- for (int k = 0; k < TBS_bytes; k++) {
- LOG_D(NR_MAC,"(%i): 0x%x\n",k,mac->ulsch_pdu.payload[k]);
- }
- LOG_D(NR_MAC,"Flipping NDI for harq_id %d (Msg3)\n",ulcfg_pdu->pusch_config_pdu.pusch_data.new_data_indicator);
- mac->UL_ndi[ulcfg_pdu->pusch_config_pdu.pusch_data.harq_process_id] = ulcfg_pdu->pusch_config_pdu.pusch_data.new_data_indicator;
- mac->first_ul_tx[ulcfg_pdu->pusch_config_pdu.pusch_data.harq_process_id] = 0;
+ if (ulcfg_pdu->pdu_type == FAPI_NR_UL_CONFIG_TYPE_PUSCH) {
+ int mac_pdu_exist = 0;
+ uint16_t TBS_bytes = ulcfg_pdu->pusch_config_pdu.pusch_data.tb_size;
+ LOG_D(NR_MAC,"harq_id %d, NDI %d NDI_DCI %d, TBS_bytes %d (ra_state %d)\n",
+ ulcfg_pdu->pusch_config_pdu.pusch_data.harq_process_id,
+ mac->UL_ndi[ulcfg_pdu->pusch_config_pdu.pusch_data.harq_process_id],
+ ulcfg_pdu->pusch_config_pdu.pusch_data.new_data_indicator,
+ TBS_bytes,ra->ra_state);
+ if (ra->ra_state == WAIT_RAR && !ra->cfra){
+ memcpy(ulsch_input_buffer, mac->ulsch_pdu.payload, TBS_bytes);
+ LOG_D(NR_MAC,"[RAPROC] Msg3 to be transmitted:\n");
+ for (int k = 0; k < TBS_bytes; k++) {
+ LOG_D(NR_MAC,"(%i): 0x%x\n",k,mac->ulsch_pdu.payload[k]);
+ }
+ LOG_D(NR_MAC,"Flipping NDI for harq_id %d (Msg3)\n",ulcfg_pdu->pusch_config_pdu.pusch_data.new_data_indicator);
+ mac->UL_ndi[ulcfg_pdu->pusch_config_pdu.pusch_data.harq_process_id] = ulcfg_pdu->pusch_config_pdu.pusch_data.new_data_indicator;
+ mac->first_ul_tx[ulcfg_pdu->pusch_config_pdu.pusch_data.harq_process_id] = 0;
+ mac_pdu_exist = 1;
+ } else {
+
+ if ((mac->UL_ndi[ulcfg_pdu->pusch_config_pdu.pusch_data.harq_process_id] != ulcfg_pdu->pusch_config_pdu.pusch_data.new_data_indicator ||
+ mac->first_ul_tx[ulcfg_pdu->pusch_config_pdu.pusch_data.harq_process_id] == 1) &&
+ (mac->state == UE_CONNECTED ||
+ (ra->ra_state == WAIT_RAR && ra->cfra))){
+
+ // Getting IP traffic to be transmitted
+ nr_ue_get_sdu(mod_id, cc_id,frame_tx, slot_tx, gNB_index, ulsch_input_buffer, TBS_bytes);
mac_pdu_exist = 1;
- } else {
-
- if ((mac->UL_ndi[ulcfg_pdu->pusch_config_pdu.pusch_data.harq_process_id] != ulcfg_pdu->pusch_config_pdu.pusch_data.new_data_indicator ||
- mac->first_ul_tx[ulcfg_pdu->pusch_config_pdu.pusch_data.harq_process_id]==1) &&
- ((get_softmodem_params()->phy_test == 1) ||
- (ra->ra_state == RA_SUCCEEDED) ||
- (ra->ra_state == WAIT_RAR && ra->cfra))){
-
- // Getting IP traffic to be transmitted
- nr_ue_get_sdu(mod_id, cc_id,frame_tx, slot_tx, gNB_index, ulsch_input_buffer, TBS_bytes);
- mac_pdu_exist = 1;
- }
-
- LOG_D(NR_MAC,"Flipping NDI for harq_id %d\n",ulcfg_pdu->pusch_config_pdu.pusch_data.new_data_indicator);
- mac->UL_ndi[ulcfg_pdu->pusch_config_pdu.pusch_data.harq_process_id] = ulcfg_pdu->pusch_config_pdu.pusch_data.new_data_indicator;
- mac->first_ul_tx[ulcfg_pdu->pusch_config_pdu.pusch_data.harq_process_id] = 0;
-
}
- // Config UL TX PDU
- if (mac_pdu_exist) {
- tx_req.tx_request_body[tx_req.number_of_pdus].pdu_length = TBS_bytes;
- tx_req.tx_request_body[tx_req.number_of_pdus].pdu_index = j;
- tx_req.tx_request_body[tx_req.number_of_pdus].pdu = ulsch_input_buffer;
- tx_req.number_of_pdus++;
- }
- if (ra->ra_state == WAIT_CONTENTION_RESOLUTION && !ra->cfra){
- LOG_I(NR_MAC,"[RAPROC][%d.%d] RA-Msg3 retransmitted\n", frame_tx, slot_tx);
- // 38.321 restart the ra-ContentionResolutionTimer at each HARQ retransmission in the first symbol after the end of the Msg3 transmission
- nr_Msg3_transmitted(ul_info->module_id, ul_info->cc_id, ul_info->frame_tx, ul_info->slot_tx, ul_info->gNB_index);
- }
- if (ra->ra_state == WAIT_RAR && !ra->cfra){
- LOG_A(NR_MAC, "[RAPROC][%d.%d] RA-Msg3 transmitted\n", frame_tx, slot_tx);
- nr_Msg3_transmitted(ul_info->module_id, ul_info->cc_id, ul_info->frame_tx, ul_info->slot_tx, ul_info->gNB_index);
- }
+ LOG_D(NR_MAC,"Flipping NDI for harq_id %d\n",ulcfg_pdu->pusch_config_pdu.pusch_data.new_data_indicator);
+ mac->UL_ndi[ulcfg_pdu->pusch_config_pdu.pusch_data.harq_process_id] = ulcfg_pdu->pusch_config_pdu.pusch_data.new_data_indicator;
+ mac->first_ul_tx[ulcfg_pdu->pusch_config_pdu.pusch_data.harq_process_id] = 0;
+
+ }
+
+ // Config UL TX PDU
+ if (mac_pdu_exist) {
+ tx_req.tx_request_body[tx_req.number_of_pdus].pdu_length = TBS_bytes;
+ tx_req.tx_request_body[tx_req.number_of_pdus].pdu_index = j;
+ tx_req.tx_request_body[tx_req.number_of_pdus].pdu = ulsch_input_buffer;
+ tx_req.number_of_pdus++;
+ }
+ if (ra->ra_state == WAIT_CONTENTION_RESOLUTION && !ra->cfra){
+ LOG_I(NR_MAC,"[RAPROC][%d.%d] RA-Msg3 retransmitted\n", frame_tx, slot_tx);
+ // 38.321 restart the ra-ContentionResolutionTimer at each HARQ retransmission in the first symbol after the end of the Msg3 transmission
+ nr_Msg3_transmitted(ul_info->module_id, ul_info->cc_id, ul_info->frame_tx, ul_info->slot_tx, ul_info->gNB_index);
+ }
+ if (ra->ra_state == WAIT_RAR && !ra->cfra){
+ LOG_A(NR_MAC, "[RAPROC][%d.%d] RA-Msg3 transmitted\n", frame_tx, slot_tx);
+ nr_Msg3_transmitted(ul_info->module_id, ul_info->cc_id, ul_info->frame_tx, ul_info->slot_tx, ul_info->gNB_index);
}
}
- pthread_mutex_unlock(&ul_config->mutex_ul_config); // avoid double lock
-
- fill_scheduled_response(&scheduled_response, NULL, ul_config, &tx_req, mod_id, cc_id, frame_tx, slot_tx, ul_info->phy_data);
- if(mac->if_module != NULL && mac->if_module->scheduled_response != NULL){
- LOG_D(NR_MAC,"3# scheduled_response transmitted,%d, %d\n", frame_tx, slot_tx);
- mac->if_module->scheduled_response(&scheduled_response);
- }
- pthread_mutex_lock(&ul_config->mutex_ul_config);
}
- pthread_mutex_unlock(&ul_config->mutex_ul_config);
+ pthread_mutex_unlock(&ul_config->mutex_ul_config); // avoid double lock
+ fill_scheduled_response(&scheduled_response, NULL, ul_config, &tx_req, mod_id, cc_id, frame_tx, slot_tx, ul_info->phy_data);
+ if(mac->if_module != NULL && mac->if_module->scheduled_response != NULL){
+ LOG_D(NR_MAC,"3# scheduled_response transmitted,%d, %d\n", frame_tx, slot_tx);
+ mac->if_module->scheduled_response(&scheduled_response);
+ }
+ pthread_mutex_lock(&ul_config->mutex_ul_config);
}
+ pthread_mutex_unlock(&ul_config->mutex_ul_config);
}
- if (dl_info) {
- return (UE_CONNECTION_OK);
- }
- module_id_t mod_id = ul_info->module_id;
- frame_t txFrameP = ul_info->frame_tx;
- slot_t txSlotP = ul_info->slot_tx;
-
- // Handle the SR/BSR procedures per subframe
- NR_UE_MAC_INST_t *mac = get_mac_inst(mod_id);
- uint8_t gNB_indexP=0;
-
// Call BSR procedure as described in Section 5.4.5 in 38.321
// First check ReTxBSR Timer because it is always configured
@@ -1105,21 +1065,22 @@ NR_UE_L2_STATE_t nr_ue_scheduler(nr_downlink_indication_t *dl_info, nr_uplink_in
}
//Check whether Regular BSR is triggered
- if (nr_update_bsr(mod_id, txFrameP, txSlotP, gNB_indexP) == true) {
+ if (nr_update_bsr(mod_id, frame_tx, slot_tx, gNB_index) == true) {
// call SR procedure to generate pending SR and BSR for next PUCCH/PUSCH TxOp. This should implement the procedures
// outlined in Sections 5.4.4 an 5.4.5 of 38.321
mac->scheduling_info.SR_pending = 1;
// Regular BSR trigger
mac->BSR_reporting_active |= NR_BSR_TRIGGER_REGULAR;
LOG_D(NR_MAC, "[UE %d][BSR] Regular BSR Triggered Frame %d slot %d SR for PUSCH is pending\n",
- mod_id, txFrameP, txSlotP);
+ mod_id, frame_tx, slot_tx);
}
- return UE_CONNECTION_OK;
+ if(mac->state >= UE_PERFORMING_RA)
+ nr_ue_pucch_scheduler(mod_id,frame_tx, slot_tx, ul_info->phy_data);
}
-bool
-nr_update_bsr(module_id_t module_idP, frame_t frameP, slot_t slotP, uint8_t gNB_index) {
+bool nr_update_bsr(module_id_t module_idP, frame_t frameP, slot_t slotP, uint8_t gNB_index)
+{
mac_rlc_status_resp_t rlc_status;
bool bsr_regular_triggered = false;
uint8_t lcid;
@@ -2137,7 +2098,7 @@ void nr_ue_pucch_scheduler(module_id_t module_idP, frame_t frameP, int slotP, vo
uint16_t rnti = mac->crnti; //FIXME not sure this is valid for all pucch instances
// SR
- if (trigger_periodic_scheduling_request(mac, &pucch, frameP, slotP)) {
+ if (mac->state == UE_CONNECTED && trigger_periodic_scheduling_request(mac, &pucch, frameP, slotP)) {
O_SR = 1;
/* sr_payload = 1 means that this is a positive SR, sr_payload = 0 means that it is a negative SR */
pucch.sr_payload = nr_ue_get_SR(module_idP,
@@ -2146,7 +2107,7 @@ void nr_ue_pucch_scheduler(module_id_t module_idP, frame_t frameP, int slotP, vo
}
// CSI
- if (mac->ra.ra_state == RA_SUCCEEDED || get_softmodem_params()->phy_test == 1)
+ if (mac->state == UE_CONNECTED)
O_CSI = nr_get_csi_measurements(mac, frameP, slotP, &pucch);
// ACKNACK
@@ -2196,15 +2157,14 @@ void nr_ue_pucch_scheduler(module_id_t module_idP, frame_t frameP, int slotP, vo
fill_scheduled_response(&scheduled_response, NULL, ul_config, NULL, module_idP, 0 /*TBR fix*/, frameP, slotP, phy_data);
if(mac->if_module != NULL && mac->if_module->scheduled_response != NULL)
mac->if_module->scheduled_response(&scheduled_response);
+ if(mac->state == UE_WAIT_TX_ACK_MSG4)
+ mac->state = UE_CONNECTED;
}
}
void nr_schedule_csi_for_im(NR_UE_MAC_INST_t *mac, int frame, int slot) {
- if (mac->ra.ra_state != RA_SUCCEEDED && get_softmodem_params()->phy_test == 0)
- return;
-
NR_UE_UL_BWP_t *current_UL_BWP = &mac->current_UL_BWP;
if (!current_UL_BWP->csi_MeasConfig)
@@ -2259,9 +2219,6 @@ void nr_schedule_csi_for_im(NR_UE_MAC_INST_t *mac, int frame, int slot) {
void nr_schedule_csirs_reception(NR_UE_MAC_INST_t *mac, int frame, int slot) {
- if (mac->ra.ra_state != RA_SUCCEEDED && get_softmodem_params()->phy_test == 0)
- return;
-
NR_UE_UL_BWP_t *current_UL_BWP = &mac->current_UL_BWP;
if (!current_UL_BWP->csi_MeasConfig)
diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
index ba78b5be57..2729ccc00a 100644
--- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
+++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
@@ -1016,9 +1016,14 @@ void fill_msg3_pusch_pdu(nfapi_nr_pusch_pdu_t *pusch_pdu,
pusch_pdu->cyclic_prefix = 0;
pusch_pdu->mcs_table = 0;
if (scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon->choice.setup->msg3_transformPrecoder == NULL)
- pusch_pdu->transform_precoding = 1;
- else
- pusch_pdu->transform_precoding = 0;
+ pusch_pdu->transform_precoding = 1; // disabled
+ else {
+ pusch_pdu->transform_precoding = 0; // enabled
+ pusch_pdu->dfts_ofdm.low_papr_group_number = *scc->physCellId % 30;
+ pusch_pdu->dfts_ofdm.low_papr_sequence_number = 0;
+ if (scc->uplinkConfigCommon->initialUplinkBWP->pusch_ConfigCommon->choice.setup->groupHoppingEnabledTransformPrecoding)
+ AssertFatal(1==0,"Hopping mode is not supported in transform precoding\n");
+ }
pusch_pdu->data_scrambling_id = *scc->physCellId;
pusch_pdu->nrOfLayers = 1;
pusch_pdu->ul_dmrs_symb_pos = get_l_prime(nr_of_symbols,mappingtype,pusch_dmrs_pos2,pusch_len1,start_symbol_index, scc->dmrs_TypeA_Position);
diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
index 92fd15277e..7d3cd511e9 100644
--- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
+++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
@@ -462,6 +462,7 @@ bool allocate_dl_retransmission(module_id_t module_id,
uint16_t new_rbSize;
bool success = nr_find_nb_rb(retInfo->Qm,
retInfo->R,
+ 1, // no transform precoding for DL
layers,
temp_tda.nrOfSymbols,
temp_dmrs.N_PRB_DMRS * temp_dmrs.N_DMRS_SLOT,
@@ -630,9 +631,7 @@ void pf_dl(module_id_t module_id,
else
sched_pdsch->mcs = get_mcs_from_bler(bo, stats, &sched_ctrl->dl_bler_stats, max_mcs, frame);
sched_pdsch->nrOfLayers = get_dl_nrOfLayers(sched_ctrl, current_BWP->dci_format);
- sched_pdsch->pm_index = get_pm_index(UE,
- sched_pdsch->nrOfLayers,
- mac->xp_pdsch_antenna_ports);
+ sched_pdsch->pm_index = mac->identity_pm ? 0 : get_pm_index(UE, sched_pdsch->nrOfLayers, mac->xp_pdsch_antenna_ports);
const uint8_t Qm = nr_get_Qm_dl(sched_pdsch->mcs, current_BWP->mcsTableIdx);
const uint16_t R = nr_get_code_rate_dl(sched_pdsch->mcs, current_BWP->mcsTableIdx);
uint32_t tbs = nr_compute_tbs(Qm,
@@ -764,6 +763,7 @@ void pf_dl(module_id_t module_id,
//const int oh = 3 * sched_ctrl->dl_pdus_total + 2 * (frame == (sched_ctrl->ta_frame + 10) % 1024);
nr_find_nb_rb(sched_pdsch->Qm,
sched_pdsch->R,
+ 1, // no transform precoding for DL
sched_pdsch->nrOfLayers,
tda_info->nrOfSymbols,
sched_pdsch->dmrs_parms.N_PRB_DMRS * sched_pdsch->dmrs_parms.N_DMRS_SLOT,
diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
index 59461a8508..c7d5b8614c 100644
--- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
+++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
@@ -513,8 +513,21 @@ void fill_pdcch_vrb_map(gNB_MAC_INST *mac,
}
}
+bool multiple_2_3_5(int rb)
+{
+ while (rb % 2 == 0)
+ rb /= 2;
+ while (rb % 3 == 0)
+ rb /= 3;
+ while (rb % 5 == 0)
+ rb /= 5;
+
+ return (rb == 1);
+}
+
bool nr_find_nb_rb(uint16_t Qm,
uint16_t R,
+ long transform_precoding,
uint8_t nrOfLayers,
uint16_t nb_symb_sch,
uint16_t nb_dmrs_prb,
@@ -524,6 +537,11 @@ bool nr_find_nb_rb(uint16_t Qm,
uint32_t *tbs,
uint16_t *nb_rb)
{
+ // for transform precoding only RB = 2^a_2 * 3^a_3 * 5^a_5 is allowed with a non-negative
+ while(transform_precoding == NR_PUSCH_Config__transformPrecoder_enabled &&
+ !multiple_2_3_5(nb_rb_max))
+ nb_rb_max--;
+
/* is the maximum (not even) enough? */
*nb_rb = nb_rb_max;
*tbs = nr_compute_tbs(Qm, R, *nb_rb, nb_symb_sch, nb_dmrs_prb, 0, 0, nrOfLayers) >> 3;
@@ -545,6 +563,15 @@ bool nr_find_nb_rb(uint16_t Qm,
int hi = nb_rb_max;
int lo = nb_rb_min;
for (int p = (hi + lo) / 2; lo + 1 < hi; p = (hi + lo) / 2) {
+ // for transform precoding only RB = 2^a_2 * 3^a_3 * 5^a_5 is allowed with a non-negative
+ while(transform_precoding == NR_PUSCH_Config__transformPrecoder_enabled &&
+ !multiple_2_3_5(p))
+ p++;
+
+ // If by increasing p for transform precoding we already hit the high, break to avoid infinite loop
+ if (p == hi)
+ break;
+
const uint32_t TBS = nr_compute_tbs(Qm, R, p, nb_symb_sch, nb_dmrs_prb, 0, 0, nrOfLayers) >> 3;
if (bytes == TBS) {
hi = p;
@@ -568,7 +595,7 @@ NR_pusch_dmrs_t get_ul_dmrs_params(const NR_ServingCellConfigCommon_t *scc,
NR_pusch_dmrs_t dmrs = {0};
// TODO setting of cdm groups with no data to be redone for MIMO
- if (ul_bwp->transform_precoding || Layers<3)
+ if (ul_bwp->transform_precoding && Layers < 3)
dmrs.num_dmrs_cdm_grps_no_data = ul_bwp->dci_format == NR_UL_DCI_FORMAT_0_1 || tda_info->nrOfSymbols == 2 ? 1 : 2;
else
dmrs.num_dmrs_cdm_grps_no_data = 2;
@@ -804,7 +831,6 @@ void nr_configure_pucch(nfapi_nr_pucch_pdu_t* pucch_pdu,
NR_PUCCH_ResourceId_t *resource_id = NULL;
NR_UE_UL_BWP_t *current_BWP = &UE->current_UL_BWP;
- long *id0 = NULL;
int n_list, n_set;
uint16_t N2,N3;
int res_found = 0;
@@ -818,9 +844,13 @@ void nr_configure_pucch(nfapi_nr_pucch_pdu_t* pucch_pdu,
long *pusch_id = pusch_Config ? pusch_Config->dataScramblingIdentityPUSCH : NULL;
- if (pusch_Config && pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA != NULL)
+ long *id0 = NULL;
+ if (pusch_Config &&
+ pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA != NULL &&
+ pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA->choice.setup->transformPrecodingDisabled != NULL)
id0 = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA->choice.setup->transformPrecodingDisabled->scramblingID0;
- else if (pusch_Config && pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB != NULL)
+ else if (pusch_Config && pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB != NULL &&
+ pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup->transformPrecodingDisabled != NULL)
id0 = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup->transformPrecodingDisabled->scramblingID0;
else id0 = scc->physCellId;
@@ -2173,11 +2203,6 @@ void configure_UE_BWP(gNB_MAC_INST *nr_mac,
UL_BWP->initial_BWPSize = NRRIV2BW(scc->uplinkConfigCommon->initialUplinkBWP->genericParameters.locationAndBandwidth, MAX_BWP_SIZE);
UL_BWP->initial_BWPStart = NRRIV2PRBOFFSET(scc->uplinkConfigCommon->initialUplinkBWP->genericParameters.locationAndBandwidth, MAX_BWP_SIZE);
- if (UL_BWP->pusch_Config == NULL || !UL_BWP->pusch_Config->transformPrecoder)
- UL_BWP->transform_precoding = !scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon->choice.setup->msg3_transformPrecoder;
- else
- UL_BWP->transform_precoding = *UL_BWP->pusch_Config->transformPrecoder;
-
if (UL_BWP->bwp_id > 0) {
UL_BWP->pucch_ConfigCommon = ul_bwp->bwp_Common->pucch_ConfigCommon ? ul_bwp->bwp_Common->pucch_ConfigCommon->choice.setup : NULL;
UL_BWP->rach_ConfigCommon = ul_bwp->bwp_Common->rach_ConfigCommon ? ul_bwp->bwp_Common->rach_ConfigCommon->choice.setup : NULL;
@@ -2263,14 +2288,17 @@ void configure_UE_BWP(gNB_MAC_INST *nr_mac,
long *dl_mcs_Table = DL_BWP->pdsch_Config ? DL_BWP->pdsch_Config->mcs_Table : NULL;
DL_BWP->mcsTableIdx = get_pdsch_mcs_table(dl_mcs_Table, DL_BWP->dci_format, NR_RNTI_C, target_ss);
- long *ul_mcs_Table = NULL;
+ // 0 precoding enabled 1 precoding disabled
+ UL_BWP->transform_precoding = get_transformPrecoding(UL_BWP, UL_BWP->dci_format, 0);
+ // Set uplink MCS table
+ long *mcs_Table = NULL;
if (UL_BWP->pusch_Config)
- ul_mcs_Table = UL_BWP->transform_precoding ?
- UL_BWP->pusch_Config->mcs_Table :
- UL_BWP->pusch_Config->mcs_TableTransformPrecoder;
+ mcs_Table = UL_BWP->transform_precoding ?
+ UL_BWP->pusch_Config->mcs_Table :
+ UL_BWP->pusch_Config->mcs_TableTransformPrecoder;
- UL_BWP->mcs_table = get_pusch_mcs_table(ul_mcs_Table,
- UL_BWP->transform_precoding ? 0 : 1,
+ UL_BWP->mcs_table = get_pusch_mcs_table(mcs_Table,
+ !UL_BWP->transform_precoding,
UL_BWP->dci_format,
NR_RNTI_C,
target_ss,
@@ -2782,10 +2810,12 @@ void nr_mac_update_timers(module_id_t module_id,
NR_CellGroupConfig_t *cg = NULL;
uper_decode(NULL,
- &asn_DEF_NR_CellGroupConfig, //might be added prefix later
+ &asn_DEF_NR_CellGroupConfig, // might be added prefix later
(void **)&cg,
(uint8_t *)UE->cg_buf,
- (UE->enc_rval.encoded+7)/8, 0, 0);
+ (UE->enc_rval.encoded + 7) / 8,
+ 0,
+ 0);
UE->CellGroup = cg;
if (LOG_DEBUGFLAG(DEBUG_ASN1)) {
@@ -2890,13 +2920,8 @@ void send_initial_ul_rrc_message(module_id_t module_id,
sdu_len, rnti);
/* TODO REMOVE_DU_RRC: the RRC in the DU is a hack and should be taken out in the future */
- if (NODE_IS_DU(RC.nrrrc[module_id]->node_type)) {
- struct rrc_gNB_ue_context_s *ue_context_p = rrc_gNB_allocate_new_UE_context(RC.nrrrc[module_id]);
- ue_context_p->ue_id_rnti = rnti;
- ue_context_p->ue_context.rnti = rnti;
- ue_context_p->ue_context.random_ue_identity = rnti;
- RB_INSERT(rrc_nr_ue_tree_s, &RC.nrrrc[module_id]->rrc_ue_head, ue_context_p);
- }
+ if (NODE_IS_DU(RC.nrrrc[module_id]->node_type))
+ rrc_gNB_create_ue_context(rnti, RC.nrrrc[module_id], rnti);
const NR_ServingCellConfigCommon_t *scc = RC.nrrrc[module_id]->carrier.servingcellconfigcommon;
const NR_ServingCellConfig_t *sccd = RC.nrrrc[module_id]->configuration.scd;
diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
index 79f4479823..d6fe0e6233 100644
--- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
+++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
@@ -1041,7 +1041,7 @@ uint8_t get_max_tpmi(const NR_PUSCH_Config_t *pusch_Config,
void get_precoder_matrix_coef(char *w,
const uint8_t ul_ri,
const uint16_t num_ue_srs_ports,
- const uint8_t transform_precoding,
+ const long transform_precoding,
const uint8_t tpmi,
const uint8_t uI,
int layer_idx)
@@ -1068,7 +1068,7 @@ void get_precoder_matrix_coef(char *w,
}
int nr_srs_tpmi_estimation(const NR_PUSCH_Config_t *pusch_Config,
- const uint8_t transform_precoding,
+ const long transform_precoding,
const uint8_t *channel_matrix,
const uint8_t normalized_iq_representation,
const uint16_t num_gnb_antenna_elements,
@@ -1443,7 +1443,7 @@ static bool allocate_ul_retransmission(gNB_MAC_INST *nrmac,
while (rbStart < bwpSize && (rballoc_mask[rbStart] & slbitmap) != slbitmap)
rbStart++;
if (rbStart + retInfo->rbSize > bwpSize) {
- LOG_W(NR_MAC, "[UE %04x][%4d.%2d] could not allocate UL retransmission: no resources (rbStart %d, retInfo->rbSize %d, bwpSize %d) \n",
+ LOG_D(NR_MAC, "[UE %04x][%4d.%2d] could not allocate UL retransmission: no resources (rbStart %d, retInfo->rbSize %d, bwpSize %d) \n",
UE->rnti,
frame,
slot,
@@ -1470,6 +1470,7 @@ static bool allocate_ul_retransmission(gNB_MAC_INST *nrmac,
uint16_t new_rbSize;
bool success = nr_find_nb_rb(retInfo->Qm,
retInfo->R,
+ UE->current_UL_BWP.transform_precoding,
nrOfLayers,
tda_info.nrOfSymbols,
dmrs_info.N_PRB_DMRS * dmrs_info.num_dmrs_symb,
@@ -1683,7 +1684,7 @@ void pf_ul(module_id_t module_id,
while (rbStart < bwpSize && (rballoc_mask[rbStart] & slbitmap) != slbitmap)
rbStart++;
if (rbStart + min_rb >= bwpSize) {
- LOG_W(NR_MAC, "[UE %04x][%4d.%2d] could not allocate continuous UL data: no resources (rbStart %d, min_rb %d, bwpSize %d)\n",
+ LOG_D(NR_MAC, "[UE %04x][%4d.%2d] could not allocate continuous UL data: no resources (rbStart %d, min_rb %d, bwpSize %d)\n",
UE->rnti,
frame,
slot,
@@ -1815,6 +1816,7 @@ void pf_ul(module_id_t module_id,
uint32_t TBS = 0;
nr_find_nb_rb(sched_pusch->Qm,
sched_pusch->R,
+ current_BWP->transform_precoding,
sched_pusch->nrOfLayers,
sched_pusch->tda_info.nrOfSymbols,
sched_pusch->dmrs_info.N_PRB_DMRS * sched_pusch->dmrs_info.num_dmrs_symb,
@@ -2174,13 +2176,14 @@ void nr_schedule_ulsch(module_id_t module_id, frame_t frame, sub_frame_t slot)
}
else {
pusch_pdu->ul_dmrs_scrambling_id = *scc->physCellId;
- if (NR_DMRS_UplinkConfig && NR_DMRS_UplinkConfig->transformPrecodingEnabled->nPUSCH_Identity != NULL)
+ if (NR_DMRS_UplinkConfig &&
+ NR_DMRS_UplinkConfig->transformPrecodingEnabled &&
+ NR_DMRS_UplinkConfig->transformPrecodingEnabled->nPUSCH_Identity != NULL)
pusch_pdu->pusch_identity = *NR_DMRS_UplinkConfig->transformPrecodingEnabled->nPUSCH_Identity;
else if (NR_DMRS_UplinkConfig)
pusch_pdu->pusch_identity = *scc->physCellId;
}
pusch_pdu->scid = 0; // DMRS sequence initialization [TS38.211, sec 6.4.1.1.1]
- pusch_pdu->num_dmrs_cdm_grps_no_data = sched_pusch->dmrs_info.num_dmrs_cdm_grps_no_data;
pusch_pdu->dmrs_ports = ((1<nrOfLayers) - 1);
/* FAPI: Pusch Allocation in frequency domain */
@@ -2231,11 +2234,13 @@ void nr_schedule_ulsch(module_id_t module_id, frame_t frame, sub_frame_t slot)
pusch_pdu->dfts_ofdm.low_papr_group_number = pusch_pdu->pusch_identity % 30;
// V as specified in section 6.4.1.1.1.2 in 38.211 V = 0 if sequence hopping and group hopping are disabled
- if ((NR_DMRS_UplinkConfig==NULL) || ((NR_DMRS_UplinkConfig->transformPrecodingEnabled->sequenceGroupHopping == NULL) &&
- (NR_DMRS_UplinkConfig->transformPrecodingEnabled->sequenceHopping == NULL)))
+ if ((!NR_DMRS_UplinkConfig ||
+ !NR_DMRS_UplinkConfig->transformPrecodingEnabled ||
+ (!NR_DMRS_UplinkConfig->transformPrecodingEnabled->sequenceGroupHopping && !NR_DMRS_UplinkConfig->transformPrecodingEnabled->sequenceHopping)) &&
+ !scc->uplinkConfigCommon->initialUplinkBWP->pusch_ConfigCommon->choice.setup->groupHoppingEnabledTransformPrecoding)
pusch_pdu->dfts_ofdm.low_papr_sequence_number = 0;
else
- AssertFatal(1==0,"SequenceGroupHopping or sequenceHopping are NOT Supported\n");
+ AssertFatal(1==0,"Hopping mode is not supported in transform precoding\n");
LOG_D(NR_MAC,"TRANSFORM PRECODING IS ENABLED. CDM groups: %d, U: %d MCS table: %d\n", pusch_pdu->num_dmrs_cdm_grps_no_data, pusch_pdu->dfts_ofdm.low_papr_group_number, current_BWP->mcs_table);
}
diff --git a/openair2/LAYER2/NR_MAC_gNB/mac_proto.h b/openair2/LAYER2/NR_MAC_gNB/mac_proto.h
index e02fe5e68d..400f2776be 100644
--- a/openair2/LAYER2/NR_MAC_gNB/mac_proto.h
+++ b/openair2/LAYER2/NR_MAC_gNB/mac_proto.h
@@ -460,6 +460,7 @@ int get_cce_index(const gNB_MAC_INST *nrmac,
bool nr_find_nb_rb(uint16_t Qm,
uint16_t R,
+ long transform_precoding,
uint8_t nrOfLayers,
uint16_t nb_symb_sch,
uint16_t nb_dmrs_prb,
diff --git a/openair2/LAYER2/NR_MAC_gNB/mac_rrc_dl_handler.c b/openair2/LAYER2/NR_MAC_gNB/mac_rrc_dl_handler.c
index 7f7077088a..98d4cf8141 100644
--- a/openair2/LAYER2/NR_MAC_gNB/mac_rrc_dl_handler.c
+++ b/openair2/LAYER2/NR_MAC_gNB/mac_rrc_dl_handler.c
@@ -106,7 +106,7 @@ int dl_rrc_message_rrcSetup(module_id_t module_id, const f1ap_dl_rrc_message_t *
/* TODO: drop the RRC context */
gNB_RRC_INST *rrc = RC.nrrrc[module_id];
- struct rrc_gNB_ue_context_s *ue_context_p = rrc_gNB_get_ue_context(rrc, dl_rrc->rnti);
+ rrc_gNB_ue_context_t *ue_context_p = rrc_gNB_get_ue_context_by_rnti(rrc, dl_rrc->rnti);
gNB_RRC_UE_t *ue_p = &ue_context_p->ue_context;
ue_p->SRB_configList = rrcSetup_ies->radioBearerConfig.srb_ToAddModList;
ue_p->masterCellGroup = cellGroup;
diff --git a/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h b/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
index b47b8d6dfd..96734aa8b1 100644
--- a/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
+++ b/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
@@ -196,8 +196,6 @@ typedef struct {
/*! \brief gNB common channels */
typedef struct {
- int physCellId;
- int p_gNB;
int Ncp;
int nr_band;
frame_type_t frame_type;
@@ -799,7 +797,7 @@ typedef struct gNB_MAC_INST_s {
NR_bler_options_t ul_bler;
uint8_t min_grant_prb;
uint8_t min_grant_mcs;
-
+ bool identity_pm;
nr_mac_rrc_ul_if_t mac_rrc;
int16_t frame;
diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c
index 27adaa39bc..87d8527eb9 100644
--- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c
+++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c
@@ -736,7 +736,7 @@ void check_and_process_dci(nfapi_nr_dl_tti_request_t *dl_tti_request,
NR_UL_TIME_ALIGNMENT_t ul_time_alignment;
memset(&ul_time_alignment, 0, sizeof(ul_time_alignment));
fill_dci_from_dl_config(&mac->dl_info, &mac->dl_config_request);
- nr_ue_scheduler(&mac->dl_info, NULL);
+ nr_ue_dl_scheduler(&mac->dl_info);
nr_ue_dl_indication(&mac->dl_info, &ul_time_alignment);
if (pthread_mutex_unlock(&mac->mutex_dl_info)) abort();
@@ -756,8 +756,7 @@ void check_and_process_dci(nfapi_nr_dl_tti_request_t *dl_tti_request,
mac->scc_SIB->tdd_UL_DL_ConfigurationCommon,
ul_info.slot_tx,
mac->frame_type) && mac->ra.ra_state != RA_SUCCEEDED) {
- nr_ue_scheduler(NULL, &ul_info);
- nr_ue_prach_scheduler(ul_info.module_id, ul_info.frame_tx, ul_info.slot_tx);
+ nr_ue_ul_scheduler(&ul_info);
}
}
}
@@ -1115,36 +1114,17 @@ void update_harq_status(module_id_t module_id, uint8_t harq_pid, uint8_t ack_nac
}
}
-int nr_ue_ul_indication(nr_uplink_indication_t *ul_info){
-
- NR_UE_L2_STATE_t ret=0;
+int nr_ue_ul_indication(nr_uplink_indication_t *ul_info)
+{
module_id_t module_id = ul_info->module_id;
NR_UE_MAC_INST_t *mac = get_mac_inst(module_id);
- NR_TDD_UL_DL_ConfigCommon_t *tdd_UL_DL_ConfigurationCommon = mac->scc != NULL ? mac->scc->tdd_UL_DL_ConfigurationCommon : mac->scc_SIB->tdd_UL_DL_ConfigurationCommon;
LOG_T(NR_MAC, "In %s():%d not calling scheduler mac->ra.ra_state = %d\n",
__FUNCTION__, __LINE__, mac->ra.ra_state);
- ret = nr_ue_scheduler(NULL, ul_info);
- if (is_nr_UL_slot(tdd_UL_DL_ConfigurationCommon, ul_info->slot_tx, mac->frame_type)) {
- nr_ue_pucch_scheduler(module_id, ul_info->frame_tx, ul_info->slot_tx, ul_info->phy_data);
- if (!get_softmodem_params()->phy_test)
- nr_ue_prach_scheduler(module_id, ul_info->frame_tx, ul_info->slot_tx);
- }
-
- switch(ret){
- case UE_CONNECTION_OK:
- break;
- case UE_CONNECTION_LOST:
- break;
- case UE_PHY_RESYNCH:
- break;
- case UE_PHY_HO_PRACH:
- break;
- default:
- break;
- }
-
+ NR_TDD_UL_DL_ConfigCommon_t *tdd_UL_DL_ConfigurationCommon = mac->scc != NULL ? mac->scc->tdd_UL_DL_ConfigurationCommon : mac->scc_SIB->tdd_UL_DL_ConfigurationCommon;
+ if (mac->phy_config_request_sent && is_nr_UL_slot(tdd_UL_DL_ConfigurationCommon, ul_info->slot_tx, mac->frame_type))
+ nr_ue_ul_scheduler(ul_info);
return 0;
}
@@ -1157,11 +1137,11 @@ int nr_ue_dl_indication(nr_downlink_indication_t *dl_info, NR_UL_TIME_ALIGNMENT_
if ((!dl_info->dci_ind && !dl_info->rx_ind)) {
// UL indication to schedule DCI reception
- nr_ue_scheduler(dl_info, NULL);
+ if (mac->phy_config_request_sent)
+ nr_ue_dl_scheduler(dl_info);
} else {
// UL indication after reception of DCI or DL PDU
if (dl_info && dl_info->dci_ind && dl_info->dci_ind->number_of_dcis) {
-
LOG_T(MAC,"[L2][IF MODULE][DL INDICATION][DCI_IND]\n");
for (int i = 0; i < dl_info->dci_ind->number_of_dcis; i++) {
LOG_T(MAC,">>>NR_IF_Module i=%d, dl_info->dci_ind->number_of_dcis=%d\n",i,dl_info->dci_ind->number_of_dcis);
diff --git a/openair2/RRC/LTE/MESSAGES/asn1_msg.c b/openair2/RRC/LTE/MESSAGES/asn1_msg.c
index 761210ece7..f5e6959cf5 100644
--- a/openair2/RRC/LTE/MESSAGES/asn1_msg.c
+++ b/openair2/RRC/LTE/MESSAGES/asn1_msg.c
@@ -76,6 +76,7 @@
#include "LTE_SystemInformationBlockType1.h"
#include "LTE_SystemInformationBlockType1-BR-r13.h"
+#include "LTE_SystemInformationBlockType1-v8h0-IEs.h"
#include "LTE_SIB-Type.h"
@@ -937,7 +938,7 @@ uint8_t do_SIB1(rrc_eNB_carrier_data_t *carrier,
(*sib1)->cellSelectionInfo.q_RxLevMinOffset=NULL;
//(*sib1)->p_Max = CALLOC(1, sizeof(P_Max_t));
// *((*sib1)->p_Max) = 23;
- (*sib1)->freqBandIndicator = configuration->eutra_band[CC_id];
+
schedulingInfo.si_Periodicity=LTE_SchedulingInfo__si_Periodicity_rf8;
if(configuration->eMBMS_M2_configured){
schedulingInfo2.si_Periodicity=LTE_SchedulingInfo__si_Periodicity_rf8;
@@ -964,7 +965,41 @@ uint8_t do_SIB1(rrc_eNB_carrier_data_t *carrier,
(*sib1)->systemInfoValueTag = 0;
(*sib1)->nonCriticalExtension = calloc(1, sizeof(LTE_SystemInformationBlockType1_v890_IEs_t));
LTE_SystemInformationBlockType1_v890_IEs_t *sib1_890 = (*sib1)->nonCriticalExtension;
- sib1_890->lateNonCriticalExtension = NULL;
+
+ if(configuration->eutra_band[CC_id] <= 64) {
+ (*sib1)->freqBandIndicator = configuration->eutra_band[CC_id];
+ sib1_890->lateNonCriticalExtension = NULL;
+ } else {
+ (*sib1)->freqBandIndicator = 64;
+
+ sib1_890->lateNonCriticalExtension = calloc(1, sizeof(OCTET_STRING_t));
+ OCTET_STRING_t *octate = (*sib1_890).lateNonCriticalExtension;
+
+ LTE_SystemInformationBlockType1_v8h0_IEs_t *sib1_8h0 = NULL;
+ sib1_8h0 = calloc(1, sizeof(LTE_SystemInformationBlockType1_v8h0_IEs_t));
+ sib1_8h0->multiBandInfoList = NULL;
+ sib1_8h0->nonCriticalExtension = calloc(1, sizeof(LTE_SystemInformationBlockType1_v9e0_IEs_t));
+
+ long *eutra_band_ptr;
+ eutra_band_ptr = malloc(sizeof(long));
+ *eutra_band_ptr = configuration->eutra_band[CC_id];
+ LTE_SystemInformationBlockType1_v9e0_IEs_t *sib1_9e0 = sib1_8h0->nonCriticalExtension;
+ sib1_9e0->freqBandIndicator_v9e0 = eutra_band_ptr;
+ sib1_9e0->multiBandInfoList_v9e0 = NULL;
+ sib1_9e0->nonCriticalExtension = NULL;
+ char buffer_sib8h0[1024];
+ enc_rval = uper_encode_to_buffer(&asn_DEF_LTE_SystemInformationBlockType1_v8h0_IEs,
+ NULL,
+ (void *)sib1_8h0,
+ buffer_sib8h0,
+ 1024);
+ AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n",
+ enc_rval.failed_type->name, enc_rval.encoded);
+ OCTET_STRING_fromBuf(octate,(const char *)buffer_sib8h0,(enc_rval.encoded + 7) / 8);
+
+ ASN_STRUCT_FREE(asn_DEF_LTE_SystemInformationBlockType1_v8h0_IEs, sib1_8h0);
+ }
+
sib1_890->nonCriticalExtension = calloc(1, sizeof(LTE_SystemInformationBlockType1_v920_IEs_t));
memset(sib1_890->nonCriticalExtension, 0, sizeof(LTE_SystemInformationBlockType1_v920_IEs_t));
LTE_SystemInformationBlockType1_v920_IEs_t *sib1_920 = (*sib1_890).nonCriticalExtension;
diff --git a/openair2/RRC/LTE/rrc_common.c b/openair2/RRC/LTE/rrc_common.c
index be7a4048f9..5bc27147a9 100644
--- a/openair2/RRC/LTE/rrc_common.c
+++ b/openair2/RRC/LTE/rrc_common.c
@@ -203,6 +203,12 @@ static band_freq bands[] = {
{ BAND_TYPE_TDD, 41, 2496000000UL, 2690000000UL, 2496000000UL, 2690000000UL },
{ BAND_TYPE_TDD, 42, 3400000000UL, 3600000000UL, 3400000000UL, 3600000000UL },
{ BAND_TYPE_TDD, 43, 3600000000UL, 3800000000UL, 3600000000UL, 3800000000UL },
+ // ...
+ { BAND_TYPE_FDD, 65, 1920000000UL, 2010000000UL, 2110000000UL, 2200000000UL},
+ { BAND_TYPE_FDD, 66, 1710000000UL, 1780000000UL, 2110000000UL, 2200000000UL},
+ { BAND_TYPE_FDD, 71, 663000000UL, 698000000UL, 617000000UL, 652000000UL },
+ { BAND_TYPE_FDD, 72, 451000000UL, 456000000UL, 461000000UL, 466000000UL },
+ { BAND_TYPE_FDD, 73, 450000000UL, 455000000UL, 460000000UL, 466000000UL },
};
typedef struct {
@@ -250,6 +256,11 @@ static earfcn earfcn_table[] = {
{ 41, 2496000000UL, 39650, 39650, 41589, 2496000000UL, 39650, 39650, 41589 },
{ 42, 3400000000UL, 41590, 41590, 43589, 3400000000UL, 41590, 41590, 43589 },
{ 43, 3600000000UL, 43590, 43590, 45589, 3600000000UL, 43590, 43590, 45589 },
+ // ...
+ { 66, 2110000000UL, 66436, 66436, 67335, 17100000000UL, 131972, 131972, 132671},
+ { 71, 617000000UL, 68586, 68586, 68935, 6630000000UL, 133122, 133122, 133471},
+ { 72, 461000000UL, 68936, 68936, 68985, 4510000000UL, 133472, 133472, 133521},
+ { 73, 460000000UL, 68986, 68986, 69035, 4500000000UL, 133522, 133522, 133571},
};
int freq_to_arfcn10(int band, unsigned long freq) {
diff --git a/openair2/RRC/LTE/rrc_eNB.c b/openair2/RRC/LTE/rrc_eNB.c
index f30dc1932e..afdab4000f 100644
--- a/openair2/RRC/LTE/rrc_eNB.c
+++ b/openair2/RRC/LTE/rrc_eNB.c
@@ -432,7 +432,7 @@ init_SI(
.physCellId = carrier->physCellId,
.p_eNB = carrier->p_eNB,
.Ncp = carrier->Ncp,
- .eutra_band = carrier->sib1->freqBandIndicator,
+ .eutra_band = carrier->eutra_band,
.dl_CarrierFreq = carrier->dl_CarrierFreq,
.pbch_repetition = carrier->pbch_repetition,
.mib = &carrier->mib,
diff --git a/openair2/RRC/NR/L2_nr_interface.c b/openair2/RRC/NR/L2_nr_interface.c
index 0e56a5f572..4a88b153bd 100644
--- a/openair2/RRC/NR/L2_nr_interface.c
+++ b/openair2/RRC/NR/L2_nr_interface.c
@@ -162,8 +162,7 @@ int8_t nr_mac_rrc_bwp_switch_req(const module_id_t module_idP,
const rnti_t rntiP,
const int dl_bwp_id,
const int ul_bwp_id) {
-
- struct rrc_gNB_ue_context_s *ue_context_p = rrc_gNB_get_ue_context(RC.nrrrc[module_idP], rntiP);
+ rrc_gNB_ue_context_t *ue_context_p = rrc_gNB_get_ue_context_by_rnti(RC.nrrrc[module_idP], rntiP);
protocol_ctxt_t ctxt;
PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, module_idP, GNB_FLAG_YES, rntiP, frameP, sub_frameP, 0);
@@ -177,10 +176,7 @@ void nr_mac_gNB_rrc_ul_failure(const module_id_t Mod_instP,
const frame_t frameP,
const sub_frame_t subframeP,
const rnti_t rntiP) {
- struct rrc_gNB_ue_context_s *ue_context_p = NULL;
- ue_context_p = rrc_gNB_get_ue_context(
- RC.nrrrc[Mod_instP],
- rntiP);
+ rrc_gNB_ue_context_t *ue_context_p = rrc_gNB_get_ue_context_by_rnti(RC.nrrrc[Mod_instP], rntiP);
if (ue_context_p != NULL) {
LOG_D(RRC,"Frame %d, Subframe %d: UE %x UL failure, activating timer\n",frameP,subframeP,rntiP);
@@ -195,8 +191,7 @@ void nr_mac_gNB_rrc_ul_failure_reset(const module_id_t Mod_instP,
const frame_t frameP,
const sub_frame_t subframeP,
const rnti_t rntiP) {
- struct rrc_gNB_ue_context_s *ue_context_p = NULL;
- ue_context_p = rrc_gNB_get_ue_context(RC.nrrrc[Mod_instP], rntiP);
+ rrc_gNB_ue_context_t *ue_context_p = rrc_gNB_get_ue_context_by_rnti(RC.nrrrc[Mod_instP], rntiP);
if (ue_context_p != NULL) {
LOG_W(RRC,"Frame %d, Subframe %d: UE %x UL failure reset, deactivating timer\n",frameP,subframeP,rntiP);
ue_context_p->ue_context.ul_failure_timer=0;
diff --git a/openair2/RRC/NR/MESSAGES/ASN.1/extract_asn1_from_spce.pl b/openair2/RRC/NR/MESSAGES/ASN.1/extract_asn1_from_spce.pl
index bdcdef5939..e36d4d3aca 100755
--- a/openair2/RRC/NR/MESSAGES/ASN.1/extract_asn1_from_spce.pl
+++ b/openair2/RRC/NR/MESSAGES/ASN.1/extract_asn1_from_spce.pl
@@ -12,68 +12,62 @@ $NR_asn_output_file = "NR-RRC-38331.asn";
sub extract_asn1;
open(INPUT_FILE, "< $input_file") or die "Can not open file $input_file";
+open(OUTPUT_FILE, "> $NR_asn_output_file") or die "Can not open file $NR_asn_output_file";
while () {
# Process the NR-RRC-Definitions section
if( m/NR-RRC-Definitions DEFINITIONS AUTOMATIC TAGS ::=/){
- open(OUTPUT_FILE, "> $NR_asn_output_file") or die "Can not open file $NR_asn_output_file";
- syswrite OUTPUT_FILE,"$_ \n";
- syswrite OUTPUT_FILE,"BEGIN\n\n";
+ syswrite OUTPUT_FILE,"$_";
# Get all the text delimited by -- ASN1START and -- ASN1STOP
extract_asn1();
syswrite OUTPUT_FILE,"END\n\n";
- while() {
- if( m/PC5-RRC-Definitions DEFINITIONS AUTOMATIC TAGS ::=/){
- syswrite OUTPUT_FILE,"$_ \n";
- syswrite OUTPUT_FILE,"BEGIN\n\n";
+ } elsif( m/PC5-RRC-Definitions DEFINITIONS AUTOMATIC TAGS ::=/){
+ syswrite OUTPUT_FILE,"$_";
- # Get all the text delimited by -- ASN1START and -- ASN1STOP
- extract_asn1();
+ # Get all the text delimited by -- ASN1START and -- ASN1STOP
+ extract_asn1();
- syswrite OUTPUT_FILE,"END\n\n";
-
- while() {
- if( m/NR-UE-Variables DEFINITIONS AUTOMATIC TAGS ::=/){
- syswrite OUTPUT_FILE,"$_ \n";
- syswrite OUTPUT_FILE,"BEGIN\n\n";
+ syswrite OUTPUT_FILE,"END\n\n";
- # Get all the text delimited by -- ASN1START and -- ASN1STOP
- extract_asn1();
- syswrite OUTPUT_FILE,"END\n\n";
- while() {
- if( m/NR-Sidelink-Preconf DEFINITIONS AUTOMATIC TAGS ::=/){
- syswrite OUTPUT_FILE,"$_ \n";
- syswrite OUTPUT_FILE,"BEGIN\n\n";
+ } elsif( m/NR-UE-Variables DEFINITIONS AUTOMATIC TAGS ::=/){
+ syswrite OUTPUT_FILE,"$_";
- # Get all the text delimited by -- ASN1START and -- ASN1STOP
- extract_asn1();
+ # Get all the text delimited by -- ASN1START and -- ASN1STOP
+ extract_asn1();
- syswrite OUTPUT_FILE,"END\n\n";
- while() {
- if( m/NR-InterNodeDefinitions DEFINITIONS AUTOMATIC TAGS ::=/){
- syswrite OUTPUT_FILE,"$_ \n";
- syswrite OUTPUT_FILE,"BEGIN\n\n";
+ syswrite OUTPUT_FILE,"END\n\n";
- # Get all the text delimited by -- ASN1START and -- ASN1STOP
- extract_asn1();
+ } elsif( m/NR-Sidelink-Preconf DEFINITIONS AUTOMATIC TAGS ::=/){
+ syswrite OUTPUT_FILE,"$_";
- syswrite OUTPUT_FILE,"END\n\n";
- }
- }
- }
- }
- }
- }
- }
- }
- close(OUTPUT_FILE);
+ # Get all the text delimited by -- ASN1START and -- ASN1STOP
+ extract_asn1();
+
+ syswrite OUTPUT_FILE,"END\n\n";
+
+ } elsif( m/NR-Sidelink-DiscoveryMessage DEFINITIONS AUTOMATIC TAGS ::=/){
+ syswrite OUTPUT_FILE,"$_";
+
+ # Get all the text delimited by -- ASN1START and -- ASN1STOP
+ extract_asn1();
+
+ syswrite OUTPUT_FILE,"END\n\n";
+
+ } elsif( m/NR-InterNodeDefinitions DEFINITIONS AUTOMATIC TAGS ::=/){
+ syswrite OUTPUT_FILE,"$_";
+
+ # Get all the text delimited by -- ASN1START and -- ASN1STOP
+ extract_asn1();
+
+ syswrite OUTPUT_FILE,"END\n\n";
}
}
+close(OUTPUT_FILE);
close(INPUT_FILE);
# This subroutine copies the text delimited by -- ASN1START and -- ASN1STOP in INPUT_FILE
@@ -81,7 +75,7 @@ close(INPUT_FILE);
# It stops when it meets the keyword "END"
sub extract_asn1 {
my $line = ;
- my $is_asn1 = 0;
+ my $is_asn1 = 1;
while(($line ne "END\n") && ($line ne "END\r\n")){
if ($line =~ m/-- ASN1STOP/) {
diff --git a/openair2/RRC/NR/MESSAGES/ASN.1/nr-rrc-17.3.0.asn1 b/openair2/RRC/NR/MESSAGES/ASN.1/nr-rrc-17.3.0.asn1
new file mode 100644
index 0000000000..5db0502a4d
--- /dev/null
+++ b/openair2/RRC/NR/MESSAGES/ASN.1/nr-rrc-17.3.0.asn1
@@ -0,0 +1,20709 @@
+-- TAG-NR-RRC-DEFINITIONS-START
+
+NR-RRC-Definitions DEFINITIONS AUTOMATIC TAGS ::=
+
+BEGIN
+
+-- TAG-NR-RRC-DEFINITIONS-STOP
+-- TAG-BCCH-BCH-MESSAGE-START
+
+BCCH-BCH-Message ::= SEQUENCE {
+ message BCCH-BCH-MessageType
+}
+
+BCCH-BCH-MessageType ::= CHOICE {
+ mib MIB,
+ messageClassExtension SEQUENCE {}
+}
+
+-- TAG-BCCH-BCH-MESSAGE-STOP
+-- TAG-BCCH-DL-SCH-MESSAGE-START
+
+BCCH-DL-SCH-Message ::= SEQUENCE {
+ message BCCH-DL-SCH-MessageType
+}
+
+BCCH-DL-SCH-MessageType ::= CHOICE {
+ c1 CHOICE {
+ systemInformation SystemInformation,
+ systemInformationBlockType1 SIB1
+ },
+ messageClassExtension SEQUENCE {}
+}
+
+-- TAG-BCCH-DL-SCH-MESSAGE-STOP
+-- TAG-DL-CCCH-MESSAGE-START
+
+DL-CCCH-Message ::= SEQUENCE {
+ message DL-CCCH-MessageType
+}
+
+DL-CCCH-MessageType ::= CHOICE {
+ c1 CHOICE {
+ rrcReject RRCReject,
+ rrcSetup RRCSetup,
+ spare2 NULL,
+ spare1 NULL
+ },
+ messageClassExtension SEQUENCE {}
+}
+
+-- TAG-DL-CCCH-MESSAGE-STOP
+-- TAG-DL-DCCH-MESSAGE-START
+
+DL-DCCH-Message ::= SEQUENCE {
+ message DL-DCCH-MessageType
+}
+
+DL-DCCH-MessageType ::= CHOICE {
+ c1 CHOICE {
+ rrcReconfiguration RRCReconfiguration,
+ rrcResume RRCResume,
+ rrcRelease RRCRelease,
+ rrcReestablishment RRCReestablishment,
+ securityModeCommand SecurityModeCommand,
+ dlInformationTransfer DLInformationTransfer,
+ ueCapabilityEnquiry UECapabilityEnquiry,
+ counterCheck CounterCheck,
+ mobilityFromNRCommand MobilityFromNRCommand,
+ dlDedicatedMessageSegment-r16 DLDedicatedMessageSegment-r16,
+ ueInformationRequest-r16 UEInformationRequest-r16,
+ dlInformationTransferMRDC-r16 DLInformationTransferMRDC-r16,
+ loggedMeasurementConfiguration-r16 LoggedMeasurementConfiguration-r16,
+ spare3 NULL, spare2 NULL, spare1 NULL
+ },
+ messageClassExtension SEQUENCE {}
+}
+
+-- TAG-DL-DCCH-MESSAGE-STOP
+-- TAG-MCCH-MESSAGE-START
+
+MCCH-Message-r17 ::= SEQUENCE {
+ message MCCH-MessageType-r17
+}
+
+MCCH-MessageType-r17 ::= CHOICE {
+ c1 CHOICE {
+ mbsBroadcastConfiguration-r17 MBSBroadcastConfiguration-r17,
+ spare1 NULL
+ },
+ messageClassExtension SEQUENCE {}
+}
+
+-- TAG-MCCH-MESSAGE-STOP
+-- TAG-PCCH-PCH-MESSAGE-START
+
+PCCH-Message ::= SEQUENCE {
+ message PCCH-MessageType
+}
+
+PCCH-MessageType ::= CHOICE {
+ c1 CHOICE {
+ paging Paging,
+ spare1 NULL
+ },
+ messageClassExtension SEQUENCE {}
+}
+
+-- TAG-PCCH-PCH-MESSAGE-STOP
+-- TAG-UL-CCCH-MESSAGE-START
+
+
+UL-CCCH-Message ::= SEQUENCE {
+ message UL-CCCH-MessageType
+}
+
+UL-CCCH-MessageType ::= CHOICE {
+ c1 CHOICE {
+ rrcSetupRequest RRCSetupRequest,
+ rrcResumeRequest RRCResumeRequest,
+ rrcReestablishmentRequest RRCReestablishmentRequest,
+ rrcSystemInfoRequest RRCSystemInfoRequest
+ },
+ messageClassExtension SEQUENCE {}
+}
+
+-- TAG-UL-CCCH-MESSAGE-STOP
+-- TAG-UL-CCCH1-MESSAGE-START
+
+
+UL-CCCH1-Message ::= SEQUENCE {
+ message UL-CCCH1-MessageType
+}
+
+UL-CCCH1-MessageType ::= CHOICE {
+ c1 CHOICE {
+ rrcResumeRequest1 RRCResumeRequest1,
+ spare3 NULL,
+ spare2 NULL,
+ spare1 NULL
+
+ },
+ messageClassExtension SEQUENCE {}
+}
+
+-- TAG-UL-CCCH1-MESSAGE-STOP
+-- TAG-UL-DCCH-MESSAGE-START
+
+UL-DCCH-Message ::= SEQUENCE {
+ message UL-DCCH-MessageType
+}
+
+UL-DCCH-MessageType ::= CHOICE {
+ c1 CHOICE {
+ measurementReport MeasurementReport,
+ rrcReconfigurationComplete RRCReconfigurationComplete,
+ rrcSetupComplete RRCSetupComplete,
+ rrcReestablishmentComplete RRCReestablishmentComplete,
+ rrcResumeComplete RRCResumeComplete,
+ securityModeComplete SecurityModeComplete,
+ securityModeFailure SecurityModeFailure,
+ ulInformationTransfer ULInformationTransfer,
+ locationMeasurementIndication LocationMeasurementIndication,
+ ueCapabilityInformation UECapabilityInformation,
+ counterCheckResponse CounterCheckResponse,
+ ueAssistanceInformation UEAssistanceInformation,
+ failureInformation FailureInformation,
+ ulInformationTransferMRDC ULInformationTransferMRDC,
+ scgFailureInformation SCGFailureInformation,
+ scgFailureInformationEUTRA SCGFailureInformationEUTRA
+ },
+ messageClassExtension CHOICE {
+ c2 CHOICE {
+ ulDedicatedMessageSegment-r16 ULDedicatedMessageSegment-r16,
+ dedicatedSIBRequest-r16 DedicatedSIBRequest-r16,
+ mcgFailureInformation-r16 MCGFailureInformation-r16,
+ ueInformationResponse-r16 UEInformationResponse-r16,
+ sidelinkUEInformationNR-r16 SidelinkUEInformationNR-r16,
+ ulInformationTransferIRAT-r16 ULInformationTransferIRAT-r16,
+ iabOtherInformation-r16 IABOtherInformation-r16,
+ mbsInterestIndication-r17 MBSInterestIndication-r17,
+ uePositioningAssistanceInfo-r17 UEPositioningAssistanceInfo-r17,
+ measurementReportAppLayer-r17 MeasurementReportAppLayer-r17,
+ spare6 NULL, spare5 NULL, spare4 NULL, spare3 NULL, spare2 NULL, spare1 NULL
+ },
+ messageClassExtensionFuture-r16 SEQUENCE {}
+ }
+}
+
+-- TAG-UL-DCCH-MESSAGE-STOP
+-- TAG-COUNTERCHECK-START
+
+
+CounterCheck ::= SEQUENCE {
+ rrc-TransactionIdentifier RRC-TransactionIdentifier,
+ criticalExtensions CHOICE {
+ counterCheck CounterCheck-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+CounterCheck-IEs ::= SEQUENCE {
+ drb-CountMSB-InfoList DRB-CountMSB-InfoList,
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+DRB-CountMSB-InfoList ::= SEQUENCE (SIZE (1..maxDRB)) OF DRB-CountMSB-Info
+
+DRB-CountMSB-Info ::= SEQUENCE {
+ drb-Identity DRB-Identity,
+ countMSB-Uplink INTEGER(0..33554431),
+ countMSB-Downlink INTEGER(0..33554431)
+}
+
+-- TAG-COUNTERCHECK-STOP
+-- TAG-COUNTERCHECKRESPONSE-START
+
+CounterCheckResponse ::= SEQUENCE {
+ rrc-TransactionIdentifier RRC-TransactionIdentifier,
+ criticalExtensions CHOICE {
+ counterCheckResponse CounterCheckResponse-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+CounterCheckResponse-IEs ::= SEQUENCE {
+ drb-CountInfoList DRB-CountInfoList,
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+
+}
+
+DRB-CountInfoList ::= SEQUENCE (SIZE (0..maxDRB)) OF DRB-CountInfo
+
+DRB-CountInfo ::= SEQUENCE {
+ drb-Identity DRB-Identity,
+ count-Uplink INTEGER(0..4294967295),
+ count-Downlink INTEGER(0..4294967295)
+}
+
+-- TAG-COUNTERCHECKRESPONSE-STOP
+-- TAG-DEDICATEDSIBREQUEST-START
+
+DedicatedSIBRequest-r16 ::= SEQUENCE {
+ criticalExtensions CHOICE {
+ dedicatedSIBRequest-r16 DedicatedSIBRequest-r16-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+DedicatedSIBRequest-r16-IEs ::= SEQUENCE {
+ onDemandSIB-RequestList-r16 SEQUENCE {
+
+ requestedSIB-List-r16 SEQUENCE (SIZE (1..maxOnDemandSIB-r16)) OF SIB-ReqInfo-r16 OPTIONAL,
+ requestedPosSIB-List-r16 SEQUENCE (SIZE (1..maxOnDemandPosSIB-r16)) OF PosSIB-ReqInfo-r16 OPTIONAL
+ } OPTIONAL,
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+SIB-ReqInfo-r16 ::= ENUMERATED { sib12, sib13, sib14, sib20-v1700, sib21-v1700, spare3, spare2, spare1 }
+
+PosSIB-ReqInfo-r16 ::= SEQUENCE {
+ gnss-id-r16 GNSS-ID-r16 OPTIONAL,
+ sbas-id-r16 SBAS-ID-r16 OPTIONAL,
+ posSibType-r16 ENUMERATED { posSibType1-1, posSibType1-2, posSibType1-3, posSibType1-4, posSibType1-5, posSibType1-6,
+ posSibType1-7, posSibType1-8, posSibType2-1, posSibType2-2, posSibType2-3, posSibType2-4,
+ posSibType2-5, posSibType2-6, posSibType2-7, posSibType2-8, posSibType2-9, posSibType2-10,
+ posSibType2-11, posSibType2-12, posSibType2-13, posSibType2-14, posSibType2-15,
+ posSibType2-16, posSibType2-17, posSibType2-18, posSibType2-19, posSibType2-20,
+ posSibType2-21, posSibType2-22, posSibType2-23, posSibType3-1, posSibType4-1,
+ posSibType5-1, posSibType6-1, posSibType6-2, posSibType6-3,..., posSibType1-9-v1710,
+ posSibType1-10-v1710, posSibType2-24-v1710, posSibType2-25-v1710,
+ posSibType6-4-v1710, posSibType6-5-v1710, posSibType6-6-v1710 }
+}
+
+-- TAG-DEDICATEDSIBREQUEST-STOP
+-- TAG-DLDEDICATEDMESSAGESEGMENT-START
+
+
+DLDedicatedMessageSegment-r16 ::= SEQUENCE {
+ criticalExtensions CHOICE {
+ dlDedicatedMessageSegment-r16 DLDedicatedMessageSegment-r16-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+DLDedicatedMessageSegment-r16-IEs ::= SEQUENCE {
+ segmentNumber-r16 INTEGER(0..4),
+ rrc-MessageSegmentContainer-r16 OCTET STRING,
+ rrc-MessageSegmentType-r16 ENUMERATED {notLastSegment, lastSegment},
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+-- TAG-DLDEDICATEDMESSAGESEGMENT-STOP
+-- TAG-DLINFORMATIONTRANSFER-START
+
+DLInformationTransfer ::= SEQUENCE {
+ rrc-TransactionIdentifier RRC-TransactionIdentifier,
+ criticalExtensions CHOICE {
+ dlInformationTransfer DLInformationTransfer-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+DLInformationTransfer-IEs ::= SEQUENCE {
+ dedicatedNAS-Message DedicatedNAS-Message OPTIONAL, -- Need N
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension DLInformationTransfer-v1610-IEs OPTIONAL
+}
+
+DLInformationTransfer-v1610-IEs ::= SEQUENCE {
+ referenceTimeInfo-r16 ReferenceTimeInfo-r16 OPTIONAL, -- Need N
+ nonCriticalExtension DLInformationTransfer-v1700-IEs OPTIONAL
+}
+
+DLInformationTransfer-v1700-IEs ::= SEQUENCE {
+ dedicatedInfoF1c-r17 DedicatedInfoF1c-r17 OPTIONAL, -- Need N
+ rxTxTimeDiff-gNB-r17 RxTxTimeDiff-r17 OPTIONAL, -- Need N
+ ta-PDC-r17 ENUMERATED {activate,deactivate} OPTIONAL, -- Need N
+ sib9Fallback-r17 ENUMERATED {true} OPTIONAL, -- Need N
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+-- TAG-DLINFORMATIONTRANSFER-STOP
+-- TAG-DLINFORMATIONTRANSFERMRDC-START
+
+DLInformationTransferMRDC-r16 ::= SEQUENCE {
+ criticalExtensions CHOICE {
+ c1 CHOICE {
+ dlInformationTransferMRDC-r16 DLInformationTransferMRDC-r16-IEs,
+ spare3 NULL, spare2 NULL, spare1 NULL
+ },
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+DLInformationTransferMRDC-r16-IEs::= SEQUENCE {
+ dl-DCCH-MessageNR-r16 OCTET STRING OPTIONAL, -- Need N
+ dl-DCCH-MessageEUTRA-r16 OCTET STRING OPTIONAL, -- Need N
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+-- TAG-DLINFORMATIONTRANSFERMRDC-STOP
+-- TAG-FAILUREINFORMATION-START
+
+FailureInformation ::= SEQUENCE {
+ criticalExtensions CHOICE {
+ failureInformation FailureInformation-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+FailureInformation-IEs ::= SEQUENCE {
+ failureInfoRLC-Bearer FailureInfoRLC-Bearer OPTIONAL,
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension FailureInformation-v1610-IEs OPTIONAL
+}
+
+FailureInfoRLC-Bearer ::= SEQUENCE {
+ cellGroupId CellGroupId,
+ logicalChannelIdentity LogicalChannelIdentity,
+ failureType ENUMERATED {rlc-failure, spare3, spare2, spare1}
+}
+
+FailureInformation-v1610-IEs ::= SEQUENCE {
+ failureInfoDAPS-r16 FailureInfoDAPS-r16 OPTIONAL,
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+FailureInfoDAPS-r16 ::= SEQUENCE {
+ failureType-r16 ENUMERATED {daps-failure, spare3, spare2, spare1}
+}
+
+-- TAG-FAILUREINFORMATION-STOP
+-- TAG-IABOTHERINFORMATION-START
+
+IABOtherInformation-r16 ::= SEQUENCE {
+ rrc-TransactionIdentifier RRC-TransactionIdentifier,
+ criticalExtensions CHOICE {
+ iabOtherInformation-r16 IABOtherInformation-r16-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+IABOtherInformation-r16-IEs ::= SEQUENCE {
+ ip-InfoType-r16 CHOICE {
+ iab-IP-Request-r16 SEQUENCE {
+ iab-IPv4-AddressNumReq-r16 IAB-IP-AddressNumReq-r16 OPTIONAL,
+ iab-IPv6-AddressReq-r16 CHOICE {
+ iab-IPv6-AddressNumReq-r16 IAB-IP-AddressNumReq-r16,
+ iab-IPv6-AddressPrefixReq-r16 IAB-IP-AddressPrefixReq-r16,
+ ...
+ } OPTIONAL
+ },
+ iab-IP-Report-r16 SEQUENCE {
+ iab-IPv4-AddressReport-r16 IAB-IP-AddressAndTraffic-r16 OPTIONAL,
+ iab-IPv6-Report-r16 CHOICE {
+ iab-IPv6-AddressReport-r16 IAB-IP-AddressAndTraffic-r16,
+ iab-IPv6-PrefixReport-r16 IAB-IP-PrefixAndTraffic-r16,
+ ...
+ } OPTIONAL
+ },
+ ...
+ },
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+IAB-IP-AddressNumReq-r16 ::= SEQUENCE {
+ all-Traffic-NumReq-r16 INTEGER (1..8) OPTIONAL,
+ f1-C-Traffic-NumReq-r16 INTEGER (1..8) OPTIONAL,
+ f1-U-Traffic-NumReq-r16 INTEGER (1..8) OPTIONAL,
+ non-F1-Traffic-NumReq-r16 INTEGER (1..8) OPTIONAL,
+ ...
+}
+
+IAB-IP-AddressPrefixReq-r16 ::= SEQUENCE {
+ all-Traffic-PrefixReq-r16 ENUMERATED {true} OPTIONAL,
+ f1-C-Traffic-PrefixReq-r16 ENUMERATED {true} OPTIONAL,
+ f1-U-Traffic-PrefixReq-r16 ENUMERATED {true} OPTIONAL,
+ non-F1-Traffic-PrefixReq-r16 ENUMERATED {true} OPTIONAL,
+ ...
+}
+
+IAB-IP-AddressAndTraffic-r16 ::= SEQUENCE {
+ all-Traffic-IAB-IP-Address-r16 SEQUENCE (SIZE(1..8)) OF IAB-IP-Address-r16 OPTIONAL,
+ f1-C-Traffic-IP-Address-r16 SEQUENCE (SIZE(1..8)) OF IAB-IP-Address-r16 OPTIONAL,
+ f1-U-Traffic-IP-Address-r16 SEQUENCE (SIZE(1..8)) OF IAB-IP-Address-r16 OPTIONAL,
+ non-F1-Traffic-IP-Address-r16 SEQUENCE (SIZE(1..8)) OF IAB-IP-Address-r16 OPTIONAL
+}
+
+IAB-IP-PrefixAndTraffic-r16 ::= SEQUENCE {
+ all-Traffic-IAB-IP-Address-r16 IAB-IP-Address-r16 OPTIONAL,
+ f1-C-Traffic-IP-Address-r16 IAB-IP-Address-r16 OPTIONAL,
+ f1-U-Traffic-IP-Address-r16 IAB-IP-Address-r16 OPTIONAL,
+ non-F1-Traffic-IP-Address-r16 IAB-IP-Address-r16 OPTIONAL
+}
+
+-- TAG-IABOTHERINFORMATION-STOP
+-- TAG-LOCATIONMEASUREMENTINDICATION-START
+
+LocationMeasurementIndication ::= SEQUENCE {
+ criticalExtensions CHOICE {
+ locationMeasurementIndication LocationMeasurementIndication-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+LocationMeasurementIndication-IEs ::= SEQUENCE {
+ measurementIndication SetupRelease {LocationMeasurementInfo},
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension SEQUENCE{} OPTIONAL
+}
+
+-- TAG-LOCATIONMEASUREMENTINDICATION-STOP
+-- TAG-LOGGEDMEASUREMENTCONFIGURATION-START
+
+LoggedMeasurementConfiguration-r16 ::= SEQUENCE {
+ criticalExtensions CHOICE {
+ loggedMeasurementConfiguration-r16 LoggedMeasurementConfiguration-r16-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+LoggedMeasurementConfiguration-r16-IEs ::= SEQUENCE {
+ traceReference-r16 TraceReference-r16,
+ traceRecordingSessionRef-r16 OCTET STRING (SIZE (2)),
+ tce-Id-r16 OCTET STRING (SIZE (1)),
+ absoluteTimeInfo-r16 AbsoluteTimeInfo-r16,
+ areaConfiguration-r16 AreaConfiguration-r16 OPTIONAL, --Need R
+ plmn-IdentityList-r16 PLMN-IdentityList2-r16 OPTIONAL, --Need R
+ bt-NameList-r16 SetupRelease {BT-NameList-r16} OPTIONAL, --Need M
+ wlan-NameList-r16 SetupRelease {WLAN-NameList-r16} OPTIONAL, --Need M
+ sensor-NameList-r16 SetupRelease {Sensor-NameList-r16} OPTIONAL, --Need M
+ loggingDuration-r16 LoggingDuration-r16,
+ reportType CHOICE {
+ periodical LoggedPeriodicalReportConfig-r16,
+ eventTriggered LoggedEventTriggerConfig-r16,
+ ...
+ },
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension LoggedMeasurementConfiguration-v1700-IEs OPTIONAL
+}
+
+LoggedMeasurementConfiguration-v1700-IEs ::= SEQUENCE {
+ sigLoggedMeasType-r17 ENUMERATED {true} OPTIONAL, -- Need R
+ earlyMeasIndication-r17 ENUMERATED {true} OPTIONAL, -- Need R
+ areaConfiguration-v1700 AreaConfiguration-v1700 OPTIONAL, --Need R
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+LoggedPeriodicalReportConfig-r16 ::= SEQUENCE {
+ loggingInterval-r16 LoggingInterval-r16,
+ ...
+ }
+
+LoggedEventTriggerConfig-r16 ::= SEQUENCE {
+ eventType-r16 EventType-r16,
+ loggingInterval-r16 LoggingInterval-r16,
+ ...
+}
+
+EventType-r16 ::= CHOICE {
+ outOfCoverage NULL,
+ eventL1 SEQUENCE {
+ l1-Threshold MeasTriggerQuantity,
+ hysteresis Hysteresis,
+ timeToTrigger TimeToTrigger
+ },
+ ...
+}
+
+-- TAG-LOGGEDMEASUREMENTCONFIGURATION-STOP
+-- TAG-MBSBROADCASTCONFIGURATION-START
+
+MBSBroadcastConfiguration-r17 ::= SEQUENCE {
+ criticalExtensions CHOICE {
+ mbsBroadcastConfiguration-r17 MBSBroadcastConfiguration-r17-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+MBSBroadcastConfiguration-r17-IEs ::= SEQUENCE {
+ mbs-SessionInfoList-r17 MBS-SessionInfoList-r17 OPTIONAL, -- Need R
+ mbs-NeighbourCellList-r17 MBS-NeighbourCellList-r17 OPTIONAL, -- Need S
+ drx-ConfigPTM-List-r17 SEQUENCE (SIZE (1..maxNrofDRX-ConfigPTM-r17)) OF DRX-ConfigPTM-r17 OPTIONAL, -- Need R
+ pdsch-ConfigMTCH-r17 PDSCH-ConfigBroadcast-r17 OPTIONAL, -- Need S
+ mtch-SSB-MappingWindowList-r17 MTCH-SSB-MappingWindowList-r17 OPTIONAL, -- Need R
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+-- TAG-MBSBROADCASTCONFIGURATION-STOP
+-- TAG-MBSINTERESTINDICATION-START
+
+MBSInterestIndication-r17 ::= SEQUENCE {
+ criticalExtensions CHOICE {
+ mbsInterestIndication-r17 MBSInterestIndication-r17-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+MBSInterestIndication-r17-IEs ::= SEQUENCE {
+ mbs-FreqList-r17 CarrierFreqListMBS-r17 OPTIONAL,
+ mbs-Priority-r17 ENUMERATED {true} OPTIONAL,
+ mbs-ServiceList-r17 MBS-ServiceList-r17 OPTIONAL,
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+-- TAG-MBSINTERESTINDICATION-STOP
+-- TAG-MCGFAILUREINFORMATION-START
+
+MCGFailureInformation-r16 ::= SEQUENCE {
+ criticalExtensions CHOICE {
+ mcgFailureInformation-r16 MCGFailureInformation-r16-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+MCGFailureInformation-r16-IEs ::= SEQUENCE {
+ failureReportMCG-r16 FailureReportMCG-r16 OPTIONAL,
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+FailureReportMCG-r16 ::= SEQUENCE {
+ failureType-r16 ENUMERATED {t310-Expiry, randomAccessProblem, rlc-MaxNumRetx,
+ t312-Expiry-r16, lbt-Failure-r16, beamFailureRecoveryFailure-r16,
+ bh-RLF-r16, spare1} OPTIONAL,
+ measResultFreqList-r16 MeasResultList2NR OPTIONAL,
+ measResultFreqListEUTRA-r16 MeasResultList2EUTRA OPTIONAL,
+ measResultSCG-r16 OCTET STRING (CONTAINING MeasResultSCG-Failure) OPTIONAL,
+ measResultSCG-EUTRA-r16 OCTET STRING OPTIONAL,
+ measResultFreqListUTRA-FDD-r16 MeasResultList2UTRA OPTIONAL,
+ ...
+}
+
+MeasResultList2UTRA ::= SEQUENCE (SIZE (1..maxFreq)) OF MeasResult2UTRA-FDD-r16
+
+MeasResult2UTRA-FDD-r16 ::= SEQUENCE {
+ carrierFreq-r16 ARFCN-ValueUTRA-FDD-r16,
+ measResultNeighCellList-r16 MeasResultListUTRA-FDD-r16
+}
+
+MeasResultList2EUTRA ::= SEQUENCE (SIZE (1..maxFreq)) OF MeasResult2EUTRA-r16
+
+-- TAG-MCGFAILUREINFORMATION-STOP
+-- TAG-MEASUREMENTREPORT-START
+
+MeasurementReport ::= SEQUENCE {
+ criticalExtensions CHOICE {
+ measurementReport MeasurementReport-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+MeasurementReport-IEs ::= SEQUENCE {
+ measResults MeasResults,
+
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension SEQUENCE{} OPTIONAL
+}
+
+-- TAG-MEASUREMENTREPORT-STOP
+-- TAG-MEASUREMENTREPORTAPPLAYER-START
+
+MeasurementReportAppLayer-r17 ::= SEQUENCE {
+ criticalExtensions CHOICE {
+ measurementReportAppLayer-r17 MeasurementReportAppLayer-r17-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+MeasurementReportAppLayer-r17-IEs ::= SEQUENCE {
+ measurementReportAppLayerList-r17 MeasurementReportAppLayerList-r17,
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension SEQUENCE{} OPTIONAL
+}
+
+MeasurementReportAppLayerList-r17 ::= SEQUENCE (SIZE (1..maxNrofAppLayerMeas-r17)) OF MeasReportAppLayer-r17
+
+MeasReportAppLayer-r17 ::= SEQUENCE {
+ measConfigAppLayerId-r17 MeasConfigAppLayerId-r17,
+ measReportAppLayerContainer-r17 OCTET STRING OPTIONAL,
+ appLayerSessionStatus-r17 ENUMERATED {started, stopped} OPTIONAL,
+ ran-VisibleMeasurements-r17 RAN-VisibleMeasurements-r17 OPTIONAL
+}
+
+RAN-VisibleMeasurements-r17 ::= SEQUENCE {
+ appLayerBufferLevelList-r17 SEQUENCE (SIZE (1..8)) OF AppLayerBufferLevel-r17 OPTIONAL,
+ playoutDelayForMediaStartup-r17 INTEGER (0..30000) OPTIONAL,
+ pdu-SessionIdList-r17 SEQUENCE (SIZE (1..maxNrofPDU-Sessions-r17)) OF PDU-SessionID OPTIONAL,
+ ...
+}
+
+AppLayerBufferLevel-r17 ::= INTEGER (0..30000)
+
+-- TAG-MEASUREMENTREPORTAPPLAYER-STOP
+-- TAG-MIB-START
+
+MIB ::= SEQUENCE {
+ systemFrameNumber BIT STRING (SIZE (6)),
+ subCarrierSpacingCommon ENUMERATED {scs15or60, scs30or120},
+ ssb-SubcarrierOffset INTEGER (0..15),
+ dmrs-TypeA-Position ENUMERATED {pos2, pos3},
+ pdcch-ConfigSIB1 PDCCH-ConfigSIB1,
+ cellBarred ENUMERATED {barred, notBarred},
+ intraFreqReselection ENUMERATED {allowed, notAllowed},
+ spare BIT STRING (SIZE (1))
+}
+
+-- TAG-MIB-STOP
+-- TAG-MOBILITYFROMNRCOMMAND-START
+
+MobilityFromNRCommand ::= SEQUENCE {
+ rrc-TransactionIdentifier RRC-TransactionIdentifier,
+ criticalExtensions CHOICE {
+ mobilityFromNRCommand MobilityFromNRCommand-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+MobilityFromNRCommand-IEs ::= SEQUENCE {
+ targetRAT-Type ENUMERATED { eutra, utra-fdd-v1610, spare2, spare1, ...},
+ targetRAT-MessageContainer OCTET STRING,
+ nas-SecurityParamFromNR OCTET STRING OPTIONAL, -- Cond HO-ToEPCUTRAN
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension MobilityFromNRCommand-v1610-IEs OPTIONAL
+}
+
+MobilityFromNRCommand-v1610-IEs ::= SEQUENCE {
+ voiceFallbackIndication-r16 ENUMERATED {true} OPTIONAL, -- Need N
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+-- TAG-MOBILITYFROMNRCOMMAND-STOP
+-- TAG-PAGING-START
+
+Paging ::= SEQUENCE {
+ pagingRecordList PagingRecordList OPTIONAL, -- Need N
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension Paging-v1700-IEs OPTIONAL
+}
+
+Paging-v1700-IEs ::= SEQUENCE {
+ pagingRecordList-v1700 PagingRecordList-v1700 OPTIONAL, -- Need N
+ pagingGroupList-r17 PagingGroupList-r17 OPTIONAL, -- Need N
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+PagingRecordList ::= SEQUENCE (SIZE(1..maxNrofPageRec)) OF PagingRecord
+
+PagingRecordList-v1700 ::= SEQUENCE (SIZE(1..maxNrofPageRec)) OF PagingRecord-v1700
+
+PagingGroupList-r17 ::= SEQUENCE (SIZE(1..maxNrofPageGroup-r17)) OF TMGI-r17
+
+PagingRecord ::= SEQUENCE {
+ ue-Identity PagingUE-Identity,
+ accessType ENUMERATED {non3GPP} OPTIONAL, -- Need N
+ ...
+}
+
+PagingRecord-v1700 ::= SEQUENCE {
+ pagingCause-r17 ENUMERATED {voice} OPTIONAL -- Need N
+}
+
+PagingUE-Identity ::= CHOICE {
+ ng-5G-S-TMSI NG-5G-S-TMSI,
+ fullI-RNTI I-RNTI-Value,
+ ...
+}
+
+-- TAG-PAGING-STOP
+-- TAG-RRCREESTABLISHMENT-START
+
+RRCReestablishment ::= SEQUENCE {
+ rrc-TransactionIdentifier RRC-TransactionIdentifier,
+ criticalExtensions CHOICE {
+ rrcReestablishment RRCReestablishment-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+RRCReestablishment-IEs ::= SEQUENCE {
+ nextHopChainingCount NextHopChainingCount,
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension RRCReestablishment-v1700-IEs OPTIONAL
+}
+
+RRCReestablishment-v1700-IEs ::= SEQUENCE {
+ sl-L2RemoteUE-Config-r17 SetupRelease {SL-L2RemoteUE-Config-r17} OPTIONAL, -- Cond L2RemoteUE
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+-- TAG-RRCREESTABLISHMENT-STOP
+-- TAG-RRCREESTABLISHMENTCOMPLETE-START
+
+RRCReestablishmentComplete ::= SEQUENCE {
+ rrc-TransactionIdentifier RRC-TransactionIdentifier,
+ criticalExtensions CHOICE {
+ rrcReestablishmentComplete RRCReestablishmentComplete-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+RRCReestablishmentComplete-IEs ::= SEQUENCE {
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension RRCReestablishmentComplete-v1610-IEs OPTIONAL
+}
+
+RRCReestablishmentComplete-v1610-IEs ::= SEQUENCE {
+ ue-MeasurementsAvailable-r16 UE-MeasurementsAvailable-r16 OPTIONAL,
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+-- TAG-RRCREESTABLISHMENTCOMPLETE-STOP
+-- TAG-RRCREESTABLISHMENTREQUEST-START
+
+
+RRCReestablishmentRequest ::= SEQUENCE {
+ rrcReestablishmentRequest RRCReestablishmentRequest-IEs
+}
+
+RRCReestablishmentRequest-IEs ::= SEQUENCE {
+ ue-Identity ReestabUE-Identity,
+ reestablishmentCause ReestablishmentCause,
+ spare BIT STRING (SIZE (1))
+}
+
+ReestabUE-Identity ::= SEQUENCE {
+ c-RNTI RNTI-Value,
+ physCellId PhysCellId,
+ shortMAC-I ShortMAC-I
+}
+
+ReestablishmentCause ::= ENUMERATED {reconfigurationFailure, handoverFailure, otherFailure, spare1}
+
+-- TAG-RRCREESTABLISHMENTREQUEST-STOP
+-- TAG-RRCRECONFIGURATION-START
+
+RRCReconfiguration ::= SEQUENCE {
+ rrc-TransactionIdentifier RRC-TransactionIdentifier,
+ criticalExtensions CHOICE {
+ rrcReconfiguration RRCReconfiguration-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+RRCReconfiguration-IEs ::= SEQUENCE {
+ radioBearerConfig RadioBearerConfig OPTIONAL, -- Need M
+ secondaryCellGroup OCTET STRING (CONTAINING CellGroupConfig) OPTIONAL, -- Cond SCG
+ measConfig MeasConfig OPTIONAL, -- Need M
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension RRCReconfiguration-v1530-IEs OPTIONAL
+}
+
+RRCReconfiguration-v1530-IEs ::= SEQUENCE {
+ masterCellGroup OCTET STRING (CONTAINING CellGroupConfig) OPTIONAL, -- Need M
+ fullConfig ENUMERATED {true} OPTIONAL, -- Cond FullConfig
+ dedicatedNAS-MessageList SEQUENCE (SIZE(1..maxDRB)) OF DedicatedNAS-Message OPTIONAL, -- Cond nonHO
+ masterKeyUpdate MasterKeyUpdate OPTIONAL, -- Cond MasterKeyChange
+ dedicatedSIB1-Delivery OCTET STRING (CONTAINING SIB1) OPTIONAL, -- Need N
+ dedicatedSystemInformationDelivery OCTET STRING (CONTAINING SystemInformation) OPTIONAL, -- Need N
+ otherConfig OtherConfig OPTIONAL, -- Need M
+ nonCriticalExtension RRCReconfiguration-v1540-IEs OPTIONAL
+}
+
+RRCReconfiguration-v1540-IEs ::= SEQUENCE {
+ otherConfig-v1540 OtherConfig-v1540 OPTIONAL, -- Need M
+ nonCriticalExtension RRCReconfiguration-v1560-IEs OPTIONAL
+}
+
+RRCReconfiguration-v1560-IEs ::= SEQUENCE {
+ mrdc-SecondaryCellGroupConfig SetupRelease { MRDC-SecondaryCellGroupConfig } OPTIONAL, -- Need M
+ radioBearerConfig2 OCTET STRING (CONTAINING RadioBearerConfig) OPTIONAL, -- Need M
+ sk-Counter SK-Counter OPTIONAL, -- Need N
+ nonCriticalExtension RRCReconfiguration-v1610-IEs OPTIONAL
+}
+RRCReconfiguration-v1610-IEs ::= SEQUENCE {
+ otherConfig-v1610 OtherConfig-v1610 OPTIONAL, -- Need M
+ bap-Config-r16 SetupRelease { BAP-Config-r16 } OPTIONAL, -- Need M
+ iab-IP-AddressConfigurationList-r16 IAB-IP-AddressConfigurationList-r16 OPTIONAL, -- Need M
+ conditionalReconfiguration-r16 ConditionalReconfiguration-r16 OPTIONAL, -- Need M
+ daps-SourceRelease-r16 ENUMERATED{true} OPTIONAL, -- Need N
+ t316-r16 SetupRelease {T316-r16} OPTIONAL, -- Need M
+ needForGapsConfigNR-r16 SetupRelease {NeedForGapsConfigNR-r16} OPTIONAL, -- Need M
+ onDemandSIB-Request-r16 SetupRelease { OnDemandSIB-Request-r16 } OPTIONAL, -- Need M
+ dedicatedPosSysInfoDelivery-r16 OCTET STRING (CONTAINING PosSystemInformation-r16-IEs) OPTIONAL, -- Need N
+ sl-ConfigDedicatedNR-r16 SetupRelease {SL-ConfigDedicatedNR-r16} OPTIONAL, -- Need M
+ sl-ConfigDedicatedEUTRA-Info-r16 SetupRelease {SL-ConfigDedicatedEUTRA-Info-r16} OPTIONAL, -- Need M
+ targetCellSMTC-SCG-r16 SSB-MTC OPTIONAL, -- Need S
+ nonCriticalExtension RRCReconfiguration-v1700-IEs OPTIONAL
+}
+
+RRCReconfiguration-v1700-IEs ::= SEQUENCE {
+ otherConfig-v1700 OtherConfig-v1700 OPTIONAL, -- Need M
+ sl-L2RelayUE-Config-r17 SetupRelease { SL-L2RelayUE-Config-r17 } OPTIONAL, -- Need M
+ sl-L2RemoteUE-Config-r17 SetupRelease { SL-L2RemoteUE-Config-r17 } OPTIONAL, -- Need M
+ dedicatedPagingDelivery-r17 OCTET STRING (CONTAINING Paging) OPTIONAL, -- Cond PagingRelay
+ needForGapNCSG-ConfigNR-r17 SetupRelease {NeedForGapNCSG-ConfigNR-r17} OPTIONAL, -- Need M
+ needForGapNCSG-ConfigEUTRA-r17 SetupRelease {NeedForGapNCSG-ConfigEUTRA-r17} OPTIONAL, -- Need M
+ musim-GapConfig-r17 SetupRelease {MUSIM-GapConfig-r17} OPTIONAL, -- Need M
+ ul-GapFR2-Config-r17 SetupRelease { UL-GapFR2-Config-r17 } OPTIONAL, -- Need M
+ scg-State-r17 ENUMERATED { deactivated } OPTIONAL, -- Need N
+ appLayerMeasConfig-r17 AppLayerMeasConfig-r17 OPTIONAL, -- Need M
+ ue-TxTEG-RequestUL-TDOA-Config-r17 SetupRelease {UE-TxTEG-RequestUL-TDOA-Config-r17} OPTIONAL, -- Need M
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+MRDC-SecondaryCellGroupConfig ::= SEQUENCE {
+ mrdc-ReleaseAndAdd ENUMERATED {true} OPTIONAL, -- Need N
+ mrdc-SecondaryCellGroup CHOICE {
+ nr-SCG OCTET STRING (CONTAINING RRCReconfiguration),
+ eutra-SCG OCTET STRING
+ }
+}
+
+BAP-Config-r16 ::= SEQUENCE {
+ bap-Address-r16 BIT STRING (SIZE (10)) OPTIONAL, -- Need M
+ defaultUL-BAP-RoutingID-r16 BAP-RoutingID-r16 OPTIONAL, -- Need M
+ defaultUL-BH-RLC-Channel-r16 BH-RLC-ChannelID-r16 OPTIONAL, -- Need M
+ flowControlFeedbackType-r16 ENUMERATED {perBH-RLC-Channel, perRoutingID, both} OPTIONAL, -- Need R
+ ...
+}
+
+MasterKeyUpdate ::= SEQUENCE {
+ keySetChangeIndicator BOOLEAN,
+ nextHopChainingCount NextHopChainingCount,
+ nas-Container OCTET STRING OPTIONAL, -- Cond securityNASC
+ ...
+}
+
+OnDemandSIB-Request-r16 ::= SEQUENCE {
+ onDemandSIB-RequestProhibitTimer-r16 ENUMERATED {s0, s0dot5, s1, s2, s5, s10, s20, s30}
+}
+
+T316-r16 ::= ENUMERATED {ms50, ms100, ms200, ms300, ms400, ms500, ms600, ms1000, ms1500, ms2000}
+
+IAB-IP-AddressConfigurationList-r16 ::= SEQUENCE {
+ iab-IP-AddressToAddModList-r16 SEQUENCE (SIZE(1..maxIAB-IP-Address-r16)) OF IAB-IP-AddressConfiguration-r16 OPTIONAL, -- Need N
+ iab-IP-AddressToReleaseList-r16 SEQUENCE (SIZE(1..maxIAB-IP-Address-r16)) OF IAB-IP-AddressIndex-r16 OPTIONAL, -- Need N
+ ...
+}
+
+IAB-IP-AddressConfiguration-r16 ::= SEQUENCE {
+ iab-IP-AddressIndex-r16 IAB-IP-AddressIndex-r16,
+ iab-IP-Address-r16 IAB-IP-Address-r16 OPTIONAL, -- Need M
+ iab-IP-Usage-r16 IAB-IP-Usage-r16 OPTIONAL, -- Need M
+ iab-donor-DU-BAP-Address-r16 BIT STRING (SIZE(10)) OPTIONAL, -- Need M
+...
+}
+
+SL-ConfigDedicatedEUTRA-Info-r16 ::= SEQUENCE {
+ sl-ConfigDedicatedEUTRA-r16 OCTET STRING OPTIONAL, -- Need M
+ sl-TimeOffsetEUTRA-List-r16 SEQUENCE (SIZE (8)) OF SL-TimeOffsetEUTRA-r16 OPTIONAL -- Need M
+}
+
+SL-TimeOffsetEUTRA-r16 ::= ENUMERATED {ms0, ms0dot25, ms0dot5, ms0dot625, ms0dot75, ms1, ms1dot25, ms1dot5, ms1dot75,
+ ms2, ms2dot5, ms3, ms4, ms5, ms6, ms8, ms10, ms20}
+
+UE-TxTEG-RequestUL-TDOA-Config-r17 ::= CHOICE {
+ oneShot-r17 NULL,
+ periodicReporting-r17 ENUMERATED { ms160, ms320, ms1280, ms2560, ms61440, ms81920, ms368640, ms737280 }
+}
+-- TAG-RRCRECONFIGURATION-STOP
+-- TAG-RRCRECONFIGURATIONCOMPLETE-START
+
+RRCReconfigurationComplete ::= SEQUENCE {
+ rrc-TransactionIdentifier RRC-TransactionIdentifier,
+ criticalExtensions CHOICE {
+ rrcReconfigurationComplete RRCReconfigurationComplete-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+RRCReconfigurationComplete-IEs ::= SEQUENCE {
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension RRCReconfigurationComplete-v1530-IEs OPTIONAL
+}
+
+RRCReconfigurationComplete-v1530-IEs ::= SEQUENCE {
+ uplinkTxDirectCurrentList UplinkTxDirectCurrentList OPTIONAL,
+ nonCriticalExtension RRCReconfigurationComplete-v1560-IEs OPTIONAL
+}
+
+RRCReconfigurationComplete-v1560-IEs ::= SEQUENCE {
+ scg-Response CHOICE {
+ nr-SCG-Response OCTET STRING (CONTAINING RRCReconfigurationComplete),
+ eutra-SCG-Response OCTET STRING
+ } OPTIONAL,
+ nonCriticalExtension RRCReconfigurationComplete-v1610-IEs OPTIONAL
+}
+
+RRCReconfigurationComplete-v1610-IEs ::= SEQUENCE {
+ ue-MeasurementsAvailable-r16 UE-MeasurementsAvailable-r16 OPTIONAL,
+ needForGapsInfoNR-r16 NeedForGapsInfoNR-r16 OPTIONAL,
+ nonCriticalExtension RRCReconfigurationComplete-v1640-IEs OPTIONAL
+}
+
+RRCReconfigurationComplete-v1640-IEs ::= SEQUENCE {
+ uplinkTxDirectCurrentTwoCarrierList-r16 UplinkTxDirectCurrentTwoCarrierList-r16 OPTIONAL,
+ nonCriticalExtension RRCReconfigurationComplete-v1700-IEs OPTIONAL
+}
+
+RRCReconfigurationComplete-v1700-IEs ::= SEQUENCE {
+ needForGapNCSG-InfoNR-r17 NeedForGapNCSG-InfoNR-r17 OPTIONAL,
+ needForGapNCSG-InfoEUTRA-r17 NeedForGapNCSG-InfoEUTRA-r17 OPTIONAL,
+ selectedCondRRCReconfig-r17 CondReconfigId-r16 OPTIONAL,
+ nonCriticalExtension RRCReconfigurationComplete-v1720-IEs OPTIONAL
+}
+
+RRCReconfigurationComplete-v1720-IEs ::= SEQUENCE {
+ uplinkTxDirectCurrentMoreCarrierList-r17 UplinkTxDirectCurrentMoreCarrierList-r17 OPTIONAL,
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+-- TAG-RRCRECONFIGURATIONCOMPLETE-STOP
+-- TAG-RRCREJECT-START
+
+RRCReject ::= SEQUENCE {
+ criticalExtensions CHOICE {
+ rrcReject RRCReject-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+RRCReject-IEs ::= SEQUENCE {
+ waitTime RejectWaitTime OPTIONAL, -- Need N
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension SEQUENCE{} OPTIONAL
+}
+
+-- TAG-RRCREJECT-STOP
+-- TAG-RRCRELEASE-START
+
+RRCRelease ::= SEQUENCE {
+ rrc-TransactionIdentifier RRC-TransactionIdentifier,
+ criticalExtensions CHOICE {
+ rrcRelease RRCRelease-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+RRCRelease-IEs ::= SEQUENCE {
+ redirectedCarrierInfo RedirectedCarrierInfo OPTIONAL, -- Need N
+ cellReselectionPriorities CellReselectionPriorities OPTIONAL, -- Need R
+ suspendConfig SuspendConfig OPTIONAL, -- Need R
+ deprioritisationReq SEQUENCE {
+ deprioritisationType ENUMERATED {frequency, nr},
+ deprioritisationTimer ENUMERATED {min5, min10, min15, min30}
+ } OPTIONAL, -- Need N
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension RRCRelease-v1540-IEs OPTIONAL
+}
+
+RRCRelease-v1540-IEs ::= SEQUENCE {
+ waitTime RejectWaitTime OPTIONAL, -- Need N
+ nonCriticalExtension RRCRelease-v1610-IEs OPTIONAL
+}
+
+RRCRelease-v1610-IEs ::= SEQUENCE {
+ voiceFallbackIndication-r16 ENUMERATED {true} OPTIONAL, -- Need N
+ measIdleConfig-r16 SetupRelease {MeasIdleConfigDedicated-r16} OPTIONAL, -- Need M
+ nonCriticalExtension RRCRelease-v1650-IEs OPTIONAL
+}
+
+RRCRelease-v1650-IEs ::= SEQUENCE {
+ mpsPriorityIndication-r16 ENUMERATED {true} OPTIONAL, -- Cond Redirection2
+ nonCriticalExtension RRCRelease-v1710-IEs OPTIONAL
+}
+
+RRCRelease-v1710-IEs ::= SEQUENCE {
+ noLastCellUpdate-r17 ENUMERATED {true} OPTIONAL, -- Need S
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+RedirectedCarrierInfo ::= CHOICE {
+ nr CarrierInfoNR,
+ eutra RedirectedCarrierInfo-EUTRA,
+ ...
+}
+
+RedirectedCarrierInfo-EUTRA ::= SEQUENCE {
+ eutraFrequency ARFCN-ValueEUTRA,
+ cnType ENUMERATED {epc,fiveGC} OPTIONAL -- Need N
+}
+
+CarrierInfoNR ::= SEQUENCE {
+ carrierFreq ARFCN-ValueNR,
+ ssbSubcarrierSpacing SubcarrierSpacing,
+ smtc SSB-MTC OPTIONAL, -- Need S
+ ...
+}
+
+SuspendConfig ::= SEQUENCE {
+ fullI-RNTI I-RNTI-Value,
+ shortI-RNTI ShortI-RNTI-Value,
+ ran-PagingCycle PagingCycle,
+ ran-NotificationAreaInfo RAN-NotificationAreaInfo OPTIONAL, -- Need M
+ t380 PeriodicRNAU-TimerValue OPTIONAL, -- Need R
+ nextHopChainingCount NextHopChainingCount,
+ ...,
+ [[
+ sl-UEIdentityRemote-r17 RNTI-Value OPTIONAL, -- Cond L2RemoteUE
+ sdt-Config-r17 SetupRelease { SDT-Config-r17 } OPTIONAL, -- Need M
+ srs-PosRRC-Inactive-r17 SetupRelease { SRS-PosRRC-Inactive-r17 } OPTIONAL, -- Need M
+ ran-ExtendedPagingCycle-r17 ExtendedPagingCycle-r17 OPTIONAL -- Cond RANPaging
+ ]]
+}
+
+PeriodicRNAU-TimerValue ::= ENUMERATED { min5, min10, min20, min30, min60, min120, min360, min720}
+
+CellReselectionPriorities ::= SEQUENCE {
+ freqPriorityListEUTRA FreqPriorityListEUTRA OPTIONAL, -- Need M
+ freqPriorityListNR FreqPriorityListNR OPTIONAL, -- Need M
+ t320 ENUMERATED {min5, min10, min20, min30, min60, min120, min180, spare1} OPTIONAL, -- Need R
+ ...,
+ [[
+ freqPriorityListDedicatedSlicing-r17 FreqPriorityListDedicatedSlicing-r17 OPTIONAL -- Need M
+ ]]
+}
+
+PagingCycle ::= ENUMERATED {rf32, rf64, rf128, rf256}
+
+ExtendedPagingCycle-r17 ::= ENUMERATED {rf256, rf512, rf1024, spare1}
+
+FreqPriorityListEUTRA ::= SEQUENCE (SIZE (1..maxFreq)) OF FreqPriorityEUTRA
+
+FreqPriorityListNR ::= SEQUENCE (SIZE (1..maxFreq)) OF FreqPriorityNR
+
+FreqPriorityEUTRA ::= SEQUENCE {
+ carrierFreq ARFCN-ValueEUTRA,
+ cellReselectionPriority CellReselectionPriority,
+ cellReselectionSubPriority CellReselectionSubPriority OPTIONAL -- Need R
+}
+
+FreqPriorityNR ::= SEQUENCE {
+ carrierFreq ARFCN-ValueNR,
+ cellReselectionPriority CellReselectionPriority,
+ cellReselectionSubPriority CellReselectionSubPriority OPTIONAL -- Need R
+}
+
+RAN-NotificationAreaInfo ::= CHOICE {
+ cellList PLMN-RAN-AreaCellList,
+ ran-AreaConfigList PLMN-RAN-AreaConfigList,
+ ...
+}
+
+PLMN-RAN-AreaCellList ::= SEQUENCE (SIZE (1.. maxPLMNIdentities)) OF PLMN-RAN-AreaCell
+
+PLMN-RAN-AreaCell ::= SEQUENCE {
+ plmn-Identity PLMN-Identity OPTIONAL, -- Need S
+ ran-AreaCells SEQUENCE (SIZE (1..32)) OF CellIdentity
+}
+
+PLMN-RAN-AreaConfigList ::= SEQUENCE (SIZE (1..maxPLMNIdentities)) OF PLMN-RAN-AreaConfig
+
+PLMN-RAN-AreaConfig ::= SEQUENCE {
+ plmn-Identity PLMN-Identity OPTIONAL, -- Need S
+ ran-Area SEQUENCE (SIZE (1..16)) OF RAN-AreaConfig
+}
+
+RAN-AreaConfig ::= SEQUENCE {
+ trackingAreaCode TrackingAreaCode,
+ ran-AreaCodeList SEQUENCE (SIZE (1..32)) OF RAN-AreaCode OPTIONAL -- Need R
+}
+
+SDT-Config-r17 ::= SEQUENCE {
+ sdt-DRB-List-r17 SEQUENCE (SIZE (0..maxDRB)) OF DRB-Identity OPTIONAL, -- Need M
+ sdt-SRB2-Indication-r17 ENUMERATED {allowed} OPTIONAL, -- Need R
+ sdt-MAC-PHY-CG-Config-r17 SetupRelease {SDT-CG-Config-r17} OPTIONAL, -- Need M
+ sdt-DRB-ContinueROHC-r17 ENUMERATED { cell, rna } OPTIONAL -- Need S
+}
+
+SDT-CG-Config-r17 ::= OCTET STRING (CONTAINING SDT-MAC-PHY-CG-Config-r17)
+
+SDT-MAC-PHY-CG-Config-r17 ::= SEQUENCE {
+ -- CG-SDT specific configuration
+ cg-SDT-ConfigLCH-RestrictionToAddModList-r17 SEQUENCE (SIZE(1..maxLC-ID)) OF CG-SDT-ConfigLCH-Restriction-r17 OPTIONAL, -- Need N
+ cg-SDT-ConfigLCH-RestrictionToReleaseList-r17 SEQUENCE (SIZE(1..maxLC-ID)) OF LogicalChannelIdentity OPTIONAL, -- Need N
+ cg-SDT-ConfigInitialBWP-NUL-r17 SetupRelease {BWP-UplinkDedicatedSDT-r17} OPTIONAL, -- Need M
+ cg-SDT-ConfigInitialBWP-SUL-r17 SetupRelease {BWP-UplinkDedicatedSDT-r17} OPTIONAL, -- Need M
+ cg-SDT-ConfigInitialBWP-DL-r17 BWP-DownlinkDedicatedSDT-r17 OPTIONAL, -- Need M
+ cg-SDT-TimeAlignmentTimer-r17 TimeAlignmentTimer OPTIONAL, -- Need M
+ cg-SDT-RSRP-ThresholdSSB-r17 RSRP-Range OPTIONAL, -- Need M
+ cg-SDT-TA-ValidationConfig-r17 SetupRelease { CG-SDT-TA-ValidationConfig-r17 } OPTIONAL, -- Need M
+ cg-SDT-CS-RNTI-r17 RNTI-Value OPTIONAL, -- Need M
+ ...
+}
+
+CG-SDT-TA-ValidationConfig-r17 ::= SEQUENCE {
+ cg-SDT-RSRP-ChangeThreshold-r17 ENUMERATED { dB2, dB4, dB6, dB8, dB10, dB14, dB18, dB22,
+ dB26, dB30, dB34, spare5, spare4, spare3, spare2, spare1}
+}
+
+BWP-DownlinkDedicatedSDT-r17 ::= SEQUENCE {
+ pdcch-Config-r17 SetupRelease { PDCCH-Config } OPTIONAL, -- Need M
+ pdsch-Config-r17 SetupRelease { PDSCH-Config } OPTIONAL, -- Need M
+ ...
+}
+
+BWP-UplinkDedicatedSDT-r17 ::= SEQUENCE {
+ pusch-Config-r17 SetupRelease { PUSCH-Config } OPTIONAL, -- Need M
+ configuredGrantConfigToAddModList-r17 ConfiguredGrantConfigToAddModList-r16 OPTIONAL, -- Need N
+ configuredGrantConfigToReleaseList-r17 ConfiguredGrantConfigToReleaseList-r16 OPTIONAL, -- Need N
+ ...
+}
+
+CG-SDT-ConfigLCH-Restriction-r17 ::= SEQUENCE {
+ logicalChannelIdentity-r17 LogicalChannelIdentity,
+ configuredGrantType1Allowed-r17 ENUMERATED {true} OPTIONAL, -- Need R
+ allowedCG-List-r17 SEQUENCE (SIZE (0.. maxNrofConfiguredGrantConfigMAC-1-r16)) OF ConfiguredGrantConfigIndexMAC-r16
+ OPTIONAL -- Need R
+}
+
+SRS-PosRRC-Inactive-r17 ::= OCTET STRING (CONTAINING SRS-PosRRC-InactiveConfig-r17)
+
+SRS-PosRRC-InactiveConfig-r17 ::= SEQUENCE {
+ srs-PosConfigNUL-r17 SRS-PosConfig-r17 OPTIONAL, -- Need R
+ srs-PosConfigSUL-r17 SRS-PosConfig-r17 OPTIONAL, -- Need R
+ bwp-NUL-r17 BWP OPTIONAL, -- Need S
+ bwp-SUL-r17 BWP OPTIONAL, -- Need S
+ inactivePosSRS-TimeAlignmentTimer-r17 TimeAlignmentTimer OPTIONAL, -- Need M
+ inactivePosSRS-RSRP-ChangeThreshold-r17 RSRP-ChangeThreshold-r17 OPTIONAL -- Need M
+}
+
+RSRP-ChangeThreshold-r17 ::= ENUMERATED {dB4, dB6, dB8, dB10, dB14, dB18, dB22, dB26, dB30, dB34, spare6, spare5, spare4, spare3, spare2, spare1}
+
+SRS-PosConfig-r17 ::= SEQUENCE {
+ srs-PosResourceSetToReleaseList-r17 SEQUENCE (SIZE(1..maxNrofSRS-PosResourceSets-r16)) OF SRS-PosResourceSetId-r16 OPTIONAL,-- Need N
+ srs-PosResourceSetToAddModList-r17 SEQUENCE (SIZE(1..maxNrofSRS-PosResourceSets-r16)) OF SRS-PosResourceSet-r16 OPTIONAL,-- Need N
+ srs-PosResourceToReleaseList-r17 SEQUENCE (SIZE(1..maxNrofSRS-PosResources-r16)) OF SRS-PosResourceId-r16 OPTIONAL,-- Need N
+ srs-PosResourceToAddModList-r17 SEQUENCE (SIZE(1..maxNrofSRS-PosResources-r16)) OF SRS-PosResource-r16 OPTIONAL -- Need N
+}
+
+-- TAG-RRCRELEASE-STOP
+-- TAG-RRCRESUME-START
+
+RRCResume ::= SEQUENCE {
+ rrc-TransactionIdentifier RRC-TransactionIdentifier,
+ criticalExtensions CHOICE {
+ rrcResume RRCResume-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+RRCResume-IEs ::= SEQUENCE {
+ radioBearerConfig RadioBearerConfig OPTIONAL, -- Need M
+ masterCellGroup OCTET STRING (CONTAINING CellGroupConfig) OPTIONAL, -- Need M
+ measConfig MeasConfig OPTIONAL, -- Need M
+ fullConfig ENUMERATED {true} OPTIONAL, -- Need N
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension RRCResume-v1560-IEs OPTIONAL
+}
+
+RRCResume-v1560-IEs ::= SEQUENCE {
+ radioBearerConfig2 OCTET STRING (CONTAINING RadioBearerConfig) OPTIONAL, -- Need M
+ sk-Counter SK-Counter OPTIONAL, -- Need N
+ nonCriticalExtension RRCResume-v1610-IEs OPTIONAL
+}
+
+RRCResume-v1610-IEs ::= SEQUENCE {
+ idleModeMeasurementReq-r16 ENUMERATED {true} OPTIONAL, -- Need N
+ restoreMCG-SCells-r16 ENUMERATED {true} OPTIONAL, -- Need N
+ restoreSCG-r16 ENUMERATED {true} OPTIONAL, -- Need N
+ mrdc-SecondaryCellGroup-r16 CHOICE {
+ nr-SCG-r16 OCTET STRING (CONTAINING RRCReconfiguration),
+ eutra-SCG-r16 OCTET STRING
+ } OPTIONAL, -- Cond RestoreSCG
+ needForGapsConfigNR-r16 SetupRelease {NeedForGapsConfigNR-r16} OPTIONAL, -- Need M
+ nonCriticalExtension RRCResume-v1700-IEs OPTIONAL
+}
+
+RRCResume-v1700-IEs ::= SEQUENCE {
+ sl-ConfigDedicatedNR-r17 SetupRelease {SL-ConfigDedicatedNR-r16} OPTIONAL, -- Cond L2RemoteUE
+ sl-L2RemoteUE-Config-r17 SetupRelease {SL-L2RemoteUE-Config-r17} OPTIONAL, -- Cond L2RemoteUE
+ needForGapNCSG-ConfigNR-r17 SetupRelease {NeedForGapNCSG-ConfigNR-r17} OPTIONAL, -- Need M
+ needForGapNCSG-ConfigEUTRA-r17 SetupRelease {NeedForGapNCSG-ConfigEUTRA-r17} OPTIONAL, -- Need M
+ scg-State-r17 ENUMERATED {deactivated} OPTIONAL, -- Need N
+ appLayerMeasConfig-r17 AppLayerMeasConfig-r17 OPTIONAL, -- Need M
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+-- TAG-RRCRESUME-STOP
+-- TAG-RRCRESUMECOMPLETE-START
+
+RRCResumeComplete ::= SEQUENCE {
+ rrc-TransactionIdentifier RRC-TransactionIdentifier,
+ criticalExtensions CHOICE {
+ rrcResumeComplete RRCResumeComplete-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+RRCResumeComplete-IEs ::= SEQUENCE {
+ dedicatedNAS-Message DedicatedNAS-Message OPTIONAL,
+ selectedPLMN-Identity INTEGER (1..maxPLMN) OPTIONAL,
+ uplinkTxDirectCurrentList UplinkTxDirectCurrentList OPTIONAL,
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension RRCResumeComplete-v1610-IEs OPTIONAL
+}
+
+RRCResumeComplete-v1610-IEs ::= SEQUENCE {
+ idleMeasAvailable-r16 ENUMERATED {true} OPTIONAL,
+ measResultIdleEUTRA-r16 MeasResultIdleEUTRA-r16 OPTIONAL,
+ measResultIdleNR-r16 MeasResultIdleNR-r16 OPTIONAL,
+ scg-Response-r16 CHOICE {
+ nr-SCG-Response OCTET STRING (CONTAINING RRCReconfigurationComplete),
+ eutra-SCG-Response OCTET STRING
+ } OPTIONAL,
+ ue-MeasurementsAvailable-r16 UE-MeasurementsAvailable-r16 OPTIONAL,
+ mobilityHistoryAvail-r16 ENUMERATED {true} OPTIONAL,
+ mobilityState-r16 ENUMERATED {normal, medium, high, spare} OPTIONAL,
+ needForGapsInfoNR-r16 NeedForGapsInfoNR-r16 OPTIONAL,
+ nonCriticalExtension RRCResumeComplete-v1640-IEs OPTIONAL
+}
+
+RRCResumeComplete-v1640-IEs ::= SEQUENCE {
+ uplinkTxDirectCurrentTwoCarrierList-r16 UplinkTxDirectCurrentTwoCarrierList-r16 OPTIONAL,
+ nonCriticalExtension RRCResumeComplete-v1700-IEs OPTIONAL
+}
+
+RRCResumeComplete-v1700-IEs ::= SEQUENCE {
+ needForGapNCSG-InfoNR-r17 NeedForGapNCSG-InfoNR-r17 OPTIONAL,
+ needForGapNCSG-InfoEUTRA-r17 NeedForGapNCSG-InfoEUTRA-r17 OPTIONAL,
+ nonCriticalExtension RRCResumeComplete-v1720-IEs OPTIONAL
+}
+
+RRCResumeComplete-v1720-IEs ::= SEQUENCE {
+ uplinkTxDirectCurrentMoreCarrierList-r17 UplinkTxDirectCurrentMoreCarrierList-r17 OPTIONAL,
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+-- TAG-RRCRESUMECOMPLETE-STOP
+-- TAG-RRCRESUMEREQUEST-START
+
+RRCResumeRequest ::= SEQUENCE {
+ rrcResumeRequest RRCResumeRequest-IEs
+}
+
+RRCResumeRequest-IEs ::= SEQUENCE {
+ resumeIdentity ShortI-RNTI-Value,
+ resumeMAC-I BIT STRING (SIZE (16)),
+ resumeCause ResumeCause,
+ spare BIT STRING (SIZE (1))
+}
+
+-- TAG-RRCRESUMEREQUEST-STOP
+-- TAG-RRCRESUMEREQUEST1-START
+
+RRCResumeRequest1 ::= SEQUENCE {
+ rrcResumeRequest1 RRCResumeRequest1-IEs
+}
+
+RRCResumeRequest1-IEs ::= SEQUENCE {
+ resumeIdentity I-RNTI-Value,
+ resumeMAC-I BIT STRING (SIZE (16)),
+ resumeCause ResumeCause,
+ spare BIT STRING (SIZE (1))
+}
+
+-- TAG-RRCRESUMEREQUEST1-STOP
+-- TAG-RRCSETUP-START
+
+RRCSetup ::= SEQUENCE {
+ rrc-TransactionIdentifier RRC-TransactionIdentifier,
+ criticalExtensions CHOICE {
+ rrcSetup RRCSetup-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+RRCSetup-IEs ::= SEQUENCE {
+ radioBearerConfig RadioBearerConfig,
+ masterCellGroup OCTET STRING (CONTAINING CellGroupConfig),
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension RRCSetup-v1700-IEs OPTIONAL
+}
+
+RRCSetup-v1700-IEs ::= SEQUENCE {
+ sl-ConfigDedicatedNR-r17 SL-ConfigDedicatedNR-r16 OPTIONAL, -- Cond L2RemoteUE
+ sl-L2RemoteUE-Config-r17 SL-L2RemoteUE-Config-r17 OPTIONAL, -- Cond L2RemoteUE
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+-- TAG-RRCSETUP-STOP
+-- TAG-RRCSETUPCOMPLETE-START
+
+RRCSetupComplete ::= SEQUENCE {
+ rrc-TransactionIdentifier RRC-TransactionIdentifier,
+ criticalExtensions CHOICE {
+ rrcSetupComplete RRCSetupComplete-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+RRCSetupComplete-IEs ::= SEQUENCE {
+ selectedPLMN-Identity INTEGER (1..maxPLMN),
+ registeredAMF RegisteredAMF OPTIONAL,
+ guami-Type ENUMERATED {native, mapped} OPTIONAL,
+ s-NSSAI-List SEQUENCE (SIZE (1..maxNrofS-NSSAI)) OF S-NSSAI OPTIONAL,
+ dedicatedNAS-Message DedicatedNAS-Message,
+ ng-5G-S-TMSI-Value CHOICE {
+ ng-5G-S-TMSI NG-5G-S-TMSI,
+ ng-5G-S-TMSI-Part2 BIT STRING (SIZE (9))
+ } OPTIONAL,
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension RRCSetupComplete-v1610-IEs OPTIONAL
+}
+
+RRCSetupComplete-v1610-IEs ::= SEQUENCE {
+ iab-NodeIndication-r16 ENUMERATED {true} OPTIONAL,
+ idleMeasAvailable-r16 ENUMERATED {true} OPTIONAL,
+ ue-MeasurementsAvailable-r16 UE-MeasurementsAvailable-r16 OPTIONAL,
+ mobilityHistoryAvail-r16 ENUMERATED {true} OPTIONAL,
+ mobilityState-r16 ENUMERATED {normal, medium, high, spare} OPTIONAL,
+ nonCriticalExtension RRCSetupComplete-v1690-IEs OPTIONAL
+}
+
+RRCSetupComplete-v1690-IEs ::= SEQUENCE {
+ ul-RRC-Segmentation-r16 ENUMERATED {true} OPTIONAL,
+ nonCriticalExtension RRCSetupComplete-v1700-IEs OPTIONAL
+}
+
+RRCSetupComplete-v1700-IEs ::= SEQUENCE {
+ onboardingRequest-r17 ENUMERATED {true} OPTIONAL,
+ nonCriticalExtension SEQUENCE{} OPTIONAL
+}
+
+RegisteredAMF ::= SEQUENCE {
+ plmn-Identity PLMN-Identity OPTIONAL,
+ amf-Identifier AMF-Identifier
+}
+
+-- TAG-RRCSETUPCOMPLETE-STOP
+-- TAG-RRCSETUPREQUEST-START
+
+RRCSetupRequest ::= SEQUENCE {
+ rrcSetupRequest RRCSetupRequest-IEs
+}
+
+RRCSetupRequest-IEs ::= SEQUENCE {
+ ue-Identity InitialUE-Identity,
+ establishmentCause EstablishmentCause,
+ spare BIT STRING (SIZE (1))
+}
+
+InitialUE-Identity ::= CHOICE {
+ ng-5G-S-TMSI-Part1 BIT STRING (SIZE (39)),
+ randomValue BIT STRING (SIZE (39))
+}
+
+EstablishmentCause ::= ENUMERATED {
+ emergency, highPriorityAccess, mt-Access, mo-Signalling,
+ mo-Data, mo-VoiceCall, mo-VideoCall, mo-SMS, mps-PriorityAccess, mcs-PriorityAccess,
+ spare6, spare5, spare4, spare3, spare2, spare1}
+
+-- TAG-RRCSETUPREQUEST-STOP
+-- TAG-RRCSYSTEMINFOREQUEST-START
+
+RRCSystemInfoRequest ::= SEQUENCE {
+ criticalExtensions CHOICE {
+ rrcSystemInfoRequest RRCSystemInfoRequest-IEs,
+ criticalExtensionsFuture-r16 CHOICE {
+ rrcPosSystemInfoRequest-r16 RRC-PosSystemInfoRequest-r16-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+ }
+}
+
+RRCSystemInfoRequest-IEs ::= SEQUENCE {
+ requested-SI-List BIT STRING (SIZE (maxSI-Message)), --32bits
+ spare BIT STRING (SIZE (12))
+}
+
+RRC-PosSystemInfoRequest-r16-IEs ::= SEQUENCE {
+ requestedPosSI-List BIT STRING (SIZE (maxSI-Message)), --32bits
+ spare BIT STRING (SIZE (11))
+}
+
+-- TAG-RRCSYSTEMINFOREQUEST-STOP
+-- TAG-SCGFAILUREINFORMATION-START
+
+SCGFailureInformation ::= SEQUENCE {
+ criticalExtensions CHOICE {
+ scgFailureInformation SCGFailureInformation-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+SCGFailureInformation-IEs ::= SEQUENCE {
+ failureReportSCG FailureReportSCG OPTIONAL,
+ nonCriticalExtension SCGFailureInformation-v1590-IEs OPTIONAL
+}
+
+SCGFailureInformation-v1590-IEs ::= SEQUENCE {
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+FailureReportSCG ::= SEQUENCE {
+ failureType ENUMERATED {
+ t310-Expiry, randomAccessProblem,
+ rlc-MaxNumRetx,
+ synchReconfigFailureSCG, scg-ReconfigFailure,
+ srb3-IntegrityFailure, other-r16, spare1},
+ measResultFreqList MeasResultFreqList OPTIONAL,
+ measResultSCG-Failure OCTET STRING (CONTAINING MeasResultSCG-Failure) OPTIONAL,
+ ...,
+ [[
+ locationInfo-r16 LocationInfo-r16 OPTIONAL,
+ failureType-v1610 ENUMERATED {scg-lbtFailure-r16, beamFailureRecoveryFailure-r16,
+ t312-Expiry-r16, bh-RLF-r16, beamFailure-r17, spare3, spare2, spare1} OPTIONAL
+ ]],
+ [[
+ previousPSCellId-r17 SEQUENCE {
+ physCellId-r17 PhysCellId,
+ carrierFreq-r17 ARFCN-ValueNR
+ } OPTIONAL,
+ failedPSCellId-r17 SEQUENCE {
+ physCellId-r17 PhysCellId,
+ carrierFreq-r17 ARFCN-ValueNR
+ } OPTIONAL,
+ timeSCGFailure-r17 INTEGER (0..1023) OPTIONAL,
+ perRAInfoList-r17 PerRAInfoList-r16 OPTIONAL
+ ]]
+}
+
+MeasResultFreqList ::= SEQUENCE (SIZE (1..maxFreq)) OF MeasResult2NR
+
+
+-- TAG-SCGFAILUREINFORMATION-STOP
+-- TAG-SCGFAILUREINFORMATIONEUTRA-START
+
+SCGFailureInformationEUTRA ::= SEQUENCE {
+ criticalExtensions CHOICE {
+ scgFailureInformationEUTRA SCGFailureInformationEUTRA-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+SCGFailureInformationEUTRA-IEs ::= SEQUENCE {
+ failureReportSCG-EUTRA FailureReportSCG-EUTRA OPTIONAL,
+ nonCriticalExtension SCGFailureInformationEUTRA-v1590-IEs OPTIONAL
+}
+
+SCGFailureInformationEUTRA-v1590-IEs ::= SEQUENCE {
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+FailureReportSCG-EUTRA ::= SEQUENCE {
+ failureType ENUMERATED {
+ t313-Expiry, randomAccessProblem,rlc-MaxNumRetx,
+ scg-ChangeFailure, spare4,
+ spare3, spare2, spare1},
+ measResultFreqListMRDC MeasResultFreqListFailMRDC OPTIONAL,
+ measResultSCG-FailureMRDC OCTET STRING OPTIONAL,
+ ...,
+ [[
+ locationInfo-r16 LocationInfo-r16 OPTIONAL
+ ]]
+}
+
+MeasResultFreqListFailMRDC ::= SEQUENCE (SIZE (1.. maxFreq)) OF MeasResult2EUTRA
+
+-- TAG-SCGFAILUREINFORMATIONEUTRA-STOP
+-- TAG-SECURITYMODECOMMAND-START
+
+SecurityModeCommand ::= SEQUENCE {
+ rrc-TransactionIdentifier RRC-TransactionIdentifier,
+ criticalExtensions CHOICE {
+ securityModeCommand SecurityModeCommand-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+SecurityModeCommand-IEs ::= SEQUENCE {
+ securityConfigSMC SecurityConfigSMC,
+
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension SEQUENCE{} OPTIONAL
+}
+
+SecurityConfigSMC ::= SEQUENCE {
+ securityAlgorithmConfig SecurityAlgorithmConfig,
+ ...
+}
+
+-- TAG-SECURITYMODECOMMAND-STOP
+-- TAG-SECURITYMODECOMPLETE-START
+
+SecurityModeComplete ::= SEQUENCE {
+ rrc-TransactionIdentifier RRC-TransactionIdentifier,
+ criticalExtensions CHOICE {
+ securityModeComplete SecurityModeComplete-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+SecurityModeComplete-IEs ::= SEQUENCE {
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension SEQUENCE{} OPTIONAL
+}
+
+-- TAG-SECURITYMODECOMPLETE-STOP
+-- TAG-SECURITYMODEFAILURE-START
+
+SecurityModeFailure ::= SEQUENCE {
+ rrc-TransactionIdentifier RRC-TransactionIdentifier,
+ criticalExtensions CHOICE {
+ securityModeFailure SecurityModeFailure-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+SecurityModeFailure-IEs ::= SEQUENCE {
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension SEQUENCE{} OPTIONAL
+}
+
+-- TAG-SECURITYMODEFAILURE-STOP
+-- TAG-SIB1-START
+
+SIB1 ::= SEQUENCE {
+ cellSelectionInfo SEQUENCE {
+ q-RxLevMin Q-RxLevMin,
+ q-RxLevMinOffset INTEGER (1..8) OPTIONAL, -- Need S
+ q-RxLevMinSUL Q-RxLevMin OPTIONAL, -- Need R
+ q-QualMin Q-QualMin OPTIONAL, -- Need S
+ q-QualMinOffset INTEGER (1..8) OPTIONAL -- Need S
+ } OPTIONAL, -- Cond Standalone
+ cellAccessRelatedInfo CellAccessRelatedInfo,
+ connEstFailureControl ConnEstFailureControl OPTIONAL, -- Need R
+ si-SchedulingInfo SI-SchedulingInfo OPTIONAL, -- Need R
+ servingCellConfigCommon ServingCellConfigCommonSIB OPTIONAL, -- Need R
+ ims-EmergencySupport ENUMERATED {true} OPTIONAL, -- Need R
+ eCallOverIMS-Support ENUMERATED {true} OPTIONAL, -- Need R
+ ue-TimersAndConstants UE-TimersAndConstants OPTIONAL, -- Need R
+ uac-BarringInfo SEQUENCE {
+ uac-BarringForCommon UAC-BarringPerCatList OPTIONAL, -- Need S
+ uac-BarringPerPLMN-List UAC-BarringPerPLMN-List OPTIONAL, -- Need S
+ uac-BarringInfoSetList UAC-BarringInfoSetList,
+ uac-AccessCategory1-SelectionAssistanceInfo CHOICE {
+ plmnCommon UAC-AccessCategory1-SelectionAssistanceInfo,
+ individualPLMNList SEQUENCE (SIZE (2..maxPLMN)) OF UAC-AccessCategory1-SelectionAssistanceInfo
+ } OPTIONAL -- Need S
+ } OPTIONAL, -- Need R
+ useFullResumeID ENUMERATED {true} OPTIONAL, -- Need R
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension SIB1-v1610-IEs OPTIONAL
+}
+
+SIB1-v1610-IEs ::= SEQUENCE {
+ idleModeMeasurementsEUTRA-r16 ENUMERATED{true} OPTIONAL, -- Need R
+ idleModeMeasurementsNR-r16 ENUMERATED{true} OPTIONAL, -- Need R
+ posSI-SchedulingInfo-r16 PosSI-SchedulingInfo-r16 OPTIONAL, -- Need R
+ nonCriticalExtension SIB1-v1630-IEs OPTIONAL
+}
+
+SIB1-v1630-IEs ::= SEQUENCE {
+ uac-BarringInfo-v1630 SEQUENCE {
+ uac-AC1-SelectAssistInfo-r16 SEQUENCE (SIZE (2..maxPLMN)) OF UAC-AC1-SelectAssistInfo-r16
+ } OPTIONAL, -- Need R
+ nonCriticalExtension SIB1-v1700-IEs OPTIONAL
+}
+
+SIB1-v1700-IEs ::= SEQUENCE {
+ hsdn-Cell-r17 ENUMERATED {true} OPTIONAL, -- Need R
+ uac-BarringInfo-v1700 SEQUENCE {
+ uac-BarringInfoSetList-v1700 UAC-BarringInfoSetList-v1700
+ } OPTIONAL, -- Cond MINT
+ sdt-ConfigCommon-r17 SDT-ConfigCommonSIB-r17 OPTIONAL, -- Need R
+ redCap-ConfigCommon-r17 RedCap-ConfigCommonSIB-r17 OPTIONAL, -- Need R
+ featurePriorities-r17 SEQUENCE {
+ redCapPriority-r17 FeaturePriority-r17 OPTIONAL, -- Need R
+ slicingPriority-r17 FeaturePriority-r17 OPTIONAL, -- Need R
+ msg3-Repetitions-Priority-r17 FeaturePriority-r17 OPTIONAL, -- Need R
+ sdt-Priority-r17 FeaturePriority-r17 OPTIONAL -- Need R
+ } OPTIONAL, -- Need R
+ si-SchedulingInfo-v1700 SI-SchedulingInfo-v1700 OPTIONAL, -- Need R
+ hyperSFN-r17 BIT STRING (SIZE (10)) OPTIONAL, -- Need R
+ eDRX-AllowedIdle-r17 ENUMERATED {true} OPTIONAL, -- Need R
+ eDRX-AllowedInactive-r17 ENUMERATED {true} OPTIONAL, -- Cond EDRX-RC
+ intraFreqReselectionRedCap-r17 ENUMERATED {allowed, notAllowed} OPTIONAL, -- Need S
+ cellBarredNTN-r17 ENUMERATED {barred, notBarred} OPTIONAL, -- Need S
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+UAC-AccessCategory1-SelectionAssistanceInfo ::= ENUMERATED {a, b, c}
+
+UAC-AC1-SelectAssistInfo-r16 ::= ENUMERATED {a, b, c, notConfigured}
+
+SDT-ConfigCommonSIB-r17 ::= SEQUENCE {
+ sdt-RSRP-Threshold-r17 RSRP-Range OPTIONAL, -- Need R
+ sdt-LogicalChannelSR-DelayTimer-r17 ENUMERATED { sf20, sf40, sf64, sf128, sf512, sf1024, sf2560, spare1} OPTIONAL, -- Need R
+ sdt-DataVolumeThreshold-r17 ENUMERATED {byte32, byte100, byte200, byte400, byte600, byte800, byte1000, byte2000, byte4000,
+ byte8000, byte9000, byte10000, byte12000, byte24000, byte48000, byte96000},
+ t319a-r17 ENUMERATED { ms100, ms200, ms300, ms400, ms600, ms1000, ms2000,
+ ms3000, ms4000, spare7, spare6, spare5, spare4, spare3, spare2, spare1}
+}
+
+RedCap-ConfigCommonSIB-r17 ::= SEQUENCE {
+ halfDuplexRedCapAllowed-r17 ENUMERATED {true} OPTIONAL, -- Need R
+ cellBarredRedCap-r17 SEQUENCE {
+ cellBarredRedCap1Rx-r17 ENUMERATED {barred, notBarred},
+ cellBarredRedCap2Rx-r17 ENUMERATED {barred, notBarred}
+ } OPTIONAL, -- Need R
+ ...
+}
+
+FeaturePriority-r17 ::= INTEGER (0..7)
+
+-- TAG-SIB1-STOP
+-- TAG-SIDELINKUEINFORMATIONNR-START
+
+SidelinkUEInformationNR-r16::= SEQUENCE {
+ criticalExtensions CHOICE {
+ sidelinkUEInformationNR-r16 SidelinkUEInformationNR-r16-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+SidelinkUEInformationNR-r16-IEs ::= SEQUENCE {
+ sl-RxInterestedFreqList-r16 SL-InterestedFreqList-r16 OPTIONAL,
+ sl-TxResourceReqList-r16 SL-TxResourceReqList-r16 OPTIONAL,
+ sl-FailureList-r16 SL-FailureList-r16 OPTIONAL,
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension SidelinkUEInformationNR-v1700-IEs OPTIONAL
+}
+
+SidelinkUEInformationNR-v1700-IEs ::= SEQUENCE {
+ sl-TxResourceReqList-v1700 SL-TxResourceReqList-v1700 OPTIONAL,
+ sl-RxDRX-ReportList-v1700 SL-RxDRX-ReportList-v1700 OPTIONAL,
+ sl-RxInterestedGC-BC-DestList-r17 SL-RxInterestedGC-BC-DestList-r17 OPTIONAL,
+ sl-RxInterestedFreqListDisc-r17 SL-InterestedFreqList-r16 OPTIONAL,
+ sl-TxResourceReqListDisc-r17 SL-TxResourceReqListDisc-r17 OPTIONAL,
+ sl-TxResourceReqListCommRelay-r17 SL-TxResourceReqListCommRelay-r17 OPTIONAL,
+ ue-Type-r17 ENUMERATED {relayUE, remoteUE} OPTIONAL,
+ sl-SourceIdentityRemoteUE-r17 SL-SourceIdentity-r17 OPTIONAL,
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+SL-InterestedFreqList-r16 ::= SEQUENCE (SIZE (1..maxNrofFreqSL-r16)) OF INTEGER (1..maxNrofFreqSL-r16)
+
+SL-TxResourceReqList-r16 ::= SEQUENCE (SIZE (1..maxNrofSL-Dest-r16)) OF SL-TxResourceReq-r16
+
+SL-TxResourceReq-r16 ::= SEQUENCE {
+ sl-DestinationIdentity-r16 SL-DestinationIdentity-r16,
+ sl-CastType-r16 ENUMERATED {broadcast, groupcast, unicast, spare1},
+ sl-RLC-ModeIndicationList-r16 SEQUENCE (SIZE (1.. maxNrofSLRB-r16)) OF SL-RLC-ModeIndication-r16 OPTIONAL,
+ sl-QoS-InfoList-r16 SEQUENCE (SIZE (1..maxNrofSL-QFIsPerDest-r16)) OF SL-QoS-Info-r16 OPTIONAL,
+ sl-TypeTxSyncList-r16 SEQUENCE (SIZE (1..maxNrofFreqSL-r16)) OF SL-TypeTxSync-r16 OPTIONAL,
+ sl-TxInterestedFreqList-r16 SL-TxInterestedFreqList-r16 OPTIONAL,
+ sl-CapabilityInformationSidelink-r16 OCTET STRING OPTIONAL
+}
+
+SL-TxResourceReqList-v1700 ::= SEQUENCE (SIZE (1..maxNrofSL-Dest-r16)) OF SL-TxResourceReq-v1700
+
+SL-RxDRX-ReportList-v1700 ::= SEQUENCE (SIZE (1..maxNrofSL-Dest-r16)) OF SL-RxDRX-Report-v1700
+
+SL-TxResourceReq-v1700 ::= SEQUENCE {
+ sl-DRX-InfoFromRxList-r17 SEQUENCE (SIZE (1..maxNrofSL-RxInfoSet-r17)) OF SL-DRX-ConfigUC-SemiStatic-r17 OPTIONAL,
+ sl-DRX-Indication-r17 ENUMERATED {on, off} OPTIONAL,
+ ...
+}
+
+SL-RxDRX-Report-v1700 ::= SEQUENCE {
+ sl-DRX-ConfigFromTx-r17 SL-DRX-ConfigUC-SemiStatic-r17,
+ ...}
+
+SL-RxInterestedGC-BC-DestList-r17 ::= SEQUENCE (SIZE (1..maxNrofSL-Dest-r16)) OF SL-RxInterestedGC-BC-Dest-r17
+
+SL-RxInterestedGC-BC-Dest-r17 ::= SEQUENCE {
+ sl-RxInterestedQoS-InfoList-r17 SEQUENCE (SIZE (1..maxNrofSL-QFIsPerDest-r16)) OF SL-QoS-Info-r16,
+ sl-DestinationIdentity-r16 SL-DestinationIdentity-r16
+}
+
+SL-TxResourceReqListDisc-r17 ::= SEQUENCE (SIZE (1..maxNrofSL-Dest-r16)) OF SL-TxResourceReqDisc-r17
+
+SL-TxResourceReqDisc-r17 ::= SEQUENCE {
+ sl-DestinationIdentityDisc-r17 SL-DestinationIdentity-r16,
+ sl-SourceIdentityRelayUE-r17 SL-SourceIdentity-r17 OPTIONAL,
+ sl-CastTypeDisc-r17 ENUMERATED {broadcast, groupcast, unicast, spare1},
+ sl-TxInterestedFreqListDisc-r17 SL-TxInterestedFreqList-r16,
+ sl-TypeTxSyncListDisc-r17 SEQUENCE (SIZE (1..maxNrofFreqSL-r16)) OF SL-TypeTxSync-r16,
+ sl-DiscoveryType-r17 ENUMERATED {relay, non-Relay},
+ ...
+}
+
+SL-TxResourceReqListCommRelay-r17 ::= SEQUENCE (SIZE (1..maxNrofSL-Dest-r16)) OF SL-TxResourceReqCommRelayInfo-r17
+
+SL-TxResourceReqCommRelayInfo-r17 ::= SEQUENCE {
+ sl-RelayDRXConfig-r17 SL-TxResourceReq-v1700 OPTIONAL,
+ sl-TxResourceReqCommRelay-r17 SL-TxResourceReqCommRelay-r17
+}
+
+SL-TxResourceReqCommRelay-r17 ::= CHOICE {
+ sl-TxResourceReqL2U2N-Relay-r17 SL-TxResourceReqL2U2N-Relay-r17,
+ sl-TxResourceReqL3U2N-Relay-r17 SL-TxResourceReq-r16
+}
+
+SL-TxResourceReqL2U2N-Relay-r17 ::= SEQUENCE {
+ sl-DestinationIdentityL2U2N-r17 SL-DestinationIdentity-r16 OPTIONAL,
+ sl-TxInterestedFreqListL2U2N-r17 SL-TxInterestedFreqList-r16,
+ sl-TypeTxSyncListL2U2N-r17 SEQUENCE (SIZE (1..maxNrofFreqSL-r16)) OF SL-TypeTxSync-r16,
+ sl-LocalID-Request-r17 ENUMERATED {true} OPTIONAL,
+ sl-PagingIdentityRemoteUE-r17 SL-PagingIdentityRemoteUE-r17 OPTIONAL,
+ sl-CapabilityInformationSidelink-r17 OCTET STRING OPTIONAL,
+ ...
+}
+
+SL-TxInterestedFreqList-r16 ::= SEQUENCE (SIZE (1..maxNrofFreqSL-r16)) OF INTEGER (1..maxNrofFreqSL-r16)
+
+SL-QoS-Info-r16 ::= SEQUENCE {
+ sl-QoS-FlowIdentity-r16 SL-QoS-FlowIdentity-r16,
+ sl-QoS-Profile-r16 SL-QoS-Profile-r16 OPTIONAL
+}
+
+SL-RLC-ModeIndication-r16 ::= SEQUENCE {
+ sl-Mode-r16 CHOICE {
+ sl-AM-Mode-r16 NULL,
+ sl-UM-Mode-r16 NULL
+ },
+ sl-QoS-InfoList-r16 SEQUENCE (SIZE (1..maxNrofSL-QFIsPerDest-r16)) OF SL-QoS-Info-r16
+}
+
+SL-FailureList-r16 ::= SEQUENCE (SIZE (1..maxNrofSL-Dest-r16)) OF SL-Failure-r16
+
+SL-Failure-r16 ::= SEQUENCE {
+ sl-DestinationIdentity-r16 SL-DestinationIdentity-r16,
+ sl-Failure-r16 ENUMERATED {rlf,configFailure, drxReject-v1710, spare5, spare4, spare3, spare2, spare1}
+}
+
+-- TAG-SIDELINKUEINFORMATIONNR-STOP
+-- TAG-SYSTEMINFORMATION-START
+
+SystemInformation ::= SEQUENCE {
+ criticalExtensions CHOICE {
+ systemInformation SystemInformation-IEs,
+ criticalExtensionsFuture-r16 CHOICE {
+ posSystemInformation-r16 PosSystemInformation-r16-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+ }
+}
+
+SystemInformation-IEs ::= SEQUENCE {
+ sib-TypeAndInfo SEQUENCE (SIZE (1..maxSIB)) OF CHOICE {
+ sib2 SIB2,
+ sib3 SIB3,
+ sib4 SIB4,
+ sib5 SIB5,
+ sib6 SIB6,
+ sib7 SIB7,
+ sib8 SIB8,
+ sib9 SIB9,
+ ...,
+ sib10-v1610 SIB10-r16,
+ sib11-v1610 SIB11-r16,
+ sib12-v1610 SIB12-r16,
+ sib13-v1610 SIB13-r16,
+ sib14-v1610 SIB14-r16,
+ sib15-v1700 SIB15-r17,
+ sib16-v1700 SIB16-r17,
+ sib17-v1700 SIB17-r17,
+ sib18-v1700 SIB18-r17,
+ sib19-v1700 SIB19-r17,
+ sib20-v1700 SIB20-r17,
+ sib21-v1700 SIB21-r17
+ },
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+-- TAG-SYSTEMINFORMATION-STOP
+-- TAG-UEASSISTANCEINFORMATION-START
+
+UEAssistanceInformation ::= SEQUENCE {
+ criticalExtensions CHOICE {
+ ueAssistanceInformation UEAssistanceInformation-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+UEAssistanceInformation-IEs ::= SEQUENCE {
+ delayBudgetReport DelayBudgetReport OPTIONAL,
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension UEAssistanceInformation-v1540-IEs OPTIONAL
+}
+
+DelayBudgetReport::= CHOICE {
+ type1 ENUMERATED {
+ msMinus1280, msMinus640, msMinus320, msMinus160,msMinus80, msMinus60, msMinus40,
+ msMinus20, ms0, ms20,ms40, ms60, ms80, ms160, ms320, ms640, ms1280},
+ ...
+}
+
+UEAssistanceInformation-v1540-IEs ::= SEQUENCE {
+ overheatingAssistance OverheatingAssistance OPTIONAL,
+ nonCriticalExtension UEAssistanceInformation-v1610-IEs OPTIONAL
+}
+
+OverheatingAssistance ::= SEQUENCE {
+ reducedMaxCCs ReducedMaxCCs-r16 OPTIONAL,
+ reducedMaxBW-FR1 ReducedMaxBW-FRx-r16 OPTIONAL,
+ reducedMaxBW-FR2 ReducedMaxBW-FRx-r16 OPTIONAL,
+ reducedMaxMIMO-LayersFR1 SEQUENCE {
+ reducedMIMO-LayersFR1-DL MIMO-LayersDL,
+ reducedMIMO-LayersFR1-UL MIMO-LayersUL
+ } OPTIONAL,
+ reducedMaxMIMO-LayersFR2 SEQUENCE {
+ reducedMIMO-LayersFR2-DL MIMO-LayersDL,
+ reducedMIMO-LayersFR2-UL MIMO-LayersUL
+ } OPTIONAL
+}
+OverheatingAssistance-r17 ::= SEQUENCE {
+ reducedMaxBW-FR2-2-r17 SEQUENCE {
+ reducedBW-FR2-2-DL-r17 ReducedAggregatedBandwidth-r17,
+ reducedBW-FR2-2-UL-r17 ReducedAggregatedBandwidth-r17
+ } OPTIONAL,
+ reducedMaxMIMO-LayersFR2-2 SEQUENCE {
+ reducedMIMO-LayersFR2-2-DL MIMO-LayersDL,
+ reducedMIMO-LayersFR2-2-UL MIMO-LayersUL
+ } OPTIONAL
+}
+
+ReducedAggregatedBandwidth ::= ENUMERATED {mhz0, mhz10, mhz20, mhz30, mhz40, mhz50, mhz60, mhz80, mhz100, mhz200, mhz300, mhz400}
+
+ReducedAggregatedBandwidth-r17 ::= ENUMERATED {mhz0, mhz100, mhz200, mhz400, mhz800, mhz1200, mhz1600, mhz2000}
+
+UEAssistanceInformation-v1610-IEs ::= SEQUENCE {
+ idc-Assistance-r16 IDC-Assistance-r16 OPTIONAL,
+ drx-Preference-r16 DRX-Preference-r16 OPTIONAL,
+ maxBW-Preference-r16 MaxBW-Preference-r16 OPTIONAL,
+ maxCC-Preference-r16 MaxCC-Preference-r16 OPTIONAL,
+ maxMIMO-LayerPreference-r16 MaxMIMO-LayerPreference-r16 OPTIONAL,
+ minSchedulingOffsetPreference-r16 MinSchedulingOffsetPreference-r16 OPTIONAL,
+ releasePreference-r16 ReleasePreference-r16 OPTIONAL,
+ sl-UE-AssistanceInformationNR-r16 SL-UE-AssistanceInformationNR-r16 OPTIONAL,
+ referenceTimeInfoPreference-r16 BOOLEAN OPTIONAL,
+ nonCriticalExtension UEAssistanceInformation-v1700-IEs OPTIONAL
+}
+
+UEAssistanceInformation-v1700-IEs ::= SEQUENCE {
+ ul-GapFR2-Preference-r17 UL-GapFR2-Preference-r17 OPTIONAL,
+ musim-Assistance-r17 MUSIM-Assistance-r17 OPTIONAL,
+ overheatingAssistance-r17 OverheatingAssistance-r17 OPTIONAL,
+ maxBW-PreferenceFR2-2-r17 MaxBW-PreferenceFR2-2-r17 OPTIONAL,
+ maxMIMO-LayerPreferenceFR2-2-r17 MaxMIMO-LayerPreferenceFR2-2-r17 OPTIONAL,
+ minSchedulingOffsetPreferenceExt-r17 MinSchedulingOffsetPreferenceExt-r17 OPTIONAL,
+ rlm-MeasRelaxationState-r17 BOOLEAN OPTIONAL,
+ bfd-MeasRelaxationState-r17 BIT STRING (SIZE (1..maxNrofServingCells)) OPTIONAL,
+ nonSDT-DataIndication-r17 SEQUENCE {
+ resumeCause-r17 ResumeCause OPTIONAL
+ } OPTIONAL,
+ scg-DeactivationPreference-r17 ENUMERATED { scgDeactivationPreferred, noPreference } OPTIONAL,
+ uplinkData-r17 ENUMERATED { true } OPTIONAL,
+ rrm-MeasRelaxationFulfilment-r17 BOOLEAN OPTIONAL,
+ propagationDelayDifference-r17 PropagationDelayDifference-r17 OPTIONAL,
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+IDC-Assistance-r16 ::= SEQUENCE {
+ affectedCarrierFreqList-r16 AffectedCarrierFreqList-r16 OPTIONAL,
+ affectedCarrierFreqCombList-r16 AffectedCarrierFreqCombList-r16 OPTIONAL,
+ ...
+}
+
+AffectedCarrierFreqList-r16 ::= SEQUENCE (SIZE (1.. maxFreqIDC-r16)) OF AffectedCarrierFreq-r16
+
+AffectedCarrierFreq-r16 ::= SEQUENCE {
+ carrierFreq-r16 ARFCN-ValueNR,
+ interferenceDirection-r16 ENUMERATED {nr, other, both, spare}
+}
+
+AffectedCarrierFreqCombList-r16 ::= SEQUENCE (SIZE (1..maxCombIDC-r16)) OF AffectedCarrierFreqComb-r16
+
+AffectedCarrierFreqComb-r16 ::= SEQUENCE {
+ affectedCarrierFreqComb-r16 SEQUENCE (SIZE (2..maxNrofServingCells)) OF ARFCN-ValueNR OPTIONAL,
+ victimSystemType-r16 VictimSystemType-r16
+}
+
+VictimSystemType-r16 ::= SEQUENCE {
+ gps-r16 ENUMERATED {true} OPTIONAL,
+ glonass-r16 ENUMERATED {true} OPTIONAL,
+ bds-r16 ENUMERATED {true} OPTIONAL,
+ galileo-r16 ENUMERATED {true} OPTIONAL,
+ navIC-r16 ENUMERATED {true} OPTIONAL,
+ wlan-r16 ENUMERATED {true} OPTIONAL,
+ bluetooth-r16 ENUMERATED {true} OPTIONAL,
+ ...
+}
+
+DRX-Preference-r16 ::= SEQUENCE {
+ preferredDRX-InactivityTimer-r16 ENUMERATED {
+ ms0, ms1, ms2, ms3, ms4, ms5, ms6, ms8, ms10, ms20, ms30, ms40, ms50, ms60, ms80,
+ ms100, ms200, ms300, ms500, ms750, ms1280, ms1920, ms2560, spare9, spare8,
+ spare7, spare6, spare5, spare4, spare3, spare2, spare1} OPTIONAL,
+ preferredDRX-LongCycle-r16 ENUMERATED {
+ ms10, ms20, ms32, ms40, ms60, ms64, ms70, ms80, ms128, ms160, ms256, ms320, ms512,
+ ms640, ms1024, ms1280, ms2048, ms2560, ms5120, ms10240, spare12, spare11, spare10,
+ spare9, spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1 } OPTIONAL,
+ preferredDRX-ShortCycle-r16 ENUMERATED {
+ ms2, ms3, ms4, ms5, ms6, ms7, ms8, ms10, ms14, ms16, ms20, ms30, ms32,
+ ms35, ms40, ms64, ms80, ms128, ms160, ms256, ms320, ms512, ms640, spare9,
+ spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1 } OPTIONAL,
+ preferredDRX-ShortCycleTimer-r16 INTEGER (1..16) OPTIONAL
+}
+
+MaxBW-Preference-r16 ::= SEQUENCE {
+ reducedMaxBW-FR1-r16 ReducedMaxBW-FRx-r16 OPTIONAL,
+ reducedMaxBW-FR2-r16 ReducedMaxBW-FRx-r16 OPTIONAL
+}
+
+MaxBW-PreferenceFR2-2-r17 ::= SEQUENCE {
+ reducedMaxBW-FR2-2-r17 SEQUENCE {
+ reducedBW-FR2-2-DL-r17 ReducedAggregatedBandwidth-r17 OPTIONAL,
+ reducedBW-FR2-2-UL-r17 ReducedAggregatedBandwidth-r17 OPTIONAL
+ } OPTIONAL
+}
+
+MaxCC-Preference-r16 ::= SEQUENCE {
+ reducedMaxCCs-r16 ReducedMaxCCs-r16 OPTIONAL
+}
+
+MaxMIMO-LayerPreference-r16 ::= SEQUENCE {
+ reducedMaxMIMO-LayersFR1-r16 SEQUENCE {
+ reducedMIMO-LayersFR1-DL-r16 INTEGER (1..8),
+ reducedMIMO-LayersFR1-UL-r16 INTEGER (1..4)
+ } OPTIONAL,
+ reducedMaxMIMO-LayersFR2-r16 SEQUENCE {
+ reducedMIMO-LayersFR2-DL-r16 INTEGER (1..8),
+ reducedMIMO-LayersFR2-UL-r16 INTEGER (1..4)
+ } OPTIONAL
+}
+
+MaxMIMO-LayerPreferenceFR2-2-r17 ::= SEQUENCE {
+ reducedMaxMIMO-LayersFR2-2-r17 SEQUENCE {
+ reducedMIMO-LayersFR2-2-DL-r17 INTEGER (1..8),
+ reducedMIMO-LayersFR2-2-UL-r17 INTEGER (1..4)
+ } OPTIONAL
+}
+
+MinSchedulingOffsetPreference-r16 ::= SEQUENCE {
+ preferredK0-r16 SEQUENCE {
+ preferredK0-SCS-15kHz-r16 ENUMERATED {sl1, sl2, sl4, sl6} OPTIONAL,
+ preferredK0-SCS-30kHz-r16 ENUMERATED {sl1, sl2, sl4, sl6} OPTIONAL,
+ preferredK0-SCS-60kHz-r16 ENUMERATED {sl2, sl4, sl8, sl12} OPTIONAL,
+ preferredK0-SCS-120kHz-r16 ENUMERATED {sl2, sl4, sl8, sl12} OPTIONAL
+ } OPTIONAL,
+ preferredK2-r16 SEQUENCE {
+ preferredK2-SCS-15kHz-r16 ENUMERATED {sl1, sl2, sl4, sl6} OPTIONAL,
+ preferredK2-SCS-30kHz-r16 ENUMERATED {sl1, sl2, sl4, sl6} OPTIONAL,
+ preferredK2-SCS-60kHz-r16 ENUMERATED {sl2, sl4, sl8, sl12} OPTIONAL,
+ preferredK2-SCS-120kHz-r16 ENUMERATED {sl2, sl4, sl8, sl12} OPTIONAL
+ } OPTIONAL
+}
+
+MinSchedulingOffsetPreferenceExt-r17 ::= SEQUENCE {
+ preferredK0-r17 SEQUENCE {
+ preferredK0-SCS-480kHz-r17 ENUMERATED {sl8, sl16, sl32, sl48} OPTIONAL,
+ preferredK0-SCS-960kHz-r17 ENUMERATED {sl8, sl16, sl32, sl48} OPTIONAL
+ } OPTIONAL,
+ preferredK2-r17 SEQUENCE {
+ preferredK2-SCS-480kHz-r17 ENUMERATED {sl8, sl16, sl32, sl48} OPTIONAL,
+ preferredK2-SCS-960kHz-r17 ENUMERATED {sl8, sl16, sl32, sl48} OPTIONAL
+ } OPTIONAL
+}
+
+MUSIM-Assistance-r17 ::= SEQUENCE {
+ musim-PreferredRRC-State-r17 ENUMERATED {idle, inactive, outOfConnected} OPTIONAL,
+ musim-GapPreferenceList-r17 MUSIM-GapPreferenceList-r17 OPTIONAL
+}
+
+MUSIM-GapPreferenceList-r17 ::= SEQUENCE (SIZE (1..4)) OF MUSIM-GapInfo-r17
+
+ReleasePreference-r16 ::= SEQUENCE {
+ preferredRRC-State-r16 ENUMERATED {idle, inactive, connected, outOfConnected}
+}
+
+ReducedMaxBW-FRx-r16 ::= SEQUENCE {
+ reducedBW-DL-r16 ReducedAggregatedBandwidth,
+ reducedBW-UL-r16 ReducedAggregatedBandwidth
+}
+
+ReducedMaxCCs-r16 ::= SEQUENCE {
+ reducedCCsDL-r16 INTEGER (0..31),
+ reducedCCsUL-r16 INTEGER (0..31)
+}
+
+SL-UE-AssistanceInformationNR-r16 ::= SEQUENCE (SIZE (1..maxNrofTrafficPattern-r16)) OF SL-TrafficPatternInfo-r16
+
+SL-TrafficPatternInfo-r16::= SEQUENCE {
+ trafficPeriodicity-r16 ENUMERATED {ms20, ms50, ms100, ms200, ms300, ms400, ms500, ms600, ms700, ms800, ms900, ms1000},
+ timingOffset-r16 INTEGER (0..10239),
+ messageSize-r16 BIT STRING (SIZE (8)),
+ sl-QoS-FlowIdentity-r16 SL-QoS-FlowIdentity-r16
+}
+
+UL-GapFR2-Preference-r17::= SEQUENCE {
+ ul-GapFR2-PatternPreference-r17 INTEGER (0..3) OPTIONAL
+}
+
+PropagationDelayDifference-r17 ::= SEQUENCE (SIZE (1..4)) OF INTEGER (-270..270)
+
+-- TAG-UEASSISTANCEINFORMATION-STOP
+-- TAG-UECAPABILITYENQUIRY-START
+
+UECapabilityEnquiry ::= SEQUENCE {
+ rrc-TransactionIdentifier RRC-TransactionIdentifier,
+ criticalExtensions CHOICE {
+ ueCapabilityEnquiry UECapabilityEnquiry-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+UECapabilityEnquiry-IEs ::= SEQUENCE {
+ ue-CapabilityRAT-RequestList UE-CapabilityRAT-RequestList,
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ ue-CapabilityEnquiryExt OCTET STRING (CONTAINING UECapabilityEnquiry-v1560-IEs) OPTIONAL -- Need N
+}
+
+UECapabilityEnquiry-v1560-IEs ::= SEQUENCE {
+ capabilityRequestFilterCommon UE-CapabilityRequestFilterCommon OPTIONAL, -- Need N
+ nonCriticalExtension UECapabilityEnquiry-v1610-IEs OPTIONAL
+}
+
+UECapabilityEnquiry-v1610-IEs ::= SEQUENCE {
+ rrc-SegAllowed-r16 ENUMERATED {enabled} OPTIONAL, -- Need N
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+-- TAG-UECAPABILITYENQUIRY-STOP
+-- TAG-UECAPABILITYINFORMATION-START
+
+UECapabilityInformation ::= SEQUENCE {
+ rrc-TransactionIdentifier RRC-TransactionIdentifier,
+ criticalExtensions CHOICE {
+ ueCapabilityInformation UECapabilityInformation-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+UECapabilityInformation-IEs ::= SEQUENCE {
+ ue-CapabilityRAT-ContainerList UE-CapabilityRAT-ContainerList OPTIONAL,
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension SEQUENCE{} OPTIONAL
+}
+
+-- TAG-UECAPABILITYINFORMATION-STOP
+-- TAG-UEINFORMATIONREQUEST-START
+
+UEInformationRequest-r16 ::= SEQUENCE {
+ rrc-TransactionIdentifier RRC-TransactionIdentifier,
+ criticalExtensions CHOICE {
+ ueInformationRequest-r16 UEInformationRequest-r16-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+UEInformationRequest-r16-IEs ::= SEQUENCE {
+ idleModeMeasurementReq-r16 ENUMERATED{true} OPTIONAL, -- Need N
+ logMeasReportReq-r16 ENUMERATED {true} OPTIONAL, -- Need N
+ connEstFailReportReq-r16 ENUMERATED {true} OPTIONAL, -- Need N
+ ra-ReportReq-r16 ENUMERATED {true} OPTIONAL, -- Need N
+ rlf-ReportReq-r16 ENUMERATED {true} OPTIONAL, -- Need N
+ mobilityHistoryReportReq-r16 ENUMERATED {true} OPTIONAL, -- Need N
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension UEInformationRequest-v1700-IEs OPTIONAL
+}
+
+UEInformationRequest-v1700-IEs ::= SEQUENCE {
+ successHO-ReportReq-r17 ENUMERATED {true} OPTIONAL, -- Need N
+ coarseLocationRequest-r17 ENUMERATED {true} OPTIONAL, -- Need N
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+-- TAG-UEINFORMATIONREQUEST-STOP
+-- TAG-UEINFORMATIONRESPONSE-START
+
+UEInformationResponse-r16 ::= SEQUENCE {
+ rrc-TransactionIdentifier RRC-TransactionIdentifier,
+ criticalExtensions CHOICE {
+ ueInformationResponse-r16 UEInformationResponse-r16-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+UEInformationResponse-r16-IEs ::= SEQUENCE {
+ measResultIdleEUTRA-r16 MeasResultIdleEUTRA-r16 OPTIONAL,
+ measResultIdleNR-r16 MeasResultIdleNR-r16 OPTIONAL,
+ logMeasReport-r16 LogMeasReport-r16 OPTIONAL,
+ connEstFailReport-r16 ConnEstFailReport-r16 OPTIONAL,
+ ra-ReportList-r16 RA-ReportList-r16 OPTIONAL,
+ rlf-Report-r16 RLF-Report-r16 OPTIONAL,
+ mobilityHistoryReport-r16 MobilityHistoryReport-r16 OPTIONAL,
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension UEInformationResponse-v1700-IEs OPTIONAL
+}
+
+UEInformationResponse-v1700-IEs ::= SEQUENCE {
+ successHO-Report-r17 SuccessHO-Report-r17 OPTIONAL,
+ connEstFailReportList-r17 ConnEstFailReportList-r17 OPTIONAL,
+ coarseLocationInfo-r17 OCTET STRING OPTIONAL,
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+LogMeasReport-r16 ::= SEQUENCE {
+ absoluteTimeStamp-r16 AbsoluteTimeInfo-r16,
+ traceReference-r16 TraceReference-r16,
+ traceRecordingSessionRef-r16 OCTET STRING (SIZE (2)),
+ tce-Id-r16 OCTET STRING (SIZE (1)),
+ logMeasInfoList-r16 LogMeasInfoList-r16,
+ logMeasAvailable-r16 ENUMERATED {true} OPTIONAL,
+ logMeasAvailableBT-r16 ENUMERATED {true} OPTIONAL,
+ logMeasAvailableWLAN-r16 ENUMERATED {true} OPTIONAL,
+ ...
+}
+
+LogMeasInfoList-r16 ::= SEQUENCE (SIZE (1..maxLogMeasReport-r16)) OF LogMeasInfo-r16
+
+LogMeasInfo-r16 ::= SEQUENCE {
+ locationInfo-r16 LocationInfo-r16 OPTIONAL,
+ relativeTimeStamp-r16 INTEGER (0..7200),
+ servCellIdentity-r16 CGI-Info-Logging-r16 OPTIONAL,
+ measResultServingCell-r16 MeasResultServingCell-r16 OPTIONAL,
+ measResultNeighCells-r16 SEQUENCE {
+ measResultNeighCellListNR MeasResultListLogging2NR-r16 OPTIONAL,
+ measResultNeighCellListEUTRA MeasResultList2EUTRA-r16 OPTIONAL
+ },
+ anyCellSelectionDetected-r16 ENUMERATED {true} OPTIONAL,
+ ...,
+ [[
+ inDeviceCoexDetected-r17 ENUMERATED {true} OPTIONAL
+ ]]
+}
+
+ConnEstFailReport-r16 ::= SEQUENCE {
+ measResultFailedCell-r16 MeasResultFailedCell-r16,
+ locationInfo-r16 LocationInfo-r16 OPTIONAL,
+ measResultNeighCells-r16 SEQUENCE {
+ measResultNeighCellListNR MeasResultList2NR-r16 OPTIONAL,
+ measResultNeighCellListEUTRA MeasResultList2EUTRA-r16 OPTIONAL
+ },
+ numberOfConnFail-r16 INTEGER (1..8),
+ perRAInfoList-r16 PerRAInfoList-r16,
+ timeSinceFailure-r16 TimeSinceFailure-r16,
+ ...
+}
+
+ConnEstFailReportList-r17 ::= SEQUENCE (SIZE (1..maxCEFReport-r17)) OF ConnEstFailReport-r16
+
+MeasResultServingCell-r16 ::= SEQUENCE {
+ resultsSSB-Cell MeasQuantityResults,
+ resultsSSB SEQUENCE{
+ best-ssb-Index SSB-Index,
+ best-ssb-Results MeasQuantityResults,
+ numberOfGoodSSB INTEGER (1..maxNrofSSBs-r16)
+ } OPTIONAL
+}
+
+MeasResultFailedCell-r16 ::= SEQUENCE {
+ cgi-Info CGI-Info-Logging-r16,
+ measResult-r16 SEQUENCE {
+ cellResults-r16 SEQUENCE{
+ resultsSSB-Cell-r16 MeasQuantityResults
+ },
+ rsIndexResults-r16 SEQUENCE{
+ resultsSSB-Indexes-r16 ResultsPerSSB-IndexList
+ }
+ }
+}
+
+RA-ReportList-r16 ::= SEQUENCE (SIZE (1..maxRAReport-r16)) OF RA-Report-r16
+
+RA-Report-r16 ::= SEQUENCE {
+ cellId-r16 CHOICE {
+ cellGlobalId-r16 CGI-Info-Logging-r16,
+ pci-arfcn-r16 PCI-ARFCN-NR-r16
+ },
+ ra-InformationCommon-r16 RA-InformationCommon-r16 OPTIONAL,
+ raPurpose-r16 ENUMERATED {accessRelated, beamFailureRecovery, reconfigurationWithSync, ulUnSynchronized,
+ schedulingRequestFailure, noPUCCHResourceAvailable, requestForOtherSI,
+ msg3RequestForOtherSI-r17, spare8, spare7, spare6, spare5, spare4, spare3,
+ spare2, spare1},
+ ...,
+ [[
+ spCellID-r17 CGI-Info-Logging-r16 OPTIONAL
+ ]]
+}
+
+RA-InformationCommon-r16 ::= SEQUENCE {
+ absoluteFrequencyPointA-r16 ARFCN-ValueNR,
+ locationAndBandwidth-r16 INTEGER (0..37949),
+ subcarrierSpacing-r16 SubcarrierSpacing,
+ msg1-FrequencyStart-r16 INTEGER (0..maxNrofPhysicalResourceBlocks-1) OPTIONAL,
+ msg1-FrequencyStartCFRA-r16 INTEGER (0..maxNrofPhysicalResourceBlocks-1) OPTIONAL,
+ msg1-SubcarrierSpacing-r16 SubcarrierSpacing OPTIONAL,
+ msg1-SubcarrierSpacingCFRA-r16 SubcarrierSpacing OPTIONAL,
+ msg1-FDM-r16 ENUMERATED {one, two, four, eight} OPTIONAL,
+ msg1-FDMCFRA-r16 ENUMERATED {one, two, four, eight} OPTIONAL,
+ perRAInfoList-r16 PerRAInfoList-r16,
+ ...,
+ [[
+ perRAInfoList-v1660 PerRAInfoList-v1660 OPTIONAL
+ ]],
+ [[
+ msg1-SCS-From-prach-ConfigurationIndex-r16 ENUMERATED {kHz1dot25, kHz5, spare2, spare1} OPTIONAL
+ ]],
+ [[
+ msg1-SCS-From-prach-ConfigurationIndexCFRA-r16 ENUMERATED {kHz1dot25, kHz5, spare2, spare1} OPTIONAL
+ ]],
+ [[
+ msgA-RO-FrequencyStart-r17 INTEGER (0..maxNrofPhysicalResourceBlocks-1) OPTIONAL,
+ msgA-RO-FrequencyStartCFRA-r17 INTEGER (0..maxNrofPhysicalResourceBlocks-1) OPTIONAL,
+ msgA-SubcarrierSpacing-r17 SubcarrierSpacing OPTIONAL,
+ msgA-RO-FDM-r17 ENUMERATED {one, two, four, eight} OPTIONAL,
+ msgA-RO-FDMCFRA-r17 ENUMERATED {one, two, four, eight} OPTIONAL,
+ msgA-SCS-From-prach-ConfigurationIndex-r17 ENUMERATED {kHz1dot25, kHz5, spare2, spare1} OPTIONAL,
+ msgA-TransMax-r17 ENUMERATED {n1, n2, n4, n6, n8, n10, n20, n50, n100, n200} OPTIONAL,
+ msgA-MCS-r17 INTEGER (0..15) OPTIONAL,
+ nrofPRBs-PerMsgA-PO-r17 INTEGER (1..32) OPTIONAL,
+ msgA-PUSCH-TimeDomainAllocation-r17 INTEGER (1..maxNrofUL-Allocations) OPTIONAL,
+ frequencyStartMsgA-PUSCH-r17 INTEGER (0..maxNrofPhysicalResourceBlocks-1) OPTIONAL,
+ nrofMsgA-PO-FDM-r17 ENUMERATED {one, two, four, eight} OPTIONAL,
+ dlPathlossRSRP-r17 RSRP-Range OPTIONAL,
+ intendedSIBs-r17 SEQUENCE (SIZE (1..maxSIB)) OF SIB-Type-r17 OPTIONAL,
+ ssbsForSI-Acquisition-r17 SEQUENCE (SIZE (1..maxNrofSSBs-r16)) OF SSB-Index OPTIONAL,
+ msgA-PUSCH-PayloadSize-r17 BIT STRING (SIZE (5)) OPTIONAL,
+ onDemandSISuccess-r17 ENUMERATED {true} OPTIONAL
+ ]]
+}
+
+PerRAInfoList-r16 ::= SEQUENCE (SIZE (1..200)) OF PerRAInfo-r16
+
+PerRAInfoList-v1660 ::= SEQUENCE (SIZE (1..200)) OF PerRACSI-RSInfo-v1660
+
+PerRAInfo-r16 ::= CHOICE {
+ perRASSBInfoList-r16 PerRASSBInfo-r16,
+ perRACSI-RSInfoList-r16 PerRACSI-RSInfo-r16
+}
+
+PerRASSBInfo-r16 ::= SEQUENCE {
+ ssb-Index-r16 SSB-Index,
+ numberOfPreamblesSentOnSSB-r16 INTEGER (1..200),
+ perRAAttemptInfoList-r16 PerRAAttemptInfoList-r16
+}
+
+PerRACSI-RSInfo-r16 ::= SEQUENCE {
+ csi-RS-Index-r16 CSI-RS-Index,
+ numberOfPreamblesSentOnCSI-RS-r16 INTEGER (1..200)
+}
+
+PerRACSI-RSInfo-v1660 ::= SEQUENCE {
+ csi-RS-Index-v1660 INTEGER (1..96) OPTIONAL
+}
+
+PerRAAttemptInfoList-r16 ::= SEQUENCE (SIZE (1..200)) OF PerRAAttemptInfo-r16
+
+PerRAAttemptInfo-r16 ::= SEQUENCE {
+ contentionDetected-r16 BOOLEAN OPTIONAL,
+ dlRSRPAboveThreshold-r16 BOOLEAN OPTIONAL,
+ ...,
+ [[
+ fallbackToFourStepRA-r17 ENUMERATED {true} OPTIONAL
+ ]]
+}
+
+SIB-Type-r17 ::= ENUMERATED {sibType2, sibType3, sibType4, sibType5, sibType9, sibType10-v1610, sibType11-v1610, sibType12-v1610,
+ sibType13-v1610, sibType14-v1610, spare6, spare5, spare4, spare3, spare2, spare1}
+
+RLF-Report-r16 ::= CHOICE {
+ nr-RLF-Report-r16 SEQUENCE {
+ measResultLastServCell-r16 MeasResultRLFNR-r16,
+ measResultNeighCells-r16 SEQUENCE {
+ measResultListNR-r16 MeasResultList2NR-r16 OPTIONAL,
+ measResultListEUTRA-r16 MeasResultList2EUTRA-r16 OPTIONAL
+ } OPTIONAL,
+ c-RNTI-r16 RNTI-Value,
+ previousPCellId-r16 CHOICE {
+ nrPreviousCell-r16 CGI-Info-Logging-r16,
+ eutraPreviousCell-r16 CGI-InfoEUTRALogging
+ } OPTIONAL,
+ failedPCellId-r16 CHOICE {
+ nrFailedPCellId-r16 CHOICE {
+ cellGlobalId-r16 CGI-Info-Logging-r16,
+ pci-arfcn-r16 PCI-ARFCN-NR-r16
+ },
+ eutraFailedPCellId-r16 CHOICE {
+ cellGlobalId-r16 CGI-InfoEUTRALogging,
+ pci-arfcn-r16 PCI-ARFCN-EUTRA-r16
+ }
+ },
+ reconnectCellId-r16 CHOICE {
+ nrReconnectCellId-r16 CGI-Info-Logging-r16,
+ eutraReconnectCellId-r16 CGI-InfoEUTRALogging
+ } OPTIONAL,
+ timeUntilReconnection-r16 TimeUntilReconnection-r16 OPTIONAL,
+ reestablishmentCellId-r16 CGI-Info-Logging-r16 OPTIONAL,
+ timeConnFailure-r16 INTEGER (0..1023) OPTIONAL,
+ timeSinceFailure-r16 TimeSinceFailure-r16,
+ connectionFailureType-r16 ENUMERATED {rlf, hof},
+ rlf-Cause-r16 ENUMERATED {t310-Expiry, randomAccessProblem, rlc-MaxNumRetx,
+ beamFailureRecoveryFailure, lbtFailure-r16,
+ bh-rlfRecoveryFailure, t312-expiry-r17, spare1},
+ locationInfo-r16 LocationInfo-r16 OPTIONAL,
+ noSuitableCellFound-r16 ENUMERATED {true} OPTIONAL,
+ ra-InformationCommon-r16 RA-InformationCommon-r16 OPTIONAL,
+ ...,
+ [[
+ csi-rsRLMConfigBitmap-v1650 BIT STRING (SIZE (96)) OPTIONAL
+ ]],
+ [[
+ lastHO-Type-r17 ENUMERATED {cho, daps, spare2, spare1} OPTIONAL,
+ timeConnSourceDAPS-Failure-r17 TimeConnSourceDAPS-Failure-r17 OPTIONAL,
+ timeSinceCHO-Reconfig-r17 TimeSinceCHO-Reconfig-r17 OPTIONAL,
+ choCellId-r17 CHOICE {
+ cellGlobalId-r17 CGI-Info-Logging-r16,
+ pci-arfcn-r17 PCI-ARFCN-NR-r16
+ } OPTIONAL,
+ choCandidateCellList-r17 ChoCandidateCellList-r17 OPTIONAL
+ ]]
+ },
+ eutra-RLF-Report-r16 SEQUENCE {
+ failedPCellId-EUTRA CGI-InfoEUTRALogging,
+ measResult-RLF-Report-EUTRA-r16 OCTET STRING,
+ ...,
+ [[
+ measResult-RLF-Report-EUTRA-v1690 OCTET STRING OPTIONAL
+ ]]
+ }
+}
+
+SuccessHO-Report-r17 ::= SEQUENCE {
+ sourceCellInfo-r17 SEQUENCE {
+ sourcePCellId-r17 CGI-Info-Logging-r16,
+ sourceCellMeas-r17 MeasResultSuccessHONR-r17 OPTIONAL,
+ rlf-InSourceDAPS-r17 ENUMERATED {true} OPTIONAL
+ },
+ targetCellInfo-r17 SEQUENCE {
+ targetPCellId-r17 CGI-Info-Logging-r16,
+ targetCellMeas-r17 MeasResultSuccessHONR-r17 OPTIONAL
+ },
+ measResultNeighCells-r17 SEQUENCE {
+ measResultListNR-r17 MeasResultList2NR-r16 OPTIONAL,
+ measResultListEUTRA-r17 MeasResultList2EUTRA-r16 OPTIONAL
+ } OPTIONAL,
+ locationInfo-r17 LocationInfo-r16 OPTIONAL,
+ timeSinceCHO-Reconfig-r17 TimeSinceCHO-Reconfig-r17 OPTIONAL,
+ shr-Cause-r17 SHR-Cause-r17 OPTIONAL,
+ ra-InformationCommon-r17 RA-InformationCommon-r16 OPTIONAL,
+ upInterruptionTimeAtHO-r17 UPInterruptionTimeAtHO-r17 OPTIONAL,
+ c-RNTI-r17 RNTI-Value OPTIONAL,
+ ...
+}
+
+MeasResultList2NR-r16 ::= SEQUENCE(SIZE (1..maxFreq)) OF MeasResult2NR-r16
+MeasResultList2EUTRA-r16 ::= SEQUENCE(SIZE (1..maxFreq)) OF MeasResult2EUTRA-r16
+
+MeasResult2NR-r16 ::= SEQUENCE {
+ ssbFrequency-r16 ARFCN-ValueNR OPTIONAL,
+ refFreqCSI-RS-r16 ARFCN-ValueNR OPTIONAL,
+ measResultList-r16 MeasResultListNR
+}
+
+MeasResultListLogging2NR-r16 ::= SEQUENCE(SIZE (1..maxFreq)) OF MeasResultLogging2NR-r16
+
+MeasResultLogging2NR-r16 ::= SEQUENCE {
+ carrierFreq-r16 ARFCN-ValueNR,
+ measResultListLoggingNR-r16 MeasResultListLoggingNR-r16
+}
+
+MeasResultListLoggingNR-r16 ::= SEQUENCE (SIZE (1..maxCellReport)) OF MeasResultLoggingNR-r16
+
+MeasResultLoggingNR-r16 ::= SEQUENCE {
+ physCellId-r16 PhysCellId,
+ resultsSSB-Cell-r16 MeasQuantityResults,
+ numberOfGoodSSB-r16 INTEGER (1..maxNrofSSBs-r16) OPTIONAL
+}
+
+MeasResult2EUTRA-r16 ::= SEQUENCE {
+ carrierFreq-r16 ARFCN-ValueEUTRA,
+ measResultList-r16 MeasResultListEUTRA
+}
+
+MeasResultRLFNR-r16 ::= SEQUENCE {
+ measResult-r16 SEQUENCE {
+ cellResults-r16 SEQUENCE{
+ resultsSSB-Cell-r16 MeasQuantityResults OPTIONAL,
+ resultsCSI-RS-Cell-r16 MeasQuantityResults OPTIONAL
+ },
+ rsIndexResults-r16 SEQUENCE{
+ resultsSSB-Indexes-r16 ResultsPerSSB-IndexList OPTIONAL,
+ ssbRLMConfigBitmap-r16 BIT STRING (SIZE (64)) OPTIONAL,
+ resultsCSI-RS-Indexes-r16 ResultsPerCSI-RS-IndexList OPTIONAL,
+ csi-rsRLMConfigBitmap-r16 BIT STRING (SIZE (96)) OPTIONAL
+ } OPTIONAL
+ }
+}
+
+MeasResultSuccessHONR-r17::= SEQUENCE {
+ measResult-r17 SEQUENCE {
+ cellResults-r17 SEQUENCE{
+ resultsSSB-Cell-r17 MeasQuantityResults OPTIONAL,
+ resultsCSI-RS-Cell-r17 MeasQuantityResults OPTIONAL
+ },
+ rsIndexResults-r17 SEQUENCE{
+ resultsSSB-Indexes-r17 ResultsPerSSB-IndexList OPTIONAL,
+ resultsCSI-RS-Indexes-r17 ResultsPerCSI-RS-IndexList OPTIONAL
+ }
+ }
+}
+
+ChoCandidateCellList-r17 ::= SEQUENCE(SIZE (1..maxNrofCondCells-r16)) OF ChoCandidateCell-r17
+
+ChoCandidateCell-r17 ::= CHOICE {
+ cellGlobalId-r17 CGI-Info-Logging-r16,
+ pci-arfcn-r17 PCI-ARFCN-NR-r16
+}
+
+SHR-Cause-r17 ::= SEQUENCE {
+ t304-cause-r17 ENUMERATED {true} OPTIONAL,
+ t310-cause-r17 ENUMERATED {true} OPTIONAL,
+ t312-cause-r17 ENUMERATED {true} OPTIONAL,
+ sourceDAPS-Failure-r17 ENUMERATED {true} OPTIONAL,
+ ...
+}
+
+TimeSinceFailure-r16 ::= INTEGER (0..172800)
+
+MobilityHistoryReport-r16 ::= VisitedCellInfoList-r16
+
+TimeUntilReconnection-r16 ::= INTEGER (0..172800)
+
+TimeSinceCHO-Reconfig-r17 ::= INTEGER (0..1023)
+
+TimeConnSourceDAPS-Failure-r17 ::= INTEGER (0..1023)
+
+UPInterruptionTimeAtHO-r17 ::= INTEGER (0..1023)
+
+-- TAG-UEINFORMATIONRESPONSE-STOP
+-- TAG-UEPOSITIONINGASSISTANCEINFO-START
+
+UEPositioningAssistanceInfo-r17 ::= SEQUENCE {
+ criticalExtensions CHOICE {
+ uePositioningAssistanceInfo-r17 UEPositioningAssistanceInfo-r17-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+UEPositioningAssistanceInfo-r17-IEs ::= SEQUENCE {
+ ue-TxTEG-AssociationList-r17 UE-TxTEG-AssociationList-r17 OPTIONAL,
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension UEPositioningAssistanceInfo-v1720-IEs OPTIONAL
+}
+
+UEPositioningAssistanceInfo-v1720-IEs::= SEQUENCE {
+ ue-TxTEG-TimingErrorMarginValue-r17 ENUMERATED {tc0, tc2, tc4, tc6, tc8, tc12, tc16, tc20, tc24, tc32, tc40, tc48, tc56,
+ tc64, tc72, tc80} OPTIONAL,
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+UE-TxTEG-AssociationList-r17 ::= SEQUENCE (SIZE (1..maxNrOfTxTEGReport-r17)) OF UE-TxTEG-Association-r17
+
+UE-TxTEG-Association-r17 ::= SEQUENCE {
+ ue-TxTEG-ID-r17 INTEGER (0..maxNrOfTxTEG-ID-1-r17),
+ nr-TimeStamp-r17 NR-TimeStamp-r17,
+ associatedSRS-PosResourceIdList-r17 SEQUENCE (SIZE(1..maxNrofSRS-PosResources-r16)) OF SRS-PosResourceId-r16,
+ servCellId-r17 ServCellIndex OPTIONAL
+}
+
+NR-TimeStamp-r17 ::= SEQUENCE {
+ nr-SFN-r17 INTEGER (0..1023),
+ nr-Slot-r17 CHOICE {
+ scs15-r17 INTEGER (0..9),
+ scs30-r17 INTEGER (0..19),
+ scs60-r17 INTEGER (0..39),
+ scs120-r17 INTEGER (0..79)
+ },
+ ...
+}
+
+-- TAG-UEPOSITIONINGASSISTANCEINFO-STOP
+-- TAG-ULDEDICATEDMESSAGESEGMENT-START
+
+ULDedicatedMessageSegment-r16 ::= SEQUENCE {
+ criticalExtensions CHOICE {
+ ulDedicatedMessageSegment-r16 ULDedicatedMessageSegment-r16-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+ULDedicatedMessageSegment-r16-IEs ::= SEQUENCE {
+ segmentNumber-r16 INTEGER (0..15),
+ rrc-MessageSegmentContainer-r16 OCTET STRING,
+ rrc-MessageSegmentType-r16 ENUMERATED {notLastSegment, lastSegment},
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+-- TAG-ULDEDICATEDMESSAGESEGMENT-STOP
+-- TAG-ULINFORMATIONTRANSFER-START
+
+ULInformationTransfer ::= SEQUENCE {
+ criticalExtensions CHOICE {
+ ulInformationTransfer ULInformationTransfer-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+ULInformationTransfer-IEs ::= SEQUENCE {
+ dedicatedNAS-Message DedicatedNAS-Message OPTIONAL,
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension ULInformationTransfer-v1700-IEs OPTIONAL
+}
+
+ULInformationTransfer-v1700-IEs ::= SEQUENCE {
+ dedicatedInfoF1c-r17 DedicatedInfoF1c-r17 OPTIONAL,
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+-- TAG-ULINFORMATIONTRANSFER-STOP
+-- TAG-ULINFORMATIONTRANSFERIRAT-START
+
+ULInformationTransferIRAT-r16 ::= SEQUENCE {
+ criticalExtensions CHOICE {
+ c1 CHOICE {
+ ulInformationTransferIRAT-r16 ULInformationTransferIRAT-r16-IEs,
+ spare3 NULL, spare2 NULL, spare1 NULL
+ },
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+ULInformationTransferIRAT-r16-IEs ::= SEQUENCE {
+ ul-DCCH-MessageEUTRA-r16 OCTET STRING OPTIONAL,
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+-- TAG-ULINFORMATIONTRANSFERIRAT-STOP
+-- TAG-ULINFORMATIONTRANSFERMRDC-START
+
+ULInformationTransferMRDC ::= SEQUENCE {
+ criticalExtensions CHOICE {
+ c1 CHOICE {
+ ulInformationTransferMRDC ULInformationTransferMRDC-IEs,
+ spare3 NULL, spare2 NULL, spare1 NULL
+ },
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+ULInformationTransferMRDC-IEs::= SEQUENCE {
+ ul-DCCH-MessageNR OCTET STRING OPTIONAL,
+ ul-DCCH-MessageEUTRA OCTET STRING OPTIONAL,
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+-- TAG-ULINFORMATIONTRANSFERMRDC-STOP
+-- TAG-SETUPRELEASE-START
+
+SetupRelease { ElementTypeParam } ::= CHOICE {
+ release NULL,
+ setup ElementTypeParam
+}
+
+-- TAG-SETUPRELEASE-STOP
+-- TAG-SIB2-START
+
+SIB2 ::= SEQUENCE {
+ cellReselectionInfoCommon SEQUENCE {
+ nrofSS-BlocksToAverage INTEGER (2..maxNrofSS-BlocksToAverage) OPTIONAL, -- Need S
+ absThreshSS-BlocksConsolidation ThresholdNR OPTIONAL, -- Need S
+ rangeToBestCell RangeToBestCell OPTIONAL, -- Need R
+ q-Hyst ENUMERATED {
+ dB0, dB1, dB2, dB3, dB4, dB5, dB6, dB8, dB10,
+ dB12, dB14, dB16, dB18, dB20, dB22, dB24},
+ speedStateReselectionPars SEQUENCE {
+ mobilityStateParameters MobilityStateParameters,
+ q-HystSF SEQUENCE {
+ sf-Medium ENUMERATED {dB-6, dB-4, dB-2, dB0},
+ sf-High ENUMERATED {dB-6, dB-4, dB-2, dB0}
+ }
+ } OPTIONAL, -- Need R
+ ...
+ },
+ cellReselectionServingFreqInfo SEQUENCE {
+ s-NonIntraSearchP ReselectionThreshold OPTIONAL, -- Need S
+ s-NonIntraSearchQ ReselectionThresholdQ OPTIONAL, -- Need S
+ threshServingLowP ReselectionThreshold,
+ threshServingLowQ ReselectionThresholdQ OPTIONAL, -- Need R
+ cellReselectionPriority CellReselectionPriority,
+ cellReselectionSubPriority CellReselectionSubPriority OPTIONAL, -- Need R
+ ...
+ },
+ intraFreqCellReselectionInfo SEQUENCE {
+ q-RxLevMin Q-RxLevMin,
+ q-RxLevMinSUL Q-RxLevMin OPTIONAL, -- Need R
+ q-QualMin Q-QualMin OPTIONAL, -- Need S
+ s-IntraSearchP ReselectionThreshold,
+ s-IntraSearchQ ReselectionThresholdQ OPTIONAL, -- Need S
+ t-ReselectionNR T-Reselection,
+ frequencyBandList MultiFrequencyBandListNR-SIB OPTIONAL, -- Need S
+ frequencyBandListSUL MultiFrequencyBandListNR-SIB OPTIONAL, -- Need R
+ p-Max P-Max OPTIONAL, -- Need S
+ smtc SSB-MTC OPTIONAL, -- Need S
+ ss-RSSI-Measurement SS-RSSI-Measurement OPTIONAL, -- Need R
+ ssb-ToMeasure SSB-ToMeasure OPTIONAL, -- Need S
+ deriveSSB-IndexFromCell BOOLEAN,
+ ...,
+ [[
+ t-ReselectionNR-SF SpeedStateScaleFactors OPTIONAL -- Need N
+ ]],
+ [[
+ smtc2-LP-r16 SSB-MTC2-LP-r16 OPTIONAL, -- Need R
+ ssb-PositionQCL-Common-r16 SSB-PositionQCL-Relation-r16 OPTIONAL -- Cond SharedSpectrum
+ ]],
+ [[
+ ssb-PositionQCL-Common-r17 SSB-PositionQCL-Relation-r17 OPTIONAL -- Cond SharedSpectrum2
+ ]],
+ [[
+ smtc4list-r17 SSB-MTC4List-r17 OPTIONAL -- Need R
+ ]]
+ },
+ ...,
+ [[
+ relaxedMeasurement-r16 SEQUENCE {
+ lowMobilityEvaluation-r16 SEQUENCE {
+ s-SearchDeltaP-r16 ENUMERATED {
+ dB3, dB6, dB9, dB12, dB15,
+ spare3, spare2, spare1},
+ t-SearchDeltaP-r16 ENUMERATED {
+ s5, s10, s20, s30, s60, s120, s180,
+ s240, s300, spare7, spare6, spare5,
+ spare4, spare3, spare2, spare1}
+ } OPTIONAL, -- Need R
+ cellEdgeEvaluation-r16 SEQUENCE {
+ s-SearchThresholdP-r16 ReselectionThreshold,
+ s-SearchThresholdQ-r16 ReselectionThresholdQ OPTIONAL -- Need R
+ } OPTIONAL, -- Need R
+ combineRelaxedMeasCondition-r16 ENUMERATED {true} OPTIONAL, -- Need R
+ highPriorityMeasRelax-r16 ENUMERATED {true} OPTIONAL -- Need R
+ } OPTIONAL -- Need R
+ ]],
+ [[
+ cellEquivalentSize-r17 INTEGER(2..16) OPTIONAL, -- Cond HSDN
+ relaxedMeasurement-r17 SEQUENCE {
+ stationaryMobilityEvaluation-r17 SEQUENCE {
+ s-SearchDeltaP-Stationary-r17 ENUMERATED {dB2, dB3, dB6, dB9, dB12, dB15, spare2, spare1},
+ t-SearchDeltaP-Stationary-r17 ENUMERATED {s5, s10, s20, s30, s60, s120, s180, s240, s300, spare7, spare6, spare5,
+ spare4, spare3, spare2, spare1}
+ },
+ cellEdgeEvaluationWhileStationary-r17 SEQUENCE {
+ s-SearchThresholdP2-r17 ReselectionThreshold,
+ s-SearchThresholdQ2-r17 ReselectionThresholdQ OPTIONAL -- Need R
+ } OPTIONAL, -- Need R
+ combineRelaxedMeasCondition2-r17 ENUMERATED {true} OPTIONAL -- Need R
+ } OPTIONAL -- Need R
+ ]]
+}
+
+RangeToBestCell ::= Q-OffsetRange
+
+-- TAG-SIB2-STOP
+-- TAG-SIB3-START
+
+SIB3 ::= SEQUENCE {
+ intraFreqNeighCellList IntraFreqNeighCellList OPTIONAL, -- Need R
+ intraFreqExcludedCellList IntraFreqExcludedCellList OPTIONAL, -- Need R
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ ...,
+ [[
+ intraFreqNeighCellList-v1610 IntraFreqNeighCellList-v1610 OPTIONAL, -- Need R
+ intraFreqAllowedCellList-r16 IntraFreqAllowedCellList-r16 OPTIONAL, -- Cond SharedSpectrum2
+ intraFreqCAG-CellList-r16 SEQUENCE (SIZE (1..maxPLMN)) OF IntraFreqCAG-CellListPerPLMN-r16 OPTIONAL -- Need R
+ ]],
+ [[
+ intraFreqNeighHSDN-CellList-r17 IntraFreqNeighHSDN-CellList-r17 OPTIONAL, -- Need R
+ intraFreqNeighCellList-v1710 IntraFreqNeighCellList-v1710 OPTIONAL -- Need R
+ ]],
+ [[
+ channelAccessMode2-r17 ENUMERATED {enabled} OPTIONAL -- Need R
+ ]]
+}
+
+IntraFreqNeighCellList ::= SEQUENCE (SIZE (1..maxCellIntra)) OF IntraFreqNeighCellInfo
+
+IntraFreqNeighCellList-v1610::= SEQUENCE (SIZE (1..maxCellIntra)) OF IntraFreqNeighCellInfo-v1610
+
+IntraFreqNeighCellList-v1710 ::= SEQUENCE (SIZE (1..maxCellIntra)) OF IntraFreqNeighCellInfo-v1710
+
+IntraFreqNeighCellInfo ::= SEQUENCE {
+ physCellId PhysCellId,
+ q-OffsetCell Q-OffsetRange,
+ q-RxLevMinOffsetCell INTEGER (1..8) OPTIONAL, -- Need R
+ q-RxLevMinOffsetCellSUL INTEGER (1..8) OPTIONAL, -- Need R
+ q-QualMinOffsetCell INTEGER (1..8) OPTIONAL, -- Need R
+ ...
+}
+
+IntraFreqNeighCellInfo-v1610 ::= SEQUENCE {
+ ssb-PositionQCL-r16 SSB-PositionQCL-Relation-r16 OPTIONAL -- Cond SharedSpectrum2
+}
+
+IntraFreqNeighCellInfo-v1710 ::= SEQUENCE {
+ ssb-PositionQCL-r17 SSB-PositionQCL-Relation-r17 OPTIONAL -- Cond SharedSpectrum2
+}
+
+IntraFreqExcludedCellList ::= SEQUENCE (SIZE (1..maxCellExcluded)) OF PCI-Range
+
+IntraFreqAllowedCellList-r16 ::= SEQUENCE (SIZE (1..maxCellAllowed)) OF PCI-Range
+
+IntraFreqCAG-CellListPerPLMN-r16 ::= SEQUENCE {
+ plmn-IdentityIndex-r16 INTEGER (1..maxPLMN),
+ cag-CellList-r16 SEQUENCE (SIZE (1..maxCAG-Cell-r16)) OF PCI-Range
+}
+
+IntraFreqNeighHSDN-CellList-r17 ::= SEQUENCE (SIZE (1..maxCellIntra)) OF PCI-Range
+
+-- TAG-SIB3-STOP
+-- TAG-SIB4-START
+
+SIB4 ::= SEQUENCE {
+ interFreqCarrierFreqList InterFreqCarrierFreqList,
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ ...,
+ [[
+ interFreqCarrierFreqList-v1610 InterFreqCarrierFreqList-v1610 OPTIONAL -- Need R
+ ]],
+ [[
+ interFreqCarrierFreqList-v1700 InterFreqCarrierFreqList-v1700 OPTIONAL -- Need R
+ ]],
+ [[
+ interFreqCarrierFreqList-v1720 InterFreqCarrierFreqList-v1720 OPTIONAL -- Need R
+ ]],
+ [[
+ interFreqCarrierFreqList-v1730 InterFreqCarrierFreqList-v1730 OPTIONAL -- Need R
+ ]]
+}
+
+InterFreqCarrierFreqList ::= SEQUENCE (SIZE (1..maxFreq)) OF InterFreqCarrierFreqInfo
+
+InterFreqCarrierFreqList-v1610 ::= SEQUENCE (SIZE (1..maxFreq)) OF InterFreqCarrierFreqInfo-v1610
+
+InterFreqCarrierFreqList-v1700 ::= SEQUENCE (SIZE (1..maxFreq)) OF InterFreqCarrierFreqInfo-v1700
+
+InterFreqCarrierFreqList-v1720 ::= SEQUENCE (SIZE (1..maxFreq)) OF InterFreqCarrierFreqInfo-v1720
+
+InterFreqCarrierFreqList-v1730 ::= SEQUENCE (SIZE (1..maxFreq)) OF InterFreqCarrierFreqInfo-v1730
+
+InterFreqCarrierFreqInfo ::= SEQUENCE {
+ dl-CarrierFreq ARFCN-ValueNR,
+ frequencyBandList MultiFrequencyBandListNR-SIB OPTIONAL, -- Cond Mandatory
+ frequencyBandListSUL MultiFrequencyBandListNR-SIB OPTIONAL, -- Need R
+ nrofSS-BlocksToAverage INTEGER (2..maxNrofSS-BlocksToAverage) OPTIONAL, -- Need S
+ absThreshSS-BlocksConsolidation ThresholdNR OPTIONAL, -- Need S
+ smtc SSB-MTC OPTIONAL, -- Need S
+ ssbSubcarrierSpacing SubcarrierSpacing,
+ ssb-ToMeasure SSB-ToMeasure OPTIONAL, -- Need S
+ deriveSSB-IndexFromCell BOOLEAN,
+ ss-RSSI-Measurement SS-RSSI-Measurement OPTIONAL, -- Need R
+ q-RxLevMin Q-RxLevMin,
+ q-RxLevMinSUL Q-RxLevMin OPTIONAL, -- Need R
+ q-QualMin Q-QualMin OPTIONAL, -- Need S
+ p-Max P-Max OPTIONAL, -- Need S
+ t-ReselectionNR T-Reselection,
+ t-ReselectionNR-SF SpeedStateScaleFactors OPTIONAL, -- Need S
+ threshX-HighP ReselectionThreshold,
+ threshX-LowP ReselectionThreshold,
+ threshX-Q SEQUENCE {
+ threshX-HighQ ReselectionThresholdQ,
+ threshX-LowQ ReselectionThresholdQ
+ } OPTIONAL, -- Cond RSRQ
+ cellReselectionPriority CellReselectionPriority OPTIONAL, -- Need R
+ cellReselectionSubPriority CellReselectionSubPriority OPTIONAL, -- Need R
+ q-OffsetFreq Q-OffsetRange DEFAULT dB0,
+ interFreqNeighCellList InterFreqNeighCellList OPTIONAL, -- Need R
+ interFreqExcludedCellList InterFreqExcludedCellList OPTIONAL, -- Need R
+ ...
+}
+
+InterFreqCarrierFreqInfo-v1610 ::= SEQUENCE {
+ interFreqNeighCellList-v1610 InterFreqNeighCellList-v1610 OPTIONAL, -- Need R
+ smtc2-LP-r16 SSB-MTC2-LP-r16 OPTIONAL, -- Need R
+ interFreqAllowedCellList-r16 InterFreqAllowedCellList-r16 OPTIONAL, -- Cond SharedSpectrum2
+ ssb-PositionQCL-Common-r16 SSB-PositionQCL-Relation-r16 OPTIONAL, -- Cond SharedSpectrum
+ interFreqCAG-CellList-r16 SEQUENCE (SIZE (1..maxPLMN)) OF InterFreqCAG-CellListPerPLMN-r16 OPTIONAL -- Need R
+}
+
+InterFreqCarrierFreqInfo-v1700 ::= SEQUENCE {
+ interFreqNeighHSDN-CellList-r17 InterFreqNeighHSDN-CellList-r17 OPTIONAL, -- Need R
+ highSpeedMeasInterFreq-r17 ENUMERATED {true} OPTIONAL, -- Need R
+ redCapAccessAllowed-r17 ENUMERATED {true} OPTIONAL, -- Need R
+ ssb-PositionQCL-Common-r17 SSB-PositionQCL-Relation-r17 OPTIONAL, -- Cond SharedSpectrum
+ interFreqNeighCellList-v1710 InterFreqNeighCellList-v1710 OPTIONAL -- Cond SharedSpectrum2
+}
+
+InterFreqCarrierFreqInfo-v1720 ::= SEQUENCE {
+ smtc4list-r17 SSB-MTC4List-r17 OPTIONAL -- Need R
+}
+
+InterFreqCarrierFreqInfo-v1730 ::= SEQUENCE {
+ channelAccessMode2-r17 ENUMERATED {enabled} OPTIONAL -- Need R
+}
+
+InterFreqNeighHSDN-CellList-r17 ::= SEQUENCE (SIZE (1..maxCellInter)) OF PCI-Range
+
+InterFreqNeighCellList ::= SEQUENCE (SIZE (1..maxCellInter)) OF InterFreqNeighCellInfo
+
+InterFreqNeighCellList-v1610 ::= SEQUENCE (SIZE (1..maxCellInter)) OF InterFreqNeighCellInfo-v1610
+
+InterFreqNeighCellList-v1710 ::= SEQUENCE (SIZE (1..maxCellInter)) OF InterFreqNeighCellInfo-v1710
+
+InterFreqNeighCellInfo ::= SEQUENCE {
+ physCellId PhysCellId,
+ q-OffsetCell Q-OffsetRange,
+ q-RxLevMinOffsetCell INTEGER (1..8) OPTIONAL, -- Need R
+ q-RxLevMinOffsetCellSUL INTEGER (1..8) OPTIONAL, -- Need R
+ q-QualMinOffsetCell INTEGER (1..8) OPTIONAL, -- Need R
+ ...
+}
+
+InterFreqNeighCellInfo-v1610 ::= SEQUENCE {
+ ssb-PositionQCL-r16 SSB-PositionQCL-Relation-r16 OPTIONAL -- Cond SharedSpectrum2
+}
+
+InterFreqNeighCellInfo-v1710 ::= SEQUENCE {
+ ssb-PositionQCL-r17 SSB-PositionQCL-Relation-r17 OPTIONAL -- Cond SharedSpectrum2
+}
+
+InterFreqExcludedCellList ::= SEQUENCE (SIZE (1..maxCellExcluded)) OF PCI-Range
+
+InterFreqAllowedCellList-r16 ::= SEQUENCE (SIZE (1..maxCellAllowed)) OF PCI-Range
+
+InterFreqCAG-CellListPerPLMN-r16 ::= SEQUENCE {
+ plmn-IdentityIndex-r16 INTEGER (1..maxPLMN),
+ cag-CellList-r16 SEQUENCE (SIZE (1..maxCAG-Cell-r16)) OF PCI-Range
+}
+
+-- TAG-SIB4-STOP
+-- TAG-SIB5-START
+
+SIB5 ::= SEQUENCE {
+ carrierFreqListEUTRA CarrierFreqListEUTRA OPTIONAL, -- Need R
+ t-ReselectionEUTRA T-Reselection,
+ t-ReselectionEUTRA-SF SpeedStateScaleFactors OPTIONAL, -- Need S
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ ...,
+ [[
+ carrierFreqListEUTRA-v1610 CarrierFreqListEUTRA-v1610 OPTIONAL -- Need R
+ ]],
+ [[
+ carrierFreqListEUTRA-v1700 CarrierFreqListEUTRA-v1700 OPTIONAL, -- Need R
+ idleModeMeasVoiceFallback-r17 ENUMERATED{true} OPTIONAL -- Need R
+ ]]
+}
+
+CarrierFreqListEUTRA ::= SEQUENCE (SIZE (1..maxEUTRA-Carrier)) OF CarrierFreqEUTRA
+
+CarrierFreqListEUTRA-v1610 ::= SEQUENCE (SIZE (1..maxEUTRA-Carrier)) OF CarrierFreqEUTRA-v1610
+
+CarrierFreqListEUTRA-v1700 ::= SEQUENCE (SIZE (1..maxEUTRA-Carrier)) OF CarrierFreqEUTRA-v1700
+
+CarrierFreqEUTRA ::= SEQUENCE {
+ carrierFreq ARFCN-ValueEUTRA,
+ eutra-multiBandInfoList EUTRA-MultiBandInfoList OPTIONAL, -- Need R
+ eutra-FreqNeighCellList EUTRA-FreqNeighCellList OPTIONAL, -- Need R
+ eutra-ExcludedCellList EUTRA-FreqExcludedCellList OPTIONAL, -- Need R
+ allowedMeasBandwidth EUTRA-AllowedMeasBandwidth,
+ presenceAntennaPort1 EUTRA-PresenceAntennaPort1,
+ cellReselectionPriority CellReselectionPriority OPTIONAL, -- Need R
+ cellReselectionSubPriority CellReselectionSubPriority OPTIONAL, -- Need R
+ threshX-High ReselectionThreshold,
+ threshX-Low ReselectionThreshold,
+ q-RxLevMin INTEGER (-70..-22),
+ q-QualMin INTEGER (-34..-3),
+ p-MaxEUTRA INTEGER (-30..33),
+ threshX-Q SEQUENCE {
+ threshX-HighQ ReselectionThresholdQ,
+ threshX-LowQ ReselectionThresholdQ
+ } OPTIONAL -- Cond RSRQ
+}
+
+CarrierFreqEUTRA-v1610 ::= SEQUENCE {
+ highSpeedEUTRACarrier-r16 ENUMERATED {true} OPTIONAL -- Need R
+}
+
+CarrierFreqEUTRA-v1700 ::= SEQUENCE {
+ eutra-FreqNeighHSDN-CellList-r17 EUTRA-FreqNeighHSDN-CellList-r17 OPTIONAL -- Need R
+}
+
+EUTRA-FreqNeighHSDN-CellList-r17 ::= SEQUENCE (SIZE (1..maxCellEUTRA)) OF EUTRA-PhysCellIdRange
+
+EUTRA-FreqExcludedCellList ::= SEQUENCE (SIZE (1..maxEUTRA-CellExcluded)) OF EUTRA-PhysCellIdRange
+
+EUTRA-FreqNeighCellList ::= SEQUENCE (SIZE (1..maxCellEUTRA)) OF EUTRA-FreqNeighCellInfo
+
+EUTRA-FreqNeighCellInfo ::= SEQUENCE {
+ physCellId EUTRA-PhysCellId,
+ dummy EUTRA-Q-OffsetRange,
+ q-RxLevMinOffsetCell INTEGER (1..8) OPTIONAL, -- Need R
+ q-QualMinOffsetCell INTEGER (1..8) OPTIONAL -- Need R
+}
+
+-- TAG-SIB5-STOP
+-- TAG-SIB6-START
+
+SIB6 ::= SEQUENCE {
+ messageIdentifier BIT STRING (SIZE (16)),
+ serialNumber BIT STRING (SIZE (16)),
+ warningType OCTET STRING (SIZE (2)),
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ ...
+}
+
+-- TAG-SIB6-STOP
+-- TAG-SIB7-START
+
+SIB7 ::= SEQUENCE {
+ messageIdentifier BIT STRING (SIZE (16)),
+ serialNumber BIT STRING (SIZE (16)),
+ warningMessageSegmentType ENUMERATED {notLastSegment, lastSegment},
+ warningMessageSegmentNumber INTEGER (0..63),
+ warningMessageSegment OCTET STRING,
+ dataCodingScheme OCTET STRING (SIZE (1)) OPTIONAL, -- Cond Segment1
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ ...
+}
+
+-- TAG-SIB7-STOP
+-- TAG-SIB8-START
+
+SIB8 ::= SEQUENCE {
+ messageIdentifier BIT STRING (SIZE (16)),
+ serialNumber BIT STRING (SIZE (16)),
+ warningMessageSegmentType ENUMERATED {notLastSegment, lastSegment},
+ warningMessageSegmentNumber INTEGER (0..63),
+ warningMessageSegment OCTET STRING,
+ dataCodingScheme OCTET STRING (SIZE (1)) OPTIONAL, -- Cond Segment1
+ warningAreaCoordinatesSegment OCTET STRING OPTIONAL, -- Need R
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ ...
+}
+
+-- TAG-SIB8-STOP
+-- TAG-SIB9-START
+
+SIB9 ::= SEQUENCE {
+ timeInfo SEQUENCE {
+ timeInfoUTC INTEGER (0..549755813887),
+ dayLightSavingTime BIT STRING (SIZE (2)) OPTIONAL, -- Need R
+ leapSeconds INTEGER (-127..128) OPTIONAL, -- Need R
+ localTimeOffset INTEGER (-63..64) OPTIONAL -- Need R
+ } OPTIONAL, -- Need R
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ ...,
+ [[
+ referenceTimeInfo-r16 ReferenceTimeInfo-r16 OPTIONAL -- Need R
+ ]]
+}
+
+-- TAG-SIB9-STOP
+-- TAG-SIB10-START
+
+SIB10-r16 ::= SEQUENCE {
+ hrnn-List-r16 HRNN-List-r16 OPTIONAL, -- Need R
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ ...
+}
+
+HRNN-List-r16 ::= SEQUENCE (SIZE (1..maxNPN-r16)) OF HRNN-r16
+
+HRNN-r16 ::= SEQUENCE {
+ hrnn-r16 OCTET STRING (SIZE(1.. maxHRNN-Len-r16)) OPTIONAL -- Need R
+}
+
+-- TAG-SIB10-STOP
+-- TAG-SIB11-START
+
+SIB11-r16 ::= SEQUENCE {
+ measIdleConfigSIB-r16 MeasIdleConfigSIB-r16 OPTIONAL, -- Need S
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ ...
+}
+
+-- TAG-SIB11-STOP
+-- TAG-SIB12-START
+
+SIB12-r16 ::= SEQUENCE {
+ segmentNumber-r16 INTEGER (0..63),
+ segmentType-r16 ENUMERATED {notLastSegment, lastSegment},
+ segmentContainer-r16 OCTET STRING
+}
+
+SIB12-IEs-r16 ::= SEQUENCE {
+ sl-ConfigCommonNR-r16 SL-ConfigCommonNR-r16,
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ ...,
+ [[
+ sl-DRX-ConfigCommonGC-BC-r17 SL-DRX-ConfigGC-BC-r17 OPTIONAL, -- Need R
+ sl-DiscConfigCommon-r17 SL-DiscConfigCommon-r17 OPTIONAL, -- Need R
+ sl-L2U2N-Relay-r17 ENUMERATED {enabled} OPTIONAL, -- Need R
+ sl-NonRelayDiscovery-r17 ENUMERATED {enabled} OPTIONAL, -- Need R
+ sl-L3U2N-RelayDiscovery-r17 ENUMERATED {enabled} OPTIONAL, -- Need R
+ sl-TimersAndConstantsRemoteUE-r17 UE-TimersAndConstantsRemoteUE-r17 OPTIONAL -- Need R
+ ]]
+}
+
+SL-ConfigCommonNR-r16 ::= SEQUENCE {
+ sl-FreqInfoList-r16 SEQUENCE (SIZE (1..maxNrofFreqSL-r16)) OF SL-FreqConfigCommon-r16 OPTIONAL, -- Need R
+ sl-UE-SelectedConfig-r16 SL-UE-SelectedConfig-r16 OPTIONAL, -- Need R
+ sl-NR-AnchorCarrierFreqList-r16 SL-NR-AnchorCarrierFreqList-r16 OPTIONAL, -- Need R
+ sl-EUTRA-AnchorCarrierFreqList-r16 SL-EUTRA-AnchorCarrierFreqList-r16 OPTIONAL, -- Need R
+ sl-RadioBearerConfigList-r16 SEQUENCE (SIZE (1..maxNrofSLRB-r16)) OF SL-RadioBearerConfig-r16 OPTIONAL, -- Need R
+ sl-RLC-BearerConfigList-r16 SEQUENCE (SIZE (1..maxSL-LCID-r16)) OF SL-RLC-BearerConfig-r16 OPTIONAL, -- Need R
+ sl-MeasConfigCommon-r16 SL-MeasConfigCommon-r16 OPTIONAL, -- Need R
+ sl-CSI-Acquisition-r16 ENUMERATED {enabled} OPTIONAL, -- Need R
+ sl-OffsetDFN-r16 INTEGER (1..1000) OPTIONAL, -- Need R
+ t400-r16 ENUMERATED {ms100, ms200, ms300, ms400, ms600, ms1000, ms1500, ms2000} OPTIONAL, -- Need R
+ sl-MaxNumConsecutiveDTX-r16 ENUMERATED {n1, n2, n3, n4, n6, n8, n16, n32} OPTIONAL, -- Need R
+ sl-SSB-PriorityNR-r16 INTEGER (1..8) OPTIONAL -- Need R
+}
+
+SL-NR-AnchorCarrierFreqList-r16 ::= SEQUENCE (SIZE (1..maxFreqSL-NR-r16)) OF ARFCN-ValueNR
+
+SL-EUTRA-AnchorCarrierFreqList-r16 ::= SEQUENCE (SIZE (1..maxFreqSL-EUTRA-r16)) OF ARFCN-ValueEUTRA
+
+SL-DiscConfigCommon-r17 ::= SEQUENCE {
+ sl-RelayUE-ConfigCommon-r17 SL-RelayUE-Config-r17,
+ sl-RemoteUE-ConfigCommon-r17 SL-RemoteUE-Config-r17
+}
+
+-- TAG-SIB12-STOP
+-- TAG-SIB13-START
+
+SIB13-r16 ::= SEQUENCE {
+ sl-V2X-ConfigCommon-r16 OCTET STRING,
+ dummy OCTET STRING,
+ tdd-Config-r16 OCTET STRING,
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ ...
+}
+
+-- TAG-SIB13-STOP
+-- TAG-SIB14-START
+
+SIB14-r16 ::= SEQUENCE {
+ sl-V2X-ConfigCommonExt-r16 OCTET STRING,
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ ...
+}
+
+-- TAG-SIB14-STOP
+-- TAG-SIB15-START
+
+SIB15-r17 ::= SEQUENCE {
+ commonPLMNsWithDisasterCondition-r17 SEQUENCE (SIZE (1..maxPLMN)) OF PLMN-Identity OPTIONAL, -- Need R
+ applicableDisasterInfoList-r17 SEQUENCE (SIZE (1..maxPLMN)) OF ApplicableDisasterInfo-r17 OPTIONAL, -- Need R
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ ...
+}
+
+ApplicableDisasterInfo-r17 ::= CHOICE {
+ noDisasterRoaming-r17 NULL,
+ disasterRelatedIndication-r17 NULL,
+ commonPLMNs-r17 NULL,
+ dedicatedPLMNs-r17 SEQUENCE (SIZE (1..maxPLMN)) OF PLMN-Identity
+}
+
+-- TAG-SIB15-STOP
+-- TAG-SIB16-START
+
+SIB16-r17 ::= SEQUENCE {
+ freqPriorityListSlicing-r17 FreqPriorityListSlicing-r17 OPTIONAL, -- Need R
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ ...
+}
+
+-- TAG-SIB16-STOP
+-- TAG-SIB17-START
+
+SIB17-r17 ::= SEQUENCE {
+ segmentNumber-r17 INTEGER (0..63),
+ segmentType-r17 ENUMERATED {notLastSegment, lastSegment},
+ segmentContainer-r17 OCTET STRING
+}
+
+SIB17-IEs-r17 ::= SEQUENCE {
+ trs-ResourceSetConfig-r17 SEQUENCE (SIZE (1..maxNrofTRS-ResourceSets-r17)) OF TRS-ResourceSet-r17,
+ validityDuration-r17 ENUMERATED {t1, t2, t4, t8, t16, t32, t64, t128, t256, t512, infinity, spare5, spare4, spare3, spare2,
+ spare1} OPTIONAL, -- Need S
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ ...
+}
+
+TRS-ResourceSet-r17 ::= SEQUENCE {
+ powerControlOffsetSS-r17 ENUMERATED {db-3, db0, db3, db6},
+ scramblingID-Info-r17 CHOICE {
+ scramblingIDforCommon-r17 ScramblingId,
+ scramblingIDperResourceListWith2-r17 SEQUENCE (SIZE (2)) OF ScramblingId,
+ scramblingIDperResourceListWith4-r17 SEQUENCE (SIZE (4)) OF ScramblingId,
+ ...
+ },
+ firstOFDMSymbolInTimeDomain-r17 INTEGER (0..9),
+ startingRB-r17 INTEGER (0..maxNrofPhysicalResourceBlocks-1),
+ nrofRBs-r17 INTEGER (24..maxNrofPhysicalResourceBlocksPlus1),
+ ssb-Index-r17 SSB-Index,
+ periodicityAndOffset-r17 CHOICE {
+ slots10 INTEGER (0..9),
+ slots20 INTEGER (0..19),
+ slots40 INTEGER (0..39),
+ slots80 INTEGER (0..79)
+ },
+ frequencyDomainAllocation-r17 BIT STRING (SIZE (4)),
+ indBitID-r17 INTEGER (0..5),
+ nrofResources-r17 ENUMERATED {n2, n4}
+}
+
+-- TAG-SIB17-STOP
+-- TAG-SIB18-START
+
+SIB18-r17 ::= SEQUENCE {
+ gin-ElementList-r17 SEQUENCE (SIZE (1..maxGIN-r17)) OF GIN-Element-r17 OPTIONAL, -- Need R
+ gins-PerSNPN-List-r17 SEQUENCE (SIZE (1..maxNPN-r16)) OF GINs-PerSNPN-r17 OPTIONAL, -- Need S
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ ...
+}
+
+GIN-Element-r17 ::= SEQUENCE {
+ plmn-Identity-r17 PLMN-Identity,
+ nid-List-r17 SEQUENCE (SIZE (1..maxGIN-r17)) OF NID-r16
+}
+
+GINs-PerSNPN-r17 ::= SEQUENCE {
+ supportedGINs-r17 BIT STRING (SIZE (1..maxGIN-r17)) OPTIONAL -- Need R
+}
+-- TAG-SIB18-STOP
+-- TAG-SIB19-START
+
+SIB19-r17 ::= SEQUENCE {
+ ntn-Config-r17 NTN-Config-r17 OPTIONAL, -- Need R
+ t-Service-r17 INTEGER (0..549755813887) OPTIONAL, -- Need R
+ referenceLocation-r17 ReferenceLocation-r17 OPTIONAL, -- Need R
+ distanceThresh-r17 INTEGER(0..65525) OPTIONAL, -- Need R
+ ntn-NeighCellConfigList-r17 NTN-NeighCellConfigList-r17 OPTIONAL, -- Need R
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ ...,
+ [[
+ ntn-NeighCellConfigListExt-v1720 NTN-NeighCellConfigList-r17 OPTIONAL -- Need R
+ ]]
+}
+
+NTN-NeighCellConfigList-r17 ::= SEQUENCE (SIZE(1..maxCellNTN-r17)) OF NTN-NeighCellConfig-r17
+
+NTN-NeighCellConfig-r17 ::= SEQUENCE {
+ ntn-Config-r17 NTN-Config-r17 OPTIONAL, -- Need R
+ carrierFreq-r17 ARFCN-ValueNR OPTIONAL, -- Need R
+ physCellId-r17 PhysCellId OPTIONAL -- Need R
+}
+
+-- TAG-SIB19-STOP
+-- TAG-SIB20-START
+
+SIB20-r17 ::= SEQUENCE {
+ mcch-Config-r17 MCCH-Config-r17,
+ cfr-ConfigMCCH-MTCH-r17 CFR-ConfigMCCH-MTCH-r17 OPTIONAL, -- Need S
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ ...
+}
+
+MCCH-Config-r17 ::= SEQUENCE {
+ mcch-RepetitionPeriodAndOffset-r17 MCCH-RepetitionPeriodAndOffset-r17,
+ mcch-WindowStartSlot-r17 INTEGER (0..79),
+ mcch-WindowDuration-r17 ENUMERATED {sl2, sl4, sl8, sl10, sl20, sl40,sl80, sl160} OPTIONAL, -- Need S
+ mcch-ModificationPeriod-r17 ENUMERATED {rf2, rf4, rf8, rf16, rf32, rf64, rf128, rf256,
+ rf512, rf1024, r2048, rf4096, rf8192, rf16384, rf32768, rf65536}
+}
+
+MCCH-RepetitionPeriodAndOffset-r17 ::= CHOICE {
+ rf1-r17 INTEGER(0),
+ rf2-r17 INTEGER(0..1),
+ rf4-r17 INTEGER(0..3),
+ rf8-r17 INTEGER(0..7),
+ rf16-r17 INTEGER(0..15),
+ rf32-r17 INTEGER(0..31),
+ rf64-r17 INTEGER(0..63),
+ rf128-r17 INTEGER(0..127),
+ rf256-r17 INTEGER(0..255)
+}
+
+-- TAG-SIB20-STOP
+-- TAG-SIB21-START
+
+SIB21-r17 ::= SEQUENCE {
+ mbs-FSAI-IntraFreq-r17 MBS-FSAI-List-r17 OPTIONAL, -- Need R
+ mbs-FSAI-InterFreqList-r17 MBS-FSAI-InterFreqList-r17 OPTIONAL, -- Need R
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ ...
+}
+
+MBS-FSAI-List-r17 ::= SEQUENCE (SIZE (1..maxFSAI-MBS-r17)) OF MBS-FSAI-r17
+
+MBS-FSAI-InterFreqList-r17 ::= SEQUENCE (SIZE (1..maxFreq)) OF MBS-FSAI-InterFreq-r17
+
+MBS-FSAI-InterFreq-r17 ::= SEQUENCE {
+ dl-CarrierFreq-r17 ARFCN-ValueNR,
+ mbs-FSAI-List-r17 MBS-FSAI-List-r17
+}
+
+MBS-FSAI-r17 ::= OCTET STRING (SIZE (3))
+
+-- TAG-SIB21-STOP
+-- TAG-POSSYSTEMINFORMATION-R16-IES-START
+
+PosSystemInformation-r16-IEs ::= SEQUENCE {
+ posSIB-TypeAndInfo-r16 SEQUENCE (SIZE (1..maxSIB)) OF CHOICE {
+ posSib1-1-r16 SIBpos-r16,
+ posSib1-2-r16 SIBpos-r16,
+ posSib1-3-r16 SIBpos-r16,
+ posSib1-4-r16 SIBpos-r16,
+ posSib1-5-r16 SIBpos-r16,
+ posSib1-6-r16 SIBpos-r16,
+ posSib1-7-r16 SIBpos-r16,
+ posSib1-8-r16 SIBpos-r16,
+ posSib2-1-r16 SIBpos-r16,
+ posSib2-2-r16 SIBpos-r16,
+ posSib2-3-r16 SIBpos-r16,
+ posSib2-4-r16 SIBpos-r16,
+ posSib2-5-r16 SIBpos-r16,
+ posSib2-6-r16 SIBpos-r16,
+ posSib2-7-r16 SIBpos-r16,
+ posSib2-8-r16 SIBpos-r16,
+ posSib2-9-r16 SIBpos-r16,
+ posSib2-10-r16 SIBpos-r16,
+ posSib2-11-r16 SIBpos-r16,
+ posSib2-12-r16 SIBpos-r16,
+ posSib2-13-r16 SIBpos-r16,
+ posSib2-14-r16 SIBpos-r16,
+ posSib2-15-r16 SIBpos-r16,
+ posSib2-16-r16 SIBpos-r16,
+ posSib2-17-r16 SIBpos-r16,
+ posSib2-18-r16 SIBpos-r16,
+ posSib2-19-r16 SIBpos-r16,
+ posSib2-20-r16 SIBpos-r16,
+ posSib2-21-r16 SIBpos-r16,
+ posSib2-22-r16 SIBpos-r16,
+ posSib2-23-r16 SIBpos-r16,
+ posSib3-1-r16 SIBpos-r16,
+ posSib4-1-r16 SIBpos-r16,
+ posSib5-1-r16 SIBpos-r16,
+ posSib6-1-r16 SIBpos-r16,
+ posSib6-2-r16 SIBpos-r16,
+ posSib6-3-r16 SIBpos-r16,
+ ... ,
+ posSib1-9-v1700 SIBpos-r16,
+ posSib1-10-v1700 SIBpos-r16,
+ posSib2-24-v1700 SIBpos-r16,
+ posSib2-25-v1700 SIBpos-r16,
+ posSib6-4-v1700 SIBpos-r16,
+ posSib6-5-v1700 SIBpos-r16,
+ posSib6-6-v1700 SIBpos-r16
+ },
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+-- TAG-POSSYSTEMINFORMATION-R16-IES-STOP
+-- TAG-POSSI-SCHEDULINGINFO-START
+
+PosSI-SchedulingInfo-r16 ::= SEQUENCE {
+ posSchedulingInfoList-r16 SEQUENCE (SIZE (1..maxSI-Message)) OF PosSchedulingInfo-r16,
+ posSI-RequestConfig-r16 SI-RequestConfig OPTIONAL, -- Cond MSG-1
+ posSI-RequestConfigSUL-r16 SI-RequestConfig OPTIONAL, -- Cond SUL-MSG-1
+ ...,
+ [[
+ posSI-RequestConfigRedCap-r17 SI-RequestConfig OPTIONAL -- Cond REDCAP-MSG-1
+ ]]
+}
+
+PosSchedulingInfo-r16 ::= SEQUENCE {
+ offsetToSI-Used-r16 ENUMERATED {true} OPTIONAL, -- Need R
+ posSI-Periodicity-r16 ENUMERATED {rf8, rf16, rf32, rf64, rf128, rf256, rf512},
+ posSI-BroadcastStatus-r16 ENUMERATED {broadcasting, notBroadcasting},
+ posSIB-MappingInfo-r16 PosSIB-MappingInfo-r16,
+ ...
+}
+
+PosSIB-MappingInfo-r16 ::= SEQUENCE (SIZE (1..maxSIB)) OF PosSIB-Type-r16
+
+PosSIB-Type-r16 ::= SEQUENCE {
+ encrypted-r16 ENUMERATED { true } OPTIONAL, -- Need R
+ gnss-id-r16 GNSS-ID-r16 OPTIONAL, -- Need R
+ sbas-id-r16 SBAS-ID-r16 OPTIONAL, -- Need R
+ posSibType-r16 ENUMERATED { posSibType1-1, posSibType1-2, posSibType1-3, posSibType1-4, posSibType1-5, posSibType1-6,
+ posSibType1-7, posSibType1-8, posSibType2-1, posSibType2-2, posSibType2-3, posSibType2-4,
+ posSibType2-5, posSibType2-6, posSibType2-7, posSibType2-8, posSibType2-9, posSibType2-10,
+ posSibType2-11, posSibType2-12, posSibType2-13, posSibType2-14, posSibType2-15,
+ posSibType2-16, posSibType2-17, posSibType2-18, posSibType2-19, posSibType2-20,
+ posSibType2-21, posSibType2-22, posSibType2-23, posSibType3-1, posSibType4-1,
+ posSibType5-1,posSibType6-1, posSibType6-2, posSibType6-3,... },
+ areaScope-r16 ENUMERATED {true} OPTIONAL -- Need S
+}
+
+GNSS-ID-r16 ::= SEQUENCE {
+ gnss-id-r16 ENUMERATED{gps, sbas, qzss, galileo, glonass, bds, ...},
+ ...
+}
+
+SBAS-ID-r16 ::= SEQUENCE {
+ sbas-id-r16 ENUMERATED { waas, egnos, msas, gagan, ...},
+ ...
+}
+
+-- TAG-POSSI-SCHEDULINGINFO-STOP
+-- TAG-SIPOS-START
+
+SIBpos-r16 ::= SEQUENCE {
+ assistanceDataSIB-Element-r16 OCTET STRING,
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ ...
+}
+
+-- TAG-SIPOS-STOP
+-- TAG-ADDITIONALSPECTRUMEMISSION-START
+
+AdditionalSpectrumEmission ::= INTEGER (0..7)
+
+-- TAG-ADDITIONALSPECTRUMEMISSION-STOP
+-- TAG-ALPHA-START
+
+Alpha ::= ENUMERATED {alpha0, alpha04, alpha05, alpha06, alpha07, alpha08, alpha09, alpha1}
+
+-- TAG-ALPHA-STOP
+-- TAG-AMF-IDENTIFIER-START
+
+AMF-Identifier ::= BIT STRING (SIZE (24))
+
+-- TAG-AMF-IDENTIFIER-STOP
+-- TAG-ARFCN-VALUEEUTRA-START
+
+ARFCN-ValueEUTRA ::= INTEGER (0..maxEARFCN)
+
+-- TAG-ARFCN-VALUEEUTRA-STOP
+-- TAG-ARFCN-VALUENR-START
+
+ARFCN-ValueNR ::= INTEGER (0..maxNARFCN)
+
+-- TAG-ARFCN-VALUENR-STOP
+-- TAG-ARFCN-ValueUTRA-FDD-START
+
+ARFCN-ValueUTRA-FDD-r16 ::= INTEGER (0..16383)
+
+-- TAG-ARFCN-ValueUTRA-FDD-STOP
+-- TAG-AVAILABILITYCOMBINATIONSPERCELL-START
+
+AvailabilityCombinationsPerCell-r16 ::= SEQUENCE {
+ availabilityCombinationsPerCellIndex-r16 AvailabilityCombinationsPerCellIndex-r16,
+ iab-DU-CellIdentity-r16 CellIdentity,
+ positionInDCI-AI-r16 INTEGER(0..maxAI-DCI-PayloadSize-1-r16) OPTIONAL, -- Need M
+ availabilityCombinations-r16 SEQUENCE (SIZE (1..maxNrofAvailabilityCombinationsPerSet-r16)) OF AvailabilityCombination-r16,
+ ...,
+ [[
+ availabilityCombinationsRB-Groups-r17 SEQUENCE (SIZE (1..maxNrofAvailabilityCombinationsPerSet-r16)) OF AvailabilityCombinationRB-Groups-r17 OPTIONAL -- Need M
+ ]],
+ [[
+ positionInDCI-AI-RBGroups-v1720 INTEGER(0..maxAI-DCI-PayloadSize-1-r16) OPTIONAL -- Need M
+ ]]
+}
+
+AvailabilityCombinationsPerCellIndex-r16 ::= INTEGER(0..maxNrofDUCells-r16)
+
+AvailabilityCombination-r16 ::= SEQUENCE {
+ availabilityCombinationId-r16 AvailabilityCombinationId-r16,
+ resourceAvailability-r16 SEQUENCE (SIZE (1..maxNrofResourceAvailabilityPerCombination-r16)) OF INTEGER (0..7)
+}
+
+AvailabilityCombinationId-r16 ::= INTEGER (0..maxNrofAvailabilityCombinationsPerSet-1-r16)
+
+AvailabilityCombinationRB-Groups-r17 ::= SEQUENCE {
+ availabilityCombinationId-r17 AvailabilityCombinationId-r16,
+ rb-SetGroups-r17 SEQUENCE (SIZE (1..maxNrofRB-SetGroups-r17)) OF RB-SetGroup-r17 OPTIONAL, -- Need R
+ resourceAvailability-r17 SEQUENCE (SIZE (1..maxNrofResourceAvailabilityPerCombination-r16)) OF INTEGER (0..7) OPTIONAL -- Need R
+}
+
+RB-SetGroup-r17 ::= SEQUENCE {
+ resourceAvailability-r17 SEQUENCE (SIZE (1..maxNrofResourceAvailabilityPerCombination-r16)) OF INTEGER (0..7) OPTIONAL, -- Need R
+ rb-Sets-r17 SEQUENCE (SIZE (1..maxNrofRB-Sets-r17)) OF INTEGER (0..7) OPTIONAL -- Need R
+}
+
+-- TAG-AVAILABILITYCOMBINATIONSPERCELL-STOP
+-- TAG-AVAILABILITYINDICATOR-START
+
+AvailabilityIndicator-r16 ::= SEQUENCE {
+ ai-RNTI-r16 AI-RNTI-r16,
+ dci-PayloadSizeAI-r16 INTEGER (1..maxAI-DCI-PayloadSize-r16),
+ availableCombToAddModList-r16 SEQUENCE (SIZE(1..maxNrofDUCells-r16)) OF AvailabilityCombinationsPerCell-r16 OPTIONAL, -- Need N
+ availableCombToReleaseList-r16 SEQUENCE (SIZE(1..maxNrofDUCells-r16)) OF AvailabilityCombinationsPerCellIndex-r16 OPTIONAL, -- Need N
+ ...
+}
+
+AI-RNTI-r16 ::= RNTI-Value
+
+-- TAG-AVAILABILITYINDICATOR-STOP
+-- TAG-BAPROUTINGID-START
+
+BAP-RoutingID-r16::= SEQUENCE{
+ bap-Address-r16 BIT STRING (SIZE (10)),
+ bap-PathId-r16 BIT STRING (SIZE (10))
+}
+
+-- TAG-BAPROUTINGID-STOP
+-- TAG-BEAMFAILURERECOVERYCONFIG-START
+
+BeamFailureRecoveryConfig ::= SEQUENCE {
+ rootSequenceIndex-BFR INTEGER (0..137) OPTIONAL, -- Need M
+ rach-ConfigBFR RACH-ConfigGeneric OPTIONAL, -- Need M
+ rsrp-ThresholdSSB RSRP-Range OPTIONAL, -- Need M
+ candidateBeamRSList SEQUENCE (SIZE(1..maxNrofCandidateBeams)) OF PRACH-ResourceDedicatedBFR OPTIONAL, -- Need M
+ ssb-perRACH-Occasion ENUMERATED {oneEighth, oneFourth, oneHalf, one, two,
+ four, eight, sixteen} OPTIONAL, -- Need M
+ ra-ssb-OccasionMaskIndex INTEGER (0..15) OPTIONAL, -- Need M
+ recoverySearchSpaceId SearchSpaceId OPTIONAL, -- Need R
+ ra-Prioritization RA-Prioritization OPTIONAL, -- Need R
+ beamFailureRecoveryTimer ENUMERATED {ms10, ms20, ms40, ms60, ms80, ms100, ms150, ms200} OPTIONAL, -- Need M
+ ...,
+ [[
+ msg1-SubcarrierSpacing SubcarrierSpacing OPTIONAL -- Need M
+ ]],
+ [[
+ ra-PrioritizationTwoStep-r16 RA-Prioritization OPTIONAL, -- Need R
+ candidateBeamRSListExt-v1610 SetupRelease{ CandidateBeamRSListExt-r16 } OPTIONAL -- Need M
+ ]],
+ [[
+ spCell-BFR-CBRA-r16 ENUMERATED {true} OPTIONAL -- Need R
+ ]]
+}
+
+PRACH-ResourceDedicatedBFR ::= CHOICE {
+ ssb BFR-SSB-Resource,
+ csi-RS BFR-CSIRS-Resource
+}
+
+BFR-SSB-Resource ::= SEQUENCE {
+ ssb SSB-Index,
+ ra-PreambleIndex INTEGER (0..63),
+ ...
+}
+
+BFR-CSIRS-Resource ::= SEQUENCE {
+ csi-RS NZP-CSI-RS-ResourceId,
+ ra-OccasionList SEQUENCE (SIZE(1..maxRA-OccasionsPerCSIRS)) OF INTEGER (0..maxRA-Occasions-1) OPTIONAL, -- Need R
+ ra-PreambleIndex INTEGER (0..63) OPTIONAL, -- Need R
+ ...
+}
+
+CandidateBeamRSListExt-r16::= SEQUENCE (SIZE(1.. maxNrofCandidateBeamsExt-r16)) OF PRACH-ResourceDedicatedBFR
+
+-- TAG-BEAMFAILURERECOVERYCONFIG-STOP
+-- TAG-BEAMFAILURERECOVERYRSCONFIG-START
+
+BeamFailureRecoveryRSConfig-r16 ::= SEQUENCE {
+ rsrp-ThresholdBFR-r16 RSRP-Range OPTIONAL, -- Need M
+ candidateBeamRS-List-r16 SEQUENCE (SIZE(1..maxNrofCandidateBeams-r16)) OF CandidateBeamRS-r16 OPTIONAL, -- Need M
+ ...,
+ [[
+ candidateBeamRS-List2-r17 SEQUENCE (SIZE(1..maxNrofCandidateBeams-r16)) OF CandidateBeamRS-r16 OPTIONAL -- Need R
+ ]]
+}
+
+-- TAG-BEAMFAILURERECOVERYRSCONFIG-STOP
+-- TAG-BETAOFFSETS-START
+
+BetaOffsets ::= SEQUENCE {
+ betaOffsetACK-Index1 INTEGER(0..31) OPTIONAL, -- Need S
+ betaOffsetACK-Index2 INTEGER(0..31) OPTIONAL, -- Need S
+ betaOffsetACK-Index3 INTEGER(0..31) OPTIONAL, -- Need S
+ betaOffsetCSI-Part1-Index1 INTEGER(0..31) OPTIONAL, -- Need S
+ betaOffsetCSI-Part1-Index2 INTEGER(0..31) OPTIONAL, -- Need S
+ betaOffsetCSI-Part2-Index1 INTEGER(0..31) OPTIONAL, -- Need S
+ betaOffsetCSI-Part2-Index2 INTEGER(0..31) OPTIONAL -- Need S
+}
+
+-- TAG-BETAOFFSETS-STOP
+-- TAG-BETAOFFSETSCROSSPRI-START
+
+BetaOffsetsCrossPri-r17 ::= SEQUENCE (SIZE(3)) OF INTEGER(0..31)
+
+-- TAG-BETAOFFSETSCROSSPRI-STOP
+-- TAG-BHLOGICALCHANNELIDENTITY-START
+
+BH-LogicalChannelIdentity-r16 ::= CHOICE {
+ bh-LogicalChannelIdentity-r16 LogicalChannelIdentity,
+ bh-LogicalChannelIdentityExt-r16 BH-LogicalChannelIdentity-Ext-r16
+}
+
+-- TAG-BHLOGICALCHANNELIDENTITY-STOP
+-- TAG-BHLOGICALCHANNELIDENTITYEXT-START
+
+BH-LogicalChannelIdentity-Ext-r16 ::= INTEGER (320.. maxLC-ID-Iab-r16)
+
+-- TAG-BHLOGICALCHANNELIDENTITYEXT-STOP
+-- TAG-BHRLCCHANNELCONFIG-START
+
+BH-RLC-ChannelConfig-r16::= SEQUENCE {
+ bh-LogicalChannelIdentity-r16 BH-LogicalChannelIdentity-r16 OPTIONAL, -- Cond LCH-SetupOnly
+ bh-RLC-ChannelID-r16 BH-RLC-ChannelID-r16,
+ reestablishRLC-r16 ENUMERATED {true} OPTIONAL, -- Need N
+ rlc-Config-r16 RLC-Config OPTIONAL, -- Cond LCH-Setup
+ mac-LogicalChannelConfig-r16 LogicalChannelConfig OPTIONAL, -- Cond LCH-Setup
+ ...
+}
+
+-- TAG-BHRLCCHANNELCONFIG-STOP
+-- TAG-BHRLCCHANNELID-START
+
+BH-RLC-ChannelID-r16 ::= BIT STRING (SIZE (16))
+
+-- TAG-BHRLCCHANNELID-STOP
+-- TAG-BSR-CONFIG-START
+
+BSR-Config ::= SEQUENCE {
+ periodicBSR-Timer ENUMERATED { sf1, sf5, sf10, sf16, sf20, sf32, sf40, sf64,
+ sf80, sf128, sf160, sf320, sf640, sf1280, sf2560, infinity },
+ retxBSR-Timer ENUMERATED { sf10, sf20, sf40, sf80, sf160, sf320, sf640, sf1280, sf2560,
+ sf5120, sf10240, spare5, spare4, spare3, spare2, spare1},
+ logicalChannelSR-DelayTimer ENUMERATED { sf20, sf40, sf64, sf128, sf512, sf1024, sf2560, spare1} OPTIONAL, -- Need R
+ ...
+}
+
+-- TAG-BSR-CONFIG-STOP
+-- TAG-BWP-START
+
+BWP ::= SEQUENCE {
+ locationAndBandwidth INTEGER (0..37949),
+ subcarrierSpacing SubcarrierSpacing,
+ cyclicPrefix ENUMERATED { extended } OPTIONAL -- Need R
+}
+
+-- TAG-BWP-STOP
+-- TAG-BWP-DOWNLINK-START
+
+BWP-Downlink ::= SEQUENCE {
+ bwp-Id BWP-Id,
+ bwp-Common BWP-DownlinkCommon OPTIONAL, -- Cond SetupOtherBWP
+ bwp-Dedicated BWP-DownlinkDedicated OPTIONAL, -- Cond SetupOtherBWP
+ ...
+}
+
+-- TAG-BWP-DOWNLINK-STOP
+-- TAG-BWP-DOWNLINKCOMMON-START
+
+BWP-DownlinkCommon ::= SEQUENCE {
+ genericParameters BWP,
+ pdcch-ConfigCommon SetupRelease { PDCCH-ConfigCommon } OPTIONAL, -- Need M
+ pdsch-ConfigCommon SetupRelease { PDSCH-ConfigCommon } OPTIONAL, -- Need M
+ ...
+}
+
+-- TAG-BWP-DOWNLINKCOMMON-STOP
+-- TAG-BWP-DOWNLINKDEDICATED-START
+
+BWP-DownlinkDedicated ::= SEQUENCE {
+ pdcch-Config SetupRelease { PDCCH-Config } OPTIONAL, -- Need M
+ pdsch-Config SetupRelease { PDSCH-Config } OPTIONAL, -- Need M
+ sps-Config SetupRelease { SPS-Config } OPTIONAL, -- Need M
+ radioLinkMonitoringConfig SetupRelease { RadioLinkMonitoringConfig } OPTIONAL, -- Need M
+ ...,
+ [[
+ sps-ConfigToAddModList-r16 SPS-ConfigToAddModList-r16 OPTIONAL, -- Need N
+ sps-ConfigToReleaseList-r16 SPS-ConfigToReleaseList-r16 OPTIONAL, -- Need N
+ sps-ConfigDeactivationStateList-r16 SPS-ConfigDeactivationStateList-r16 OPTIONAL, -- Need R
+ beamFailureRecoverySCellConfig-r16 SetupRelease {BeamFailureRecoveryRSConfig-r16} OPTIONAL, -- Cond SCellOnly
+ sl-PDCCH-Config-r16 SetupRelease { PDCCH-Config } OPTIONAL, -- Need M
+ sl-V2X-PDCCH-Config-r16 SetupRelease { PDCCH-Config } OPTIONAL -- Need M
+ ]],
+ [[
+ preConfGapStatus-r17 BIT STRING (SIZE (maxNrofGapId-r17)) OPTIONAL, -- Cond PreConfigMG
+ beamFailureRecoverySpCellConfig-r17 SetupRelease { BeamFailureRecoveryRSConfig-r16} OPTIONAL, -- Cond SpCellOnly
+ harq-FeedbackEnablingforSPSactive-r17 BOOLEAN OPTIONAL, -- Need R
+ cfr-ConfigMulticast-r17 SetupRelease { CFR-ConfigMulticast-r17 } OPTIONAL, -- Need M
+ dl-PPW-PreConfigToAddModList-r17 DL-PPW-PreConfigToAddModList-r17 OPTIONAL, -- Need N
+ dl-PPW-PreConfigToReleaseList-r17 DL-PPW-PreConfigToReleaseList-r17 OPTIONAL, -- Need N
+ nonCellDefiningSSB-r17 NonCellDefiningSSB-r17 OPTIONAL, -- Need R
+ servingCellMO-r17 MeasObjectId OPTIONAL -- Cond MeasObject-NCD-SSB
+ ]]
+}
+
+SPS-ConfigToAddModList-r16 ::= SEQUENCE (SIZE (1..maxNrofSPS-Config-r16)) OF SPS-Config
+
+SPS-ConfigToReleaseList-r16 ::= SEQUENCE (SIZE (1..maxNrofSPS-Config-r16)) OF SPS-ConfigIndex-r16
+
+SPS-ConfigDeactivationState-r16 ::= SEQUENCE (SIZE (1..maxNrofSPS-Config-r16)) OF SPS-ConfigIndex-r16
+
+SPS-ConfigDeactivationStateList-r16 ::= SEQUENCE (SIZE (1..maxNrofSPS-DeactivationState)) OF SPS-ConfigDeactivationState-r16
+
+DL-PPW-PreConfigToAddModList-r17 ::= SEQUENCE (SIZE (1..maxNrofPPW-Config-r17)) OF DL-PPW-PreConfig-r17
+
+DL-PPW-PreConfigToReleaseList-r17 ::= SEQUENCE (SIZE (1..maxNrofPPW-Config-r17)) OF DL-PPW-ID-r17
+
+-- TAG-BWP-DOWNLINKDEDICATED-STOP
+-- TAG-BWP-ID-START
+
+BWP-Id ::= INTEGER (0..maxNrofBWPs)
+
+-- TAG-BWP-ID-STOP
+-- TAG-BWP-UPLINK-START
+
+BWP-Uplink ::= SEQUENCE {
+ bwp-Id BWP-Id,
+ bwp-Common BWP-UplinkCommon OPTIONAL, -- Cond SetupOtherBWP
+ bwp-Dedicated BWP-UplinkDedicated OPTIONAL, -- Cond SetupOtherBWP
+ ...
+}
+
+-- TAG-BWP-UPLINK-STOP
+-- TAG-BWP-UPLINKCOMMON-START
+
+BWP-UplinkCommon ::= SEQUENCE {
+ genericParameters BWP,
+ rach-ConfigCommon SetupRelease { RACH-ConfigCommon } OPTIONAL, -- Need M
+ pusch-ConfigCommon SetupRelease { PUSCH-ConfigCommon } OPTIONAL, -- Need M
+ pucch-ConfigCommon SetupRelease { PUCCH-ConfigCommon } OPTIONAL, -- Need M
+ ...,
+ [[
+ rach-ConfigCommonIAB-r16 SetupRelease { RACH-ConfigCommon } OPTIONAL, -- Need M
+ useInterlacePUCCH-PUSCH-r16 ENUMERATED {enabled} OPTIONAL, -- Need R
+ msgA-ConfigCommon-r16 SetupRelease { MsgA-ConfigCommon-r16 } OPTIONAL -- Cond SpCellOnly2
+ ]],
+ [[
+ enableRA-PrioritizationForSlicing-r17 BOOLEAN OPTIONAL, -- Cond RA-PrioSliceAI
+ additionalRACH-ConfigList-r17 SetupRelease { AdditionalRACH-ConfigList-r17 } OPTIONAL, -- Cond SpCellOnly2
+ rsrp-ThresholdMsg3-r17 RSRP-Range OPTIONAL, -- Need R
+ numberOfMsg3-RepetitionsList-r17 SEQUENCE (SIZE (4)) OF NumberOfMsg3-Repetitions-r17 OPTIONAL, -- Cond Msg3Rep
+ mcs-Msg3-Repetitions-r17 SEQUENCE (SIZE (8)) OF INTEGER (0..31) OPTIONAL -- Cond Msg3Rep
+ ]]
+}
+
+AdditionalRACH-ConfigList-r17 ::= SEQUENCE (SIZE(1..maxAdditionalRACH-r17)) OF AdditionalRACH-Config-r17
+
+AdditionalRACH-Config-r17 ::= SEQUENCE {
+ rach-ConfigCommon-r17 RACH-ConfigCommon OPTIONAL, -- Need R
+ msgA-ConfigCommon-r17 MsgA-ConfigCommon-r16 OPTIONAL, -- Need R
+ ...
+}
+
+NumberOfMsg3-Repetitions-r17::= ENUMERATED {n1, n2, n3, n4, n7, n8, n12, n16}
+
+-- TAG-BWP-UPLINKCOMMON-STOP
+-- TAG-BWP-UPLINKDEDICATED-START
+
+BWP-UplinkDedicated ::= SEQUENCE {
+ pucch-Config SetupRelease { PUCCH-Config } OPTIONAL, -- Need M
+ pusch-Config SetupRelease { PUSCH-Config } OPTIONAL, -- Need M
+ configuredGrantConfig SetupRelease { ConfiguredGrantConfig } OPTIONAL, -- Need M
+ srs-Config SetupRelease { SRS-Config } OPTIONAL, -- Need M
+ beamFailureRecoveryConfig SetupRelease { BeamFailureRecoveryConfig } OPTIONAL, -- Cond SpCellOnly
+ ...,
+ [[
+ sl-PUCCH-Config-r16 SetupRelease { PUCCH-Config } OPTIONAL, -- Need M
+ cp-ExtensionC2-r16 INTEGER (1..28) OPTIONAL, -- Need R
+ cp-ExtensionC3-r16 INTEGER (1..28) OPTIONAL, -- Need R
+ useInterlacePUCCH-PUSCH-r16 ENUMERATED {enabled} OPTIONAL, -- Need R
+ pucch-ConfigurationList-r16 SetupRelease { PUCCH-ConfigurationList-r16 } OPTIONAL, -- Need M
+ lbt-FailureRecoveryConfig-r16 SetupRelease { LBT-FailureRecoveryConfig-r16 } OPTIONAL, -- Need M
+ configuredGrantConfigToAddModList-r16 ConfiguredGrantConfigToAddModList-r16 OPTIONAL, -- Need N
+ configuredGrantConfigToReleaseList-r16 ConfiguredGrantConfigToReleaseList-r16 OPTIONAL, -- Need N
+ configuredGrantConfigType2DeactivationStateList-r16 ConfiguredGrantConfigType2DeactivationStateList-r16 OPTIONAL -- Need R
+ ]],
+ [[
+ ul-TCI-StateList-r17 CHOICE {
+ explicitlist SEQUENCE {
+ ul-TCI-ToAddModList-r17 SEQUENCE (SIZE (1..maxUL-TCI-r17)) OF TCI-UL-State-r17 OPTIONAL, -- Need N
+ ul-TCI-ToReleaseList-r17 SEQUENCE (SIZE (1..maxUL-TCI-r17)) OF TCI-UL-State-Id-r17 OPTIONAL -- Need N
+ },
+ unifiedTCI-StateRef-r17 ServingCellAndBWP-Id-r17
+ } OPTIONAL, -- Need R
+ ul-powerControl-r17 Uplink-powerControlId-r17 OPTIONAL, -- Cond NoTCI-PC
+ pucch-ConfigurationListMulticast1-r17 SetupRelease { PUCCH-ConfigurationList-r16 } OPTIONAL, -- Need M
+ pucch-ConfigurationListMulticast2-r17 SetupRelease { PUCCH-ConfigurationList-r16 } OPTIONAL -- Need M
+ ]],
+ [[
+ pucch-ConfigMulticast1-r17 SetupRelease { PUCCH-Config } OPTIONAL, -- Need M
+ pucch-ConfigMulticast2-r17 SetupRelease { PUCCH-Config } OPTIONAL -- Need M
+ ]],
+ [[
+ pathlossReferenceRSToAddModList-r17 SEQUENCE (SIZE (1..maxNrofPathlossReferenceRSs-r17)) OF PathlossReferenceRS-r17
+ OPTIONAL, -- Need N
+ pathlossReferenceRSToReleaseList-r17 SEQUENCE (SIZE (1..maxNrofPathlossReferenceRSs-r17)) OF PathlossReferenceRS-Id-r17
+ OPTIONAL -- Need N
+ ]]
+}
+
+ConfiguredGrantConfigToAddModList-r16 ::= SEQUENCE (SIZE (1..maxNrofConfiguredGrantConfig-r16)) OF ConfiguredGrantConfig
+
+ConfiguredGrantConfigToReleaseList-r16 ::= SEQUENCE (SIZE (1..maxNrofConfiguredGrantConfig-r16)) OF ConfiguredGrantConfigIndex-r16
+
+ConfiguredGrantConfigType2DeactivationState-r16 ::= SEQUENCE (SIZE (1..maxNrofConfiguredGrantConfig-r16)) OF ConfiguredGrantConfigIndex-r16
+
+ConfiguredGrantConfigType2DeactivationStateList-r16 ::=
+ SEQUENCE (SIZE (1..maxNrofCG-Type2DeactivationState)) OF ConfiguredGrantConfigType2DeactivationState-r16
+
+-- TAG-BWP-UPLINKDEDICATED-STOP
+-- TAG-CANDIDATEBEAMRS-START
+
+
+CandidateBeamRS-r16 ::= SEQUENCE {
+ candidateBeamConfig-r16 CHOICE {
+ ssb-r16 SSB-Index,
+ csi-RS-r16 NZP-CSI-RS-ResourceId
+ },
+ servingCellId ServCellIndex OPTIONAL -- Need R
+}
+
+-- TAG-CANDIDATEBEAMRS-STOP
+-- TAG-CELLACCESSRELATEDINFO-START
+
+CellAccessRelatedInfo ::= SEQUENCE {
+ plmn-IdentityInfoList PLMN-IdentityInfoList,
+ cellReservedForOtherUse ENUMERATED {true} OPTIONAL, -- Need R
+ ...,
+ [[
+ cellReservedForFutureUse-r16 ENUMERATED {true} OPTIONAL, -- Need R
+ npn-IdentityInfoList-r16 NPN-IdentityInfoList-r16 OPTIONAL -- Need R
+ ]],
+ [[
+ snpn-AccessInfoList-r17 SEQUENCE (SIZE (1..maxNPN-r16)) OF SNPN-AccessInfo-r17 OPTIONAL -- Need R
+ ]]
+}
+
+SNPN-AccessInfo-r17 ::= SEQUENCE {
+ extCH-Supported-r17 ENUMERATED {true} OPTIONAL, -- Need R
+ extCH-WithoutConfigAllowed-r17 ENUMERATED {true} OPTIONAL, -- Need R
+ onboardingEnabled-r17 ENUMERATED {true} OPTIONAL, -- Need R
+ imsEmergencySupportForSNPN-r17 ENUMERATED {true} OPTIONAL -- Need R
+}
+
+-- TAG-CELLACCESSRELATEDINFO-STOP
+-- TAG-CELLACCESSRELATEDINFOEUTRA-5GC-START
+
+CellAccessRelatedInfo-EUTRA-5GC ::= SEQUENCE {
+ plmn-IdentityList-eutra-5gc PLMN-IdentityList-EUTRA-5GC,
+ trackingAreaCode-eutra-5gc TrackingAreaCode,
+ ranac-5gc RAN-AreaCode OPTIONAL,
+ cellIdentity-eutra-5gc CellIdentity-EUTRA-5GC
+}
+
+PLMN-IdentityList-EUTRA-5GC::= SEQUENCE (SIZE (1..maxPLMN)) OF PLMN-Identity-EUTRA-5GC
+
+PLMN-Identity-EUTRA-5GC ::= CHOICE {
+ plmn-Identity-EUTRA-5GC PLMN-Identity,
+ plmn-index INTEGER (1..maxPLMN)
+}
+
+CellIdentity-EUTRA-5GC ::= CHOICE {
+ cellIdentity-EUTRA BIT STRING (SIZE (28)),
+ cellId-index INTEGER (1..maxPLMN)
+}
+
+-- TAG-CELLACCESSRELATEDINFOEUTRA-5GC-STOP
+-- TAG-CELLACCESSRELATEDINFOEUTRA-EPC-START
+
+CellAccessRelatedInfo-EUTRA-EPC ::= SEQUENCE {
+ plmn-IdentityList-eutra-epc PLMN-IdentityList-EUTRA-EPC,
+ trackingAreaCode-eutra-epc BIT STRING (SIZE (16)),
+ cellIdentity-eutra-epc BIT STRING (SIZE (28))
+}
+
+PLMN-IdentityList-EUTRA-EPC::= SEQUENCE (SIZE (1..maxPLMN)) OF PLMN-Identity
+
+-- TAG-CELLACCESSRELATEDINFOEUTRA-EPC-STOP
+-- TAG-CELLGROUPCONFIG-START
+
+-- Configuration of one Cell-Group:
+CellGroupConfig ::= SEQUENCE {
+ cellGroupId CellGroupId,
+ rlc-BearerToAddModList SEQUENCE (SIZE(1..maxLC-ID)) OF RLC-BearerConfig OPTIONAL, -- Need N
+ rlc-BearerToReleaseList SEQUENCE (SIZE(1..maxLC-ID)) OF LogicalChannelIdentity OPTIONAL, -- Need N
+ mac-CellGroupConfig MAC-CellGroupConfig OPTIONAL, -- Need M
+ physicalCellGroupConfig PhysicalCellGroupConfig OPTIONAL, -- Need M
+ spCellConfig SpCellConfig OPTIONAL, -- Need M
+ sCellToAddModList SEQUENCE (SIZE (1..maxNrofSCells)) OF SCellConfig OPTIONAL, -- Need N
+ sCellToReleaseList SEQUENCE (SIZE (1..maxNrofSCells)) OF SCellIndex OPTIONAL, -- Need N
+ ...,
+ [[
+ reportUplinkTxDirectCurrent ENUMERATED {true} OPTIONAL -- Cond BWP-Reconfig
+ ]],
+ [[
+ bap-Address-r16 BIT STRING (SIZE (10)) OPTIONAL, -- Need M
+ bh-RLC-ChannelToAddModList-r16 SEQUENCE (SIZE(1..maxBH-RLC-ChannelID-r16)) OF BH-RLC-ChannelConfig-r16 OPTIONAL, -- Need N
+ bh-RLC-ChannelToReleaseList-r16 SEQUENCE (SIZE(1..maxBH-RLC-ChannelID-r16)) OF BH-RLC-ChannelID-r16 OPTIONAL, -- Need N
+ f1c-TransferPath-r16 ENUMERATED {lte, nr, both} OPTIONAL, -- Need M
+ simultaneousTCI-UpdateList1-r16 SEQUENCE (SIZE (1..maxNrofServingCellsTCI-r16)) OF ServCellIndex OPTIONAL, -- Need R
+ simultaneousTCI-UpdateList2-r16 SEQUENCE (SIZE (1..maxNrofServingCellsTCI-r16)) OF ServCellIndex OPTIONAL, -- Need R
+ simultaneousSpatial-UpdatedList1-r16 SEQUENCE (SIZE (1..maxNrofServingCellsTCI-r16)) OF ServCellIndex OPTIONAL, -- Need R
+ simultaneousSpatial-UpdatedList2-r16 SEQUENCE (SIZE (1..maxNrofServingCellsTCI-r16)) OF ServCellIndex OPTIONAL, -- Need R
+ uplinkTxSwitchingOption-r16 ENUMERATED {switchedUL, dualUL} OPTIONAL, -- Need R
+ uplinkTxSwitchingPowerBoosting-r16 ENUMERATED {enabled} OPTIONAL -- Need R
+ ]],
+ [[
+ reportUplinkTxDirectCurrentTwoCarrier-r16 ENUMERATED {true} OPTIONAL -- Need N
+ ]],
+ [[
+ f1c-TransferPathNRDC-r17 ENUMERATED {mcg, scg, both} OPTIONAL, -- Need M
+ uplinkTxSwitching-2T-Mode-r17 ENUMERATED {enabled} OPTIONAL, -- Cond 2Tx
+ uplinkTxSwitching-DualUL-TxState-r17 ENUMERATED {oneT, twoT} OPTIONAL, -- Cond 2Tx
+ uu-RelayRLC-ChannelToAddModList-r17 SEQUENCE (SIZE(1..maxUu-RelayRLC-ChannelID-r17)) OF Uu-RelayRLC-ChannelConfig-r17
+ OPTIONAL, -- Need N
+ uu-RelayRLC-ChannelToReleaseList-r17 SEQUENCE (SIZE(1..maxUu-RelayRLC-ChannelID-r17)) OF Uu-RelayRLC-ChannelID-r17
+ OPTIONAL, -- Need N
+ simultaneousU-TCI-UpdateList1-r17 SEQUENCE (SIZE (1..maxNrofServingCellsTCI-r16)) OF ServCellIndex OPTIONAL, -- Need R
+ simultaneousU-TCI-UpdateList2-r17 SEQUENCE (SIZE (1..maxNrofServingCellsTCI-r16)) OF ServCellIndex OPTIONAL, -- Need R
+ simultaneousU-TCI-UpdateList3-r17 SEQUENCE (SIZE (1..maxNrofServingCellsTCI-r16)) OF ServCellIndex OPTIONAL, -- Need R
+ simultaneousU-TCI-UpdateList4-r17 SEQUENCE (SIZE (1..maxNrofServingCellsTCI-r16)) OF ServCellIndex OPTIONAL, -- Need R
+ rlc-BearerToReleaseListExt-r17 SEQUENCE (SIZE(1..maxLC-ID)) OF LogicalChannelIdentityExt-r17 OPTIONAL, -- Need N
+ iab-ResourceConfigToAddModList-r17 SEQUENCE (SIZE(1..maxNrofIABResourceConfig-r17)) OF IAB-ResourceConfig-r17 OPTIONAL, -- Need N
+ iab-ResourceConfigToReleaseList-r17 SEQUENCE (SIZE(1..maxNrofIABResourceConfig-r17)) OF IAB-ResourceConfigID-r17 OPTIONAL -- Need N
+ ]],
+ [[
+ reportUplinkTxDirectCurrentMoreCarrier-r17 ReportUplinkTxDirectCurrentMoreCarrier-r17 OPTIONAL -- Need N
+ ]]
+}
+
+-- Serving cell specific MAC and PHY parameters for a SpCell:
+SpCellConfig ::= SEQUENCE {
+ servCellIndex ServCellIndex OPTIONAL, -- Cond SCG
+ reconfigurationWithSync ReconfigurationWithSync OPTIONAL, -- Cond ReconfWithSync
+ rlf-TimersAndConstants SetupRelease { RLF-TimersAndConstants } OPTIONAL, -- Need M
+ rlmInSyncOutOfSyncThreshold ENUMERATED {n1} OPTIONAL, -- Need S
+ spCellConfigDedicated ServingCellConfig OPTIONAL, -- Need M
+ ...,
+ [[
+ lowMobilityEvaluationConnected-r17 SEQUENCE {
+ s-SearchDeltaP-Connected-r17 ENUMERATED {dB3, dB6, dB9, dB12, dB15, spare3, spare2, spare1},
+ t-SearchDeltaP-Connected-r17 ENUMERATED {s5, s10, s20, s30, s60, s120, s180, s240, s300, spare7, spare6, spare5,
+ spare4, spare3, spare2, spare1}
+ } OPTIONAL, -- Need R
+ goodServingCellEvaluationRLM-r17 GoodServingCellEvaluation-r17 OPTIONAL, -- Need R
+ goodServingCellEvaluationBFD-r17 GoodServingCellEvaluation-r17 OPTIONAL, -- Need R
+ deactivatedSCG-Config-r17 SetupRelease { DeactivatedSCG-Config-r17 } OPTIONAL -- Cond SCG-Opt
+ ]]
+}
+
+ReconfigurationWithSync ::= SEQUENCE {
+ spCellConfigCommon ServingCellConfigCommon OPTIONAL, -- Need M
+ newUE-Identity RNTI-Value,
+ t304 ENUMERATED {ms50, ms100, ms150, ms200, ms500, ms1000, ms2000, ms10000},
+ rach-ConfigDedicated CHOICE {
+ uplink RACH-ConfigDedicated,
+ supplementaryUplink RACH-ConfigDedicated
+ } OPTIONAL, -- Need N
+ ...,
+ [[
+ smtc SSB-MTC OPTIONAL -- Need S
+ ]],
+ [[
+ daps-UplinkPowerConfig-r16 DAPS-UplinkPowerConfig-r16 OPTIONAL -- Need N
+ ]],
+ [[
+ sl-PathSwitchConfig-r17 SL-PathSwitchConfig-r17 OPTIONAL -- Cond DirectToIndirect-PathSwitch
+ ]]
+}
+
+DAPS-UplinkPowerConfig-r16 ::= SEQUENCE {
+ p-DAPS-Source-r16 P-Max,
+ p-DAPS-Target-r16 P-Max,
+ uplinkPowerSharingDAPS-Mode-r16 ENUMERATED {semi-static-mode1, semi-static-mode2, dynamic }
+}
+
+SCellConfig ::= SEQUENCE {
+ sCellIndex SCellIndex,
+ sCellConfigCommon ServingCellConfigCommon OPTIONAL, -- Cond SCellAdd
+ sCellConfigDedicated ServingCellConfig OPTIONAL, -- Cond SCellAddMod
+ ...,
+ [[
+ smtc SSB-MTC OPTIONAL -- Need S
+ ]],
+ [[
+ sCellState-r16 ENUMERATED {activated} OPTIONAL, -- Cond SCellAddSync
+ secondaryDRX-GroupConfig-r16 ENUMERATED {true} OPTIONAL -- Cond DRX-Config2
+ ]],
+ [[
+ preConfGapStatus-r17 BIT STRING (SIZE (maxNrofGapId-r17)) OPTIONAL, -- Cond PreConfigMG
+ goodServingCellEvaluationBFD-r17 GoodServingCellEvaluation-r17 OPTIONAL, -- Need R
+ sCellSIB20-r17 SetupRelease { SCellSIB20-r17 } OPTIONAL -- Need M
+ ]]
+
+}
+
+SCellSIB20-r17 ::= OCTET STRING (CONTAINING SystemInformation)
+
+DeactivatedSCG-Config-r17 ::= SEQUENCE {
+ bfd-and-RLM-r17 BOOLEAN,
+ ...
+}
+
+GoodServingCellEvaluation-r17 ::= SEQUENCE {
+ offset-r17 ENUMERATED {db2, db4, db6, db8} OPTIONAL -- Need S
+}
+
+SL-PathSwitchConfig-r17 ::= SEQUENCE {
+ targetRelayUE-Identity-r17 SL-SourceIdentity-r17,
+ t420-r17 ENUMERATED {ms50, ms100, ms150, ms200, ms500, ms1000, ms2000, ms10000},
+ ...
+}
+
+IAB-ResourceConfig-r17 ::= SEQUENCE {
+ iab-ResourceConfigID-r17 IAB-ResourceConfigID-r17,
+ slotList-r17 SEQUENCE (SIZE (1..5120)) OF INTEGER (0..5119) OPTIONAL, -- Need M
+ periodicitySlotList-r17 ENUMERATED {ms0p5, ms0p625, ms1, ms1p25, ms2, ms2p5, ms5, ms10, ms20, ms40, ms80, ms160} OPTIONAL, -- Need M
+ slotListSubcarrierSpacing-r17 SubcarrierSpacing OPTIONAL, -- Need M
+ ...
+}
+IAB-ResourceConfigID-r17 ::= INTEGER(0..maxNrofIABResourceConfig-1-r17)
+
+ReportUplinkTxDirectCurrentMoreCarrier-r17 ::= SEQUENCE (SIZE(1.. maxSimultaneousBands)) OF IntraBandCC-CombinationReqList-r17
+
+IntraBandCC-CombinationReqList-r17::= SEQUENCE {
+ servCellIndexList-r17 SEQUENCE (SIZE(1.. maxNrofServingCells)) OF ServCellIndex,
+ cc-CombinationList-r17 SEQUENCE (SIZE(1.. maxNrofReqComDC-Location-r17)) OF IntraBandCC-Combination-r17
+}
+
+IntraBandCC-Combination-r17::= SEQUENCE (SIZE(1.. maxNrofServingCells)) OF CC-State-r17
+
+CC-State-r17::= SEQUENCE {
+ dlCarrier-r17 CarrierState-r17 OPTIONAL, -- Need N
+ ulCarrier-r17 CarrierState-r17 OPTIONAL -- Need N
+}
+
+CarrierState-r17::= CHOICE {
+ deActivated-r17 NULL,
+ activeBWP-r17 INTEGER (0..maxNrofBWPs)
+}
+
+-- TAG-CELLGROUPCONFIG-STOP
+-- TAG-CELLGROUPID-START
+
+CellGroupId ::= INTEGER (0.. maxSecondaryCellGroups)
+
+-- TAG-CELLGROUPID-STOP
+-- TAG-CELLIDENTITY-START
+
+CellIdentity ::= BIT STRING (SIZE (36))
+
+-- TAG-CELLIDENTITY-STOP
+-- TAG-CELLRESELECTIONPRIORITY-START
+
+CellReselectionPriority ::= INTEGER (0..7)
+
+-- TAG-CELLRESELECTIONPRIORITY-STOP
+-- TAG-CELLRESELECTIONSUBPRIORITY-START
+
+CellReselectionSubPriority ::= ENUMERATED {oDot2, oDot4, oDot6, oDot8}
+
+-- TAG-CELLRESELECTIONSUBPRIORITY-STOP
+-- TAG-CFR-CONFIGMULTICAST-START
+
+CFR-ConfigMulticast-r17::= SEQUENCE {
+ locationAndBandwidthMulticast-r17 INTEGER (0..37949) OPTIONAL, -- Need S
+ pdcch-ConfigMulticast-r17 PDCCH-Config OPTIONAL, -- Need M
+ pdsch-ConfigMulticast-r17 PDSCH-Config OPTIONAL, -- Need M
+ sps-ConfigMulticastToAddModList-r17 SPS-ConfigMulticastToAddModList-r17 OPTIONAL, -- Need N
+ sps-ConfigMulticastToReleaseList-r17 SPS-ConfigMulticastToReleaseList-r17 OPTIONAL -- Need N
+}
+
+SPS-ConfigMulticastToAddModList-r17 ::= SEQUENCE (SIZE (1..8)) OF SPS-Config
+
+SPS-ConfigMulticastToReleaseList-r17 ::= SEQUENCE (SIZE (1..8)) OF SPS-ConfigIndex-r16
+
+-- TAG-CFR-CONFIGMULTICAST-STOP
+-- TAG-CGI-INFOEUTRA-START
+
+CGI-InfoEUTRA ::= SEQUENCE {
+ cgi-info-EPC SEQUENCE {
+ cgi-info-EPC-legacy CellAccessRelatedInfo-EUTRA-EPC,
+ cgi-info-EPC-list SEQUENCE (SIZE (1..maxPLMN)) OF CellAccessRelatedInfo-EUTRA-EPC OPTIONAL
+ } OPTIONAL,
+ cgi-info-5GC SEQUENCE (SIZE (1..maxPLMN)) OF CellAccessRelatedInfo-EUTRA-5GC OPTIONAL,
+ freqBandIndicator FreqBandIndicatorEUTRA,
+ multiBandInfoList MultiBandInfoListEUTRA OPTIONAL,
+ freqBandIndicatorPriority ENUMERATED {true} OPTIONAL
+}
+
+-- TAG-CGI-INFOEUTRA-STOP
+-- TAG-CGI-INFOEUTRALOGGING-START
+
+CGI-InfoEUTRALogging ::= SEQUENCE {
+ plmn-Identity-eutra-5gc PLMN-Identity OPTIONAL,
+ trackingAreaCode-eutra-5gc TrackingAreaCode OPTIONAL,
+ cellIdentity-eutra-5gc BIT STRING (SIZE (28)) OPTIONAL,
+ plmn-Identity-eutra-epc PLMN-Identity OPTIONAL,
+ trackingAreaCode-eutra-epc BIT STRING (SIZE (16)) OPTIONAL,
+ cellIdentity-eutra-epc BIT STRING (SIZE (28)) OPTIONAL
+}
+
+-- TAG-CGI-INFOEUTRALOGGING-STOP
+-- TAG-CGI-INFO-NR-START
+
+CGI-InfoNR ::= SEQUENCE {
+ plmn-IdentityInfoList PLMN-IdentityInfoList OPTIONAL,
+ frequencyBandList MultiFrequencyBandListNR OPTIONAL,
+ noSIB1 SEQUENCE {
+ ssb-SubcarrierOffset INTEGER (0..15),
+ pdcch-ConfigSIB1 PDCCH-ConfigSIB1
+ } OPTIONAL,
+ ...,
+ [[
+ npn-IdentityInfoList-r16 NPN-IdentityInfoList-r16 OPTIONAL
+ ]],
+ [[
+ cellReservedForOtherUse-r16 ENUMERATED {true} OPTIONAL
+ ]]
+}
+
+-- TAG-CGI-INFO-NR-STOP
+-- TAG-CGI-INFO-LOGGING-START
+
+CGI-Info-Logging-r16 ::= SEQUENCE {
+ plmn-Identity-r16 PLMN-Identity,
+ cellIdentity-r16 CellIdentity,
+ trackingAreaCode-r16 TrackingAreaCode OPTIONAL
+}
+
+-- TAG-CGI-INFO-LOGGING-STOP
+-- TAG-CLI-RSSI-RANGE-START
+
+CLI-RSSI-Range-r16 ::= INTEGER(0..76)
+
+-- TAG-CLI-RSSI-RANGE-STOP
+-- TAG-CODEBOOKCONFIG-START
+
+CodebookConfig ::= SEQUENCE {
+ codebookType CHOICE {
+ type1 SEQUENCE {
+ subType CHOICE {
+ typeI-SinglePanel SEQUENCE {
+ nrOfAntennaPorts CHOICE {
+ two SEQUENCE {
+ twoTX-CodebookSubsetRestriction BIT STRING (SIZE (6))
+ },
+ moreThanTwo SEQUENCE {
+ n1-n2 CHOICE {
+ two-one-TypeI-SinglePanel-Restriction BIT STRING (SIZE (8)),
+ two-two-TypeI-SinglePanel-Restriction BIT STRING (SIZE (64)),
+ four-one-TypeI-SinglePanel-Restriction BIT STRING (SIZE (16)),
+ three-two-TypeI-SinglePanel-Restriction BIT STRING (SIZE (96)),
+ six-one-TypeI-SinglePanel-Restriction BIT STRING (SIZE (24)),
+ four-two-TypeI-SinglePanel-Restriction BIT STRING (SIZE (128)),
+ eight-one-TypeI-SinglePanel-Restriction BIT STRING (SIZE (32)),
+ four-three-TypeI-SinglePanel-Restriction BIT STRING (SIZE (192)),
+ six-two-TypeI-SinglePanel-Restriction BIT STRING (SIZE (192)),
+ twelve-one-TypeI-SinglePanel-Restriction BIT STRING (SIZE (48)),
+ four-four-TypeI-SinglePanel-Restriction BIT STRING (SIZE (256)),
+ eight-two-TypeI-SinglePanel-Restriction BIT STRING (SIZE (256)),
+ sixteen-one-TypeI-SinglePanel-Restriction BIT STRING (SIZE (64))
+ },
+ typeI-SinglePanel-codebookSubsetRestriction-i2 BIT STRING (SIZE (16)) OPTIONAL -- Need R
+ }
+ },
+ typeI-SinglePanel-ri-Restriction BIT STRING (SIZE (8))
+ },
+ typeI-MultiPanel SEQUENCE {
+ ng-n1-n2 CHOICE {
+ two-two-one-TypeI-MultiPanel-Restriction BIT STRING (SIZE (8)),
+ two-four-one-TypeI-MultiPanel-Restriction BIT STRING (SIZE (16)),
+ four-two-one-TypeI-MultiPanel-Restriction BIT STRING (SIZE (8)),
+ two-two-two-TypeI-MultiPanel-Restriction BIT STRING (SIZE (64)),
+ two-eight-one-TypeI-MultiPanel-Restriction BIT STRING (SIZE (32)),
+ four-four-one-TypeI-MultiPanel-Restriction BIT STRING (SIZE (16)),
+ two-four-two-TypeI-MultiPanel-Restriction BIT STRING (SIZE (128)),
+ four-two-two-TypeI-MultiPanel-Restriction BIT STRING (SIZE (64))
+ },
+ ri-Restriction BIT STRING (SIZE (4))
+ }
+ },
+ codebookMode INTEGER (1..2)
+
+ },
+ type2 SEQUENCE {
+ subType CHOICE {
+ typeII SEQUENCE {
+ n1-n2-codebookSubsetRestriction CHOICE {
+ two-one BIT STRING (SIZE (16)),
+ two-two BIT STRING (SIZE (43)),
+ four-one BIT STRING (SIZE (32)),
+ three-two BIT STRING (SIZE (59)),
+ six-one BIT STRING (SIZE (48)),
+ four-two BIT STRING (SIZE (75)),
+ eight-one BIT STRING (SIZE (64)),
+ four-three BIT STRING (SIZE (107)),
+ six-two BIT STRING (SIZE (107)),
+ twelve-one BIT STRING (SIZE (96)),
+ four-four BIT STRING (SIZE (139)),
+ eight-two BIT STRING (SIZE (139)),
+ sixteen-one BIT STRING (SIZE (128))
+ },
+ typeII-RI-Restriction BIT STRING (SIZE (2))
+ },
+ typeII-PortSelection SEQUENCE {
+ portSelectionSamplingSize ENUMERATED {n1, n2, n3, n4} OPTIONAL, -- Need R
+ typeII-PortSelectionRI-Restriction BIT STRING (SIZE (2))
+ }
+ },
+ phaseAlphabetSize ENUMERATED {n4, n8},
+ subbandAmplitude BOOLEAN,
+ numberOfBeams ENUMERATED {two, three, four}
+ }
+ }
+}
+
+CodebookConfig-r16 ::= SEQUENCE {
+ codebookType CHOICE {
+ type2 SEQUENCE {
+ subType CHOICE {
+ typeII-r16 SEQUENCE {
+ n1-n2-codebookSubsetRestriction-r16 CHOICE {
+ two-one BIT STRING (SIZE (16)),
+ two-two BIT STRING (SIZE (43)),
+ four-one BIT STRING (SIZE (32)),
+ three-two BIT STRING (SIZE (59)),
+ six-one BIT STRING (SIZE (48)),
+ four-two BIT STRING (SIZE (75)),
+ eight-one BIT STRING (SIZE (64)),
+ four-three BIT STRING (SIZE (107)),
+ six-two BIT STRING (SIZE (107)),
+ twelve-one BIT STRING (SIZE (96)),
+ four-four BIT STRING (SIZE (139)),
+ eight-two BIT STRING (SIZE (139)),
+ sixteen-one BIT STRING (SIZE (128))
+ },
+ typeII-RI-Restriction-r16 BIT STRING (SIZE(4))
+ },
+ typeII-PortSelection-r16 SEQUENCE {
+ portSelectionSamplingSize-r16 ENUMERATED {n1, n2, n3, n4},
+ typeII-PortSelectionRI-Restriction-r16 BIT STRING (SIZE (4))
+ }
+ },
+ numberOfPMI-SubbandsPerCQI-Subband-r16 INTEGER (1..2),
+ paramCombination-r16 INTEGER (1..8)
+ }
+ }
+}
+
+CodebookConfig-r17 ::= SEQUENCE {
+ codebookType CHOICE {
+ type1 SEQUENCE {
+ typeI-SinglePanel-Group1-r17 SEQUENCE {
+ nrOfAntennaPorts CHOICE {
+ two SEQUENCE {
+ twoTX-CodebookSubsetRestriction1-r17 BIT STRING (SIZE (6))
+ },
+ moreThanTwo SEQUENCE {
+ n1-n2 CHOICE {
+ two-one-TypeI-SinglePanel-Restriction1-r17 BIT STRING (SIZE (8)),
+ two-two-TypeI-SinglePanel-Restriction1-r17 BIT STRING (SIZE (64)),
+ four-one-TypeI-SinglePanel-Restriction1-r17 BIT STRING (SIZE (16)),
+ three-two-TypeI-SinglePanel-Restriction1-r17 BIT STRING (SIZE (96)),
+ six-one-TypeI-SinglePanel-Restriction1-r17 BIT STRING (SIZE (24)),
+ four-two-TypeI-SinglePanel-Restriction1-r17 BIT STRING (SIZE (128)),
+ eight-one-TypeI-SinglePanel-Restriction1-r17 BIT STRING (SIZE (32)),
+ four-three-TypeI-SinglePanel-Restriction1-r17 BIT STRING (SIZE (192)),
+ six-two-TypeI-SinglePanel-Restriction1-r17 BIT STRING (SIZE (192)),
+ twelve-one-TypeI-SinglePanel-Restriction1-r17 BIT STRING (SIZE (48)),
+ four-four-TypeI-SinglePanel-Restriction1-r17 BIT STRING (SIZE (256)),
+ eight-two-TypeI-SinglePanel-Restriction1-r17 BIT STRING (SIZE (256)),
+ sixteen-one-TypeI-SinglePanel-Restriction1-r17 BIT STRING (SIZE (64))
+ }
+ }
+ }
+ } OPTIONAL, -- Need R
+ typeI-SinglePanel-Group2-r17 SEQUENCE {
+ nrOfAntennaPorts CHOICE {
+ two SEQUENCE {
+ twoTX-CodebookSubsetRestriction2-r17 BIT STRING (SIZE (6))
+ },
+ moreThanTwo SEQUENCE {
+ n1-n2 CHOICE {
+ two-one-TypeI-SinglePanel-Restriction2-r17 BIT STRING (SIZE (8)),
+ two-two-TypeI-SinglePanel-Restriction2-r17 BIT STRING (SIZE (64)),
+ four-one-TypeI-SinglePanel-Restriction2-r17 BIT STRING (SIZE (16)),
+ three-two-TypeI-SinglePanel-Restriction2-r17 BIT STRING (SIZE (96)),
+ six-one-TypeI-SinglePanel-Restriction2-r17 BIT STRING (SIZE (24)),
+ four-two-TypeI-SinglePanel-Restriction2-r17 BIT STRING (SIZE (128)),
+ eight-one-TypeI-SinglePanel-Restriction2-r17 BIT STRING (SIZE (32)),
+ four-three-TypeI-SinglePanel-Restriction2-r17 BIT STRING (SIZE (192)),
+ six-two-TypeI-SinglePanel-Restriction2-r17 BIT STRING (SIZE (192)),
+ twelve-one-TypeI-SinglePanel-Restriction2-r17 BIT STRING (SIZE (48)),
+ four-four-TypeI-SinglePanel-Restriction2-r17 BIT STRING (SIZE (256)),
+ eight-two-TypeI-SinglePanel-Restriction2-r17 BIT STRING (SIZE (256)),
+ sixteen-one-TypeI-SinglePanel-Restriction2-r17 BIT STRING (SIZE (64))
+ }
+ }
+ }
+ } OPTIONAL, -- Need R
+ typeI-SinglePanel-ri-RestrictionSTRP-r17 BIT STRING (SIZE (8)) OPTIONAL, -- Need R
+ typeI-SinglePanel-ri-RestrictionSDM-r17 BIT STRING (SIZE (4)) OPTIONAL -- Need R
+ },
+ type2 SEQUENCE {
+ typeII-PortSelection-r17 SEQUENCE {
+ paramCombination-r17 INTEGER (1..8),
+ valueOfN-r17 ENUMERATED {n2, n4} OPTIONAL, -- Need R
+ numberOfPMI-SubbandsPerCQI-Subband-r17 INTEGER(1..2) OPTIONAL, -- Need R
+ typeII-PortSelectionRI-Restriction-r17 BIT STRING (SIZE (4))
+ }
+ }
+ }
+}
+
+CodebookConfig-v1730 ::= SEQUENCE {
+ codebookType CHOICE {
+ type1 SEQUENCE {
+ codebookMode INTEGER (1..2) OPTIONAL -- Need R
+ }
+ }
+}
+
+-- TAG-CODEBOOKCONFIG-STOP
+-- TAG-COMMONLOCATIONINFO-START
+
+CommonLocationInfo-r16 ::= SEQUENCE {
+ gnss-TOD-msec-r16 OCTET STRING OPTIONAL,
+ locationTimestamp-r16 OCTET STRING OPTIONAL,
+ locationCoordinate-r16 OCTET STRING OPTIONAL,
+ locationError-r16 OCTET STRING OPTIONAL,
+ locationSource-r16 OCTET STRING OPTIONAL,
+ velocityEstimate-r16 OCTET STRING OPTIONAL
+}
+
+-- TAG-COMMONLOCATIONINFO-STOP
+-- TAG-CONDRECONFIGID-START
+
+CondReconfigId-r16 ::= INTEGER (1.. maxNrofCondCells-r16)
+
+-- TAG-CONDRECONFIGID-STOP
+-- TAG-CONDRECONFIGTOADDMODLIST-START
+
+CondReconfigToAddModList-r16 ::= SEQUENCE (SIZE (1.. maxNrofCondCells-r16)) OF CondReconfigToAddMod-r16
+
+CondReconfigToAddMod-r16 ::= SEQUENCE {
+ condReconfigId-r16 CondReconfigId-r16,
+ condExecutionCond-r16 SEQUENCE (SIZE (1..2)) OF MeasId OPTIONAL, -- Need M
+ condRRCReconfig-r16 OCTET STRING (CONTAINING RRCReconfiguration) OPTIONAL, -- Cond condReconfigAdd
+ ...,
+ [[
+ condExecutionCondSCG-r17 OCTET STRING (CONTAINING CondReconfigExecCondSCG-r17) OPTIONAL -- Need M
+ ]]
+}
+
+CondReconfigExecCondSCG-r17 ::= SEQUENCE (SIZE (1..2)) OF MeasId
+
+-- TAG-CONDRECONFIGTOADDMODLIST-STOP
+-- TAG-CONDITIONALRECONFIGURATION-START
+
+ConditionalReconfiguration-r16 ::= SEQUENCE {
+ attemptCondReconfig-r16 ENUMERATED {true} OPTIONAL, -- Cond CHO
+ condReconfigToRemoveList-r16 CondReconfigToRemoveList-r16 OPTIONAL, -- Need N
+ condReconfigToAddModList-r16 CondReconfigToAddModList-r16 OPTIONAL, -- Need N
+ ...
+}
+
+CondReconfigToRemoveList-r16 ::= SEQUENCE (SIZE (1.. maxNrofCondCells-r16)) OF CondReconfigId-r16
+
+-- TAG-CONDITIONALRECONFIGURATION-STOP
+-- TAG-CONFIGUREDGRANTCONFIG-START
+
+ConfiguredGrantConfig ::= SEQUENCE {
+ frequencyHopping ENUMERATED {intraSlot, interSlot} OPTIONAL, -- Need S
+ cg-DMRS-Configuration DMRS-UplinkConfig,
+ mcs-Table ENUMERATED {qam256, qam64LowSE} OPTIONAL, -- Need S
+ mcs-TableTransformPrecoder ENUMERATED {qam256, qam64LowSE} OPTIONAL, -- Need S
+ uci-OnPUSCH SetupRelease { CG-UCI-OnPUSCH } OPTIONAL, -- Need M
+ resourceAllocation ENUMERATED { resourceAllocationType0, resourceAllocationType1, dynamicSwitch },
+ rbg-Size ENUMERATED {config2} OPTIONAL, -- Need S
+ powerControlLoopToUse ENUMERATED {n0, n1},
+ p0-PUSCH-Alpha P0-PUSCH-AlphaSetId,
+ transformPrecoder ENUMERATED {enabled, disabled} OPTIONAL, -- Need S
+ nrofHARQ-Processes INTEGER(1..16),
+ repK ENUMERATED {n1, n2, n4, n8},
+ repK-RV ENUMERATED {s1-0231, s2-0303, s3-0000} OPTIONAL, -- Need R
+ periodicity ENUMERATED {
+ sym2, sym7, sym1x14, sym2x14, sym4x14, sym5x14, sym8x14, sym10x14, sym16x14, sym20x14,
+ sym32x14, sym40x14, sym64x14, sym80x14, sym128x14, sym160x14, sym256x14, sym320x14, sym512x14,
+ sym640x14, sym1024x14, sym1280x14, sym2560x14, sym5120x14,
+ sym6, sym1x12, sym2x12, sym4x12, sym5x12, sym8x12, sym10x12, sym16x12, sym20x12, sym32x12,
+ sym40x12, sym64x12, sym80x12, sym128x12, sym160x12, sym256x12, sym320x12, sym512x12, sym640x12,
+ sym1280x12, sym2560x12
+ },
+ configuredGrantTimer INTEGER (1..64) OPTIONAL, -- Need R
+ rrc-ConfiguredUplinkGrant SEQUENCE {
+ timeDomainOffset INTEGER (0..5119),
+ timeDomainAllocation INTEGER (0..15),
+ frequencyDomainAllocation BIT STRING (SIZE(18)),
+ antennaPort INTEGER (0..31),
+ dmrs-SeqInitialization INTEGER (0..1) OPTIONAL, -- Need R
+ precodingAndNumberOfLayers INTEGER (0..63),
+ srs-ResourceIndicator INTEGER (0..15) OPTIONAL, -- Need R
+ mcsAndTBS INTEGER (0..31),
+ frequencyHoppingOffset INTEGER (1.. maxNrofPhysicalResourceBlocks-1) OPTIONAL, -- Need R
+ pathlossReferenceIndex INTEGER (0..maxNrofPUSCH-PathlossReferenceRSs-1),
+ ...,
+ [[
+ pusch-RepTypeIndicator-r16 ENUMERATED {pusch-RepTypeA,pusch-RepTypeB} OPTIONAL, -- Need M
+ frequencyHoppingPUSCH-RepTypeB-r16 ENUMERATED {interRepetition, interSlot} OPTIONAL, -- Cond RepTypeB
+ timeReferenceSFN-r16 ENUMERATED {sfn512} OPTIONAL -- Need S
+ ]],
+ [[
+ pathlossReferenceIndex2-r17 INTEGER (0..maxNrofPUSCH-PathlossReferenceRSs-1) OPTIONAL, -- Need R
+ srs-ResourceIndicator2-r17 INTEGER (0..15) OPTIONAL, -- Need R
+ precodingAndNumberOfLayers2-r17 INTEGER (0..63) OPTIONAL, -- Need R
+ timeDomainAllocation-v1710 INTEGER (16..63) OPTIONAL, -- Need M
+ timeDomainOffset-r17 INTEGER (0..40959) OPTIONAL, -- Need R
+ cg-SDT-Configuration-r17 CG-SDT-Configuration-r17 OPTIONAL -- Need M
+ ]]
+ } OPTIONAL, -- Need R
+ ...,
+ [[
+ cg-RetransmissionTimer-r16 INTEGER (1..64) OPTIONAL, -- Need R
+ cg-minDFI-Delay-r16 ENUMERATED
+ {sym7, sym1x14, sym2x14, sym3x14, sym4x14, sym5x14, sym6x14, sym7x14, sym8x14,
+ sym9x14, sym10x14, sym11x14, sym12x14, sym13x14, sym14x14,sym15x14, sym16x14
+ } OPTIONAL, -- Need R
+ cg-nrofPUSCH-InSlot-r16 INTEGER (1..7) OPTIONAL, -- Need R
+ cg-nrofSlots-r16 INTEGER (1..40) OPTIONAL, -- Need R
+ cg-StartingOffsets-r16 CG-StartingOffsets-r16 OPTIONAL, -- Need R
+ cg-UCI-Multiplexing-r16 ENUMERATED {enabled} OPTIONAL, -- Need R
+ cg-COT-SharingOffset-r16 INTEGER (1..39) OPTIONAL, -- Need R
+ betaOffsetCG-UCI-r16 INTEGER (0..31) OPTIONAL, -- Need R
+ cg-COT-SharingList-r16 SEQUENCE (SIZE (1..1709)) OF CG-COT-Sharing-r16 OPTIONAL, -- Need R
+ harq-ProcID-Offset-r16 INTEGER (0..15) OPTIONAL, -- Need M
+ harq-ProcID-Offset2-r16 INTEGER (0..15) OPTIONAL, -- Need M
+ configuredGrantConfigIndex-r16 ConfiguredGrantConfigIndex-r16 OPTIONAL, -- Cond CG-List
+ configuredGrantConfigIndexMAC-r16 ConfiguredGrantConfigIndexMAC-r16 OPTIONAL, -- Cond CG-IndexMAC
+ periodicityExt-r16 INTEGER (1..5120) OPTIONAL, -- Need R
+ startingFromRV0-r16 ENUMERATED {on, off} OPTIONAL, -- Need R
+ phy-PriorityIndex-r16 ENUMERATED {p0, p1} OPTIONAL, -- Need R
+ autonomousTx-r16 ENUMERATED {enabled} OPTIONAL -- Cond LCH-BasedPrioritization
+ ]],
+ [[
+ cg-betaOffsetsCrossPri0-r17 SetupRelease { BetaOffsetsCrossPriSelCG-r17 } OPTIONAL, -- Need M
+ cg-betaOffsetsCrossPri1-r17 SetupRelease { BetaOffsetsCrossPriSelCG-r17 } OPTIONAL, -- Need M
+ mappingPattern-r17 ENUMERATED {cyclicMapping, sequentialMapping} OPTIONAL, -- Cond SRSsets
+ sequenceOffsetForRV-r17 INTEGER (0..3) OPTIONAL, -- Need R
+ p0-PUSCH-Alpha2-r17 P0-PUSCH-AlphaSetId OPTIONAL, -- Need R
+ powerControlLoopToUse2-r17 ENUMERATED {n0, n1} OPTIONAL, -- Need R
+ cg-COT-SharingList-r17 SEQUENCE (SIZE (1..50722)) OF CG-COT-Sharing-r17 OPTIONAL, -- Need R
+ periodicityExt-r17 INTEGER (1..40960) OPTIONAL, -- Need R
+ repK-v1710 ENUMERATED {n12, n16, n24, n32} OPTIONAL, -- Need R
+ nrofHARQ-Processes-v1700 INTEGER(17..32) OPTIONAL, -- Need M
+ harq-ProcID-Offset2-v1700 INTEGER (16..31) OPTIONAL, -- Need R
+ configuredGrantTimer-v1700 INTEGER(33..288) OPTIONAL, -- Need R
+ cg-minDFI-Delay-v1710 INTEGER (238..3584) OPTIONAL -- Need R
+ ]],
+ [[
+ harq-ProcID-Offset-v1730 INTEGER (16..31) OPTIONAL, -- Need R
+ cg-nrofSlots-r17 INTEGER (1..320) OPTIONAL -- Need R
+ ]]
+}
+
+CG-UCI-OnPUSCH ::= CHOICE {
+ dynamic SEQUENCE (SIZE (1..4)) OF BetaOffsets,
+ semiStatic BetaOffsets
+}
+
+CG-COT-Sharing-r16 ::= CHOICE {
+ noCOT-Sharing-r16 NULL,
+ cot-Sharing-r16 SEQUENCE {
+ duration-r16 INTEGER (1..39),
+ offset-r16 INTEGER (1..39),
+ channelAccessPriority-r16 INTEGER (1..4)
+ }
+}
+
+CG-COT-Sharing-r17 ::= CHOICE {
+ noCOT-Sharing-r17 NULL,
+ cot-Sharing-r17 SEQUENCE {
+ duration-r17 INTEGER (1..319),
+ offset-r17 INTEGER (1..319)
+ }
+}
+
+CG-StartingOffsets-r16 ::= SEQUENCE {
+ cg-StartingFullBW-InsideCOT-r16 SEQUENCE (SIZE (1..7)) OF INTEGER (0..6) OPTIONAL, -- Need R
+ cg-StartingFullBW-OutsideCOT-r16 SEQUENCE (SIZE (1..7)) OF INTEGER (0..6) OPTIONAL, -- Need R
+ cg-StartingPartialBW-InsideCOT-r16 INTEGER (0..6) OPTIONAL, -- Need R
+ cg-StartingPartialBW-OutsideCOT-r16 INTEGER (0..6) OPTIONAL -- Need R
+}
+
+BetaOffsetsCrossPriSelCG-r17 ::= CHOICE {
+ dynamic-r17 SEQUENCE (SIZE (1..4)) OF BetaOffsetsCrossPri-r17,
+ semiStatic-r17 BetaOffsetsCrossPri-r17
+}
+
+CG-SDT-Configuration-r17 ::= SEQUENCE {
+ cg-SDT-RetransmissionTimer INTEGER (1..64) OPTIONAL, -- Need R
+ sdt-SSB-Subset-r17 CHOICE {
+ shortBitmap-r17 BIT STRING (SIZE (4)),
+ mediumBitmap-r17 BIT STRING (SIZE (8)),
+ longBitmap-r17 BIT STRING (SIZE (64))
+ } OPTIONAL, -- Need S
+ sdt-SSB-PerCG-PUSCH-r17 ENUMERATED {oneEighth, oneFourth, half, one, two, four, eight, sixteen} OPTIONAL, -- Need M
+ sdt-P0-PUSCH-r17 INTEGER (-16..15) OPTIONAL, -- Need M
+ sdt-Alpha-r17 ENUMERATED {alpha0, alpha04, alpha05, alpha06, alpha07, alpha08, alpha09, alpha1} OPTIONAL, -- Need M
+ sdt-DMRS-Ports-r17 CHOICE {
+ dmrsType1-r17 BIT STRING (SIZE (8)),
+ dmrsType2-r17 BIT STRING (SIZE (12))
+ } OPTIONAL, -- Need M
+ sdt-NrofDMRS-Sequences-r17 INTEGER (1..2) OPTIONAL -- Need M
+}
+
+-- TAG-CONFIGUREDGRANTCONFIG-STOP
+-- TAG-CONFIGUREDGRANTCONFIGINDEX-START
+
+ConfiguredGrantConfigIndex-r16 ::= INTEGER (0.. maxNrofConfiguredGrantConfig-1-r16)
+
+-- TAG-CONFIGUREDGRANTCONFIGINDEX-STOP
+-- TAG-CONFIGUREDGRANTCONFIGINDEXMAC-START
+
+ConfiguredGrantConfigIndexMAC-r16 ::= INTEGER (0.. maxNrofConfiguredGrantConfigMAC-1-r16)
+
+-- TAG-CONFIGUREDGRANTCONFIGINDEXMAC-STOP
+-- TAG-CONNESTFAILURECONTROL-START
+
+ConnEstFailureControl ::= SEQUENCE {
+ connEstFailCount ENUMERATED {n1, n2, n3, n4},
+ connEstFailOffsetValidity ENUMERATED {s30, s60, s120, s240, s300, s420, s600, s900},
+ connEstFailOffset INTEGER (0..15) OPTIONAL -- Need S
+}
+
+-- TAG-CONNESTFAILURECONTROL-STOP
+-- TAG-CONTROLRESOURCESET-START
+
+ControlResourceSet ::= SEQUENCE {
+ controlResourceSetId ControlResourceSetId,
+ frequencyDomainResources BIT STRING (SIZE (45)),
+ duration INTEGER (1..maxCoReSetDuration),
+ cce-REG-MappingType CHOICE {
+ interleaved SEQUENCE {
+ reg-BundleSize ENUMERATED {n2, n3, n6},
+ interleaverSize ENUMERATED {n2, n3, n6},
+ shiftIndex INTEGER(0..maxNrofPhysicalResourceBlocks-1) OPTIONAL -- Need S
+ },
+ nonInterleaved NULL
+ },
+ precoderGranularity ENUMERATED {sameAsREG-bundle, allContiguousRBs},
+ tci-StatesPDCCH-ToAddList SEQUENCE(SIZE (1..maxNrofTCI-StatesPDCCH)) OF TCI-StateId OPTIONAL, -- Cond NotSIB-initialBWP
+ tci-StatesPDCCH-ToReleaseList SEQUENCE(SIZE (1..maxNrofTCI-StatesPDCCH)) OF TCI-StateId OPTIONAL, -- Cond NotSIB-initialBWP
+ tci-PresentInDCI ENUMERATED {enabled} OPTIONAL, -- Need S
+ pdcch-DMRS-ScramblingID INTEGER (0..65535) OPTIONAL, -- Need S
+ ...,
+ [[
+ rb-Offset-r16 INTEGER (0..5) OPTIONAL, -- Need S
+ tci-PresentDCI-1-2-r16 INTEGER (1..3) OPTIONAL, -- Need S
+ coresetPoolIndex-r16 INTEGER (0..1) OPTIONAL, -- Need S
+ controlResourceSetId-v1610 ControlResourceSetId-v1610 OPTIONAL -- Need S
+ ]],
+ [[
+ followUnifiedTCI-State-r17 ENUMERATED {enabled} OPTIONAL -- Need R
+ ]]
+}
+
+-- TAG-CONTROLRESOURCESET-STOP
+-- TAG-CONTROLRESOURCESETID-START
+
+ControlResourceSetId ::= INTEGER (0..maxNrofControlResourceSets-1)
+
+ControlResourceSetId-r16 ::= INTEGER (0..maxNrofControlResourceSets-1-r16)
+
+ControlResourceSetId-v1610 ::= INTEGER (maxNrofControlResourceSets..maxNrofControlResourceSets-1-r16)
+
+-- TAG-CONTROLRESOURCESETID-STOP
+-- TAG-CONTROLRESOURCESETZERO-START
+
+ControlResourceSetZero ::= INTEGER (0..15)
+
+-- TAG-CONTROLRESOURCESETZERO-STOP
+-- TAG-CROSSCARRIERSCHEDULINGCONFIG-START
+
+CrossCarrierSchedulingConfig ::= SEQUENCE {
+ schedulingCellInfo CHOICE {
+ own SEQUENCE { -- Cross carrier scheduling: scheduling cell
+ cif-Presence BOOLEAN
+ },
+ other SEQUENCE { -- Cross carrier scheduling: scheduled cell
+ schedulingCellId ServCellIndex,
+ cif-InSchedulingCell INTEGER (1..7)
+ }
+ },
+ ...,
+ [[
+ carrierIndicatorSize-r16 SEQUENCE {
+ carrierIndicatorSizeDCI-1-2-r16 INTEGER (0..3),
+ carrierIndicatorSizeDCI-0-2-r16 INTEGER (0..3)
+ } OPTIONAL, -- Cond CIF-PRESENCE
+ enableDefaultBeamForCCS-r16 ENUMERATED {enabled} OPTIONAL -- Need S
+ ]],
+ [[
+ ccs-BlindDetectionSplit-r17 ENUMERATED {oneSeventh, threeFourteenth, twoSeventh, threeSeventh,
+ oneHalf, fourSeventh, fiveSeventh, spare1} OPTIONAL -- Need R
+ ]]
+}
+
+-- TAG-CROSSCARRIERSCHEDULINGCONFIG-STOP
+-- TAG-CSI-APERIODICTRIGGERSTATELIST-START
+
+CSI-AperiodicTriggerStateList ::= SEQUENCE (SIZE (1..maxNrOfCSI-AperiodicTriggers)) OF CSI-AperiodicTriggerState
+
+CSI-AperiodicTriggerState ::= SEQUENCE {
+ associatedReportConfigInfoList SEQUENCE (SIZE(1..maxNrofReportConfigPerAperiodicTrigger)) OF CSI-AssociatedReportConfigInfo,
+ ...,
+ [[
+ ap-CSI-MultiplexingMode-r17 ENUMERATED {enabled} OPTIONAL -- Need R
+ ]]
+}
+
+CSI-AssociatedReportConfigInfo ::= SEQUENCE {
+ reportConfigId CSI-ReportConfigId,
+ resourcesForChannel CHOICE {
+ nzp-CSI-RS SEQUENCE {
+ resourceSet INTEGER (1..maxNrofNZP-CSI-RS-ResourceSetsPerConfig),
+ qcl-info SEQUENCE (SIZE(1..maxNrofAP-CSI-RS-ResourcesPerSet)) OF TCI-StateId
+ OPTIONAL -- Cond Aperiodic
+ },
+ csi-SSB-ResourceSet INTEGER (1..maxNrofCSI-SSB-ResourceSetsPerConfig)
+ },
+ csi-IM-ResourcesForInterference INTEGER(1..maxNrofCSI-IM-ResourceSetsPerConfig) OPTIONAL, -- Cond CSI-IM-ForInterference
+ nzp-CSI-RS-ResourcesForInterference INTEGER (1..maxNrofNZP-CSI-RS-ResourceSetsPerConfig) OPTIONAL, -- Cond NZP-CSI-RS-ForInterference
+ ...,
+ [[
+ resourcesForChannel2-r17 CHOICE {
+ nzp-CSI-RS2-r17 SEQUENCE {
+ resourceSet2-r17 INTEGER (1..maxNrofNZP-CSI-RS-ResourceSetsPerConfig),
+ qcl-info2-r17 SEQUENCE (SIZE(1..maxNrofAP-CSI-RS-ResourcesPerSet)) OF TCI-StateId
+ OPTIONAL -- Cond Aperiodic
+ },
+ csi-SSB-ResourceSet2-r17 INTEGER (1..maxNrofCSI-SSB-ResourceSetsPerConfigExt)
+ } OPTIONAL, -- Cond NoUnifiedTCI
+ csi-SSB-ResourceSetExt INTEGER (1..maxNrofCSI-SSB-ResourceSetsPerConfigExt) OPTIONAL -- Need R
+ ]]
+}
+
+-- TAG-CSI-APERIODICTRIGGERSTATELIST-STOP
+-- TAG-CSI-FREQUENCYOCCUPATION-START
+
+CSI-FrequencyOccupation ::= SEQUENCE {
+ startingRB INTEGER (0..maxNrofPhysicalResourceBlocks-1),
+ nrofRBs INTEGER (24..maxNrofPhysicalResourceBlocksPlus1),
+ ...
+}
+
+-- TAG-CSI-FREQUENCYOCCUPATION-STOP
+-- TAG-CSI-IM-RESOURCE-START
+
+CSI-IM-Resource ::= SEQUENCE {
+ csi-IM-ResourceId CSI-IM-ResourceId,
+ csi-IM-ResourceElementPattern CHOICE {
+ pattern0 SEQUENCE {
+ subcarrierLocation-p0 ENUMERATED { s0, s2, s4, s6, s8, s10 },
+ symbolLocation-p0 INTEGER (0..12)
+ },
+ pattern1 SEQUENCE {
+ subcarrierLocation-p1 ENUMERATED { s0, s4, s8 },
+ symbolLocation-p1 INTEGER (0..13)
+ }
+ } OPTIONAL, -- Need M
+ freqBand CSI-FrequencyOccupation OPTIONAL, -- Need M
+ periodicityAndOffset CSI-ResourcePeriodicityAndOffset OPTIONAL, -- Cond PeriodicOrSemiPersistent
+ ...
+}
+
+-- TAG-CSI-IM-RESOURCE-STOP
+-- TAG-CSI-IM-RESOURCEID-START
+
+CSI-IM-ResourceId ::= INTEGER (0..maxNrofCSI-IM-Resources-1)
+
+-- TAG-CSI-IM-RESOURCEID-STOP
+-- TAG-CSI-IM-RESOURCESET-START
+
+CSI-IM-ResourceSet ::= SEQUENCE {
+ csi-IM-ResourceSetId CSI-IM-ResourceSetId,
+ csi-IM-Resources SEQUENCE (SIZE(1..maxNrofCSI-IM-ResourcesPerSet)) OF CSI-IM-ResourceId,
+ ...
+}
+-- TAG-CSI-IM-RESOURCESET-STOP
+-- TAG-CSI-IM-RESOURCESETID-START
+
+CSI-IM-ResourceSetId ::= INTEGER (0..maxNrofCSI-IM-ResourceSets-1)
+
+-- TAG-CSI-IM-RESOURCESETID-STOP
+-- TAG-CSI-MEASCONFIG-START
+
+CSI-MeasConfig ::= SEQUENCE {
+ nzp-CSI-RS-ResourceToAddModList SEQUENCE (SIZE (1..maxNrofNZP-CSI-RS-Resources)) OF NZP-CSI-RS-Resource OPTIONAL, -- Need N
+ nzp-CSI-RS-ResourceToReleaseList SEQUENCE (SIZE (1..maxNrofNZP-CSI-RS-Resources)) OF NZP-CSI-RS-ResourceId OPTIONAL, -- Need N
+ nzp-CSI-RS-ResourceSetToAddModList SEQUENCE (SIZE (1..maxNrofNZP-CSI-RS-ResourceSets)) OF NZP-CSI-RS-ResourceSet
+ OPTIONAL, -- Need N
+ nzp-CSI-RS-ResourceSetToReleaseList SEQUENCE (SIZE (1..maxNrofNZP-CSI-RS-ResourceSets)) OF NZP-CSI-RS-ResourceSetId
+ OPTIONAL, -- Need N
+ csi-IM-ResourceToAddModList SEQUENCE (SIZE (1..maxNrofCSI-IM-Resources)) OF CSI-IM-Resource OPTIONAL, -- Need N
+ csi-IM-ResourceToReleaseList SEQUENCE (SIZE (1..maxNrofCSI-IM-Resources)) OF CSI-IM-ResourceId OPTIONAL, -- Need N
+ csi-IM-ResourceSetToAddModList SEQUENCE (SIZE (1..maxNrofCSI-IM-ResourceSets)) OF CSI-IM-ResourceSet OPTIONAL, -- Need N
+ csi-IM-ResourceSetToReleaseList SEQUENCE (SIZE (1..maxNrofCSI-IM-ResourceSets)) OF CSI-IM-ResourceSetId OPTIONAL, -- Need N
+ csi-SSB-ResourceSetToAddModList SEQUENCE (SIZE (1..maxNrofCSI-SSB-ResourceSets)) OF CSI-SSB-ResourceSet OPTIONAL, -- Need N
+ csi-SSB-ResourceSetToReleaseList SEQUENCE (SIZE (1..maxNrofCSI-SSB-ResourceSets)) OF CSI-SSB-ResourceSetId OPTIONAL, -- Need N
+ csi-ResourceConfigToAddModList SEQUENCE (SIZE (1..maxNrofCSI-ResourceConfigurations)) OF CSI-ResourceConfig
+ OPTIONAL, -- Need N
+ csi-ResourceConfigToReleaseList SEQUENCE (SIZE (1..maxNrofCSI-ResourceConfigurations)) OF CSI-ResourceConfigId
+ OPTIONAL, -- Need N
+ csi-ReportConfigToAddModList SEQUENCE (SIZE (1..maxNrofCSI-ReportConfigurations)) OF CSI-ReportConfig OPTIONAL, -- Need N
+ csi-ReportConfigToReleaseList SEQUENCE (SIZE (1..maxNrofCSI-ReportConfigurations)) OF CSI-ReportConfigId
+ OPTIONAL, -- Need N
+ reportTriggerSize INTEGER (0..6) OPTIONAL, -- Need M
+ aperiodicTriggerStateList SetupRelease { CSI-AperiodicTriggerStateList } OPTIONAL, -- Need M
+ semiPersistentOnPUSCH-TriggerStateList SetupRelease { CSI-SemiPersistentOnPUSCH-TriggerStateList } OPTIONAL, -- Need M
+ ...,
+ [[
+ reportTriggerSizeDCI-0-2-r16 INTEGER (0..6) OPTIONAL -- Need R
+ ]],
+ [[
+ sCellActivationRS-ConfigToAddModList-r17 SEQUENCE (SIZE (1..maxNrofSCellActRS-r17)) OF SCellActivationRS-Config-r17 OPTIONAL, -- Need N
+ sCellActivationRS-ConfigToReleaseList-r17 SEQUENCE (SIZE (1..maxNrofSCellActRS-r17)) OF SCellActivationRS-ConfigId-r17 OPTIONAL -- Need N
+ ]]
+}
+
+-- TAG-CSI-MEASCONFIG-STOP
+-- TAG-CSI-REPORTCONFIG-START
+
+CSI-ReportConfig ::= SEQUENCE {
+ reportConfigId CSI-ReportConfigId,
+ carrier ServCellIndex OPTIONAL, -- Need S
+ resourcesForChannelMeasurement CSI-ResourceConfigId,
+ csi-IM-ResourcesForInterference CSI-ResourceConfigId OPTIONAL, -- Need R
+ nzp-CSI-RS-ResourcesForInterference CSI-ResourceConfigId OPTIONAL, -- Need R
+ reportConfigType CHOICE {
+ periodic SEQUENCE {
+ reportSlotConfig CSI-ReportPeriodicityAndOffset,
+ pucch-CSI-ResourceList SEQUENCE (SIZE (1..maxNrofBWPs)) OF PUCCH-CSI-Resource
+ },
+ semiPersistentOnPUCCH SEQUENCE {
+ reportSlotConfig CSI-ReportPeriodicityAndOffset,
+ pucch-CSI-ResourceList SEQUENCE (SIZE (1..maxNrofBWPs)) OF PUCCH-CSI-Resource
+ },
+ semiPersistentOnPUSCH SEQUENCE {
+ reportSlotConfig ENUMERATED {sl5, sl10, sl20, sl40, sl80, sl160, sl320},
+ reportSlotOffsetList SEQUENCE (SIZE (1.. maxNrofUL-Allocations)) OF INTEGER(0..32),
+ p0alpha P0-PUSCH-AlphaSetId
+ },
+ aperiodic SEQUENCE {
+ reportSlotOffsetList SEQUENCE (SIZE (1..maxNrofUL-Allocations)) OF INTEGER(0..32)
+ }
+ },
+ reportQuantity CHOICE {
+ none NULL,
+ cri-RI-PMI-CQI NULL,
+ cri-RI-i1 NULL,
+ cri-RI-i1-CQI SEQUENCE {
+ pdsch-BundleSizeForCSI ENUMERATED {n2, n4} OPTIONAL -- Need S
+ },
+ cri-RI-CQI NULL,
+ cri-RSRP NULL,
+ ssb-Index-RSRP NULL,
+ cri-RI-LI-PMI-CQI NULL
+ },
+ reportFreqConfiguration SEQUENCE {
+ cqi-FormatIndicator ENUMERATED { widebandCQI, subbandCQI } OPTIONAL, -- Need R
+ pmi-FormatIndicator ENUMERATED { widebandPMI, subbandPMI } OPTIONAL, -- Need R
+ csi-ReportingBand CHOICE {
+ subbands3 BIT STRING(SIZE(3)),
+ subbands4 BIT STRING(SIZE(4)),
+ subbands5 BIT STRING(SIZE(5)),
+ subbands6 BIT STRING(SIZE(6)),
+ subbands7 BIT STRING(SIZE(7)),
+ subbands8 BIT STRING(SIZE(8)),
+ subbands9 BIT STRING(SIZE(9)),
+ subbands10 BIT STRING(SIZE(10)),
+ subbands11 BIT STRING(SIZE(11)),
+ subbands12 BIT STRING(SIZE(12)),
+ subbands13 BIT STRING(SIZE(13)),
+ subbands14 BIT STRING(SIZE(14)),
+ subbands15 BIT STRING(SIZE(15)),
+ subbands16 BIT STRING(SIZE(16)),
+ subbands17 BIT STRING(SIZE(17)),
+ subbands18 BIT STRING(SIZE(18)),
+ ...,
+ subbands19-v1530 BIT STRING(SIZE(19))
+ } OPTIONAL -- Need S
+
+ } OPTIONAL, -- Need R
+ timeRestrictionForChannelMeasurements ENUMERATED {configured, notConfigured},
+ timeRestrictionForInterferenceMeasurements ENUMERATED {configured, notConfigured},
+ codebookConfig CodebookConfig OPTIONAL, -- Need R
+ dummy ENUMERATED {n1, n2} OPTIONAL, -- Need R
+ groupBasedBeamReporting CHOICE {
+ enabled NULL,
+ disabled SEQUENCE {
+ nrofReportedRS ENUMERATED {n1, n2, n3, n4} OPTIONAL -- Need S
+ }
+ },
+ cqi-Table ENUMERATED {table1, table2, table3, table4-r17} OPTIONAL, -- Need R
+ subbandSize ENUMERATED {value1, value2},
+ non-PMI-PortIndication SEQUENCE (SIZE (1..maxNrofNZP-CSI-RS-ResourcesPerConfig)) OF PortIndexFor8Ranks OPTIONAL, -- Need R
+ ...,
+ [[
+ semiPersistentOnPUSCH-v1530 SEQUENCE {
+ reportSlotConfig-v1530 ENUMERATED {sl4, sl8, sl16}
+ } OPTIONAL -- Need R
+ ]],
+ [[
+ semiPersistentOnPUSCH-v1610 SEQUENCE {
+ reportSlotOffsetListDCI-0-2-r16 SEQUENCE (SIZE (1.. maxNrofUL-Allocations-r16)) OF INTEGER(0..32) OPTIONAL, -- Need R
+ reportSlotOffsetListDCI-0-1-r16 SEQUENCE (SIZE (1.. maxNrofUL-Allocations-r16)) OF INTEGER(0..32) OPTIONAL -- Need R
+ } OPTIONAL, -- Need R
+ aperiodic-v1610 SEQUENCE {
+ reportSlotOffsetListDCI-0-2-r16 SEQUENCE (SIZE (1.. maxNrofUL-Allocations-r16)) OF INTEGER(0..32) OPTIONAL, -- Need R
+ reportSlotOffsetListDCI-0-1-r16 SEQUENCE (SIZE (1.. maxNrofUL-Allocations-r16)) OF INTEGER(0..32) OPTIONAL -- Need R
+ } OPTIONAL, -- Need R
+ reportQuantity-r16 CHOICE {
+ cri-SINR-r16 NULL,
+ ssb-Index-SINR-r16 NULL
+ } OPTIONAL, -- Need R
+ codebookConfig-r16 CodebookConfig-r16 OPTIONAL -- Need R
+ ]],
+ [[
+ cqi-BitsPerSubband-r17 ENUMERATED {bits4} OPTIONAL, -- Need R
+ groupBasedBeamReporting-v1710 SEQUENCE {
+ nrofReportedGroups-r17 ENUMERATED {n1, n2, n3, n4}
+ } OPTIONAL, -- Need R
+ codebookConfig-r17 CodebookConfig-r17 OPTIONAL, -- Need R
+ sharedCMR-r17 ENUMERATED {enable} OPTIONAL, -- Need R
+ csi-ReportMode-r17 ENUMERATED {mode1, mode2} OPTIONAL, -- Need R
+ numberOfSingleTRP-CSI-Mode1-r17 ENUMERATED {n0, n1, n2} OPTIONAL, -- Need R
+ reportQuantity-r17 CHOICE {
+ cri-RSRP-Index-r17 NULL,
+ ssb-Index-RSRP-Index-r17 NULL,
+ cri-SINR-Index-r17 NULL,
+ ssb-Index-SINR-Index-r17 NULL
+ } OPTIONAL -- Need R
+ ]],
+ [[
+ semiPersistentOnPUSCH-v1720 SEQUENCE {
+ reportSlotOffsetList-r17 SEQUENCE (SIZE (1.. maxNrofUL-Allocations-r16)) OF INTEGER(0..128) OPTIONAL, -- Need R
+ reportSlotOffsetListDCI-0-2-r17 SEQUENCE (SIZE (1.. maxNrofUL-Allocations-r16)) OF INTEGER(0..128) OPTIONAL, -- Need R
+ reportSlotOffsetListDCI-0-1-r17 SEQUENCE (SIZE (1.. maxNrofUL-Allocations-r16)) OF INTEGER(0..128) OPTIONAL -- Need R
+ } OPTIONAL, -- Need R
+ aperiodic-v1720 SEQUENCE {
+ reportSlotOffsetList-r17 SEQUENCE (SIZE (1.. maxNrofUL-Allocations-r16)) OF INTEGER(0..128) OPTIONAL, -- Need R
+ reportSlotOffsetListDCI-0-2-r17 SEQUENCE (SIZE (1.. maxNrofUL-Allocations-r16)) OF INTEGER(0..128) OPTIONAL, -- Need R
+ reportSlotOffsetListDCI-0-1-r17 SEQUENCE (SIZE (1.. maxNrofUL-Allocations-r16)) OF INTEGER(0..128) OPTIONAL -- Need R
+ } OPTIONAL -- Need R
+ ]],
+ [[
+ codebookConfig-v1730 CodebookConfig-v1730 OPTIONAL -- Need R
+ ]]
+}
+
+CSI-ReportPeriodicityAndOffset ::= CHOICE {
+ slots4 INTEGER(0..3),
+ slots5 INTEGER(0..4),
+ slots8 INTEGER(0..7),
+ slots10 INTEGER(0..9),
+ slots16 INTEGER(0..15),
+ slots20 INTEGER(0..19),
+ slots40 INTEGER(0..39),
+ slots80 INTEGER(0..79),
+ slots160 INTEGER(0..159),
+ slots320 INTEGER(0..319)
+}
+
+PUCCH-CSI-Resource ::= SEQUENCE {
+ uplinkBandwidthPartId BWP-Id,
+ pucch-Resource PUCCH-ResourceId
+}
+
+PortIndexFor8Ranks ::= CHOICE {
+ portIndex8 SEQUENCE{
+ rank1-8 PortIndex8 OPTIONAL, -- Need R
+ rank2-8 SEQUENCE(SIZE(2)) OF PortIndex8 OPTIONAL, -- Need R
+ rank3-8 SEQUENCE(SIZE(3)) OF PortIndex8 OPTIONAL, -- Need R
+ rank4-8 SEQUENCE(SIZE(4)) OF PortIndex8 OPTIONAL, -- Need R
+ rank5-8 SEQUENCE(SIZE(5)) OF PortIndex8 OPTIONAL, -- Need R
+ rank6-8 SEQUENCE(SIZE(6)) OF PortIndex8 OPTIONAL, -- Need R
+ rank7-8 SEQUENCE(SIZE(7)) OF PortIndex8 OPTIONAL, -- Need R
+ rank8-8 SEQUENCE(SIZE(8)) OF PortIndex8 OPTIONAL -- Need R
+ },
+ portIndex4 SEQUENCE{
+ rank1-4 PortIndex4 OPTIONAL, -- Need R
+ rank2-4 SEQUENCE(SIZE(2)) OF PortIndex4 OPTIONAL, -- Need R
+ rank3-4 SEQUENCE(SIZE(3)) OF PortIndex4 OPTIONAL, -- Need R
+ rank4-4 SEQUENCE(SIZE(4)) OF PortIndex4 OPTIONAL -- Need R
+ },
+ portIndex2 SEQUENCE{
+ rank1-2 PortIndex2 OPTIONAL, -- Need R
+ rank2-2 SEQUENCE(SIZE(2)) OF PortIndex2 OPTIONAL -- Need R
+ },
+ portIndex1 NULL
+}
+
+PortIndex8::= INTEGER (0..7)
+PortIndex4::= INTEGER (0..3)
+PortIndex2::= INTEGER (0..1)
+
+-- TAG-CSI-REPORTCONFIG-STOP
+-- TAG-CSI-REPORTCONFIGID-START
+
+CSI-ReportConfigId ::= INTEGER (0..maxNrofCSI-ReportConfigurations-1)
+
+-- TAG-CSI-REPORTCONFIGID-STOP
+-- TAG-CSI-RESOURCECONFIG-START
+
+CSI-ResourceConfig ::= SEQUENCE {
+ csi-ResourceConfigId CSI-ResourceConfigId,
+ csi-RS-ResourceSetList CHOICE {
+ nzp-CSI-RS-SSB SEQUENCE {
+ nzp-CSI-RS-ResourceSetList SEQUENCE (SIZE (1..maxNrofNZP-CSI-RS-ResourceSetsPerConfig)) OF NZP-CSI-RS-ResourceSetId
+ OPTIONAL, -- Need R
+ csi-SSB-ResourceSetList SEQUENCE (SIZE (1..maxNrofCSI-SSB-ResourceSetsPerConfig)) OF CSI-SSB-ResourceSetId OPTIONAL -- Need R
+ },
+ csi-IM-ResourceSetList SEQUENCE (SIZE (1..maxNrofCSI-IM-ResourceSetsPerConfig)) OF CSI-IM-ResourceSetId
+ },
+
+ bwp-Id BWP-Id,
+ resourceType ENUMERATED { aperiodic, semiPersistent, periodic },
+ ...,
+ [[
+ csi-SSB-ResourceSetListExt-r17 CSI-SSB-ResourceSetId OPTIONAL -- Need R
+ ]]
+}
+
+-- TAG-CSI-RESOURCECONFIG-STOP
+-- TAG-CSI-RESOURCECONFIGID-START
+
+CSI-ResourceConfigId ::= INTEGER (0..maxNrofCSI-ResourceConfigurations-1)
+
+-- TAG-CSI-RESOURCECONFIGID-STOP
+-- TAG-CSI-RESOURCEPERIODICITYANDOFFSET-START
+
+CSI-ResourcePeriodicityAndOffset ::= CHOICE {
+ slots4 INTEGER (0..3),
+ slots5 INTEGER (0..4),
+ slots8 INTEGER (0..7),
+ slots10 INTEGER (0..9),
+ slots16 INTEGER (0..15),
+ slots20 INTEGER (0..19),
+ slots32 INTEGER (0..31),
+ slots40 INTEGER (0..39),
+ slots64 INTEGER (0..63),
+ slots80 INTEGER (0..79),
+ slots160 INTEGER (0..159),
+ slots320 INTEGER (0..319),
+ slots640 INTEGER (0..639)
+}
+
+-- TAG-CSI-RESOURCEPERIODICITYANDOFFSET-STOP
+-- TAG-CSI-RS-RESOURCECONFIGMOBILITY-START
+
+CSI-RS-ResourceConfigMobility ::= SEQUENCE {
+ subcarrierSpacing SubcarrierSpacing,
+ csi-RS-CellList-Mobility SEQUENCE (SIZE (1..maxNrofCSI-RS-CellsRRM)) OF CSI-RS-CellMobility,
+ ...,
+ [[
+ refServCellIndex ServCellIndex OPTIONAL -- Need S
+ ]]
+
+
+}
+
+CSI-RS-CellMobility ::= SEQUENCE {
+ cellId PhysCellId,
+ csi-rs-MeasurementBW SEQUENCE {
+ nrofPRBs ENUMERATED { size24, size48, size96, size192, size264},
+ startPRB INTEGER(0..2169)
+ },
+ density ENUMERATED {d1,d3} OPTIONAL, -- Need R
+ csi-rs-ResourceList-Mobility SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesRRM)) OF CSI-RS-Resource-Mobility
+}
+
+CSI-RS-Resource-Mobility ::= SEQUENCE {
+ csi-RS-Index CSI-RS-Index,
+ slotConfig CHOICE {
+ ms4 INTEGER (0..31),
+ ms5 INTEGER (0..39),
+ ms10 INTEGER (0..79),
+ ms20 INTEGER (0..159),
+ ms40 INTEGER (0..319)
+ },
+ associatedSSB SEQUENCE {
+ ssb-Index SSB-Index,
+ isQuasiColocated BOOLEAN
+ } OPTIONAL, -- Need R
+ frequencyDomainAllocation CHOICE {
+ row1 BIT STRING (SIZE (4)),
+ row2 BIT STRING (SIZE (12))
+ },
+ firstOFDMSymbolInTimeDomain INTEGER (0..13),
+ sequenceGenerationConfig INTEGER (0..1023),
+ ...,
+ [[
+ slotConfig-r17 CHOICE {
+ ms4 INTEGER (0..255),
+ ms5 INTEGER (0..319),
+ ms10 INTEGER (0..639),
+ ms20 INTEGER (0..1279),
+ ms40 INTEGER (0..2559)
+ } OPTIONAL -- Need R
+ ]]
+}
+
+CSI-RS-Index ::= INTEGER (0..maxNrofCSI-RS-ResourcesRRM-1)
+
+-- TAG-CSI-RS-RESOURCECONFIGMOBILITY-STOP
+-- TAG-CSI-RS-RESOURCEMAPPING-START
+
+CSI-RS-ResourceMapping ::= SEQUENCE {
+ frequencyDomainAllocation CHOICE {
+ row1 BIT STRING (SIZE (4)),
+ row2 BIT STRING (SIZE (12)),
+ row4 BIT STRING (SIZE (3)),
+ other BIT STRING (SIZE (6))
+ },
+ nrofPorts ENUMERATED {p1,p2,p4,p8,p12,p16,p24,p32},
+ firstOFDMSymbolInTimeDomain INTEGER (0..13),
+ firstOFDMSymbolInTimeDomain2 INTEGER (2..12) OPTIONAL, -- Need R
+ cdm-Type ENUMERATED {noCDM, fd-CDM2, cdm4-FD2-TD2, cdm8-FD2-TD4},
+ density CHOICE {
+ dot5 ENUMERATED {evenPRBs, oddPRBs},
+ one NULL,
+ three NULL,
+ spare NULL
+ },
+ freqBand CSI-FrequencyOccupation,
+ ...
+}
+
+-- TAG-CSI-RS-RESOURCEMAPPING-STOP
+-- TAG-CSI-SEMIPERSISTENTONPUSCHTRIGGERSTATELIST-START
+
+CSI-SemiPersistentOnPUSCH-TriggerStateList ::= SEQUENCE(SIZE (1..maxNrOfSemiPersistentPUSCH-Triggers)) OF CSI-SemiPersistentOnPUSCH-TriggerState
+
+CSI-SemiPersistentOnPUSCH-TriggerState ::= SEQUENCE {
+ associatedReportConfigInfo CSI-ReportConfigId,
+ ...,
+ [[
+ sp-CSI-MultiplexingMode-r17 ENUMERATED {enabled} OPTIONAL -- Need R
+ ]]
+}
+
+-- TAG-CSI-SEMIPERSISTENTONPUSCHTRIGGERSTATELIST-STOP
+-- TAG-CSI-SSB-RESOURCESET-START
+
+CSI-SSB-ResourceSet ::= SEQUENCE {
+ csi-SSB-ResourceSetId CSI-SSB-ResourceSetId,
+ csi-SSB-ResourceList SEQUENCE (SIZE(1..maxNrofCSI-SSB-ResourcePerSet)) OF SSB-Index,
+ ...,
+ [[
+ servingAdditionalPCIList-r17 SEQUENCE (SIZE(1..maxNrofCSI-SSB-ResourcePerSet)) OF ServingAdditionalPCIIndex-r17 OPTIONAL -- Need R
+ ]]
+}
+
+ServingAdditionalPCIIndex-r17 ::= INTEGER(0..maxNrofAdditionalPCI-r17)
+
+-- TAG-CSI-SSB-RESOURCESET-STOP
+-- TAG-CSI-SSB-RESOURCESETID-START
+
+CSI-SSB-ResourceSetId ::= INTEGER (0..maxNrofCSI-SSB-ResourceSets-1)
+
+-- TAG-CSI-SSB-RESOURCESETID-STOP
+-- TAG-DEDICATED-NAS-MESSAGE-START
+
+DedicatedNAS-Message ::= OCTET STRING
+
+-- TAG-DEDICATED-NAS-MESSAGE-STOP
+-- TAG-DL-PPW-PRECONFIG-START
+
+DL-PPW-PreConfig-r17 ::= SEQUENCE {
+ dl-PPW-ID-r17 DL-PPW-ID-r17,
+ dl-PPW-PeriodicityAndStartSlot-r17 DL-PPW-PeriodicityAndStartSlot-r17,
+ length-r17 INTEGER (1..160),
+ type-r17 ENUMERATED {type1A, type1B, type2} OPTIONAL, -- Cond MultiType
+ priority-r17 ENUMERATED {st1, st2, st3} OPTIONAL -- Cond MultiState
+}
+
+DL-PPW-ID-r17 ::= INTEGER (0..maxNrofPPW-ID-1-r17)
+
+DL-PPW-PeriodicityAndStartSlot-r17 ::= CHOICE {
+ scs15 CHOICE {
+ n4 INTEGER (0..3),
+ n5 INTEGER (0..4),
+ n8 INTEGER (0..7),
+ n10 INTEGER (0..9),
+ n16 INTEGER (0..15),
+ n20 INTEGER (0..19),
+ n32 INTEGER (0..31),
+ n40 INTEGER (0..39),
+ n64 INTEGER (0..63),
+ n80 INTEGER (0..79),
+ n160 INTEGER (0..159),
+ n320 INTEGER (0..319),
+ n640 INTEGER (0..639),
+ n1280 INTEGER (0..1279),
+ n2560 INTEGER (0..2559),
+ n5120 INTEGER (0..5119),
+ n10240 INTEGER (0..10239),
+ ...
+ },
+ scs30 CHOICE {
+ n8 INTEGER (0..7),
+ n10 INTEGER (0..9),
+ n16 INTEGER (0..15),
+ n20 INTEGER (0..19),
+ n32 INTEGER (0..31),
+ n40 INTEGER (0..39),
+ n64 INTEGER (0..63),
+ n80 INTEGER (0..79),
+ n128 INTEGER (0..127),
+ n160 INTEGER (0..159),
+ n320 INTEGER (0..319),
+ n640 INTEGER (0..639),
+ n1280 INTEGER (0..1279),
+ n2560 INTEGER (0..2559),
+ n5120 INTEGER (0..5119),
+ n10240 INTEGER (0..10239),
+ n20480 INTEGER (0..20479),
+ ...
+ },
+ scs60 CHOICE {
+ n16 INTEGER (0..15),
+ n20 INTEGER (0..19),
+ n32 INTEGER (0..31),
+ n40 INTEGER (0..39),
+ n64 INTEGER (0..63),
+ n80 INTEGER (0..79),
+ n128 INTEGER (0..127),
+ n160 INTEGER (0..159),
+ n256 INTEGER (0..255),
+ n320 INTEGER (0..319),
+ n640 INTEGER (0..639),
+ n1280 INTEGER (0..1279),
+ n2560 INTEGER (0..2559),
+ n5120 INTEGER (0..5119),
+ n10240 INTEGER (0..10239),
+ n20480 INTEGER (0..20479),
+ n40960 INTEGER (0..40959),
+ ...
+ },
+ scs120 CHOICE {
+ n32 INTEGER (0..31),
+ n40 INTEGER (0..39),
+ n64 INTEGER (0..63),
+ n80 INTEGER (0..79),
+ n128 INTEGER (0..127),
+ n160 INTEGER (0..159),
+ n256 INTEGER (0..255),
+ n320 INTEGER (0..319),
+ n512 INTEGER (0..511),
+ n640 INTEGER (0..639),
+ n1280 INTEGER (0..1279),
+ n2560 INTEGER (0..2559),
+ n5120 INTEGER (0..5119),
+ n10240 INTEGER (0..10239),
+ n20480 INTEGER (0..20479),
+ n40960 INTEGER (0..40959),
+ n81920 INTEGER (0..81919),
+ ...
+ },
+ ...
+}
+
+-- TAG-DL-PPW-PRECONFIG-STOP
+-- TAG-DMRS-BUNDLINGPUCCH-CONFIG-START
+
+DMRS-BundlingPUCCH-Config-r17 ::= SEQUENCE {
+ pucch-DMRS-Bundling-r17 ENUMERATED {enabled} OPTIONAL, -- Need R
+ pucch-TimeDomainWindowLength-r17 INTEGER (2..8) OPTIONAL, -- Need S
+ pucch-WindowRestart-r17 ENUMERATED {enabled} OPTIONAL, -- Need R
+ pucch-FrequencyHoppingInterval-r17 ENUMERATED {s2, s4, s5, s10} OPTIONAL, -- Need S
+ ...
+}
+
+-- TAG-DMRS-BUNDLINGPUCCH-CONFIG-STOP
+-- TAG-DMRS-BUNDLINGPUSCH-CONFIG-START
+
+DMRS-BundlingPUSCH-Config-r17 ::= SEQUENCE {
+ pusch-DMRS-Bundling-r17 ENUMERATED {enabled} OPTIONAL, -- Need R
+ pusch-TimeDomainWindowLength-r17 INTEGER (2..32) OPTIONAL, -- Need S
+ pusch-WindowRestart-r17 ENUMERATED {enabled} OPTIONAL, -- Need R
+ pusch-FrequencyHoppingInterval-r17 ENUMERATED {s2, s4, s5, s6, s8, s10, s12, s14, s16, s20} OPTIONAL, -- Need S
+ ...
+}
+
+-- TAG-DMRS-BUNDLINGPUSCH-CONFIG-STOP
+-- TAG-DMRS-DOWNLINKCONFIG-START
+
+DMRS-DownlinkConfig ::= SEQUENCE {
+ dmrs-Type ENUMERATED {type2} OPTIONAL, -- Need S
+ dmrs-AdditionalPosition ENUMERATED {pos0, pos1, pos3} OPTIONAL, -- Need S
+ maxLength ENUMERATED {len2} OPTIONAL, -- Need S
+ scramblingID0 INTEGER (0..65535) OPTIONAL, -- Need S
+ scramblingID1 INTEGER (0..65535) OPTIONAL, -- Need S
+ phaseTrackingRS SetupRelease { PTRS-DownlinkConfig } OPTIONAL, -- Need M
+ ...,
+ [[
+ dmrs-Downlink-r16 ENUMERATED {enabled} OPTIONAL -- Need R
+ ]]
+
+}
+
+-- TAG-DMRS-DOWNLINKCONFIG-STOP
+-- TAG-DMRS-UPLINKCONFIG-START
+
+DMRS-UplinkConfig ::= SEQUENCE {
+ dmrs-Type ENUMERATED {type2} OPTIONAL, -- Need S
+ dmrs-AdditionalPosition ENUMERATED {pos0, pos1, pos3} OPTIONAL, -- Need S
+ phaseTrackingRS SetupRelease { PTRS-UplinkConfig } OPTIONAL, -- Need M
+ maxLength ENUMERATED {len2} OPTIONAL, -- Need S
+ transformPrecodingDisabled SEQUENCE {
+ scramblingID0 INTEGER (0..65535) OPTIONAL, -- Need S
+ scramblingID1 INTEGER (0..65535) OPTIONAL, -- Need S
+ ...,
+ [[
+ dmrs-Uplink-r16 ENUMERATED {enabled} OPTIONAL -- Need R
+ ]]
+ } OPTIONAL, -- Need R
+ transformPrecodingEnabled SEQUENCE {
+ nPUSCH-Identity INTEGER(0..1007) OPTIONAL, -- Need S
+ sequenceGroupHopping ENUMERATED {disabled} OPTIONAL, -- Need S
+ sequenceHopping ENUMERATED {enabled} OPTIONAL, -- Need S
+ ...,
+ [[
+ dmrs-UplinkTransformPrecoding-r16 SetupRelease {DMRS-UplinkTransformPrecoding-r16} OPTIONAL -- Need M
+ ]]
+ } OPTIONAL, -- Need R
+ ...
+}
+
+DMRS-UplinkTransformPrecoding-r16 ::= SEQUENCE {
+ pi2BPSK-ScramblingID0 INTEGER(0..65535) OPTIONAL, -- Need S
+ pi2BPSK-ScramblingID1 INTEGER(0..65535) OPTIONAL -- Need S
+}
+
+-- TAG-DMRS-UPLINKCONFIG-STOP
+-- TAG-DOWNLINKCONFIGCOMMON-START
+
+DownlinkConfigCommon ::= SEQUENCE {
+ frequencyInfoDL FrequencyInfoDL OPTIONAL, -- Cond InterFreqHOAndServCellAdd
+ initialDownlinkBWP BWP-DownlinkCommon OPTIONAL, -- Cond ServCellAdd
+ ...,
+ [[
+ initialDownlinkBWP-RedCap-r17 BWP-DownlinkCommon OPTIONAL -- Need R
+
+ ]]
+}
+
+-- TAG-DOWNLINKCONFIGCOMMON-STOP
+-- TAG-DOWNLINKCONFIGCOMMONSIB-START
+
+DownlinkConfigCommonSIB ::= SEQUENCE {
+ frequencyInfoDL FrequencyInfoDL-SIB,
+ initialDownlinkBWP BWP-DownlinkCommon,
+ bcch-Config BCCH-Config,
+ pcch-Config PCCH-Config,
+ ...,
+ [[
+ pei-Config-r17 PEI-Config-r17 OPTIONAL, -- Need R
+ initialDownlinkBWP-RedCap-r17 BWP-DownlinkCommon OPTIONAL -- Need R
+ ]]
+}
+
+
+BCCH-Config ::= SEQUENCE {
+ modificationPeriodCoeff ENUMERATED {n2, n4, n8, n16},
+ ...
+}
+
+
+PCCH-Config ::= SEQUENCE {
+ defaultPagingCycle PagingCycle,
+ nAndPagingFrameOffset CHOICE {
+ oneT NULL,
+ halfT INTEGER (0..1),
+ quarterT INTEGER (0..3),
+ oneEighthT INTEGER (0..7),
+ oneSixteenthT INTEGER (0..15)
+ },
+ ns ENUMERATED {four, two, one},
+ firstPDCCH-MonitoringOccasionOfPO CHOICE {
+ sCS15KHZoneT SEQUENCE (SIZE (1..maxPO-perPF)) OF INTEGER (0..139),
+ sCS30KHZoneT-SCS15KHZhalfT SEQUENCE (SIZE (1..maxPO-perPF)) OF INTEGER (0..279),
+ sCS60KHZoneT-SCS30KHZhalfT-SCS15KHZquarterT SEQUENCE (SIZE (1..maxPO-perPF)) OF INTEGER (0..559),
+ sCS120KHZoneT-SCS60KHZhalfT-SCS30KHZquarterT-SCS15KHZoneEighthT SEQUENCE (SIZE (1..maxPO-perPF)) OF INTEGER (0..1119),
+ sCS120KHZhalfT-SCS60KHZquarterT-SCS30KHZoneEighthT-SCS15KHZoneSixteenthT SEQUENCE (SIZE (1..maxPO-perPF)) OF INTEGER (0..2239),
+ sCS480KHZoneT-SCS120KHZquarterT-SCS60KHZoneEighthT-SCS30KHZoneSixteenthT SEQUENCE (SIZE (1..maxPO-perPF)) OF INTEGER (0..4479),
+ sCS480KHZhalfT-SCS120KHZoneEighthT-SCS60KHZoneSixteenthT SEQUENCE (SIZE (1..maxPO-perPF)) OF INTEGER (0..8959),
+ sCS480KHZquarterT-SCS120KHZoneSixteenthT SEQUENCE (SIZE (1..maxPO-perPF)) OF INTEGER (0..17919)
+ } OPTIONAL, -- Need R
+ ...,
+ [[
+ nrofPDCCH-MonitoringOccasionPerSSB-InPO-r16 INTEGER (2..4) OPTIONAL -- Cond SharedSpectrum2
+ ]],
+ [[
+ ranPagingInIdlePO-r17 ENUMERATED {true} OPTIONAL, -- Need R
+
+ firstPDCCH-MonitoringOccasionOfPO-v1710 CHOICE {
+ sCS480KHZoneEighthT SEQUENCE (SIZE (1..maxPO-perPF)) OF INTEGER (0..35839),
+ sCS480KHZoneSixteenthT SEQUENCE (SIZE (1..maxPO-perPF)) OF INTEGER (0..71679)
+} OPTIONAL -- Need R
+ ]]
+}
+
+PEI-Config-r17 ::= SEQUENCE {
+ po-NumPerPEI-r17 ENUMERATED {po1, po2, po4, po8},
+ payloadSizeDCI-2-7-r17 INTEGER (1..maxDCI-2-7-Size-r17),
+ pei-FrameOffset-r17 INTEGER (0..16),
+ subgroupConfig-r17 SubgroupConfig-r17,
+ lastUsedCellOnly-r17 ENUMERATED {true} OPTIONAL, -- Need R
+ ...
+}
+
+SubgroupConfig-r17 ::= SEQUENCE {
+ subgroupsNumPerPO-r17 INTEGER (1.. maxNrofPagingSubgroups-r17),
+ subgroupsNumForUEID-r17 INTEGER (1.. maxNrofPagingSubgroups-r17) OPTIONAL, -- Need S
+ ...
+}
+
+-- TAG-DOWNLINKCONFIGCOMMONSIB-STOP
+-- TAG-DOWNLINKPREEMPTION-START
+
+DownlinkPreemption ::= SEQUENCE {
+ int-RNTI RNTI-Value,
+ timeFrequencySet ENUMERATED {set0, set1},
+ dci-PayloadSize INTEGER (0..maxINT-DCI-PayloadSize),
+ int-ConfigurationPerServingCell SEQUENCE (SIZE (1..maxNrofServingCells)) OF INT-ConfigurationPerServingCell,
+ ...
+}
+
+INT-ConfigurationPerServingCell ::= SEQUENCE {
+ servingCellId ServCellIndex,
+ positionInDCI INTEGER (0..maxINT-DCI-PayloadSize-1)
+}
+
+-- TAG-DOWNLINKPREEMPTION-STOP
+-- TAG-DRB-IDENTITY-START
+
+DRB-Identity ::= INTEGER (1..32)
+
+-- TAG-DRB-IDENTITY-STOP
+-- TAG-DRX-CONFIG-START
+
+DRX-Config ::= SEQUENCE {
+ drx-onDurationTimer CHOICE {
+ subMilliSeconds INTEGER (1..31),
+ milliSeconds ENUMERATED {
+ ms1, ms2, ms3, ms4, ms5, ms6, ms8, ms10, ms20, ms30, ms40, ms50, ms60,
+ ms80, ms100, ms200, ms300, ms400, ms500, ms600, ms800, ms1000, ms1200,
+ ms1600, spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1 }
+ },
+ drx-InactivityTimer ENUMERATED {
+ ms0, ms1, ms2, ms3, ms4, ms5, ms6, ms8, ms10, ms20, ms30, ms40, ms50, ms60, ms80,
+ ms100, ms200, ms300, ms500, ms750, ms1280, ms1920, ms2560, spare9, spare8,
+ spare7, spare6, spare5, spare4, spare3, spare2, spare1},
+ drx-HARQ-RTT-TimerDL INTEGER (0..56),
+ drx-HARQ-RTT-TimerUL INTEGER (0..56),
+ drx-RetransmissionTimerDL ENUMERATED {
+ sl0, sl1, sl2, sl4, sl6, sl8, sl16, sl24, sl33, sl40, sl64, sl80, sl96, sl112, sl128,
+ sl160, sl320, spare15, spare14, spare13, spare12, spare11, spare10, spare9,
+ spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1},
+ drx-RetransmissionTimerUL ENUMERATED {
+ sl0, sl1, sl2, sl4, sl6, sl8, sl16, sl24, sl33, sl40, sl64, sl80, sl96, sl112, sl128,
+ sl160, sl320, spare15, spare14, spare13, spare12, spare11, spare10, spare9,
+ spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1 },
+ drx-LongCycleStartOffset CHOICE {
+ ms10 INTEGER(0..9),
+ ms20 INTEGER(0..19),
+ ms32 INTEGER(0..31),
+ ms40 INTEGER(0..39),
+ ms60 INTEGER(0..59),
+ ms64 INTEGER(0..63),
+ ms70 INTEGER(0..69),
+ ms80 INTEGER(0..79),
+ ms128 INTEGER(0..127),
+ ms160 INTEGER(0..159),
+ ms256 INTEGER(0..255),
+ ms320 INTEGER(0..319),
+ ms512 INTEGER(0..511),
+ ms640 INTEGER(0..639),
+ ms1024 INTEGER(0..1023),
+ ms1280 INTEGER(0..1279),
+ ms2048 INTEGER(0..2047),
+ ms2560 INTEGER(0..2559),
+ ms5120 INTEGER(0..5119),
+ ms10240 INTEGER(0..10239)
+ },
+ shortDRX SEQUENCE {
+ drx-ShortCycle ENUMERATED {
+ ms2, ms3, ms4, ms5, ms6, ms7, ms8, ms10, ms14, ms16, ms20, ms30, ms32,
+ ms35, ms40, ms64, ms80, ms128, ms160, ms256, ms320, ms512, ms640, spare9,
+ spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1 },
+ drx-ShortCycleTimer INTEGER (1..16)
+ } OPTIONAL, -- Need R
+ drx-SlotOffset INTEGER (0..31)
+}
+
+DRX-ConfigExt-v1700 ::= SEQUENCE {
+ drx-HARQ-RTT-TimerDL-r17 INTEGER (0..448),
+ drx-HARQ-RTT-TimerUL-r17 INTEGER (0..448)
+}
+
+-- TAG-DRX-CONFIG-STOP
+-- TAG-DRX-CONFIGSECONDARYGROUP-START
+
+DRX-ConfigSecondaryGroup-r16 ::= SEQUENCE {
+ drx-onDurationTimer-r16 CHOICE {
+ subMilliSeconds INTEGER (1..31),
+ milliSeconds ENUMERATED {
+ ms1, ms2, ms3, ms4, ms5, ms6, ms8, ms10, ms20, ms30, ms40, ms50, ms60,
+ ms80, ms100, ms200, ms300, ms400, ms500, ms600, ms800, ms1000, ms1200,
+ ms1600, spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1 }
+ },
+ drx-InactivityTimer-r16 ENUMERATED {
+ ms0, ms1, ms2, ms3, ms4, ms5, ms6, ms8, ms10, ms20, ms30, ms40, ms50, ms60, ms80,
+ ms100, ms200, ms300, ms500, ms750, ms1280, ms1920, ms2560, spare9, spare8,
+ spare7, spare6, spare5, spare4, spare3, spare2, spare1}
+}
+
+-- TAG-DRX-CONFIGSECONDARYGROUP-STOP
+-- TAG-DRX-CONFIGSL-START
+
+DRX-ConfigSL-r17 ::= SEQUENCE {
+ drx-HARQ-RTT-TimerSL-r17 INTEGER (0..56),
+ drx-RetransmissionTimerSL-r17 ENUMERATED {sl0, sl1, sl2, sl4, sl6, sl8, sl16, sl24, sl33, sl40, sl64, sl80, sl96, sl112, sl128,
+ sl160, sl320, spare15, spare14, spare13, spare12, spare11, spare10, spare9, spare8,
+ spare7, spare6, spare5, spare4, spare3, spare2, spare1}
+}
+
+-- TAG-DRX-CONFIGSL-STOP
+-- TAG-EPHEMERISINFO-START
+
+EphemerisInfo-r17 ::= CHOICE {
+ positionVelocity-r17 PositionVelocity-r17,
+ orbital-r17 Orbital-r17
+}
+
+PositionVelocity-r17 ::= SEQUENCE {
+ positionX-r17 PositionStateVector-r17,
+ positionY-r17 PositionStateVector-r17,
+ positionZ-r17 PositionStateVector-r17,
+ velocityVX-r17 VelocityStateVector-r17,
+ velocityVY-r17 VelocityStateVector-r17,
+ velocityVZ-r17 VelocityStateVector-r17
+}
+
+Orbital-r17 ::= SEQUENCE {
+ semiMajorAxis-r17 INTEGER (0..8589934591),
+ eccentricity-r17 INTEGER (0..1048575),
+ periapsis-r17 INTEGER (0..268435455),
+ longitude-r17 INTEGER (0..268435455),
+ inclination-r17 INTEGER (-67108864..67108863),
+ meanAnomaly-r17 INTEGER (0..268435455)
+}
+
+PositionStateVector-r17 ::= INTEGER (-33554432..33554431)
+
+VelocityStateVector-r17 ::= INTEGER (-131072..131071)
+
+-- TAG-EPHEMERISINFO-STOP
+-- TAG-FEATURECOMBINATION-START
+
+FeatureCombination-r17 ::= SEQUENCE {
+ redCap-r17 ENUMERATED {true} OPTIONAL, -- Need R
+ smallData-r17 ENUMERATED {true} OPTIONAL, -- Need R
+ nsag-r17 NSAG-List-r17 OPTIONAL, -- Need R
+ msg3-Repetitions-r17 ENUMERATED {true} OPTIONAL, -- Need R
+ spare4 ENUMERATED {true} OPTIONAL, -- Need R
+ spare3 ENUMERATED {true} OPTIONAL, -- Need R
+ spare2 ENUMERATED {true} OPTIONAL, -- Need R
+ spare1 ENUMERATED {true} OPTIONAL -- Need R
+}
+
+NSAG-List-r17 ::= SEQUENCE (SIZE (1.. maxSliceInfo-r17)) OF NSAG-ID-r17
+
+-- TAG-FEATURECOMBINATION-STOP
+-- TAG-FEATURECOMBINATIONPREAMBLES-START
+
+FeatureCombinationPreambles-r17 ::= SEQUENCE {
+ featureCombination-r17 FeatureCombination-r17,
+ startPreambleForThisPartition-r17 INTEGER (0..63),
+ numberOfPreamblesPerSSB-ForThisPartition-r17 INTEGER (1..64),
+ ssb-SharedRO-MaskIndex-r17 INTEGER (1..15) OPTIONAL, -- Need S
+ groupBconfigured-r17 SEQUENCE {
+ ra-SizeGroupA-r17 ENUMERATED {b56, b144, b208, b256, b282, b480, b640,
+ b800, b1000, b72, spare6, spare5,spare4, spare3, spare2, spare1},
+ messagePowerOffsetGroupB-r17 ENUMERATED { minusinfinity, dB0, dB5, dB8, dB10, dB12, dB15, dB18},
+ numberOfRA-PreamblesGroupA-r17 INTEGER (1..64)
+ } OPTIONAL, -- Need R
+ separateMsgA-PUSCH-Config-r17 MsgA-PUSCH-Config-r16 OPTIONAL, -- Cond MsgAConfigCommon
+ msgA-RSRP-Threshold-r17 RSRP-Range OPTIONAL, -- Need R
+ rsrp-ThresholdSSB-r17 RSRP-Range OPTIONAL, -- Need R
+ deltaPreamble-r17 INTEGER (-1..6) OPTIONAL, -- Need R
+ ...
+}
+
+-- TAG-FEATURECOMBINATIONPREAMBLES-STOP
+-- TAG-FILTERCOEFFICIENT-START
+
+FilterCoefficient ::= ENUMERATED { fc0, fc1, fc2, fc3, fc4, fc5, fc6, fc7, fc8, fc9, fc11, fc13, fc15, fc17, fc19, spare1, ...}
+
+-- TAG-FILTERCOEFFICIENT-STOP
+-- TAG-FREQBANDINDICATORNR-START
+
+FreqBandIndicatorNR ::= INTEGER (1..1024)
+
+-- TAG-FREQBANDINDICATORNR-STOP
+-- TAG-FREQPRIORITYLISTDEDICATEDSLICING-START
+
+FreqPriorityListDedicatedSlicing-r17 ::= SEQUENCE (SIZE (1.. maxFreq)) OF FreqPriorityDedicatedSlicing-r17
+
+FreqPriorityDedicatedSlicing-r17 ::= SEQUENCE {
+ dl-ExplicitCarrierFreq-r17 ARFCN-ValueNR,
+ sliceInfoListDedicated-r17 SliceInfoListDedicated-r17 OPTIONAL -- Cond Mandatory
+}
+
+SliceInfoListDedicated-r17 ::= SEQUENCE (SIZE (1..maxSliceInfo-r17)) OF SliceInfoDedicated-r17
+
+SliceInfoDedicated-r17 ::= SEQUENCE {
+ nsag-IdentityInfo-r17 NSAG-IdentityInfo-r17,
+ nsag-CellReselectionPriority-r17 CellReselectionPriority OPTIONAL, -- Need R
+ nsag-CellReselectionSubPriority-r17 CellReselectionSubPriority OPTIONAL -- Need R
+}
+
+-- TAG-FREQPRIORITYLISTDEDICATEDSLICING-STOP
+-- TAG-FREQPRIORITYLISTSLICING-START
+
+FreqPriorityListSlicing-r17 ::= SEQUENCE (SIZE (1..maxFreqPlus1)) OF FreqPrioritySlicing-r17
+
+FreqPrioritySlicing-r17 ::= SEQUENCE {
+ dl-ImplicitCarrierFreq-r17 INTEGER (0..maxFreq),
+ sliceInfoList-r17 SliceInfoList-r17 OPTIONAL -- Cond Mandatory
+}
+
+SliceInfoList-r17 ::= SEQUENCE (SIZE (1..maxSliceInfo-r17)) OF SliceInfo-r17
+
+SliceInfo-r17 ::= SEQUENCE {
+ nsag-IdentityInfo-r17 NSAG-IdentityInfo-r17,
+ nsag-CellReselectionPriority-r17 CellReselectionPriority OPTIONAL, -- Need R
+ nsag-CellReselectionSubPriority-r17 CellReselectionSubPriority OPTIONAL, -- Need R
+ sliceCellListNR-r17 CHOICE {
+ sliceAllowedCellListNR-r17 SliceCellListNR-r17,
+ sliceExcludedCellListNR-r17 SliceCellListNR-r17
+ } OPTIONAL -- Need R
+}
+
+SliceCellListNR-r17 ::= SEQUENCE (SIZE (1..maxCellSlice-r17)) OF PCI-Range
+
+-- TAG-FREQPRIORITYLISTSLICING-STOP
+-- TAG-FREQUENCYINFODL-START
+
+FrequencyInfoDL ::= SEQUENCE {
+ absoluteFrequencySSB ARFCN-ValueNR OPTIONAL, -- Cond SpCellAdd
+ frequencyBandList MultiFrequencyBandListNR,
+ absoluteFrequencyPointA ARFCN-ValueNR,
+ scs-SpecificCarrierList SEQUENCE (SIZE (1..maxSCSs)) OF SCS-SpecificCarrier,
+ ...
+}
+
+-- TAG-FREQUENCYINFODL-STOP
+-- TAG-FREQUENCYINFODL-SIB-START
+
+FrequencyInfoDL-SIB ::= SEQUENCE {
+ frequencyBandList MultiFrequencyBandListNR-SIB,
+ offsetToPointA INTEGER (0..2199),
+ scs-SpecificCarrierList SEQUENCE (SIZE (1..maxSCSs)) OF SCS-SpecificCarrier
+}
+
+-- TAG-FREQUENCYINFODL-SIB-STOP
+-- TAG-FREQUENCYINFOUL-START
+
+FrequencyInfoUL ::= SEQUENCE {
+ frequencyBandList MultiFrequencyBandListNR OPTIONAL, -- Cond FDD-OrSUL
+ absoluteFrequencyPointA ARFCN-ValueNR OPTIONAL, -- Cond FDD-OrSUL
+ scs-SpecificCarrierList SEQUENCE (SIZE (1..maxSCSs)) OF SCS-SpecificCarrier,
+ additionalSpectrumEmission AdditionalSpectrumEmission OPTIONAL, -- Need S
+ p-Max P-Max OPTIONAL, -- Need S
+ frequencyShift7p5khz ENUMERATED {true} OPTIONAL, -- Cond FDD-TDD-OrSUL-Optional
+ ...
+}
+
+-- TAG-FREQUENCYINFOUL-STOP
+-- TAG-FREQUENCYINFOUL-SIB-START
+
+FrequencyInfoUL-SIB ::= SEQUENCE {
+ frequencyBandList MultiFrequencyBandListNR-SIB OPTIONAL, -- Cond FDD-OrSUL
+ absoluteFrequencyPointA ARFCN-ValueNR OPTIONAL, -- Cond FDD-OrSUL
+ scs-SpecificCarrierList SEQUENCE (SIZE (1..maxSCSs)) OF SCS-SpecificCarrier,
+ p-Max P-Max OPTIONAL, -- Need S
+ frequencyShift7p5khz ENUMERATED {true} OPTIONAL, -- Cond FDD-TDD-OrSUL-Optional
+ ...
+}
+
+-- TAG-FREQUENCYINFOUL-SIB-STOP
+-- TAG-GAPPRIORITY-START
+
+GapPriority-r17 ::= INTEGER (1..maxNrOfGapPri-r17)
+
+-- TAG-GAPPRIORITY-STOP
+-- TAG-HIGHSPEEDCONFIG-START
+
+HighSpeedConfig-r16 ::= SEQUENCE {
+ highSpeedMeasFlag-r16 ENUMERATED {true} OPTIONAL, -- Cond SpCellOnly
+ highSpeedDemodFlag-r16 ENUMERATED {true} OPTIONAL, -- Need R
+ ...
+}
+
+HighSpeedConfig-v1700 ::= SEQUENCE {
+ highSpeedMeasCA-Scell-r17 ENUMERATED {true} OPTIONAL, -- Cond SCellOnly
+ highSpeedMeasInterFreq-r17 ENUMERATED {true} OPTIONAL, -- Cond SpCellOnly2
+ highSpeedDemodCA-Scell-r17 ENUMERATED {true} OPTIONAL, -- Need R
+ ...
+}
+
+HighSpeedConfigFR2-r17 ::= SEQUENCE {
+ highSpeedMeasFlagFR2-r17 ENUMERATED {set1, set2} OPTIONAL, -- Need R
+ highSpeedDeploymentTypeFR2-r17 ENUMERATED {unidirectional, bidirectional} OPTIONAL, -- Need R
+ highSpeedLargeOneStepUL-TimingFR2-r17 ENUMERATED {true} OPTIONAL, -- Need R
+ ...
+}
+
+-- TAG-HIGHSPEEDCONFIG-STOP
+-- TAG-HYSTERESIS-START
+
+Hysteresis ::= INTEGER (0..30)
+
+-- TAG-HYSTERESIS-STOP
+-- TAG-HYSTERESISLOCATION-START
+
+HysteresisLocation-r17 ::= INTEGER (0..32768)
+
+-- TAG-HYSTERESISLOCATION-STOP
+-- TAG-INVALIDSYMBOLPATTERN-START
+
+InvalidSymbolPattern-r16 ::= SEQUENCE {
+ symbols-r16 CHOICE {
+ oneSlot BIT STRING (SIZE (14)),
+ twoSlots BIT STRING (SIZE (28))
+ },
+ periodicityAndPattern-r16 CHOICE {
+ n2 BIT STRING (SIZE (2)),
+ n4 BIT STRING (SIZE (4)),
+ n5 BIT STRING (SIZE (5)),
+ n8 BIT STRING (SIZE (8)),
+ n10 BIT STRING (SIZE (10)),
+ n20 BIT STRING (SIZE (20)),
+ n40 BIT STRING (SIZE (40))
+ } OPTIONAL, -- Need M
+ ...
+}
+
+-- TAG-INVALIDSYMBOLPATTERN-STOP
+-- TAG-I-RNTI-VALUE-START
+
+I-RNTI-Value ::= BIT STRING (SIZE(40))
+
+-- TAG-I-RNTI-VALUE-STOP
+-- TAG-LBT-FAILURERECOVERYCONFIG-START
+
+LBT-FailureRecoveryConfig-r16 ::= SEQUENCE {
+ lbt-FailureInstanceMaxCount-r16 ENUMERATED {n4, n8, n16, n32, n64, n128},
+ lbt-FailureDetectionTimer-r16 ENUMERATED {ms10, ms20, ms40, ms80, ms160, ms320},
+ ...
+}
+
+-- TAG-LBT-FAILURERECOVERYCONFIG-STOP
+-- TAG-LOCATIONINFO-START
+
+LocationInfo-r16 ::= SEQUENCE {
+ commonLocationInfo-r16 CommonLocationInfo-r16 OPTIONAL,
+ bt-LocationInfo-r16 LogMeasResultListBT-r16 OPTIONAL,
+ wlan-LocationInfo-r16 LogMeasResultListWLAN-r16 OPTIONAL,
+ sensor-LocationInfo-r16 Sensor-LocationInfo-r16 OPTIONAL,
+ ...
+}
+
+-- TAG-LOCATIONINFO-STOP
+-- TAG-LOCATIONMEASUREMENTINFO-START
+
+LocationMeasurementInfo ::= CHOICE {
+ eutra-RSTD EUTRA-RSTD-InfoList,
+ ...,
+ eutra-FineTimingDetection NULL,
+ nr-PRS-Measurement-r16 NR-PRS-MeasurementInfoList-r16
+}
+
+EUTRA-RSTD-InfoList ::= SEQUENCE (SIZE (1..maxInterRAT-RSTD-Freq)) OF EUTRA-RSTD-Info
+
+EUTRA-RSTD-Info ::= SEQUENCE {
+ carrierFreq ARFCN-ValueEUTRA,
+ measPRS-Offset INTEGER (0..39),
+ ...
+}
+
+NR-PRS-MeasurementInfoList-r16 ::= SEQUENCE (SIZE (1..maxFreqLayers)) OF NR-PRS-MeasurementInfo-r16
+
+NR-PRS-MeasurementInfo-r16 ::= SEQUENCE {
+ dl-PRS-PointA-r16 ARFCN-ValueNR,
+ nr-MeasPRS-RepetitionAndOffset-r16 CHOICE {
+ ms20-r16 INTEGER (0..19),
+ ms40-r16 INTEGER (0..39),
+ ms80-r16 INTEGER (0..79),
+ ms160-r16 INTEGER (0..159),
+ ...
+ },
+ nr-MeasPRS-length-r16 ENUMERATED {ms1dot5, ms3, ms3dot5, ms4, ms5dot5, ms6, ms10, ms20},
+ ...
+}
+
+-- TAG-LOCATIONMEASUREMENTINFO-STOP
+-- TAG-LOGICALCHANNELCONFIG-START
+
+LogicalChannelConfig ::= SEQUENCE {
+ ul-SpecificParameters SEQUENCE {
+ priority INTEGER (1..16),
+ prioritisedBitRate ENUMERATED {kBps0, kBps8, kBps16, kBps32, kBps64, kBps128, kBps256, kBps512,
+ kBps1024, kBps2048, kBps4096, kBps8192, kBps16384, kBps32768, kBps65536, infinity},
+ bucketSizeDuration ENUMERATED {ms5, ms10, ms20, ms50, ms100, ms150, ms300, ms500, ms1000,
+ spare7, spare6, spare5, spare4, spare3,spare2, spare1},
+ allowedServingCells SEQUENCE (SIZE (1..maxNrofServingCells-1)) OF ServCellIndex
+ OPTIONAL, -- Cond PDCP-CADuplication
+ allowedSCS-List SEQUENCE (SIZE (1..maxSCSs)) OF SubcarrierSpacing OPTIONAL, -- Need R
+ maxPUSCH-Duration ENUMERATED {ms0p02, ms0p04, ms0p0625, ms0p125, ms0p25, ms0p5, ms0p01-v1700, spare1}
+ OPTIONAL, -- Need R
+ configuredGrantType1Allowed ENUMERATED {true} OPTIONAL, -- Need R
+ logicalChannelGroup INTEGER (0..maxLCG-ID) OPTIONAL, -- Need R
+ schedulingRequestID SchedulingRequestId OPTIONAL, -- Need R
+ logicalChannelSR-Mask BOOLEAN,
+ logicalChannelSR-DelayTimerApplied BOOLEAN,
+ ...,
+ bitRateQueryProhibitTimer ENUMERATED {s0, s0dot4, s0dot8, s1dot6, s3, s6, s12, s30} OPTIONAL, -- Need R
+ [[
+ allowedCG-List-r16 SEQUENCE (SIZE (0.. maxNrofConfiguredGrantConfigMAC-1-r16)) OF ConfiguredGrantConfigIndexMAC-r16
+ OPTIONAL, -- Need S
+ allowedPHY-PriorityIndex-r16 ENUMERATED {p0, p1} OPTIONAL -- Need S
+ ]],
+ [[
+ logicalChannelGroupIAB-Ext-r17 INTEGER (0..maxLCG-ID-IAB-r17) OPTIONAL, -- Need R
+ allowedHARQ-mode-r17 ENUMERATED {harqModeA, harqModeB} OPTIONAL -- Need R
+ ]]
+ } OPTIONAL, -- Cond UL
+ ...,
+ [[
+ channelAccessPriority-r16 INTEGER (1..4) OPTIONAL, -- Need R
+ bitRateMultiplier-r16 ENUMERATED {x40, x70, x100, x200} OPTIONAL -- Need R
+ ]]
+}
+
+-- TAG-LOGICALCHANNELCONFIG-STOP
+-- TAG-LOGICALCHANNELIDENTITY-START
+
+LogicalChannelIdentity ::= INTEGER (1..maxLC-ID)
+
+-- TAG-LOGICALCHANNELIDENTITY-STOP
+-- TAG-LTE-NEIGHCELLSCRS-ASSISTINFOLIST-START
+
+LTE-NeighCellsCRS-AssistInfoList-r17 ::= SEQUENCE (SIZE (1..maxNrofCRS-IM-InterfCell-r17)) OF LTE-NeighCellsCRS-AssistInfo-r17
+
+LTE-NeighCellsCRS-AssistInfo-r17 ::= SEQUENCE {
+ neighCarrierBandwidthDL-r17 ENUMERATED {n6, n15, n25, n50, n75, n100, spare2, spare1} OPTIONAL, -- Cond CRS-IM
+ neighCarrierFreqDL-r17 INTEGER (0..16383) OPTIONAL, -- Need S
+ neighCellId-r17 EUTRA-PhysCellId OPTIONAL, -- Need S
+ neighCRS-muting-r17 ENUMERATED {enabled} OPTIONAL, -- Need R
+ neighMBSFN-SubframeConfigList-r17 EUTRA-MBSFN-SubframeConfigList OPTIONAL, -- Need S
+ neighNrofCRS-Ports-r17 ENUMERATED {n1, n2, n4} OPTIONAL, -- Need S
+ neighV-Shift-r17 ENUMERATED {n0, n1, n2, n3, n4, n5} OPTIONAL -- Cond NotCellID
+}
+
+-- TAG-LTE-NEIGHCELLSCRS-ASSISTINFOLIST-STOP
+-- TAG-MAC-CELLGROUPCONFIG-START
+
+MAC-CellGroupConfig ::= SEQUENCE {
+ drx-Config SetupRelease { DRX-Config } OPTIONAL, -- Need M
+ schedulingRequestConfig SchedulingRequestConfig OPTIONAL, -- Need M
+ bsr-Config BSR-Config OPTIONAL, -- Need M
+ tag-Config TAG-Config OPTIONAL, -- Need M
+ phr-Config SetupRelease { PHR-Config } OPTIONAL, -- Need M
+ skipUplinkTxDynamic BOOLEAN,
+ ...,
+ [[
+ csi-Mask BOOLEAN OPTIONAL, -- Need M
+ dataInactivityTimer SetupRelease { DataInactivityTimer } OPTIONAL -- Cond MCG-Only
+ ]],
+ [[
+ usePreBSR-r16 ENUMERATED {true} OPTIONAL, -- Need R
+ schedulingRequestID-LBT-SCell-r16 SchedulingRequestId OPTIONAL, -- Need R
+ lch-BasedPrioritization-r16 ENUMERATED {enabled} OPTIONAL, -- Need R
+ schedulingRequestID-BFR-SCell-r16 SchedulingRequestId OPTIONAL, -- Need R
+ drx-ConfigSecondaryGroup-r16 SetupRelease { DRX-ConfigSecondaryGroup-r16 } OPTIONAL -- Need M
+ ]],
+ [[
+ enhancedSkipUplinkTxDynamic-r16 ENUMERATED {true} OPTIONAL, -- Need R
+ enhancedSkipUplinkTxConfigured-r16 ENUMERATED {true} OPTIONAL -- Need R
+ ]],
+ [[
+ intraCG-Prioritization-r17 ENUMERATED {enabled} OPTIONAL, -- Cond LCH-PrioWithReTxTimer
+ drx-ConfigSL-r17 SetupRelease { DRX-ConfigSL-r17 } OPTIONAL, -- Need M
+ drx-ConfigExt-v1700 SetupRelease { DRX-ConfigExt-v1700 } OPTIONAL, -- Need M
+ schedulingRequestID-BFR-r17 SchedulingRequestId OPTIONAL, -- Need R
+ schedulingRequestID-BFR2-r17 SchedulingRequestId OPTIONAL, -- Need R
+ schedulingRequestConfig-v1700 SchedulingRequestConfig-v1700 OPTIONAL, -- Need M
+ tar-Config-r17 SetupRelease { TAR-Config-r17 } OPTIONAL, -- Need M
+ g-RNTI-ConfigToAddModList-r17 SEQUENCE (SIZE (1..maxG-RNTI-r17)) OF MBS-RNTI-SpecificConfig-r17 OPTIONAL, -- Need N
+ g-RNTI-ConfigToReleaseList-r17 SEQUENCE (SIZE (1..maxG-RNTI-r17)) OF MBS-RNTI-SpecificConfigId-r17 OPTIONAL, -- Need N
+ g-CS-RNTI-ConfigToAddModList-r17 SEQUENCE (SIZE (1..maxG-CS-RNTI-r17)) OF MBS-RNTI-SpecificConfig-r17 OPTIONAL, -- Need N
+ g-CS-RNTI-ConfigToReleaseList-r17 SEQUENCE (SIZE (1..maxG-CS-RNTI-r17)) OF MBS-RNTI-SpecificConfigId-r17 OPTIONAL, -- Need N
+ allowCSI-SRS-Tx-MulticastDRX-Active-r17 BOOLEAN OPTIONAL -- Need M
+ ]],
+ [[
+ schedulingRequestID-PosMG-Request-r17 SchedulingRequestId OPTIONAL, -- Need R
+ drx-LastTransmissionUL-r17 ENUMERATED {enabled} OPTIONAL -- Need R
+ ]]
+}
+
+DataInactivityTimer ::= ENUMERATED {s1, s2, s3, s5, s7, s10, s15, s20, s40, s50, s60, s80, s100, s120, s150, s180}
+
+MBS-RNTI-SpecificConfig-r17 ::= SEQUENCE {
+ mbs-RNTI-SpecificConfigId-r17 MBS-RNTI-SpecificConfigId-r17,
+ groupCommon-RNTI-r17 CHOICE {
+ g-RNTI RNTI-Value,
+ g-CS-RNTI RNTI-Value
+ },
+ drx-ConfigPTM-r17 SetupRelease { DRX-ConfigPTM-r17 } OPTIONAL, -- Need M
+ harq-FeedbackEnablerMulticast-r17 ENUMERATED {dci-enabler, enabled} OPTIONAL, -- Need S
+ harq-FeedbackOptionMulticast-r17 ENUMERATED {ack-nack, nack-only} OPTIONAL, -- Cond HARQFeedback
+ pdsch-AggregationFactor-r17 ENUMERATED {n2, n4, n8} OPTIONAL -- Cond G-RNTI
+}
+
+MBS-RNTI-SpecificConfigId-r17 ::= INTEGER (0..maxG-RNTI-1-r17)
+
+-- TAG-MAC-CELLGROUPCONFIG-STOP
+-- TAG-MEASCONFIG-START
+
+MeasConfig ::= SEQUENCE {
+ measObjectToRemoveList MeasObjectToRemoveList OPTIONAL, -- Need N
+ measObjectToAddModList MeasObjectToAddModList OPTIONAL, -- Need N
+ reportConfigToRemoveList ReportConfigToRemoveList OPTIONAL, -- Need N
+ reportConfigToAddModList ReportConfigToAddModList OPTIONAL, -- Need N
+ measIdToRemoveList MeasIdToRemoveList OPTIONAL, -- Need N
+ measIdToAddModList MeasIdToAddModList OPTIONAL, -- Need N
+ s-MeasureConfig CHOICE {
+ ssb-RSRP RSRP-Range,
+ csi-RSRP RSRP-Range
+ } OPTIONAL, -- Need M
+ quantityConfig QuantityConfig OPTIONAL, -- Need M
+ measGapConfig MeasGapConfig OPTIONAL, -- Need M
+ measGapSharingConfig MeasGapSharingConfig OPTIONAL, -- Need M
+ ...,
+ [[
+ interFrequencyConfig-NoGap-r16 ENUMERATED {true} OPTIONAL -- Need R
+ ]]
+}
+
+MeasObjectToRemoveList ::= SEQUENCE (SIZE (1..maxNrofObjectId)) OF MeasObjectId
+
+MeasIdToRemoveList ::= SEQUENCE (SIZE (1..maxNrofMeasId)) OF MeasId
+
+ReportConfigToRemoveList ::= SEQUENCE (SIZE (1..maxReportConfigId)) OF ReportConfigId
+
+-- TAG-MEASCONFIG-STOP
+-- TAG-MEASGAPCONFIG-START
+
+MeasGapConfig ::= SEQUENCE {
+ gapFR2 SetupRelease { GapConfig } OPTIONAL, -- Need M
+ ...,
+ [[
+ gapFR1 SetupRelease { GapConfig } OPTIONAL, -- Need M
+ gapUE SetupRelease { GapConfig } OPTIONAL -- Need M
+ ]],
+ [[
+ gapToAddModList-r17 SEQUENCE (SIZE (1..maxNrofGapId-r17)) OF GapConfig-r17 OPTIONAL, -- Need N
+ gapToReleaseList-r17 SEQUENCE (SIZE (1..maxNrofGapId-r17)) OF MeasGapId-r17 OPTIONAL, -- Need N
+ posMeasGapPreConfigToAddModList-r17 PosMeasGapPreConfigToAddModList-r17 OPTIONAL, -- Need N
+ posMeasGapPreConfigToReleaseList-r17 PosMeasGapPreConfigToReleaseList-r17 OPTIONAL -- Need N
+ ]]
+
+}
+
+GapConfig ::= SEQUENCE {
+ gapOffset INTEGER (0..159),
+ mgl ENUMERATED {ms1dot5, ms3, ms3dot5, ms4, ms5dot5, ms6},
+ mgrp ENUMERATED {ms20, ms40, ms80, ms160},
+ mgta ENUMERATED {ms0, ms0dot25, ms0dot5},
+ ...,
+ [[
+ refServCellIndicator ENUMERATED {pCell, pSCell, mcg-FR2} OPTIONAL -- Cond NEDCorNRDC
+ ]],
+ [[
+ refFR2ServCellAsyncCA-r16 ServCellIndex OPTIONAL, -- Cond AsyncCA
+ mgl-r16 ENUMERATED {ms10, ms20} OPTIONAL -- Cond PRS
+ ]]
+}
+
+GapConfig-r17 ::= SEQUENCE {
+ measGapId-r17 MeasGapId-r17,
+ gapType-r17 ENUMERATED {perUE, perFR1, perFR2},
+ gapOffset-r17 INTEGER (0..159),
+ mgl-r17 ENUMERATED {ms1, ms1dot5, ms2, ms3, ms3dot5, ms4, ms5, ms5dot5, ms6, ms10, ms20},
+ mgrp-r17 ENUMERATED {ms20, ms40, ms80, ms160},
+ mgta-r17 ENUMERATED {ms0, ms0dot25, ms0dot5, ms0dot75},
+ refServCellIndicator-r17 ENUMERATED {pCell, pSCell, mcg-FR2} OPTIONAL, -- Cond NEDCorNRDC
+ refFR2-ServCellAsyncCA-r17 ServCellIndex OPTIONAL, -- Cond AsyncCA
+ preConfigInd-r17 ENUMERATED {true} OPTIONAL, -- Need R
+ ncsgInd-r17 ENUMERATED {true} OPTIONAL, -- Need R
+ gapAssociationPRS-r17 ENUMERATED {true} OPTIONAL, -- Need R
+ gapSharing-r17 MeasGapSharingScheme OPTIONAL, -- Need R
+ gapPriority-r17 GapPriority-r17 OPTIONAL, -- Need R
+ ...
+}
+
+PosMeasGapPreConfigToAddModList-r17 ::= SEQUENCE (SIZE (1..maxNrofPreConfigPosGapId-r17)) OF PosGapConfig-r17
+
+PosMeasGapPreConfigToReleaseList-r17 ::= SEQUENCE (SIZE (1..maxNrofPreConfigPosGapId-r17)) OF MeasPosPreConfigGapId-r17
+
+PosGapConfig-r17 ::= SEQUENCE {
+ measPosPreConfigGapId-r17 MeasPosPreConfigGapId-r17,
+ gapOffset-r17 INTEGER (0..159),
+ mgl-r17 ENUMERATED {ms1dot5, ms3, ms3dot5, ms4, ms5dot5, ms6, ms10, ms20},
+ mgrp-r17 ENUMERATED {ms20, ms40, ms80, ms160},
+ mgta-r17 ENUMERATED {ms0, ms0dot25, ms0dot5},
+ gapType-r17 ENUMERATED {perUE, perFR1, perFR2},
+ ...
+}
+
+MeasPosPreConfigGapId-r17 ::= INTEGER (1..maxNrofPreConfigPosGapId-r17)
+
+-- TAG-MEASGAPCONFIG-STOP
+-- TAG-MEASGAPID-START
+
+MeasGapId-r17 ::= INTEGER (1..maxNrofGapId-r17)
+
+-- TAG-MEASGAPID-STOP
+-- TAG-MEASGAPSHARINGCONFIG-START
+
+MeasGapSharingConfig ::= SEQUENCE {
+ gapSharingFR2 SetupRelease { MeasGapSharingScheme } OPTIONAL, -- Need M
+ ...,
+ [[
+ gapSharingFR1 SetupRelease { MeasGapSharingScheme } OPTIONAL, --Need M
+ gapSharingUE SetupRelease { MeasGapSharingScheme } OPTIONAL --Need M
+ ]]
+}
+
+MeasGapSharingScheme::= ENUMERATED {scheme00, scheme01, scheme10, scheme11}
+
+-- TAG-MEASGAPSHARINGCONFIG-STOP
+-- TAG-MEASID-START
+
+MeasId ::= INTEGER (1..maxNrofMeasId)
+
+-- TAG-MEASID-STOP
+-- TAG-MEASIDLECONFIG-START
+
+MeasIdleConfigSIB-r16 ::= SEQUENCE {
+ measIdleCarrierListNR-r16 SEQUENCE (SIZE (1..maxFreqIdle-r16)) OF MeasIdleCarrierNR-r16 OPTIONAL, -- Need S
+ measIdleCarrierListEUTRA-r16 SEQUENCE (SIZE (1..maxFreqIdle-r16)) OF MeasIdleCarrierEUTRA-r16 OPTIONAL, -- Need S
+ ...
+}
+
+MeasIdleConfigDedicated-r16 ::= SEQUENCE {
+ measIdleCarrierListNR-r16 SEQUENCE (SIZE (1..maxFreqIdle-r16)) OF MeasIdleCarrierNR-r16 OPTIONAL, -- Need N
+ measIdleCarrierListEUTRA-r16 SEQUENCE (SIZE (1..maxFreqIdle-r16)) OF MeasIdleCarrierEUTRA-r16 OPTIONAL, -- Need N
+ measIdleDuration-r16 ENUMERATED{sec10, sec30, sec60, sec120, sec180, sec240, sec300, spare},
+ validityAreaList-r16 ValidityAreaList-r16 OPTIONAL, -- Need N
+ ...
+}
+
+ValidityAreaList-r16 ::= SEQUENCE (SIZE (1..maxFreqIdle-r16)) OF ValidityArea-r16
+
+ValidityArea-r16 ::= SEQUENCE {
+ carrierFreq-r16 ARFCN-ValueNR,
+ validityCellList-r16 ValidityCellList OPTIONAL -- Need N
+}
+
+ValidityCellList ::= SEQUENCE (SIZE (1.. maxCellMeasIdle-r16)) OF PCI-Range
+
+MeasIdleCarrierNR-r16 ::= SEQUENCE {
+ carrierFreq-r16 ARFCN-ValueNR,
+ ssbSubcarrierSpacing-r16 SubcarrierSpacing,
+ frequencyBandList MultiFrequencyBandListNR OPTIONAL, -- Need R
+ measCellListNR-r16 CellListNR-r16 OPTIONAL, -- Need R
+ reportQuantities-r16 ENUMERATED {rsrp, rsrq, both},
+ qualityThreshold-r16 SEQUENCE {
+ idleRSRP-Threshold-NR-r16 RSRP-Range OPTIONAL, -- Need R
+ idleRSRQ-Threshold-NR-r16 RSRQ-Range OPTIONAL -- Need R
+ } OPTIONAL, -- Need R
+ ssb-MeasConfig-r16 SEQUENCE {
+ nrofSS-BlocksToAverage-r16 INTEGER (2..maxNrofSS-BlocksToAverage) OPTIONAL, -- Need S
+ absThreshSS-BlocksConsolidation-r16 ThresholdNR OPTIONAL, -- Need S
+ smtc-r16 SSB-MTC OPTIONAL, -- Need S
+ ssb-ToMeasure-r16 SSB-ToMeasure OPTIONAL, -- Need S
+ deriveSSB-IndexFromCell-r16 BOOLEAN,
+ ss-RSSI-Measurement-r16 SS-RSSI-Measurement OPTIONAL -- Need S
+ } OPTIONAL, -- Need S
+ beamMeasConfigIdle-r16 BeamMeasConfigIdle-NR-r16 OPTIONAL, -- Need R
+ ...
+}
+
+MeasIdleCarrierEUTRA-r16 ::= SEQUENCE {
+ carrierFreqEUTRA-r16 ARFCN-ValueEUTRA,
+ allowedMeasBandwidth-r16 EUTRA-AllowedMeasBandwidth,
+ measCellListEUTRA-r16 CellListEUTRA-r16 OPTIONAL, -- Need R
+ reportQuantitiesEUTRA-r16 ENUMERATED {rsrp, rsrq, both},
+ qualityThresholdEUTRA-r16 SEQUENCE {
+ idleRSRP-Threshold-EUTRA-r16 RSRP-RangeEUTRA OPTIONAL, -- Need R
+ idleRSRQ-Threshold-EUTRA-r16 RSRQ-RangeEUTRA-r16 OPTIONAL -- Need R
+ } OPTIONAL, -- Need S
+ ...
+}
+
+CellListNR-r16 ::= SEQUENCE (SIZE (1..maxCellMeasIdle-r16)) OF PCI-Range
+
+CellListEUTRA-r16 ::= SEQUENCE (SIZE (1..maxCellMeasIdle-r16)) OF EUTRA-PhysCellIdRange
+
+BeamMeasConfigIdle-NR-r16 ::= SEQUENCE {
+ reportQuantityRS-Indexes-r16 ENUMERATED {rsrp, rsrq, both},
+ maxNrofRS-IndexesToReport-r16 INTEGER (1.. maxNrofIndexesToReport),
+ includeBeamMeasurements-r16 BOOLEAN
+}
+
+RSRQ-RangeEUTRA-r16 ::= INTEGER (-30..46)
+
+-- TAG-MEASIDLECONFIG-STOP
+-- TAG-MEASIDTOADDMODLIST-START
+
+MeasIdToAddModList ::= SEQUENCE (SIZE (1..maxNrofMeasId)) OF MeasIdToAddMod
+
+MeasIdToAddMod ::= SEQUENCE {
+ measId MeasId,
+ measObjectId MeasObjectId,
+ reportConfigId ReportConfigId
+}
+
+-- TAG-MEASIDTOADDMODLIST-STOP
+-- TAG-MEASOBJECTCLI-START
+
+MeasObjectCLI-r16 ::= SEQUENCE {
+ cli-ResourceConfig-r16 CLI-ResourceConfig-r16,
+ ...
+}
+
+CLI-ResourceConfig-r16 ::= SEQUENCE {
+ srs-ResourceConfig-r16 SetupRelease { SRS-ResourceListConfigCLI-r16 } OPTIONAL, -- Need M
+ rssi-ResourceConfig-r16 SetupRelease { RSSI-ResourceListConfigCLI-r16 } OPTIONAL -- Need M
+}
+
+SRS-ResourceListConfigCLI-r16 ::= SEQUENCE (SIZE (1.. maxNrofCLI-SRS-Resources-r16)) OF SRS-ResourceConfigCLI-r16
+
+RSSI-ResourceListConfigCLI-r16 ::= SEQUENCE (SIZE (1.. maxNrofCLI-RSSI-Resources-r16)) OF RSSI-ResourceConfigCLI-r16
+
+SRS-ResourceConfigCLI-r16 ::= SEQUENCE {
+ srs-Resource-r16 SRS-Resource,
+ srs-SCS-r16 SubcarrierSpacing,
+ refServCellIndex-r16 ServCellIndex OPTIONAL, -- Need S
+ refBWP-r16 BWP-Id,
+ ...
+}
+
+RSSI-ResourceConfigCLI-r16 ::= SEQUENCE {
+ rssi-ResourceId-r16 RSSI-ResourceId-r16,
+ rssi-SCS-r16 SubcarrierSpacing,
+ startPRB-r16 INTEGER (0..2169),
+ nrofPRBs-r16 INTEGER (4..maxNrofPhysicalResourceBlocksPlus1),
+ startPosition-r16 INTEGER (0..13),
+ nrofSymbols-r16 INTEGER (1..14),
+ rssi-PeriodicityAndOffset-r16 RSSI-PeriodicityAndOffset-r16,
+ refServCellIndex-r16 ServCellIndex OPTIONAL, -- Need S
+ ...
+}
+
+RSSI-ResourceId-r16 ::= INTEGER (0.. maxNrofCLI-RSSI-Resources-1-r16)
+
+RSSI-PeriodicityAndOffset-r16 ::= CHOICE {
+ sl10 INTEGER(0..9),
+ sl20 INTEGER(0..19),
+ sl40 INTEGER(0..39),
+ sl80 INTEGER(0..79),
+ sl160 INTEGER(0..159),
+ sl320 INTEGER(0..319),
+ s1640 INTEGER(0..639),
+ ...
+}
+
+-- TAG-MEASOBJECTCLI-STOP
+-- TAG-MEASOBJECTEUTRA-START
+
+MeasObjectEUTRA::= SEQUENCE {
+ carrierFreq ARFCN-ValueEUTRA,
+ allowedMeasBandwidth EUTRA-AllowedMeasBandwidth,
+ cellsToRemoveListEUTRAN EUTRA-CellIndexList OPTIONAL, -- Need N
+ cellsToAddModListEUTRAN SEQUENCE (SIZE (1..maxCellMeasEUTRA)) OF EUTRA-Cell OPTIONAL, -- Need N
+ excludedCellsToRemoveListEUTRAN EUTRA-CellIndexList OPTIONAL, -- Need N
+ excludedCellsToAddModListEUTRAN SEQUENCE (SIZE (1..maxCellMeasEUTRA)) OF EUTRA-ExcludedCell OPTIONAL, -- Need N
+ eutra-PresenceAntennaPort1 EUTRA-PresenceAntennaPort1,
+ eutra-Q-OffsetRange EUTRA-Q-OffsetRange OPTIONAL, -- Need R
+ widebandRSRQ-Meas BOOLEAN,
+ ...,
+ [[
+ associatedMeasGap-r17 MeasGapId-r17 OPTIONAL -- Need R
+ ]]
+}
+
+EUTRA-CellIndexList ::= SEQUENCE (SIZE (1..maxCellMeasEUTRA)) OF EUTRA-CellIndex
+
+EUTRA-CellIndex ::= INTEGER (1..maxCellMeasEUTRA)
+
+
+EUTRA-Cell ::= SEQUENCE {
+ cellIndexEUTRA EUTRA-CellIndex,
+ physCellId EUTRA-PhysCellId,
+ cellIndividualOffset EUTRA-Q-OffsetRange
+}
+
+
+EUTRA-ExcludedCell ::= SEQUENCE {
+ cellIndexEUTRA EUTRA-CellIndex,
+ physCellIdRange EUTRA-PhysCellIdRange
+}
+
+-- TAG-MEASOBJECTEUTRA-STOP
+-- TAG-MEASOBJECTID-START
+
+MeasObjectId ::= INTEGER (1..maxNrofObjectId)
+
+-- TAG-MEASOBJECTID-STOP
+-- TAG-MEASOBJECTNR-START
+
+MeasObjectNR ::= SEQUENCE {
+ ssbFrequency ARFCN-ValueNR OPTIONAL, -- Cond SSBorAssociatedSSB
+ ssbSubcarrierSpacing SubcarrierSpacing OPTIONAL, -- Cond SSBorAssociatedSSB
+ smtc1 SSB-MTC OPTIONAL, -- Cond SSBorAssociatedSSB
+ smtc2 SSB-MTC2 OPTIONAL, -- Cond IntraFreqConnected
+ refFreqCSI-RS ARFCN-ValueNR OPTIONAL, -- Cond CSI-RS
+ referenceSignalConfig ReferenceSignalConfig,
+ absThreshSS-BlocksConsolidation ThresholdNR OPTIONAL, -- Need R
+ absThreshCSI-RS-Consolidation ThresholdNR OPTIONAL, -- Need R
+ nrofSS-BlocksToAverage INTEGER (2..maxNrofSS-BlocksToAverage) OPTIONAL, -- Need R
+ nrofCSI-RS-ResourcesToAverage INTEGER (2..maxNrofCSI-RS-ResourcesToAverage) OPTIONAL, -- Need R
+ quantityConfigIndex INTEGER (1..maxNrofQuantityConfig),
+ offsetMO Q-OffsetRangeList,
+ cellsToRemoveList PCI-List OPTIONAL, -- Need N
+ cellsToAddModList CellsToAddModList OPTIONAL, -- Need N
+ excludedCellsToRemoveList PCI-RangeIndexList OPTIONAL, -- Need N
+ excludedCellsToAddModList SEQUENCE (SIZE (1..maxNrofPCI-Ranges)) OF PCI-RangeElement OPTIONAL, -- Need N
+ allowedCellsToRemoveList PCI-RangeIndexList OPTIONAL, -- Need N
+ allowedCellsToAddModList SEQUENCE (SIZE (1..maxNrofPCI-Ranges)) OF PCI-RangeElement OPTIONAL, -- Need N
+ ...,
+ [[
+ freqBandIndicatorNR FreqBandIndicatorNR OPTIONAL, -- Need R
+ measCycleSCell ENUMERATED {sf160, sf256, sf320, sf512, sf640, sf1024, sf1280} OPTIONAL -- Need R
+ ]],
+ [[
+ smtc3list-r16 SSB-MTC3List-r16 OPTIONAL, -- Need R
+ rmtc-Config-r16 SetupRelease {RMTC-Config-r16} OPTIONAL, -- Need M
+ t312-r16 SetupRelease { T312-r16 } OPTIONAL -- Need M
+ ]],
+ [[
+ associatedMeasGapSSB-r17 MeasGapId-r17 OPTIONAL, -- Need R
+ associatedMeasGapCSIRS-r17 MeasGapId-r17 OPTIONAL, -- Need R
+ smtc4list-r17 SSB-MTC4List-r17 OPTIONAL, -- Need R
+ measCyclePSCell-r17 ENUMERATED {ms160, ms256, ms320, ms512, ms640, ms1024, ms1280, spare1}
+ OPTIONAL, -- Cond SCG
+ cellsToAddModListExt-v1710 CellsToAddModListExt-v1710 OPTIONAL -- Need N
+ ]],
+ [[
+ associatedMeasGapSSB2-v1720 MeasGapId-r17 OPTIONAL, -- Cond AssociatedGapSSB
+ associatedMeasGapCSIRS2-v1720 MeasGapId-r17 OPTIONAL -- Cond AssociatedGapCSIRS
+ ]]
+}
+
+SSB-MTC3List-r16::= SEQUENCE (SIZE(1..4)) OF SSB-MTC3-r16
+
+SSB-MTC4List-r17::= SEQUENCE (SIZE(1..3)) OF SSB-MTC4-r17
+
+T312-r16 ::= ENUMERATED { ms0, ms50, ms100, ms200, ms300, ms400, ms500, ms1000}
+
+ReferenceSignalConfig::= SEQUENCE {
+ ssb-ConfigMobility SSB-ConfigMobility OPTIONAL, -- Need M
+ csi-rs-ResourceConfigMobility SetupRelease { CSI-RS-ResourceConfigMobility } OPTIONAL -- Need M
+}
+
+SSB-ConfigMobility::= SEQUENCE {
+ ssb-ToMeasure SetupRelease { SSB-ToMeasure } OPTIONAL, -- Need M
+ deriveSSB-IndexFromCell BOOLEAN,
+ ss-RSSI-Measurement SS-RSSI-Measurement OPTIONAL, -- Need M
+ ...,
+ [[
+ ssb-PositionQCL-Common-r16 SSB-PositionQCL-Relation-r16 OPTIONAL, -- Cond SharedSpectrum
+ ssb-PositionQCL-CellsToAddModList-r16 SSB-PositionQCL-CellsToAddModList-r16 OPTIONAL, -- Need N
+ ssb-PositionQCL-CellsToRemoveList-r16 PCI-List OPTIONAL -- Need N
+ ]],
+ [[
+ deriveSSB-IndexFromCellInter-r17 ServCellIndex OPTIONAL, -- Need R
+ ssb-PositionQCL-Common-r17 SSB-PositionQCL-Relation-r17 OPTIONAL, -- Cond SharedSpectrum2
+ ssb-PositionQCL-Cells-r17 SetupRelease {SSB-PositionQCL-CellList-r17} OPTIONAL -- Need M
+ ]],
+ [[
+ cca-CellsToAddModList-r17 PCI-List OPTIONAL, -- Need N
+ cca-CellsToRemoveList-r17 PCI-List OPTIONAL -- Need N
+ ]]
+}
+
+Q-OffsetRangeList ::= SEQUENCE {
+ rsrpOffsetSSB Q-OffsetRange DEFAULT dB0,
+ rsrqOffsetSSB Q-OffsetRange DEFAULT dB0,
+ sinrOffsetSSB Q-OffsetRange DEFAULT dB0,
+ rsrpOffsetCSI-RS Q-OffsetRange DEFAULT dB0,
+ rsrqOffsetCSI-RS Q-OffsetRange DEFAULT dB0,
+ sinrOffsetCSI-RS Q-OffsetRange DEFAULT dB0
+}
+
+
+ThresholdNR ::= SEQUENCE{
+ thresholdRSRP RSRP-Range OPTIONAL, -- Need R
+ thresholdRSRQ RSRQ-Range OPTIONAL, -- Need R
+ thresholdSINR SINR-Range OPTIONAL -- Need R
+}
+
+CellsToAddModList ::= SEQUENCE (SIZE (1..maxNrofCellMeas)) OF CellsToAddMod
+
+CellsToAddModListExt-v1710 ::= SEQUENCE (SIZE (1..maxNrofCellMeas)) OF CellsToAddModExt-v1710
+
+CellsToAddMod ::= SEQUENCE {
+ physCellId PhysCellId,
+ cellIndividualOffset Q-OffsetRangeList
+}
+
+CellsToAddModExt-v1710 ::= SEQUENCE {
+ ntn-PolarizationDL-r17 ENUMERATED {rhcp,lhcp,linear} OPTIONAL, -- Need R
+ ntn-PolarizationUL-r17 ENUMERATED {rhcp,lhcp,linear} OPTIONAL -- Need R
+}
+
+RMTC-Config-r16 ::= SEQUENCE {
+ rmtc-Periodicity-r16 ENUMERATED {ms40, ms80, ms160, ms320, ms640},
+ rmtc-SubframeOffset-r16 INTEGER(0..639) OPTIONAL, -- Need M
+ measDurationSymbols-r16 ENUMERATED {sym1, sym14or12, sym28or24, sym42or36, sym70or60},
+ rmtc-Frequency-r16 ARFCN-ValueNR,
+ ref-SCS-CP-r16 ENUMERATED {kHz15, kHz30, kHz60-NCP, kHz60-ECP},
+ ...,
+ [[
+ rmtc-Bandwidth-r17 ENUMERATED {mhz100, mhz400, mhz800, mhz1600, mhz2000} OPTIONAL, -- Need R
+ measDurationSymbols-v1700 ENUMERATED {sym140, sym560, sym1120} OPTIONAL, -- Need R
+ ref-SCS-CP-v1700 ENUMERATED {kHz120, kHz480, kHz960} OPTIONAL, -- Need R
+ tci-StateInfo-r17 SEQUENCE {
+ tci-StateId-r17 TCI-StateId,
+ ref-ServCellId-r17 ServCellIndex OPTIONAL -- Need R
+ } OPTIONAL -- Need R
+ ]],
+ [[
+ ref-BWPId-r17 BWP-Id OPTIONAL -- Need R
+ ]]
+}
+
+SSB-PositionQCL-CellsToAddModList-r16 ::= SEQUENCE (SIZE (1..maxNrofCellMeas)) OF SSB-PositionQCL-CellsToAddMod-r16
+
+SSB-PositionQCL-CellsToAddMod-r16 ::= SEQUENCE {
+ physCellId-r16 PhysCellId,
+ ssb-PositionQCL-r16 SSB-PositionQCL-Relation-r16
+}
+
+SSB-PositionQCL-CellList-r17 ::= SEQUENCE (SIZE (1..maxNrofCellMeas)) OF SSB-PositionQCL-Cell-r17
+
+SSB-PositionQCL-Cell-r17 ::= SEQUENCE {
+ physCellId-r17 PhysCellId,
+ ssb-PositionQCL-r17 SSB-PositionQCL-Relation-r17
+}
+
+-- TAG-MEASOBJECTNR-STOP
+-- TAG-MEASOBJECTNR-SL-START
+
+MeasObjectNR-SL-r16 ::= SEQUENCE {
+ tx-PoolMeasToRemoveList-r16 Tx-PoolMeasList-r16 OPTIONAL, -- Need N
+ tx-PoolMeasToAddModList-r16 Tx-PoolMeasList-r16 OPTIONAL -- Need N
+}
+
+Tx-PoolMeasList-r16 ::= SEQUENCE (SIZE (1..maxNrofSL-PoolToMeasureNR-r16)) OF SL-ResourcePoolID-r16
+
+-- TAG-MEASOBJECTNR-SL-STOP
+-- TAG-MEASOBJECTRXTXDIFF-START
+
+
+MeasObjectRxTxDiff-r17 ::= SEQUENCE {
+ dl-Ref-r17 CHOICE {
+ prs-Ref-r17 NULL,
+ csi-RS-Ref-r17 NULL,
+ ...
+ } OPTIONAL, -- Need R
+ ...
+}
+
+-- TAG-MEASOBJECTRXTXDIFF-STOP
+-- TAG-MEASOBJECTTOADDMODLIST-START
+
+MeasObjectToAddModList ::= SEQUENCE (SIZE (1..maxNrofObjectId)) OF MeasObjectToAddMod
+
+MeasObjectToAddMod ::= SEQUENCE {
+ measObjectId MeasObjectId,
+ measObject CHOICE {
+ measObjectNR MeasObjectNR,
+ ...,
+ measObjectEUTRA MeasObjectEUTRA,
+ measObjectUTRA-FDD-r16 MeasObjectUTRA-FDD-r16,
+ measObjectNR-SL-r16 MeasObjectNR-SL-r16,
+ measObjectCLI-r16 MeasObjectCLI-r16,
+ measObjectRxTxDiff-r17 MeasObjectRxTxDiff-r17,
+ measObjectRelay-r17 SL-MeasObject-r16
+ }
+}
+
+-- TAG-MEASOBJECTTOADDMODLIST-STOP
+-- TAG-MEASOBJECTUTRA-FDD-START
+
+MeasObjectUTRA-FDD-r16 ::= SEQUENCE {
+ carrierFreq-r16 ARFCN-ValueUTRA-FDD-r16,
+ utra-FDD-Q-OffsetRange-r16 UTRA-FDD-Q-OffsetRange-r16 OPTIONAL, -- Need R
+ cellsToRemoveList-r16 UTRA-FDD-CellIndexList-r16 OPTIONAL, -- Need N
+ cellsToAddModList-r16 CellsToAddModListUTRA-FDD-r16 OPTIONAL, -- Need N
+ ...
+}
+
+CellsToAddModListUTRA-FDD-r16 ::= SEQUENCE (SIZE (1..maxCellMeasUTRA-FDD-r16)) OF CellsToAddModUTRA-FDD-r16
+
+CellsToAddModUTRA-FDD-r16 ::= SEQUENCE {
+ cellIndexUTRA-FDD-r16 UTRA-FDD-CellIndex-r16,
+ physCellId-r16 PhysCellIdUTRA-FDD-r16
+}
+
+UTRA-FDD-CellIndexList-r16 ::= SEQUENCE (SIZE (1..maxCellMeasUTRA-FDD-r16)) OF UTRA-FDD-CellIndex-r16
+
+UTRA-FDD-CellIndex-r16 ::= INTEGER (1..maxCellMeasUTRA-FDD-r16)
+
+-- TAG-MEASOBJECTUTRA-FDD-STOP
+-- TAG-MEASRESULTCELLLISTSFTD-NR-START
+
+MeasResultCellListSFTD-NR ::= SEQUENCE (SIZE (1..maxCellSFTD)) OF MeasResultCellSFTD-NR
+
+MeasResultCellSFTD-NR ::= SEQUENCE {
+ physCellId PhysCellId,
+ sfn-OffsetResult INTEGER (0..1023),
+ frameBoundaryOffsetResult INTEGER (-30720..30719),
+ rsrp-Result RSRP-Range OPTIONAL
+}
+
+-- TAG-MEASRESULTCELLLISTSFTD-NR-STOP
+-- TAG-MEASRESULTCELLLISTSFTD-EUTRA-START
+
+MeasResultCellListSFTD-EUTRA ::= SEQUENCE (SIZE (1..maxCellSFTD)) OF MeasResultSFTD-EUTRA
+
+MeasResultSFTD-EUTRA ::= SEQUENCE {
+ eutra-PhysCellId EUTRA-PhysCellId,
+ sfn-OffsetResult INTEGER (0..1023),
+ frameBoundaryOffsetResult INTEGER (-30720..30719),
+ rsrp-Result RSRP-Range OPTIONAL
+}
+
+-- TAG-MEASRESULTCELLLISTSFTD-EUTRA-STOP
+-- TAG-MEASRESULTS-START
+
+MeasResults ::= SEQUENCE {
+ measId MeasId,
+ measResultServingMOList MeasResultServMOList,
+ measResultNeighCells CHOICE {
+ measResultListNR MeasResultListNR,
+ ...,
+ measResultListEUTRA MeasResultListEUTRA,
+ measResultListUTRA-FDD-r16 MeasResultListUTRA-FDD-r16,
+ sl-MeasResultsCandRelay-r17 OCTET STRING -- Contains PC5 SL-MeasResultListRelay-r17
+ } OPTIONAL,
+ ...,
+ [[
+ measResultServFreqListEUTRA-SCG MeasResultServFreqListEUTRA-SCG OPTIONAL,
+ measResultServFreqListNR-SCG MeasResultServFreqListNR-SCG OPTIONAL,
+ measResultSFTD-EUTRA MeasResultSFTD-EUTRA OPTIONAL,
+ measResultSFTD-NR MeasResultCellSFTD-NR OPTIONAL
+ ]],
+ [[
+ measResultCellListSFTD-NR MeasResultCellListSFTD-NR OPTIONAL
+ ]],
+ [[
+ measResultForRSSI-r16 MeasResultForRSSI-r16 OPTIONAL,
+ locationInfo-r16 LocationInfo-r16 OPTIONAL,
+ ul-PDCP-DelayValueResultList-r16 UL-PDCP-DelayValueResultList-r16 OPTIONAL,
+ measResultsSL-r16 MeasResultsSL-r16 OPTIONAL,
+ measResultCLI-r16 MeasResultCLI-r16 OPTIONAL
+ ]],
+ [[
+ measResultRxTxTimeDiff-r17 MeasResultRxTxTimeDiff-r17 OPTIONAL,
+ sl-MeasResultServingRelay-r17 OCTET STRING OPTIONAL,
+ -- Contains PC5 SL-MeasResultRelay-r17
+ ul-PDCP-ExcessDelayResultList-r17 UL-PDCP-ExcessDelayResultList-r17 OPTIONAL,
+ coarseLocationInfo-r17 OCTET STRING OPTIONAL
+ ]]
+}
+
+MeasResultServMOList ::= SEQUENCE (SIZE (1..maxNrofServingCells)) OF MeasResultServMO
+
+MeasResultServMO ::= SEQUENCE {
+ servCellId ServCellIndex,
+ measResultServingCell MeasResultNR,
+ measResultBestNeighCell MeasResultNR OPTIONAL,
+ ...
+}
+
+MeasResultListNR ::= SEQUENCE (SIZE (1..maxCellReport)) OF MeasResultNR
+
+MeasResultNR ::= SEQUENCE {
+ physCellId PhysCellId OPTIONAL,
+ measResult SEQUENCE {
+ cellResults SEQUENCE{
+ resultsSSB-Cell MeasQuantityResults OPTIONAL,
+ resultsCSI-RS-Cell MeasQuantityResults OPTIONAL
+ },
+ rsIndexResults SEQUENCE{
+ resultsSSB-Indexes ResultsPerSSB-IndexList OPTIONAL,
+ resultsCSI-RS-Indexes ResultsPerCSI-RS-IndexList OPTIONAL
+ } OPTIONAL
+ },
+ ...,
+ [[
+ cgi-Info CGI-InfoNR OPTIONAL
+ ]] ,
+ [[
+ choCandidate-r17 ENUMERATED {true} OPTIONAL,
+ choConfig-r17 SEQUENCE (SIZE (1..2)) OF CondTriggerConfig-r16 OPTIONAL,
+ triggeredEvent-r17 SEQUENCE {
+ timeBetweenEvents-r17 TimeBetweenEvent-r17 OPTIONAL,
+ firstTriggeredEvent ENUMERATED {condFirstEvent, condSecondEvent} OPTIONAL
+ } OPTIONAL
+ ]]
+}
+
+MeasResultListEUTRA ::= SEQUENCE (SIZE (1..maxCellReport)) OF MeasResultEUTRA
+
+MeasResultEUTRA ::= SEQUENCE {
+ eutra-PhysCellId PhysCellId,
+ measResult MeasQuantityResultsEUTRA,
+
+ cgi-Info CGI-InfoEUTRA OPTIONAL,
+ ...
+}
+
+MultiBandInfoListEUTRA ::= SEQUENCE (SIZE (1..maxMultiBands)) OF FreqBandIndicatorEUTRA
+
+MeasQuantityResults ::= SEQUENCE {
+ rsrp RSRP-Range OPTIONAL,
+ rsrq RSRQ-Range OPTIONAL,
+ sinr SINR-Range OPTIONAL
+}
+
+MeasQuantityResultsEUTRA ::= SEQUENCE {
+ rsrp RSRP-RangeEUTRA OPTIONAL,
+ rsrq RSRQ-RangeEUTRA OPTIONAL,
+ sinr SINR-RangeEUTRA OPTIONAL
+}
+
+ResultsPerSSB-IndexList::= SEQUENCE (SIZE (1..maxNrofIndexesToReport2)) OF ResultsPerSSB-Index
+
+ResultsPerSSB-Index ::= SEQUENCE {
+ ssb-Index SSB-Index,
+ ssb-Results MeasQuantityResults OPTIONAL
+}
+
+ResultsPerCSI-RS-IndexList::= SEQUENCE (SIZE (1..maxNrofIndexesToReport2)) OF ResultsPerCSI-RS-Index
+
+ResultsPerCSI-RS-Index ::= SEQUENCE {
+ csi-RS-Index CSI-RS-Index,
+ csi-RS-Results MeasQuantityResults OPTIONAL
+}
+MeasResultServFreqListEUTRA-SCG ::= SEQUENCE (SIZE (1..maxNrofServingCellsEUTRA)) OF MeasResult2EUTRA
+
+MeasResultServFreqListNR-SCG ::= SEQUENCE (SIZE (1..maxNrofServingCells)) OF MeasResult2NR
+
+MeasResultListUTRA-FDD-r16 ::= SEQUENCE (SIZE (1..maxCellReport)) OF MeasResultUTRA-FDD-r16
+
+MeasResultUTRA-FDD-r16 ::= SEQUENCE {
+ physCellId-r16 PhysCellIdUTRA-FDD-r16,
+ measResult-r16 SEQUENCE {
+ utra-FDD-RSCP-r16 INTEGER (-5..91) OPTIONAL,
+ utra-FDD-EcN0-r16 INTEGER (0..49) OPTIONAL
+ }
+}
+
+MeasResultForRSSI-r16 ::= SEQUENCE {
+ rssi-Result-r16 RSSI-Range-r16,
+ channelOccupancy-r16 INTEGER (0..100)
+}
+
+MeasResultCLI-r16 ::= SEQUENCE {
+ measResultListSRS-RSRP-r16 MeasResultListSRS-RSRP-r16 OPTIONAL,
+ measResultListCLI-RSSI-r16 MeasResultListCLI-RSSI-r16 OPTIONAL
+}
+
+MeasResultListSRS-RSRP-r16 ::= SEQUENCE (SIZE (1.. maxCLI-Report-r16)) OF MeasResultSRS-RSRP-r16
+
+MeasResultSRS-RSRP-r16 ::= SEQUENCE {
+ srs-ResourceId-r16 SRS-ResourceId,
+ srs-RSRP-Result-r16 SRS-RSRP-Range-r16
+}
+
+MeasResultListCLI-RSSI-r16 ::= SEQUENCE (SIZE (1.. maxCLI-Report-r16)) OF MeasResultCLI-RSSI-r16
+
+MeasResultCLI-RSSI-r16 ::= SEQUENCE {
+ rssi-ResourceId-r16 RSSI-ResourceId-r16,
+ cli-RSSI-Result-r16 CLI-RSSI-Range-r16
+}
+
+UL-PDCP-DelayValueResultList-r16 ::= SEQUENCE (SIZE (1..maxDRB)) OF UL-PDCP-DelayValueResult-r16
+
+UL-PDCP-DelayValueResult-r16 ::= SEQUENCE {
+ drb-Id-r16 DRB-Identity,
+ averageDelay-r16 INTEGER (0..10000),
+ ...
+}
+
+UL-PDCP-ExcessDelayResultList-r17 ::= SEQUENCE (SIZE (1..maxDRB)) OF UL-PDCP-ExcessDelayResult-r17
+
+UL-PDCP-ExcessDelayResult-r17 ::= SEQUENCE {
+ drb-Id-r17 DRB-Identity,
+ excessDelay-r17 INTEGER (0..31),
+ ...
+}
+
+TimeBetweenEvent-r17 ::= INTEGER (0..1023)
+
+-- TAG-MEASRESULTS-STOP
+-- TAG-MEASRESULT2EUTRA-START
+
+MeasResult2EUTRA ::= SEQUENCE {
+ carrierFreq ARFCN-ValueEUTRA,
+ measResultServingCell MeasResultEUTRA OPTIONAL,
+ measResultBestNeighCell MeasResultEUTRA OPTIONAL,
+ ...
+}
+
+-- TAG-MEASRESULT2EUTRA-STOP
+-- TAG-MEASRESULT2NR-START
+
+MeasResult2NR ::= SEQUENCE {
+ ssbFrequency ARFCN-ValueNR OPTIONAL,
+ refFreqCSI-RS ARFCN-ValueNR OPTIONAL,
+ measResultServingCell MeasResultNR OPTIONAL,
+ measResultNeighCellListNR MeasResultListNR OPTIONAL,
+ ...
+}
+
+-- TAG-MEASRESULT2NR-STOP
+-- TAG-MEASRESULTIDLEEUTRA-START
+
+MeasResultIdleEUTRA-r16 ::= SEQUENCE {
+ measResultsPerCarrierListIdleEUTRA-r16 SEQUENCE (SIZE (1.. maxFreqIdle-r16)) OF MeasResultsPerCarrierIdleEUTRA-r16,
+ ...
+}
+
+MeasResultsPerCarrierIdleEUTRA-r16 ::= SEQUENCE {
+ carrierFreqEUTRA-r16 ARFCN-ValueEUTRA,
+ measResultsPerCellListIdleEUTRA-r16 SEQUENCE (SIZE (1..maxCellMeasIdle-r16)) OF MeasResultsPerCellIdleEUTRA-r16,
+ ...
+}
+
+MeasResultsPerCellIdleEUTRA-r16 ::= SEQUENCE {
+ eutra-PhysCellId-r16 EUTRA-PhysCellId,
+ measIdleResultEUTRA-r16 SEQUENCE {
+ rsrp-ResultEUTRA-r16 RSRP-RangeEUTRA OPTIONAL,
+ rsrq-ResultEUTRA-r16 RSRQ-RangeEUTRA-r16 OPTIONAL
+ },
+ ...
+}
+
+-- TAG-MEASRESULTIDLEEUTRA-STOP
+-- TAG-MEASRESULTIDLENR-START
+
+MeasResultIdleNR-r16 ::= SEQUENCE {
+ measResultServingCell-r16 SEQUENCE {
+ rsrp-Result-r16 RSRP-Range OPTIONAL,
+ rsrq-Result-r16 RSRQ-Range OPTIONAL,
+ resultsSSB-Indexes-r16 ResultsPerSSB-IndexList-r16 OPTIONAL
+ },
+ measResultsPerCarrierListIdleNR-r16 SEQUENCE (SIZE (1.. maxFreqIdle-r16)) OF MeasResultsPerCarrierIdleNR-r16 OPTIONAL,
+ ...
+}
+
+MeasResultsPerCarrierIdleNR-r16 ::= SEQUENCE {
+ carrierFreq-r16 ARFCN-ValueNR,
+ measResultsPerCellListIdleNR-r16 SEQUENCE (SIZE (1..maxCellMeasIdle-r16)) OF MeasResultsPerCellIdleNR-r16,
+ ...
+}
+
+MeasResultsPerCellIdleNR-r16 ::= SEQUENCE {
+ physCellId-r16 PhysCellId,
+ measIdleResultNR-r16 SEQUENCE {
+ rsrp-Result-r16 RSRP-Range OPTIONAL,
+ rsrq-Result-r16 RSRQ-Range OPTIONAL,
+ resultsSSB-Indexes-r16 ResultsPerSSB-IndexList-r16 OPTIONAL
+ },
+ ...
+}
+
+ResultsPerSSB-IndexList-r16 ::= SEQUENCE (SIZE (1.. maxNrofIndexesToReport)) OF ResultsPerSSB-IndexIdle-r16
+
+ResultsPerSSB-IndexIdle-r16 ::= SEQUENCE {
+ ssb-Index-r16 SSB-Index,
+ ssb-Results-r16 SEQUENCE {
+ ssb-RSRP-Result-r16 RSRP-Range OPTIONAL,
+ ssb-RSRQ-Result-r16 RSRQ-Range OPTIONAL
+ } OPTIONAL
+}
+
+-- TAG-MEASRESULTIDLENR-STOP
+-- TAG-MEASRESULTRXTXTIMEDIFF-START
+
+MeasResultRxTxTimeDiff-r17 ::= SEQUENCE {
+ rxTxTimeDiff-ue-r17 RxTxTimeDiff-r17 OPTIONAL,
+ ...
+}
+
+-- TAG-MEASRESULTRXTXTIMEDIFF-STOP
+-- TAG-MEASRESULTSCG-FAILURE-START
+
+MeasResultSCG-Failure ::= SEQUENCE {
+ measResultPerMOList MeasResultList2NR,
+ ...,
+ [[
+ locationInfo-r16 LocationInfo-r16 OPTIONAL
+ ]]
+}
+
+MeasResultList2NR ::= SEQUENCE (SIZE (1..maxFreq)) OF MeasResult2NR
+
+-- TAG-MEASRESULTSCG-FAILURE-STOP
+-- TAG-MEASRESULTSSL-START
+
+MeasResultsSL-r16 ::= SEQUENCE {
+ measResultsListSL-r16 CHOICE {
+ measResultNR-SL-r16 MeasResultNR-SL-r16,
+ ...
+ },
+ ...
+}
+
+MeasResultNR-SL-r16 ::= SEQUENCE {
+ measResultListCBR-NR-r16 SEQUENCE (SIZE (1.. maxNrofSL-PoolToMeasureNR-r16)) OF MeasResultCBR-NR-r16,
+ ...
+}
+
+MeasResultCBR-NR-r16 ::= SEQUENCE {
+ sl-poolReportIdentity-r16 SL-ResourcePoolID-r16,
+ sl-CBR-ResultsNR-r16 SL-CBR-r16,
+ ...
+}
+
+-- TAG-MEASRESULTSSL-STOP
+-- TAG-MEASTRIGGERQUANTITYEUTRA-START
+
+MeasTriggerQuantityEUTRA::= CHOICE {
+ rsrp RSRP-RangeEUTRA,
+ rsrq RSRQ-RangeEUTRA,
+ sinr SINR-RangeEUTRA
+}
+
+RSRP-RangeEUTRA ::= INTEGER (0..97)
+
+RSRQ-RangeEUTRA ::= INTEGER (0..34)
+
+SINR-RangeEUTRA ::= INTEGER (0..127)
+
+-- TAG-MEASTRIGGERQUANTITYEUTRA-STOP
+-- TAG-MOBILITYSTATEPARAMETERS-START
+
+MobilityStateParameters ::= SEQUENCE{
+ t-Evaluation ENUMERATED {
+ s30, s60, s120, s180, s240, spare3, spare2, spare1},
+ t-HystNormal ENUMERATED {
+ s30, s60, s120, s180, s240, spare3, spare2, spare1},
+ n-CellChangeMedium INTEGER (1..16),
+ n-CellChangeHigh INTEGER (1..16)
+}
+
+-- TAG-MOBILITYSTATEPARAMETERS-STOP
+-- TAG-MRB-IDENTITY-START
+
+MRB-Identity-r17 ::= INTEGER (1..512)
+
+-- TAG-MRB-IDENTITY-STOP
+-- TAG-MSGACONFIGCOMMON-START
+
+MsgA-ConfigCommon-r16 ::= SEQUENCE {
+ rach-ConfigCommonTwoStepRA-r16 RACH-ConfigCommonTwoStepRA-r16,
+ msgA-PUSCH-Config-r16 MsgA-PUSCH-Config-r16 OPTIONAL --Cond InitialBWPConfig
+}
+
+-- TAG-MSGACONFIGCOMMON-STOP
+-- TAG-MSGA-PUSCH-CONFIG-START
+
+MsgA-PUSCH-Config-r16 ::= SEQUENCE {
+ msgA-PUSCH-ResourceGroupA-r16 MsgA-PUSCH-Resource-r16 OPTIONAL, -- Cond InitialBWPConfig
+ msgA-PUSCH-ResourceGroupB-r16 MsgA-PUSCH-Resource-r16 OPTIONAL, -- Cond GroupBConfigured
+ msgA-TransformPrecoder-r16 ENUMERATED {enabled, disabled} OPTIONAL, -- Need R
+ msgA-DataScramblingIndex-r16 INTEGER (0..1023) OPTIONAL, -- Need S
+ msgA-DeltaPreamble-r16 INTEGER (-1..6) OPTIONAL -- Need R
+}
+
+MsgA-PUSCH-Resource-r16 ::= SEQUENCE {
+ msgA-MCS-r16 INTEGER (0..15),
+ nrofSlotsMsgA-PUSCH-r16 INTEGER (1..4),
+ nrofMsgA-PO-PerSlot-r16 ENUMERATED {one, two, three, six},
+ msgA-PUSCH-TimeDomainOffset-r16 INTEGER (1..32),
+ msgA-PUSCH-TimeDomainAllocation-r16 INTEGER (1..maxNrofUL-Allocations) OPTIONAL, -- Need S
+ startSymbolAndLengthMsgA-PO-r16 INTEGER (0..127) OPTIONAL, -- Need S
+ mappingTypeMsgA-PUSCH-r16 ENUMERATED {typeA, typeB} OPTIONAL, -- Need S
+ guardPeriodMsgA-PUSCH-r16 INTEGER (0..3) OPTIONAL, -- Need R
+ guardBandMsgA-PUSCH-r16 INTEGER (0..1),
+ frequencyStartMsgA-PUSCH-r16 INTEGER (0..maxNrofPhysicalResourceBlocks-1),
+ nrofPRBs-PerMsgA-PO-r16 INTEGER (1..32),
+ nrofMsgA-PO-FDM-r16 ENUMERATED {one, two, four, eight},
+ msgA-IntraSlotFrequencyHopping-r16 ENUMERATED {enabled} OPTIONAL, -- Need R
+ msgA-HoppingBits-r16 BIT STRING (SIZE(2)) OPTIONAL, -- Cond FreqHopConfigured
+ msgA-DMRS-Config-r16 MsgA-DMRS-Config-r16,
+ nrofDMRS-Sequences-r16 INTEGER (1..2),
+ msgA-Alpha-r16 ENUMERATED {alpha0, alpha04, alpha05, alpha06,
+ alpha07, alpha08, alpha09, alpha1} OPTIONAL, -- Need S
+ interlaceIndexFirstPO-MsgA-PUSCH-r16 INTEGER (1..10) OPTIONAL, -- Need R
+ nrofInterlacesPerMsgA-PO-r16 INTEGER (1..10) OPTIONAL, -- Need R
+ ...
+}
+
+MsgA-DMRS-Config-r16 ::= SEQUENCE {
+ msgA-DMRS-AdditionalPosition-r16 ENUMERATED {pos0, pos1, pos3} OPTIONAL, -- Need S
+ msgA-MaxLength-r16 ENUMERATED {len2} OPTIONAL, -- Need S
+ msgA-PUSCH-DMRS-CDM-Group-r16 INTEGER (0..1) OPTIONAL, -- Need S
+ msgA-PUSCH-NrofPorts-r16 INTEGER (0..1) OPTIONAL, -- Need S
+ msgA-ScramblingID0-r16 INTEGER (0..65535) OPTIONAL, -- Need S
+ msgA-ScramblingID1-r16 INTEGER (0..65535) OPTIONAL -- Need S
+}
+
+-- TAG-MSGA-PUSCH-CONFIG-STOP
+-- TAG-MULTIFREQUENCYBANDLISTNR-START
+
+MultiFrequencyBandListNR ::= SEQUENCE (SIZE (1..maxNrofMultiBands)) OF FreqBandIndicatorNR
+
+-- TAG-MULTIFREQUENCYBANDLISTNR-STOP
+-- TAG-MULTIFREQUENCYBANDLISTNR-SIB-START
+
+MultiFrequencyBandListNR-SIB ::= SEQUENCE (SIZE (1.. maxNrofMultiBands)) OF NR-MultiBandInfo
+
+NR-MultiBandInfo ::= SEQUENCE {
+ freqBandIndicatorNR FreqBandIndicatorNR OPTIONAL, -- Cond OptULNotSIB2
+ nr-NS-PmaxList NR-NS-PmaxList OPTIONAL -- Need S
+}
+
+-- TAG-MULTIFREQUENCYBANDLISTNR-SIB-STOP
+-- TAG-MUSIM-GAPCONFIG-START
+
+MUSIM-GapConfig-r17 ::= SEQUENCE {
+ musim-GapToReleaseList-r17 SEQUENCE (SIZE (1..3)) OF MUSIM-GapId-r17 OPTIONAL, -- Need N
+ musim-GapToAddModList-r17 SEQUENCE (SIZE (1..3)) OF MUSIM-Gap-r17 OPTIONAL, -- Need N
+ musim-AperiodicGap-r17 MUSIM-GapInfo-r17 OPTIONAL, -- Need N
+ ...
+}
+MUSIM-Gap-r17 ::= SEQUENCE {
+ musim-GapId-r17 MUSIM-GapId-r17,
+ musim-GapInfo-r17 MUSIM-GapInfo-r17
+
+}
+
+-- TAG-MUSIM-GAPCONFIG-STOP
+-- TAG-MUSIM-GAPID-START
+
+MUSIM-GapId-r17 ::= INTEGER (0..2)
+
+-- TAG-MUSIM-GAPID-STOP
+-- TAG-MUSIM-GAPINFO-START
+
+MUSIM-GapInfo-r17 ::= SEQUENCE {
+ musim-Starting-SFN-AndSubframe-r17 MUSIM-Starting-SFN-AndSubframe-r17 OPTIONAL, -- Cond aperiodic
+ musim-GapLength-r17 ENUMERATED {ms3, ms4, ms6, ms10, ms20} OPTIONAL, -- Cond gapSetup
+ musim-GapRepetitionAndOffset-r17 CHOICE {
+ ms20-r17 INTEGER (0..19),
+ ms40-r17 INTEGER (0..39),
+ ms80-r17 INTEGER (0..79),
+ ms160-r17 INTEGER (0..159),
+ ms320-r17 INTEGER (0..319),
+ ms640-r17 INTEGER (0..639),
+ ms1280-r17 INTEGER (0..1279),
+ ms2560-r17 INTEGER (0..2559),
+ ms5120-r17 INTEGER (0..5119),
+ ...
+ } OPTIONAL -- Cond periodic
+}
+
+MUSIM-Starting-SFN-AndSubframe-r17 ::= SEQUENCE {
+ starting-SFN-r17 INTEGER (0..1023),
+ startingSubframe-r17 INTEGER (0..9)
+}
+
+-- TAG-MUSIM-GAPINFO-STOP
+-- TAG-NeedForGapsConfigNR-START
+
+NeedForGapsConfigNR-r16 ::= SEQUENCE {
+ requestedTargetBandFilterNR-r16 SEQUENCE (SIZE (1..maxBands)) OF FreqBandIndicatorNR OPTIONAL -- Need R
+}
+
+-- TAG-NeedForGapsConfigNR-STOP
+-- TAG-NeedForGapsInfoNR-START
+
+NeedForGapsInfoNR-r16 ::= SEQUENCE {
+ intraFreq-needForGap-r16 NeedForGapsIntraFreqList-r16,
+ interFreq-needForGap-r16 NeedForGapsBandListNR-r16
+}
+
+NeedForGapsIntraFreqList-r16 ::= SEQUENCE (SIZE (1.. maxNrofServingCells)) OF NeedForGapsIntraFreq-r16
+
+NeedForGapsBandListNR-r16 ::= SEQUENCE (SIZE (1..maxBands)) OF NeedForGapsNR-r16
+
+NeedForGapsIntraFreq-r16 ::= SEQUENCE {
+ servCellId-r16 ServCellIndex,
+ gapIndicationIntra-r16 ENUMERATED {gap, no-gap}
+}
+
+NeedForGapsNR-r16 ::= SEQUENCE {
+ bandNR-r16 FreqBandIndicatorNR,
+ gapIndication-r16 ENUMERATED {gap, no-gap}
+}
+
+-- TAG-NeedForGapsInfoNR-STOP
+-- TAG-NeedForGapNCSG-ConfigEUTRA-START
+
+NeedForGapNCSG-ConfigEUTRA-r17 ::= SEQUENCE {
+ requestedTargetBandFilterNCSG-EUTRA-r17 SEQUENCE (SIZE (1..maxBandsEUTRA)) OF FreqBandIndicatorEUTRA OPTIONAL -- Need R
+}
+
+-- TAG-NeedForGapNCSG-ConfigEUTRA-STOP
+-- TAG-NEEDFORGAPNCSG-CONFIGNR-START
+
+NeedForGapNCSG-ConfigNR-r17 ::= SEQUENCE {
+ requestedTargetBandFilterNCSG-NR-r17 SEQUENCE (SIZE (1..maxBands)) OF FreqBandIndicatorNR OPTIONAL -- Need R
+}
+
+-- TAG-NEEDFORGAPNCSG-CONFIGNR-STOP
+-- TAG-NEEDFORGAPNCSG-INFOEUTRA-START
+
+NeedForGapNCSG-InfoEUTRA-r17 ::= SEQUENCE {
+ needForNCSG-EUTRA-r17 SEQUENCE (SIZE (1..maxBandsEUTRA)) OF NeedForNCSG-EUTRA-r17
+}
+
+NeedForNCSG-EUTRA-r17 ::= SEQUENCE {
+ bandEUTRA-r17 FreqBandIndicatorEUTRA,
+ gapIndication-r17 ENUMERATED {gap, ncsg, nogap-noncsg}
+}
+
+-- TAG-NEEDFORGAPNCSG-INFOEUTRA-STOP
+-- TAG-NEEDFORGAPNCSG-INFONR-START
+
+NeedForGapNCSG-InfoNR-r17 ::= SEQUENCE {
+ intraFreq-needForNCSG-r17 NeedForNCSG-IntraFreqList-r17,
+ interFreq-needForNCSG-r17 NeedForNCSG-BandListNR-r17
+}
+
+NeedForNCSG-IntraFreqList-r17 ::= SEQUENCE (SIZE (1.. maxNrofServingCells)) OF NeedForNCSG-IntraFreq-r17
+
+NeedForNCSG-BandListNR-r17 ::= SEQUENCE (SIZE (1..maxBands)) OF NeedForNCSG-NR-r17
+
+NeedForNCSG-IntraFreq-r17 ::= SEQUENCE {
+ servCellId-r17 ServCellIndex,
+ gapIndicationIntra-r17 ENUMERATED {gap, ncsg, nogap-noncsg}
+}
+
+NeedForNCSG-NR-r17 ::= SEQUENCE {
+ bandNR-r17 FreqBandIndicatorNR,
+ gapIndication-r17 ENUMERATED {gap, ncsg, nogap-noncsg}
+}
+
+-- TAG-NEEDFORGAPNCSG-INFONR-STOP
+-- TAG-NEXTHOPCHAININGCOUNT-START
+
+NextHopChainingCount ::= INTEGER (0..7)
+
+-- TAG-NEXTHOPCHAININGCOUNT-STOP
+-- TAG-NG-5G-S-TMSI-START
+
+NG-5G-S-TMSI ::= BIT STRING (SIZE (48))
+
+-- TAG-NG-5G-S-TMSI-STOP
+-- TAG-NONCELLDEFININGSSB-START
+
+NonCellDefiningSSB-r17 ::= SEQUENCE {
+ absoluteFrequencySSB-r17 ARFCN-ValueNR,
+ ssb-Periodicity-r17 ENUMERATED { ms5, ms10, ms20, ms40, ms80, ms160, spare2, spare1 } OPTIONAL, -- Need S
+ ssb-TimeOffset-r17 ENUMERATED { ms5, ms10, ms15, ms20, ms40, ms80, spare2, spare1 } OPTIONAL, -- Need S
+ ...
+}
+
+-- TAG-NONCELLDEFININGSSB-STOP
+-- TAG-NPN-IDENTITY-START
+
+NPN-Identity-r16 ::= CHOICE {
+ pni-npn-r16 SEQUENCE {
+ plmn-Identity-r16 PLMN-Identity,
+ cag-IdentityList-r16 SEQUENCE (SIZE (1..maxNPN-r16)) OF CAG-IdentityInfo-r16
+ },
+ snpn-r16 SEQUENCE {
+ plmn-Identity-r16 PLMN-Identity,
+ nid-List-r16 SEQUENCE (SIZE (1..maxNPN-r16)) OF NID-r16
+ }
+}
+
+CAG-IdentityInfo-r16 ::= SEQUENCE {
+ cag-Identity-r16 BIT STRING (SIZE (32)),
+ manualCAGselectionAllowed-r16 ENUMERATED {true} OPTIONAL -- Need R
+}
+
+NID-r16 ::= BIT STRING (SIZE (44))
+
+-- TAG-NPN-IDENTITY-STOP
+-- TAG-NPN-IDENTITYINFOLIST-START
+
+NPN-IdentityInfoList-r16 ::= SEQUENCE (SIZE (1..maxNPN-r16)) OF NPN-IdentityInfo-r16
+
+
+NPN-IdentityInfo-r16 ::= SEQUENCE {
+ npn-IdentityList-r16 SEQUENCE (SIZE (1..maxNPN-r16)) OF NPN-Identity-r16,
+ trackingAreaCode-r16 TrackingAreaCode,
+ ranac-r16 RAN-AreaCode OPTIONAL, -- Need R
+ cellIdentity-r16 CellIdentity,
+ cellReservedForOperatorUse-r16 ENUMERATED {reserved, notReserved},
+ iab-Support-r16 ENUMERATED {true} OPTIONAL, -- Need S
+ ...,
+ [[
+ gNB-ID-Length-r17 INTEGER (22..32) OPTIONAL -- Need R
+ ]]
+}
+
+-- TAG-NPN-IDENTITYINFOLIST-STOP
+-- TAG-NR-DL-PRS-PDC-INFO-START
+
+NR-DL-PRS-PDC-Info-r17 ::= SEQUENCE {
+ nr-DL-PRS-PDC-ResourceSet-r17 NR-DL-PRS-PDC-ResourceSet-r17 OPTIONAL, -- Need R
+ ...
+}
+
+NR-DL-PRS-PDC-ResourceSet-r17 ::= SEQUENCE {
+ periodicityAndOffset-r17 NR-DL-PRS-Periodicity-and-ResourceSetSlotOffset-r17,
+ numSymbols-r17 ENUMERATED {n2, n4, n6, n12, spare4, spare3, spare2, spare1},
+ dl-PRS-ResourceBandwidth-r17 INTEGER (1..63),
+ dl-PRS-StartPRB-r17 INTEGER (0..2176),
+ resourceList-r17 SEQUENCE (SIZE (1..maxNrofPRS-ResourcesPerSet-r17)) OF NR-DL-PRS-Resource-r17,
+ repFactorAndTimeGap-r17 RepFactorAndTimeGap-r17 OPTIONAL, -- Need S
+ ...
+}
+
+NR-DL-PRS-Periodicity-and-ResourceSetSlotOffset-r17 ::= CHOICE {
+ scs15-r17 CHOICE {
+ n4-r17 INTEGER (0..3),
+ n5-r17 INTEGER (0..4),
+ n8-r17 INTEGER (0..7),
+ n10-r17 INTEGER (0..9),
+ n16-r17 INTEGER (0..15),
+ n20-r17 INTEGER (0..19),
+ n32-r17 INTEGER (0..31),
+ n40-r17 INTEGER (0..39),
+ n64-r17 INTEGER (0..63),
+ n80-r17 INTEGER (0..79),
+ n160-r17 INTEGER (0..159),
+ n320-r17 INTEGER (0..319),
+ n640-r17 INTEGER (0..639),
+ n1280-r17 INTEGER (0..1279),
+ n2560-r17 INTEGER (0..2559),
+ n5120-r17 INTEGER (0..5119),
+ n10240-r17 INTEGER (0..10239),
+ ...
+ },
+ scs30-r17 CHOICE {
+ n8-r17 INTEGER (0..7),
+ n10-r17 INTEGER (0..9),
+ n16-r17 INTEGER (0..15),
+ n20-r17 INTEGER (0..19),
+ n32-r17 INTEGER (0..31),
+ n40-r17 INTEGER (0..39),
+ n64-r17 INTEGER (0..63),
+ n80-r17 INTEGER (0..79),
+ n128-r17 INTEGER (0..127),
+ n160-r17 INTEGER (0..159),
+ n320-r17 INTEGER (0..319),
+ n640-r17 INTEGER (0..639),
+ n1280-r17 INTEGER (0..1279),
+ n2560-r17 INTEGER (0..2559),
+ n5120-r17 INTEGER (0..5119),
+ n10240-r17 INTEGER (0..10239),
+ n20480-r17 INTEGER (0..20479),
+ ...
+ },
+ scs60-r17 CHOICE {
+ n16-r17 INTEGER (0..15),
+ n20-r17 INTEGER (0..19),
+ n32-r17 INTEGER (0..31),
+ n40-r17 INTEGER (0..39),
+ n64-r17 INTEGER (0..63),
+ n80-r17 INTEGER (0..79),
+ n128-r17 INTEGER (0..127),
+ n160-r17 INTEGER (0..159),
+ n256-r17 INTEGER (0..255),
+ n320-r17 INTEGER (0..319),
+ n640-r17 INTEGER (0..639),
+ n1280-r17 INTEGER (0..1279),
+ n2560-r17 INTEGER (0..2559),
+ n5120-r17 INTEGER (0..5119),
+ n10240-r17 INTEGER (0..10239),
+ n20480-r17 INTEGER (0..20479),
+ n40960-r17 INTEGER (0..40959),
+ ...
+ },
+ scs120-r17 CHOICE {
+ n32-r17 INTEGER (0..31),
+ n40-r17 INTEGER (0..39),
+ n64-r17 INTEGER (0..63),
+ n80-r17 INTEGER (0..79),
+ n128-r17 INTEGER (0..127),
+ n160-r17 INTEGER (0..159),
+ n256-r17 INTEGER (0..255),
+ n320-r17 INTEGER (0..319),
+ n512-r17 INTEGER (0..511),
+ n640-r17 INTEGER (0..639),
+ n1280-r17 INTEGER (0..1279),
+ n2560-r17 INTEGER (0..2559),
+ n5120-r17 INTEGER (0..5119),
+ n10240-r17 INTEGER (0..10239),
+ n20480-r17 INTEGER (0..20479),
+ n40960-r17 INTEGER (0..40959),
+ n81920-r17 INTEGER (0..81919),
+ ...
+ },
+ ...
+}
+
+NR-DL-PRS-Resource-r17 ::= SEQUENCE {
+ nr-DL-PRS-ResourceID-r17 NR-DL-PRS-ResourceID-r17,
+ dl-PRS-SequenceID-r17 INTEGER (0..4095),
+ dl-PRS-CombSizeN-AndReOffset-r17 CHOICE {
+ n2-r17 INTEGER (0..1),
+ n4-r17 INTEGER (0..3),
+ n6-r17 INTEGER (0..5),
+ n12-r17 INTEGER (0..11),
+ ...
+ },
+ dl-PRS-ResourceSlotOffset-r17 INTEGER (0..maxNrofPRS-ResourceOffsetValue-1-r17),
+ dl-PRS-ResourceSymbolOffset-r17 INTEGER (0..12),
+ dl-PRS-QCL-Info-r17 DL-PRS-QCL-Info-r17 OPTIONAL, -- Need N
+ ...
+}
+
+DL-PRS-QCL-Info-r17 ::= CHOICE {
+ ssb-r17 SEQUENCE {
+ ssb-Index-r17 INTEGER (0..63),
+ rs-Type-r17 ENUMERATED {typeC, typeD, typeC-plus-typeD},
+ ...
+ },
+ dl-PRS-r17 SEQUENCE {
+ qcl-DL-PRS-ResourceID-r17 NR-DL-PRS-ResourceID-r17,
+ ...
+ },
+ ...
+}
+
+NR-DL-PRS-ResourceID-r17 ::= INTEGER (0..maxNrofPRS-ResourcesPerSet-1-r17)
+
+RepFactorAndTimeGap-r17 ::= SEQUENCE {
+ repetitionFactor-r17 ENUMERATED {n2, n4, n6, n8, n16, n32, spare2, spare1},
+ timeGap-r17 ENUMERATED {s1, s2, s4, s8, s16, s32, spare2, spare1}
+}
+
+-- TAG-NR-DL-PRS-PDC-INFO-STOP
+-- TAG-NR-NS-PMAXLIST-START
+
+NR-NS-PmaxList ::= SEQUENCE (SIZE (1..maxNR-NS-Pmax)) OF NR-NS-PmaxValue
+
+NR-NS-PmaxValue ::= SEQUENCE {
+ additionalPmax P-Max OPTIONAL, -- Need N
+ additionalSpectrumEmission AdditionalSpectrumEmission
+}
+
+-- TAG-NR-NS-PMAXLIST-STOP
+-- TAG-NSAG-ID-START
+
+NSAG-ID-r17 ::= BIT STRING (SIZE (8))
+
+-- TAG-NSAG-ID-STOP
+-- TAG-NSAG-IDENTITYINFO-START
+
+NSAG-IdentityInfo-r17 ::= SEQUENCE {
+ nsag-ID-r17 NSAG-ID-r17,
+ trackingAreaCode-r17 TrackingAreaCode OPTIONAL -- Need R
+}
+
+-- TAG-NSAG-IDENTITYINFO-STOP
+-- TAG-NTN-CONFIG-START
+
+NTN-Config-r17 ::= SEQUENCE {
+ epochTime-r17 EpochTime-r17 OPTIONAL, -- Need R
+ ntn-UlSyncValidityDuration-r17 ENUMERATED{ s5, s10, s15, s20, s25, s30, s35,
+ s40, s45, s50, s55, s60, s120, s180, s240, s900} OPTIONAL, -- Cond SIB19
+ cellSpecificKoffset-r17 INTEGER(1..1023) OPTIONAL, -- Need R
+ kmac-r17 INTEGER(1..512) OPTIONAL, -- Need R
+ ta-Info-r17 TA-Info-r17 OPTIONAL, -- Need R
+ ntn-PolarizationDL-r17 ENUMERATED {rhcp,lhcp,linear} OPTIONAL, -- Need R
+ ntn-PolarizationUL-r17 ENUMERATED {rhcp,lhcp,linear} OPTIONAL, -- Need R
+ ephemerisInfo-r17 EphemerisInfo-r17 OPTIONAL, -- Need R
+ ta-Report-r17 ENUMERATED {enabled} OPTIONAL, -- Need R
+ ...
+}
+
+EpochTime-r17 ::= SEQUENCE {
+ sfn-r17 INTEGER(0..1023),
+ subFrameNR-r17 INTEGER(0..9)
+}
+
+TA-Info-r17 ::= SEQUENCE {
+ ta-Common-r17 INTEGER(0..66485757),
+ ta-CommonDrift-r17 INTEGER(-257303..257303) OPTIONAL, -- Need R
+ ta-CommonDriftVariant-r17 INTEGER(0..28949) OPTIONAL -- Need R
+}
+
+-- TAG-NTN-CONFIG-STOP
+-- TAG-NZP-CSI-RS-RESOURCE-START
+
+NZP-CSI-RS-Resource ::= SEQUENCE {
+ nzp-CSI-RS-ResourceId NZP-CSI-RS-ResourceId,
+ resourceMapping CSI-RS-ResourceMapping,
+ powerControlOffset INTEGER (-8..15),
+ powerControlOffsetSS ENUMERATED{db-3, db0, db3, db6} OPTIONAL, -- Need R
+ scramblingID ScramblingId,
+ periodicityAndOffset CSI-ResourcePeriodicityAndOffset OPTIONAL, -- Cond PeriodicOrSemiPersistent
+ qcl-InfoPeriodicCSI-RS TCI-StateId OPTIONAL, -- Cond Periodic
+ ...
+}
+
+-- TAG-NZP-CSI-RS-RESOURCE-STOP
+-- TAG-NZP-CSI-RS-RESOURCEID-START
+
+NZP-CSI-RS-ResourceId ::= INTEGER (0..maxNrofNZP-CSI-RS-Resources-1)
+
+-- TAG-NZP-CSI-RS-RESOURCEID-STOP
+-- TAG-NZP-CSI-RS-RESOURCESET-START
+
+NZP-CSI-RS-ResourceSet ::= SEQUENCE {
+ nzp-CSI-ResourceSetId NZP-CSI-RS-ResourceSetId,
+ nzp-CSI-RS-Resources SEQUENCE (SIZE (1..maxNrofNZP-CSI-RS-ResourcesPerSet)) OF NZP-CSI-RS-ResourceId,
+ repetition ENUMERATED { on, off } OPTIONAL, -- Need S
+ aperiodicTriggeringOffset INTEGER(0..6) OPTIONAL, -- Need S
+ trs-Info ENUMERATED {true} OPTIONAL, -- Need R
+ ...,
+ [[
+ aperiodicTriggeringOffset-r16 INTEGER(0..31) OPTIONAL -- Need S
+ ]],
+ [[
+ pdc-Info-r17 ENUMERATED {true} OPTIONAL, -- Need R
+ cmrGroupingAndPairing-r17 CMRGroupingAndPairing-r17 OPTIONAL, -- Need R
+ aperiodicTriggeringOffset-r17 INTEGER (0..124) OPTIONAL, -- Need S
+ aperiodicTriggeringOffsetL2-r17 INTEGER(0..31) OPTIONAL -- Need R
+ ]]
+}
+
+CMRGroupingAndPairing-r17 ::= SEQUENCE {
+ nrofResourcesGroup1-r17 INTEGER (1..7),
+ pair1OfNZP-CSI-RS-r17 NZP-CSI-RS-Pairing-r17 OPTIONAL, -- Need R
+ pair2OfNZP-CSI-RS-r17 NZP-CSI-RS-Pairing-r17 OPTIONAL -- Need R
+}
+
+NZP-CSI-RS-Pairing-r17 ::= SEQUENCE {
+ nzp-CSI-RS-ResourceId1-r17 INTEGER (1..7),
+ nzp-CSI-RS-ResourceId2-r17 INTEGER (1..7)
+}
+
+-- TAG-NZP-CSI-RS-RESOURCESET-STOP
+-- TAG-NZP-CSI-RS-RESOURCESETID-START
+
+NZP-CSI-RS-ResourceSetId ::= INTEGER (0..maxNrofNZP-CSI-RS-ResourceSets-1)
+
+-- TAG-NZP-CSI-RS-RESOURCESETID-STOP
+-- TAG-P-MAX-START
+
+P-Max ::= INTEGER (-30..33)
+
+-- TAG-P-MAX-STOP
+-- TAG-PATHLOSSREFERENCERS-START
+
+PathlossReferenceRS-r17 ::= SEQUENCE {
+ pathlossReferenceRS-Id-r17 PathlossReferenceRS-Id-r17,
+ referenceSignal-r17 CHOICE {
+ ssb-Index SSB-Index,
+ csi-RS-Index NZP-CSI-RS-ResourceId
+ },
+ additionalPCI-r17 AdditionalPCIIndex-r17 OPTIONAL -- Cond RS-SSB
+}
+
+
+-- TAG-PATHLOSSREFERENCERS-STOP
+-- TAG-PATHLOSSREFERENCERS-ID-START
+
+PathlossReferenceRS-Id-r17 ::= INTEGER (0..maxNrofPathlossReferenceRSs-1-r17)
+
+-- TAG-PATHLOSSREFERENCERS-ID-STOP
+-- TAG-PCIARFCNEUTRA-START
+
+PCI-ARFCN-EUTRA-r16 ::= SEQUENCE {
+ physCellId-r16 EUTRA-PhysCellId,
+ carrierFreq-r16 ARFCN-ValueEUTRA
+}
+
+-- TAG-PCIARFCNEUTRA-STOP
+-- TAG-PCIARFCNNR-START
+
+PCI-ARFCN-NR-r16 ::= SEQUENCE {
+ physCellId-r16 PhysCellId,
+ carrierFreq-r16 ARFCN-ValueNR
+}
+
+-- TAG-PCIARFCNNR-STOP
+-- TAG-PCI-LIST-START
+
+PCI-List ::= SEQUENCE (SIZE (1..maxNrofCellMeas)) OF PhysCellId
+
+-- TAG-PCI-LIST-STOP
+-- TAG-PCI-RANGE-START
+
+PCI-Range ::= SEQUENCE {
+ start PhysCellId,
+ range ENUMERATED {n4, n8, n12, n16, n24, n32, n48, n64, n84,
+ n96, n128, n168, n252, n504, n1008,spare1} OPTIONAL -- Need S
+}
+
+-- TAG-PCI-RANGE-STOP
+-- TAG-PCI-RANGEELEMENT-START
+
+PCI-RangeElement ::= SEQUENCE {
+ pci-RangeIndex PCI-RangeIndex,
+ pci-Range PCI-Range
+}
+
+-- TAG-PCI-RANGEELEMENT-STOP
+-- TAG-PCI-RANGEINDEX-START
+
+PCI-RangeIndex ::= INTEGER (1..maxNrofPCI-Ranges)
+
+-- TAG-PCI-RANGEINDEX-STOP
+-- TAG-PCI-RANGEINDEXLIST-START
+
+PCI-RangeIndexList ::= SEQUENCE (SIZE (1..maxNrofPCI-Ranges)) OF PCI-RangeIndex
+
+-- TAG-PCI-RANGEINDEXLIST-STOP
+-- TAG-PDCCH-CONFIG-START
+
+PDCCH-Config ::= SEQUENCE {
+ controlResourceSetToAddModList SEQUENCE(SIZE (1..3)) OF ControlResourceSet OPTIONAL, -- Need N
+ controlResourceSetToReleaseList SEQUENCE(SIZE (1..3)) OF ControlResourceSetId OPTIONAL, -- Need N
+ searchSpacesToAddModList SEQUENCE(SIZE (1..10)) OF SearchSpace OPTIONAL, -- Need N
+ searchSpacesToReleaseList SEQUENCE(SIZE (1..10)) OF SearchSpaceId OPTIONAL, -- Need N
+ downlinkPreemption SetupRelease { DownlinkPreemption } OPTIONAL, -- Need M
+ tpc-PUSCH SetupRelease { PUSCH-TPC-CommandConfig } OPTIONAL, -- Need M
+ tpc-PUCCH SetupRelease { PUCCH-TPC-CommandConfig } OPTIONAL, -- Need M
+ tpc-SRS SetupRelease { SRS-TPC-CommandConfig} OPTIONAL, -- Need M
+ ...,
+ [[
+ controlResourceSetToAddModListSizeExt-v1610 SEQUENCE (SIZE (1..2)) OF ControlResourceSet OPTIONAL, -- Need N
+ controlResourceSetToReleaseListSizeExt-r16 SEQUENCE (SIZE (1..5)) OF ControlResourceSetId-r16 OPTIONAL, -- Need N
+ searchSpacesToAddModListExt-r16 SEQUENCE(SIZE (1..10)) OF SearchSpaceExt-r16 OPTIONAL, -- Need N
+ uplinkCancellation-r16 SetupRelease { UplinkCancellation-r16 } OPTIONAL, -- Need M
+ monitoringCapabilityConfig-r16 ENUMERATED { r15monitoringcapability,r16monitoringcapability } OPTIONAL, -- Need M
+ searchSpaceSwitchConfig-r16 SearchSpaceSwitchConfig-r16 OPTIONAL -- Need R
+ ]],
+ [[
+ searchSpacesToAddModListExt-v1700 SEQUENCE(SIZE (1..10)) OF SearchSpaceExt-v1700 OPTIONAL, -- Need N
+ monitoringCapabilityConfig-v1710 ENUMERATED { r17monitoringcapability } OPTIONAL, -- Need M
+ searchSpaceSwitchConfig-r17 SearchSpaceSwitchConfig-r17 OPTIONAL, -- Need R
+ pdcch-SkippingDurationList-r17 SEQUENCE(SIZE (1..3)) OF SCS-SpecificDuration-r17 OPTIONAL -- Need R
+ ]]
+}
+
+SearchSpaceSwitchConfig-r16 ::= SEQUENCE {
+ cellGroupsForSwitchList-r16 SEQUENCE(SIZE (1..4)) OF CellGroupForSwitch-r16 OPTIONAL, -- Need R
+ searchSpaceSwitchDelay-r16 INTEGER (10..52) OPTIONAL -- Need R
+}
+
+SearchSpaceSwitchConfig-r17 ::= SEQUENCE {
+ searchSpaceSwitchTimer-r17 SCS-SpecificDuration-r17 OPTIONAL, -- Need R
+ searchSpaceSwitchDelay-r17 INTEGER (10..52) OPTIONAL -- Need R
+}
+
+CellGroupForSwitch-r16 ::= SEQUENCE(SIZE (1..16)) OF ServCellIndex
+
+SCS-SpecificDuration-r17 ::= INTEGER (1..166)
+
+-- TAG-PDCCH-CONFIG-STOP
+-- TAG-PDCCH-CONFIGCOMMON-START
+
+PDCCH-ConfigCommon ::= SEQUENCE {
+ controlResourceSetZero ControlResourceSetZero OPTIONAL, -- Cond InitialBWP-Only
+ commonControlResourceSet ControlResourceSet OPTIONAL, -- Need R
+ searchSpaceZero SearchSpaceZero OPTIONAL, -- Cond InitialBWP-Only
+ commonSearchSpaceList SEQUENCE (SIZE(1..4)) OF SearchSpace OPTIONAL, -- Need R
+ searchSpaceSIB1 SearchSpaceId OPTIONAL, -- Need S
+ searchSpaceOtherSystemInformation SearchSpaceId OPTIONAL, -- Need S
+ pagingSearchSpace SearchSpaceId OPTIONAL, -- Need S
+ ra-SearchSpace SearchSpaceId OPTIONAL, -- Need S
+ ...,
+ [[
+ firstPDCCH-MonitoringOccasionOfPO CHOICE {
+ sCS15KHZoneT SEQUENCE (SIZE (1..maxPO-perPF)) OF INTEGER (0..139),
+ sCS30KHZoneT-SCS15KHZhalfT SEQUENCE (SIZE (1..maxPO-perPF)) OF INTEGER (0..279),
+ sCS60KHZoneT-SCS30KHZhalfT-SCS15KHZquarterT SEQUENCE (SIZE (1..maxPO-perPF)) OF INTEGER (0..559),
+ sCS120KHZoneT-SCS60KHZhalfT-SCS30KHZquarterT-SCS15KHZoneEighthT SEQUENCE (SIZE (1..maxPO-perPF)) OF INTEGER (0..1119),
+ sCS120KHZhalfT-SCS60KHZquarterT-SCS30KHZoneEighthT-SCS15KHZoneSixteenthT SEQUENCE (SIZE (1..maxPO-perPF)) OF INTEGER (0..2239),
+ sCS120KHZquarterT-SCS60KHZoneEighthT-SCS30KHZoneSixteenthT SEQUENCE (SIZE (1..maxPO-perPF)) OF INTEGER (0..4479),
+ sCS120KHZoneEighthT-SCS60KHZoneSixteenthT SEQUENCE (SIZE (1..maxPO-perPF)) OF INTEGER (0..8959),
+ sCS120KHZoneSixteenthT SEQUENCE (SIZE (1..maxPO-perPF)) OF INTEGER (0..17919)
+ } OPTIONAL -- Cond OtherBWP
+ ]],
+ [[
+ commonSearchSpaceListExt-r16 SEQUENCE (SIZE(1..4)) OF SearchSpaceExt-r16 OPTIONAL -- Need R
+ ]],
+ [[
+ sdt-SearchSpace-r17 CHOICE {
+ newSearchSpace SearchSpace,
+ existingSearchSpace SearchSpaceId
+ } OPTIONAL, -- Need R
+ searchSpaceMCCH-r17 SearchSpaceId OPTIONAL, -- Need R
+ searchSpaceMTCH-r17 SearchSpaceId OPTIONAL, -- Need S
+ commonSearchSpaceListExt2-r17 SEQUENCE (SIZE(1..4)) OF SearchSpaceExt-v1700 OPTIONAL, -- Need R
+ firstPDCCH-MonitoringOccasionOfPO-v1710 CHOICE {
+ sCS480KHZoneEighthT SEQUENCE (SIZE (1..maxPO-perPF)) OF INTEGER (0..35839),
+ sCS480KHZoneSixteenthT SEQUENCE (SIZE (1..maxPO-perPF)) OF INTEGER (0..71679)
+ } OPTIONAL, -- Need R
+ pei-ConfigBWP-r17 SEQUENCE {
+ pei-SearchSpace-r17 SearchSpaceId,
+ firstPDCCH-MonitoringOccasionOfPEI-O-r17 CHOICE {
+ sCS15KHZoneT SEQUENCE (SIZE (1..maxPEI-perPF-r17)) OF INTEGER (0..139),
+ sCS30KHZoneT-SCS15KHZhalfT SEQUENCE (SIZE (1..maxPEI-perPF-r17)) OF INTEGER (0..279),
+ sCS60KHZoneT-SCS30KHZhalfT-SCS15KHZquarterT SEQUENCE (SIZE (1..maxPEI-perPF-r17)) OF INTEGER (0..559),
+ sCS120KHZoneT-SCS60KHZhalfT-SCS30KHZquarterT-SCS15KHZoneEighthT SEQUENCE (SIZE (1..maxPEI-perPF-r17)) OF INTEGER (0..1119),
+ sCS120KHZhalfT-SCS60KHZquarterT-SCS30KHZoneEighthT-SCS15KHZoneSixteenthT SEQUENCE (SIZE (1..maxPEI-perPF-r17)) OF INTEGER (0..2239),
+ sCS480KHZoneT-SCS120KHZquarterT-SCS60KHZoneEighthT-SCS30KHZoneSixteenthT SEQUENCE (SIZE (1..maxPEI-perPF-r17)) OF INTEGER (0..4479),
+ sCS480KHZhalfT-SCS120KHZoneEighthT-SCS60KHZoneSixteenthT SEQUENCE (SIZE (1..maxPEI-perPF-r17)) OF INTEGER (0..8959),
+ sCS480KHZquarterT-SCS120KHZoneSixteenthT SEQUENCE (SIZE (1..maxPEI-perPF-r17)) OF INTEGER (0..17919),
+ sCS480KHZoneEighthT SEQUENCE (SIZE (1..maxPEI-perPF-r17)) OF INTEGER (0..35839),
+ sCS480KHZoneSixteenthT SEQUENCE (SIZE (1..maxPEI-perPF-r17)) OF INTEGER (0..71679)
+ }
+ } OPTIONAL -- Cond InitialBWP-Paging
+ ]],
+ [[
+ followUnifiedTCI-State-v1720 ENUMERATED {enabled} OPTIONAL -- Need R
+ ]]
+}
+
+-- TAG-PDCCH-CONFIGCOMMON-STOP
+-- TAG-PDCCH-CONFIGSIB1-START
+
+PDCCH-ConfigSIB1 ::= SEQUENCE {
+ controlResourceSetZero ControlResourceSetZero,
+ searchSpaceZero SearchSpaceZero
+}
+
+-- TAG-PDCCH-CONFIGSIB1-STOP
+-- TAG-PDCCH-SERVINGCELLCONFIG-START
+
+PDCCH-ServingCellConfig ::= SEQUENCE {
+ slotFormatIndicator SetupRelease { SlotFormatIndicator } OPTIONAL, -- Need M
+ ...,
+ [[
+ availabilityIndicator-r16 SetupRelease {AvailabilityIndicator-r16} OPTIONAL, -- Need M
+ searchSpaceSwitchTimer-r16 INTEGER (1..80) OPTIONAL -- Need R
+ ]],
+ [[
+ searchSpaceSwitchTimer-v1710 INTEGER (81..1280) OPTIONAL -- Need R
+ ]]
+}
+
+-- TAG-PDCCH-SERVINGCELLCONFIG-STOP
+-- TAG-PDCP-CONFIG-START
+
+PDCP-Config ::= SEQUENCE {
+ drb SEQUENCE {
+ discardTimer ENUMERATED {ms10, ms20, ms30, ms40, ms50, ms60, ms75, ms100, ms150, ms200,
+ ms250, ms300, ms500, ms750, ms1500, infinity} OPTIONAL, -- Cond Setup
+ pdcp-SN-SizeUL ENUMERATED {len12bits, len18bits} OPTIONAL, -- Cond Setup1
+ pdcp-SN-SizeDL ENUMERATED {len12bits, len18bits} OPTIONAL, -- Cond Setup2
+ headerCompression CHOICE {
+ notUsed NULL,
+ rohc SEQUENCE {
+ maxCID INTEGER (1..16383) DEFAULT 15,
+ profiles SEQUENCE {
+ profile0x0001 BOOLEAN,
+ profile0x0002 BOOLEAN,
+ profile0x0003 BOOLEAN,
+ profile0x0004 BOOLEAN,
+ profile0x0006 BOOLEAN,
+ profile0x0101 BOOLEAN,
+ profile0x0102 BOOLEAN,
+ profile0x0103 BOOLEAN,
+ profile0x0104 BOOLEAN
+ },
+ drb-ContinueROHC ENUMERATED { true } OPTIONAL -- Need N
+ },
+ uplinkOnlyROHC SEQUENCE {
+ maxCID INTEGER (1..16383) DEFAULT 15,
+ profiles SEQUENCE {
+ profile0x0006 BOOLEAN
+ },
+ drb-ContinueROHC ENUMERATED { true } OPTIONAL -- Need N
+ },
+ ...
+ },
+ integrityProtection ENUMERATED { enabled } OPTIONAL, -- Cond ConnectedTo5GC1
+ statusReportRequired ENUMERATED { true } OPTIONAL, -- Cond Rlc-AM-UM
+ outOfOrderDelivery ENUMERATED { true } OPTIONAL -- Need R
+ } OPTIONAL, -- Cond DRB
+ moreThanOneRLC SEQUENCE {
+ primaryPath SEQUENCE {
+ cellGroup CellGroupId OPTIONAL, -- Need R
+ logicalChannel LogicalChannelIdentity OPTIONAL -- Need R
+ },
+ ul-DataSplitThreshold UL-DataSplitThreshold OPTIONAL, -- Cond SplitBearer
+ pdcp-Duplication BOOLEAN OPTIONAL -- Need R
+ } OPTIONAL, -- Cond MoreThanOneRLC
+
+ t-Reordering ENUMERATED {
+ ms0, ms1, ms2, ms4, ms5, ms8, ms10, ms15, ms20, ms30, ms40,
+ ms50, ms60, ms80, ms100, ms120, ms140, ms160, ms180, ms200, ms220,
+ ms240, ms260, ms280, ms300, ms500, ms750, ms1000, ms1250,
+ ms1500, ms1750, ms2000, ms2250, ms2500, ms2750,
+ ms3000, spare28, spare27, spare26, spare25, spare24,
+ spare23, spare22, spare21, spare20,
+ spare19, spare18, spare17, spare16, spare15, spare14,
+ spare13, spare12, spare11, spare10, spare09,
+ spare08, spare07, spare06, spare05, spare04, spare03,
+ spare02, spare01 } OPTIONAL, -- Need S
+ ...,
+ [[
+ cipheringDisabled ENUMERATED {true} OPTIONAL -- Cond ConnectedTo5GC
+ ]],
+ [[
+ discardTimerExt-r16 SetupRelease { DiscardTimerExt-r16 } OPTIONAL, -- Cond DRB2
+ moreThanTwoRLC-DRB-r16 SEQUENCE {
+ splitSecondaryPath-r16 LogicalChannelIdentity OPTIONAL, -- Cond SplitBearer2
+ duplicationState-r16 SEQUENCE (SIZE (3)) OF BOOLEAN OPTIONAL -- Need S
+ } OPTIONAL, -- Cond MoreThanTwoRLC-DRB
+ ethernetHeaderCompression-r16 SetupRelease { EthernetHeaderCompression-r16 } OPTIONAL -- Need M
+ ]],
+ [[
+ survivalTimeStateSupport-r17 ENUMERATED {true} OPTIONAL, -- Cond Drb-Duplication
+ uplinkDataCompression-r17 SetupRelease { UplinkDataCompression-r17 } OPTIONAL, -- Cond Rlc-AM
+ discardTimerExt2-r17 SetupRelease { DiscardTimerExt2-r17 } OPTIONAL, -- Need M
+ initialRX-DELIV-r17 BIT STRING (SIZE (32)) OPTIONAL -- Cond MRB-Initialization
+ ]]
+}
+
+EthernetHeaderCompression-r16 ::= SEQUENCE {
+ ehc-Common-r16 SEQUENCE {
+ ehc-CID-Length-r16 ENUMERATED { bits7, bits15 },
+ ...
+ },
+ ehc-Downlink-r16 SEQUENCE {
+ drb-ContinueEHC-DL-r16 ENUMERATED { true } OPTIONAL, -- Need N
+ ...
+ } OPTIONAL, -- Need M
+ ehc-Uplink-r16 SEQUENCE {
+ maxCID-EHC-UL-r16 INTEGER (1..32767),
+ drb-ContinueEHC-UL-r16 ENUMERATED { true } OPTIONAL, -- Need N
+ ...
+ } OPTIONAL -- Need M
+}
+
+UL-DataSplitThreshold ::= ENUMERATED {
+ b0, b100, b200, b400, b800, b1600, b3200, b6400, b12800, b25600, b51200, b102400, b204800,
+ b409600, b819200, b1228800, b1638400, b2457600, b3276800, b4096000, b4915200, b5734400,
+ b6553600, infinity, spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1}
+
+DiscardTimerExt-r16 ::= ENUMERATED {ms0dot5, ms1, ms2, ms4, ms6, ms8, spare2, spare1}
+
+DiscardTimerExt2-r17 ::= ENUMERATED {ms2000, spare3, spare2, spare1}
+
+UplinkDataCompression-r17 ::= CHOICE {
+ newSetup SEQUENCE {
+ bufferSize-r17 ENUMERATED {kbyte2, kbyte4, kbyte8, spare1},
+ dictionary-r17 ENUMERATED {sip-SDP, operator} OPTIONAL -- Need N
+ },
+ drb-ContinueUDC NULL
+}
+
+-- TAG-PDCP-CONFIG-STOP
+-- TAG-PDSCH-CONFIG-START
+
+PDSCH-Config ::= SEQUENCE {
+ dataScramblingIdentityPDSCH INTEGER (0..1023) OPTIONAL, -- Need S
+ dmrs-DownlinkForPDSCH-MappingTypeA SetupRelease { DMRS-DownlinkConfig } OPTIONAL, -- Need M
+ dmrs-DownlinkForPDSCH-MappingTypeB SetupRelease { DMRS-DownlinkConfig } OPTIONAL, -- Need M
+
+ tci-StatesToAddModList SEQUENCE (SIZE(1..maxNrofTCI-States)) OF TCI-State OPTIONAL, -- Need N
+ tci-StatesToReleaseList SEQUENCE (SIZE(1..maxNrofTCI-States)) OF TCI-StateId OPTIONAL, -- Need N
+ vrb-ToPRB-Interleaver ENUMERATED {n2, n4} OPTIONAL, -- Need S
+ resourceAllocation ENUMERATED { resourceAllocationType0, resourceAllocationType1, dynamicSwitch},
+ pdsch-TimeDomainAllocationList SetupRelease { PDSCH-TimeDomainResourceAllocationList } OPTIONAL, -- Need M
+ pdsch-AggregationFactor ENUMERATED { n2, n4, n8 } OPTIONAL, -- Need S
+ rateMatchPatternToAddModList SEQUENCE (SIZE (1..maxNrofRateMatchPatterns)) OF RateMatchPattern OPTIONAL, -- Need N
+ rateMatchPatternToReleaseList SEQUENCE (SIZE (1..maxNrofRateMatchPatterns)) OF RateMatchPatternId OPTIONAL, -- Need N
+ rateMatchPatternGroup1 RateMatchPatternGroup OPTIONAL, -- Need R
+ rateMatchPatternGroup2 RateMatchPatternGroup OPTIONAL, -- Need R
+
+ rbg-Size ENUMERATED {config1, config2},
+ mcs-Table ENUMERATED {qam256, qam64LowSE} OPTIONAL, -- Need S
+ maxNrofCodeWordsScheduledByDCI ENUMERATED {n1, n2} OPTIONAL, -- Need R
+
+ prb-BundlingType CHOICE {
+ staticBundling SEQUENCE {
+ bundleSize ENUMERATED { n4, wideband } OPTIONAL -- Need S
+ },
+ dynamicBundling SEQUENCE {
+ bundleSizeSet1 ENUMERATED { n4, wideband, n2-wideband, n4-wideband } OPTIONAL, -- Need S
+ bundleSizeSet2 ENUMERATED { n4, wideband } OPTIONAL -- Need S
+ }
+ },
+ zp-CSI-RS-ResourceToAddModList SEQUENCE (SIZE (1..maxNrofZP-CSI-RS-Resources)) OF ZP-CSI-RS-Resource
+ OPTIONAL, -- Need N
+ zp-CSI-RS-ResourceToReleaseList SEQUENCE (SIZE (1..maxNrofZP-CSI-RS-Resources)) OF ZP-CSI-RS-ResourceId
+ OPTIONAL, -- Need N
+ aperiodic-ZP-CSI-RS-ResourceSetsToAddModList SEQUENCE (SIZE (1..maxNrofZP-CSI-RS-ResourceSets)) OF ZP-CSI-RS-ResourceSet
+ OPTIONAL, -- Need N
+ aperiodic-ZP-CSI-RS-ResourceSetsToReleaseList SEQUENCE (SIZE (1..maxNrofZP-CSI-RS-ResourceSets)) OF ZP-CSI-RS-ResourceSetId
+ OPTIONAL, -- Need N
+ sp-ZP-CSI-RS-ResourceSetsToAddModList SEQUENCE (SIZE (1..maxNrofZP-CSI-RS-ResourceSets)) OF ZP-CSI-RS-ResourceSet
+ OPTIONAL, -- Need N
+ sp-ZP-CSI-RS-ResourceSetsToReleaseList SEQUENCE (SIZE (1..maxNrofZP-CSI-RS-ResourceSets)) OF ZP-CSI-RS-ResourceSetId
+ OPTIONAL, -- Need N
+ p-ZP-CSI-RS-ResourceSet SetupRelease { ZP-CSI-RS-ResourceSet }
+ OPTIONAL, -- Need M
+ ...,
+ [[
+ maxMIMO-Layers-r16 SetupRelease { MaxMIMO-LayersDL-r16 } OPTIONAL, -- Need M
+ minimumSchedulingOffsetK0-r16 SetupRelease { MinSchedulingOffsetK0-Values-r16 } OPTIONAL, -- Need M
+
+ -- Start of the parameters for DCI format 1_2 introduced in V16.1.0
+ antennaPortsFieldPresenceDCI-1-2-r16 ENUMERATED {enabled} OPTIONAL, -- Need S
+ aperiodicZP-CSI-RS-ResourceSetsToAddModListDCI-1-2-r16 SEQUENCE (SIZE (1..maxNrofZP-CSI-RS-ResourceSets)) OF ZP-CSI-RS-ResourceSet
+ OPTIONAL, -- Need N
+ aperiodicZP-CSI-RS-ResourceSetsToReleaseListDCI-1-2-r16 SEQUENCE (SIZE (1..maxNrofZP-CSI-RS-ResourceSets)) OF ZP-CSI-RS-ResourceSetId
+ OPTIONAL, -- Need N
+ dmrs-DownlinkForPDSCH-MappingTypeA-DCI-1-2-r16 SetupRelease { DMRS-DownlinkConfig } OPTIONAL, -- Need M
+ dmrs-DownlinkForPDSCH-MappingTypeB-DCI-1-2-r16 SetupRelease { DMRS-DownlinkConfig } OPTIONAL, -- Need M
+ dmrs-SequenceInitializationDCI-1-2-r16 ENUMERATED {enabled} OPTIONAL, -- Need S
+ harq-ProcessNumberSizeDCI-1-2-r16 INTEGER (0..4) OPTIONAL, -- Need R
+ mcs-TableDCI-1-2-r16 ENUMERATED {qam256, qam64LowSE} OPTIONAL, -- Need S
+ numberOfBitsForRV-DCI-1-2-r16 INTEGER (0..2) OPTIONAL, -- Need R
+ pdsch-TimeDomainAllocationListDCI-1-2-r16 SetupRelease { PDSCH-TimeDomainResourceAllocationList-r16 }
+ OPTIONAL, -- Need M
+ prb-BundlingTypeDCI-1-2-r16 CHOICE {
+ staticBundling-r16 SEQUENCE {
+ bundleSize-r16 ENUMERATED { n4, wideband } OPTIONAL -- Need S
+ },
+ dynamicBundling-r16 SEQUENCE {
+ bundleSizeSet1-r16 ENUMERATED { n4, wideband, n2-wideband, n4-wideband } OPTIONAL, -- Need S
+ bundleSizeSet2-r16 ENUMERATED { n4, wideband } OPTIONAL -- Need S
+ }
+ } OPTIONAL, -- Need R
+ priorityIndicatorDCI-1-2-r16 ENUMERATED {enabled} OPTIONAL, -- Need S
+ rateMatchPatternGroup1DCI-1-2-r16 RateMatchPatternGroup OPTIONAL, -- Need R
+ rateMatchPatternGroup2DCI-1-2-r16 RateMatchPatternGroup OPTIONAL, -- Need R
+ resourceAllocationType1GranularityDCI-1-2-r16 ENUMERATED {n2,n4,n8,n16} OPTIONAL, -- Need S
+ vrb-ToPRB-InterleaverDCI-1-2-r16 ENUMERATED {n2, n4} OPTIONAL, -- Need S
+ referenceOfSLIVDCI-1-2-r16 ENUMERATED {enabled} OPTIONAL, -- Need S
+ resourceAllocationDCI-1-2-r16 ENUMERATED { resourceAllocationType0, resourceAllocationType1, dynamicSwitch}
+ OPTIONAL, -- Need M
+ -- End of the parameters for DCI format 1_2 introduced in V16.1.0
+
+ priorityIndicatorDCI-1-1-r16 ENUMERATED {enabled} OPTIONAL, -- Need S
+ dataScramblingIdentityPDSCH2-r16 INTEGER (0..1023) OPTIONAL, -- Need R
+ pdsch-TimeDomainAllocationList-r16 SetupRelease { PDSCH-TimeDomainResourceAllocationList-r16 } OPTIONAL, -- Need M
+ repetitionSchemeConfig-r16 SetupRelease { RepetitionSchemeConfig-r16} OPTIONAL -- Need M
+ ]],
+ [[
+ repetitionSchemeConfig-v1630 SetupRelease { RepetitionSchemeConfig-v1630} OPTIONAL -- Need M
+ ]],
+ [[
+ pdsch-HARQ-ACK-OneShotFeedbackDCI-1-2-r17 ENUMERATED {enabled} OPTIONAL, -- Need R
+ pdsch-HARQ-ACK-EnhType3DCI-1-2-r17 ENUMERATED {enabled} OPTIONAL, -- Need R
+ pdsch-HARQ-ACK-EnhType3DCI-Field-1-2-r17 ENUMERATED {enabled} OPTIONAL, -- Need R
+ pdsch-HARQ-ACK-RetxDCI-1-2-r17 ENUMERATED {enabled} OPTIONAL, -- Need R
+ pucch-sSCellDynDCI-1-2-r17 ENUMERATED {enabled} OPTIONAL, -- Need R
+ dl-OrJointTCI-StateList-r17 CHOICE {
+ explicitlist SEQUENCE {
+ dl-OrJointTCI-StateToAddModList-r17 SEQUENCE (SIZE (1..maxNrofTCI-States)) OF TCI-State
+ OPTIONAL, -- Need N
+ dl-OrJointTCI-StateToReleaseList-r17 SEQUENCE (SIZE (1..maxNrofTCI-States)) OF TCI-StateId
+ OPTIONAL -- Need N
+ },
+ unifiedTCI-StateRef-r17 ServingCellAndBWP-Id-r17
+ } OPTIONAL, -- Need R
+ beamAppTime-r17 ENUMERATED {n1, n2, n4, n7, n14, n28, n42, n56, n70, n84, n98, n112, n224, n336, spare2,
+ spare1} OPTIONAL, -- Need R
+ dummy SetupRelease { Dummy-TDRA-List } OPTIONAL, -- Need M
+ dmrs-FD-OCC-DisabledForRank1-PDSCH-r17 ENUMERATED {true} OPTIONAL, -- Need R
+ minimumSchedulingOffsetK0-r17 SetupRelease { MinSchedulingOffsetK0-Values-r17 } OPTIONAL, -- Need M
+ harq-ProcessNumberSizeDCI-1-2-v1700 INTEGER (0..5) OPTIONAL, -- Need R
+ harq-ProcessNumberSizeDCI-1-1-r17 INTEGER (5) OPTIONAL, -- Need R
+ mcs-Table-r17 ENUMERATED {qam1024} OPTIONAL, -- Need R
+ mcs-TableDCI-1-2-r17 ENUMERATED {qam1024} OPTIONAL, -- Need R
+ xOverheadMulticast-r17 ENUMERATED {xOh6, xOh12, xOh18} OPTIONAL, -- Need S
+ priorityIndicatorDCI-4-2-r17 ENUMERATED {enabled} OPTIONAL, -- Need S
+ sizeDCI-4-2-r17 INTEGER (20..maxDCI-4-2-Size-r17) OPTIONAL -- Need R
+ ]],
+ [[
+ pdsch-TimeDomainAllocationListForMultiPDSCH-r17 SetupRelease { MultiPDSCH-TDRA-List-r17 } OPTIONAL -- Need M
+ ]]
+}
+
+RateMatchPatternGroup ::= SEQUENCE (SIZE (1..maxNrofRateMatchPatternsPerGroup)) OF CHOICE {
+ cellLevel RateMatchPatternId,
+ bwpLevel RateMatchPatternId
+}
+
+MinSchedulingOffsetK0-Values-r16 ::= SEQUENCE (SIZE (1..maxNrOfMinSchedulingOffsetValues-r16)) OF INTEGER (0..maxK0-SchedulingOffset-r16)
+
+MinSchedulingOffsetK0-Values-r17 ::= SEQUENCE (SIZE (1..maxNrOfMinSchedulingOffsetValues-r16)) OF INTEGER (0..maxK0-SchedulingOffset-r17)
+
+MaxMIMO-LayersDL-r16 ::= INTEGER (1..8)
+
+-- TAG-PDSCH-CONFIG-STOP
+-- TAG-PDSCH-CONFIGCOMMON-START
+
+PDSCH-ConfigCommon ::= SEQUENCE {
+ pdsch-TimeDomainAllocationList PDSCH-TimeDomainResourceAllocationList OPTIONAL, -- Need R
+ ...
+}
+
+-- TAG-PDSCH-CONFIGCOMMON-STOP
+-- TAG-PDSCH-SERVINGCELLCONFIG-START
+
+PDSCH-ServingCellConfig ::= SEQUENCE {
+ codeBlockGroupTransmission SetupRelease { PDSCH-CodeBlockGroupTransmission } OPTIONAL, -- Need M
+ xOverhead ENUMERATED { xOh6, xOh12, xOh18 } OPTIONAL, -- Need S
+ nrofHARQ-ProcessesForPDSCH ENUMERATED {n2, n4, n6, n10, n12, n16} OPTIONAL, -- Need S
+ pucch-Cell ServCellIndex OPTIONAL, -- Cond SCellAddOnly
+ ...,
+ [[
+ maxMIMO-Layers INTEGER (1..8) OPTIONAL, -- Need M
+ processingType2Enabled BOOLEAN OPTIONAL -- Need M
+ ]],
+ [[
+ pdsch-CodeBlockGroupTransmissionList-r16 SetupRelease { PDSCH-CodeBlockGroupTransmissionList-r16 } OPTIONAL -- Need M
+ ]],
+ [[
+ downlinkHARQ-FeedbackDisabled-r17 SetupRelease { DownlinkHARQ-FeedbackDisabled-r17 } OPTIONAL, -- Need M
+ nrofHARQ-ProcessesForPDSCH-v1700 ENUMERATED {n32} OPTIONAL -- Need R
+ ]]
+}
+
+PDSCH-CodeBlockGroupTransmission ::= SEQUENCE {
+ maxCodeBlockGroupsPerTransportBlock ENUMERATED {n2, n4, n6, n8},
+ codeBlockGroupFlushIndicator BOOLEAN,
+ ...
+}
+
+PDSCH-CodeBlockGroupTransmissionList-r16 ::= SEQUENCE (SIZE (1..2)) OF PDSCH-CodeBlockGroupTransmission
+
+DownlinkHARQ-FeedbackDisabled-r17 ::= BIT STRING (SIZE (32))
+
+-- TAG-PDSCH-SERVINGCELLCONFIG-STOP
+-- TAG-PDSCH-TIMEDOMAINRESOURCEALLOCATIONLIST-START
+
+
+PDSCH-TimeDomainResourceAllocationList ::= SEQUENCE (SIZE(1..maxNrofDL-Allocations)) OF PDSCH-TimeDomainResourceAllocation
+
+PDSCH-TimeDomainResourceAllocation ::= SEQUENCE {
+ k0 INTEGER(0..32) OPTIONAL, -- Need S
+ mappingType ENUMERATED {typeA, typeB},
+ startSymbolAndLength INTEGER (0..127)
+}
+
+PDSCH-TimeDomainResourceAllocationList-r16 ::= SEQUENCE (SIZE(1..maxNrofDL-Allocations)) OF PDSCH-TimeDomainResourceAllocation-r16
+
+PDSCH-TimeDomainResourceAllocation-r16 ::= SEQUENCE {
+ k0-r16 INTEGER(0..32) OPTIONAL, -- Need S
+ mappingType-r16 ENUMERATED {typeA, typeB},
+ startSymbolAndLength-r16 INTEGER (0..127),
+ repetitionNumber-r16 ENUMERATED {n2, n3, n4, n5, n6, n7, n8, n16} OPTIONAL, -- Cond Formats1-0and1-1
+ ...,
+ [[
+ k0-v1710 INTEGER(33..128) OPTIONAL -- Need S
+ ]],
+ [[
+ repetitionNumber-v1730 ENUMERATED {n2, n3, n4, n5, n6, n7, n8, n16} OPTIONAL -- Cond Format1-2
+ ]]
+}
+
+Dummy-TDRA-List ::= SEQUENCE (SIZE(1.. maxNrofDL-Allocations)) OF MultiPDSCH-TDRA-r17
+
+MultiPDSCH-TDRA-List-r17 ::= SEQUENCE (SIZE(1.. maxNrofDL-AllocationsExt-r17)) OF MultiPDSCH-TDRA-r17
+
+MultiPDSCH-TDRA-r17 ::= SEQUENCE {
+ pdsch-TDRA-List-r17 SEQUENCE (SIZE(1..maxNrofMultiplePDSCHs-r17)) OF PDSCH-TimeDomainResourceAllocation-r16,
+ ...
+}
+
+-- TAG-PDSCH-TIMEDOMAINRESOURCEALLOCATIONLIST-STOP
+-- TAG-PHR-CONFIG-START
+
+PHR-Config ::= SEQUENCE {
+ phr-PeriodicTimer ENUMERATED {sf10, sf20, sf50, sf100, sf200,sf500, sf1000, infinity},
+ phr-ProhibitTimer ENUMERATED {sf0, sf10, sf20, sf50, sf100,sf200, sf500, sf1000},
+ phr-Tx-PowerFactorChange ENUMERATED {dB1, dB3, dB6, infinity},
+ multiplePHR BOOLEAN,
+ dummy BOOLEAN,
+ phr-Type2OtherCell BOOLEAN,
+ phr-ModeOtherCG ENUMERATED {real, virtual},
+ ...,
+ [[
+ mpe-Reporting-FR2-r16 SetupRelease { MPE-Config-FR2-r16 } OPTIONAL -- Need M
+ ]],
+ [[
+ mpe-Reporting-FR2-r17 SetupRelease { MPE-Config-FR2-r17 } OPTIONAL, -- Need M
+ twoPHRMode-r17 ENUMERATED {enabled} OPTIONAL -- Need R
+ ]]
+}
+
+MPE-Config-FR2-r16 ::= SEQUENCE {
+ mpe-ProhibitTimer-r16 ENUMERATED {sf0, sf10, sf20, sf50, sf100, sf200, sf500, sf1000},
+ mpe-Threshold-r16 ENUMERATED {dB3, dB6, dB9, dB12}
+}
+
+MPE-Config-FR2-r17 ::= SEQUENCE {
+ mpe-ProhibitTimer-r17 ENUMERATED {sf0, sf10, sf20, sf50, sf100, sf200, sf500, sf1000},
+ mpe-Threshold-r17 ENUMERATED {dB3, dB6, dB9, dB12},
+ numberOfN-r17 INTEGER(1..4),
+ ...
+}
+
+-- TAG-PHR-CONFIG-STOP
+-- TAG-PHYSCELLID-START
+
+PhysCellId ::= INTEGER (0..1007)
+
+-- TAG-PHYSCELLID-STOP
+-- TAG-PHYSICALCELLGROUPCONFIG-START
+
+PhysicalCellGroupConfig ::= SEQUENCE {
+ harq-ACK-SpatialBundlingPUCCH ENUMERATED {true} OPTIONAL, -- Need S
+ harq-ACK-SpatialBundlingPUSCH ENUMERATED {true} OPTIONAL, -- Need S
+ p-NR-FR1 P-Max OPTIONAL, -- Need R
+ pdsch-HARQ-ACK-Codebook ENUMERATED {semiStatic, dynamic},
+ tpc-SRS-RNTI RNTI-Value OPTIONAL, -- Need R
+ tpc-PUCCH-RNTI RNTI-Value OPTIONAL, -- Need R
+ tpc-PUSCH-RNTI RNTI-Value OPTIONAL, -- Need R
+ sp-CSI-RNTI RNTI-Value OPTIONAL, -- Need R
+ cs-RNTI SetupRelease { RNTI-Value } OPTIONAL, -- Need M
+ ...,
+ [[
+ mcs-C-RNTI RNTI-Value OPTIONAL, -- Need R
+ p-UE-FR1 P-Max OPTIONAL -- Cond MCG-Only
+ ]],
+ [[
+ xScale ENUMERATED {dB0, dB6, spare2, spare1} OPTIONAL -- Cond SCG-Only
+ ]],
+ [[
+ pdcch-BlindDetection SetupRelease { PDCCH-BlindDetection } OPTIONAL -- Need M
+ ]],
+ [[
+ dcp-Config-r16 SetupRelease { DCP-Config-r16 } OPTIONAL, -- Need M
+ harq-ACK-SpatialBundlingPUCCH-secondaryPUCCHgroup-r16 ENUMERATED {enabled, disabled} OPTIONAL, -- Cond twoPUCCHgroup
+ harq-ACK-SpatialBundlingPUSCH-secondaryPUCCHgroup-r16 ENUMERATED {enabled, disabled} OPTIONAL, -- Cond twoPUCCHgroup
+ pdsch-HARQ-ACK-Codebook-secondaryPUCCHgroup-r16 ENUMERATED {semiStatic, dynamic} OPTIONAL, -- Cond twoPUCCHgroup
+ p-NR-FR2-r16 P-Max OPTIONAL, -- Need R
+ p-UE-FR2-r16 P-Max OPTIONAL, -- Cond MCG-Only
+ nrdc-PCmode-FR1-r16 ENUMERATED {semi-static-mode1, semi-static-mode2, dynamic} OPTIONAL, -- Cond MCG-Only
+ nrdc-PCmode-FR2-r16 ENUMERATED {semi-static-mode1, semi-static-mode2, dynamic} OPTIONAL, -- Cond MCG-Only
+ pdsch-HARQ-ACK-Codebook-r16 ENUMERATED {enhancedDynamic} OPTIONAL, -- Need R
+ nfi-TotalDAI-Included-r16 ENUMERATED {true} OPTIONAL, -- Need R
+ ul-TotalDAI-Included-r16 ENUMERATED {true} OPTIONAL, -- Need R
+ pdsch-HARQ-ACK-OneShotFeedback-r16 ENUMERATED {true} OPTIONAL, -- Need R
+ pdsch-HARQ-ACK-OneShotFeedbackNDI-r16 ENUMERATED {true} OPTIONAL, -- Need R
+ pdsch-HARQ-ACK-OneShotFeedbackCBG-r16 ENUMERATED {true} OPTIONAL, -- Need R
+ downlinkAssignmentIndexDCI-0-2-r16 ENUMERATED { enabled } OPTIONAL, -- Need S
+ downlinkAssignmentIndexDCI-1-2-r16 ENUMERATED {n1, n2, n4} OPTIONAL, -- Need S
+ pdsch-HARQ-ACK-CodebookList-r16 SetupRelease {PDSCH-HARQ-ACK-CodebookList-r16} OPTIONAL, -- Need M
+ ackNackFeedbackMode-r16 ENUMERATED {joint, separate} OPTIONAL, -- Need R
+ pdcch-BlindDetectionCA-CombIndicator-r16 SetupRelease { PDCCH-BlindDetectionCA-CombIndicator-r16 } OPTIONAL, -- Need M
+ pdcch-BlindDetection2-r16 SetupRelease { PDCCH-BlindDetection2-r16 } OPTIONAL, -- Need M
+ pdcch-BlindDetection3-r16 SetupRelease { PDCCH-BlindDetection3-r16 } OPTIONAL, -- Need M
+ bdFactorR-r16 ENUMERATED {n1} OPTIONAL -- Need R
+ ]],
+ [[
+ -- start of enhanced Type3 feedback
+ pdsch-HARQ-ACK-EnhType3ToAddModList-r17 SEQUENCE (SIZE(1..maxNrofEnhType3HARQ-ACK-r17)) OF PDSCH-HARQ-ACK-EnhType3-r17
+ OPTIONAL, -- Need N
+ pdsch-HARQ-ACK-EnhType3ToReleaseList-r17 SEQUENCE (SIZE(1..maxNrofEnhType3HARQ-ACK-r17)) OF PDSCH-HARQ-ACK-EnhType3Index-r17
+ OPTIONAL, -- Need N
+ pdsch-HARQ-ACK-EnhType3SecondaryToAddModList-r17 SEQUENCE (SIZE(1..maxNrofEnhType3HARQ-ACK-r17)) OF PDSCH-HARQ-ACK-EnhType3-r17
+ OPTIONAL, -- Need N
+ pdsch-HARQ-ACK-EnhType3SecondaryToReleaseList-r17 SEQUENCE (SIZE(1..maxNrofEnhType3HARQ-ACK-r17)) OF PDSCH-HARQ-ACK-EnhType3Index-r17
+ OPTIONAL, -- Need N
+ pdsch-HARQ-ACK-EnhType3DCI-FieldSecondaryPUCCHgroup-r17 ENUMERATED {enabled} OPTIONAL, -- Cond twoPUCCHgroup
+ pdsch-HARQ-ACK-EnhType3DCI-Field-r17 ENUMERATED {enabled} OPTIONAL, -- Need R
+ -- end of enhanced Type3 feedback
+
+ -- start of triggering of HARQ-ACK re-transmission on a PUCCH resource
+ pdsch-HARQ-ACK-Retx-r17 ENUMERATED {enabled} OPTIONAL, -- Need R
+ pdsch-HARQ-ACK-RetxSecondaryPUCCHgroup-r17 ENUMERATED {enabled} OPTIONAL, -- Cond twoPUCCHgroup
+ -- end of triggering of HARQ-ACK re-transmission on a PUCCH resource
+
+ -- start of PUCCH Cell switching
+ pucch-sSCell-r17 SCellIndex OPTIONAL, -- Need R
+ pucch-sSCellSecondaryPUCCHgroup-r17 SCellIndex OPTIONAL, -- Cond twoPUCCHgroup
+ pucch-sSCellDyn-r17 ENUMERATED {enabled} OPTIONAL, -- Need R
+ pucch-sSCellDynSecondaryPUCCHgroup-r17 ENUMERATED {enabled} OPTIONAL, -- Cond twoPUCCHgroup
+ pucch-sSCellPattern-r17 SEQUENCE (SIZE(1..maxNrofSlots)) OF INTEGER (0..1) OPTIONAL, -- Need R
+ pucch-sSCellPatternSecondaryPUCCHgroup-r17 SEQUENCE (SIZE(1..maxNrofSlots)) OF INTEGER (0..1) OPTIONAL, -- Cond twoPUCCHgroup
+ -- end of PUCCH Cell switching
+
+ uci-MuxWithDiffPrio-r17 ENUMERATED {enabled} OPTIONAL, -- Need R
+ uci-MuxWithDiffPrioSecondaryPUCCHgroup-r17 ENUMERATED {enabled} OPTIONAL, -- Cond twoPUCCHgroup
+ simultaneousPUCCH-PUSCH-r17 ENUMERATED {enabled} OPTIONAL, -- Need R
+ simultaneousPUCCH-PUSCH-SecondaryPUCCHgroup-r17 ENUMERATED {enabled} OPTIONAL, -- Cond twoPUCCHgroup
+
+ prioLowDG-HighCG-r17 ENUMERATED {enabled} OPTIONAL, -- Need R
+ prioHighDG-LowCG-r17 ENUMERATED {enabled} OPTIONAL, -- Need R
+ twoQCLTypeDforPDCCHRepetition-r17 ENUMERATED {enabled} OPTIONAL, -- Need R
+ multicastConfig-r17 SetupRelease { MulticastConfig-r17 } OPTIONAL, -- Need M
+ pdcch-BlindDetectionCA-CombIndicator-r17 SetupRelease { PDCCH-BlindDetectionCA-CombIndicator-r17 } OPTIONAL -- Need M
+ ]],
+ [[
+ simultaneousSR-PUSCH-diffPUCCH-Groups-r17 ENUMERATED {enabled} OPTIONAL -- Cond twoPUCCHgroup
+ ]],
+ [[
+ intraBandNC-PRACH-simulTx-r17 ENUMERATED {enabled} OPTIONAL -- Need R
+ ]]
+}
+
+
+PDSCH-HARQ-ACK-EnhType3-r17 ::= SEQUENCE {
+ pdsch-HARQ-ACK-EnhType3Index-r17 PDSCH-HARQ-ACK-EnhType3Index-r17,
+ applicable-r17 CHOICE {
+ perCC SEQUENCE (SIZE (1..maxNrofServingCells)) OF INTEGER (0..1),
+ perHARQ SEQUENCE (SIZE (1..maxNrofServingCells)) OF BIT STRING (SIZE (16))
+ },
+ pdsch-HARQ-ACK-EnhType3NDI-r17 ENUMERATED {true} OPTIONAL, -- Need R
+ pdsch-HARQ-ACK-EnhType3CBG-r17 ENUMERATED {true} OPTIONAL, -- Need S
+ ...
+}
+
+PDSCH-HARQ-ACK-EnhType3Index-r17 ::= INTEGER (0..maxNrofEnhType3HARQ-ACK-1-r17)
+
+PDCCH-BlindDetection ::= INTEGER (1..15)
+
+DCP-Config-r16 ::= SEQUENCE {
+ ps-RNTI-r16 RNTI-Value,
+ ps-Offset-r16 INTEGER (1..120),
+ sizeDCI-2-6-r16 INTEGER (1..maxDCI-2-6-Size-r16),
+ ps-PositionDCI-2-6-r16 INTEGER (0..maxDCI-2-6-Size-1-r16),
+ ps-WakeUp-r16 ENUMERATED {true} OPTIONAL, -- Need S
+ ps-TransmitPeriodicL1-RSRP-r16 ENUMERATED {true} OPTIONAL, -- Need S
+ ps-TransmitOtherPeriodicCSI-r16 ENUMERATED {true} OPTIONAL -- Need S
+}
+
+PDSCH-HARQ-ACK-CodebookList-r16 ::= SEQUENCE (SIZE (1..2)) OF ENUMERATED {semiStatic, dynamic}
+
+PDCCH-BlindDetectionCA-CombIndicator-r16 ::= SEQUENCE {
+ pdcch-BlindDetectionCA1-r16 INTEGER (1..15),
+ pdcch-BlindDetectionCA2-r16 INTEGER (1..15)
+}
+
+PDCCH-BlindDetection2-r16 ::= INTEGER (1..15)
+
+PDCCH-BlindDetection3-r16 ::= INTEGER (1..15)
+
+MulticastConfig-r17 ::= SEQUENCE {
+ pdsch-HARQ-ACK-CodebookListMulticast-r17 SetupRelease { PDSCH-HARQ-ACK-CodebookList-r16} OPTIONAL, -- Need M
+ type1-Codebook-GenerationMode-r17 ENUMERATED { mode1, mode2} OPTIONAL -- Need M
+}
+
+PDCCH-BlindDetectionCA-CombIndicator-r17 ::= SEQUENCE {
+ pdcch-BlindDetectionCA1-r17 INTEGER (1..15) OPTIONAL, -- Need R
+ pdcch-BlindDetectionCA2-r17 INTEGER (1..15) OPTIONAL, -- Need R
+ pdcch-BlindDetectionCA3-r17 INTEGER (1..15)
+}
+
+-- TAG-PHYSICALCELLGROUPCONFIG-STOP
+-- TAG-PLMN-IDENTITY-START
+
+PLMN-Identity ::= SEQUENCE {
+ mcc MCC OPTIONAL, -- Cond MCC
+ mnc MNC
+}
+
+MCC ::= SEQUENCE (SIZE (3)) OF MCC-MNC-Digit
+
+MNC ::= SEQUENCE (SIZE (2..3)) OF MCC-MNC-Digit
+
+MCC-MNC-Digit ::= INTEGER (0..9)
+
+-- TAG-PLMN-IDENTITY-STOP
+-- TAG-PLMN-IDENTITYINFOLIST-START
+
+PLMN-IdentityInfoList ::= SEQUENCE (SIZE (1..maxPLMN)) OF PLMN-IdentityInfo
+
+PLMN-IdentityInfo ::= SEQUENCE {
+ plmn-IdentityList SEQUENCE (SIZE (1..maxPLMN)) OF PLMN-Identity,
+ trackingAreaCode TrackingAreaCode OPTIONAL, -- Need R
+ ranac RAN-AreaCode OPTIONAL, -- Need R
+ cellIdentity CellIdentity,
+ cellReservedForOperatorUse ENUMERATED {reserved, notReserved},
+ ...,
+ [[
+ iab-Support-r16 ENUMERATED {true} OPTIONAL -- Need S
+ ]],
+ [[
+ trackingAreaList-r17 SEQUENCE (SIZE (1..maxTAC-r17)) OF TrackingAreaCode OPTIONAL, -- Need R
+ gNB-ID-Length-r17 INTEGER (22..32) OPTIONAL -- Need R
+ ]]
+}
+-- TAG-PLMN-IDENTITYINFOLIST-STOP
+-- TAG-PLMNIDENTITYLIST2-START
+
+PLMN-IdentityList2-r16 ::= SEQUENCE (SIZE (1..16)) OF PLMN-Identity
+
+-- TAG-PLMNIDENTITYLIST2-STOP
+-- TAG-PRB-ID-START
+
+PRB-Id ::= INTEGER (0..maxNrofPhysicalResourceBlocks-1)
+
+-- TAG-PRB-ID-STOP
+-- TAG-PTRS-DOWNLINKCONFIG-START
+
+PTRS-DownlinkConfig ::= SEQUENCE {
+ frequencyDensity SEQUENCE (SIZE (2)) OF INTEGER (1..276) OPTIONAL, -- Need S
+ timeDensity SEQUENCE (SIZE (3)) OF INTEGER (0..29) OPTIONAL, -- Need S
+ epre-Ratio INTEGER (0..3) OPTIONAL, -- Need S
+ resourceElementOffset ENUMERATED { offset01, offset10, offset11 } OPTIONAL, -- Need S
+ ...,
+ [[
+ maxNrofPorts-r16 ENUMERATED {n1, n2} OPTIONAL -- Need R
+ ]]
+
+}
+
+-- TAG-PTRS-DOWNLINKCONFIG-STOP
+-- TAG-PTRS-UPLINKCONFIG-START
+
+PTRS-UplinkConfig ::= SEQUENCE {
+ transformPrecoderDisabled SEQUENCE {
+ frequencyDensity SEQUENCE (SIZE (2)) OF INTEGER (1..276) OPTIONAL, -- Need S
+ timeDensity SEQUENCE (SIZE (3)) OF INTEGER (0..29) OPTIONAL, -- Need S
+ maxNrofPorts ENUMERATED {n1, n2},
+ resourceElementOffset ENUMERATED {offset01, offset10, offset11 } OPTIONAL, -- Need S
+ ptrs-Power ENUMERATED {p00, p01, p10, p11}
+ } OPTIONAL, -- Need R
+ transformPrecoderEnabled SEQUENCE {
+ sampleDensity SEQUENCE (SIZE (5)) OF INTEGER (1..276),
+ timeDensityTransformPrecoding ENUMERATED {d2} OPTIONAL -- Need S
+ } OPTIONAL, -- Need R
+ ...
+}
+
+-- TAG-PTRS-UPLINKCONFIG-STOP
+-- TAG-PUCCH-CONFIG-START
+
+PUCCH-Config ::= SEQUENCE {
+ resourceSetToAddModList SEQUENCE (SIZE (1..maxNrofPUCCH-ResourceSets)) OF PUCCH-ResourceSet OPTIONAL, -- Need N
+ resourceSetToReleaseList SEQUENCE (SIZE (1..maxNrofPUCCH-ResourceSets)) OF PUCCH-ResourceSetId OPTIONAL, -- Need N
+ resourceToAddModList SEQUENCE (SIZE (1..maxNrofPUCCH-Resources)) OF PUCCH-Resource OPTIONAL, -- Need N
+ resourceToReleaseList SEQUENCE (SIZE (1..maxNrofPUCCH-Resources)) OF PUCCH-ResourceId OPTIONAL, -- Need N
+ format1 SetupRelease { PUCCH-FormatConfig } OPTIONAL, -- Need M
+ format2 SetupRelease { PUCCH-FormatConfig } OPTIONAL, -- Need M
+ format3 SetupRelease { PUCCH-FormatConfig } OPTIONAL, -- Need M
+ format4 SetupRelease { PUCCH-FormatConfig } OPTIONAL, -- Need M
+ schedulingRequestResourceToAddModList SEQUENCE (SIZE (1..maxNrofSR-Resources)) OF SchedulingRequestResourceConfig
+ OPTIONAL, -- Need N
+ schedulingRequestResourceToReleaseList SEQUENCE (SIZE (1..maxNrofSR-Resources)) OF SchedulingRequestResourceId
+ OPTIONAL, -- Need N
+ multi-CSI-PUCCH-ResourceList SEQUENCE (SIZE (1..2)) OF PUCCH-ResourceId OPTIONAL, -- Need M
+ dl-DataToUL-ACK SEQUENCE (SIZE (1..8)) OF INTEGER (0..15) OPTIONAL, -- Need M
+ spatialRelationInfoToAddModList SEQUENCE (SIZE (1..maxNrofSpatialRelationInfos)) OF PUCCH-SpatialRelationInfo
+ OPTIONAL, -- Need N
+ spatialRelationInfoToReleaseList SEQUENCE (SIZE (1..maxNrofSpatialRelationInfos)) OF PUCCH-SpatialRelationInfoId
+ OPTIONAL, -- Need N
+ pucch-PowerControl PUCCH-PowerControl OPTIONAL, -- Need M
+ ...,
+ [[
+ resourceToAddModListExt-v1610 SEQUENCE (SIZE (1..maxNrofPUCCH-Resources)) OF PUCCH-ResourceExt-v1610 OPTIONAL, -- Need N
+ dl-DataToUL-ACK-r16 SetupRelease { DL-DataToUL-ACK-r16 } OPTIONAL, -- Need M
+ ul-AccessConfigListDCI-1-1-r16 SetupRelease { UL-AccessConfigListDCI-1-1-r16 } OPTIONAL, -- Need M
+ subslotLengthForPUCCH-r16 CHOICE {
+ normalCP-r16 ENUMERATED {n2,n7},
+ extendedCP-r16 ENUMERATED {n2,n6}
+ } OPTIONAL, -- Need R
+ dl-DataToUL-ACK-DCI-1-2-r16 SetupRelease { DL-DataToUL-ACK-DCI-1-2-r16} OPTIONAL, -- Need M
+ numberOfBitsForPUCCH-ResourceIndicatorDCI-1-2-r16 INTEGER (0..3) OPTIONAL, -- Need R
+ dmrs-UplinkTransformPrecodingPUCCH-r16 ENUMERATED {enabled} OPTIONAL, -- Cond PI2-BPSK
+ spatialRelationInfoToAddModListSizeExt-v1610 SEQUENCE (SIZE (1..maxNrofSpatialRelationInfosDiff-r16)) OF PUCCH-SpatialRelationInfo
+ OPTIONAL, -- Need N
+ spatialRelationInfoToReleaseListSizeExt-v1610 SEQUENCE (SIZE (1..maxNrofSpatialRelationInfosDiff-r16)) OF PUCCH-SpatialRelationInfoId
+ OPTIONAL, -- Need N
+ spatialRelationInfoToAddModListExt-v1610 SEQUENCE (SIZE (1..maxNrofSpatialRelationInfos-r16)) OF PUCCH-SpatialRelationInfoExt-r16
+ OPTIONAL, -- Need N
+ spatialRelationInfoToReleaseListExt-v1610 SEQUENCE (SIZE (1..maxNrofSpatialRelationInfos-r16)) OF
+ PUCCH-SpatialRelationInfoId-r16 OPTIONAL, -- Need N
+ resourceGroupToAddModList-r16 SEQUENCE (SIZE (1..maxNrofPUCCH-ResourceGroups-r16)) OF PUCCH-ResourceGroup-r16
+ OPTIONAL, -- Need N
+ resourceGroupToReleaseList-r16 SEQUENCE (SIZE (1..maxNrofPUCCH-ResourceGroups-r16)) OF PUCCH-ResourceGroupId-r16
+ OPTIONAL, -- Need N
+ sps-PUCCH-AN-List-r16 SetupRelease { SPS-PUCCH-AN-List-r16 } OPTIONAL, -- Need M
+ schedulingRequestResourceToAddModListExt-v1610 SEQUENCE (SIZE (1..maxNrofSR-Resources)) OF SchedulingRequestResourceConfigExt-v1610
+ OPTIONAL -- Need N
+ ]],
+ [[
+ format0-r17 SetupRelease { PUCCH-FormatConfig } OPTIONAL, -- Need M
+ format2Ext-r17 SetupRelease { PUCCH-FormatConfigExt-r17 } OPTIONAL, -- Need M
+ format3Ext-r17 SetupRelease { PUCCH-FormatConfigExt-r17 } OPTIONAL, -- Need M
+ format4Ext-r17 SetupRelease { PUCCH-FormatConfigExt-r17 } OPTIONAL, -- Need M
+ ul-AccessConfigListDCI-1-2-r17 SetupRelease { UL-AccessConfigListDCI-1-2-r17 } OPTIONAL, -- Need M
+ mappingPattern-r17 ENUMERATED {cyclicMapping, sequentialMapping} OPTIONAL, -- Need R
+ powerControlSetInfoToAddModList-r17 SEQUENCE (SIZE (1..maxNrofPowerControlSetInfos-r17)) OF PUCCH-PowerControlSetInfo-r17
+ OPTIONAL, -- Need N
+ powerControlSetInfoToReleaseList-r17 SEQUENCE (SIZE (1..maxNrofPowerControlSetInfos-r17)) OF PUCCH-PowerControlSetInfoId-r17
+ OPTIONAL, -- Need N
+ secondTPCFieldDCI-1-1-r17 ENUMERATED {enabled} OPTIONAL, -- Need R
+ secondTPCFieldDCI-1-2-r17 ENUMERATED {enabled} OPTIONAL, -- Need R
+ dl-DataToUL-ACK-r17 SetupRelease { DL-DataToUL-ACK-r17 } OPTIONAL, -- Need M
+ dl-DataToUL-ACK-DCI-1-2-r17 SetupRelease { DL-DataToUL-ACK-DCI-1-2-r17} OPTIONAL, -- Need M
+ ul-AccessConfigListDCI-1-1-r17 SetupRelease { UL-AccessConfigListDCI-1-1-r17 } OPTIONAL, -- Need M
+ schedulingRequestResourceToAddModListExt-v1700 SEQUENCE (SIZE (1..maxNrofSR-Resources)) OF SchedulingRequestResourceConfigExt-v1700
+ OPTIONAL, -- Need N
+ dmrs-BundlingPUCCH-Config-r17 SetupRelease { DMRS-BundlingPUCCH-Config-r17 } OPTIONAL, -- Need M
+ dl-DataToUL-ACK-v1700 SetupRelease { DL-DataToUL-ACK-v1700 } OPTIONAL, -- Need M
+ dl-DataToUL-ACK-MulticastDCI-Format4-1-r17 SetupRelease { DL-DataToUL-ACK-MulticastDCI-Format4-1-r17 } OPTIONAL, -- Need M
+ sps-PUCCH-AN-ListMulticast-r17 SetupRelease { SPS-PUCCH-AN-List-r16 } OPTIONAL -- Need M
+ ]]
+}
+
+PUCCH-FormatConfig ::= SEQUENCE {
+ interslotFrequencyHopping ENUMERATED {enabled} OPTIONAL, -- Need R
+ additionalDMRS ENUMERATED {true} OPTIONAL, -- Need R
+ maxCodeRate PUCCH-MaxCodeRate OPTIONAL, -- Need R
+ nrofSlots ENUMERATED {n2,n4,n8} OPTIONAL, -- Need S
+ pi2BPSK ENUMERATED {enabled} OPTIONAL, -- Need R
+ simultaneousHARQ-ACK-CSI ENUMERATED {true} OPTIONAL -- Need R
+}
+
+PUCCH-FormatConfigExt-r17 ::= SEQUENCE {
+ maxCodeRateLP-r17 PUCCH-MaxCodeRate OPTIONAL, -- Need R
+ ...
+}
+
+PUCCH-MaxCodeRate ::= ENUMERATED {zeroDot08, zeroDot15, zeroDot25, zeroDot35, zeroDot45, zeroDot60, zeroDot80}
+
+-- A set with one or more PUCCH resources
+PUCCH-ResourceSet ::= SEQUENCE {
+ pucch-ResourceSetId PUCCH-ResourceSetId,
+ resourceList SEQUENCE (SIZE (1..maxNrofPUCCH-ResourcesPerSet)) OF PUCCH-ResourceId,
+ maxPayloadSize INTEGER (4..256) OPTIONAL -- Need R
+}
+
+PUCCH-ResourceSetId ::= INTEGER (0..maxNrofPUCCH-ResourceSets-1)
+
+PUCCH-Resource ::= SEQUENCE {
+ pucch-ResourceId PUCCH-ResourceId,
+ startingPRB PRB-Id,
+ intraSlotFrequencyHopping ENUMERATED { enabled } OPTIONAL, -- Need R
+ secondHopPRB PRB-Id OPTIONAL, -- Need R
+ format CHOICE {
+ format0 PUCCH-format0,
+ format1 PUCCH-format1,
+ format2 PUCCH-format2,
+ format3 PUCCH-format3,
+ format4 PUCCH-format4
+ }
+}
+
+PUCCH-ResourceExt-v1610 ::= SEQUENCE {
+ interlaceAllocation-r16 SEQUENCE {
+ rb-SetIndex-r16 INTEGER (0..4),
+ interlace0-r16 CHOICE {
+ scs15 INTEGER (0..9),
+ scs30 INTEGER (0..4)
+ }
+ } OPTIONAL, --Need R
+ format-v1610 CHOICE {
+ interlace1-v1610 INTEGER (0..9),
+ occ-v1610 SEQUENCE {
+ occ-Length-v1610 ENUMERATED {n2,n4} OPTIONAL, -- Need M
+ occ-Index-v1610 ENUMERATED {n0,n1,n2,n3} OPTIONAL -- Need M
+ }
+ } OPTIONAL, -- Need R
+ ...,
+ [[
+ formatExt-v1700 SEQUENCE {
+ nrofPRBs-r17 INTEGER (1..16)
+ } OPTIONAL, -- Need R
+ pucch-RepetitionNrofSlots-r17 ENUMERATED { n1,n2,n4,n8 } OPTIONAL -- Need R
+ ]]
+}
+
+PUCCH-ResourceId ::= INTEGER (0..maxNrofPUCCH-Resources-1)
+
+
+PUCCH-format0 ::= SEQUENCE {
+ initialCyclicShift INTEGER(0..11),
+ nrofSymbols INTEGER (1..2),
+ startingSymbolIndex INTEGER(0..13)
+}
+
+PUCCH-format1 ::= SEQUENCE {
+ initialCyclicShift INTEGER(0..11),
+ nrofSymbols INTEGER (4..14),
+ startingSymbolIndex INTEGER(0..10),
+ timeDomainOCC INTEGER(0..6)
+}
+
+PUCCH-format2 ::= SEQUENCE {
+ nrofPRBs INTEGER (1..16),
+ nrofSymbols INTEGER (1..2),
+ startingSymbolIndex INTEGER(0..13)
+}
+
+PUCCH-format3 ::= SEQUENCE {
+ nrofPRBs INTEGER (1..16),
+ nrofSymbols INTEGER (4..14),
+ startingSymbolIndex INTEGER(0..10)
+}
+
+PUCCH-format4 ::= SEQUENCE {
+ nrofSymbols INTEGER (4..14),
+ occ-Length ENUMERATED {n2,n4},
+ occ-Index ENUMERATED {n0,n1,n2,n3},
+ startingSymbolIndex INTEGER(0..10)
+}
+
+PUCCH-ResourceGroup-r16 ::= SEQUENCE {
+ pucch-ResourceGroupId-r16 PUCCH-ResourceGroupId-r16,
+ resourcePerGroupList-r16 SEQUENCE (SIZE (1..maxNrofPUCCH-ResourcesPerGroup-r16)) OF PUCCH-ResourceId
+}
+
+PUCCH-ResourceGroupId-r16 ::= INTEGER (0..maxNrofPUCCH-ResourceGroups-1-r16)
+
+DL-DataToUL-ACK-r16 ::= SEQUENCE (SIZE (1..8)) OF INTEGER (-1..15)
+
+DL-DataToUL-ACK-r17 ::= SEQUENCE (SIZE (1..8)) OF INTEGER (-1..127)
+
+DL-DataToUL-ACK-v1700 ::= SEQUENCE (SIZE (1..8)) OF INTEGER (16..31)
+
+DL-DataToUL-ACK-DCI-1-2-r16 ::= SEQUENCE (SIZE (1..8)) OF INTEGER (0..15)
+
+DL-DataToUL-ACK-DCI-1-2-r17 ::= SEQUENCE (SIZE (1..8)) OF INTEGER (0..127)
+
+UL-AccessConfigListDCI-1-1-r16 ::= SEQUENCE (SIZE (1..16)) OF INTEGER (0..15)
+
+UL-AccessConfigListDCI-1-2-r17 ::= SEQUENCE (SIZE (1..16)) OF INTEGER (0..15)
+
+UL-AccessConfigListDCI-1-1-r17 ::= SEQUENCE (SIZE (1..3)) OF INTEGER (0..2)
+
+DL-DataToUL-ACK-MulticastDCI-Format4-1-r17 ::= SEQUENCE (SIZE (1..8)) OF INTEGER (0..15)
+
+-- TAG-PUCCH-CONFIG-STOP
+-- TAG-PUCCH-CONFIGCOMMON-START
+
+PUCCH-ConfigCommon ::= SEQUENCE {
+ pucch-ResourceCommon INTEGER (0..15) OPTIONAL, -- Cond InitialBWP-Only
+ pucch-GroupHopping ENUMERATED { neither, enable, disable },
+ hoppingId INTEGER (0..1023) OPTIONAL, -- Need R
+ p0-nominal INTEGER (-202..24) OPTIONAL, -- Need R
+ ...,
+ [[
+ nrofPRBs INTEGER (1..16) OPTIONAL, -- Need R
+ intra-SlotFH-r17 ENUMERATED {fromLowerEdge, fromUpperEdge} OPTIONAL, -- Need R
+ pucch-ResourceCommonRedCap-r17 INTEGER (0..15) OPTIONAL, -- Cond InitialBWP-RedCap
+ additionalPRBOffset-r17 ENUMERATED {n2, n3, n4, n6, n8, n9, n10, n12} OPTIONAL -- Need S
+ ]]
+}
+
+-- TAG-PUCCH-CONFIGCOMMON-STOP
+-- TAG-PUCCH-CONFIGURATIONLIST-START
+
+PUCCH-ConfigurationList-r16 ::= SEQUENCE (SIZE (1..2)) OF PUCCH-Config
+
+-- TAG-PUCCH-CONFIGURATIONLIST-STOP
+-- TAG-PUCCH-PATHLOSSREFERENCERS-ID-START
+
+PUCCH-PathlossReferenceRS-Id ::= INTEGER (0..maxNrofPUCCH-PathlossReferenceRSs-1)
+
+PUCCH-PathlossReferenceRS-Id-v1610 ::= INTEGER (maxNrofPUCCH-PathlossReferenceRSs..maxNrofPUCCH-PathlossReferenceRSs-1-r16)
+
+PUCCH-PathlossReferenceRS-Id-r17 ::= INTEGER (0..maxNrofPUCCH-PathlossReferenceRSs-1-r17)
+
+-- TAG-PUCCH-PATHLOSSREFERENCERS-ID-STOP
+-- TAG-PUCCH-POWERCONTROL-START
+PUCCH-PowerControl ::= SEQUENCE {
+ deltaF-PUCCH-f0 INTEGER (-16..15) OPTIONAL, -- Need R
+ deltaF-PUCCH-f1 INTEGER (-16..15) OPTIONAL, -- Need R
+ deltaF-PUCCH-f2 INTEGER (-16..15) OPTIONAL, -- Need R
+ deltaF-PUCCH-f3 INTEGER (-16..15) OPTIONAL, -- Need R
+ deltaF-PUCCH-f4 INTEGER (-16..15) OPTIONAL, -- Need R
+ p0-Set SEQUENCE (SIZE (1..maxNrofPUCCH-P0-PerSet)) OF P0-PUCCH OPTIONAL, -- Need M
+ pathlossReferenceRSs SEQUENCE (SIZE (1..maxNrofPUCCH-PathlossReferenceRSs)) OF PUCCH-PathlossReferenceRS
+ OPTIONAL, -- Need M
+ twoPUCCH-PC-AdjustmentStates ENUMERATED {twoStates} OPTIONAL, -- Need S
+ ...,
+ [[
+ pathlossReferenceRSs-v1610 SetupRelease { PathlossReferenceRSs-v1610 } OPTIONAL -- Need M
+ ]]
+}
+
+P0-PUCCH ::= SEQUENCE {
+ p0-PUCCH-Id P0-PUCCH-Id,
+ p0-PUCCH-Value INTEGER (-16..15)
+}
+
+P0-PUCCH-Id ::= INTEGER (1..8)
+
+PathlossReferenceRSs-v1610 ::= SEQUENCE (SIZE (1..maxNrofPUCCH-PathlossReferenceRSsDiff-r16)) OF PUCCH-PathlossReferenceRS-r16
+
+PUCCH-PathlossReferenceRS ::= SEQUENCE {
+ pucch-PathlossReferenceRS-Id PUCCH-PathlossReferenceRS-Id,
+ referenceSignal CHOICE {
+ ssb-Index SSB-Index,
+ csi-RS-Index NZP-CSI-RS-ResourceId
+ }
+}
+
+PUCCH-PathlossReferenceRS-r16 ::= SEQUENCE {
+ pucch-PathlossReferenceRS-Id-r16 PUCCH-PathlossReferenceRS-Id-v1610,
+ referenceSignal-r16 CHOICE {
+ ssb-Index-r16 SSB-Index,
+ csi-RS-Index-r16 NZP-CSI-RS-ResourceId
+ }
+}
+
+PUCCH-PowerControlSetInfo-r17 ::= SEQUENCE {
+ pucch-PowerControlSetInfoId-r17 PUCCH-PowerControlSetInfoId-r17,
+ p0-PUCCH-Id-r17 P0-PUCCH-Id,
+ pucch-ClosedLoopIndex-r17 ENUMERATED { i0, i1 },
+ pucch-PathlossReferenceRS-Id-r17 PUCCH-PathlossReferenceRS-Id-r17
+}
+
+PUCCH-PowerControlSetInfoId-r17 ::= INTEGER (1.. maxNrofPowerControlSetInfos-r17)
+
+-- TAG-PUCCH-POWERCONTROL-STOP
+-- TAG-PUCCH-SPATIALRELATIONINFO-START
+
+PUCCH-SpatialRelationInfo ::= SEQUENCE {
+ pucch-SpatialRelationInfoId PUCCH-SpatialRelationInfoId,
+ servingCellId ServCellIndex OPTIONAL, -- Need S
+ referenceSignal CHOICE {
+ ssb-Index SSB-Index,
+ csi-RS-Index NZP-CSI-RS-ResourceId,
+ srs PUCCH-SRS
+ },
+ pucch-PathlossReferenceRS-Id PUCCH-PathlossReferenceRS-Id,
+ p0-PUCCH-Id P0-PUCCH-Id,
+ closedLoopIndex ENUMERATED { i0, i1 }
+}
+
+PUCCH-SpatialRelationInfoExt-r16 ::= SEQUENCE {
+ pucch-SpatialRelationInfoId-v1610 PUCCH-SpatialRelationInfoId-v1610 OPTIONAL, -- Need S
+ pucch-PathlossReferenceRS-Id-v1610 PUCCH-PathlossReferenceRS-Id-v1610 OPTIONAL, --Need R
+ ...
+}
+
+PUCCH-SRS ::= SEQUENCE {
+ resource SRS-ResourceId,
+ uplinkBWP BWP-Id
+}
+
+-- TAG-PUCCH-SPATIALRELATIONINFO-STOP
+-- TAG-PUCCH-SPATIALRELATIONINFO-START
+
+PUCCH-SpatialRelationInfoId ::= INTEGER (1..maxNrofSpatialRelationInfos)
+
+PUCCH-SpatialRelationInfoId-r16 ::= INTEGER (1..maxNrofSpatialRelationInfos-r16)
+
+PUCCH-SpatialRelationInfoId-v1610::= INTEGER (maxNrofSpatialRelationInfos-plus-1..maxNrofSpatialRelationInfos-r16)
+
+-- TAG-PUCCH-SPATIALRELATIONINFO-STOP
+-- TAG-PUCCH-TPC-COMMANDCONFIG-START
+
+PUCCH-TPC-CommandConfig ::= SEQUENCE {
+ tpc-IndexPCell INTEGER (1..15) OPTIONAL, -- Cond PDCCH-OfSpcell
+ tpc-IndexPUCCH-SCell INTEGER (1..15) OPTIONAL, -- Cond PDCCH-ofSpCellOrPUCCH-SCell
+ ...,
+ [[
+ tpc-IndexPUCCH-sSCell-r17 INTEGER (1..15) OPTIONAL, -- Need R
+ tpc-IndexPUCCH-sScellSecondaryPUCCHgroup-r17 INTEGER (1..15) OPTIONAL -- Cond twoPUCCHgroup
+ ]]
+}
+
+-- TAG-PUCCH-TPC-COMMANDCONFIG-STOP
+-- TAG-PUSCH-CONFIG-START
+
+PUSCH-Config ::= SEQUENCE {
+ dataScramblingIdentityPUSCH INTEGER (0..1023) OPTIONAL, -- Need S
+ txConfig ENUMERATED {codebook, nonCodebook} OPTIONAL, -- Need S
+ dmrs-UplinkForPUSCH-MappingTypeA SetupRelease { DMRS-UplinkConfig } OPTIONAL, -- Need M
+ dmrs-UplinkForPUSCH-MappingTypeB SetupRelease { DMRS-UplinkConfig } OPTIONAL, -- Need M
+ pusch-PowerControl PUSCH-PowerControl OPTIONAL, -- Need M
+ frequencyHopping ENUMERATED {intraSlot, interSlot} OPTIONAL, -- Need S
+ frequencyHoppingOffsetLists SEQUENCE (SIZE (1..4)) OF INTEGER (1.. maxNrofPhysicalResourceBlocks-1)
+ OPTIONAL, -- Need M
+ resourceAllocation ENUMERATED { resourceAllocationType0, resourceAllocationType1, dynamicSwitch},
+ pusch-TimeDomainAllocationList SetupRelease { PUSCH-TimeDomainResourceAllocationList } OPTIONAL, -- Need M
+ pusch-AggregationFactor ENUMERATED { n2, n4, n8 } OPTIONAL, -- Need S
+ mcs-Table ENUMERATED {qam256, qam64LowSE} OPTIONAL, -- Need S
+ mcs-TableTransformPrecoder ENUMERATED {qam256, qam64LowSE} OPTIONAL, -- Need S
+ transformPrecoder ENUMERATED {enabled, disabled} OPTIONAL, -- Need S
+ codebookSubset ENUMERATED {fullyAndPartialAndNonCoherent, partialAndNonCoherent,nonCoherent}
+ OPTIONAL, -- Cond codebookBased
+ maxRank INTEGER (1..4) OPTIONAL, -- Cond codebookBased
+ rbg-Size ENUMERATED { config2} OPTIONAL, -- Need S
+ uci-OnPUSCH SetupRelease { UCI-OnPUSCH} OPTIONAL, -- Need M
+ tp-pi2BPSK ENUMERATED {enabled} OPTIONAL, -- Need S
+ ...,
+ [[
+ minimumSchedulingOffsetK2-r16 SetupRelease { MinSchedulingOffsetK2-Values-r16 } OPTIONAL, -- Need M
+ ul-AccessConfigListDCI-0-1-r16 SetupRelease { UL-AccessConfigListDCI-0-1-r16 } OPTIONAL, -- Need M
+ -- Start of the parameters for DCI format 0_2 introduced in V16.1.0
+ harq-ProcessNumberSizeDCI-0-2-r16 INTEGER (0..4) OPTIONAL, -- Need R
+ dmrs-SequenceInitializationDCI-0-2-r16 ENUMERATED {enabled} OPTIONAL, -- Need S
+ numberOfBitsForRV-DCI-0-2-r16 INTEGER (0..2) OPTIONAL, -- Need R
+ antennaPortsFieldPresenceDCI-0-2-r16 ENUMERATED {enabled} OPTIONAL, -- Need S
+ dmrs-UplinkForPUSCH-MappingTypeA-DCI-0-2-r16 SetupRelease { DMRS-UplinkConfig } OPTIONAL, -- Need M
+ dmrs-UplinkForPUSCH-MappingTypeB-DCI-0-2-r16 SetupRelease { DMRS-UplinkConfig } OPTIONAL, -- Need M
+ frequencyHoppingDCI-0-2-r16 CHOICE {
+ pusch-RepTypeA ENUMERATED {intraSlot, interSlot},
+ pusch-RepTypeB ENUMERATED {interRepetition, interSlot}
+ } OPTIONAL, -- Need S
+ frequencyHoppingOffsetListsDCI-0-2-r16 SetupRelease { FrequencyHoppingOffsetListsDCI-0-2-r16} OPTIONAL, -- Need M
+ codebookSubsetDCI-0-2-r16 ENUMERATED {fullyAndPartialAndNonCoherent, partialAndNonCoherent,nonCoherent}
+ OPTIONAL, -- Cond codebookBased
+ invalidSymbolPatternIndicatorDCI-0-2-r16 ENUMERATED {enabled} OPTIONAL, -- Need S
+ maxRankDCI-0-2-r16 INTEGER (1..4) OPTIONAL, -- Cond codebookBased
+ mcs-TableDCI-0-2-r16 ENUMERATED {qam256, qam64LowSE} OPTIONAL, -- Need S
+ mcs-TableTransformPrecoderDCI-0-2-r16 ENUMERATED {qam256, qam64LowSE} OPTIONAL, -- Need S
+ priorityIndicatorDCI-0-2-r16 ENUMERATED {enabled} OPTIONAL, -- Need S
+ pusch-RepTypeIndicatorDCI-0-2-r16 ENUMERATED { pusch-RepTypeA, pusch-RepTypeB} OPTIONAL, -- Need R
+ resourceAllocationDCI-0-2-r16 ENUMERATED { resourceAllocationType0, resourceAllocationType1, dynamicSwitch}
+ OPTIONAL, -- Need M
+ resourceAllocationType1GranularityDCI-0-2-r16 ENUMERATED { n2,n4,n8,n16 } OPTIONAL, -- Need S
+ uci-OnPUSCH-ListDCI-0-2-r16 SetupRelease { UCI-OnPUSCH-ListDCI-0-2-r16} OPTIONAL, -- Need M
+ pusch-TimeDomainAllocationListDCI-0-2-r16 SetupRelease { PUSCH-TimeDomainResourceAllocationList-r16 }
+ OPTIONAL, -- Need M
+ -- End of the parameters for DCI format 0_2 introduced in V16.1.0
+ -- Start of the parameters for DCI format 0_1 introduced in V16.1.0
+ pusch-TimeDomainAllocationListDCI-0-1-r16 SetupRelease { PUSCH-TimeDomainResourceAllocationList-r16 }
+ OPTIONAL, -- Need M
+ invalidSymbolPatternIndicatorDCI-0-1-r16 ENUMERATED {enabled} OPTIONAL, -- Need S
+ priorityIndicatorDCI-0-1-r16 ENUMERATED {enabled} OPTIONAL, -- Need S
+ pusch-RepTypeIndicatorDCI-0-1-r16 ENUMERATED { pusch-RepTypeA, pusch-RepTypeB} OPTIONAL, -- Need R
+ frequencyHoppingDCI-0-1-r16 ENUMERATED {interRepetition, interSlot} OPTIONAL, -- Cond RepTypeB
+ uci-OnPUSCH-ListDCI-0-1-r16 SetupRelease { UCI-OnPUSCH-ListDCI-0-1-r16 } OPTIONAL, -- Need M
+ -- End of the parameters for DCI format 0_1 introduced in V16.1.0
+ invalidSymbolPattern-r16 InvalidSymbolPattern-r16 OPTIONAL, -- Need S
+ pusch-PowerControl-v1610 SetupRelease {PUSCH-PowerControl-v1610} OPTIONAL, -- Need M
+ ul-FullPowerTransmission-r16 ENUMERATED {fullpower, fullpowerMode1, fullpowerMode2} OPTIONAL, -- Need R
+ pusch-TimeDomainAllocationListForMultiPUSCH-r16 SetupRelease { PUSCH-TimeDomainResourceAllocationList-r16 }
+ OPTIONAL, -- Need M
+ numberOfInvalidSymbolsForDL-UL-Switching-r16 INTEGER (1..4) OPTIONAL -- Cond RepTypeB2
+ ]],
+ [[
+ ul-AccessConfigListDCI-0-2-r17 SetupRelease { UL-AccessConfigListDCI-0-2-r17 } OPTIONAL, -- Need M
+ betaOffsetsCrossPri0-r17 SetupRelease { BetaOffsetsCrossPriSel-r17 } OPTIONAL, -- Need M
+ betaOffsetsCrossPri1-r17 SetupRelease { BetaOffsetsCrossPriSel-r17 } OPTIONAL, -- Need M
+ betaOffsetsCrossPri0DCI-0-2-r17 SetupRelease { BetaOffsetsCrossPriSelDCI-0-2-r17 } OPTIONAL, -- Need M
+ betaOffsetsCrossPri1DCI-0-2-r17 SetupRelease { BetaOffsetsCrossPriSelDCI-0-2-r17 } OPTIONAL, -- Need M
+ mappingPattern-r17 ENUMERATED {cyclicMapping, sequentialMapping} OPTIONAL, -- Cond SRSsets
+ secondTPCFieldDCI-0-1-r17 ENUMERATED {enabled} OPTIONAL, -- Need R
+ secondTPCFieldDCI-0-2-r17 ENUMERATED {enabled} OPTIONAL, -- Need R
+ sequenceOffsetForRV-r17 INTEGER (0..3) OPTIONAL, -- Need R
+ ul-AccessConfigListDCI-0-1-r17 SetupRelease { UL-AccessConfigListDCI-0-1-r17 } OPTIONAL, -- Need M
+ minimumSchedulingOffsetK2-r17 SetupRelease { MinSchedulingOffsetK2-Values-r17 } OPTIONAL, -- Need M
+ availableSlotCounting-r17 ENUMERATED { enabled } OPTIONAL, -- Need S
+ dmrs-BundlingPUSCH-Config-r17 SetupRelease { DMRS-BundlingPUSCH-Config-r17 } OPTIONAL, -- Need M
+ harq-ProcessNumberSizeDCI-0-2-v1700 INTEGER (5) OPTIONAL, -- Need R
+ harq-ProcessNumberSizeDCI-0-1-r17 INTEGER (5) OPTIONAL, -- Need R
+ mpe-ResourcePoolToAddModList-r17 SEQUENCE (SIZE(1..maxMPE-Resources-r17)) OF MPE-Resource-r17 OPTIONAL, -- Need N
+ mpe-ResourcePoolToReleaseList-r17 SEQUENCE (SIZE(1..maxMPE-Resources-r17)) OF MPE-ResourceId-r17 OPTIONAL -- Need N
+ ]]
+}
+
+UCI-OnPUSCH ::= SEQUENCE {
+ betaOffsets CHOICE {
+ dynamic SEQUENCE (SIZE (4)) OF BetaOffsets,
+ semiStatic BetaOffsets
+ } OPTIONAL, -- Need M
+ scaling ENUMERATED { f0p5, f0p65, f0p8, f1 }
+}
+
+MinSchedulingOffsetK2-Values-r16 ::= SEQUENCE (SIZE (1..maxNrOfMinSchedulingOffsetValues-r16)) OF INTEGER (0..maxK2-SchedulingOffset-r16)
+
+MinSchedulingOffsetK2-Values-r17 ::= SEQUENCE (SIZE (1..maxNrOfMinSchedulingOffsetValues-r16)) OF INTEGER (0..maxK2-SchedulingOffset-r17)
+
+UCI-OnPUSCH-DCI-0-2-r16 ::= SEQUENCE {
+ betaOffsetsDCI-0-2-r16 CHOICE {
+ dynamicDCI-0-2-r16 CHOICE {
+ oneBit-r16 SEQUENCE (SIZE (2)) OF BetaOffsets,
+ twoBits-r16 SEQUENCE (SIZE (4)) OF BetaOffsets
+ },
+ semiStaticDCI-0-2-r16 BetaOffsets
+ } OPTIONAL, -- Need M
+ scalingDCI-0-2-r16 ENUMERATED { f0p5, f0p65, f0p8, f1 }
+}
+
+FrequencyHoppingOffsetListsDCI-0-2-r16 ::= SEQUENCE (SIZE (1..4)) OF INTEGER (1.. maxNrofPhysicalResourceBlocks-1)
+
+UCI-OnPUSCH-ListDCI-0-2-r16 ::= SEQUENCE (SIZE (1..2)) OF UCI-OnPUSCH-DCI-0-2-r16
+
+UCI-OnPUSCH-ListDCI-0-1-r16 ::= SEQUENCE (SIZE (1..2)) OF UCI-OnPUSCH
+
+UL-AccessConfigListDCI-0-1-r16 ::= SEQUENCE (SIZE (1..64)) OF INTEGER (0..63)
+
+UL-AccessConfigListDCI-0-1-r17 ::= SEQUENCE (SIZE (1..3)) OF INTEGER (0..2)
+
+UL-AccessConfigListDCI-0-2-r17 ::= SEQUENCE (SIZE (1..64)) OF INTEGER (0..63)
+
+BetaOffsetsCrossPriSel-r17 ::= CHOICE {
+ dynamic-r17 SEQUENCE (SIZE (4)) OF BetaOffsetsCrossPri-r17,
+ semiStatic-r17 BetaOffsetsCrossPri-r17
+}
+
+BetaOffsetsCrossPriSelDCI-0-2-r17 ::= CHOICE {
+ dynamicDCI-0-2-r17 CHOICE {
+ oneBit-r17 SEQUENCE (SIZE (2)) OF BetaOffsetsCrossPri-r17,
+ twoBits-r17 SEQUENCE (SIZE (4)) OF BetaOffsetsCrossPri-r17
+ },
+ semiStaticDCI-0-2-r17 BetaOffsetsCrossPri-r17
+}
+
+MPE-Resource-r17 ::= SEQUENCE {
+ mpe-ResourceId-r17 MPE-ResourceId-r17,
+ cell-r17 ServCellIndex OPTIONAL, -- Need R
+ additionalPCI-r17 AdditionalPCIIndex-r17 OPTIONAL, -- Need R
+ mpe-ReferenceSignal-r17 CHOICE {
+ csi-RS-Resource-r17 NZP-CSI-RS-ResourceId,
+ ssb-Resource-r17 SSB-Index
+ }
+}
+
+MPE-ResourceId-r17 ::= INTEGER (1..maxMPE-Resources-r17)
+
+-- TAG-PUSCH-CONFIG-STOP
+-- TAG-PUSCH-CONFIGCOMMON-START
+
+PUSCH-ConfigCommon ::= SEQUENCE {
+ groupHoppingEnabledTransformPrecoding ENUMERATED {enabled} OPTIONAL, -- Need R
+ pusch-TimeDomainAllocationList PUSCH-TimeDomainResourceAllocationList OPTIONAL, -- Need R
+ msg3-DeltaPreamble INTEGER (-1..6) OPTIONAL, -- Need R
+ p0-NominalWithGrant INTEGER (-202..24) OPTIONAL, -- Need R
+ ...
+}
+
+-- TAG-PUSCH-CONFIGCOMMON-STOP
+-- TAG-PUSCH-POWERCONTROL-START
+
+PUSCH-PowerControl ::= SEQUENCE {
+ tpc-Accumulation ENUMERATED { disabled } OPTIONAL, -- Need S
+ msg3-Alpha Alpha OPTIONAL, -- Need S
+ p0-NominalWithoutGrant INTEGER (-202..24) OPTIONAL, -- Need M
+ p0-AlphaSets SEQUENCE (SIZE (1..maxNrofP0-PUSCH-AlphaSets)) OF P0-PUSCH-AlphaSet OPTIONAL, -- Need M
+ pathlossReferenceRSToAddModList SEQUENCE (SIZE (1..maxNrofPUSCH-PathlossReferenceRSs)) OF PUSCH-PathlossReferenceRS
+ OPTIONAL, -- Need N
+ pathlossReferenceRSToReleaseList SEQUENCE (SIZE (1..maxNrofPUSCH-PathlossReferenceRSs)) OF PUSCH-PathlossReferenceRS-Id
+ OPTIONAL, -- Need N
+ twoPUSCH-PC-AdjustmentStates ENUMERATED {twoStates} OPTIONAL, -- Need S
+ deltaMCS ENUMERATED {enabled} OPTIONAL, -- Need S
+ sri-PUSCH-MappingToAddModList SEQUENCE (SIZE (1..maxNrofSRI-PUSCH-Mappings)) OF SRI-PUSCH-PowerControl
+ OPTIONAL, -- Need N
+ sri-PUSCH-MappingToReleaseList SEQUENCE (SIZE (1..maxNrofSRI-PUSCH-Mappings)) OF SRI-PUSCH-PowerControlId
+ OPTIONAL -- Need N
+}
+
+P0-PUSCH-AlphaSet ::= SEQUENCE {
+ p0-PUSCH-AlphaSetId P0-PUSCH-AlphaSetId,
+ p0 INTEGER (-16..15) OPTIONAL, -- Need S
+ alpha Alpha OPTIONAL -- Need S
+}
+
+P0-PUSCH-AlphaSetId ::= INTEGER (0..maxNrofP0-PUSCH-AlphaSets-1)
+
+PUSCH-PathlossReferenceRS ::= SEQUENCE {
+ pusch-PathlossReferenceRS-Id PUSCH-PathlossReferenceRS-Id,
+ referenceSignal CHOICE {
+ ssb-Index SSB-Index,
+ csi-RS-Index NZP-CSI-RS-ResourceId
+ }
+}
+
+PUSCH-PathlossReferenceRS-r16 ::= SEQUENCE {
+ pusch-PathlossReferenceRS-Id-r16 PUSCH-PathlossReferenceRS-Id-v1610,
+ referenceSignal-r16 CHOICE {
+ ssb-Index-r16 SSB-Index,
+ csi-RS-Index-r16 NZP-CSI-RS-ResourceId
+ }
+}
+
+DummyPathlossReferenceRS-v1710 ::= SEQUENCE {
+ pusch-PathlossReferenceRS-Id-r17 PUSCH-PathlossReferenceRS-Id-r17,
+ additionalPCI-r17 AdditionalPCIIndex-r17 OPTIONAL -- Need R
+}
+
+PUSCH-PathlossReferenceRS-Id ::= INTEGER (0..maxNrofPUSCH-PathlossReferenceRSs-1)
+
+PUSCH-PathlossReferenceRS-Id-v1610 ::= INTEGER (maxNrofPUSCH-PathlossReferenceRSs..maxNrofPUSCH-PathlossReferenceRSs-1-r16)
+
+PUSCH-PathlossReferenceRS-Id-r17 ::= INTEGER (0..maxNrofPUSCH-PathlossReferenceRSs-1-r16)
+
+SRI-PUSCH-PowerControl ::= SEQUENCE {
+ sri-PUSCH-PowerControlId SRI-PUSCH-PowerControlId,
+ sri-PUSCH-PathlossReferenceRS-Id PUSCH-PathlossReferenceRS-Id,
+ sri-P0-PUSCH-AlphaSetId P0-PUSCH-AlphaSetId,
+ sri-PUSCH-ClosedLoopIndex ENUMERATED { i0, i1 }
+}
+
+SRI-PUSCH-PowerControlId ::= INTEGER (0..maxNrofSRI-PUSCH-Mappings-1)
+
+PUSCH-PowerControl-v1610 ::= SEQUENCE {
+ pathlossReferenceRSToAddModListSizeExt-v1610 SEQUENCE (SIZE (1..maxNrofPUSCH-PathlossReferenceRSsDiff-r16)) OF PUSCH-PathlossReferenceRS-r16
+ OPTIONAL, -- Need N
+ pathlossReferenceRSToReleaseListSizeExt-v1610 SEQUENCE (SIZE (1..maxNrofPUSCH-PathlossReferenceRSsDiff-r16)) OF PUSCH-PathlossReferenceRS-Id-v1610
+ OPTIONAL, -- Need N
+ p0-PUSCH-SetList-r16 SEQUENCE (SIZE (1..maxNrofSRI-PUSCH-Mappings)) OF P0-PUSCH-Set-r16 OPTIONAL, -- Need R
+ olpc-ParameterSet SEQUENCE {
+ olpc-ParameterSetDCI-0-1-r16 INTEGER (1..2) OPTIONAL, -- Need R
+ olpc-ParameterSetDCI-0-2-r16 INTEGER (1..2) OPTIONAL -- Need R
+ } OPTIONAL, -- Need M
+ ...,
+ [[
+ sri-PUSCH-MappingToAddModList2-r17 SEQUENCE (SIZE (1..maxNrofSRI-PUSCH-Mappings)) OF SRI-PUSCH-PowerControl
+ OPTIONAL, -- Need N
+ sri-PUSCH-MappingToReleaseList2-r17 SEQUENCE (SIZE (1..maxNrofSRI-PUSCH-Mappings)) OF SRI-PUSCH-PowerControlId OPTIONAL, -- Need N
+ p0-PUSCH-SetList2-r17 SEQUENCE (SIZE (1..maxNrofSRI-PUSCH-Mappings)) OF P0-PUSCH-Set-r16 OPTIONAL, -- Need R
+ dummy SEQUENCE (SIZE (1..maxNrofPUSCH-PathlossReferenceRSs-r16)) OF DummyPathlossReferenceRS-v1710 OPTIONAL -- Need N
+ ]]
+}
+
+P0-PUSCH-Set-r16 ::= SEQUENCE {
+ p0-PUSCH-SetId-r16 P0-PUSCH-SetId-r16,
+ p0-List-r16 SEQUENCE (SIZE (1..maxNrofP0-PUSCH-Set-r16)) OF P0-PUSCH-r16 OPTIONAL, -- Need R
+ ...
+}
+
+P0-PUSCH-SetId-r16 ::= INTEGER (0..maxNrofSRI-PUSCH-Mappings-1)
+
+P0-PUSCH-r16 ::= INTEGER (-16..15)
+
+-- TAG-PUSCH-POWERCONTROL-STOP
+-- TAG-PUSCH-SERVINGCELLCONFIG-START
+
+PUSCH-ServingCellConfig ::= SEQUENCE {
+ codeBlockGroupTransmission SetupRelease { PUSCH-CodeBlockGroupTransmission } OPTIONAL, -- Need M
+ rateMatching ENUMERATED {limitedBufferRM} OPTIONAL, -- Need S
+ xOverhead ENUMERATED {xoh6, xoh12, xoh18} OPTIONAL, -- Need S
+ ...,
+ [[
+ maxMIMO-Layers INTEGER (1..4) OPTIONAL, -- Need M
+ processingType2Enabled BOOLEAN OPTIONAL -- Need M
+ ]],
+ [[
+ maxMIMO-LayersDCI-0-2-r16 SetupRelease { MaxMIMO-LayersDCI-0-2-r16} OPTIONAL -- Need M
+ ]],
+ [[
+ nrofHARQ-ProcessesForPUSCH-r17 ENUMERATED {n32} OPTIONAL, -- Need R
+ uplinkHARQ-mode-r17 SetupRelease { UplinkHARQ-mode-r17} OPTIONAL -- Need M
+ ]]
+}
+
+PUSCH-CodeBlockGroupTransmission ::= SEQUENCE {
+ maxCodeBlockGroupsPerTransportBlock ENUMERATED {n2, n4, n6, n8},
+ ...
+}
+
+MaxMIMO-LayersDCI-0-2-r16 ::= INTEGER (1..4)
+
+UplinkHARQ-mode-r17 ::= BIT STRING (SIZE (32))
+
+-- TAG-PUSCH-SERVINGCELLCONFIG-STOP
+-- TAG-PUSCH-TIMEDOMAINRESOURCEALLOCATIONLIST-START
+
+PUSCH-TimeDomainResourceAllocationList ::= SEQUENCE (SIZE(1..maxNrofUL-Allocations)) OF PUSCH-TimeDomainResourceAllocation
+
+PUSCH-TimeDomainResourceAllocation ::= SEQUENCE {
+ k2 INTEGER(0..32) OPTIONAL, -- Need S
+ mappingType ENUMERATED {typeA, typeB},
+ startSymbolAndLength INTEGER (0..127)
+}
+
+PUSCH-TimeDomainResourceAllocationList-r16 ::= SEQUENCE (SIZE(1..maxNrofUL-Allocations-r16)) OF PUSCH-TimeDomainResourceAllocation-r16
+
+PUSCH-TimeDomainResourceAllocation-r16 ::= SEQUENCE {
+ k2-r16 INTEGER(0..32) OPTIONAL, -- Need S
+ puschAllocationList-r16 SEQUENCE (SIZE(1..maxNrofMultiplePUSCHs-r16)) OF PUSCH-Allocation-r16,
+...
+}
+
+PUSCH-Allocation-r16 ::= SEQUENCE {
+ mappingType-r16 ENUMERATED {typeA, typeB} OPTIONAL, -- Cond NotFormat01-02-Or-TypeA
+ startSymbolAndLength-r16 INTEGER (0..127) OPTIONAL, -- Cond NotFormat01-02-Or-TypeA
+ startSymbol-r16 INTEGER (0..13) OPTIONAL, -- Cond RepTypeB
+ length-r16 INTEGER (1..14) OPTIONAL, -- Cond RepTypeB
+ numberOfRepetitions-r16 ENUMERATED {n1, n2, n3, n4, n7, n8, n12, n16} OPTIONAL, -- Cond Format01-02
+ ...,
+ [[
+ numberOfRepetitionsExt-r17 ENUMERATED {n1, n2, n3, n4, n7, n8, n12, n16, n20, n24, n28, n32, spare4, spare3, spare2,
+ spare1} OPTIONAL, -- Cond Format01-02-For-TypeA
+ numberOfSlotsTBoMS-r17 ENUMERATED {n1, n2, n4, n8, spare4, spare3, spare2, spare1} OPTIONAL, -- Need R
+ extendedK2-r17 INTEGER (0..128) OPTIONAL -- Cond MultiPUSCH
+ ]]
+}
+
+-- TAG-PUSCH-TIMEDOMAINRESOURCEALLOCATIONLIST-STOP
+-- TAG-PUSCH-TPC-COMMANDCONFIG-START
+
+PUSCH-TPC-CommandConfig ::= SEQUENCE {
+ tpc-Index INTEGER (1..15) OPTIONAL, -- Cond SUL
+ tpc-IndexSUL INTEGER (1..15) OPTIONAL, -- Cond SUL-Only
+ targetCell ServCellIndex OPTIONAL, -- Need S
+ ...
+}
+
+-- TAG-PUSCH-TPC-COMMANDCONFIG-STOP
+-- TAG-Q-OFFSETRANGE-START
+
+Q-OffsetRange ::= ENUMERATED {
+ dB-24, dB-22, dB-20, dB-18, dB-16, dB-14,
+ dB-12, dB-10, dB-8, dB-6, dB-5, dB-4, dB-3,
+ dB-2, dB-1, dB0, dB1, dB2, dB3, dB4, dB5,
+ dB6, dB8, dB10, dB12, dB14, dB16, dB18,
+ dB20, dB22, dB24}
+
+-- TAG-Q-OFFSETRANGE-STOP
+-- TAG-Q-QUALMIN-START
+
+Q-QualMin ::= INTEGER (-43..-12)
+
+-- TAG-Q-QUALMIN-STOP
+-- TAG-Q-RXLEVMIN-START
+
+Q-RxLevMin ::= INTEGER (-70..-22)
+
+-- TAG-Q-RXLEVMIN-STOP
+-- TAG-QUANTITYCONFIG-START
+
+
+QuantityConfig ::= SEQUENCE {
+ quantityConfigNR-List SEQUENCE (SIZE (1..maxNrofQuantityConfig)) OF QuantityConfigNR OPTIONAL, -- Need M
+ ...,
+ [[
+ quantityConfigEUTRA FilterConfig OPTIONAL -- Need M
+ ]],
+ [[
+ quantityConfigUTRA-FDD-r16 QuantityConfigUTRA-FDD-r16 OPTIONAL, -- Need M
+ quantityConfigCLI-r16 FilterConfigCLI-r16 OPTIONAL -- Need M
+ ]]
+}
+
+QuantityConfigNR::= SEQUENCE {
+ quantityConfigCell QuantityConfigRS,
+ quantityConfigRS-Index QuantityConfigRS OPTIONAL -- Need M
+}
+
+QuantityConfigRS ::= SEQUENCE {
+ ssb-FilterConfig FilterConfig,
+ csi-RS-FilterConfig FilterConfig
+}
+
+FilterConfig ::= SEQUENCE {
+ filterCoefficientRSRP FilterCoefficient DEFAULT fc4,
+ filterCoefficientRSRQ FilterCoefficient DEFAULT fc4,
+ filterCoefficientRS-SINR FilterCoefficient DEFAULT fc4
+}
+
+FilterConfigCLI-r16 ::= SEQUENCE {
+ filterCoefficientSRS-RSRP-r16 FilterCoefficient DEFAULT fc4,
+ filterCoefficientCLI-RSSI-r16 FilterCoefficient DEFAULT fc4
+}
+
+QuantityConfigUTRA-FDD-r16 ::= SEQUENCE {
+ filterCoefficientRSCP-r16 FilterCoefficient DEFAULT fc4,
+ filterCoefficientEcNO-r16 FilterCoefficient DEFAULT fc4
+}
+
+-- TAG-QUANTITYCONFIG-STOP
+-- TAG-RACH-CONFIGCOMMON-START
+
+RACH-ConfigCommon ::= SEQUENCE {
+ rach-ConfigGeneric RACH-ConfigGeneric,
+ totalNumberOfRA-Preambles INTEGER (1..63) OPTIONAL, -- Need S
+ ssb-perRACH-OccasionAndCB-PreamblesPerSSB CHOICE {
+ oneEighth ENUMERATED {n4,n8,n12,n16,n20,n24,n28,n32,n36,n40,n44,n48,n52,n56,n60,n64},
+ oneFourth ENUMERATED {n4,n8,n12,n16,n20,n24,n28,n32,n36,n40,n44,n48,n52,n56,n60,n64},
+ oneHalf ENUMERATED {n4,n8,n12,n16,n20,n24,n28,n32,n36,n40,n44,n48,n52,n56,n60,n64},
+ one ENUMERATED {n4,n8,n12,n16,n20,n24,n28,n32,n36,n40,n44,n48,n52,n56,n60,n64},
+ two ENUMERATED {n4,n8,n12,n16,n20,n24,n28,n32},
+ four INTEGER (1..16),
+ eight INTEGER (1..8),
+ sixteen INTEGER (1..4)
+ } OPTIONAL, -- Need M
+
+ groupBconfigured SEQUENCE {
+ ra-Msg3SizeGroupA ENUMERATED {b56, b144, b208, b256, b282, b480, b640,
+ b800, b1000, b72, spare6, spare5,spare4, spare3, spare2, spare1},
+ messagePowerOffsetGroupB ENUMERATED { minusinfinity, dB0, dB5, dB8, dB10, dB12, dB15, dB18},
+ numberOfRA-PreamblesGroupA INTEGER (1..64)
+ } OPTIONAL, -- Need R
+ ra-ContentionResolutionTimer ENUMERATED { sf8, sf16, sf24, sf32, sf40, sf48, sf56, sf64},
+ rsrp-ThresholdSSB RSRP-Range OPTIONAL, -- Need R
+ rsrp-ThresholdSSB-SUL RSRP-Range OPTIONAL, -- Cond SUL
+ prach-RootSequenceIndex CHOICE {
+ l839 INTEGER (0..837),
+ l139 INTEGER (0..137)
+ },
+ msg1-SubcarrierSpacing SubcarrierSpacing OPTIONAL, -- Cond L139
+ restrictedSetConfig ENUMERATED {unrestrictedSet, restrictedSetTypeA, restrictedSetTypeB},
+ msg3-transformPrecoder ENUMERATED {enabled} OPTIONAL, -- Need R
+ ...,
+ [[
+ ra-PrioritizationForAccessIdentity-r16 SEQUENCE {
+ ra-Prioritization-r16 RA-Prioritization,
+ ra-PrioritizationForAI-r16 BIT STRING (SIZE (2))
+ } OPTIONAL, -- Cond InitialBWP-Only
+ prach-RootSequenceIndex-r16 CHOICE {
+ l571 INTEGER (0..569),
+ l1151 INTEGER (0..1149)
+ } OPTIONAL -- Need R
+ ]],
+ [[
+ ra-PrioritizationForSlicing-r17 RA-PrioritizationForSlicing-r17 OPTIONAL, -- Cond InitialBWP-Only
+ featureCombinationPreamblesList-r17 SEQUENCE (SIZE(1..maxFeatureCombPreamblesPerRACHResource-r17)) OF FeatureCombinationPreambles-r17 OPTIONAL -- Cond AdditionalRACH
+ ]]
+}
+
+-- TAG-RACH-CONFIGCOMMON-STOP
+-- TAG-RACH-CONFIGCOMMONTWOSTEPRA-START
+
+RACH-ConfigCommonTwoStepRA-r16 ::= SEQUENCE {
+ rach-ConfigGenericTwoStepRA-r16 RACH-ConfigGenericTwoStepRA-r16,
+ msgA-TotalNumberOfRA-Preambles-r16 INTEGER (1..63) OPTIONAL, -- Need S
+ msgA-SSB-PerRACH-OccasionAndCB-PreamblesPerSSB-r16 CHOICE {
+ oneEighth ENUMERATED {n4,n8,n12,n16,n20,n24,n28,n32,n36,n40,n44,n48,n52,n56,n60,n64},
+ oneFourth ENUMERATED {n4,n8,n12,n16,n20,n24,n28,n32,n36,n40,n44,n48,n52,n56,n60,n64},
+ oneHalf ENUMERATED {n4,n8,n12,n16,n20,n24,n28,n32,n36,n40,n44,n48,n52,n56,n60,n64},
+ one ENUMERATED {n4,n8,n12,n16,n20,n24,n28,n32,n36,n40,n44,n48,n52,n56,n60,n64},
+ two ENUMERATED {n4,n8,n12,n16,n20,n24,n28,n32},
+ four INTEGER (1..16),
+ eight INTEGER (1..8),
+ sixteen INTEGER (1..4)
+ } OPTIONAL, -- Cond 2StepOnly
+ msgA-CB-PreamblesPerSSB-PerSharedRO-r16 INTEGER (1..60) OPTIONAL, -- Cond SharedRO
+ msgA-SSB-SharedRO-MaskIndex-r16 INTEGER (1..15) OPTIONAL, -- Need S
+ groupB-ConfiguredTwoStepRA-r16 GroupB-ConfiguredTwoStepRA-r16 OPTIONAL, -- Need S
+ msgA-PRACH-RootSequenceIndex-r16 CHOICE {
+ l839 INTEGER (0..837),
+ l139 INTEGER (0..137),
+ l571 INTEGER (0..569),
+ l1151 INTEGER (0..1149)
+ } OPTIONAL, -- Cond 2StepOnly
+ msgA-TransMax-r16 ENUMERATED {n1, n2, n4, n6, n8, n10, n20, n50, n100, n200} OPTIONAL, -- Need R
+ msgA-RSRP-Threshold-r16 RSRP-Range OPTIONAL, -- Cond 2Step4Step
+ msgA-RSRP-ThresholdSSB-r16 RSRP-Range OPTIONAL, -- Need R
+ msgA-SubcarrierSpacing-r16 SubcarrierSpacing OPTIONAL, -- Cond 2StepOnlyL139
+ msgA-RestrictedSetConfig-r16 ENUMERATED {unrestrictedSet, restrictedSetTypeA,
+ restrictedSetTypeB} OPTIONAL, -- Cond 2StepOnly
+ ra-PrioritizationForAccessIdentityTwoStep-r16 SEQUENCE {
+ ra-Prioritization-r16 RA-Prioritization,
+ ra-PrioritizationForAI-r16 BIT STRING (SIZE (2))
+ } OPTIONAL, -- Cond InitialBWP-Only
+ ra-ContentionResolutionTimer-r16 ENUMERATED {sf8, sf16, sf24, sf32, sf40, sf48, sf56, sf64} OPTIONAL, -- Cond 2StepOnly
+ ...,
+ [[
+ ra-PrioritizationForSlicingTwoStep-r17 RA-PrioritizationForSlicing-r17 OPTIONAL, -- Cond InitialBWP-Only
+ featureCombinationPreamblesList-r17 SEQUENCE (SIZE(1..maxFeatureCombPreamblesPerRACHResource-r17)) OF FeatureCombinationPreambles-r17 OPTIONAL -- Cond AdditionalRACH
+ ]]
+}
+
+GroupB-ConfiguredTwoStepRA-r16 ::= SEQUENCE {
+ ra-MsgA-SizeGroupA ENUMERATED {b56, b144, b208, b256, b282, b480, b640, b800,
+ b1000, b72, spare6, spare5, spare4, spare3, spare2, spare1},
+ messagePowerOffsetGroupB ENUMERATED {minusinfinity, dB0, dB5, dB8, dB10, dB12, dB15, dB18},
+ numberOfRA-PreamblesGroupA INTEGER (1..64)
+}
+
+-- TAG-RACH-CONFIGCOMMONTWOSTEPRA-STOP
+-- TAG-RACH-CONFIGDEDICATED-START
+
+
+RACH-ConfigDedicated ::= SEQUENCE {
+ cfra CFRA OPTIONAL, -- Need S
+ ra-Prioritization RA-Prioritization OPTIONAL, -- Need N
+ ...,
+ [[
+ ra-PrioritizationTwoStep-r16 RA-Prioritization OPTIONAL, -- Need N
+ cfra-TwoStep-r16 CFRA-TwoStep-r16 OPTIONAL -- Need S
+ ]]
+}
+
+CFRA ::= SEQUENCE {
+ occasions SEQUENCE {
+ rach-ConfigGeneric RACH-ConfigGeneric,
+ ssb-perRACH-Occasion ENUMERATED {oneEighth, oneFourth, oneHalf, one, two, four, eight, sixteen}
+ OPTIONAL -- Cond Mandatory
+ } OPTIONAL, -- Need S
+ resources CHOICE {
+ ssb SEQUENCE {
+ ssb-ResourceList SEQUENCE (SIZE(1..maxRA-SSB-Resources)) OF CFRA-SSB-Resource,
+ ra-ssb-OccasionMaskIndex INTEGER (0..15)
+ },
+ csirs SEQUENCE {
+ csirs-ResourceList SEQUENCE (SIZE(1..maxRA-CSIRS-Resources)) OF CFRA-CSIRS-Resource,
+ rsrp-ThresholdCSI-RS RSRP-Range
+ }
+ },
+ ...,
+ [[
+ totalNumberOfRA-Preambles INTEGER (1..63) OPTIONAL -- Cond Occasions
+ ]]
+}
+
+CFRA-TwoStep-r16 ::= SEQUENCE {
+ occasionsTwoStepRA-r16 SEQUENCE {
+ rach-ConfigGenericTwoStepRA-r16 RACH-ConfigGenericTwoStepRA-r16,
+ ssb-PerRACH-OccasionTwoStepRA-r16 ENUMERATED {oneEighth, oneFourth, oneHalf, one,
+ two, four, eight, sixteen}
+ } OPTIONAL, -- Need S
+ msgA-CFRA-PUSCH-r16 MsgA-PUSCH-Resource-r16,
+ msgA-TransMax-r16 ENUMERATED {n1, n2, n4, n6, n8, n10, n20, n50, n100, n200} OPTIONAL, -- Need S
+ resourcesTwoStep-r16 SEQUENCE {
+ ssb-ResourceList SEQUENCE (SIZE(1..maxRA-SSB-Resources)) OF CFRA-SSB-Resource,
+ ra-ssb-OccasionMaskIndex INTEGER (0..15)
+ },
+ ...
+}
+
+CFRA-SSB-Resource ::= SEQUENCE {
+ ssb SSB-Index,
+ ra-PreambleIndex INTEGER (0..63),
+ ...,
+ [[
+ msgA-PUSCH-Resource-Index-r16 INTEGER (0..3071) OPTIONAL -- Cond 2StepCFRA
+ ]]
+
+}
+
+CFRA-CSIRS-Resource ::= SEQUENCE {
+ csi-RS CSI-RS-Index,
+ ra-OccasionList SEQUENCE (SIZE(1..maxRA-OccasionsPerCSIRS)) OF INTEGER (0..maxRA-Occasions-1),
+ ra-PreambleIndex INTEGER (0..63),
+ ...
+}
+
+-- TAG-RACH-CONFIGDEDICATED-STOP
+-- TAG-RACH-CONFIGGENERIC-START
+
+RACH-ConfigGeneric ::= SEQUENCE {
+ prach-ConfigurationIndex INTEGER (0..255),
+ msg1-FDM ENUMERATED {one, two, four, eight},
+ msg1-FrequencyStart INTEGER (0..maxNrofPhysicalResourceBlocks-1),
+ zeroCorrelationZoneConfig INTEGER(0..15),
+ preambleReceivedTargetPower INTEGER (-202..-60),
+ preambleTransMax ENUMERATED {n3, n4, n5, n6, n7, n8, n10, n20, n50, n100, n200},
+ powerRampingStep ENUMERATED {dB0, dB2, dB4, dB6},
+ ra-ResponseWindow ENUMERATED {sl1, sl2, sl4, sl8, sl10, sl20, sl40, sl80},
+ ...,
+ [[
+ prach-ConfigurationPeriodScaling-IAB-r16 ENUMERATED {scf1,scf2,scf4,scf8,scf16,scf32,scf64} OPTIONAL, -- Need R
+ prach-ConfigurationFrameOffset-IAB-r16 INTEGER (0..63) OPTIONAL, -- Need R
+ prach-ConfigurationSOffset-IAB-r16 INTEGER (0..39) OPTIONAL, -- Need R
+ ra-ResponseWindow-v1610 ENUMERATED { sl60, sl160} OPTIONAL, -- Need R
+ prach-ConfigurationIndex-v1610 INTEGER (256..262) OPTIONAL -- Need R
+ ]],
+ [[
+ ra-ResponseWindow-v1700 ENUMERATED {sl240, sl320, sl640, sl960, sl1280, sl1920, sl2560} OPTIONAL -- Need R
+ ]]
+}
+
+-- TAG-RACH-CONFIGGENERIC-STOP
+-- TAG-RACH-CONFIGGENERICTWOSTEPRA-START
+
+RACH-ConfigGenericTwoStepRA-r16 ::= SEQUENCE {
+ msgA-PRACH-ConfigurationIndex-r16 INTEGER (0..262) OPTIONAL, -- Cond 2StepOnly
+ msgA-RO-FDM-r16 ENUMERATED {one, two, four, eight} OPTIONAL, -- Cond 2StepOnly
+ msgA-RO-FrequencyStart-r16 INTEGER (0..maxNrofPhysicalResourceBlocks-1) OPTIONAL, -- Cond 2StepOnly
+ msgA-ZeroCorrelationZoneConfig-r16 INTEGER (0..15) OPTIONAL, -- Cond 2StepOnly
+ msgA-PreamblePowerRampingStep-r16 ENUMERATED {dB0, dB2, dB4, dB6} OPTIONAL, -- Cond 2StepOnlyNoCFRA
+ msgA-PreambleReceivedTargetPower-r16 INTEGER (-202..-60) OPTIONAL, -- Cond 2StepOnlyNoCFRA
+ msgB-ResponseWindow-r16 ENUMERATED {sl1, sl2, sl4, sl8, sl10, sl20, sl40, sl80, sl160, sl320}
+ OPTIONAL, -- Cond NoCFRA
+ preambleTransMax-r16 ENUMERATED {n3, n4, n5, n6, n7, n8, n10, n20, n50, n100, n200} OPTIONAL, -- Cond 2StepOnlyNoCFRA
+ ...,
+ [[
+ msgB-ResponseWindow-v1700 ENUMERATED {sl240, sl640, sl960, sl1280, sl1920, sl2560} OPTIONAL -- Cond NoCFRA2
+ ]]
+}
+
+-- TAG-RACH-CONFIGGENERICTWOSTEPRA-STOP
+-- TAG-RA-PRIORITIZATION-START
+
+RA-Prioritization ::= SEQUENCE {
+ powerRampingStepHighPriority ENUMERATED {dB0, dB2, dB4, dB6},
+ scalingFactorBI ENUMERATED {zero, dot25, dot5, dot75} OPTIONAL, -- Need R
+ ...
+}
+
+-- TAG-RA-PRIORITIZATION-STOP
+-- TAG-RA-PRIORITIZATIONFORSLICING-START
+
+RA-PrioritizationForSlicing-r17 ::= SEQUENCE {
+ ra-PrioritizationSliceInfoList-r17 RA-PrioritizationSliceInfoList-r17,
+ ...
+}
+
+RA-PrioritizationSliceInfoList-r17 ::= SEQUENCE (SIZE (1..maxSliceInfo-r17)) OF RA-PrioritizationSliceInfo-r17
+
+RA-PrioritizationSliceInfo-r17 ::= SEQUENCE {
+ nsag-ID-List-r17 SEQUENCE (SIZE (1..maxSliceInfo-r17)) OF NSAG-ID-r17,
+ ra-Prioritization-r17 RA-Prioritization,
+ ...
+}
+
+-- TAG-RA-PRIORITIZATIONFORSLICING-STOP
+-- TAG-RADIOBEARERCONFIG-START
+
+RadioBearerConfig ::= SEQUENCE {
+ srb-ToAddModList SRB-ToAddModList OPTIONAL, -- Cond HO-Conn
+ srb3-ToRelease ENUMERATED{true} OPTIONAL, -- Need N
+ drb-ToAddModList DRB-ToAddModList OPTIONAL, -- Cond HO-toNR
+ drb-ToReleaseList DRB-ToReleaseList OPTIONAL, -- Need N
+ securityConfig SecurityConfig OPTIONAL, -- Need M
+ ...,
+ [[
+ mrb-ToAddModList-r17 MRB-ToAddModList-r17 OPTIONAL, -- Need N
+ mrb-ToReleaseList-r17 MRB-ToReleaseList-r17 OPTIONAL, -- Need N
+ srb4-ToAddMod-r17 SRB-ToAddMod OPTIONAL, -- Need N
+ srb4-ToRelease-r17 ENUMERATED{true} OPTIONAL -- Need N
+ ]]
+
+}
+
+SRB-ToAddModList ::= SEQUENCE (SIZE (1..2)) OF SRB-ToAddMod
+
+SRB-ToAddMod ::= SEQUENCE {
+ srb-Identity SRB-Identity,
+ reestablishPDCP ENUMERATED{true} OPTIONAL, -- Need N
+ discardOnPDCP ENUMERATED{true} OPTIONAL, -- Need N
+ pdcp-Config PDCP-Config OPTIONAL, -- Cond PDCP
+ ...,
+ [[
+ srb-Identity-v1700 SRB-Identity-v1700 OPTIONAL -- Need M
+ ]]
+}
+
+DRB-ToAddModList ::= SEQUENCE (SIZE (1..maxDRB)) OF DRB-ToAddMod
+
+DRB-ToAddMod ::= SEQUENCE {
+ cnAssociation CHOICE {
+ eps-BearerIdentity INTEGER (0..15),
+ sdap-Config SDAP-Config
+ } OPTIONAL, -- Cond DRBSetup
+ drb-Identity DRB-Identity,
+ reestablishPDCP ENUMERATED{true} OPTIONAL, -- Need N
+ recoverPDCP ENUMERATED{true} OPTIONAL, -- Need N
+ pdcp-Config PDCP-Config OPTIONAL, -- Cond PDCP
+ ...,
+ [[
+ daps-Config-r16 ENUMERATED{true} OPTIONAL -- Cond DAPS
+ ]]
+}
+DRB-ToReleaseList ::= SEQUENCE (SIZE (1..maxDRB)) OF DRB-Identity
+
+SecurityConfig ::= SEQUENCE {
+ securityAlgorithmConfig SecurityAlgorithmConfig OPTIONAL, -- Cond RBTermChange1
+ keyToUse ENUMERATED{master, secondary} OPTIONAL, -- Cond RBTermChange
+ ...
+}
+
+MRB-ToAddModList-r17 ::= SEQUENCE (SIZE (1..maxMRB-r17)) OF MRB-ToAddMod-r17
+
+MRB-ToAddMod-r17 ::= SEQUENCE {
+ mbs-SessionId-r17 TMGI-r17 OPTIONAL, -- Cond MRBSetup
+ mrb-Identity-r17 MRB-Identity-r17,
+ mrb-IdentityNew-r17 MRB-Identity-r17 OPTIONAL, -- Need N
+ reestablishPDCP-r17 ENUMERATED{true} OPTIONAL, -- Need N
+ recoverPDCP-r17 ENUMERATED{true} OPTIONAL, -- Need N
+ pdcp-Config-r17 PDCP-Config OPTIONAL, -- Cond PDCP
+ ...
+}
+
+MRB-ToReleaseList-r17 ::= SEQUENCE (SIZE (1..maxMRB-r17)) OF MRB-Identity-r17
+
+-- TAG-RADIOBEARERCONFIG-STOP
+-- TAG-RADIOLINKMONITORINGCONFIG-START
+
+RadioLinkMonitoringConfig ::= SEQUENCE {
+ failureDetectionResourcesToAddModList SEQUENCE (SIZE(1..maxNrofFailureDetectionResources)) OF RadioLinkMonitoringRS
+ OPTIONAL, -- Need N
+ failureDetectionResourcesToReleaseList SEQUENCE (SIZE(1..maxNrofFailureDetectionResources)) OF RadioLinkMonitoringRS-Id
+ OPTIONAL, -- Need N
+ beamFailureInstanceMaxCount ENUMERATED {n1, n2, n3, n4, n5, n6, n8, n10} OPTIONAL, -- Need R
+ beamFailureDetectionTimer ENUMERATED {pbfd1, pbfd2, pbfd3, pbfd4, pbfd5, pbfd6, pbfd8, pbfd10} OPTIONAL, -- Need R
+ ...,
+ [[
+ beamfailure-r17 BeamFailureDetection-r17 OPTIONAL -- Need R
+ ]]
+}
+
+BeamFailureDetection-r17 ::= SEQUENCE {
+ failureDetectionSet1-r17 BeamFailureDetectionSet-r17 OPTIONAL, -- Need R
+ failureDetectionSet2-r17 BeamFailureDetectionSet-r17 OPTIONAL, -- Need R
+ additionalPCI-r17 AdditionalPCIIndex-r17 OPTIONAL -- Need R
+}
+
+RadioLinkMonitoringRS ::= SEQUENCE {
+ radioLinkMonitoringRS-Id RadioLinkMonitoringRS-Id,
+ purpose ENUMERATED {beamFailure, rlf, both},
+ detectionResource CHOICE {
+ ssb-Index SSB-Index,
+ csi-RS-Index NZP-CSI-RS-ResourceId
+ },
+ ...
+}
+
+BeamFailureDetectionSet-r17 ::= SEQUENCE {
+ bfdResourcesToAddModList-r17 SEQUENCE (SIZE(1..maxNrofBFDResourcePerSet-r17)) OF BeamLinkMonitoringRS-r17
+ OPTIONAL, -- Need N
+ bfdResourcesToReleaseList-r17 SEQUENCE (SIZE(1..maxNrofBFDResourcePerSet-r17)) OF BeamLinkMonitoringRS-Id-r17
+ OPTIONAL, -- Need N
+ beamFailureInstanceMaxCount-r17 ENUMERATED {n1, n2, n3, n4, n5, n6, n8, n10} OPTIONAL, -- Need R
+ beamFailureDetectionTimer-r17 ENUMERATED {pbfd1, pbfd2, pbfd3, pbfd4, pbfd5, pbfd6, pbfd8, pbfd10} OPTIONAL, -- Need R
+ ...
+}
+
+BeamLinkMonitoringRS-r17 ::= SEQUENCE {
+ beamLinkMonitoringRS-Id-r17 BeamLinkMonitoringRS-Id-r17,
+ detectionResource-r17 CHOICE {
+ ssb-Index SSB-Index,
+ csi-RS-Index NZP-CSI-RS-ResourceId
+ },
+ ...
+}
+
+BeamLinkMonitoringRS-Id-r17 ::= INTEGER (0..maxNrofFailureDetectionResources-1-r17)
+
+-- TAG-RADIOLINKMONITORINGCONFIG-STOP
+-- TAG-RADIOLINKMONITORINGRS-ID-START
+
+RadioLinkMonitoringRS-Id ::= INTEGER (0..maxNrofFailureDetectionResources-1)
+
+-- TAG-RADIOLINKMONITORINGRS-ID-STOP
+-- TAG-RAN-AREACODE-START
+
+RAN-AreaCode ::= INTEGER (0..255)
+
+-- TAG-RAN-AREACODE-STOP
+-- TAG-RATEMATCHPATTERN-START
+
+RateMatchPattern ::= SEQUENCE {
+ rateMatchPatternId RateMatchPatternId,
+
+ patternType CHOICE {
+ bitmaps SEQUENCE {
+ resourceBlocks BIT STRING (SIZE (275)),
+ symbolsInResourceBlock CHOICE {
+ oneSlot BIT STRING (SIZE (14)),
+ twoSlots BIT STRING (SIZE (28))
+ },
+ periodicityAndPattern CHOICE {
+ n2 BIT STRING (SIZE (2)),
+ n4 BIT STRING (SIZE (4)),
+ n5 BIT STRING (SIZE (5)),
+ n8 BIT STRING (SIZE (8)),
+ n10 BIT STRING (SIZE (10)),
+ n20 BIT STRING (SIZE (20)),
+ n40 BIT STRING (SIZE (40))
+ } OPTIONAL, -- Need S
+ ...
+ },
+ controlResourceSet ControlResourceSetId
+ },
+ subcarrierSpacing SubcarrierSpacing OPTIONAL, -- Cond CellLevel
+ dummy ENUMERATED { dynamic, semiStatic },
+ ...,
+ [[
+ controlResourceSet-r16 ControlResourceSetId-r16 OPTIONAL -- Need R
+ ]]
+
+}
+
+-- TAG-RATEMATCHPATTERN-STOP
+-- TAG-RATEMATCHPATTERNID-START
+
+RateMatchPatternId ::= INTEGER (0..maxNrofRateMatchPatterns-1)
+
+-- TAG-RATEMATCHPATTERNID-STOP
+-- TAG-RATEMATCHPATTERNLTE-CRS-START
+
+RateMatchPatternLTE-CRS ::= SEQUENCE {
+ carrierFreqDL INTEGER (0..16383),
+ carrierBandwidthDL ENUMERATED {n6, n15, n25, n50, n75, n100, spare2, spare1},
+ mbsfn-SubframeConfigList EUTRA-MBSFN-SubframeConfigList OPTIONAL, -- Need M
+ nrofCRS-Ports ENUMERATED {n1, n2, n4},
+ v-Shift ENUMERATED {n0, n1, n2, n3, n4, n5}
+}
+
+LTE-CRS-PatternList-r16 ::= SEQUENCE (SIZE (1..maxLTE-CRS-Patterns-r16)) OF RateMatchPatternLTE-CRS
+
+-- TAG-RATEMATCHPATTERNLTE-CRS-STOP
+-- TAG-REFERENCELOCATION-START
+
+ReferenceLocation-r17 ::= OCTET STRING
+
+-- TAG-REFERENCELOCATION-STOP
+-- TAG-REFERENCETIMEINFO-START
+
+ReferenceTimeInfo-r16 ::= SEQUENCE {
+ time-r16 ReferenceTime-r16,
+ uncertainty-r16 INTEGER (0..32767) OPTIONAL, -- Need S
+ timeInfoType-r16 ENUMERATED {localClock} OPTIONAL, -- Need S
+ referenceSFN-r16 INTEGER (0..1023) OPTIONAL -- Cond RefTime
+}
+
+ReferenceTime-r16 ::= SEQUENCE {
+ refDays-r16 INTEGER (0..72999),
+ refSeconds-r16 INTEGER (0..86399),
+ refMilliSeconds-r16 INTEGER (0..999),
+ refTenNanoSeconds-r16 INTEGER (0..99999)
+}
+
+-- TAG-REFERENCETIMEINFO-STOP
+-- TAG-REJECTWAITTIME-START
+
+RejectWaitTime ::= INTEGER (1..16)
+
+-- TAG-REJECTWAITTIME-STOP
+-- TAG-REPETITIONSCHEMECONFIG-START
+
+RepetitionSchemeConfig-r16 ::= CHOICE {
+ fdm-TDM-r16 SetupRelease { FDM-TDM-r16 },
+ slotBased-r16 SetupRelease { SlotBased-r16 }
+}
+
+RepetitionSchemeConfig-v1630 ::= SEQUENCE {
+ slotBased-v1630 SetupRelease { SlotBased-v1630 }
+}
+
+FDM-TDM-r16 ::= SEQUENCE {
+ repetitionScheme-r16 ENUMERATED {fdmSchemeA, fdmSchemeB,tdmSchemeA },
+ startingSymbolOffsetK-r16 INTEGER (0..7) OPTIONAL -- Need R
+}
+
+SlotBased-r16 ::= SEQUENCE {
+ tciMapping-r16 ENUMERATED {cyclicMapping, sequentialMapping},
+ sequenceOffsetForRV-r16 INTEGER (1..3)
+}
+
+SlotBased-v1630 ::= SEQUENCE {
+ tciMapping-r16 ENUMERATED {cyclicMapping, sequentialMapping},
+ sequenceOffsetForRV-r16 INTEGER (0)
+}
+
+-- TAG-REPETITIONSCHEMECONFIG-STOP
+-- TAG-REPORTCONFIGID-START
+
+ReportConfigId ::= INTEGER (1..maxReportConfigId)
+
+-- TAG-REPORTCONFIGID-STOP
+-- TAG-REPORTCONFIGINTERRAT-START
+
+ReportConfigInterRAT ::= SEQUENCE {
+ reportType CHOICE {
+ periodical PeriodicalReportConfigInterRAT,
+ eventTriggered EventTriggerConfigInterRAT,
+ reportCGI ReportCGI-EUTRA,
+ ...,
+ reportSFTD ReportSFTD-EUTRA
+ }
+}
+
+ReportCGI-EUTRA ::= SEQUENCE {
+ cellForWhichToReportCGI EUTRA-PhysCellId,
+ ...,
+ [[
+ useAutonomousGaps-r16 ENUMERATED {setup} OPTIONAL -- Need R
+ ]]
+}
+
+ReportSFTD-EUTRA ::= SEQUENCE {
+ reportSFTD-Meas BOOLEAN,
+ reportRSRP BOOLEAN,
+ ...
+}
+
+EventTriggerConfigInterRAT ::= SEQUENCE {
+ eventId CHOICE {
+ eventB1 SEQUENCE {
+ b1-ThresholdEUTRA MeasTriggerQuantityEUTRA,
+ reportOnLeave BOOLEAN,
+ hysteresis Hysteresis,
+ timeToTrigger TimeToTrigger,
+ ...
+ },
+ eventB2 SEQUENCE {
+ b2-Threshold1 MeasTriggerQuantity,
+ b2-Threshold2EUTRA MeasTriggerQuantityEUTRA,
+ reportOnLeave BOOLEAN,
+ hysteresis Hysteresis,
+ timeToTrigger TimeToTrigger,
+ ...
+ },
+ ...,
+ [[
+ eventB1-UTRA-FDD-r16 SEQUENCE {
+ b1-ThresholdUTRA-FDD-r16 MeasTriggerQuantityUTRA-FDD-r16,
+ reportOnLeave-r16 BOOLEAN,
+ hysteresis-r16 Hysteresis,
+ timeToTrigger-r16 TimeToTrigger,
+ ...
+ },
+ eventB2-UTRA-FDD-r16 SEQUENCE {
+ b2-Threshold1-r16 MeasTriggerQuantity,
+ b2-Threshold2UTRA-FDD-r16 MeasTriggerQuantityUTRA-FDD-r16,
+ reportOnLeave-r16 BOOLEAN,
+ hysteresis-r16 Hysteresis,
+ timeToTrigger-r16 TimeToTrigger,
+ ...
+ }
+ ]],
+ [[
+ eventY1-Relay-r17 SEQUENCE {
+ y1-Threshold1-r17 MeasTriggerQuantity,
+ y1-Threshold2-Relay-r17 SL-MeasTriggerQuantity-r16,
+ reportOnLeave-r17 BOOLEAN,
+ hysteresis-r17 Hysteresis,
+ timeToTrigger-r17 TimeToTrigger,
+ ...
+ },
+ eventY2-Relay-r17 SEQUENCE {
+ y2-Threshold-Relay-r17 SL-MeasTriggerQuantity-r16,
+ reportOnLeave-r17 BOOLEAN,
+ hysteresis-r17 Hysteresis,
+ timeToTrigger-r17 TimeToTrigger,
+ ...
+ }
+ ]]
+ },
+ rsType NR-RS-Type,
+
+ reportInterval ReportInterval,
+ reportAmount ENUMERATED {r1, r2, r4, r8, r16, r32, r64, infinity},
+ reportQuantity MeasReportQuantity,
+ maxReportCells INTEGER (1..maxCellReport),
+ ...,
+ [[
+ reportQuantityUTRA-FDD-r16 MeasReportQuantityUTRA-FDD-r16 OPTIONAL -- Need R
+ ]],
+ [[
+ includeCommonLocationInfo-r16 ENUMERATED {true} OPTIONAL, -- Need R
+ includeBT-Meas-r16 SetupRelease {BT-NameList-r16} OPTIONAL, -- Need M
+ includeWLAN-Meas-r16 SetupRelease {WLAN-NameList-r16} OPTIONAL, -- Need M
+ includeSensor-Meas-r16 SetupRelease {Sensor-NameList-r16} OPTIONAL -- Need M
+ ]],
+ [[
+ reportQuantityRelay-r17 SL-MeasReportQuantity-r16 OPTIONAL -- Need R
+ ]]}
+
+PeriodicalReportConfigInterRAT ::= SEQUENCE {
+ reportInterval ReportInterval,
+ reportAmount ENUMERATED {r1, r2, r4, r8, r16, r32, r64, infinity},
+ reportQuantity MeasReportQuantity,
+ maxReportCells INTEGER (1..maxCellReport),
+ ...,
+ [[
+ reportQuantityUTRA-FDD-r16 MeasReportQuantityUTRA-FDD-r16 OPTIONAL -- Need R
+ ]],
+ [[
+ includeCommonLocationInfo-r16 ENUMERATED {true} OPTIONAL, -- Need R
+ includeBT-Meas-r16 SetupRelease {BT-NameList-r16} OPTIONAL, -- Need M
+ includeWLAN-Meas-r16 SetupRelease {WLAN-NameList-r16} OPTIONAL, -- Need M
+ includeSensor-Meas-r16 SetupRelease {Sensor-NameList-r16} OPTIONAL -- Need M
+ ]],
+ [[
+ reportQuantityRelay-r17 SL-MeasReportQuantity-r16 OPTIONAL -- Need R
+ ]]
+
+}
+
+MeasTriggerQuantityUTRA-FDD-r16 ::= CHOICE{
+ utra-FDD-RSCP-r16 INTEGER (-5..91),
+ utra-FDD-EcN0-r16 INTEGER (0..49)
+}
+
+MeasReportQuantityUTRA-FDD-r16 ::= SEQUENCE {
+ cpich-RSCP BOOLEAN,
+ cpich-EcN0 BOOLEAN
+}
+
+-- TAG-REPORTCONFIGINTERRAT-STOP
+-- TAG-REPORTCONFIGNR-START
+
+ReportConfigNR ::= SEQUENCE {
+ reportType CHOICE {
+ periodical PeriodicalReportConfig,
+ eventTriggered EventTriggerConfig,
+ ...,
+ reportCGI ReportCGI,
+ reportSFTD ReportSFTD-NR,
+ condTriggerConfig-r16 CondTriggerConfig-r16,
+ cli-Periodical-r16 CLI-PeriodicalReportConfig-r16,
+ cli-EventTriggered-r16 CLI-EventTriggerConfig-r16,
+ rxTxPeriodical-r17 RxTxPeriodical-r17
+ }
+}
+
+ReportCGI ::= SEQUENCE {
+ cellForWhichToReportCGI PhysCellId,
+ ...,
+ [[
+ useAutonomousGaps-r16 ENUMERATED {setup} OPTIONAL -- Need R
+ ]]
+
+}
+
+ReportSFTD-NR ::= SEQUENCE {
+ reportSFTD-Meas BOOLEAN,
+ reportRSRP BOOLEAN,
+ ...,
+ [[
+ reportSFTD-NeighMeas ENUMERATED {true} OPTIONAL, -- Need R
+ drx-SFTD-NeighMeas ENUMERATED {true} OPTIONAL, -- Need R
+ cellsForWhichToReportSFTD SEQUENCE (SIZE (1..maxCellSFTD)) OF PhysCellId OPTIONAL -- Need R
+ ]]
+}
+
+CondTriggerConfig-r16 ::= SEQUENCE {
+ condEventId CHOICE {
+ condEventA3 SEQUENCE {
+ a3-Offset MeasTriggerQuantityOffset,
+ hysteresis Hysteresis,
+ timeToTrigger TimeToTrigger
+ },
+ condEventA5 SEQUENCE {
+ a5-Threshold1 MeasTriggerQuantity,
+ a5-Threshold2 MeasTriggerQuantity,
+ hysteresis Hysteresis,
+ timeToTrigger TimeToTrigger
+ },
+ ...,
+ condEventA4-r17 SEQUENCE {
+ a4-Threshold-r17 MeasTriggerQuantity,
+ hysteresis-r17 Hysteresis,
+ timeToTrigger-r17 TimeToTrigger
+ },
+ condEventD1-r17 SEQUENCE {
+ distanceThreshFromReference1-r17 INTEGER(0.. 65525),
+ distanceThreshFromReference2-r17 INTEGER(0.. 65525),
+ referenceLocation1-r17 ReferenceLocation-r17,
+ referenceLocation2-r17 ReferenceLocation-r17,
+ hysteresisLocation-r17 HysteresisLocation-r17,
+ timeToTrigger-r17 TimeToTrigger
+ },
+ condEventT1-r17 SEQUENCE {
+ t1-Threshold-r17 INTEGER (0..549755813887),
+ duration-r17 INTEGER (1..6000)
+ }
+ },
+ rsType-r16 NR-RS-Type,
+ ...
+}
+
+EventTriggerConfig::= SEQUENCE {
+ eventId CHOICE {
+ eventA1 SEQUENCE {
+ a1-Threshold MeasTriggerQuantity,
+ reportOnLeave BOOLEAN,
+ hysteresis Hysteresis,
+ timeToTrigger TimeToTrigger
+ },
+ eventA2 SEQUENCE {
+ a2-Threshold MeasTriggerQuantity,
+ reportOnLeave BOOLEAN,
+ hysteresis Hysteresis,
+ timeToTrigger TimeToTrigger
+ },
+ eventA3 SEQUENCE {
+ a3-Offset MeasTriggerQuantityOffset,
+ reportOnLeave BOOLEAN,
+ hysteresis Hysteresis,
+ timeToTrigger TimeToTrigger,
+ useAllowedCellList BOOLEAN
+ },
+ eventA4 SEQUENCE {
+ a4-Threshold MeasTriggerQuantity,
+ reportOnLeave BOOLEAN,
+ hysteresis Hysteresis,
+ timeToTrigger TimeToTrigger,
+ useAllowedCellList BOOLEAN
+ },
+ eventA5 SEQUENCE {
+ a5-Threshold1 MeasTriggerQuantity,
+ a5-Threshold2 MeasTriggerQuantity,
+ reportOnLeave BOOLEAN,
+ hysteresis Hysteresis,
+ timeToTrigger TimeToTrigger,
+ useAllowedCellList BOOLEAN
+ },
+ eventA6 SEQUENCE {
+ a6-Offset MeasTriggerQuantityOffset,
+ reportOnLeave BOOLEAN,
+ hysteresis Hysteresis,
+ timeToTrigger TimeToTrigger,
+ useAllowedCellList BOOLEAN
+ },
+ ...,
+ [[
+ eventX1-r17 SEQUENCE {
+ x1-Threshold1-Relay-r17 SL-MeasTriggerQuantity-r16,
+ x1-Threshold2-r17 MeasTriggerQuantity,
+ reportOnLeave-r17 BOOLEAN,
+ hysteresis-r17 Hysteresis,
+ timeToTrigger-r17 TimeToTrigger,
+ useAllowedCellList-r17 BOOLEAN
+ },
+ eventX2-r17 SEQUENCE {
+ x2-Threshold-Relay-r17 SL-MeasTriggerQuantity-r16,
+ reportOnLeave-r17 BOOLEAN,
+ hysteresis-r17 Hysteresis,
+ timeToTrigger-r17 TimeToTrigger
+ },
+ eventD1-r17 SEQUENCE {
+ distanceThreshFromReference1-r17 INTEGER(1.. 65525),
+ distanceThreshFromReference2-r17 INTEGER(1.. 65525),
+ referenceLocation1-r17 ReferenceLocation-r17,
+ referenceLocation2-r17 ReferenceLocation-r17,
+ reportOnLeave-r17 BOOLEAN,
+ hysteresisLocation-r17 HysteresisLocation-r17,
+ timeToTrigger-r17 TimeToTrigger
+ }
+ ]]
+ },
+ rsType NR-RS-Type,
+ reportInterval ReportInterval,
+ reportAmount ENUMERATED {r1, r2, r4, r8, r16, r32, r64, infinity},
+ reportQuantityCell MeasReportQuantity,
+ maxReportCells INTEGER (1..maxCellReport),
+ reportQuantityRS-Indexes MeasReportQuantity OPTIONAL, -- Need R
+ maxNrofRS-IndexesToReport INTEGER (1..maxNrofIndexesToReport) OPTIONAL, -- Need R
+ includeBeamMeasurements BOOLEAN,
+ reportAddNeighMeas ENUMERATED {setup} OPTIONAL, -- Need R
+ ...,
+ [[
+ measRSSI-ReportConfig-r16 MeasRSSI-ReportConfig-r16 OPTIONAL, -- Need R
+ useT312-r16 BOOLEAN OPTIONAL, -- Need M
+ includeCommonLocationInfo-r16 ENUMERATED {true} OPTIONAL, -- Need R
+ includeBT-Meas-r16 SetupRelease {BT-NameList-r16} OPTIONAL, -- Need M
+ includeWLAN-Meas-r16 SetupRelease {WLAN-NameList-r16} OPTIONAL, -- Need M
+ includeSensor-Meas-r16 SetupRelease {Sensor-NameList-r16} OPTIONAL -- Need M
+ ]],
+ [[
+ coarseLocationRequest-r17 ENUMERATED {true} OPTIONAL, -- Need R
+ reportQuantityRelay-r17 SL-MeasReportQuantity-r16 OPTIONAL -- Need R
+ ]]
+}
+
+PeriodicalReportConfig ::= SEQUENCE {
+ rsType NR-RS-Type,
+ reportInterval ReportInterval,
+ reportAmount ENUMERATED {r1, r2, r4, r8, r16, r32, r64, infinity},
+ reportQuantityCell MeasReportQuantity,
+ maxReportCells INTEGER (1..maxCellReport),
+ reportQuantityRS-Indexes MeasReportQuantity OPTIONAL, -- Need R
+ maxNrofRS-IndexesToReport INTEGER (1..maxNrofIndexesToReport) OPTIONAL, -- Need R
+ includeBeamMeasurements BOOLEAN,
+ useAllowedCellList BOOLEAN,
+ ...,
+ [[
+ measRSSI-ReportConfig-r16 MeasRSSI-ReportConfig-r16 OPTIONAL, -- Need R
+ includeCommonLocationInfo-r16 ENUMERATED {true} OPTIONAL, -- Need R
+ includeBT-Meas-r16 SetupRelease {BT-NameList-r16} OPTIONAL, -- Need M
+ includeWLAN-Meas-r16 SetupRelease {WLAN-NameList-r16} OPTIONAL, -- Need M
+ includeSensor-Meas-r16 SetupRelease {Sensor-NameList-r16} OPTIONAL, -- Need M
+ ul-DelayValueConfig-r16 SetupRelease { UL-DelayValueConfig-r16 } OPTIONAL, -- Need M
+ reportAddNeighMeas-r16 ENUMERATED {setup} OPTIONAL -- Need R
+ ]],
+ [[
+ ul-ExcessDelayConfig-r17 SetupRelease { UL-ExcessDelayConfig-r17 } OPTIONAL, -- Need M
+ coarseLocationRequest-r17 ENUMERATED {true} OPTIONAL, -- Need R
+ reportQuantityRelay-r17 SL-MeasReportQuantity-r16 OPTIONAL -- Need R
+ ]]
+}
+
+NR-RS-Type ::= ENUMERATED {ssb, csi-rs}
+
+MeasTriggerQuantity ::= CHOICE {
+ rsrp RSRP-Range,
+ rsrq RSRQ-Range,
+ sinr SINR-Range
+}
+
+MeasTriggerQuantityOffset ::= CHOICE {
+ rsrp INTEGER (-30..30),
+ rsrq INTEGER (-30..30),
+ sinr INTEGER (-30..30)
+}
+
+
+MeasReportQuantity ::= SEQUENCE {
+ rsrp BOOLEAN,
+ rsrq BOOLEAN,
+ sinr BOOLEAN
+}
+
+MeasRSSI-ReportConfig-r16 ::= SEQUENCE {
+ channelOccupancyThreshold-r16 RSSI-Range-r16 OPTIONAL -- Need R
+}
+
+CLI-EventTriggerConfig-r16 ::= SEQUENCE {
+ eventId-r16 CHOICE {
+ eventI1-r16 SEQUENCE {
+ i1-Threshold-r16 MeasTriggerQuantityCLI-r16,
+ reportOnLeave-r16 BOOLEAN,
+ hysteresis-r16 Hysteresis,
+ timeToTrigger-r16 TimeToTrigger
+ },
+ ...
+ },
+ reportInterval-r16 ReportInterval,
+ reportAmount-r16 ENUMERATED {r1, r2, r4, r8, r16, r32, r64, infinity},
+ maxReportCLI-r16 INTEGER (1..maxCLI-Report-r16),
+ ...
+}
+
+CLI-PeriodicalReportConfig-r16 ::= SEQUENCE {
+ reportInterval-r16 ReportInterval,
+ reportAmount-r16 ENUMERATED {r1, r2, r4, r8, r16, r32, r64, infinity},
+ reportQuantityCLI-r16 MeasReportQuantityCLI-r16,
+ maxReportCLI-r16 INTEGER (1..maxCLI-Report-r16),
+ ...
+}
+
+RxTxPeriodical-r17 ::= SEQUENCE {
+ rxTxReportInterval-r17 RxTxReportInterval-r17 OPTIONAL, -- Need R
+ reportAmount-r17 ENUMERATED {r1, infinity, spare6, spare5, spare4, spare3, spare2, spare1},
+ ...
+}
+
+RxTxReportInterval-r17 ::= ENUMERATED {ms80,ms120,ms160,ms240,ms320,ms480,ms640,ms1024,ms1280,ms2048,ms2560,ms5120,spare4,spare3,spare2,spare1}
+
+MeasTriggerQuantityCLI-r16 ::= CHOICE {
+ srs-RSRP-r16 SRS-RSRP-Range-r16,
+ cli-RSSI-r16 CLI-RSSI-Range-r16
+}
+
+MeasReportQuantityCLI-r16 ::= ENUMERATED {srs-rsrp, cli-rssi}
+
+-- TAG-REPORTCONFIGNR-STOP
+-- TAG-REPORTCONFIGNR-SL-START
+
+ReportConfigNR-SL-r16 ::= SEQUENCE {
+ reportType-r16 CHOICE {
+ periodical-r16 PeriodicalReportConfigNR-SL-r16,
+ eventTriggered-r16 EventTriggerConfigNR-SL-r16
+ }
+}
+
+EventTriggerConfigNR-SL-r16::= SEQUENCE {
+ eventId-r16 CHOICE {
+ eventC1 SEQUENCE {
+ c1-Threshold-r16 SL-CBR-r16,
+ hysteresis-r16 Hysteresis,
+ timeToTrigger-r16 TimeToTrigger
+ },
+ eventC2-r16 SEQUENCE {
+ c2-Threshold-r16 SL-CBR-r16,
+ hysteresis-r16 Hysteresis,
+ timeToTrigger-r16 TimeToTrigger
+ },
+ ...
+ },
+ reportInterval-r16 ReportInterval,
+ reportAmount-r16 ENUMERATED {r1, r2, r4, r8, r16, r32, r64, infinity},
+ reportQuantity-r16 MeasReportQuantity-r16,
+ ...
+}
+
+PeriodicalReportConfigNR-SL-r16 ::= SEQUENCE {
+ reportInterval-r16 ReportInterval,
+ reportAmount-r16 ENUMERATED {r1, r2, r4, r8, r16, r32, r64, infinity},
+ reportQuantity-r16 MeasReportQuantity-r16,
+ ...
+}
+
+MeasReportQuantity-r16 ::= SEQUENCE {
+ cbr-r16 BOOLEAN,
+ ...
+}
+
+-- TAG-REPORTCONFIGNR-SL-STOP
+-- TAG-REPORTCONFIGTOADDMODLIST-START
+
+ReportConfigToAddModList ::= SEQUENCE (SIZE (1..maxReportConfigId)) OF ReportConfigToAddMod
+
+ReportConfigToAddMod ::= SEQUENCE {
+ reportConfigId ReportConfigId,
+ reportConfig CHOICE {
+ reportConfigNR ReportConfigNR,
+ ...,
+ reportConfigInterRAT ReportConfigInterRAT,
+ reportConfigNR-SL-r16 ReportConfigNR-SL-r16
+ }
+}
+
+-- TAG-REPORTCONFIGTOADDMODLIST-STOP
+-- TAG-REPORTINTERVAL-START
+
+ReportInterval ::= ENUMERATED {ms120, ms240, ms480, ms640, ms1024, ms2048, ms5120, ms10240, ms20480, ms40960,
+ min1,min6, min12, min30 }
+
+-- TAG-REPORTINTERVAL-STOP
+-- TAG-RESELECTIONTHRESHOLD-START
+
+ReselectionThreshold ::= INTEGER (0..31)
+
+-- TAG-RESELECTIONTHRESHOLD-STOP
+-- TAG-RESELECTIONTHRESHOLDQ-START
+
+ReselectionThresholdQ ::= INTEGER (0..31)
+
+-- TAG-RESELECTIONTHRESHOLDQ-STOP
+-- TAG-RESUMECAUSE-START
+
+ResumeCause ::= ENUMERATED {emergency, highPriorityAccess, mt-Access, mo-Signalling,
+ mo-Data, mo-VoiceCall, mo-VideoCall, mo-SMS, rna-Update, mps-PriorityAccess,
+ mcs-PriorityAccess, spare1, spare2, spare3, spare4, spare5 }
+
+-- TAG-RESUMECAUSE-STOP
+-- TAG-RLC-BEARERCONFIG-START
+
+RLC-BearerConfig ::= SEQUENCE {
+ logicalChannelIdentity LogicalChannelIdentity,
+ servedRadioBearer CHOICE {
+ srb-Identity SRB-Identity,
+ drb-Identity DRB-Identity
+ } OPTIONAL, -- Cond LCH-SetupOnly
+ reestablishRLC ENUMERATED {true} OPTIONAL, -- Need N
+ rlc-Config RLC-Config OPTIONAL, -- Cond LCH-Setup
+ mac-LogicalChannelConfig LogicalChannelConfig OPTIONAL, -- Cond LCH-Setup
+ ...,
+ [[
+ rlc-Config-v1610 RLC-Config-v1610 OPTIONAL -- Need R
+ ]],
+ [[
+ rlc-Config-v1700 RLC-Config-v1700 OPTIONAL, -- Need R
+ logicalChannelIdentityExt-r17 LogicalChannelIdentityExt-r17 OPTIONAL, -- Cond LCH-SetupModMRB
+ multicastRLC-BearerConfig-r17 MulticastRLC-BearerConfig-r17 OPTIONAL, -- Cond LCH-SetupOnlyMRB
+ servedRadioBearerSRB4-r17 SRB-Identity-v1700 OPTIONAL -- Need N
+ ]]
+}
+
+MulticastRLC-BearerConfig-r17 ::= SEQUENCE {
+ servedMBS-RadioBearer-r17 MRB-Identity-r17,
+ isPTM-Entity-r17 ENUMERATED {true} OPTIONAL -- Need S
+}
+
+LogicalChannelIdentityExt-r17 ::= INTEGER (320..65855)
+
+-- TAG-RLC-BEARERCONFIG-STOP
+-- TAG-RLC-CONFIG-START
+
+RLC-Config ::= CHOICE {
+ am SEQUENCE {
+ ul-AM-RLC UL-AM-RLC,
+ dl-AM-RLC DL-AM-RLC
+ },
+ um-Bi-Directional SEQUENCE {
+ ul-UM-RLC UL-UM-RLC,
+ dl-UM-RLC DL-UM-RLC
+ },
+ um-Uni-Directional-UL SEQUENCE {
+ ul-UM-RLC UL-UM-RLC
+ },
+ um-Uni-Directional-DL SEQUENCE {
+ dl-UM-RLC DL-UM-RLC
+ },
+ ...
+}
+
+UL-AM-RLC ::= SEQUENCE {
+ sn-FieldLength SN-FieldLengthAM OPTIONAL, -- Cond Reestab
+ t-PollRetransmit T-PollRetransmit,
+ pollPDU PollPDU,
+ pollByte PollByte,
+ maxRetxThreshold ENUMERATED { t1, t2, t3, t4, t6, t8, t16, t32 }
+}
+
+DL-AM-RLC ::= SEQUENCE {
+ sn-FieldLength SN-FieldLengthAM OPTIONAL, -- Cond Reestab
+ t-Reassembly T-Reassembly,
+ t-StatusProhibit T-StatusProhibit
+}
+
+UL-UM-RLC ::= SEQUENCE {
+ sn-FieldLength SN-FieldLengthUM OPTIONAL -- Cond Reestab
+}
+
+DL-UM-RLC ::= SEQUENCE {
+ sn-FieldLength SN-FieldLengthUM OPTIONAL, -- Cond Reestab
+ t-Reassembly T-Reassembly
+}
+
+T-PollRetransmit ::= ENUMERATED {
+ ms5, ms10, ms15, ms20, ms25, ms30, ms35,
+ ms40, ms45, ms50, ms55, ms60, ms65, ms70,
+ ms75, ms80, ms85, ms90, ms95, ms100, ms105,
+ ms110, ms115, ms120, ms125, ms130, ms135,
+ ms140, ms145, ms150, ms155, ms160, ms165,
+ ms170, ms175, ms180, ms185, ms190, ms195,
+ ms200, ms205, ms210, ms215, ms220, ms225,
+ ms230, ms235, ms240, ms245, ms250, ms300,
+ ms350, ms400, ms450, ms500, ms800, ms1000,
+ ms2000, ms4000, ms1-v1610, ms2-v1610, ms3-v1610,
+ ms4-v1610, spare1}
+
+
+PollPDU ::= ENUMERATED {
+ p4, p8, p16, p32, p64, p128, p256, p512, p1024, p2048, p4096, p6144, p8192, p12288, p16384,p20480,
+ p24576, p28672, p32768, p40960, p49152, p57344, p65536, infinity, spare8, spare7, spare6, spare5, spare4,
+ spare3, spare2, spare1}
+
+PollByte ::= ENUMERATED {
+ kB1, kB2, kB5, kB8, kB10, kB15, kB25, kB50, kB75,
+ kB100, kB125, kB250, kB375, kB500, kB750, kB1000,
+ kB1250, kB1500, kB2000, kB3000, kB4000, kB4500,
+ kB5000, kB5500, kB6000, kB6500, kB7000, kB7500,
+ mB8, mB9, mB10, mB11, mB12, mB13, mB14, mB15,
+ mB16, mB17, mB18, mB20, mB25, mB30, mB40, infinity,
+ spare20, spare19, spare18, spare17, spare16,
+ spare15, spare14, spare13, spare12, spare11,
+ spare10, spare9, spare8, spare7, spare6, spare5,
+ spare4, spare3, spare2, spare1}
+
+T-Reassembly ::= ENUMERATED {
+ ms0, ms5, ms10, ms15, ms20, ms25, ms30, ms35,
+ ms40, ms45, ms50, ms55, ms60, ms65, ms70,
+ ms75, ms80, ms85, ms90, ms95, ms100, ms110,
+ ms120, ms130, ms140, ms150, ms160, ms170,
+ ms180, ms190, ms200, spare1}
+
+T-StatusProhibit ::= ENUMERATED {
+ ms0, ms5, ms10, ms15, ms20, ms25, ms30, ms35,
+ ms40, ms45, ms50, ms55, ms60, ms65, ms70,
+ ms75, ms80, ms85, ms90, ms95, ms100, ms105,
+ ms110, ms115, ms120, ms125, ms130, ms135,
+ ms140, ms145, ms150, ms155, ms160, ms165,
+ ms170, ms175, ms180, ms185, ms190, ms195,
+ ms200, ms205, ms210, ms215, ms220, ms225,
+ ms230, ms235, ms240, ms245, ms250, ms300,
+ ms350, ms400, ms450, ms500, ms800, ms1000,
+ ms1200, ms1600, ms2000, ms2400, spare2, spare1}
+
+SN-FieldLengthUM ::= ENUMERATED {size6, size12}
+SN-FieldLengthAM ::= ENUMERATED {size12, size18}
+
+RLC-Config-v1610 ::= SEQUENCE {
+ dl-AM-RLC-v1610 DL-AM-RLC-v1610
+}
+
+RLC-Config-v1700 ::= SEQUENCE {
+ dl-AM-RLC-v1700 DL-AM-RLC-v1700,
+ dl-UM-RLC-v1700 DL-UM-RLC-v1700
+}
+
+DL-AM-RLC-v1610 ::= SEQUENCE {
+ t-StatusProhibit-v1610 T-StatusProhibit-v1610 OPTIONAL, -- Need N
+ ...
+}
+
+DL-AM-RLC-v1700 ::= SEQUENCE {
+ t-ReassemblyExt-r17 T-ReassemblyExt-r17 OPTIONAL -- Need N
+}
+
+DL-UM-RLC-v1700 ::= SEQUENCE {
+ t-ReassemblyExt-r17 T-ReassemblyExt-r17 OPTIONAL -- Need N
+}
+
+T-StatusProhibit-v1610 ::= ENUMERATED { ms1, ms2, ms3, ms4, spare4, spare3, spare2, spare1}
+
+T-ReassemblyExt-r17 ::= ENUMERATED {ms210, ms220, ms340, ms350, ms550, ms1100, ms1650, ms2200}
+
+-- TAG-RLC-CONFIG-STOP
+-- TAG-RLF-TIMERSANDCONSTANTS-START
+
+RLF-TimersAndConstants ::= SEQUENCE {
+ t310 ENUMERATED {ms0, ms50, ms100, ms200, ms500, ms1000, ms2000, ms4000, ms6000},
+ n310 ENUMERATED {n1, n2, n3, n4, n6, n8, n10, n20},
+ n311 ENUMERATED {n1, n2, n3, n4, n5, n6, n8, n10},
+ ...,
+ [[
+ t311 ENUMERATED {ms1000, ms3000, ms5000, ms10000, ms15000, ms20000, ms30000}
+ ]]
+}
+
+-- TAG-RLF-TIMERSANDCONSTANTS-STOP
+-- TAG-RNTI-VALUE-START
+
+RNTI-Value ::= INTEGER (0..65535)
+
+-- TAG-RNTI-VALUE-STOP
+-- TAG-RSRP-RANGE-START
+
+RSRP-Range ::= INTEGER(0..127)
+
+-- TAG-RSRP-RANGE-STOP
+-- TAG-RSRQ-RANGE-START
+
+RSRQ-Range ::= INTEGER(0..127)
+
+-- TAG-RSRQ-RANGE-STOP
+-- TAG-RSSI-RANGE-START
+
+RSSI-Range-r16 ::= INTEGER(0..76)
+
+-- TAG-RSSI-RANGE-STOP
+-- TAG-RXTXTIMEDIFF-START
+
+RxTxTimeDiff-r17 ::= SEQUENCE {
+ result-k5-r17 INTEGER (0..61565) OPTIONAL, -- Need N
+ ...
+}
+
+-- TAG-RXTXTIMEDIFF-STOP
+-- TAG-SCELLACTIVATIONRS-CONFIG-START
+
+SCellActivationRS-Config-r17 ::= SEQUENCE {
+ scellActivationRS-Id-r17 SCellActivationRS-ConfigId-r17,
+ resourceSet-r17 NZP-CSI-RS-ResourceSetId,
+ gapBetweenBursts-r17 INTEGER (2..31) OPTIONAL, -- Need R
+ qcl-Info-r17 TCI-StateId,
+ ...
+}
+
+-- TAG-SCELLACTIVATIONRS-CONFIG-STOP
+-- TAG-SCELLACTIVATIONRS-CONFIGID-START
+
+SCellActivationRS-ConfigId-r17 ::= INTEGER (1.. maxNrofSCellActRS-r17)
+
+-- TAG-SCELLACTIVATIONRS-CONFIGID-STOP
+-- TAG-SCELLINDEX-START
+
+SCellIndex ::= INTEGER (1..31)
+
+-- TAG-SCELLINDEX-STOP
+-- TAG-SCHEDULINGREQUESTCONFIG-START
+
+SchedulingRequestConfig ::= SEQUENCE {
+ schedulingRequestToAddModList SEQUENCE (SIZE (1..maxNrofSR-ConfigPerCellGroup)) OF SchedulingRequestToAddMod
+ OPTIONAL, -- Need N
+ schedulingRequestToReleaseList SEQUENCE (SIZE (1..maxNrofSR-ConfigPerCellGroup)) OF SchedulingRequestId
+ OPTIONAL -- Need N
+}
+
+SchedulingRequestToAddMod ::= SEQUENCE {
+ schedulingRequestId SchedulingRequestId,
+ sr-ProhibitTimer ENUMERATED {ms1, ms2, ms4, ms8, ms16, ms32, ms64, ms128} OPTIONAL, -- Need S
+ sr-TransMax ENUMERATED { n4, n8, n16, n32, n64, spare3, spare2, spare1}
+}
+
+SchedulingRequestConfig-v1700 ::= SEQUENCE {
+ schedulingRequestToAddModListExt-v1700 SEQUENCE (SIZE (1..maxNrofSR-ConfigPerCellGroup)) OF SchedulingRequestToAddModExt-v1700
+ OPTIONAL -- Need N
+}
+
+SchedulingRequestToAddModExt-v1700 ::= SEQUENCE {
+ sr-ProhibitTimer-v1700 ENUMERATED { ms192, ms256, ms320, ms384, ms448, ms512, ms576, ms640, ms1082, spare7, spare6, spare5, spare4, spare3, spare2, spare1}
+ OPTIONAL -- Need R
+}
+
+-- TAG-SCHEDULINGREQUESTCONFIG-STOP
+-- TAG-SCHEDULINGREQUESTID-START
+
+SchedulingRequestId ::= INTEGER (0..7)
+
+-- TAG-SCHEDULINGREQUESTID-STOP
+-- TAG-SCHEDULINGREQUESTRESOURCECONFIG-START
+
+SchedulingRequestResourceConfig ::= SEQUENCE {
+ schedulingRequestResourceId SchedulingRequestResourceId,
+ schedulingRequestID SchedulingRequestId,
+ periodicityAndOffset CHOICE {
+ sym2 NULL,
+ sym6or7 NULL,
+ sl1 NULL, -- Recurs in every slot
+ sl2 INTEGER (0..1),
+ sl4 INTEGER (0..3),
+ sl5 INTEGER (0..4),
+ sl8 INTEGER (0..7),
+ sl10 INTEGER (0..9),
+ sl16 INTEGER (0..15),
+ sl20 INTEGER (0..19),
+ sl40 INTEGER (0..39),
+ sl80 INTEGER (0..79),
+ sl160 INTEGER (0..159),
+ sl320 INTEGER (0..319),
+ sl640 INTEGER (0..639)
+ } OPTIONAL, -- Need M
+ resource PUCCH-ResourceId OPTIONAL -- Need M
+}
+
+SchedulingRequestResourceConfigExt-v1610 ::= SEQUENCE {
+ phy-PriorityIndex-r16 ENUMERATED {p0, p1} OPTIONAL, -- Need M
+ ...
+}
+
+SchedulingRequestResourceConfigExt-v1700 ::= SEQUENCE {
+ periodicityAndOffset-r17 CHOICE {
+ sl1280 INTEGER (0..1279),
+ sl2560 INTEGER (0..2559),
+ sl5120 INTEGER (0..5119)
+ } OPTIONAL -- Need M
+}
+
+-- TAG-SCHEDULINGREQUESTRESOURCECONFIG-STOP
+-- TAG-SCHEDULINGREQUESTRESOURCEID-START
+
+SchedulingRequestResourceId ::= INTEGER (1..maxNrofSR-Resources)
+
+-- TAG-SCHEDULINGREQUESTRESOURCEID-STOP
+-- TAG-SCRAMBLINGID-START
+
+ScramblingId ::= INTEGER(0..1023)
+
+-- TAG-SCRAMBLINGID-STOP
+-- TAG-SCS-SPECIFICCARRIER-START
+
+SCS-SpecificCarrier ::= SEQUENCE {
+ offsetToCarrier INTEGER (0..2199),
+ subcarrierSpacing SubcarrierSpacing,
+ carrierBandwidth INTEGER (1..maxNrofPhysicalResourceBlocks),
+ ...,
+ [[
+ txDirectCurrentLocation INTEGER (0..4095) OPTIONAL -- Need S
+ ]]
+}
+
+-- TAG-SCS-SPECIFICCARRIER-STOP
+-- TAG-SDAP-CONFIG-START
+
+SDAP-Config ::= SEQUENCE {
+ pdu-Session PDU-SessionID,
+ sdap-HeaderDL ENUMERATED {present, absent},
+ sdap-HeaderUL ENUMERATED {present, absent},
+ defaultDRB BOOLEAN,
+ mappedQoS-FlowsToAdd SEQUENCE (SIZE (1..maxNrofQFIs)) OF QFI OPTIONAL, -- Need N
+ mappedQoS-FlowsToRelease SEQUENCE (SIZE (1..maxNrofQFIs)) OF QFI OPTIONAL, -- Need N
+ ...
+}
+
+QFI ::= INTEGER (0..maxQFI)
+
+PDU-SessionID ::= INTEGER (0..255)
+
+-- TAG-SDAP-CONFIG-STOP
+-- TAG-SEARCHSPACE-START
+
+SearchSpace ::= SEQUENCE {
+ searchSpaceId SearchSpaceId,
+ controlResourceSetId ControlResourceSetId OPTIONAL, -- Cond SetupOnly
+ monitoringSlotPeriodicityAndOffset CHOICE {
+ sl1 NULL,
+ sl2 INTEGER (0..1),
+ sl4 INTEGER (0..3),
+ sl5 INTEGER (0..4),
+ sl8 INTEGER (0..7),
+ sl10 INTEGER (0..9),
+ sl16 INTEGER (0..15),
+ sl20 INTEGER (0..19),
+ sl40 INTEGER (0..39),
+ sl80 INTEGER (0..79),
+ sl160 INTEGER (0..159),
+ sl320 INTEGER (0..319),
+ sl640 INTEGER (0..639),
+ sl1280 INTEGER (0..1279),
+ sl2560 INTEGER (0..2559)
+ } OPTIONAL, -- Cond Setup4
+ duration INTEGER (2..2559) OPTIONAL, -- Need S
+ monitoringSymbolsWithinSlot BIT STRING (SIZE (14)) OPTIONAL, -- Cond Setup
+ nrofCandidates SEQUENCE {
+ aggregationLevel1 ENUMERATED {n0, n1, n2, n3, n4, n5, n6, n8},
+ aggregationLevel2 ENUMERATED {n0, n1, n2, n3, n4, n5, n6, n8},
+ aggregationLevel4 ENUMERATED {n0, n1, n2, n3, n4, n5, n6, n8},
+ aggregationLevel8 ENUMERATED {n0, n1, n2, n3, n4, n5, n6, n8},
+ aggregationLevel16 ENUMERATED {n0, n1, n2, n3, n4, n5, n6, n8}
+ } OPTIONAL, -- Cond Setup
+ searchSpaceType CHOICE {
+ common SEQUENCE {
+ dci-Format0-0-AndFormat1-0 SEQUENCE {
+ ...
+ } OPTIONAL, -- Need R
+ dci-Format2-0 SEQUENCE {
+ nrofCandidates-SFI SEQUENCE {
+ aggregationLevel1 ENUMERATED {n1, n2} OPTIONAL, -- Need R
+ aggregationLevel2 ENUMERATED {n1, n2} OPTIONAL, -- Need R
+ aggregationLevel4 ENUMERATED {n1, n2} OPTIONAL, -- Need R
+ aggregationLevel8 ENUMERATED {n1, n2} OPTIONAL, -- Need R
+ aggregationLevel16 ENUMERATED {n1, n2} OPTIONAL -- Need R
+ },
+ ...
+ } OPTIONAL, -- Need R
+ dci-Format2-1 SEQUENCE {
+ ...
+ } OPTIONAL, -- Need R
+ dci-Format2-2 SEQUENCE {
+ ...
+ } OPTIONAL, -- Need R
+ dci-Format2-3 SEQUENCE {
+ dummy1 ENUMERATED {sl1, sl2, sl4, sl5, sl8, sl10, sl16, sl20} OPTIONAL, -- Cond Setup
+ dummy2 ENUMERATED {n1, n2},
+ ...
+ } OPTIONAL -- Need R
+ },
+ ue-Specific SEQUENCE {
+ dci-Formats ENUMERATED {formats0-0-And-1-0, formats0-1-And-1-1},
+ ...,
+ [[
+ dci-Formats-MT-r16 ENUMERATED {formats2-5} OPTIONAL, -- Need R
+ dci-FormatsSL-r16 ENUMERATED {formats0-0-And-1-0, formats0-1-And-1-1, formats3-0, formats3-1,
+ formats3-0-And-3-1} OPTIONAL, -- Need R
+ dci-FormatsExt-r16 ENUMERATED {formats0-2-And-1-2, formats0-1-And-1-1And-0-2-And-1-2}
+ OPTIONAL -- Need R
+ ]]
+ }
+ } OPTIONAL -- Cond Setup2
+}
+
+SearchSpaceExt-r16 ::= SEQUENCE {
+ controlResourceSetId-r16 ControlResourceSetId-r16 OPTIONAL, -- Cond SetupOnly2
+ searchSpaceType-r16 SEQUENCE {
+ common-r16 SEQUENCE {
+ dci-Format2-4-r16 SEQUENCE {
+ nrofCandidates-CI-r16 SEQUENCE {
+ aggregationLevel1-r16 ENUMERATED {n1, n2} OPTIONAL, -- Need R
+ aggregationLevel2-r16 ENUMERATED {n1, n2} OPTIONAL, -- Need R
+ aggregationLevel4-r16 ENUMERATED {n1, n2} OPTIONAL, -- Need R
+ aggregationLevel8-r16 ENUMERATED {n1, n2} OPTIONAL, -- Need R
+ aggregationLevel16-r16 ENUMERATED {n1, n2} OPTIONAL -- Need R
+ },
+ ...
+ } OPTIONAL, -- Need R
+ dci-Format2-5-r16 SEQUENCE {
+ nrofCandidates-IAB-r16 SEQUENCE {
+ aggregationLevel1-r16 ENUMERATED {n1, n2} OPTIONAL, -- Need R
+ aggregationLevel2-r16 ENUMERATED {n1, n2} OPTIONAL, -- Need R
+ aggregationLevel4-r16 ENUMERATED {n1, n2} OPTIONAL, -- Need R
+ aggregationLevel8-r16 ENUMERATED {n1, n2} OPTIONAL, -- Need R
+ aggregationLevel16-r16 ENUMERATED {n1, n2} OPTIONAL -- Need R
+ },
+ ...
+ } OPTIONAL, -- Need R
+ dci-Format2-6-r16 SEQUENCE {
+ ...
+ } OPTIONAL, -- Need R
+ ...
+ }
+ } OPTIONAL, -- Cond Setup3
+ searchSpaceGroupIdList-r16 SEQUENCE (SIZE (1.. 2)) OF INTEGER (0..1) OPTIONAL, -- Need R
+ freqMonitorLocations-r16 BIT STRING (SIZE (5)) OPTIONAL -- Need R
+}
+
+SearchSpaceExt-v1700 ::= SEQUENCE {
+ monitoringSlotPeriodicityAndOffset-v1710 CHOICE {
+ sl32 INTEGER (0..31),
+ sl64 INTEGER (0..63),
+ sl128 INTEGER (0..127),
+ sl5120 INTEGER (0..5119),
+ sl10240 INTEGER (0..10239),
+ sl20480 INTEGER (0..20479)
+ } OPTIONAL, -- Cond Setup5
+ monitoringSlotsWithinSlotGroup-r17 CHOICE {
+ slotGroupLength4-r17 BIT STRING (SIZE (4)),
+ slotGroupLength8-r17 BIT STRING (SIZE (8))
+ } OPTIONAL, -- Need R
+ duration-r17 INTEGER (4..20476) OPTIONAL, -- Need R
+
+ searchSpaceType-r17 SEQUENCE{
+ common-r17 SEQUENCE {
+ dci-Format4-0-r17 SEQUENCE {
+ ...
+ } OPTIONAL, -- Need R
+ dci-Format4-1-r17 SEQUENCE {
+ ...
+ } OPTIONAL, -- Need R
+ dci-Format4-2-r17 SEQUENCE {
+ ...
+ } OPTIONAL, -- Need R
+ dci-Format4-1-AndFormat4-2-r17 SEQUENCE {
+ ...
+ } OPTIONAL, -- Need R
+ dci-Format2-7-r17 SEQUENCE {
+ nrofCandidates-PEI-r17 SEQUENCE {
+ aggregationLevel4-r17 ENUMERATED {n0, n1, n2, n3, n4} OPTIONAL, -- Need R
+ aggregationLevel8-r17 ENUMERATED {n0, n1, n2} OPTIONAL, -- Need R
+ aggregationLevel16-r17 ENUMERATED {n0, n1} OPTIONAL -- Need R
+ },
+ ...
+ } OPTIONAL -- Need R
+ }
+ } OPTIONAL, -- Need R
+ searchSpaceGroupIdList-r17 SEQUENCE (SIZE (1.. 3)) OF INTEGER (0.. maxNrofSearchSpaceGroups-1-r17) OPTIONAL, -- Cond DedicatedOnly
+ searchSpaceLinkingId-r17 INTEGER (0..maxNrofSearchSpacesLinks-1-r17) OPTIONAL -- Cond DedicatedOnly
+}
+
+-- TAG-SEARCHSPACE-STOP
+-- TAG-SEARCHSPACEID-START
+
+SearchSpaceId ::= INTEGER (0..maxNrofSearchSpaces-1)
+
+-- TAG-SEARCHSPACEID-STOP
+-- TAG-SEARCHSPACEZERO-START
+
+SearchSpaceZero ::= INTEGER (0..15)
+
+-- TAG-SEARCHSPACEZERO-STOP
+-- TAG-SECURITYALGORITHMCONFIG-START
+
+SecurityAlgorithmConfig ::= SEQUENCE {
+ cipheringAlgorithm CipheringAlgorithm,
+ integrityProtAlgorithm IntegrityProtAlgorithm OPTIONAL, -- Need R
+ ...
+}
+
+IntegrityProtAlgorithm ::= ENUMERATED {
+ nia0, nia1, nia2, nia3, spare4, spare3,
+ spare2, spare1, ...}
+
+CipheringAlgorithm ::= ENUMERATED {
+ nea0, nea1, nea2, nea3, spare4, spare3,
+ spare2, spare1, ...}
+
+-- TAG-SECURITYALGORITHMCONFIG-STOP
+-- TAG-SEMISTATICCHANNELACCESSCONFIG-START
+
+SemiStaticChannelAccessConfig-r16 ::= SEQUENCE {
+ period ENUMERATED {ms1, ms2, ms2dot5, ms4, ms5, ms10}
+}
+
+-- TAG-SEMISTATICCHANNELACCESSCONFIG-STOP
+-- TAG-SEMISTATICCHANNELACCESSCONFIGUE-START
+
+SemiStaticChannelAccessConfigUE-r17 ::= SEQUENCE {
+ periodUE-r17 ENUMERATED {ms1, ms2, ms2dot5, ms4, ms5, ms10, spare2, spare1},
+ offsetUE-r17 INTEGER (0..559)
+}
+
+-- TAG-SEMISTATICCHANNELACCESSCONFIGUE-STOP
+-- TAG-SENSORLOCATIONINFO-START
+
+Sensor-LocationInfo-r16 ::= SEQUENCE {
+ sensor-MeasurementInformation-r16 OCTET STRING OPTIONAL,
+ sensor-MotionInformation-r16 OCTET STRING OPTIONAL,
+ ...
+}
+
+-- TAG-SENSORLOCATIONINFO-STOP
+-- TAG-SERVINGCELLANDBWP-ID-START
+
+ServingCellAndBWP-Id-r17 ::= SEQUENCE {
+ servingcell-r17 ServCellIndex,
+ bwp-r17 BWP-Id
+}
+
+-- TAG-SERVINGCELLANDBWP-ID-STOP
+-- TAG-SERVCELLINDEX-START
+
+ServCellIndex ::= INTEGER (0..maxNrofServingCells-1)
+
+-- TAG-SERVCELLINDEX-STOP
+-- TAG-SERVINGCELLCONFIG-START
+
+ServingCellConfig ::= SEQUENCE {
+ tdd-UL-DL-ConfigurationDedicated TDD-UL-DL-ConfigDedicated OPTIONAL, -- Cond TDD
+ initialDownlinkBWP BWP-DownlinkDedicated OPTIONAL, -- Need M
+ downlinkBWP-ToReleaseList SEQUENCE (SIZE (1..maxNrofBWPs)) OF BWP-Id OPTIONAL, -- Need N
+ downlinkBWP-ToAddModList SEQUENCE (SIZE (1..maxNrofBWPs)) OF BWP-Downlink OPTIONAL, -- Need N
+ firstActiveDownlinkBWP-Id BWP-Id OPTIONAL, -- Cond SyncAndCellAdd
+ bwp-InactivityTimer ENUMERATED {ms2, ms3, ms4, ms5, ms6, ms8, ms10, ms20, ms30,
+ ms40,ms50, ms60, ms80,ms100, ms200,ms300, ms500,
+ ms750, ms1280, ms1920, ms2560, spare10, spare9, spare8,
+ spare7, spare6, spare5, spare4, spare3, spare2, spare1 } OPTIONAL, --Need R
+ defaultDownlinkBWP-Id BWP-Id OPTIONAL, -- Need S
+ uplinkConfig UplinkConfig OPTIONAL, -- Need M
+ supplementaryUplink UplinkConfig OPTIONAL, -- Need M
+ pdcch-ServingCellConfig SetupRelease { PDCCH-ServingCellConfig } OPTIONAL, -- Need M
+ pdsch-ServingCellConfig SetupRelease { PDSCH-ServingCellConfig } OPTIONAL, -- Need M
+ csi-MeasConfig SetupRelease { CSI-MeasConfig } OPTIONAL, -- Need M
+ sCellDeactivationTimer ENUMERATED {ms20, ms40, ms80, ms160, ms200, ms240,
+ ms320, ms400, ms480, ms520, ms640, ms720,
+ ms840, ms1280, spare2,spare1} OPTIONAL, -- Cond ServingCellWithoutPUCCH
+ crossCarrierSchedulingConfig CrossCarrierSchedulingConfig OPTIONAL, -- Need M
+ tag-Id TAG-Id,
+ dummy1 ENUMERATED {enabled} OPTIONAL, -- Need R
+ pathlossReferenceLinking ENUMERATED {spCell, sCell} OPTIONAL, -- Cond SCellOnly
+ servingCellMO MeasObjectId OPTIONAL, -- Cond MeasObject
+ ...,
+ [[
+ lte-CRS-ToMatchAround SetupRelease { RateMatchPatternLTE-CRS } OPTIONAL, -- Need M
+ rateMatchPatternToAddModList SEQUENCE (SIZE (1..maxNrofRateMatchPatterns)) OF RateMatchPattern OPTIONAL, -- Need N
+ rateMatchPatternToReleaseList SEQUENCE (SIZE (1..maxNrofRateMatchPatterns)) OF RateMatchPatternId OPTIONAL, -- Need N
+ downlinkChannelBW-PerSCS-List SEQUENCE (SIZE (1..maxSCSs)) OF SCS-SpecificCarrier OPTIONAL -- Need S
+ ]],
+ [[
+ supplementaryUplinkRelease-r16 ENUMERATED {true} OPTIONAL, -- Need N
+ tdd-UL-DL-ConfigurationDedicated-IAB-MT-r16 TDD-UL-DL-ConfigDedicated-IAB-MT-r16 OPTIONAL, -- Cond TDD_IAB
+ dormantBWP-Config-r16 SetupRelease { DormantBWP-Config-r16 } OPTIONAL, -- Need M
+ ca-SlotOffset-r16 CHOICE {
+ refSCS15kHz INTEGER (-2..2),
+ refSCS30KHz INTEGER (-5..5),
+ refSCS60KHz INTEGER (-10..10),
+ refSCS120KHz INTEGER (-20..20)
+ } OPTIONAL, -- Cond AsyncCA
+ dummy2 SetupRelease { DummyJ } OPTIONAL, -- Need M
+ intraCellGuardBandsDL-List-r16 SEQUENCE (SIZE (1..maxSCSs)) OF IntraCellGuardBandsPerSCS-r16 OPTIONAL, -- Need S
+ intraCellGuardBandsUL-List-r16 SEQUENCE (SIZE (1..maxSCSs)) OF IntraCellGuardBandsPerSCS-r16 OPTIONAL, -- Need S
+ csi-RS-ValidationWithDCI-r16 ENUMERATED {enabled} OPTIONAL, -- Need R
+ lte-CRS-PatternList1-r16 SetupRelease { LTE-CRS-PatternList-r16 } OPTIONAL, -- Need M
+ lte-CRS-PatternList2-r16 SetupRelease { LTE-CRS-PatternList-r16 } OPTIONAL, -- Need M
+ crs-RateMatch-PerCORESETPoolIndex-r16 ENUMERATED {enabled} OPTIONAL, -- Need R
+ enableTwoDefaultTCI-States-r16 ENUMERATED {enabled} OPTIONAL, -- Need R
+ enableDefaultTCI-StatePerCoresetPoolIndex-r16 ENUMERATED {enabled} OPTIONAL, -- Need R
+ enableBeamSwitchTiming-r16 ENUMERATED {true} OPTIONAL, -- Need R
+ cbg-TxDiffTBsProcessingType1-r16 ENUMERATED {enabled} OPTIONAL, -- Need R
+ cbg-TxDiffTBsProcessingType2-r16 ENUMERATED {enabled} OPTIONAL -- Need R
+ ]],
+ [[
+ directionalCollisionHandling-r16 ENUMERATED {enabled} OPTIONAL, -- Need R
+ channelAccessConfig-r16 SetupRelease { ChannelAccessConfig-r16 } OPTIONAL -- Need M
+ ]],
+ [[
+ nr-dl-PRS-PDC-Info-r17 SetupRelease {NR-DL-PRS-PDC-Info-r17} OPTIONAL, -- Need M
+ semiStaticChannelAccessConfigUE-r17 SetupRelease {SemiStaticChannelAccessConfigUE-r17} OPTIONAL, -- Need M
+ mimoParam-r17 SetupRelease {MIMOParam-r17} OPTIONAL, -- Need M
+ channelAccessMode2-r17 ENUMERATED {enabled} OPTIONAL, -- Need R
+ timeDomainHARQ-BundlingType1-r17 ENUMERATED {enabled} OPTIONAL, -- Need R
+ nrofHARQ-BundlingGroups-r17 ENUMERATED {n1, n2, n4} OPTIONAL, -- Need R
+ fdmed-ReceptionMulticast-r17 ENUMERATED {true} OPTIONAL, -- Need R
+ moreThanOneNackOnlyMode-r17 ENUMERATED {mode2} OPTIONAL, -- Need S
+ tci-ActivatedConfig-r17 TCI-ActivatedConfig-r17 OPTIONAL, -- Cond TCI_ActivatedConfig
+ directionalCollisionHandling-DC-r17 ENUMERATED {enabled} OPTIONAL, -- Need R
+ lte-NeighCellsCRS-AssistInfoList-r17 SetupRelease { LTE-NeighCellsCRS-AssistInfoList-r17 } OPTIONAL -- Need M
+ ]],
+ [[
+ lte-NeighCellsCRS-Assumptions-r17 ENUMERATED {false} OPTIONAL -- Need R
+ ]]
+}
+
+UplinkConfig ::= SEQUENCE {
+ initialUplinkBWP BWP-UplinkDedicated OPTIONAL, -- Need M
+ uplinkBWP-ToReleaseList SEQUENCE (SIZE (1..maxNrofBWPs)) OF BWP-Id OPTIONAL, -- Need N
+ uplinkBWP-ToAddModList SEQUENCE (SIZE (1..maxNrofBWPs)) OF BWP-Uplink OPTIONAL, -- Need N
+ firstActiveUplinkBWP-Id BWP-Id OPTIONAL, -- Cond SyncAndCellAdd
+ pusch-ServingCellConfig SetupRelease { PUSCH-ServingCellConfig } OPTIONAL, -- Need M
+ carrierSwitching SetupRelease { SRS-CarrierSwitching } OPTIONAL, -- Need M
+ ...,
+ [[
+ powerBoostPi2BPSK BOOLEAN OPTIONAL, -- Need M
+ uplinkChannelBW-PerSCS-List SEQUENCE (SIZE (1..maxSCSs)) OF SCS-SpecificCarrier OPTIONAL -- Need S
+ ]],
+ [[
+ enablePL-RS-UpdateForPUSCH-SRS-r16 ENUMERATED {enabled} OPTIONAL, -- Need R
+ enableDefaultBeamPL-ForPUSCH0-0-r16 ENUMERATED {enabled} OPTIONAL, -- Need R
+ enableDefaultBeamPL-ForPUCCH-r16 ENUMERATED {enabled} OPTIONAL, -- Need R
+ enableDefaultBeamPL-ForSRS-r16 ENUMERATED {enabled} OPTIONAL, -- Need R
+ uplinkTxSwitching-r16 SetupRelease { UplinkTxSwitching-r16 } OPTIONAL, -- Need M
+ mpr-PowerBoost-FR2-r16 ENUMERATED {true} OPTIONAL -- Need R
+ ]]
+}
+
+DummyJ ::= SEQUENCE {
+ maxEnergyDetectionThreshold-r16 INTEGER(-85..-52),
+ energyDetectionThresholdOffset-r16 INTEGER (-20..-13),
+ ul-toDL-COT-SharingED-Threshold-r16 INTEGER (-85..-52) OPTIONAL, -- Need R
+ absenceOfAnyOtherTechnology-r16 ENUMERATED {true} OPTIONAL -- Need R
+}
+
+ChannelAccessConfig-r16 ::= SEQUENCE {
+ energyDetectionConfig-r16 CHOICE {
+ maxEnergyDetectionThreshold-r16 INTEGER (-85..-52),
+ energyDetectionThresholdOffset-r16 INTEGER (-13..20)
+ } OPTIONAL, -- Need R
+ ul-toDL-COT-SharingED-Threshold-r16 INTEGER (-85..-52) OPTIONAL, -- Need R
+ absenceOfAnyOtherTechnology-r16 ENUMERATED {true} OPTIONAL -- Need R
+}
+
+IntraCellGuardBandsPerSCS-r16 ::= SEQUENCE {
+ guardBandSCS-r16 SubcarrierSpacing,
+ intraCellGuardBands-r16 SEQUENCE (SIZE (1..4)) OF GuardBand-r16
+}
+
+GuardBand-r16 ::= SEQUENCE {
+ startCRB-r16 INTEGER (0..274),
+ nrofCRBs-r16 INTEGER (0..15)
+}
+
+DormancyGroupID-r16 ::= INTEGER (0..4)
+
+DormantBWP-Config-r16::= SEQUENCE {
+ dormantBWP-Id-r16 BWP-Id OPTIONAL, -- Need M
+ withinActiveTimeConfig-r16 SetupRelease { WithinActiveTimeConfig-r16 } OPTIONAL, -- Need M
+ outsideActiveTimeConfig-r16 SetupRelease { OutsideActiveTimeConfig-r16 } OPTIONAL -- Need M
+}
+
+WithinActiveTimeConfig-r16 ::= SEQUENCE {
+ firstWithinActiveTimeBWP-Id-r16 BWP-Id OPTIONAL, -- Need M
+ dormancyGroupWithinActiveTime-r16 DormancyGroupID-r16 OPTIONAL -- Need R
+}
+
+OutsideActiveTimeConfig-r16 ::= SEQUENCE {
+ firstOutsideActiveTimeBWP-Id-r16 BWP-Id OPTIONAL, -- Need M
+ dormancyGroupOutsideActiveTime-r16 DormancyGroupID-r16 OPTIONAL -- Need R
+}
+
+UplinkTxSwitching-r16 ::= SEQUENCE {
+ uplinkTxSwitchingPeriodLocation-r16 BOOLEAN,
+ uplinkTxSwitchingCarrier-r16 ENUMERATED {carrier1, carrier2}
+}
+
+MIMOParam-r17 ::= SEQUENCE {
+ additionalPCI-ToAddModList-r17 SEQUENCE (SIZE(1..maxNrofAdditionalPCI-r17)) OF SSB-MTC-AdditionalPCI-r17 OPTIONAL, -- Need N
+ additionalPCI-ToReleaseList-r17 SEQUENCE (SIZE(1..maxNrofAdditionalPCI-r17)) OF AdditionalPCIIndex-r17 OPTIONAL, -- Need N
+ unifiedTCI-StateType-r17 ENUMERATED {separate, joint} OPTIONAL, -- Need R
+ uplink-PowerControlToAddModList-r17 SEQUENCE (SIZE (1..maxUL-TCI-r17)) OF Uplink-powerControl-r17 OPTIONAL, -- Need N
+ uplink-PowerControlToReleaseList-r17 SEQUENCE (SIZE (1..maxUL-TCI-r17)) OF Uplink-powerControlId-r17 OPTIONAL, -- Need N
+ sfnSchemePDCCH-r17 ENUMERATED {sfnSchemeA,sfnSchemeB} OPTIONAL, -- Need R
+ sfnSchemePDSCH-r17 ENUMERATED {sfnSchemeA,sfnSchemeB} OPTIONAL -- Need R
+
+}
+
+-- TAG-SERVINGCELLCONFIG-STOP
+-- TAG-SERVINGCELLCONFIGCOMMON-START
+
+ServingCellConfigCommon ::= SEQUENCE {
+ physCellId PhysCellId OPTIONAL, -- Cond HOAndServCellAdd,
+ downlinkConfigCommon DownlinkConfigCommon OPTIONAL, -- Cond HOAndServCellAdd
+ uplinkConfigCommon UplinkConfigCommon OPTIONAL, -- Need M
+ supplementaryUplinkConfig UplinkConfigCommon OPTIONAL, -- Need S
+ n-TimingAdvanceOffset ENUMERATED { n0, n25600, n39936 } OPTIONAL, -- Need S
+ ssb-PositionsInBurst CHOICE {
+ shortBitmap BIT STRING (SIZE (4)),
+ mediumBitmap BIT STRING (SIZE (8)),
+ longBitmap BIT STRING (SIZE (64))
+ } OPTIONAL, -- Cond AbsFreqSSB
+ ssb-periodicityServingCell ENUMERATED { ms5, ms10, ms20, ms40, ms80, ms160, spare2, spare1 } OPTIONAL, -- Need S
+ dmrs-TypeA-Position ENUMERATED {pos2, pos3},
+ lte-CRS-ToMatchAround SetupRelease { RateMatchPatternLTE-CRS } OPTIONAL, -- Need M
+ rateMatchPatternToAddModList SEQUENCE (SIZE (1..maxNrofRateMatchPatterns)) OF RateMatchPattern OPTIONAL, -- Need N
+ rateMatchPatternToReleaseList SEQUENCE (SIZE (1..maxNrofRateMatchPatterns)) OF RateMatchPatternId OPTIONAL, -- Need N
+ ssbSubcarrierSpacing SubcarrierSpacing OPTIONAL, -- Cond HOAndServCellWithSSB
+ tdd-UL-DL-ConfigurationCommon TDD-UL-DL-ConfigCommon OPTIONAL, -- Cond TDD
+ ss-PBCH-BlockPower INTEGER (-60..50),
+ ...,
+ [[
+ channelAccessMode-r16 CHOICE {
+ dynamic NULL,
+ semiStatic SemiStaticChannelAccessConfig-r16
+ } OPTIONAL, -- Cond SharedSpectrum
+ discoveryBurstWindowLength-r16 ENUMERATED {ms0dot5, ms1, ms2, ms3, ms4, ms5} OPTIONAL, -- Need R
+ ssb-PositionQCL-r16 SSB-PositionQCL-Relation-r16 OPTIONAL, -- Cond SharedSpectrum
+ highSpeedConfig-r16 HighSpeedConfig-r16 OPTIONAL -- Need R
+ ]],
+ [[
+ highSpeedConfig-v1700 HighSpeedConfig-v1700 OPTIONAL, -- Need R
+ channelAccessMode2-r17 ENUMERATED {enabled} OPTIONAL, -- Cond SharedSpectrum2
+ discoveryBurstWindowLength-r17 ENUMERATED {ms0dot125, ms0dot25, ms0dot5, ms0dot75, ms1, ms1dot25} OPTIONAL, -- Need R
+ ssb-PositionQCL-r17 SSB-PositionQCL-Relation-r17 OPTIONAL, -- Cond SharedSpectrum2
+ highSpeedConfigFR2-r17 HighSpeedConfigFR2-r17 OPTIONAL, -- Need R
+ uplinkConfigCommon-v1700 UplinkConfigCommon-v1700 OPTIONAL, -- Need R
+ ntn-Config-r17 NTN-Config-r17 OPTIONAL -- Need R
+ ]],
+ [[
+ featurePriorities-r17 SEQUENCE {
+ redCapPriority-r17 FeaturePriority-r17 OPTIONAL, -- Need R
+ slicingPriority-r17 FeaturePriority-r17 OPTIONAL, -- Need R
+ msg3-Repetitions-Priority-r17 FeaturePriority-r17 OPTIONAL, -- Need R
+ sdt-Priority-r17 FeaturePriority-r17 OPTIONAL -- Need R
+ } OPTIONAL -- Need R
+ ]]
+}
+
+-- TAG-SERVINGCELLCONFIGCOMMON-STOP
+-- TAG-SERVINGCELLCONFIGCOMMONSIB-START
+
+ServingCellConfigCommonSIB ::= SEQUENCE {
+ downlinkConfigCommon DownlinkConfigCommonSIB,
+ uplinkConfigCommon UplinkConfigCommonSIB OPTIONAL, -- Need R
+ supplementaryUplink UplinkConfigCommonSIB OPTIONAL, -- Need R
+ n-TimingAdvanceOffset ENUMERATED { n0, n25600, n39936 } OPTIONAL, -- Need S
+ ssb-PositionsInBurst SEQUENCE {
+ inOneGroup BIT STRING (SIZE (8)),
+ groupPresence BIT STRING (SIZE (8)) OPTIONAL -- Cond FR2-Only
+ },
+ ssb-PeriodicityServingCell ENUMERATED {ms5, ms10, ms20, ms40, ms80, ms160},
+ tdd-UL-DL-ConfigurationCommon TDD-UL-DL-ConfigCommon OPTIONAL, -- Cond TDD
+ ss-PBCH-BlockPower INTEGER (-60..50),
+ ...,
+ [[
+ channelAccessMode-r16 CHOICE {
+ dynamic NULL,
+ semiStatic SemiStaticChannelAccessConfig-r16
+ } OPTIONAL, -- Cond SharedSpectrum
+ discoveryBurstWindowLength-r16 ENUMERATED {ms0dot5, ms1, ms2, ms3, ms4, ms5} OPTIONAL, -- Need R
+ highSpeedConfig-r16 HighSpeedConfig-r16 OPTIONAL -- Need R
+ ]],
+ [[
+ channelAccessMode2-r17 ENUMERATED {enabled} OPTIONAL, -- Cond SharedSpectrum2
+ discoveryBurstWindowLength-v1700 ENUMERATED {ms0dot125, ms0dot25, ms0dot5, ms0dot75, ms1, ms1dot25} OPTIONAL, -- Need R
+ highSpeedConfigFR2-r17 HighSpeedConfigFR2-r17 OPTIONAL, -- Need R
+ uplinkConfigCommon-v1700 UplinkConfigCommonSIB-v1700 OPTIONAL -- Need R
+ ]],
+ [[
+ enhancedMeasurementLEO-r17 ENUMERATED {true} OPTIONAL -- Need R
+ ]]
+}
+
+-- TAG-SERVINGCELLCONFIGCOMMONSIB-STOP
+-- TAG-SHORTI-RNTI-VALUE-START
+
+ShortI-RNTI-Value ::= BIT STRING (SIZE(24))
+
+-- TAG-SHORTI-RNTI-VALUE-STOP
+-- TAG-SHORTMAC-I-START
+
+ShortMAC-I ::= BIT STRING (SIZE (16))
+
+-- TAG-SHORTMAC-I-STOP
+-- TAG-SINR-RANGE-START
+
+SINR-Range ::= INTEGER(0..127)
+
+-- TAG-SINR-RANGE-STOP
+-- TAG-SI-REQUESTCONFIG-START
+
+SI-RequestConfig ::= SEQUENCE {
+ rach-OccasionsSI SEQUENCE {
+ rach-ConfigSI RACH-ConfigGeneric,
+ ssb-perRACH-Occasion ENUMERATED {oneEighth, oneFourth, oneHalf, one, two, four, eight, sixteen}
+ } OPTIONAL, -- Need R
+ si-RequestPeriod ENUMERATED {one, two, four, six, eight, ten, twelve, sixteen} OPTIONAL, -- Need R
+ si-RequestResources SEQUENCE (SIZE (1..maxSI-Message)) OF SI-RequestResources
+}
+
+SI-RequestResources ::= SEQUENCE {
+ ra-PreambleStartIndex INTEGER (0..63),
+ ra-AssociationPeriodIndex INTEGER (0..15) OPTIONAL, -- Need R
+ ra-ssb-OccasionMaskIndex INTEGER (0..15) OPTIONAL -- Need R
+}
+
+-- TAG-SI-REQUESTCONFIG-STOP
+-- TAG-SI-SCHEDULINGINFO-START
+
+SI-SchedulingInfo ::= SEQUENCE {
+ schedulingInfoList SEQUENCE (SIZE (1..maxSI-Message)) OF SchedulingInfo,
+ si-WindowLength ENUMERATED {s5, s10, s20, s40, s80, s160, s320, s640, s1280, s2560-v1710, s5120-v1710 },
+ si-RequestConfig SI-RequestConfig OPTIONAL, -- Cond MSG-1
+ si-RequestConfigSUL SI-RequestConfig OPTIONAL, -- Cond SUL-MSG-1
+ systemInformationAreaID BIT STRING (SIZE (24)) OPTIONAL, -- Need R
+ ...
+}
+
+SchedulingInfo ::= SEQUENCE {
+ si-BroadcastStatus ENUMERATED {broadcasting, notBroadcasting},
+ si-Periodicity ENUMERATED {rf8, rf16, rf32, rf64, rf128, rf256, rf512},
+ sib-MappingInfo SIB-Mapping
+}
+
+SI-SchedulingInfo-v1700 ::= SEQUENCE {
+ schedulingInfoList2-r17 SEQUENCE (SIZE (1..maxSI-Message)) OF SchedulingInfo2-r17,
+ si-RequestConfigRedCap-r17 SI-RequestConfig OPTIONAL -- Cond REDCAP-MSG-1
+}
+
+SchedulingInfo2-r17 ::= SEQUENCE {
+ si-BroadcastStatus-r17 ENUMERATED {broadcasting, notBroadcasting},
+ si-WindowPosition-r17 INTEGER (1..256),
+ si-Periodicity-r17 ENUMERATED {rf8, rf16, rf32, rf64, rf128, rf256, rf512},
+ sib-MappingInfo-r17 SIB-Mapping-v1700
+}
+
+SIB-Mapping ::= SEQUENCE (SIZE (1..maxSIB)) OF SIB-TypeInfo
+
+SIB-Mapping-v1700 ::= SEQUENCE (SIZE (1..maxSIB)) OF SIB-TypeInfo-v1700
+
+SIB-TypeInfo ::= SEQUENCE {
+ type ENUMERATED {sibType2, sibType3, sibType4, sibType5, sibType6, sibType7, sibType8, sibType9,
+ sibType10-v1610, sibType11-v1610, sibType12-v1610, sibType13-v1610,
+ sibType14-v1610, spare3, spare2, spare1,... },
+ valueTag INTEGER (0..31) OPTIONAL, -- Cond SIB-TYPE
+ areaScope ENUMERATED {true} OPTIONAL -- Need S
+}
+
+SIB-TypeInfo-v1700 ::= SEQUENCE {
+ sibType-r17 CHOICE {
+ type1-r17 ENUMERATED {sibType15, sibType16, sibType17, sibType18, sibType19, sibType20, sibType21,
+ spare9, spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1,...},
+ type2-r17 SEQUENCE {
+ posSibType-r17 ENUMERATED {posSibType1-9, posSibType1-10, posSibType2-24, posSibType2-25,
+ posSibType6-4, posSibType6-5, posSibType6-6, spare9, spare8, spare7, spare6,
+ spare5, spare4, spare3, spare2, spare1,...},
+ encrypted-r17 ENUMERATED { true } OPTIONAL, -- Need R
+ gnss-id-r17 GNSS-ID-r16 OPTIONAL, -- Need R
+ sbas-id-r17 SBAS-ID-r16 OPTIONAL -- Need R
+ }
+ },
+ valueTag-r17 INTEGER (0..31) OPTIONAL, -- Cond NonPosSIB
+ areaScope-r17 ENUMERATED {true} OPTIONAL -- Need S
+}
+
+-- TAG-SI-SCHEDULINGINFO-STOP
+-- TAG-SKCOUNTER-START
+
+SK-Counter ::= INTEGER (0..65535)
+
+-- TAG-SKCOUNTER-STOP
+-- TAG-SLOTFORMATCOMBINATIONSPERCELL-START
+
+SlotFormatCombinationsPerCell ::= SEQUENCE {
+ servingCellId ServCellIndex,
+ subcarrierSpacing SubcarrierSpacing,
+ subcarrierSpacing2 SubcarrierSpacing OPTIONAL, -- Need R
+ slotFormatCombinations SEQUENCE (SIZE (1..maxNrofSlotFormatCombinationsPerSet)) OF SlotFormatCombination
+ OPTIONAL, -- Need M
+ positionInDCI INTEGER(0..maxSFI-DCI-PayloadSize-1) OPTIONAL, -- Need M
+ ...,
+ [[
+ enableConfiguredUL-r16 ENUMERATED {enabled} OPTIONAL -- Need R
+ ]]
+
+}
+
+SlotFormatCombination ::= SEQUENCE {
+ slotFormatCombinationId SlotFormatCombinationId,
+ slotFormats SEQUENCE (SIZE (1..maxNrofSlotFormatsPerCombination)) OF INTEGER (0..255)
+}
+
+SlotFormatCombinationId ::= INTEGER (0..maxNrofSlotFormatCombinationsPerSet-1)
+
+-- TAG-SLOTFORMATCOMBINATIONSPERCELL-STOP
+-- TAG-SLOTFORMATINDICATOR-START
+
+SlotFormatIndicator ::= SEQUENCE {
+ sfi-RNTI RNTI-Value,
+ dci-PayloadSize INTEGER (1..maxSFI-DCI-PayloadSize),
+ slotFormatCombToAddModList SEQUENCE (SIZE(1..maxNrofAggregatedCellsPerCellGroup)) OF SlotFormatCombinationsPerCell
+ OPTIONAL, -- Need N
+ slotFormatCombToReleaseList SEQUENCE (SIZE(1..maxNrofAggregatedCellsPerCellGroup)) OF ServCellIndex OPTIONAL, -- Need N
+ ...,
+ [[
+ availableRB-SetsToAddModList-r16 SEQUENCE (SIZE(1..maxNrofAggregatedCellsPerCellGroup)) OF AvailableRB-SetsPerCell-r16 OPTIONAL, -- Need N
+ availableRB-SetsToReleaseList-r16 SEQUENCE (SIZE(1..maxNrofAggregatedCellsPerCellGroup)) OF ServCellIndex OPTIONAL, -- Need N
+ switchTriggerToAddModList-r16 SEQUENCE (SIZE(1..4)) OF SearchSpaceSwitchTrigger-r16 OPTIONAL, -- Need N
+ switchTriggerToReleaseList-r16 SEQUENCE (SIZE(1..4)) OF ServCellIndex OPTIONAL, -- Need N
+ co-DurationsPerCellToAddModList-r16 SEQUENCE (SIZE(1..maxNrofAggregatedCellsPerCellGroup)) OF CO-DurationsPerCell-r16 OPTIONAL, -- Need N
+ co-DurationsPerCellToReleaseList-r16 SEQUENCE (SIZE(1..maxNrofAggregatedCellsPerCellGroup)) OF ServCellIndex OPTIONAL -- Need N
+ ]],
+ [[
+ switchTriggerToAddModListSizeExt-r16 SEQUENCE (SIZE(1..maxNrofAggregatedCellsPerCellGroupMinus4-r16)) OF
+ SearchSpaceSwitchTrigger-r16 OPTIONAL, -- Need N
+ switchTriggerToReleaseListSizeExt-r16 SEQUENCE (SIZE(1.. maxNrofAggregatedCellsPerCellGroupMinus4-r16)) OF
+ ServCellIndex OPTIONAL -- Need N
+ ]],
+ [[
+ co-DurationsPerCellToAddModList-r17 SEQUENCE (SIZE(1..maxNrofAggregatedCellsPerCellGroup)) OF CO-DurationsPerCell-r17 OPTIONAL -- Need N
+ ]]
+}
+
+CO-DurationsPerCell-r16 ::= SEQUENCE {
+ servingCellId-r16 ServCellIndex,
+ positionInDCI-r16 INTEGER(0..maxSFI-DCI-PayloadSize-1),
+ subcarrierSpacing-r16 SubcarrierSpacing,
+ co-DurationList-r16 SEQUENCE (SIZE(1..64)) OF CO-Duration-r16
+}
+
+CO-DurationsPerCell-r17 ::= SEQUENCE {
+ servingCellId-r17 ServCellIndex,
+ positionInDCI-r17 INTEGER(0..maxSFI-DCI-PayloadSize-1),
+ subcarrierSpacing-r17 SubcarrierSpacing,
+ co-DurationList-r17 SEQUENCE (SIZE(1..64)) OF CO-Duration-r17
+}
+
+CO-Duration-r16 ::= INTEGER (0..1120)
+CO-Duration-r17 ::= INTEGER (0..4480)
+
+AvailableRB-SetsPerCell-r16 ::= SEQUENCE {
+ servingCellId-r16 ServCellIndex,
+ positionInDCI-r16 INTEGER(0..maxSFI-DCI-PayloadSize-1)
+}
+
+SearchSpaceSwitchTrigger-r16 ::= SEQUENCE {
+ servingCellId-r16 ServCellIndex,
+ positionInDCI-r16 INTEGER(0..maxSFI-DCI-PayloadSize-1)
+}
+
+-- TAG-SLOTFORMATINDICATOR-STOP
+-- TAG-S-NSSAI-START
+
+S-NSSAI ::= CHOICE{
+ sst BIT STRING (SIZE (8)),
+ sst-SD BIT STRING (SIZE (32))
+}
+
+-- TAG-S-NSSAI-STOP
+-- TAG-SPEEDSTATESCALEFACTORS-START
+
+SpeedStateScaleFactors ::= SEQUENCE {
+ sf-Medium ENUMERATED {oDot25, oDot5, oDot75, lDot0},
+ sf-High ENUMERATED {oDot25, oDot5, oDot75, lDot0}
+}
+-- TAG-SPEEDSTATESCALEFACTORS-STOP
+-- TAG-SPS-CONFIG-START
+
+SPS-Config ::= SEQUENCE {
+ periodicity ENUMERATED {ms10, ms20, ms32, ms40, ms64, ms80, ms128, ms160, ms320, ms640,
+ spare6, spare5, spare4, spare3, spare2, spare1},
+ nrofHARQ-Processes INTEGER (1..8),
+ n1PUCCH-AN PUCCH-ResourceId OPTIONAL, -- Need M
+ mcs-Table ENUMERATED {qam64LowSE} OPTIONAL, -- Need S
+ ...,
+ [[
+ sps-ConfigIndex-r16 SPS-ConfigIndex-r16 OPTIONAL, -- Cond SPS-List
+ harq-ProcID-Offset-r16 INTEGER (0..15) OPTIONAL, -- Need R
+ periodicityExt-r16 INTEGER (1..5120) OPTIONAL, -- Need R
+ harq-CodebookID-r16 INTEGER (1..2) OPTIONAL, -- Need R
+ pdsch-AggregationFactor-r16 ENUMERATED {n1, n2, n4, n8 } OPTIONAL -- Need S
+ ]],
+ [[
+ sps-HARQ-Deferral-r17 INTEGER (1..32) OPTIONAL, -- Need R
+ n1PUCCH-AN-PUCCHsSCell-r17 PUCCH-ResourceId OPTIONAL, -- Need R
+ periodicityExt-r17 INTEGER (1..40960) OPTIONAL, -- Need R
+ nrofHARQ-Processes-v1710 INTEGER(9..32) OPTIONAL, -- Need R
+ harq-ProcID-Offset-v1700 INTEGER (16..31) OPTIONAL -- Need R
+ ]]
+}
+
+-- TAG-SPS-CONFIG-STOP
+-- TAG-SPS-CONFIGINDEX-START
+
+SPS-ConfigIndex-r16 ::= INTEGER (0.. maxNrofSPS-Config-1-r16)
+
+-- TAG-SPS-CONFIGINDEX-STOP
+-- TAG-SPS-PUCCH-AN-START
+
+SPS-PUCCH-AN-r16 ::= SEQUENCE {
+ sps-PUCCH-AN-ResourceID-r16 PUCCH-ResourceId,
+ maxPayloadSize-r16 INTEGER (4..256) OPTIONAL -- Need R
+}
+
+-- TAG-SPS-PUCCH-AN-STOP
+-- TAG-SPS-PUCCH-AN-LIST-START
+
+SPS-PUCCH-AN-List-r16 ::= SEQUENCE (SIZE(1..4)) OF SPS-PUCCH-AN-r16
+
+-- TAG-SPS-PUCCH-AN-LIST-STOP
+-- TAG-SRB-IDENTITY-START
+
+SRB-Identity ::= INTEGER (1..3)
+
+SRB-Identity-v1700 ::= INTEGER (4)
+
+-- TAG-SRB-IDENTITY-STOP
+-- TAG-SRS-CARRIERSWITCHING-START
+
+SRS-CarrierSwitching ::= SEQUENCE {
+ srs-SwitchFromServCellIndex INTEGER (0..31) OPTIONAL, -- Need M
+ srs-SwitchFromCarrier ENUMERATED {sUL, nUL},
+ srs-TPC-PDCCH-Group CHOICE {
+ typeA SEQUENCE (SIZE (1..32)) OF SRS-TPC-PDCCH-Config,
+ typeB SRS-TPC-PDCCH-Config
+ } OPTIONAL, -- Need M
+ monitoringCells SEQUENCE (SIZE (1..maxNrofServingCells)) OF ServCellIndex OPTIONAL, -- Need M
+ ...
+}
+
+SRS-TPC-PDCCH-Config ::= SEQUENCE {
+ srs-CC-SetIndexlist SEQUENCE (SIZE(1..4)) OF SRS-CC-SetIndex OPTIONAL -- Need M
+}
+
+SRS-CC-SetIndex ::= SEQUENCE {
+ cc-SetIndex INTEGER (0..3) OPTIONAL, -- Need M
+ cc-IndexInOneCC-Set INTEGER (0..7) OPTIONAL -- Need M
+}
+
+-- TAG-SRS-CARRIERSWITCHING-STOP
+-- TAG-SRS-CONFIG-START
+
+SRS-Config ::= SEQUENCE {
+ srs-ResourceSetToReleaseList SEQUENCE (SIZE(1..maxNrofSRS-ResourceSets)) OF SRS-ResourceSetId OPTIONAL, -- Need N
+ srs-ResourceSetToAddModList SEQUENCE (SIZE(1..maxNrofSRS-ResourceSets)) OF SRS-ResourceSet OPTIONAL, -- Need N
+ srs-ResourceToReleaseList SEQUENCE (SIZE(1..maxNrofSRS-Resources)) OF SRS-ResourceId OPTIONAL, -- Need N
+ srs-ResourceToAddModList SEQUENCE (SIZE(1..maxNrofSRS-Resources)) OF SRS-Resource OPTIONAL, -- Need N
+ tpc-Accumulation ENUMERATED {disabled} OPTIONAL, -- Need S
+ ...,
+ [[
+ srs-RequestDCI-1-2-r16 INTEGER (1..2) OPTIONAL, -- Need S
+ srs-RequestDCI-0-2-r16 INTEGER (1..2) OPTIONAL, -- Need S
+ srs-ResourceSetToAddModListDCI-0-2-r16 SEQUENCE (SIZE(1..maxNrofSRS-ResourceSets)) OF SRS-ResourceSet OPTIONAL, -- Need N
+ srs-ResourceSetToReleaseListDCI-0-2-r16 SEQUENCE (SIZE(1..maxNrofSRS-ResourceSets)) OF SRS-ResourceSetId OPTIONAL, -- Need N
+ srs-PosResourceSetToReleaseList-r16 SEQUENCE (SIZE(1..maxNrofSRS-PosResourceSets-r16)) OF SRS-PosResourceSetId-r16
+ OPTIONAL, -- Need N
+ srs-PosResourceSetToAddModList-r16 SEQUENCE (SIZE(1..maxNrofSRS-PosResourceSets-r16)) OF SRS-PosResourceSet-r16 OPTIONAL,-- Need N
+ srs-PosResourceToReleaseList-r16 SEQUENCE (SIZE(1..maxNrofSRS-PosResources-r16)) OF SRS-PosResourceId-r16 OPTIONAL,-- Need N
+ srs-PosResourceToAddModList-r16 SEQUENCE (SIZE(1..maxNrofSRS-PosResources-r16)) OF SRS-PosResource-r16 OPTIONAL -- Need N
+ ]]
+}
+
+SRS-ResourceSet ::= SEQUENCE {
+ srs-ResourceSetId SRS-ResourceSetId,
+ srs-ResourceIdList SEQUENCE (SIZE(1..maxNrofSRS-ResourcesPerSet)) OF SRS-ResourceId OPTIONAL, -- Cond Setup
+ resourceType CHOICE {
+ aperiodic SEQUENCE {
+ aperiodicSRS-ResourceTrigger INTEGER (1..maxNrofSRS-TriggerStates-1),
+ csi-RS NZP-CSI-RS-ResourceId OPTIONAL, -- Cond NonCodebook
+ slotOffset INTEGER (1..32) OPTIONAL, -- Need S
+ ...,
+ [[
+ aperiodicSRS-ResourceTriggerList SEQUENCE (SIZE(1..maxNrofSRS-TriggerStates-2))
+ OF INTEGER (1..maxNrofSRS-TriggerStates-1) OPTIONAL -- Need M
+ ]]
+ },
+ semi-persistent SEQUENCE {
+ associatedCSI-RS NZP-CSI-RS-ResourceId OPTIONAL, -- Cond NonCodebook
+ ...
+ },
+ periodic SEQUENCE {
+ associatedCSI-RS NZP-CSI-RS-ResourceId OPTIONAL, -- Cond NonCodebook
+ ...
+ }
+ },
+ usage ENUMERATED {beamManagement, codebook, nonCodebook, antennaSwitching},
+ alpha Alpha OPTIONAL, -- Need S
+ p0 INTEGER (-202..24) OPTIONAL, -- Cond Setup
+ pathlossReferenceRS PathlossReferenceRS-Config OPTIONAL, -- Need M
+ srs-PowerControlAdjustmentStates ENUMERATED { sameAsFci2, separateClosedLoop} OPTIONAL, -- Need S
+ ...,
+ [[
+ pathlossReferenceRSList-r16 SetupRelease { PathlossReferenceRSList-r16} OPTIONAL -- Need M
+ ]],
+ [[
+ usagePDC-r17 ENUMERATED {true} OPTIONAL, -- Need R
+ availableSlotOffsetList-r17 SEQUENCE (SIZE(1..4)) OF AvailableSlotOffset-r17 OPTIONAL, -- Need R
+ followUnifiedTCI-StateSRS-r17 ENUMERATED {enabled} OPTIONAL -- Need R
+ ]]
+}
+
+AvailableSlotOffset-r17 ::= INTEGER (0..7)
+
+PathlossReferenceRS-Config ::= CHOICE {
+ ssb-Index SSB-Index,
+ csi-RS-Index NZP-CSI-RS-ResourceId
+}
+
+PathlossReferenceRSList-r16 ::= SEQUENCE (SIZE (1..maxNrofSRS-PathlossReferenceRS-r16)) OF PathlossReferenceRS-r16
+
+PathlossReferenceRS-r16 ::= SEQUENCE {
+ srs-PathlossReferenceRS-Id-r16 SRS-PathlossReferenceRS-Id-r16,
+ pathlossReferenceRS-r16 PathlossReferenceRS-Config
+}
+
+SRS-PathlossReferenceRS-Id-r16 ::= INTEGER (0..maxNrofSRS-PathlossReferenceRS-1-r16)
+
+SRS-PosResourceSet-r16 ::= SEQUENCE {
+ srs-PosResourceSetId-r16 SRS-PosResourceSetId-r16,
+ srs-PosResourceIdList-r16 SEQUENCE (SIZE(1..maxNrofSRS-ResourcesPerSet)) OF SRS-PosResourceId-r16
+ OPTIONAL, -- Cond Setup
+ resourceType-r16 CHOICE {
+ aperiodic-r16 SEQUENCE {
+ aperiodicSRS-ResourceTriggerList-r16 SEQUENCE (SIZE(1..maxNrofSRS-TriggerStates-1))
+ OF INTEGER (1..maxNrofSRS-TriggerStates-1) OPTIONAL, -- Need M
+ ...
+ },
+ semi-persistent-r16 SEQUENCE {
+ ...
+ },
+ periodic-r16 SEQUENCE {
+ ...
+ }
+ },
+ alpha-r16 Alpha OPTIONAL, -- Need S
+ p0-r16 INTEGER (-202..24) OPTIONAL, -- Cond Setup
+ pathlossReferenceRS-Pos-r16 CHOICE {
+ ssb-IndexServing-r16 SSB-Index,
+ ssb-Ncell-r16 SSB-InfoNcell-r16,
+ dl-PRS-r16 DL-PRS-Info-r16
+ } OPTIONAL, -- Need M
+ ...
+}
+
+SRS-ResourceSetId ::= INTEGER (0..maxNrofSRS-ResourceSets-1)
+
+SRS-PosResourceSetId-r16 ::= INTEGER (0..maxNrofSRS-PosResourceSets-1-r16)
+
+SRS-Resource ::= SEQUENCE {
+ srs-ResourceId SRS-ResourceId,
+ nrofSRS-Ports ENUMERATED {port1, ports2, ports4},
+ ptrs-PortIndex ENUMERATED {n0, n1 } OPTIONAL, -- Need R
+ transmissionComb CHOICE {
+ n2 SEQUENCE {
+ combOffset-n2 INTEGER (0..1),
+ cyclicShift-n2 INTEGER (0..7)
+ },
+ n4 SEQUENCE {
+ combOffset-n4 INTEGER (0..3),
+ cyclicShift-n4 INTEGER (0..11)
+ }
+ },
+ resourceMapping SEQUENCE {
+ startPosition INTEGER (0..5),
+ nrofSymbols ENUMERATED {n1, n2, n4},
+ repetitionFactor ENUMERATED {n1, n2, n4}
+ },
+ freqDomainPosition INTEGER (0..67),
+ freqDomainShift INTEGER (0..268),
+ freqHopping SEQUENCE {
+ c-SRS INTEGER (0..63),
+ b-SRS INTEGER (0..3),
+ b-hop INTEGER (0..3)
+ },
+ groupOrSequenceHopping ENUMERATED { neither, groupHopping, sequenceHopping },
+ resourceType CHOICE {
+ aperiodic SEQUENCE {
+ ...
+ },
+ semi-persistent SEQUENCE {
+ periodicityAndOffset-sp SRS-PeriodicityAndOffset,
+ ...
+ },
+ periodic SEQUENCE {
+ periodicityAndOffset-p SRS-PeriodicityAndOffset,
+ ...
+ }
+ },
+ sequenceId INTEGER (0..1023),
+ spatialRelationInfo SRS-SpatialRelationInfo OPTIONAL, -- Need R
+ ...,
+ [[
+ resourceMapping-r16 SEQUENCE {
+ startPosition-r16 INTEGER (0..13),
+ nrofSymbols-r16 ENUMERATED {n1, n2, n4},
+ repetitionFactor-r16 ENUMERATED {n1, n2, n4}
+ } OPTIONAL -- Need R
+ ]],
+ [[
+ spatialRelationInfo-PDC-r17 SetupRelease { SpatialRelationInfo-PDC-r17 } OPTIONAL, -- Need M
+ resourceMapping-r17 SEQUENCE {
+ startPosition-r17 INTEGER (0..13),
+ nrofSymbols-r17 ENUMERATED {n1, n2, n4, n8, n10, n12, n14},
+ repetitionFactor-r17 ENUMERATED {n1, n2, n4, n5, n6, n7, n8, n10, n12, n14}
+ } OPTIONAL, -- Need R
+ partialFreqSounding-r17 SEQUENCE {
+ startRBIndexFScaling-r17 CHOICE{
+ startRBIndexAndFreqScalingFactor2-r17 INTEGER (0..1),
+ startRBIndexAndFreqScalingFactor4-r17 INTEGER (0..3)
+ },
+ enableStartRBHopping-r17 ENUMERATED {enable} OPTIONAL -- Need R
+ } OPTIONAL, -- Need R
+ transmissionComb-n8-r17 SEQUENCE {
+ combOffset-n8-r17 INTEGER (0..7),
+ cyclicShift-n8-r17 INTEGER (0..5)
+ } OPTIONAL, -- Need R
+ srs-TCI-State-r17 CHOICE {
+ srs-UL-TCI-State TCI-UL-State-Id-r17,
+ srs-DLorJointTCI-State TCI-StateId
+ } OPTIONAL -- Need R
+ ]],
+ [[
+ repetitionFactor-v1730 ENUMERATED {n3} OPTIONAL, -- Need R
+ srs-DLorJointTCI-State-v1730 SEQUENCE {
+ cellAndBWP-r17 ServingCellAndBWP-Id-r17
+ } OPTIONAL -- Cond DLorJointTCI-SRS
+ ]]
+}
+
+SRS-PosResource-r16::= SEQUENCE {
+ srs-PosResourceId-r16 SRS-PosResourceId-r16,
+ transmissionComb-r16 CHOICE {
+ n2-r16 SEQUENCE {
+ combOffset-n2-r16 INTEGER (0..1),
+ cyclicShift-n2-r16 INTEGER (0..7)
+ },
+ n4-r16 SEQUENCE {
+ combOffset-n4-r16 INTEGER (0..3),
+ cyclicShift-n4-r16 INTEGER (0..11)
+ },
+ n8-r16 SEQUENCE {
+ combOffset-n8-r16 INTEGER (0..7),
+ cyclicShift-n8-r16 INTEGER (0..5)
+ },
+ ...
+ },
+ resourceMapping-r16 SEQUENCE {
+ startPosition-r16 INTEGER (0..13),
+ nrofSymbols-r16 ENUMERATED {n1, n2, n4, n8, n12}
+ },
+ freqDomainShift-r16 INTEGER (0..268),
+ freqHopping-r16 SEQUENCE {
+ c-SRS-r16 INTEGER (0..63),
+ ...
+ },
+ groupOrSequenceHopping-r16 ENUMERATED { neither, groupHopping, sequenceHopping },
+ resourceType-r16 CHOICE {
+ aperiodic-r16 SEQUENCE {
+ slotOffset-r16 INTEGER (1..32) OPTIONAL, -- Need S
+ ...
+ },
+ semi-persistent-r16 SEQUENCE {
+ periodicityAndOffset-sp-r16 SRS-PeriodicityAndOffset-r16,
+ ...,
+ [[
+ periodicityAndOffset-sp-Ext-r16 SRS-PeriodicityAndOffsetExt-r16 OPTIONAL -- Need R
+ ]]
+ },
+ periodic-r16 SEQUENCE {
+ periodicityAndOffset-p-r16 SRS-PeriodicityAndOffset-r16,
+ ...,
+ [[
+ periodicityAndOffset-p-Ext-r16 SRS-PeriodicityAndOffsetExt-r16 OPTIONAL -- Need R
+ ]]
+ }
+ },
+ sequenceId-r16 INTEGER (0..65535),
+ spatialRelationInfoPos-r16 SRS-SpatialRelationInfoPos-r16 OPTIONAL, -- Need R
+ ...
+}
+
+SRS-SpatialRelationInfo ::= SEQUENCE {
+ servingCellId ServCellIndex OPTIONAL, -- Need S
+ referenceSignal CHOICE {
+ ssb-Index SSB-Index,
+ csi-RS-Index NZP-CSI-RS-ResourceId,
+ srs SEQUENCE {
+ resourceId SRS-ResourceId,
+ uplinkBWP BWP-Id
+ }
+ }
+}
+
+SRS-SpatialRelationInfoPos-r16 ::= CHOICE {
+ servingRS-r16 SEQUENCE {
+ servingCellId ServCellIndex OPTIONAL, -- Need S
+ referenceSignal-r16 CHOICE {
+ ssb-IndexServing-r16 SSB-Index,
+ csi-RS-IndexServing-r16 NZP-CSI-RS-ResourceId,
+ srs-SpatialRelation-r16 SEQUENCE {
+ resourceSelection-r16 CHOICE {
+ srs-ResourceId-r16 SRS-ResourceId,
+ srs-PosResourceId-r16 SRS-PosResourceId-r16
+ },
+ uplinkBWP-r16 BWP-Id
+ }
+ }
+ },
+ ssb-Ncell-r16 SSB-InfoNcell-r16,
+ dl-PRS-r16 DL-PRS-Info-r16
+}
+
+SSB-Configuration-r16 ::= SEQUENCE {
+ ssb-Freq-r16 ARFCN-ValueNR,
+ halfFrameIndex-r16 ENUMERATED {zero, one},
+ ssbSubcarrierSpacing-r16 SubcarrierSpacing,
+ ssb-Periodicity-r16 ENUMERATED { ms5, ms10, ms20, ms40, ms80, ms160, spare2,spare1 } OPTIONAL, -- Need S
+ sfn0-Offset-r16 SEQUENCE {
+ sfn-Offset-r16 INTEGER (0..1023),
+ integerSubframeOffset-r16 INTEGER (0..9) OPTIONAL -- Need R
+ } OPTIONAL, -- Need R
+ sfn-SSB-Offset-r16 INTEGER (0..15),
+ ss-PBCH-BlockPower-r16 INTEGER (-60..50) OPTIONAL -- Cond Pathloss
+}
+
+SSB-InfoNcell-r16 ::= SEQUENCE {
+ physicalCellId-r16 PhysCellId,
+ ssb-IndexNcell-r16 SSB-Index OPTIONAL, -- Need S
+ ssb-Configuration-r16 SSB-Configuration-r16 OPTIONAL -- Need S
+}
+
+DL-PRS-Info-r16 ::= SEQUENCE {
+ dl-PRS-ID-r16 INTEGER (0..255),
+ dl-PRS-ResourceSetId-r16 INTEGER (0..7),
+ dl-PRS-ResourceId-r16 INTEGER (0..63) OPTIONAL -- Need S
+}
+
+SRS-ResourceId ::= INTEGER (0..maxNrofSRS-Resources-1)
+SRS-PosResourceId-r16 ::= INTEGER (0..maxNrofSRS-PosResources-1-r16)
+
+SRS-PeriodicityAndOffset ::= CHOICE {
+ sl1 NULL,
+ sl2 INTEGER(0..1),
+ sl4 INTEGER(0..3),
+ sl5 INTEGER(0..4),
+ sl8 INTEGER(0..7),
+ sl10 INTEGER(0..9),
+ sl16 INTEGER(0..15),
+ sl20 INTEGER(0..19),
+ sl32 INTEGER(0..31),
+ sl40 INTEGER(0..39),
+ sl64 INTEGER(0..63),
+ sl80 INTEGER(0..79),
+ sl160 INTEGER(0..159),
+ sl320 INTEGER(0..319),
+ sl640 INTEGER(0..639),
+ sl1280 INTEGER(0..1279),
+ sl2560 INTEGER(0..2559)
+}
+
+SRS-PeriodicityAndOffset-r16 ::= CHOICE {
+ sl1 NULL,
+ sl2 INTEGER(0..1),
+ sl4 INTEGER(0..3),
+ sl5 INTEGER(0..4),
+ sl8 INTEGER(0..7),
+ sl10 INTEGER(0..9),
+ sl16 INTEGER(0..15),
+ sl20 INTEGER(0..19),
+ sl32 INTEGER(0..31),
+ sl40 INTEGER(0..39),
+ sl64 INTEGER(0..63),
+ sl80 INTEGER(0..79),
+ sl160 INTEGER(0..159),
+ sl320 INTEGER(0..319),
+ sl640 INTEGER(0..639),
+ sl1280 INTEGER(0..1279),
+ sl2560 INTEGER(0..2559),
+ sl5120 INTEGER(0..5119),
+ sl10240 INTEGER(0..10239),
+ sl40960 INTEGER(0..40959),
+ sl81920 INTEGER(0..81919),
+ ...
+}
+
+SRS-PeriodicityAndOffsetExt-r16 ::= CHOICE {
+ sl128 INTEGER(0..127),
+ sl256 INTEGER(0..255),
+ sl512 INTEGER(0..511),
+ sl20480 INTEGER(0..20479)
+}
+
+SpatialRelationInfo-PDC-r17 ::= SEQUENCE {
+ referenceSignal CHOICE {
+ ssb-Index SSB-Index,
+ csi-RS-Index NZP-CSI-RS-ResourceId,
+ dl-PRS-PDC NR-DL-PRS-ResourceID-r17,
+ srs SEQUENCE {
+ resourceId SRS-ResourceId,
+ uplinkBWP BWP-Id
+ },
+ ...
+ },
+ ...
+}
+
+-- TAG-SRS-CONFIG-STOP
+-- TAG-SRS-RSRP-RANGE-START
+
+SRS-RSRP-Range-r16 ::= INTEGER(0..98)
+
+-- TAG-SRS-RSRP-RANGE-STOP
+-- TAG-SRS-TPC-COMMANDCONFIG-START
+
+SRS-TPC-CommandConfig ::= SEQUENCE {
+ startingBitOfFormat2-3 INTEGER (1..31) OPTIONAL, -- Need R
+ fieldTypeFormat2-3 INTEGER (0..1) OPTIONAL, -- Need R
+ ...,
+ [[
+ startingBitOfFormat2-3SUL INTEGER (1..31) OPTIONAL -- Need R
+ ]]
+}
+
+-- TAG-SRS-TPC-COMMANDCONFIG-STOP
+-- TAG-SSB-INDEX-START
+
+SSB-Index ::= INTEGER (0..maxNrofSSBs-1)
+
+-- TAG-SSB-INDEX-STOP
+-- TAG-SSB-MTC-START
+
+SSB-MTC ::= SEQUENCE {
+ periodicityAndOffset CHOICE {
+ sf5 INTEGER (0..4),
+ sf10 INTEGER (0..9),
+ sf20 INTEGER (0..19),
+ sf40 INTEGER (0..39),
+ sf80 INTEGER (0..79),
+ sf160 INTEGER (0..159)
+ },
+ duration ENUMERATED { sf1, sf2, sf3, sf4, sf5 }
+}
+
+SSB-MTC2 ::= SEQUENCE {
+ pci-List SEQUENCE (SIZE (1..maxNrofPCIsPerSMTC)) OF PhysCellId OPTIONAL, -- Need M
+ periodicity ENUMERATED {sf5, sf10, sf20, sf40, sf80, spare3, spare2, spare1}
+}
+
+SSB-MTC2-LP-r16 ::= SEQUENCE {
+ pci-List SEQUENCE (SIZE (1..maxNrofPCIsPerSMTC)) OF PhysCellId OPTIONAL, -- Need R
+ periodicity ENUMERATED {sf10, sf20, sf40, sf80, sf160, spare3, spare2, spare1}
+}
+
+SSB-MTC3-r16 ::= SEQUENCE {
+ periodicityAndOffset-r16 CHOICE {
+ sf5-r16 INTEGER (0..4),
+ sf10-r16 INTEGER (0..9),
+ sf20-r16 INTEGER (0..19),
+ sf40-r16 INTEGER (0..39),
+ sf80-r16 INTEGER (0..79),
+ sf160-r16 INTEGER (0..159),
+ sf320-r16 INTEGER (0..319),
+ sf640-r16 INTEGER (0..639),
+ sf1280-r16 INTEGER (0..1279)
+ },
+ duration-r16 ENUMERATED {sf1, sf2, sf3, sf4, sf5},
+ pci-List-r16 SEQUENCE (SIZE (1..maxNrofPCIsPerSMTC)) OF PhysCellId OPTIONAL, -- Need M
+ ssb-ToMeasure-r16 SetupRelease { SSB-ToMeasure } OPTIONAL -- Need M
+}
+
+SSB-MTC4-r17 ::= SEQUENCE {
+ pci-List-r17 SEQUENCE (SIZE (1..maxNrofPCIsPerSMTC)) OF PhysCellId OPTIONAL, -- Need M
+ offset-r17 INTEGER (0..159)
+}
+
+SSB-MTC-AdditionalPCI-r17 ::= SEQUENCE {
+ additionalPCIIndex-r17 AdditionalPCIIndex-r17,
+ additionalPCI-r17 PhysCellId,
+ periodicity-r17 ENUMERATED { ms5, ms10, ms20, ms40, ms80, ms160, spare2, spare1 },
+ ssb-PositionsInBurst-r17 CHOICE {
+ shortBitmap BIT STRING (SIZE (4)),
+ mediumBitmap BIT STRING (SIZE (8)),
+ longBitmap BIT STRING (SIZE (64))
+ },
+ ss-PBCH-BlockPower-r17 INTEGER (-60..50)
+}
+
+AdditionalPCIIndex-r17 ::= INTEGER(1..maxNrofAdditionalPCI-r17)
+
+-- TAG-SSB-MTC-STOP
+-- TAG-SSB-POSITIONQCL-RELATION-START
+
+SSB-PositionQCL-Relation-r16 ::= ENUMERATED {n1,n2,n4,n8}
+
+SSB-PositionQCL-Relation-r17 ::= ENUMERATED {n32, n64}
+
+-- TAG-SSB-POSITIONQCL-RELATION-STOP
+-- TAG-SSB-TOMEASURE-START
+
+SSB-ToMeasure ::= CHOICE {
+ shortBitmap BIT STRING (SIZE (4)),
+ mediumBitmap BIT STRING (SIZE (8)),
+ longBitmap BIT STRING (SIZE (64))
+}
+
+-- TAG-SSB-TOMEASURE-STOP
+-- TAG-SS-RSSI-MEASUREMENT-START
+
+SS-RSSI-Measurement ::= SEQUENCE {
+ measurementSlots BIT STRING (SIZE (1..80)),
+ endSymbol INTEGER(0..3)
+}
+
+-- TAG-SS-RSSI-MEASUREMENT-STOP
+-- TAG-SUBCARRIERSPACING-START
+
+SubcarrierSpacing ::= ENUMERATED {kHz15, kHz30, kHz60, kHz120, kHz240, kHz480-v1700, kHz960-v1700, spare1}
+
+-- TAG-SUBCARRIERSPACING-STOP
+-- TAG-TAG-CONFIG-START
+
+TAG-Config ::= SEQUENCE {
+ tag-ToReleaseList SEQUENCE (SIZE (1..maxNrofTAGs)) OF TAG-Id OPTIONAL, -- Need N
+ tag-ToAddModList SEQUENCE (SIZE (1..maxNrofTAGs)) OF TAG OPTIONAL -- Need N
+}
+
+TAG ::= SEQUENCE {
+ tag-Id TAG-Id,
+ timeAlignmentTimer TimeAlignmentTimer,
+ ...
+}
+
+TAG-Id ::= INTEGER (0..maxNrofTAGs-1)
+
+-- TAG-TAG-CONFIG-STOP
+-- TAG-TAR-CONFIG-START
+
+TAR-Config-r17 ::= SEQUENCE {
+ offsetThresholdTA-r17 ENUMERATED {ms0dot5, ms1, ms2, ms3, ms4, ms5, ms6 ,ms7, ms8, ms9, ms10, ms11, ms12,
+ ms13, ms14, ms15, spare13, spare12, spare11, spare10, spare9, spare8, spare7,
+ spare6, spare5, spare4, spare3, spare2, spare1} OPTIONAL, -- Need R
+ timingAdvanceSR-r17 ENUMERATED {enabled} OPTIONAL, -- Need R
+ ...
+}
+
+-- TAG-TAR-CONFIG-STOP
+-- TAG-TCI-ACTIVATEDCONFIG-START
+
+TCI-ActivatedConfig-r17 ::= SEQUENCE {
+ pdcch-TCI-r17 SEQUENCE (SIZE (1..5)) OF TCI-StateId,
+ pdsch-TCI-r17 BIT STRING (SIZE (1..maxNrofTCI-States))
+}
+
+-- TAG-TCI-ACTIVATEDCONFIG-STOP
+-- TAG-TCI-STATE-START
+
+TCI-State ::= SEQUENCE {
+ tci-StateId TCI-StateId,
+ qcl-Type1 QCL-Info,
+ qcl-Type2 QCL-Info OPTIONAL, -- Need R
+ ...,
+ [[
+ additionalPCI-r17 AdditionalPCIIndex-r17 OPTIONAL, -- Need R
+ pathlossReferenceRS-Id-r17 PathlossReferenceRS-Id-r17 OPTIONAL, -- Cond JointTCI1
+ ul-powerControl-r17 Uplink-powerControlId-r17 OPTIONAL -- Cond JointTCI
+ ]]
+
+}
+
+QCL-Info ::= SEQUENCE {
+ cell ServCellIndex OPTIONAL, -- Need R
+ bwp-Id BWP-Id OPTIONAL, -- Cond CSI-RS-Indicated
+ referenceSignal CHOICE {
+ csi-rs NZP-CSI-RS-ResourceId,
+ ssb SSB-Index
+ },
+ qcl-Type ENUMERATED {typeA, typeB, typeC, typeD},
+ ...
+}
+
+-- TAG-TCI-STATE-STOP
+-- TAG-TCI-STATEID-START
+
+TCI-StateId ::= INTEGER (0..maxNrofTCI-States-1)
+
+-- TAG-TCI-STATEID-STOP
+-- TAG-TCI-UL-STATE-START
+
+TCI-UL-State-r17 ::= SEQUENCE {
+ tci-UL-State-Id-r17 TCI-UL-State-Id-r17,
+ servingCellId-r17 ServCellIndex OPTIONAL, -- Need R
+ bwp-Id-r17 BWP-Id OPTIONAL, -- Cond CSI-RSorSRS-Indicated
+ referenceSignal-r17 CHOICE {
+ ssb-Index-r17 SSB-Index,
+ csi-RS-Index-r17 NZP-CSI-RS-ResourceId,
+ srs-r17 SRS-ResourceId
+ },
+ additionalPCI-r17 AdditionalPCIIndex-r17 OPTIONAL, -- Need R
+ ul-powerControl-r17 Uplink-powerControlId-r17 OPTIONAL, -- Need R
+ pathlossReferenceRS-Id-r17 PathlossReferenceRS-Id-r17 OPTIONAL, -- Cond Mandatory
+ ...
+}
+
+-- TAG-TCI-UL-STATE-STOP
+-- TAG-TCI-UL-STATEID-START
+
+TCI-UL-State-Id-r17 ::= INTEGER (0..maxUL-TCI-1-r17)
+
+-- TAG-TCI-UL-STATEID-STOP
+-- TAG-TDD-UL-DL-CONFIGCOMMON-START
+
+TDD-UL-DL-ConfigCommon ::= SEQUENCE {
+ referenceSubcarrierSpacing SubcarrierSpacing,
+ pattern1 TDD-UL-DL-Pattern,
+ pattern2 TDD-UL-DL-Pattern OPTIONAL, -- Need R
+ ...
+}
+
+TDD-UL-DL-Pattern ::= SEQUENCE {
+ dl-UL-TransmissionPeriodicity ENUMERATED {ms0p5, ms0p625, ms1, ms1p25, ms2, ms2p5, ms5, ms10},
+ nrofDownlinkSlots INTEGER (0..maxNrofSlots),
+ nrofDownlinkSymbols INTEGER (0..maxNrofSymbols-1),
+ nrofUplinkSlots INTEGER (0..maxNrofSlots),
+ nrofUplinkSymbols INTEGER (0..maxNrofSymbols-1),
+ ...,
+ [[
+ dl-UL-TransmissionPeriodicity-v1530 ENUMERATED {ms3, ms4} OPTIONAL -- Need R
+ ]]
+}
+
+-- TAG-TDD-UL-DL-CONFIGCOMMON-STOP
+-- TAG-TDD-UL-DL-CONFIGDEDICATED-START
+
+TDD-UL-DL-ConfigDedicated ::= SEQUENCE {
+ slotSpecificConfigurationsToAddModList SEQUENCE (SIZE (1..maxNrofSlots)) OF TDD-UL-DL-SlotConfig OPTIONAL, -- Need N
+ slotSpecificConfigurationsToReleaseList SEQUENCE (SIZE (1..maxNrofSlots)) OF TDD-UL-DL-SlotIndex OPTIONAL, -- Need N
+ ...
+}
+
+TDD-UL-DL-ConfigDedicated-IAB-MT-r16::= SEQUENCE {
+ slotSpecificConfigurationsToAddModList-IAB-MT-r16 SEQUENCE (SIZE (1..maxNrofSlots)) OF TDD-UL-DL-SlotConfig-IAB-MT-r16 OPTIONAL, -- Need N
+ slotSpecificConfigurationsToReleaseList-IAB-MT-r16 SEQUENCE (SIZE (1..maxNrofSlots)) OF TDD-UL-DL-SlotIndex OPTIONAL, -- Need N
+ ...
+}
+
+TDD-UL-DL-SlotConfig ::= SEQUENCE {
+ slotIndex TDD-UL-DL-SlotIndex,
+ symbols CHOICE {
+ allDownlink NULL,
+ allUplink NULL,
+ explicit SEQUENCE {
+ nrofDownlinkSymbols INTEGER (1..maxNrofSymbols-1) OPTIONAL, -- Need S
+ nrofUplinkSymbols INTEGER (1..maxNrofSymbols-1) OPTIONAL -- Need S
+ }
+ }
+}
+
+TDD-UL-DL-SlotConfig-IAB-MT-r16::= SEQUENCE {
+ slotIndex-r16 TDD-UL-DL-SlotIndex,
+ symbols-IAB-MT-r16 CHOICE {
+ allDownlink-r16 NULL,
+ allUplink-r16 NULL,
+ explicit-r16 SEQUENCE {
+ nrofDownlinkSymbols-r16 INTEGER (1..maxNrofSymbols-1) OPTIONAL, -- Need S
+ nrofUplinkSymbols-r16 INTEGER (1..maxNrofSymbols-1) OPTIONAL -- Need S
+ },
+ explicit-IAB-MT-r16 SEQUENCE {
+ nrofDownlinkSymbols-r16 INTEGER (1..maxNrofSymbols-1) OPTIONAL, -- Need S
+ nrofUplinkSymbols-r16 INTEGER (1..maxNrofSymbols-1) OPTIONAL -- Need S
+ }
+ }
+}
+
+TDD-UL-DL-SlotIndex ::= INTEGER (0..maxNrofSlots-1)
+
+-- TAG-TDD-UL-DL-CONFIGDEDICATED-STOP
+-- TAG-TRACKINGAREACODE-START
+
+TrackingAreaCode ::= BIT STRING (SIZE (24))
+
+-- TAG-TRACKINGAREACODE-STOP
+-- TAG-TRESELECTION-START
+
+T-Reselection ::= INTEGER (0..7)
+
+-- TAG-TRESELECTION-STOP
+-- TAG-TIMEALIGNMENTTIMER-START
+
+TimeAlignmentTimer ::= ENUMERATED {ms500, ms750, ms1280, ms1920, ms2560, ms5120, ms10240, infinity}
+
+-- TAG-TIMEALIGNMENTTIMER-STOP
+-- TAG-TIMETOTRIGGER-START
+
+TimeToTrigger ::= ENUMERATED {
+ ms0, ms40, ms64, ms80, ms100, ms128, ms160, ms256,
+ ms320, ms480, ms512, ms640, ms1024, ms1280, ms2560,
+ ms5120}
+
+-- TAG-TIMETOTRIGGER-STOP
+-- TAG-UAC-BARRINGINFOSETINDEX-START
+
+UAC-BarringInfoSetIndex ::= INTEGER (1..maxBarringInfoSet)
+
+-- TAG-UAC-BARRINGINFOSETINDEX-STOP
+-- TAG-UAC-BARRINGINFOSETLIST-START
+
+UAC-BarringInfoSetList ::= SEQUENCE (SIZE(1..maxBarringInfoSet)) OF UAC-BarringInfoSet
+
+UAC-BarringInfoSetList-v1700 ::= SEQUENCE (SIZE(1..maxBarringInfoSet)) OF UAC-BarringInfoSet-v1700
+
+UAC-BarringInfoSet ::= SEQUENCE {
+ uac-BarringFactor ENUMERATED {p00, p05, p10, p15, p20, p25, p30, p40,
+ p50, p60, p70, p75, p80, p85, p90, p95},
+ uac-BarringTime ENUMERATED {s4, s8, s16, s32, s64, s128, s256, s512},
+ uac-BarringForAccessIdentity BIT STRING (SIZE(7))
+}
+
+UAC-BarringInfoSet-v1700 ::= SEQUENCE {
+ uac-BarringFactorForAI3-r17 ENUMERATED {p00, p05, p10, p15, p20, p25, p30, p40, p50, p60, p70, p75, p80, p85, p90, p95}
+ OPTIONAL -- Need S
+}
+
+-- TAG-UAC-BARRINGINFOSETLIST-STOP
+-- TAG-UAC-BARRINGPERCATLIST-START
+
+UAC-BarringPerCatList ::= SEQUENCE (SIZE (1..maxAccessCat-1)) OF UAC-BarringPerCat
+
+UAC-BarringPerCat ::= SEQUENCE {
+ accessCategory INTEGER (1..maxAccessCat-1),
+ uac-barringInfoSetIndex UAC-BarringInfoSetIndex
+}
+
+-- TAG-UAC-BARRINGPERCATLIST-STOP
+-- TAG-UAC-BARRINGPERPLMN-LIST-START
+
+UAC-BarringPerPLMN-List ::= SEQUENCE (SIZE (1.. maxPLMN)) OF UAC-BarringPerPLMN
+
+UAC-BarringPerPLMN ::= SEQUENCE {
+ plmn-IdentityIndex INTEGER (1..maxPLMN),
+ uac-ACBarringListType CHOICE{
+ uac-ImplicitACBarringList SEQUENCE (SIZE(maxAccessCat-1)) OF UAC-BarringInfoSetIndex,
+ uac-ExplicitACBarringList UAC-BarringPerCatList
+ } OPTIONAL -- Need S
+}
+
+-- TAG-UAC-BARRINGPERPLMN-LIST-STOP
+-- TAG-UE-TIMERSANDCONSTANTS-START
+
+UE-TimersAndConstants ::= SEQUENCE {
+ t300 ENUMERATED {ms100, ms200, ms300, ms400, ms600, ms1000, ms1500, ms2000},
+ t301 ENUMERATED {ms100, ms200, ms300, ms400, ms600, ms1000, ms1500, ms2000},
+ t310 ENUMERATED {ms0, ms50, ms100, ms200, ms500, ms1000, ms2000},
+ n310 ENUMERATED {n1, n2, n3, n4, n6, n8, n10, n20},
+ t311 ENUMERATED {ms1000, ms3000, ms5000, ms10000, ms15000, ms20000, ms30000},
+ n311 ENUMERATED {n1, n2, n3, n4, n5, n6, n8, n10},
+ t319 ENUMERATED {ms100, ms200, ms300, ms400, ms600, ms1000, ms1500, ms2000},
+ ...
+}
+
+-- TAG-UE-TIMERSANDCONSTANTS-STOP
+-- TAG-UE-TIMERSANDCONSTANTSREMOTEUE-START
+
+UE-TimersAndConstantsRemoteUE-r17 ::= SEQUENCE {
+ t300-RemoteUE-r17 ENUMERATED {ms100, ms200, ms300, ms400, ms600, ms1000, ms1500, ms2000} OPTIONAL, -- Need S
+ t301-RemoteUE-r17 ENUMERATED {ms100, ms200, ms300, ms400, ms600, ms1000, ms1500, ms2000} OPTIONAL, -- Need S
+ t319-RemoteUE-r17 ENUMERATED {ms100, ms200, ms300, ms400, ms600, ms1000, ms1500, ms2000} OPTIONAL, -- Need S
+ ...
+}
+
+-- TAG-UE-TIMERSANDCONSTANTSREMOTEUE-STOP
+-- TAG-ULDELAYVALUECONFIG-START
+
+UL-DelayValueConfig-r16 ::= SEQUENCE {
+ delay-DRBlist-r16 SEQUENCE (SIZE(1..maxDRB)) OF DRB-Identity
+}
+
+-- TAG-ULDELAYVALUECONFIG-STOP
+-- TAG-ULEXCESSDELAYCONFIG-START
+
+UL-ExcessDelayConfig-r17 ::= SEQUENCE {
+ excessDelay-DRBlist-r17 SEQUENCE (SIZE(1..maxDRB)) OF ExcessDelay-DRB-IdentityInfo-r17
+}
+
+ExcessDelay-DRB-IdentityInfo-r17 ::= SEQUENCE {
+ drb-IdentityList SEQUENCE (SIZE (1..maxDRB)) OF DRB-Identity,
+ delayThreshold ENUMERATED {ms0dot25, ms0dot5, ms1, ms2, ms4, ms5, ms10, ms20, ms30, ms40, ms50, ms60, ms70,
+ ms80, ms90, ms100, ms150, ms300, ms500}
+}
+
+-- TAG-ULEXCESSDELAYCONFIG-STOP
+-- TAG-UL-GAPFR2-CONFIG-START
+
+UL-GapFR2-Config-r17 ::= SEQUENCE {
+ gapOffset-r17 INTEGER (0..159),
+ ugl-r17 ENUMERATED {ms0dot125, ms0dot25, ms0dot5, ms1},
+ ugrp-r17 ENUMERATED {ms5, ms20, ms40, ms160},
+ refFR2-ServCellAsyncCA-r17 ServCellIndex OPTIONAL -- Cond AsyncCA
+}
+
+-- TAG-UL-GAPFR2-CONFIG-STOP
+-- TAG-UPLINKCANCELLATION-START
+
+UplinkCancellation-r16 ::= SEQUENCE {
+ ci-RNTI-r16 RNTI-Value,
+ dci-PayloadSizeForCI-r16 INTEGER (0..maxCI-DCI-PayloadSize-r16),
+ ci-ConfigurationPerServingCell-r16 SEQUENCE (SIZE (1..maxNrofServingCells)) OF CI-ConfigurationPerServingCell-r16,
+ ...
+}
+
+CI-ConfigurationPerServingCell-r16 ::= SEQUENCE {
+ servingCellId ServCellIndex,
+ positionInDCI-r16 INTEGER (0..maxCI-DCI-PayloadSize-1-r16),
+ positionInDCI-ForSUL-r16 INTEGER (0..maxCI-DCI-PayloadSize-1-r16) OPTIONAL, -- Cond SUL-Only
+ ci-PayloadSize-r16 ENUMERATED {n1, n2, n4, n5, n7, n8, n10, n14, n16, n20, n28, n32, n35, n42, n56, n112},
+ timeFrequencyRegion-r16 SEQUENCE {
+ timeDurationForCI-r16 ENUMERATED {n2, n4, n7, n14} OPTIONAL, -- Cond SymbolPeriodicity
+ timeGranularityForCI-r16 ENUMERATED {n1, n2, n4, n7, n14, n28},
+ frequencyRegionForCI-r16 INTEGER (0..37949),
+ deltaOffset-r16 INTEGER (0..2),
+ ...
+ },
+ uplinkCancellationPriority-v1610 ENUMERATED {enabled} OPTIONAL -- Need S
+}
+
+-- TAG-UPLINKCANCELLATION-STOP
+-- TAG-UPLINKCONFIGCOMMON-START
+
+UplinkConfigCommon ::= SEQUENCE {
+ frequencyInfoUL FrequencyInfoUL OPTIONAL, -- Cond InterFreqHOAndServCellAdd
+ initialUplinkBWP BWP-UplinkCommon OPTIONAL, -- Cond ServCellAdd
+ dummy TimeAlignmentTimer
+}
+
+UplinkConfigCommon-v1700 ::= SEQUENCE {
+ initialUplinkBWP-RedCap-r17 BWP-UplinkCommon OPTIONAL -- Need R
+}
+
+-- TAG-UPLINKCONFIGCOMMON-STOP
+-- TAG-UPLINKCONFIGCOMMONSIB-START
+
+UplinkConfigCommonSIB ::= SEQUENCE {
+ frequencyInfoUL FrequencyInfoUL-SIB,
+ initialUplinkBWP BWP-UplinkCommon,
+ timeAlignmentTimerCommon TimeAlignmentTimer
+}
+
+UplinkConfigCommonSIB-v1700 ::= SEQUENCE {
+ initialUplinkBWP-RedCap-r17 BWP-UplinkCommon OPTIONAL -- Need R
+}
+
+-- TAG-UPLINKCONFIGCOMMONSIB-STOP
+-- TAG-UPLINK-POWERCONTROL-START
+
+Uplink-powerControl-r17 ::= SEQUENCE {
+ ul-powercontrolId-r17 Uplink-powerControlId-r17,
+ p0AlphaSetforPUSCH-r17 P0AlphaSet-r17 OPTIONAL, -- Need R
+ p0AlphaSetforPUCCH-r17 P0AlphaSet-r17 OPTIONAL, -- Need R
+ p0AlphaSetforSRS-r17 P0AlphaSet-r17 OPTIONAL -- Need R
+}
+
+P0AlphaSet-r17 ::= SEQUENCE {
+ p0-r17 INTEGER (-16..15) OPTIONAL, -- Need R
+ alpha-r17 Alpha OPTIONAL, -- Need S
+ closedLoopIndex-r17 ENUMERATED { i0, i1 }
+}
+
+Uplink-powerControlId-r17 ::= INTEGER(1.. maxUL-TCI-r17)
+
+-- TAG-UPLINK-POWERCONTROL-STOP
+-- TAG-UURELAYRLCCHANNELCONFIG-START
+
+Uu-RelayRLC-ChannelConfig-r17::= SEQUENCE {
+ uu-LogicalChannelIdentity-r17 LogicalChannelIdentity OPTIONAL, -- Cond RelayLCH-SetupOnly
+ uu-RelayRLC-ChannelID-r17 Uu-RelayRLC-ChannelID-r17,
+ reestablishRLC-r17 ENUMERATED {true} OPTIONAL, -- Need N
+ rlc-Config-r17 RLC-Config OPTIONAL, -- Cond RelayLCH-Setup
+ mac-LogicalChannelConfig-r17 LogicalChannelConfig OPTIONAL, -- Cond RelayLCH-Setup
+ ...
+}
+
+-- TAG-UURELAYRLCCHANNELCONFIG-STOP
+-- TAG-UURELAYRLCCHANNELID-START
+
+Uu-RelayRLC-ChannelID-r17 ::= INTEGER (1..maxLC-ID)
+
+-- TAG-UURELAYRLCCHANNELID-STOP
+-- TAG-UPLINKTXDIRECTCURRENTLIST-START
+
+UplinkTxDirectCurrentList ::= SEQUENCE (SIZE (1..maxNrofServingCells)) OF UplinkTxDirectCurrentCell
+
+UplinkTxDirectCurrentCell ::= SEQUENCE {
+ servCellIndex ServCellIndex,
+ uplinkDirectCurrentBWP SEQUENCE (SIZE (1..maxNrofBWPs)) OF UplinkTxDirectCurrentBWP,
+ ...,
+ [[
+ uplinkDirectCurrentBWP-SUL SEQUENCE (SIZE (1..maxNrofBWPs)) OF UplinkTxDirectCurrentBWP OPTIONAL
+ ]]
+}
+
+UplinkTxDirectCurrentBWP ::= SEQUENCE {
+ bwp-Id BWP-Id,
+ shift7dot5kHz BOOLEAN,
+ txDirectCurrentLocation INTEGER (0..3301)
+}
+
+-- TAG-UPLINKTXDIRECTCURRENTLIST-STOP
+-- TAG-UPLINKTXDIRECTCURRENTMORECARRIERLIST-START
+
+UplinkTxDirectCurrentMoreCarrierList-r17 ::= SEQUENCE (SIZE (1..maxNrofCC-Group-r17)) OF CC-Group-r17
+
+CC-Group-r17 ::= SEQUENCE {
+ servCellIndexLower-r17 ServCellIndex,
+ servCellIndexHigher-r17 ServCellIndex OPTIONAL,
+ defaultDC-Location-r17 DefaultDC-Location-r17,
+ offsetToDefault-r17 CHOICE{
+ offsetValue OffsetValue-r17,
+ offsetlist SEQUENCE (SIZE(1..maxNrofReqComDC-Location-r17)) OF OffsetValue-r17
+ } OPTIONAL
+}
+
+
+OffsetValue-r17::= SEQUENCE {
+ offsetValue-r17 INTEGER (-20000.. 20000),
+ shift7dot5kHz-r17 BOOLEAN
+}
+
+DefaultDC-Location-r17 ::= CHOICE {
+ ul FrequencyComponent-r17,
+ dl FrequencyComponent-r17,
+ ulAndDL FrequencyComponent-r17
+}
+
+FrequencyComponent-r17 ::= ENUMERATED {activeCarrier,configuredCarrier,activeBWP,configuredBWP}
+
+-- TAG-UPLINKTXDIRECTCURRENTMORECARRIERLIST-STOP
+-- TAG-UPLINKTXDIRECTCURRENTTWOCARRIERLIST-START
+
+UplinkTxDirectCurrentTwoCarrierList-r16 ::= SEQUENCE (SIZE (1..maxNrofTxDC-TwoCarrier-r16)) OF UplinkTxDirectCurrentTwoCarrier-r16
+
+UplinkTxDirectCurrentTwoCarrier-r16 ::= SEQUENCE {
+ carrierOneInfo-r16 UplinkTxDirectCurrentCarrierInfo-r16,
+ carrierTwoInfo-r16 UplinkTxDirectCurrentCarrierInfo-r16,
+ singlePA-TxDirectCurrent-r16 UplinkTxDirectCurrentTwoCarrierInfo-r16,
+ secondPA-TxDirectCurrent-r16 UplinkTxDirectCurrentTwoCarrierInfo-r16 OPTIONAL
+}
+
+UplinkTxDirectCurrentCarrierInfo-r16 ::= SEQUENCE {
+ servCellIndex-r16 ServCellIndex,
+ servCellInfo-r16 CHOICE {
+ bwp-Id-r16 BWP-Id,
+ deactivatedCarrier-r16 ENUMERATED {deactivated}
+ }
+}
+
+UplinkTxDirectCurrentTwoCarrierInfo-r16 ::= SEQUENCE {
+ referenceCarrierIndex-r16 ServCellIndex,
+ shift7dot5kHz-r16 BOOLEAN,
+ txDirectCurrentLocation-r16 INTEGER (0..3301)
+}
+
+-- TAG-UPLINKTXDIRECTCURRENTTWOCARRIERLIST-STOP
+-- TAG-ZP-CSI-RS-RESOURCE-START
+
+ZP-CSI-RS-Resource ::= SEQUENCE {
+ zp-CSI-RS-ResourceId ZP-CSI-RS-ResourceId,
+ resourceMapping CSI-RS-ResourceMapping,
+ periodicityAndOffset CSI-ResourcePeriodicityAndOffset OPTIONAL, --Cond PeriodicOrSemiPersistent
+ ...
+}
+
+ZP-CSI-RS-ResourceId ::= INTEGER (0..maxNrofZP-CSI-RS-Resources-1)
+
+-- TAG-ZP-CSI-RS-RESOURCE-STOP
+-- TAG-ZP-CSI-RS-RESOURCESET-START
+
+ZP-CSI-RS-ResourceSet ::= SEQUENCE {
+ zp-CSI-RS-ResourceSetId ZP-CSI-RS-ResourceSetId,
+ zp-CSI-RS-ResourceIdList SEQUENCE (SIZE(1..maxNrofZP-CSI-RS-ResourcesPerSet)) OF ZP-CSI-RS-ResourceId,
+ ...
+}
+
+-- TAG-ZP-CSI-RS-RESOURCESET-STOP
+-- TAG-ZP-CSI-RS-RESOURCESETID-START
+
+ZP-CSI-RS-ResourceSetId ::= INTEGER (0..maxNrofZP-CSI-RS-ResourceSets-1)
+
+-- TAG-ZP-CSI-RS-RESOURCESETID-STOP
+-- TAG-ACCESSSTRATUMRELEASE-START
+
+AccessStratumRelease ::= ENUMERATED {
+ rel15, rel16, rel17, spare5, spare4, spare3, spare2, spare1, ... }
+
+-- TAG-ACCESSSTRATUMRELEASE-STOP
+-- TAG-APPLAYERMEASPARAMETERS-START
+
+AppLayerMeasParameters-r17 ::= SEQUENCE {
+ qoe-Streaming-MeasReport-r17 ENUMERATED {supported} OPTIONAL,
+ qoe-MTSI-MeasReport-r17 ENUMERATED {supported} OPTIONAL,
+ qoe-VR-MeasReport-r17 ENUMERATED {supported} OPTIONAL,
+ ran-VisibleQoE-Streaming-MeasReport-r17 ENUMERATED {supported} OPTIONAL,
+ ran-VisibleQoE-VR-MeasReport-r17 ENUMERATED {supported} OPTIONAL,
+ ul-MeasurementReportAppLayer-Seg-r17 ENUMERATED {supported} OPTIONAL,
+ ...
+}
+
+-- TAG-APPLAYERMEASPARAMETERS-STOP
+-- TAG-BANDCOMBINATIONLIST-START
+
+BandCombinationList ::= SEQUENCE (SIZE (1..maxBandComb)) OF BandCombination
+
+BandCombinationList-v1540 ::= SEQUENCE (SIZE (1..maxBandComb)) OF BandCombination-v1540
+
+BandCombinationList-v1550 ::= SEQUENCE (SIZE (1..maxBandComb)) OF BandCombination-v1550
+
+BandCombinationList-v1560 ::= SEQUENCE (SIZE (1..maxBandComb)) OF BandCombination-v1560
+
+BandCombinationList-v1570 ::= SEQUENCE (SIZE (1..maxBandComb)) OF BandCombination-v1570
+
+BandCombinationList-v1580 ::= SEQUENCE (SIZE (1..maxBandComb)) OF BandCombination-v1580
+
+BandCombinationList-v1590 ::= SEQUENCE (SIZE (1..maxBandComb)) OF BandCombination-v1590
+
+BandCombinationList-v15g0 ::= SEQUENCE (SIZE (1..maxBandComb)) OF BandCombination-v15g0
+
+BandCombinationList-v1610 ::= SEQUENCE (SIZE (1..maxBandComb)) OF BandCombination-v1610
+
+BandCombinationList-v1630 ::= SEQUENCE (SIZE (1..maxBandComb)) OF BandCombination-v1630
+
+BandCombinationList-v1640 ::= SEQUENCE (SIZE (1..maxBandComb)) OF BandCombination-v1640
+
+BandCombinationList-v1650 ::= SEQUENCE (SIZE (1..maxBandComb)) OF BandCombination-v1650
+
+BandCombinationList-v1680 ::= SEQUENCE (SIZE (1..maxBandComb)) OF BandCombination-v1680
+
+BandCombinationList-v1690 ::= SEQUENCE (SIZE (1..maxBandComb)) OF BandCombination-v1690
+
+BandCombinationList-v16a0 ::= SEQUENCE (SIZE (1..maxBandComb)) OF BandCombination-v16a0
+
+BandCombinationList-v1700 ::= SEQUENCE (SIZE (1..maxBandComb)) OF BandCombination-v1700
+
+BandCombinationList-v1720 ::= SEQUENCE (SIZE (1..maxBandComb)) OF BandCombination-v1720
+
+BandCombinationList-v1730 ::= SEQUENCE (SIZE (1..maxBandComb)) OF BandCombination-v1730
+
+BandCombinationList-UplinkTxSwitch-r16 ::= SEQUENCE (SIZE (1..maxBandComb)) OF BandCombination-UplinkTxSwitch-r16
+
+BandCombinationList-UplinkTxSwitch-v1630 ::= SEQUENCE (SIZE (1..maxBandComb)) OF BandCombination-UplinkTxSwitch-v1630
+
+BandCombinationList-UplinkTxSwitch-v1640 ::= SEQUENCE (SIZE (1..maxBandComb)) OF BandCombination-UplinkTxSwitch-v1640
+
+BandCombinationList-UplinkTxSwitch-v1650 ::= SEQUENCE (SIZE (1..maxBandComb)) OF BandCombination-UplinkTxSwitch-v1650
+
+BandCombinationList-UplinkTxSwitch-v1670 ::= SEQUENCE (SIZE (1..maxBandComb)) OF BandCombination-UplinkTxSwitch-v1670
+
+BandCombinationList-UplinkTxSwitch-v1690 ::= SEQUENCE (SIZE (1..maxBandComb)) OF BandCombination-UplinkTxSwitch-v1690
+
+BandCombinationList-UplinkTxSwitch-v16a0 ::= SEQUENCE (SIZE (1..maxBandComb)) OF BandCombination-UplinkTxSwitch-v16a0
+
+BandCombinationList-UplinkTxSwitch-v1700 ::= SEQUENCE (SIZE (1..maxBandComb)) OF BandCombination-UplinkTxSwitch-v1700
+
+BandCombinationList-UplinkTxSwitch-v1720 ::= SEQUENCE (SIZE (1..maxBandComb)) OF BandCombination-UplinkTxSwitch-v1720
+
+BandCombinationList-UplinkTxSwitch-v1730 ::= SEQUENCE (SIZE (1..maxBandComb)) OF BandCombination-UplinkTxSwitch-v1730
+
+BandCombination ::= SEQUENCE {
+ bandList SEQUENCE (SIZE (1..maxSimultaneousBands)) OF BandParameters,
+ featureSetCombination FeatureSetCombinationId,
+ ca-ParametersEUTRA CA-ParametersEUTRA OPTIONAL,
+ ca-ParametersNR CA-ParametersNR OPTIONAL,
+ mrdc-Parameters MRDC-Parameters OPTIONAL,
+ supportedBandwidthCombinationSet BIT STRING (SIZE (1..32)) OPTIONAL,
+ powerClass-v1530 ENUMERATED {pc2} OPTIONAL
+}
+
+BandCombination-v1540::= SEQUENCE {
+ bandList-v1540 SEQUENCE (SIZE (1..maxSimultaneousBands)) OF BandParameters-v1540,
+ ca-ParametersNR-v1540 CA-ParametersNR-v1540 OPTIONAL
+}
+
+BandCombination-v1550 ::= SEQUENCE {
+ ca-ParametersNR-v1550 CA-ParametersNR-v1550
+}
+BandCombination-v1560::= SEQUENCE {
+ ne-DC-BC ENUMERATED {supported} OPTIONAL,
+ ca-ParametersNRDC CA-ParametersNRDC OPTIONAL,
+ ca-ParametersEUTRA-v1560 CA-ParametersEUTRA-v1560 OPTIONAL,
+ ca-ParametersNR-v1560 CA-ParametersNR-v1560 OPTIONAL
+}
+
+BandCombination-v1570 ::= SEQUENCE {
+ ca-ParametersEUTRA-v1570 CA-ParametersEUTRA-v1570
+}
+
+BandCombination-v1580 ::= SEQUENCE {
+ mrdc-Parameters-v1580 MRDC-Parameters-v1580
+}
+
+BandCombination-v1590::= SEQUENCE {
+ supportedBandwidthCombinationSetIntraENDC BIT STRING (SIZE (1..32)) OPTIONAL,
+ mrdc-Parameters-v1590 MRDC-Parameters-v1590
+}
+
+BandCombination-v15g0::= SEQUENCE {
+ ca-ParametersNR-v15g0 CA-ParametersNR-v15g0 OPTIONAL,
+ ca-ParametersNRDC-v15g0 CA-ParametersNRDC-v15g0 OPTIONAL,
+ mrdc-Parameters-v15g0 MRDC-Parameters-v15g0 OPTIONAL
+}
+
+BandCombination-v1610 ::= SEQUENCE {
+ bandList-v1610 SEQUENCE (SIZE (1..maxSimultaneousBands)) OF BandParameters-v1610 OPTIONAL,
+ ca-ParametersNR-v1610 CA-ParametersNR-v1610 OPTIONAL,
+ ca-ParametersNRDC-v1610 CA-ParametersNRDC-v1610 OPTIONAL,
+ powerClass-v1610 ENUMERATED {pc1dot5} OPTIONAL,
+ powerClassNRPart-r16 ENUMERATED {pc1, pc2, pc3, pc5} OPTIONAL,
+ featureSetCombinationDAPS-r16 FeatureSetCombinationId OPTIONAL,
+ mrdc-Parameters-v1620 MRDC-Parameters-v1620 OPTIONAL
+}
+
+BandCombination-v1630 ::= SEQUENCE {
+ ca-ParametersNR-v1630 CA-ParametersNR-v1630 OPTIONAL,
+ ca-ParametersNRDC-v1630 CA-ParametersNRDC-v1630 OPTIONAL,
+ mrdc-Parameters-v1630 MRDC-Parameters-v1630 OPTIONAL,
+ supportedTxBandCombListPerBC-Sidelink-r16 BIT STRING (SIZE (1..maxBandComb)) OPTIONAL,
+ supportedRxBandCombListPerBC-Sidelink-r16 BIT STRING (SIZE (1..maxBandComb)) OPTIONAL,
+ scalingFactorTxSidelink-r16 SEQUENCE (SIZE (1..maxBandComb)) OF ScalingFactorSidelink-r16 OPTIONAL,
+ scalingFactorRxSidelink-r16 SEQUENCE (SIZE (1..maxBandComb)) OF ScalingFactorSidelink-r16 OPTIONAL
+}
+
+BandCombination-v1640 ::= SEQUENCE {
+ ca-ParametersNR-v1640 CA-ParametersNR-v1640 OPTIONAL,
+ ca-ParametersNRDC-v1640 CA-ParametersNRDC-v1640 OPTIONAL
+}
+
+BandCombination-v1650 ::= SEQUENCE {
+ ca-ParametersNRDC-v1650 CA-ParametersNRDC-v1650 OPTIONAL
+}
+
+BandCombination-v1680 ::= SEQUENCE {
+ intrabandConcurrentOperationPowerClass-r16 SEQUENCE (SIZE (1..maxBandComb)) OF IntraBandPowerClass-r16 OPTIONAL
+}
+
+BandCombination-v1690 ::= SEQUENCE {
+ ca-ParametersNR-v1690 CA-ParametersNR-v1690 OPTIONAL
+}
+
+BandCombination-v16a0 ::= SEQUENCE {
+ ca-ParametersNR-v16a0 CA-ParametersNR-v16a0 OPTIONAL,
+ ca-ParametersNRDC-v16a0 CA-ParametersNRDC-v16a0 OPTIONAL
+}
+BandCombination-v1700 ::= SEQUENCE {
+ ca-ParametersNR-v1700 CA-ParametersNR-v1700 OPTIONAL,
+ ca-ParametersNRDC-v1700 CA-ParametersNRDC-v1700 OPTIONAL,
+ mrdc-Parameters-v1700 MRDC-Parameters-v1700 OPTIONAL,
+ bandList-v1710 SEQUENCE (SIZE (1..maxSimultaneousBands)) OF BandParameters-v1710 OPTIONAL,
+ supportedBandCombListPerBC-SL-RelayDiscovery-r17 BIT STRING (SIZE (1..maxBandComb)) OPTIONAL,
+ supportedBandCombListPerBC-SL-NonRelayDiscovery-r17 BIT STRING (SIZE (1..maxBandComb)) OPTIONAL
+}
+
+BandCombination-v1720 ::= SEQUENCE {
+ ca-ParametersNR-v1720 CA-ParametersNR-v1720 OPTIONAL,
+ ca-ParametersNRDC-v1720 CA-ParametersNRDC-v1720 OPTIONAL
+}
+
+BandCombination-v1730 ::= SEQUENCE {
+ ca-ParametersNR-v1730 CA-ParametersNR-v1730 OPTIONAL,
+ ca-ParametersNRDC-v1730 CA-ParametersNRDC-v1730 OPTIONAL,
+ bandList-v1730 SEQUENCE (SIZE (1..maxSimultaneousBands)) OF BandParameters-v1730 OPTIONAL
+}
+
+BandCombination-UplinkTxSwitch-r16 ::= SEQUENCE {
+ bandCombination-r16 BandCombination,
+ bandCombination-v1540 BandCombination-v1540 OPTIONAL,
+ bandCombination-v1560 BandCombination-v1560 OPTIONAL,
+ bandCombination-v1570 BandCombination-v1570 OPTIONAL,
+ bandCombination-v1580 BandCombination-v1580 OPTIONAL,
+ bandCombination-v1590 BandCombination-v1590 OPTIONAL,
+ bandCombination-v1610 BandCombination-v1610 OPTIONAL,
+ supportedBandPairListNR-r16 SEQUENCE (SIZE (1..maxULTxSwitchingBandPairs)) OF ULTxSwitchingBandPair-r16,
+ uplinkTxSwitching-OptionSupport-r16 ENUMERATED {switchedUL, dualUL, both} OPTIONAL,
+ uplinkTxSwitching-PowerBoosting-r16 ENUMERATED {supported} OPTIONAL,
+ ...,
+ [[
+ -- R4 16-5 UL-MIMO coherence capability for dynamic Tx switching between 3CC 1Tx-2Tx switching
+ uplinkTxSwitching-PUSCH-TransCoherence-r16 ENUMERATED {nonCoherent, fullCoherent} OPTIONAL
+ ]]
+}
+
+BandCombination-UplinkTxSwitch-v1630 ::= SEQUENCE {
+ bandCombination-v1630 BandCombination-v1630 OPTIONAL
+}
+
+BandCombination-UplinkTxSwitch-v1640 ::= SEQUENCE {
+ bandCombination-v1640 BandCombination-v1640 OPTIONAL
+}
+
+BandCombination-UplinkTxSwitch-v1650 ::= SEQUENCE {
+ bandCombination-v1650 BandCombination-v1650 OPTIONAL
+}
+
+BandCombination-UplinkTxSwitch-v1670 ::= SEQUENCE {
+ bandCombination-v15g0 BandCombination-v15g0 OPTIONAL
+}
+
+BandCombination-UplinkTxSwitch-v1690 ::= SEQUENCE {
+ bandCombination-v1690 BandCombination-v1690 OPTIONAL
+}
+
+BandCombination-UplinkTxSwitch-v16a0 ::= SEQUENCE {
+ bandCombination-v16a0 BandCombination-v16a0 OPTIONAL
+}
+
+BandCombination-UplinkTxSwitch-v1700 ::= SEQUENCE {
+ bandCombination-v1700 BandCombination-v1700 OPTIONAL,
+ -- R4 16-1/16-2/16-3 Dynamic Tx switching between 2CC/3CC 2Tx-2Tx/1Tx-2Tx switching
+ supportedBandPairListNR-v1700 SEQUENCE (SIZE (1..maxULTxSwitchingBandPairs)) OF ULTxSwitchingBandPair-v1700 OPTIONAL,
+ -- R4 16-6: UL-MIMO coherence capability for dynamic Tx switching between 2Tx-2Tx switching
+ uplinkTxSwitchingBandParametersList-v1700 SEQUENCE (SIZE (1.. maxSimultaneousBands)) OF UplinkTxSwitchingBandParameters-v1700 OPTIONAL
+}
+
+BandCombination-UplinkTxSwitch-v1720 ::= SEQUENCE {
+ bandCombination-v1720 BandCombination-v1720 OPTIONAL,
+ uplinkTxSwitching-OptionSupport2T2T-r17 ENUMERATED {switchedUL, dualUL, both} OPTIONAL
+}
+
+BandCombination-UplinkTxSwitch-v1730 ::= SEQUENCE {
+ bandCombination-v1730 BandCombination-v1730 OPTIONAL
+}
+
+ULTxSwitchingBandPair-r16 ::= SEQUENCE {
+ bandIndexUL1-r16 INTEGER(1..maxSimultaneousBands),
+ bandIndexUL2-r16 INTEGER(1..maxSimultaneousBands),
+ uplinkTxSwitchingPeriod-r16 ENUMERATED {n35us, n140us, n210us},
+ uplinkTxSwitching-DL-Interruption-r16 BIT STRING (SIZE(1..maxSimultaneousBands)) OPTIONAL
+}
+
+ULTxSwitchingBandPair-v1700 ::= SEQUENCE {
+ uplinkTxSwitchingPeriod2T2T-r17 ENUMERATED {n35us, n140us, n210us} OPTIONAL
+}
+
+UplinkTxSwitchingBandParameters-v1700 ::= SEQUENCE {
+ bandIndex-r17 INTEGER(1..maxSimultaneousBands),
+ uplinkTxSwitching2T2T-PUSCH-TransCoherence-r17 ENUMERATED {nonCoherent, fullCoherent} OPTIONAL
+}
+
+BandParameters ::= CHOICE {
+ eutra SEQUENCE {
+ bandEUTRA FreqBandIndicatorEUTRA,
+ ca-BandwidthClassDL-EUTRA CA-BandwidthClassEUTRA OPTIONAL,
+ ca-BandwidthClassUL-EUTRA CA-BandwidthClassEUTRA OPTIONAL
+ },
+ nr SEQUENCE {
+ bandNR FreqBandIndicatorNR,
+ ca-BandwidthClassDL-NR CA-BandwidthClassNR OPTIONAL,
+ ca-BandwidthClassUL-NR CA-BandwidthClassNR OPTIONAL
+ }
+}
+
+BandParameters-v1540 ::= SEQUENCE {
+ srs-CarrierSwitch CHOICE {
+ nr SEQUENCE {
+ srs-SwitchingTimesListNR SEQUENCE (SIZE (1..maxSimultaneousBands)) OF SRS-SwitchingTimeNR
+ },
+ eutra SEQUENCE {
+ srs-SwitchingTimesListEUTRA SEQUENCE (SIZE (1..maxSimultaneousBands)) OF SRS-SwitchingTimeEUTRA
+ }
+ } OPTIONAL,
+ srs-TxSwitch SEQUENCE {
+ supportedSRS-TxPortSwitch ENUMERATED {t1r2, t1r4, t2r4, t1r4-t2r4, t1r1, t2r2, t4r4, notSupported},
+ txSwitchImpactToRx INTEGER (1..32) OPTIONAL,
+ txSwitchWithAnotherBand INTEGER (1..32) OPTIONAL
+ } OPTIONAL
+}
+
+BandParameters-v1610 ::= SEQUENCE {
+ srs-TxSwitch-v1610 SEQUENCE {
+ supportedSRS-TxPortSwitch-v1610 ENUMERATED {t1r1-t1r2, t1r1-t1r2-t1r4, t1r1-t1r2-t2r2-t2r4, t1r1-t1r2-t2r2-t1r4-t2r4,
+ t1r1-t2r2, t1r1-t2r2-t4r4}
+ } OPTIONAL
+}
+
+BandParameters-v1710 ::= SEQUENCE {
+ -- R1 23-8-3 SRS Antenna switching for >4Rx
+ srs-AntennaSwitchingBeyond4RX-r17 SEQUENCE {
+ -- 1. Support of SRS antenna switching xTyR with y>4
+ supportedSRS-TxPortSwitchBeyond4Rx-r17 BIT STRING (SIZE (11)),
+ -- 2. Report the entry number of the first-listed band with UL in the band combination that affects this DL
+ entryNumberAffectBeyond4Rx-r17 INTEGER (1..32) OPTIONAL,
+ -- 3. Report the entry number of the first-listed band with UL in the band combination that switches together with this UL
+ entryNumberSwitchBeyond4Rx-r17 INTEGER (1..32) OPTIONAL
+ } OPTIONAL
+}
+
+BandParameters-v1730 ::= SEQUENCE {
+ -- R1 39-3-2 Affected bands for inter-band CA during SRS carrier switching
+ srs-SwitchingAffectedBandsListNR-r17 SEQUENCE (SIZE (1..maxSimultaneousBands)) OF SRS-SwitchingAffectedBandsNR-r17
+}
+
+ScalingFactorSidelink-r16 ::= ENUMERATED {f0p4, f0p75, f0p8, f1}
+
+IntraBandPowerClass-r16 ::= ENUMERATED {pc2, pc3, spare6, spare5, spare4, spare3, spare2, spare1}
+
+SRS-SwitchingAffectedBandsNR-r17 ::= BIT STRING (SIZE (1..maxSimultaneousBands))
+
+-- TAG-BANDCOMBINATIONLIST-STOP
+-- TAG-BANDCOMBINATIONLISTSIDELINKEUTRANR-START
+
+BandCombinationListSidelinkEUTRA-NR-r16 ::= SEQUENCE (SIZE (1..maxBandComb)) OF BandCombinationParametersSidelinkEUTRA-NR-r16
+
+BandCombinationListSidelinkEUTRA-NR-v1630 ::= SEQUENCE (SIZE (1..maxBandComb)) OF BandCombinationParametersSidelinkEUTRA-NR-v1630
+
+BandCombinationListSidelinkEUTRA-NR-v1710 ::= SEQUENCE (SIZE (1..maxBandComb)) OF BandCombinationParametersSidelinkEUTRA-NR-v1710
+
+BandCombinationParametersSidelinkEUTRA-NR-r16 ::= SEQUENCE (SIZE (1..maxSimultaneousBands)) OF BandParametersSidelinkEUTRA-NR-r16
+
+BandCombinationParametersSidelinkEUTRA-NR-v1630 ::= SEQUENCE (SIZE (1..maxSimultaneousBands)) OF BandParametersSidelinkEUTRA-NR-v1630
+
+BandCombinationParametersSidelinkEUTRA-NR-v1710 ::= SEQUENCE (SIZE (1..maxSimultaneousBands)) OF BandParametersSidelinkEUTRA-NR-v1710
+
+BandParametersSidelinkEUTRA-NR-r16 ::= CHOICE {
+ eutra SEQUENCE {
+ bandParametersSidelinkEUTRA1-r16 OCTET STRING OPTIONAL,
+ bandParametersSidelinkEUTRA2-r16 OCTET STRING OPTIONAL
+ },
+ nr SEQUENCE {
+ bandParametersSidelinkNR-r16 BandParametersSidelink-r16
+ }
+}
+
+BandParametersSidelinkEUTRA-NR-v1630 ::= CHOICE {
+ eutra NULL,
+ nr SEQUENCE {
+ tx-Sidelink-r16 ENUMERATED {supported} OPTIONAL,
+ rx-Sidelink-r16 ENUMERATED {supported} OPTIONAL,
+ sl-CrossCarrierScheduling-r16 ENUMERATED {supported} OPTIONAL
+ }
+}
+
+BandParametersSidelinkEUTRA-NR-v1710 ::= CHOICE {
+ eutra NULL,
+ nr SEQUENCE {
+ --32-4
+ sl-TransmissionMode2-PartialSensing-r17 SEQUENCE {
+ harq-TxProcessModeTwoSidelink-r17 ENUMERATED {n8, n16},
+ scs-CP-PatternTxSidelinkModeTwo-r17 CHOICE {
+ fr1-r17 SEQUENCE {
+ scs-15kHz-r17 BIT STRING (SIZE (16)) OPTIONAL,
+ scs-30kHz-r17 BIT STRING (SIZE (16)) OPTIONAL,
+ scs-60kHz-r17 BIT STRING (SIZE (16)) OPTIONAL
+ },
+ fr2-r17 SEQUENCE {
+ scs-60kHz-r17 BIT STRING (SIZE (16)) OPTIONAL,
+ scs-120kHz-r17 BIT STRING (SIZE (16)) OPTIONAL
+ }
+ } OPTIONAL,
+ extendedCP-Mode2PartialSensing-r17 ENUMERATED {supported} OPTIONAL,
+ dl-openLoopPC-Sidelink-r17 ENUMERATED {supported} OPTIONAL
+ } OPTIONAL,
+ --32-2a: Receiving NR sidelink of PSFCH
+ rx-sidelinkPSFCH-r17 ENUMERATED {n5, n15, n25, n32, n35, n45, n50, n64} OPTIONAL,
+ --32-5a-1
+ tx-IUC-Scheme1-Mode2Sidelink-r17 ENUMERATED {supported} OPTIONAL,
+ --32-5b-1
+ tx-IUC-Scheme2-Mode2Sidelink-r17 ENUMERATED {n4, n8, n16} OPTIONAL
+ }
+}
+
+BandParametersSidelink-r16 ::= SEQUENCE {
+ freqBandSidelink-r16 FreqBandIndicatorNR
+}
+
+-- TAG-BANDCOMBINATIONLISTSIDELINKEUTRANR-STOP
+-- TAG-BANDCOMBINATIONLISTSLDISCOVERY-START
+
+BandCombinationListSL-Discovery-r17 ::= SEQUENCE (SIZE (1..maxSimultaneousBands)) OF BandParametersSidelinkDiscovery-r17
+
+BandParametersSidelinkDiscovery-r17 ::= SEQUENCE {
+ sl-CrossCarrierScheduling-r17 ENUMERATED {supported} OPTIONAL,
+ --R1 32-4: Transmitting NR sidelink mode 2 with partial sensing
+ sl-TransmissionMode2-PartialSensing-r17 SEQUENCE {
+ harq-TxProcessModeTwoSidelink-r17 ENUMERATED {n8, n16},
+ scs-CP-PatternTxSidelinkModeTwo-r17 CHOICE {
+ fr1-r17 SEQUENCE {
+ scs-15kHz-r17 BIT STRING (SIZE (16)) OPTIONAL,
+ scs-30kHz-r17 BIT STRING (SIZE (16)) OPTIONAL,
+ scs-60kHz-r17 BIT STRING (SIZE (16)) OPTIONAL
+ },
+ fr2-r17 SEQUENCE {
+ scs-60kHz-r17 BIT STRING (SIZE (16)) OPTIONAL,
+ scs-120kHz-r17 BIT STRING (SIZE (16)) OPTIONAL
+ }
+ } OPTIONAL,
+ extendedCP-Mode2PartialSensing-r17 ENUMERATED {supported} OPTIONAL,
+ dl-openLoopPC-Sidelink-r17 ENUMERATED {supported} OPTIONAL
+ } OPTIONAL,
+ --R1 32-5a-1: Transmitting Inter-UE coordination scheme 1 in NR sidelink mode 2
+ tx-IUC-Scheme1-Mode2Sidelink-r17 ENUMERATED {supported} OPTIONAL
+}
+
+-- TAG-BANDCOMBINATIONLISTSLDISCOVERY-STOP
+-- TAG-CA-BANDWIDTHCLASSEUTRA-START
+
+CA-BandwidthClassEUTRA ::= ENUMERATED {a, b, c, d, e, f, ...}
+
+-- TAG-CA-BANDWIDTHCLASSEUTRA-STOP
+-- TAG-CA-BANDWIDTHCLASSNR-START
+
+-- R4 17-6: new CA BW Classes R2~R12
+CA-BandwidthClassNR ::= ENUMERATED {a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, ...,r2-v1730, r3-v1730, r4-v1730, r5-v1730, r6-v1730, r7-v1730, r8-v1730, r9-v1730, r10-v1730, r11-v1730, r12-v1730 }
+
+-- TAG-CA-BANDWIDTHCLASSNR-STOP
+-- TAG-CA-PARAMETERSEUTRA-START
+
+CA-ParametersEUTRA ::= SEQUENCE {
+ multipleTimingAdvance ENUMERATED {supported} OPTIONAL,
+ simultaneousRx-Tx ENUMERATED {supported} OPTIONAL,
+ supportedNAICS-2CRS-AP BIT STRING (SIZE (1..8)) OPTIONAL,
+ additionalRx-Tx-PerformanceReq ENUMERATED {supported} OPTIONAL,
+ ue-CA-PowerClass-N ENUMERATED {class2} OPTIONAL,
+ supportedBandwidthCombinationSetEUTRA-v1530 BIT STRING (SIZE (1..32)) OPTIONAL,
+ ...
+}
+
+CA-ParametersEUTRA-v1560 ::= SEQUENCE {
+ fd-MIMO-TotalWeightedLayers INTEGER (2..128) OPTIONAL
+}
+
+CA-ParametersEUTRA-v1570 ::= SEQUENCE {
+ dl-1024QAM-TotalWeightedLayers INTEGER (0..10) OPTIONAL
+}
+
+-- TAG-CA-PARAMETERSEUTRA-STOP
+-- TAG-CA-PARAMETERSNR-START
+
+CA-ParametersNR ::= SEQUENCE {
+ dummy ENUMERATED {supported} OPTIONAL,
+ parallelTxSRS-PUCCH-PUSCH ENUMERATED {supported} OPTIONAL,
+ parallelTxPRACH-SRS-PUCCH-PUSCH ENUMERATED {supported} OPTIONAL,
+ simultaneousRxTxInterBandCA ENUMERATED {supported} OPTIONAL,
+ simultaneousRxTxSUL ENUMERATED {supported} OPTIONAL,
+ diffNumerologyAcrossPUCCH-Group ENUMERATED {supported} OPTIONAL,
+ diffNumerologyWithinPUCCH-GroupSmallerSCS ENUMERATED {supported} OPTIONAL,
+ supportedNumberTAG ENUMERATED {n2, n3, n4} OPTIONAL,
+ ...
+}
+
+CA-ParametersNR-v1540 ::= SEQUENCE {
+ simultaneousSRS-AssocCSI-RS-AllCC INTEGER (5..32) OPTIONAL,
+ csi-RS-IM-ReceptionForFeedbackPerBandComb SEQUENCE {
+ maxNumberSimultaneousNZP-CSI-RS-ActBWP-AllCC INTEGER (1..64) OPTIONAL,
+ totalNumberPortsSimultaneousNZP-CSI-RS-ActBWP-AllCC INTEGER (2..256) OPTIONAL
+ } OPTIONAL,
+ simultaneousCSI-ReportsAllCC INTEGER (5..32) OPTIONAL,
+ dualPA-Architecture ENUMERATED {supported} OPTIONAL
+}
+
+CA-ParametersNR-v1550 ::= SEQUENCE {
+ dummy ENUMERATED {supported} OPTIONAL
+}
+
+CA-ParametersNR-v1560 ::= SEQUENCE {
+ diffNumerologyWithinPUCCH-GroupLargerSCS ENUMERATED {supported} OPTIONAL
+}
+
+CA-ParametersNR-v15g0 ::= SEQUENCE {
+ simultaneousRxTxInterBandCAPerBandPair SimultaneousRxTxPerBandPair OPTIONAL,
+ simultaneousRxTxSULPerBandPair SimultaneousRxTxPerBandPair OPTIONAL
+}
+
+CA-ParametersNR-v1610 ::= SEQUENCE {
+ -- R1 9-3: Parallel MsgA and SRS/PUCCH/PUSCH transmissions across CCs in inter-band CA
+ parallelTxMsgA-SRS-PUCCH-PUSCH-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 9-4: MsgA operation in a band combination including SUL
+ msgA-SUL-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 10-9c: Joint search space group switching across multiple cells
+ jointSearchSpaceSwitchAcrossCells-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 14-5: Half-duplex UE behaviour in TDD CA for same SCS
+ half-DuplexTDD-CA-SameSCS-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 18-4: SCell dormancy within active time
+ scellDormancyWithinActiveTime-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 18-4a: SCell dormancy outside active time
+ scellDormancyOutsideActiveTime-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 18-6: Cross-carrier A-CSI RS triggering with different SCS
+ crossCarrierA-CSI-trigDiffSCS-r16 ENUMERATED {higherA-CSI-SCS,lowerA-CSI-SCS,both} OPTIONAL,
+ -- R1 18-6a: Default QCL assumption for cross-carrier A-CSI-RS triggering
+ defaultQCL-CrossCarrierA-CSI-Trig-r16 ENUMERATED {diffOnly, both} OPTIONAL,
+ -- R1 18-7: CA with non-aligned frame boundaries for inter-band CA
+ interCA-NonAlignedFrame-r16 ENUMERATED {supported} OPTIONAL,
+ simul-SRS-Trans-BC-r16 ENUMERATED {n2} OPTIONAL,
+ interFreqDAPS-r16 SEQUENCE {
+ interFreqAsyncDAPS-r16 ENUMERATED {supported} OPTIONAL,
+ interFreqDiffSCS-DAPS-r16 ENUMERATED {supported} OPTIONAL,
+ interFreqMultiUL-TransmissionDAPS-r16 ENUMERATED {supported} OPTIONAL,
+ interFreqSemiStaticPowerSharingDAPS-Mode1-r16 ENUMERATED {supported} OPTIONAL,
+ interFreqSemiStaticPowerSharingDAPS-Mode2-r16 ENUMERATED {supported} OPTIONAL,
+ interFreqDynamicPowerSharingDAPS-r16 ENUMERATED {short, long} OPTIONAL,
+ interFreqUL-TransCancellationDAPS-r16 ENUMERATED {supported} OPTIONAL
+ } OPTIONAL,
+ codebookParametersPerBC-r16 CodebookParameters-v1610 OPTIONAL,
+ -- R1 16-2a-10 Value of R for BD/CCE
+ blindDetectFactor-r16 INTEGER (1..2) OPTIONAL,
+ -- R1 11-2a: Capability on the number of CCs for monitoring a maximum number of BDs and non-overlapped CCEs per span when configured
+ -- with DL CA with Rel-16 PDCCH monitoring capability on all the serving cells
+ pdcch-MonitoringCA-r16 SEQUENCE {
+ maxNumberOfMonitoringCC-r16 INTEGER (2..16),
+ supportedSpanArrangement-r16 ENUMERATED {alignedOnly, alignedAndNonAligned}
+ } OPTIONAL,
+ -- R1 11-2c: Number of carriers for CCE/BD scaling with DL CA with mix of Rel. 16 and Rel. 15 PDCCH monitoring capabilities on
+ -- different carriers
+ pdcch-BlindDetectionCA-Mixed-r16 SEQUENCE {
+ pdcch-BlindDetectionCA1-r16 INTEGER (1..15),
+ pdcch-BlindDetectionCA2-r16 INTEGER (1..15),
+ supportedSpanArrangement-r16 ENUMERATED {alignedOnly, alignedAndNonAligned}
+ } OPTIONAL,
+ -- R1 11-2d: Capability on the number of CCs for monitoring a maximum number of BDs and non-overlapped CCEs per span for MCG and for
+ -- SCG when configured for NR-DC operation with Rel-16 PDCCH monitoring capability on all the serving cells
+ pdcch-BlindDetectionMCG-UE-r16 INTEGER (1..14) OPTIONAL,
+ pdcch-BlindDetectionSCG-UE-r16 INTEGER (1..14) OPTIONAL,
+ -- R1 11-2e: Number of carriers for CCE/BD scaling for MCG and for SCG when configured for NR-DC operation with mix of Rel. 16 and
+ -- Rel. 15 PDCCH monitoring capabilities on different carriers
+ pdcch-BlindDetectionMCG-UE-Mixed-r16 SEQUENCE {
+ pdcch-BlindDetectionMCG-UE1-r16 INTEGER (0..15),
+ pdcch-BlindDetectionMCG-UE2-r16 INTEGER (0..15)
+ } OPTIONAL,
+ pdcch-BlindDetectionSCG-UE-Mixed-r16 SEQUENCE {
+ pdcch-BlindDetectionSCG-UE1-r16 INTEGER (0..15),
+ pdcch-BlindDetectionSCG-UE2-r16 INTEGER (0..15)
+ } OPTIONAL,
+ -- R1 18-5 cross-carrier scheduling with different SCS in DL CA
+ crossCarrierSchedulingDL-DiffSCS-r16 ENUMERATED {low-to-high, high-to-low, both} OPTIONAL,
+ -- R1 18-5a Default QCL assumption for cross-carrier scheduling
+ crossCarrierSchedulingDefaultQCL-r16 ENUMERATED {diff-only, both} OPTIONAL,
+ -- R1 18-5b cross-carrier scheduling with different SCS in UL CA
+ crossCarrierSchedulingUL-DiffSCS-r16 ENUMERATED {low-to-high, high-to-low, both} OPTIONAL,
+ -- R1 13.19a Simultaneous positioning SRS and MIMO SRS transmission for a given BC
+ simul-SRS-MIMO-Trans-BC-r16 ENUMERATED {n2} OPTIONAL,
+ -- R1 16-3a, 16-3a-1, 16-3b, 16-3b-1: New Individual Codebook
+ codebookParametersAdditionPerBC-r16 CodebookParametersAdditionPerBC-r16 OPTIONAL,
+ -- R1 16-8: Mixed codebook
+ codebookComboParametersAdditionPerBC-r16 CodebookComboParametersAdditionPerBC-r16 OPTIONAL
+}
+
+CA-ParametersNR-v1630 ::= SEQUENCE {
+ -- R1 22-5b: Simultaneous transmission of SRS for antenna switching and SRS for CB/NCB /BM for inter-band UL CA
+ -- R1 22-5d: Simultaneous transmission of SRS for antenna switching for inter-band UL CA
+ simulTX-SRS-AntSwitchingInterBandUL-CA-r16 SimulSRS-ForAntennaSwitching-r16 OPTIONAL,
+ -- R4 8-5: supported beam management type for inter-band CA
+ beamManagementType-r16 ENUMERATED {ibm, dummy} OPTIONAL,
+ -- R4 7-3a: UL frequency separation class with aggregate BW and Gap BW
+ intraBandFreqSeparationUL-AggBW-GapBW-r16 ENUMERATED {classI, classII, classIII} OPTIONAL,
+ -- RAN 89: Case B in case of Inter-band CA with non-aligned frame boundaries
+ interCA-NonAlignedFrame-B-r16 ENUMERATED {supported} OPTIONAL
+}
+
+CA-ParametersNR-v1640 ::= SEQUENCE {
+ -- R4 7-5: Support of reporting UL Tx DC locations for uplink intra-band CA.
+ uplinkTxDC-TwoCarrierReport-r16 ENUMERATED {supported} OPTIONAL,
+ -- RAN 22-6: Support of up to 3 different numerologies in the same NR PUCCH group for NR part of EN-DC, NGEN-DC, NE-DC and NR-CA
+ -- where UE is not configured with two NR PUCCH groups
+ maxUpTo3Diff-NumerologiesConfigSinglePUCCH-grp-r16 PUCCH-Grp-CarrierTypes-r16 OPTIONAL,
+ -- RAN 22-6a: Support of up to 4 different numerologies in the same NR PUCCH group for NR part of EN-DC, NGEN-DC, NE-DC and NR-CA
+ -- where UE is not configured with two NR PUCCH groups
+ maxUpTo4Diff-NumerologiesConfigSinglePUCCH-grp-r16 PUCCH-Grp-CarrierTypes-r16 OPTIONAL,
+ -- RAN 22-7: Support two PUCCH groups for NR-CA with 3 or more bands with at least two carrier types
+ twoPUCCH-Grp-ConfigurationsList-r16 SEQUENCE (SIZE (1..maxTwoPUCCH-Grp-ConfigList-r16)) OF TwoPUCCH-Grp-Configurations-r16 OPTIONAL,
+ -- R1 22-7a: Different numerology across NR PUCCH groups
+ diffNumerologyAcrossPUCCH-Group-CarrierTypes-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 22-7b: Different numerologies across NR carriers within the same NR PUCCH group, with PUCCH on a carrier of smaller SCS
+ diffNumerologyWithinPUCCH-GroupSmallerSCS-CarrierTypes-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 22-7c: Different numerologies across NR carriers within the same NR PUCCH group, with PUCCH on a carrier of larger SCS
+ diffNumerologyWithinPUCCH-GroupLargerSCS-CarrierTypes-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 11-2f: add the replicated FGs of 11-2a/c with restriction for non-aligned span case
+ -- with DL CA with Rel-16 PDCCH monitoring capability on all the serving cells
+ pdcch-MonitoringCA-NonAlignedSpan-r16 INTEGER (2..16) OPTIONAL,
+ -- R1 11-2g: add the replicated FGs of 11-2a/c with restriction for non-aligned span case
+ pdcch-BlindDetectionCA-Mixed-NonAlignedSpan-r16 SEQUENCE {
+ pdcch-BlindDetectionCA1-r16 INTEGER (1..15),
+ pdcch-BlindDetectionCA2-r16 INTEGER (1..15)
+ } OPTIONAL
+}
+
+CA-ParametersNR-v1690 ::= SEQUENCE {
+ csi-ReportingCrossPUCCH-Grp-r16 SEQUENCE {
+ computationTimeForA-CSI-r16 ENUMERATED {sameAsNoCross, relaxed},
+ additionalSymbols-r16 SEQUENCE {
+ scs-15kHz-additionalSymbols-r16 ENUMERATED {s14, s28} OPTIONAL,
+ scs-30kHz-additionalSymbols-r16 ENUMERATED {s14, s28} OPTIONAL,
+ scs-60kHz-additionalSymbols-r16 ENUMERATED {s14, s28, s56} OPTIONAL,
+ scs-120kHz-additionalSymbols-r16 ENUMERATED {s14, s28, s56} OPTIONAL
+ } OPTIONAL,
+ sp-CSI-ReportingOnPUCCH-r16 ENUMERATED {supported} OPTIONAL,
+ sp-CSI-ReportingOnPUSCH-r16 ENUMERATED {supported} OPTIONAL,
+ carrierTypePairList-r16 SEQUENCE (SIZE (1..maxCarrierTypePairList-r16)) OF CarrierTypePair-r16
+ } OPTIONAL
+}
+
+CA-ParametersNR-v16a0 ::= SEQUENCE {
+ pdcch-BlindDetectionMixedList-r16 SEQUENCE(SIZE(1..maxNrofPdcch-BlindDetectionMixed-1-r16)) OF PDCCH-BlindDetectionMixedList-r16
+}
+
+CA-ParametersNR-v1700 ::= SEQUENCE {
+ -- R1 23-9-1: Basic Features of Further Enhanced Port-Selection Type II Codebook (FeType-II) per band combination information
+ codebookParametersfetype2PerBC-r17 CodebookParametersfetype2PerBC-r17 OPTIONAL,
+ -- R4 18-4: Support of enhanced Demodulation requirements for CA in HST SFN FR1
+ demodulationEnhancementCA-r17 ENUMERATED {supported} OPTIONAL,
+ -- R4 20-1: Maximum uplink duty cycle for NR inter-band CA power class 2
+ maxUplinkDutyCycle-interBandCA-PC2-r17 ENUMERATED {n50, n60, n70, n80, n90, n100} OPTIONAL,
+ -- R4 20-2: Maximum uplink duty cycle for NR SUL combination power class 2
+ maxUplinkDutyCycle-SULcombination-PC2-r17 ENUMERATED {n50, n60, n70, n80, n90, n100} OPTIONAL,
+ beamManagementType-CBM-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 25-18: Parallel PUCCH and PUSCH transmission across CCs in inter-band CA
+ parallelTxPUCCH-PUSCH-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 23-9-5 Active CSI-RS resources and ports for mixed codebook types in any slot per band combination
+ codebookComboParameterMixedTypePerBC-r17 CodebookComboParameterMixedTypePerBC-r17 OPTIONAL,
+ -- R1 23-7-1 Basic Features of CSI Enhancement for Multi-TRP
+ mTRP-CSI-EnhancementPerBC-r17 SEQUENCE {
+ maxNumNZP-CSI-RS-r17 INTEGER (2..8),
+ cSI-Report-mode-r17 ENUMERATED {mode1, mode2, both},
+ supportedComboAcrossCCs-r17 SEQUENCE (SIZE (1..16)) OF CSI-MultiTRP-SupportedCombinations-r17,
+ codebookMode-NCJT-r17 ENUMERATED{mode1,mode1And2}
+ } OPTIONAL,
+ -- R1 23-7-1b Active CSI-RS resources and ports in the presence of multi-TRP CSI
+ codebookComboParameterMultiTRP-PerBC-r17 CodebookComboParameterMultiTRP-PerBC-r17 OPTIONAL,
+ -- R1 24-8b: 32 DL HARQ processes for FR 2-2 - maximum number of component carriers
+ maxCC-32-DL-HARQ-ProcessFR2-2-r17 ENUMERATED {n1, n2, n3, n4, n6, n8, n16, n32} OPTIONAL,
+ -- R1 24-9b: 32 UL HARQ processes for FR 2-2 - maximum number of component carriers
+ maxCC-32-UL-HARQ-ProcessFR2-2-r17 ENUMERATED {n1, n2, n3, n4, n5, n8, n16, n32} OPTIONAL,
+ -- R1 34-2: Cross-carrier scheduling from SCell to PCell/PSCell (Type B)
+ crossCarrierSchedulingSCell-SpCellTypeB-r17 CrossCarrierSchedulingSCell-SpCell-r17 OPTIONAL,
+-- R1 34-1: Cross-carrier scheduling from SCell to PCell/PSCell with search space restrictions (Type A)
+ crossCarrierSchedulingSCell-SpCellTypeA-r17 CrossCarrierSchedulingSCell-SpCell-r17 OPTIONAL,
+ -- R1 34-1a: DCI formats on PCell/PSCell USS set(s) support
+ dci-FormatsPCellPSCellUSS-Sets-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 34-3: Disabling scaling factor alpha when sSCell is deactivated
+ disablingScalingFactorDeactSCell-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 34-4: Disabling scaling factor alpha when sSCell is deactivated
+ disablingScalingFactorDormantSCell-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 34-5: Non-aligned frame boundaries between PCell/PSCell and sSCell
+ non-AlignedFrameBoundaries-r17 SEQUENCE {
+ scs15kHz-15kHz-r17 BIT STRING (SIZE (1..496)) OPTIONAL,
+ scs15kHz-30kHz-r17 BIT STRING (SIZE (1..496)) OPTIONAL,
+ scs15kHz-60kHz-r17 BIT STRING (SIZE (1..496)) OPTIONAL,
+ scs30kHz-30kHz-r17 BIT STRING (SIZE (1..496)) OPTIONAL,
+ scs30kHz-60kHz-r17 BIT STRING (SIZE (1..496)) OPTIONAL,
+ scs60kHz-60kHz-r17 BIT STRING (SIZE (1..496)) OPTIONAL
+ } OPTIONAL
+}
+
+CA-ParametersNR-v1720 ::= SEQUENCE {
+ -- R1 39-1: Parallel SRS and PUCCH/PUSCH transmission across CCs in intra-band non-contiguous CA
+ parallelTxSRS-PUCCH-PUSCH-intraBand-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 39-2: Parallel PRACH and SRS/PUCCH/PUSCH transmissions across CCs in intra-band non-contiguous CA
+ parallelTxPRACH-SRS-PUCCH-PUSCH-intraBand-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 25-9: Semi-static PUCCH cell switching for a single PUCCH group only
+ semiStaticPUCCH-CellSwitchSingleGroup-r17 SEQUENCE {
+ pucch-Group-r17 ENUMERATED {primaryGroupOnly, secondaryGroupOnly, eitherPrimaryOrSecondaryGroup},
+ pucch-Group-Config-r17 PUCCH-Group-Config-r17
+ } OPTIONAL,
+ -- R1 25-9a: Semi-static PUCCH cell switching for two PUCCH groups
+ semiStaticPUCCH-CellSwitchTwoGroups-r17 SEQUENCE (SIZE (1..maxTwoPUCCH-Grp-ConfigList-r17)) OF TwoPUCCH-Grp-Configurations-r17 OPTIONAL,
+ -- R1 25-10: PUCCH cell switching based on dynamic indication for same length of overlapping PUCCH slots/sub-slots for a single
+ -- PUCCH group only
+ dynamicPUCCH-CellSwitchSameLengthSingleGroup-r17 SEQUENCE {
+ pucch-Group-r17 ENUMERATED {primaryGroupOnly, secondaryGroupOnly, eitherPrimaryOrSecondaryGroup},
+ pucch-Group-Config-r17 PUCCH-Group-Config-r17
+ } OPTIONAL,
+ -- R1 25-10a: PUCCH cell switching based on dynamic indication for different length of overlapping PUCCH slots/sub-slots
+ -- for a single PUCCH group only
+ dynamicPUCCH-CellSwitchDiffLengthSingleGroup-r17 SEQUENCE {
+ pucch-Group-r17 ENUMERATED {primaryGroupOnly, secondaryGroupOnly, eitherPrimaryOrSecondaryGroup},
+ pucch-Group-Config-r17 PUCCH-Group-Config-r17
+ } OPTIONAL,
+ -- R1 25-10b: PUCCH cell switching based on dynamic indication for same length of overlapping PUCCH slots/sub-slots for two PUCCH
+ -- groups
+ dynamicPUCCH-CellSwitchSameLengthTwoGroups-r17 SEQUENCE (SIZE (1..maxTwoPUCCH-Grp-ConfigList-r17)) OF TwoPUCCH-Grp-Configurations-r17
+ OPTIONAL,
+ -- R1 25-10c: PUCCH cell switching based on dynamic indication for different length of overlapping PUCCH slots/sub-slots for two
+ -- PUCCH groups
+ dynamicPUCCH-CellSwitchDiffLengthTwoGroups-r17 SEQUENCE (SIZE (1..maxTwoPUCCH-Grp-ConfigList-r17)) OF TwoPUCCH-Grp-Configurations-r17
+ OPTIONAL,
+ -- R1 33-2a: ACK/NACK based HARQ-ACK feedback and RRC-based enabling/disabling ACK/NACK-based
+ -- feedback for dynamic scheduling for multicast
+ ack-NACK-FeedbackForMulticast-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 33-2d: PTP retransmission for multicast dynamic scheduling
+ ptp-Retx-Multicast-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 33-4: NACK-only based HARQ-ACK feedback for multicast with ACK/NACK transforming
+ nack-OnlyFeedbackForMulticast-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 33-4a: NACK-only based HARQ-ACK feedback for multicast corresponding to a specific sequence or a PUCCH transmission
+ nack-OnlyFeedbackSpecificResourceForMulticast-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 33-5-1a: ACK/NACK based HARQ-ACK feedback and RRC-based enabling/disabling ACK/NACK-based feedback
+ -- for SPS group-common PDSCH for multicast
+ ack-NACK-FeedbackForSPS-Multicast-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 33-5-1d: PTP retransmission for SPS group-common PDSCH for multicast
+ ptp-Retx-SPS-Multicast-r17 ENUMERATED {supported} OPTIONAL,
+ -- R4 26-1: Higher Power Limit CA DC
+ higherPowerLimit-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 39-4: Parallel MsgA and SRS/PUCCH/PUSCH transmissions across CCs in intra-band non-contiguous CA
+ parallelTxMsgA-SRS-PUCCH-PUSCH-intraBand-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 24-11a: Capability on the number of CCs for monitoring a maximum number of BDs and non-overlapped CCEs per span when
+ -- configured with DL CA with Rel-17 PDCCH monitoring capability on all the serving cells
+ pdcch-MonitoringCA-r17 INTEGER (4..16) OPTIONAL,
+ -- R1 24-11f: Capability on the number of CCs for monitoring a maximum number of BDs and non-overlapped CCEs for MCG and for SCG
+ -- when configured for NR-DC operation with Rel-17 PDCCH monitoring capability on all the serving cells
+ pdcch-BlindDetectionMCG-SCG-List-r17 SEQUENCE(SIZE(1..maxNrofPdcch-BlindDetection-r17)) OF PDCCH-BlindDetectionMCG-SCG-r17
+ OPTIONAL,
+ -- R1 24-11c: Number of carriers for CCE/BD scaling with DL CA with mix of Rel. 17 and Rel. 15 PDCCH monitoring capabilities on
+ -- different Carriers
+ -- R1 24-11g: Number of carriers for CCE/BD scaling for MCG and for SCG when configured for NR-DC operation with mix of Rel. 17 and
+ -- Rel. 15 PDCCH monitoring capabilities on different carriers
+ pdcch-BlindDetectionMixedList1-r17 SEQUENCE(SIZE(1..maxNrofPdcch-BlindDetection-r17)) OF PDCCH-BlindDetectionMixed-r17
+ OPTIONAL,
+ -- R1 24-11d: Number of carriers for CCE/BD scaling with DL CA with mix of Rel. 17 and Rel. 16 PDCCH monitoring capabilities on
+ -- different Carriers
+ -- R1 24-11h: Number of carriers for CCE/BD scaling for MCG and for SCG when configured for NR-DC operation with mix of Rel. 17 and
+ -- Rel. 16 PDCCH monitoring capabilities on different carriers
+ pdcch-BlindDetectionMixedList2-r17 SEQUENCE(SIZE(1..maxNrofPdcch-BlindDetection-r17)) OF PDCCH-BlindDetectionMixed-r17
+ OPTIONAL,
+ -- R1 24-11e: Number of carriers for CCE/BD scaling with DL CA with mix of Rel. 17, Rel. 16 and Rel. 15 PDCCH monitoring
+ -- capabilities on different carriers
+ -- R1 24-11i: Number of carriers for CCE/BD scaling for MCG and for SCG when configured for NR-DC operation with mix of Rel. 17,
+ -- Rel. 16 and Rel. 15 PDCCH monitoring capabilities on different carriers
+ pdcch-BlindDetectionMixedList3-r17 SEQUENCE(SIZE(1..maxNrofPdcch-BlindDetection-r17)) OF PDCCH-BlindDetectionMixed1-r17
+ OPTIONAL
+}
+
+CA-ParametersNR-v1730 ::= SEQUENCE {
+ -- R1 30-4a: DM-RS bundling for PUSCH repetition type A (per BC)
+ dmrs-BundlingPUSCH-RepTypeAPerBC-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 30-4b: DM-RS bundling for PUSCH repetition type B(per BC)
+ dmrs-BundlingPUSCH-RepTypeBPerBC-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 30-4c: DM-RS bundling for TB processing over multi-slot PUSCH(per BC)
+ dmrs-BundlingPUSCH-multiSlotPerBC-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 30-4d: DMRS bundling for PUCCH repetitions(per BC)
+ dmrs-BundlingPUCCH-RepPerBC-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 30-4g: Restart DM-RS bundling (per BC)
+ dmrs-BundlingRestartPerBC-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 30-4h: DM-RS bundling for non-back-to-back transmission (per BC)
+ dmrs-BundlingNonBackToBackTX-PerBC-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 39-3-1: Stay on the target CC for SRS carrier switching
+ stayOnTargetCC-SRS-CarrierSwitch-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 33-3-3a: FDM-ed Type-1 and Type-2 HARQ-ACK codebooks for multiplexing HARQ-ACK for unicast and HARQ-ACK for multicast
+ fdm-CodebookForMux-UnicastMulticastHARQ-ACK-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 33-3-3b: Mode 2 TDM-ed Type-1 and Type-2 HARQ-ACK codebook for multiplexing HARQ-ACK for unicast and HARQ-ACK for multicast
+ mode2-TDM-CodebookForMux-UnicastMulticastHARQ-ACK-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 33-3-4: Mode 1 for type1 codebook generation
+ mode1-ForType1-CodebookGeneration-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 33-5-1j: NACK-only based HARQ-ACK feedback for multicast corresponding to a specific sequence or a PUCCH transmission
+ -- for SPS group-commmon PDSCH for multicast
+ nack-OnlyFeedbackSpecificResourceForSPS-Multicast-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 33-8-2: Up to 2 PUCCH resources configuration for multicast feedback for dynamically scheduled multicast
+ multiPUCCH-ConfigForMulticast-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 33-8-3: PUCCH resource configuration for multicast feedback for SPS GC-PDSCH
+ pucch-ConfigForSPS-Multicast-r17 ENUMERATED {supported} OPTIONAL,
+ -- The following parameter is associated with R1 33-2a, R1 33-3-3a, and R1 33-3-3b, and is not a RAN1 FG.
+ maxNumberG-RNTI-HARQ-ACK-Codebook-r17 INTEGER (1..4) OPTIONAL,
+ -- R1 33-3-5: Feedback multiplexing for unicast PDSCH and group-common PDSCH for multicast with same priority and different codebook
+ -- type
+ mux-HARQ-ACK-UnicastMulticast-r17 ENUMERATED {supported} OPTIONAL
+}
+
+CrossCarrierSchedulingSCell-SpCell-r17 ::= SEQUENCE {
+ supportedSCS-Combinations-r17 SEQUENCE {
+ scs15kHz-15kHz-r17 ENUMERATED {supported} OPTIONAL,
+ scs15kHz-30kHz-r17 ENUMERATED {supported} OPTIONAL,
+ scs15kHz-60kHz-r17 ENUMERATED {supported} OPTIONAL,
+ scs30kHz-30kHz-r17 BIT STRING (SIZE (1..496)) OPTIONAL,
+ scs30kHz-60kHz-r17 BIT STRING (SIZE (1..496)) OPTIONAL,
+ scs60kHz-60kHz-r17 BIT STRING (SIZE (1..496)) OPTIONAL
+ },
+ pdcch-MonitoringOccasion-r17 ENUMERATED {val1, val2}
+}
+
+PDCCH-BlindDetectionMixedList-r16::= SEQUENCE {
+ pdcch-BlindDetectionCA-MixedExt-r16 CHOICE {
+ pdcch-BlindDetectionCA-Mixed-v16a0 PDCCH-BlindDetectionCA-MixedExt-r16,
+ pdcch-BlindDetectionCA-Mixed-NonAlignedSpan-v16a0 PDCCH-BlindDetectionCA-MixedExt-r16
+ } OPTIONAL,
+ pdcch-BlindDetectionCG-UE-MixedExt-r16 SEQUENCE{
+ pdcch-BlindDetectionMCG-UE-Mixed-v16a0 PDCCH-BlindDetectionCG-UE-MixedExt-r16,
+ pdcch-BlindDetectionSCG-UE-Mixed-v16a0 PDCCH-BlindDetectionCG-UE-MixedExt-r16
+ } OPTIONAL
+}
+
+PDCCH-BlindDetectionCA-MixedExt-r16 ::= SEQUENCE {
+ pdcch-BlindDetectionCA1-r16 INTEGER (1..15),
+ pdcch-BlindDetectionCA2-r16 INTEGER (1..15)
+}
+
+PDCCH-BlindDetectionCG-UE-MixedExt-r16 ::= SEQUENCE {
+ pdcch-BlindDetectionCG-UE1-r16 INTEGER (0..15),
+ pdcch-BlindDetectionCG-UE2-r16 INTEGER (0..15)
+}
+
+PDCCH-BlindDetectionMCG-SCG-r17 ::= SEQUENCE {
+ pdcch-BlindDetectionMCG-UE-r17 INTEGER (1..15),
+ pdcch-BlindDetectionSCG-UE-r17 INTEGER (1..15)
+}
+
+PDCCH-BlindDetectionMixed-r17::= SEQUENCE {
+ pdcch-BlindDetectionCA-Mixed-r17 PDCCH-BlindDetectionCA-Mixed-r17 OPTIONAL,
+ pdcch-BlindDetectionCG-UE-Mixed-r17 SEQUENCE{
+ pdcch-BlindDetectionMCG-UE-Mixed-v17 PDCCH-BlindDetectionCG-UE-Mixed-r17,
+ pdcch-BlindDetectionSCG-UE-Mixed-v17 PDCCH-BlindDetectionCG-UE-Mixed-r17
+ } OPTIONAL
+}
+
+PDCCH-BlindDetectionCG-UE-Mixed-r17 ::= SEQUENCE {
+ pdcch-BlindDetectionCG-UE1-r17 INTEGER (0..15),
+ pdcch-BlindDetectionCG-UE2-r17 INTEGER (0..15)
+}
+
+PDCCH-BlindDetectionCA-Mixed-r17 ::= SEQUENCE {
+ pdcch-BlindDetectionCA1-r17 INTEGER (1..15) OPTIONAL,
+ pdcch-BlindDetectionCA2-r17 INTEGER (1..15) OPTIONAL
+}
+PDCCH-BlindDetectionMixed1-r17::= SEQUENCE {
+ pdcch-BlindDetectionCA-Mixed1-r17 PDCCH-BlindDetectionCA-Mixed1-r17 OPTIONAL,
+ pdcch-BlindDetectionCG-UE-Mixed1-r17 SEQUENCE{
+ pdcch-BlindDetectionMCG-UE-Mixed1-v17 PDCCH-BlindDetectionCG-UE-Mixed1-r17,
+ pdcch-BlindDetectionSCG-UE-Mixed1-v17 PDCCH-BlindDetectionCG-UE-Mixed1-r17
+ } OPTIONAL
+}
+
+PDCCH-BlindDetectionCG-UE-Mixed1-r17 ::= SEQUENCE {
+ pdcch-BlindDetectionCG-UE1-r17 INTEGER (0..15),
+ pdcch-BlindDetectionCG-UE2-r17 INTEGER (0..15),
+ pdcch-BlindDetectionCG-UE3-r17 INTEGER (0..15)
+}
+
+PDCCH-BlindDetectionCA-Mixed1-r17 ::= SEQUENCE {
+ pdcch-BlindDetectionCA1-r17 INTEGER (1..15) OPTIONAL,
+ pdcch-BlindDetectionCA2-r17 INTEGER (1..15) OPTIONAL,
+ pdcch-BlindDetectionCA3-r17 INTEGER (1..15) OPTIONAL
+}
+
+SimulSRS-ForAntennaSwitching-r16 ::= SEQUENCE {
+ supportSRS-xTyR-xLessThanY-r16 ENUMERATED {supported} OPTIONAL,
+ supportSRS-xTyR-xEqualToY-r16 ENUMERATED {supported} OPTIONAL,
+ supportSRS-AntennaSwitching-r16 ENUMERATED {supported} OPTIONAL
+}
+
+TwoPUCCH-Grp-Configurations-r16 ::= SEQUENCE {
+ pucch-PrimaryGroupMapping-r16 TwoPUCCH-Grp-ConfigParams-r16,
+ pucch-SecondaryGroupMapping-r16 TwoPUCCH-Grp-ConfigParams-r16
+}
+
+TwoPUCCH-Grp-Configurations-r17 ::= SEQUENCE {
+ primaryPUCCH-GroupConfig-r17 PUCCH-Group-Config-r17,
+ secondaryPUCCH-GroupConfig-r17 PUCCH-Group-Config-r17
+}
+
+TwoPUCCH-Grp-ConfigParams-r16 ::= SEQUENCE {
+ pucch-GroupMapping-r16 PUCCH-Grp-CarrierTypes-r16,
+ pucch-TX-r16 PUCCH-Grp-CarrierTypes-r16
+}
+
+
+CarrierTypePair-r16 ::= SEQUENCE {
+ carrierForCSI-Measurement-r16 PUCCH-Grp-CarrierTypes-r16,
+ carrierForCSI-Reporting-r16 PUCCH-Grp-CarrierTypes-r16
+}
+
+PUCCH-Grp-CarrierTypes-r16 ::= SEQUENCE {
+ fr1-NonSharedTDD-r16 ENUMERATED {supported} OPTIONAL,
+ fr1-SharedTDD-r16 ENUMERATED {supported} OPTIONAL,
+ fr1-NonSharedFDD-r16 ENUMERATED {supported} OPTIONAL,
+ fr2-r16 ENUMERATED {supported} OPTIONAL
+}
+
+PUCCH-Group-Config-r17 ::= SEQUENCE {
+ fr1-FR1-NonSharedTDD-r17 ENUMERATED {supported} OPTIONAL,
+ fr2-FR2-NonSharedTDD-r17 ENUMERATED {supported} OPTIONAL,
+ fr1-FR2-NonSharedTDD-r17 ENUMERATED {supported} OPTIONAL
+}
+
+-- TAG-CA-PARAMETERSNR-STOP
+-- TAG-CA-PARAMETERS-NRDC-START
+
+CA-ParametersNRDC ::= SEQUENCE {
+ ca-ParametersNR-ForDC CA-ParametersNR OPTIONAL,
+ ca-ParametersNR-ForDC-v1540 CA-ParametersNR-v1540 OPTIONAL,
+ ca-ParametersNR-ForDC-v1550 CA-ParametersNR-v1550 OPTIONAL,
+ ca-ParametersNR-ForDC-v1560 CA-ParametersNR-v1560 OPTIONAL,
+ featureSetCombinationDC FeatureSetCombinationId OPTIONAL
+}
+
+CA-ParametersNRDC-v15g0 ::= SEQUENCE {
+ ca-ParametersNR-ForDC-v15g0 CA-ParametersNR-v15g0 OPTIONAL
+}
+
+CA-ParametersNRDC-v1610 ::= SEQUENCE {
+ -- R1 18-1: Semi-static power sharing mode1 between MCG and SCG cells of same FR for NR dual connectivity
+ intraFR-NR-DC-PwrSharingMode1-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 18-1a: Semi-static power sharing mode 2 between MCG and SCG cells of same FR for NR dual connectivity
+ intraFR-NR-DC-PwrSharingMode2-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 18-1b: Dynamic power sharing between MCG and SCG cells of same FR for NR dual connectivity
+ intraFR-NR-DC-DynamicPwrSharing-r16 ENUMERATED {short, long} OPTIONAL,
+ asyncNRDC-r16 ENUMERATED {supported} OPTIONAL
+}
+
+CA-ParametersNRDC-v1630 ::= SEQUENCE {
+ ca-ParametersNR-ForDC-v1610 CA-ParametersNR-v1610 OPTIONAL,
+ ca-ParametersNR-ForDC-v1630 CA-ParametersNR-v1630 OPTIONAL
+}
+
+CA-ParametersNRDC-v1640 ::= SEQUENCE {
+ ca-ParametersNR-ForDC-v1640 CA-ParametersNR-v1640 OPTIONAL
+}
+
+CA-ParametersNRDC-v1650 ::= SEQUENCE {
+ supportedCellGrouping-r16 BIT STRING (SIZE (1..maxCellGroupings-r16)) OPTIONAL
+}
+
+CA-ParametersNRDC-v16a0 ::= SEQUENCE {
+ ca-ParametersNR-ForDC-v16a0 CA-ParametersNR-v16a0 OPTIONAL
+}
+
+CA-ParametersNRDC-v1700 ::= SEQUENCE {
+ -- R1 31-9: Indicates the support of simultaneous transmission and reception of an IAB-node from multiple parent nodes
+ simultaneousRxTx-IAB-MultipleParents-r17 ENUMERATED {supported} OPTIONAL,
+ condPSCellAdditionNRDC-r17 ENUMERATED {supported} OPTIONAL,
+ scg-ActivationDeactivationNRDC-r17 ENUMERATED {supported} OPTIONAL,
+ scg-ActivationDeactivationResumeNRDC-r17 ENUMERATED {supported} OPTIONAL,
+ beamManagementType-CBM-r17 ENUMERATED {supported} OPTIONAL
+}
+
+CA-ParametersNRDC-v1720 ::= SEQUENCE {
+ ca-ParametersNR-ForDC-v1700 CA-ParametersNR-v1700 OPTIONAL,
+ ca-ParametersNR-ForDC-v1720 CA-ParametersNR-v1720 OPTIONAL
+}
+
+CA-ParametersNRDC-v1730 ::= SEQUENCE {
+ ca-ParametersNR-ForDC-v1730 CA-ParametersNR-v1730 OPTIONAL
+}
+
+-- TAG-CA-PARAMETERS-NRDC-STOP
+-- TAG-CARRIERAGGREGATIONVARIANT-START
+
+CarrierAggregationVariant ::= SEQUENCE {
+ fr1fdd-FR1TDD-CA-SpCellOnFR1FDD ENUMERATED {supported} OPTIONAL,
+ fr1fdd-FR1TDD-CA-SpCellOnFR1TDD ENUMERATED {supported} OPTIONAL,
+ fr1fdd-FR2TDD-CA-SpCellOnFR1FDD ENUMERATED {supported} OPTIONAL,
+ fr1fdd-FR2TDD-CA-SpCellOnFR2TDD ENUMERATED {supported} OPTIONAL,
+ fr1tdd-FR2TDD-CA-SpCellOnFR1TDD ENUMERATED {supported} OPTIONAL,
+ fr1tdd-FR2TDD-CA-SpCellOnFR2TDD ENUMERATED {supported} OPTIONAL,
+ fr1fdd-FR1TDD-FR2TDD-CA-SpCellOnFR1FDD ENUMERATED {supported} OPTIONAL,
+ fr1fdd-FR1TDD-FR2TDD-CA-SpCellOnFR1TDD ENUMERATED {supported} OPTIONAL,
+ fr1fdd-FR1TDD-FR2TDD-CA-SpCellOnFR2TDD ENUMERATED {supported} OPTIONAL
+}
+
+-- TAG-CARRIERAGGREGATIONVARIANT-STOP
+-- TAG-CODEBOOKPARAMETERS-START
+
+CodebookParameters ::= SEQUENCE {
+ type1 SEQUENCE {
+ singlePanel SEQUENCE {
+ supportedCSI-RS-ResourceList SEQUENCE (SIZE (1.. maxNrofCSI-RS-Resources)) OF SupportedCSI-RS-Resource,
+ modes ENUMERATED {mode1, mode1andMode2},
+ maxNumberCSI-RS-PerResourceSet INTEGER (1..8)
+ },
+ multiPanel SEQUENCE {
+ supportedCSI-RS-ResourceList SEQUENCE (SIZE (1.. maxNrofCSI-RS-Resources)) OF SupportedCSI-RS-Resource,
+ modes ENUMERATED {mode1, mode2, both},
+ nrofPanels ENUMERATED {n2, n4},
+ maxNumberCSI-RS-PerResourceSet INTEGER (1..8)
+ } OPTIONAL
+ },
+ type2 SEQUENCE {
+ supportedCSI-RS-ResourceList SEQUENCE (SIZE (1.. maxNrofCSI-RS-Resources)) OF SupportedCSI-RS-Resource,
+ parameterLx INTEGER (2..4),
+ amplitudeScalingType ENUMERATED {wideband, widebandAndSubband},
+ amplitudeSubsetRestriction ENUMERATED {supported} OPTIONAL
+ } OPTIONAL,
+ type2-PortSelection SEQUENCE {
+ supportedCSI-RS-ResourceList SEQUENCE (SIZE (1.. maxNrofCSI-RS-Resources)) OF SupportedCSI-RS-Resource,
+ parameterLx INTEGER (2..4),
+ amplitudeScalingType ENUMERATED {wideband, widebandAndSubband}
+ } OPTIONAL
+}
+
+CodebookParameters-v1610 ::= SEQUENCE {
+ supportedCSI-RS-ResourceListAlt-r16 SEQUENCE {
+ type1-SinglePanel-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-Resources)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16) OPTIONAL,
+ type1-MultiPanel-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-Resources)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16) OPTIONAL,
+ type2-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-Resources)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16) OPTIONAL,
+ type2-PortSelection-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-Resources)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16) OPTIONAL
+ } OPTIONAL
+}
+
+CodebookParametersAddition-r16 ::= SEQUENCE {
+ etype2-r16 SEQUENCE {
+ -- R1 16-3a Regular eType 2 R=1
+ etype2R1-r16 SEQUENCE {
+ supportedCSI-RS-ResourceListAdd-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF
+ INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ },
+ -- R1 16-3a-1 Regular eType 2 R=2
+ etype2R2-r16 SEQUENCE {
+ supportedCSI-RS-ResourceListAdd-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF
+ INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ } OPTIONAL,
+ -- R1 16-3a-2: Support of parameter combinations 7-8
+ paramComb7-8-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 16-3a-3: Support of rank 3,4
+ rank3-4-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 16-3a-4: CBSR with soft amplitude restriction
+ amplitudeSubsetRestriction-r16 ENUMERATED {supported} OPTIONAL
+ } OPTIONAL,
+ etype2-PS-r16 SEQUENCE {
+ -- R1 16-3b Regular eType 2 R=1 PortSelection
+ etype2R1-PortSelection-r16 SEQUENCE {
+ supportedCSI-RS-ResourceListAdd-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF
+ INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ },
+ -- R1 16-3b-1 Regular eType 2 R=2 PortSelection
+ etype2R2-PortSelection-r16 SEQUENCE {
+ supportedCSI-RS-ResourceListAdd-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF
+ INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ } OPTIONAL,
+ -- R1 16-3b-2: Support of rank 3,4
+ rank3-4-r16 ENUMERATED {supported} OPTIONAL
+ } OPTIONAL
+}
+
+CodebookComboParametersAddition-r16 ::= SEQUENCE {
+ -- R1 16-8 Mixed codebook types
+ type1SP-Type2-null-r16 SEQUENCE {
+ supportedCSI-RS-ResourceListAdd-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ } OPTIONAL,
+ type1SP-Type2PS-null-r16 SEQUENCE {
+ supportedCSI-RS-ResourceListAdd-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ } OPTIONAL,
+ type1SP-eType2R1-null-r16 SEQUENCE {
+ supportedCSI-RS-ResourceListAdd-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ } OPTIONAL,
+ type1SP-eType2R2-null-r16 SEQUENCE {
+ supportedCSI-RS-ResourceListAdd-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ } OPTIONAL,
+ type1SP-eType2R1PS-null-r16 SEQUENCE {
+ supportedCSI-RS-ResourceListAdd-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ } OPTIONAL,
+ type1SP-eType2R2PS-null-r16 SEQUENCE {
+ supportedCSI-RS-ResourceListAdd-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ } OPTIONAL,
+ type1SP-Type2-Type2PS-r16 SEQUENCE {
+ supportedCSI-RS-ResourceListAdd-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ } OPTIONAL,
+ type1MP-Type2-null-r16 SEQUENCE {
+ supportedCSI-RS-ResourceListAdd-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ } OPTIONAL,
+ type1MP-Type2PS-null-r16 SEQUENCE {
+ supportedCSI-RS-ResourceListAdd-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ } OPTIONAL,
+ type1MP-eType2R1-null-r16 SEQUENCE {
+ supportedCSI-RS-ResourceListAdd-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ } OPTIONAL,
+ type1MP-eType2R2-null-r16 SEQUENCE {
+ supportedCSI-RS-ResourceListAdd-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ } OPTIONAL,
+ type1MP-eType2R1PS-null-r16 SEQUENCE {
+ supportedCSI-RS-ResourceListAdd-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ } OPTIONAL,
+ type1MP-eType2R2PS-null-r16 SEQUENCE {
+ supportedCSI-RS-ResourceListAdd-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ } OPTIONAL,
+ type1MP-Type2-Type2PS-r16 SEQUENCE {
+ supportedCSI-RS-ResourceListAdd-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ } OPTIONAL
+}
+
+CodebookParametersfetype2-r17 ::= SEQUENCE {
+ -- R1 23-9-1 Basic Features of Further Enhanced Port-Selection Type II Codebook (FeType-II)
+ fetype2basic-r17 SEQUENCE (SIZE (1.. maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16),
+ -- R1 23-9-2 Support of M=2 and R=1 for FeType-II
+ fetype2R1-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r17)) OF INTEGER (0.. maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ -- R1 23-9-4 Support of R = 2 for FeType-II
+ fetype2R2-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r17)) OF INTEGER (0.. maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ -- R1 23-9-3 Support of rank 3, 4 for FeType-II
+ fetype2Rank3Rank4-r17 ENUMERATED {supported} OPTIONAL
+}
+
+CodebookComboParameterMixedType-r17 ::= SEQUENCE {
+ -- R1 23-9-5 Active CSI-RS resources and ports for mixed codebook types in any slot
+ type1SP-feType2PS-null-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ type1SP-feType2PS-M2R1-null-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ type1SP-feType2PS-M2R2-null-r1 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ type1SP-Type2-feType2-PS-M1-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ type1SP-Type2-feType2-PS-M2R1-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ type1SP-eType2R1-feType2-PS-M1-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ type1SP-eType2R1-feType2-PS-M2R1-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ type1MP-feType2PS-null-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ type1MP-feType2PS-M2R1-null-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ type1MP-feType2PS-M2R2-null-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ type1MP-Type2-feType2-PS-M1-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ type1MP-Type2-feType2-PS-M2R1-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ type1MP-eType2R1-feType2-PS-M1-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ type1MP-eType2R1-feType2-PS-M2R1-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL
+}
+
+CodebookComboParameterMultiTRP-r17::= SEQUENCE {
+ -- R1 23-7-1b Active CSI-RS resources and ports in the presence of multi-TRP CSI
+ -- {Codebook 2, Codebook 3} =(NULL, NULL}
+ nCJT-null-null SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT1SP-null-null SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ -- {Codebook 2, Codebook 3} = {( {"Rel 16 combinations in FG 16-8"}
+ nCJT-Type2-null-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT-Type2PS-null-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT-eType2R1-null-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT-eType2R2-null-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT-eType2R1PS-null-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT-eType2R2PS-null-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT-Type2-Type2PS-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT1SP-Type2-null-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT1SP-Type2PS-null-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT1SP-eType2R1-null-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT1SP-eType2R2-null-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT1SP-eType2R1PS-null-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT1SP-eType2R2PS-null-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT1SP-Type2-Type2PS-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ -- {Codebook 2, Codebook 3} = {"New Rel17 combinations in FG 23-9-5"}
+ nCJT-feType2PS-null-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT-feType2PS-M2R1-null-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT-feType2PS-M2R2-null-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT-Type2-feType2-PS-M1-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT-Type2-feType2-PS-M2R1-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT-eType2R1-feType2-PS-M1-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT-eType2R1-feType2-PS-M2R1-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT1SP-feType2PS-null-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT1SP-feType2PS-M2R1-null-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT1SP-feType2PS-M2R2-null-r1 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT1SP-Type2-feType2-PS-M1-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT1SP-Type2-feType2-PS-M2R1-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT1SP-eType2R1-feType2-PS-M1-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT1SP-eType2R1-feType2-PS-M2R1-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL
+}
+
+CodebookParametersAdditionPerBC-r16::= SEQUENCE {
+ -- R1 16-3a Regular eType 2 R=1
+ etype2R1-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ -- R1 16-3a-1 Regular eType 2 R=2
+ etype2R2-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ -- R1 16-3b Regular eType 2 R=1 PortSelection
+ etype2R1-PortSelection-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ -- R1 16-3b-1 Regular eType 2 R=2 PortSelection
+ etype2R2-PortSelection-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL
+}
+
+CodebookComboParametersAdditionPerBC-r16::= SEQUENCE {
+ -- R1 16-8 Mixed codebook types
+ type1SP-Type2-null-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ type1SP-Type2PS-null-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ type1SP-eType2R1-null-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ type1SP-eType2R2-null-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ type1SP-eType2R1PS-null-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ type1SP-eType2R2PS-null-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ type1SP-Type2-Type2PS-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ type1MP-Type2-null-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ type1MP-Type2PS-null-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ type1MP-eType2R1-null-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ type1MP-eType2R2-null-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ type1MP-eType2R1PS-null-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ type1MP-eType2R2PS-null-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ type1MP-Type2-Type2PS-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL
+}
+
+CodebookParametersfetype2PerBC-r17 ::= SEQUENCE {
+ -- R1 23-9-1 Basic Features of Further Enhanced Port-Selection Type II Codebook (FeType-II)
+ fetype2basic-r17 SEQUENCE (SIZE (1.. maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16),
+ -- R1 23-9-2 Support of M=2 and R=1 for FeType-II
+ fetype2R1-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r17)) OF INTEGER (0.. maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ -- R1 23-9-4 Support of R = 2 for FeType-II
+ fetype2R2-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r17)) OF INTEGER (0.. maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL
+}
+
+CodebookComboParameterMixedTypePerBC-r17 ::= SEQUENCE {
+ -- R1 23-9-5 Active CSI-RS resources and ports for mixed codebook types in any slot
+ type1SP-feType2PS-null-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ type1SP-feType2PS-M2R1-null-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ type1SP-feType2PS-M2R2-null-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ type1SP-Type2-feType2-PS-M1-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ type1SP-Type2-feType2-PS-M2R1-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ type1SP-eType2R1-feType2-PS-M1-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ type1SP-eType2R1-feType2-PS-M2R1-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ type1MP-feType2PS-null-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ type1MP-feType2PS-M2R1-null-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ type1MP-feType2PS-M2R2-null-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ type1MP-Type2-feType2-PS-M1-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ type1MP-Type2-feType2-PS-M2R1-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ type1MP-eType2R1-feType2-PS-M1-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ type1MP-eType2R1-feType2-PS-M2R1-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL
+}
+
+CodebookComboParameterMultiTRP-PerBC-r17::= SEQUENCE {
+ -- R1 23-7-1b Active CSI-RS resources and ports in the presence of multi-TRP CSI
+ -- {Codebook 2, Codebook 3} =(NULL, NULL}
+ nCJT-null-null SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT1SP-null-null SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ -- {Codebook 2, Codebook 3} = {( {"Rel 16 combinations in FG 16-8"}
+ nCJT-Type2-null-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT-Type2PS-null-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT-eType2R1-null-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT-eType2R2-null-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT-eType2R1PS-null-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT-eType2R2PS-null-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT-Type2-Type2PS-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT1SP-Type2-null-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT1SP-Type2PS-null-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT1SP-eType2R1-null-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT1SP-eType2R2-null-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT1SP-eType2R1PS-null-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT1SP-eType2R2PS-null-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT1SP-Type2-Type2PS-r16 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ -- {Codebook 2, Codebook 3} = {"New Rel17 combinations in FG 23-9-5"}
+ nCJT-feType2PS-null-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT-feType2PS-M2R1-null-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT-feType2PS-M2R2-null-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT-Type2-feType2-PS-M1-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT-Type2-feType2-PS-M2R1-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT-eType2R1-feType2-PS-M1-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT-eType2R1-feType2-PS-M2R1-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT1SP-feType2PS-null-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT1SP-feType2PS-M2R1-null-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT1SP-feType2PS-M2R2-null-r1 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT1SP-Type2-feType2-PS-M1-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT1SP-Type2-feType2-PS-M2R1-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT1SP-eType2R1-feType2-PS-M1-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL,
+ nCJT1SP-eType2R1-feType2-PS-M2R1-r17 SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesExt-r16)) OF INTEGER (0..maxNrofCSI-RS-ResourcesAlt-1-r16)
+ OPTIONAL
+}
+
+CodebookVariantsList-r16 ::= SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesAlt-r16)) OF SupportedCSI-RS-Resource
+
+SupportedCSI-RS-Resource ::= SEQUENCE {
+ maxNumberTxPortsPerResource ENUMERATED {p2, p4, p8, p12, p16, p24, p32},
+ maxNumberResourcesPerBand INTEGER (1..64),
+ totalNumberTxPortsPerBand INTEGER (2..256)
+}
+
+-- TAG-CODEBOOKPARAMETERS-STOP
+-- TAG-FEATURESETCOMBINATION-START
+
+FeatureSetCombination ::= SEQUENCE (SIZE (1..maxSimultaneousBands)) OF FeatureSetsPerBand
+
+FeatureSetsPerBand ::= SEQUENCE (SIZE (1..maxFeatureSetsPerBand)) OF FeatureSet
+
+FeatureSet ::= CHOICE {
+ eutra SEQUENCE {
+ downlinkSetEUTRA FeatureSetEUTRA-DownlinkId,
+ uplinkSetEUTRA FeatureSetEUTRA-UplinkId
+ },
+ nr SEQUENCE {
+ downlinkSetNR FeatureSetDownlinkId,
+ uplinkSetNR FeatureSetUplinkId
+ }
+}
+
+-- TAG-FEATURESETCOMBINATION-STOP
+-- TAG-FEATURESETCOMBINATIONID-START
+
+FeatureSetCombinationId ::= INTEGER (0.. maxFeatureSetCombinations)
+
+-- TAG-FEATURESETCOMBINATIONID-STOP
+-- TAG-FEATURESETDOWNLINK-START
+
+FeatureSetDownlink ::= SEQUENCE {
+ featureSetListPerDownlinkCC SEQUENCE (SIZE (1..maxNrofServingCells)) OF FeatureSetDownlinkPerCC-Id,
+
+ intraBandFreqSeparationDL FreqSeparationClass OPTIONAL,
+ scalingFactor ENUMERATED {f0p4, f0p75, f0p8} OPTIONAL,
+ dummy8 ENUMERATED {supported} OPTIONAL,
+ scellWithoutSSB ENUMERATED {supported} OPTIONAL,
+ csi-RS-MeasSCellWithoutSSB ENUMERATED {supported} OPTIONAL,
+ dummy1 ENUMERATED {supported} OPTIONAL,
+ type1-3-CSS ENUMERATED {supported} OPTIONAL,
+ pdcch-MonitoringAnyOccasions ENUMERATED {withoutDCI-Gap, withDCI-Gap} OPTIONAL,
+ dummy2 ENUMERATED {supported} OPTIONAL,
+ ue-SpecificUL-DL-Assignment ENUMERATED {supported} OPTIONAL,
+ searchSpaceSharingCA-DL ENUMERATED {supported} OPTIONAL,
+ timeDurationForQCL SEQUENCE {
+ scs-60kHz ENUMERATED {s7, s14, s28} OPTIONAL,
+ scs-120kHz ENUMERATED {s14, s28} OPTIONAL
+ } OPTIONAL,
+ pdsch-ProcessingType1-DifferentTB-PerSlot SEQUENCE {
+ scs-15kHz ENUMERATED {upto2, upto4, upto7} OPTIONAL,
+ scs-30kHz ENUMERATED {upto2, upto4, upto7} OPTIONAL,
+ scs-60kHz ENUMERATED {upto2, upto4, upto7} OPTIONAL,
+ scs-120kHz ENUMERATED {upto2, upto4, upto7} OPTIONAL
+ } OPTIONAL,
+ dummy3 DummyA OPTIONAL,
+ dummy4 SEQUENCE (SIZE (1.. maxNrofCodebooks)) OF DummyB OPTIONAL,
+ dummy5 SEQUENCE (SIZE (1.. maxNrofCodebooks)) OF DummyC OPTIONAL,
+ dummy6 SEQUENCE (SIZE (1.. maxNrofCodebooks)) OF DummyD OPTIONAL,
+ dummy7 SEQUENCE (SIZE (1.. maxNrofCodebooks)) OF DummyE OPTIONAL
+}
+
+FeatureSetDownlink-v1540 ::= SEQUENCE {
+ oneFL-DMRS-TwoAdditionalDMRS-DL ENUMERATED {supported} OPTIONAL,
+ additionalDMRS-DL-Alt ENUMERATED {supported} OPTIONAL,
+ twoFL-DMRS-TwoAdditionalDMRS-DL ENUMERATED {supported} OPTIONAL,
+ oneFL-DMRS-ThreeAdditionalDMRS-DL ENUMERATED {supported} OPTIONAL,
+ pdcch-MonitoringAnyOccasionsWithSpanGap SEQUENCE {
+ scs-15kHz ENUMERATED {set1, set2, set3} OPTIONAL,
+ scs-30kHz ENUMERATED {set1, set2, set3} OPTIONAL,
+ scs-60kHz ENUMERATED {set1, set2, set3} OPTIONAL,
+ scs-120kHz ENUMERATED {set1, set2, set3} OPTIONAL
+ } OPTIONAL,
+ pdsch-SeparationWithGap ENUMERATED {supported} OPTIONAL,
+ pdsch-ProcessingType2 SEQUENCE {
+ scs-15kHz ProcessingParameters OPTIONAL,
+ scs-30kHz ProcessingParameters OPTIONAL,
+ scs-60kHz ProcessingParameters OPTIONAL
+ } OPTIONAL,
+ pdsch-ProcessingType2-Limited SEQUENCE {
+ differentTB-PerSlot-SCS-30kHz ENUMERATED {upto1, upto2, upto4, upto7}
+ } OPTIONAL,
+ dl-MCS-TableAlt-DynamicIndication ENUMERATED {supported} OPTIONAL
+}
+
+FeatureSetDownlink-v15a0 ::= SEQUENCE {
+ supportedSRS-Resources SRS-Resources OPTIONAL
+}
+
+FeatureSetDownlink-v1610 ::= SEQUENCE {
+ -- R1 22-4e/4f/4g/4h: CBG based reception for DL with unicast PDSCH(s) per slot per CC with UE processing time Capability 1
+ cbgPDSCH-ProcessingType1-DifferentTB-PerSlot-r16 SEQUENCE {
+ scs-15kHz-r16 ENUMERATED {one, upto2, upto4, upto7} OPTIONAL,
+ scs-30kHz-r16 ENUMERATED {one, upto2, upto4, upto7} OPTIONAL,
+ scs-60kHz-r16 ENUMERATED {one, upto2, upto4, upto7} OPTIONAL,
+ scs-120kHz-r16 ENUMERATED {one, upto2, upto4, upto7} OPTIONAL
+ } OPTIONAL,
+
+ -- R1 22-3e/3f/3g/3h: CBG based reception for DL with unicast PDSCH(s) per slot per CC with UE processing time Capability 2
+ cbgPDSCH-ProcessingType2-DifferentTB-PerSlot-r16 SEQUENCE {
+ scs-15kHz-r16 ENUMERATED {one, upto2, upto4, upto7} OPTIONAL,
+ scs-30kHz-r16 ENUMERATED {one, upto2, upto4, upto7} OPTIONAL,
+ scs-60kHz-r16 ENUMERATED {one, upto2, upto4, upto7} OPTIONAL,
+ scs-120kHz-r16 ENUMERATED {one, upto2, upto4, upto7} OPTIONAL
+ } OPTIONAL,
+ intraFreqDAPS-r16 SEQUENCE {
+ intraFreqDiffSCS-DAPS-r16 ENUMERATED {supported} OPTIONAL,
+ intraFreqAsyncDAPS-r16 ENUMERATED {supported} OPTIONAL
+ } OPTIONAL,
+ intraBandFreqSeparationDL-v1620 FreqSeparationClassDL-v1620 OPTIONAL,
+ intraBandFreqSeparationDL-Only-r16 FreqSeparationClassDL-Only-r16 OPTIONAL,
+
+ -- R1 11-2: Rel-16 PDCCH monitoring capability
+ pdcch-Monitoring-r16 SEQUENCE {
+ pdsch-ProcessingType1-r16 SEQUENCE {
+ scs-15kHz-r16 PDCCH-MonitoringOccasions-r16 OPTIONAL,
+ scs-30kHz-r16 PDCCH-MonitoringOccasions-r16 OPTIONAL
+ } OPTIONAL,
+ pdsch-ProcessingType2-r16 SEQUENCE {
+ scs-15kHz-r16 PDCCH-MonitoringOccasions-r16 OPTIONAL,
+ scs-30kHz-r16 PDCCH-MonitoringOccasions-r16 OPTIONAL
+ } OPTIONAL
+ } OPTIONAL,
+
+ -- R1 11-2b: Mix of Rel. 16 PDCCH monitoring capability and Rel. 15 PDCCH monitoring capability on different carriers
+ pdcch-MonitoringMixed-r16 ENUMERATED {supported} OPTIONAL,
+
+ -- R1 18-5c: Processing up to X unicast DCI scheduling for DL per scheduled CC
+ crossCarrierSchedulingProcessing-DiffSCS-r16 SEQUENCE {
+ scs-15kHz-120kHz-r16 ENUMERATED {n1,n2,n4} OPTIONAL,
+ scs-15kHz-60kHz-r16 ENUMERATED {n1,n2,n4} OPTIONAL,
+ scs-30kHz-120kHz-r16 ENUMERATED {n1,n2,n4} OPTIONAL,
+ scs-15kHz-30kHz-r16 ENUMERATED {n2} OPTIONAL,
+ scs-30kHz-60kHz-r16 ENUMERATED {n2} OPTIONAL,
+ scs-60kHz-120kHz-r16 ENUMERATED {n2} OPTIONAL
+ } OPTIONAL,
+
+ -- R1 16-2b-1: Support of single-DCI based SDM scheme
+ singleDCI-SDM-scheme-r16 ENUMERATED {supported} OPTIONAL
+}
+
+FeatureSetDownlink-v1700 ::= SEQUENCE {
+ -- R1 36-2: Scaling factor to be applied to 1024QAM for FR1
+ scalingFactor-1024QAM-FR1-r17 ENUMERATED {f0p4, f0p75, f0p8} OPTIONAL,
+ -- R1 24 feature for existing UE cap to include new SCS
+ timeDurationForQCL-v1710 SEQUENCE {
+ scs-480kHz ENUMERATED {s56, s112} OPTIONAL,
+ scs-960kHz ENUMERATED {s112, s224} OPTIONAL
+ } OPTIONAL,
+ -- R1 23-6-1 SFN scheme A (scheme 1) for PDSCH and PDCCH
+ sfn-SchemeA-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 23-6-1-1 SFN scheme A (scheme 1) for PDCCH only
+ sfn-SchemeA-PDCCH-only-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 23-6-1a Dynamic switching - scheme A
+ sfn-SchemeA-DynamicSwitching-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 23-6-1b SFN scheme A (scheme 1) for PDSCH only
+ sfn-SchemeA-PDSCH-only-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 23-6-2 SFN scheme B (TRP based pre-compensation) for PDSCH and PDCCH
+ sfn-SchemeB-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 23-6-2a Dynamic switching - scheme B
+ sfn-SchemeB-DynamicSwitching-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 23-6-2b SFN scheme B (TRP based pre-compensation) for PDSCH only
+ sfn-SchemeB-PDSCH-only-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 23-2-1d PDCCH repetition for Case 2 PDCCH monitoring with a span gap
+ mTRP-PDCCH-Case2-1SpanGap-r17 SEQUENCE {
+ scs-15kHz-r17 PDCCH-RepetitionParameters-r17 OPTIONAL,
+ scs-30kHz-r17 PDCCH-RepetitionParameters-r17 OPTIONAL,
+ scs-60kHz-r17 PDCCH-RepetitionParameters-r17 OPTIONAL,
+ scs-120kHz-r17 PDCCH-RepetitionParameters-r17 OPTIONAL
+ } OPTIONAL,
+ -- R1 23-2-1e PDCCH repetition for Rel-16 PDCCH monitoring
+ mTRP-PDCCH-legacyMonitoring-r17 SEQUENCE {
+ scs-15kHz-r17 PDCCH-RepetitionParameters-r17 OPTIONAL,
+ scs-30kHz-r17 PDCCH-RepetitionParameters-r17 OPTIONAL
+ } OPTIONAL,
+ -- R1 23-2-4 Simultaneous configuration of PDCCH repetition and multi-DCI based multi-TRP
+ mTRP-PDCCH-multiDCI-multiTRP-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 33-2: Dynamic scheduling for multicast for PCell
+ dynamicMulticastPCell-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 23-2-1 PDCCH repetition
+ mTRP-PDCCH-Repetition-r17 SEQUENCE {
+ numBD-twoPDCCH-r17 INTEGER (2..3),
+ maxNumOverlaps-r17 ENUMERATED {n1,n2,n3,n5,n10,n20,n40}
+ } OPTIONAL
+}
+
+FeatureSetDownlink-v1720 ::= SEQUENCE {
+ -- R1 25-19: RTT-based Propagation delay compensation based on CSI-RS for tracking and SRS
+ rtt-BasedPDC-CSI-RS-ForTracking-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 25-19a: RTT-based Propagation delay compensation based on DL PRS for RTT-based PDC and SRS
+ rtt-BasedPDC-PRS-r17 SEQUENCE {
+ maxNumberPRS-Resource-r17 ENUMERATED {n1, n2, n4, n8, n16, n32, n64},
+ maxNumberPRS-ResourceProcessedPerSlot-r17 SEQUENCE {
+ scs-15kHz-r17 ENUMERATED {n1, n2, n4, n6, n8, n12, n16, n24, n32, n48, n64} OPTIONAL,
+ scs-30kHz-r17 ENUMERATED {n1, n2, n4, n6, n8, n12, n16, n24, n32, n48, n64} OPTIONAL,
+ scs-60kHz-r17 ENUMERATED {n1, n2, n4, n6, n8, n12, n16, n24, n32, n48, n64} OPTIONAL,
+ scs-120kHz-r17 ENUMERATED {n1, n2, n4, n6, n8, n12, n16, n24, n32, n48, n64} OPTIONAL
+ }
+ } OPTIONAL,
+ -- R1 33-5-1: SPS group-common PDSCH for multicast on PCell
+ sps-Multicast-r17 ENUMERATED {supported} OPTIONAL
+}
+
+FeatureSetDownlink-v1730 ::= SEQUENCE {
+ -- R1 25-19b: Support of PRS as spatial relation RS for SRS
+ prs-AsSpatialRelationRS-For-SRS-r17 ENUMERATED {supported} OPTIONAL
+}
+
+PDCCH-MonitoringOccasions-r16 ::= SEQUENCE {
+ period7span3-r16 ENUMERATED {supported} OPTIONAL,
+ period4span3-r16 ENUMERATED {supported} OPTIONAL,
+ period2span2-r16 ENUMERATED {supported} OPTIONAL
+}
+
+PDCCH-RepetitionParameters-r17 ::= SEQUENCE {
+ supportedMode-r17 ENUMERATED {intra-span, inter-span, both},
+ limitX-PerCC-r17 ENUMERATED {n4, n8, n16, n32, n44, n64, nolimit} OPTIONAL,
+ limitX-AcrossCC-r17 ENUMERATED {n4, n8, n16, n32, n44, n64, n128, n256, n512, nolimit} OPTIONAL
+}
+
+DummyA ::= SEQUENCE {
+ maxNumberNZP-CSI-RS-PerCC INTEGER (1..32),
+ maxNumberPortsAcrossNZP-CSI-RS-PerCC ENUMERATED {p2, p4, p8, p12, p16, p24, p32, p40, p48, p56, p64, p72, p80,
+ p88, p96, p104, p112, p120, p128, p136, p144, p152, p160, p168,
+ p176, p184, p192, p200, p208, p216, p224, p232, p240, p248, p256},
+ maxNumberCS-IM-PerCC ENUMERATED {n1, n2, n4, n8, n16, n32},
+ maxNumberSimultaneousCSI-RS-ActBWP-AllCC ENUMERATED {n5, n6, n7, n8, n9, n10, n12, n14, n16, n18, n20, n22, n24, n26,
+ n28, n30, n32, n34, n36, n38, n40, n42, n44, n46, n48, n50, n52,
+ n54, n56, n58, n60, n62, n64},
+ totalNumberPortsSimultaneousCSI-RS-ActBWP-AllCC ENUMERATED {p8, p12, p16, p24, p32, p40, p48, p56, p64, p72, p80,
+ p88, p96, p104, p112, p120, p128, p136, p144, p152, p160, p168,
+ p176, p184, p192, p200, p208, p216, p224, p232, p240, p248, p256}
+}
+
+DummyB ::= SEQUENCE {
+ maxNumberTxPortsPerResource ENUMERATED {p2, p4, p8, p12, p16, p24, p32},
+ maxNumberResources INTEGER (1..64),
+ totalNumberTxPorts INTEGER (2..256),
+ supportedCodebookMode ENUMERATED {mode1, mode1AndMode2},
+ maxNumberCSI-RS-PerResourceSet INTEGER (1..8)
+}
+
+DummyC ::= SEQUENCE {
+ maxNumberTxPortsPerResource ENUMERATED {p8, p16, p32},
+ maxNumberResources INTEGER (1..64),
+ totalNumberTxPorts INTEGER (2..256),
+ supportedCodebookMode ENUMERATED {mode1, mode2, both},
+ supportedNumberPanels ENUMERATED {n2, n4},
+ maxNumberCSI-RS-PerResourceSet INTEGER (1..8)
+}
+
+DummyD ::= SEQUENCE {
+ maxNumberTxPortsPerResource ENUMERATED {p4, p8, p12, p16, p24, p32},
+ maxNumberResources INTEGER (1..64),
+ totalNumberTxPorts INTEGER (2..256),
+ parameterLx INTEGER (2..4),
+ amplitudeScalingType ENUMERATED {wideband, widebandAndSubband},
+ amplitudeSubsetRestriction ENUMERATED {supported} OPTIONAL,
+ maxNumberCSI-RS-PerResourceSet INTEGER (1..8)
+}
+
+DummyE ::= SEQUENCE {
+ maxNumberTxPortsPerResource ENUMERATED {p4, p8, p12, p16, p24, p32},
+ maxNumberResources INTEGER (1..64),
+ totalNumberTxPorts INTEGER (2..256),
+ parameterLx INTEGER (2..4),
+ amplitudeScalingType ENUMERATED {wideband, widebandAndSubband},
+ maxNumberCSI-RS-PerResourceSet INTEGER (1..8)
+}
+
+-- TAG-FEATURESETDOWNLINK-STOP
+-- TAG-FEATURESETDOWNLINKID-START
+
+FeatureSetDownlinkId ::= INTEGER (0..maxDownlinkFeatureSets)
+
+-- TAG-FEATURESETDOWNLINKID-STOP
+-- TAG-FEATURESETDOWNLINKPERCC-START
+
+FeatureSetDownlinkPerCC ::= SEQUENCE {
+ supportedSubcarrierSpacingDL SubcarrierSpacing,
+ supportedBandwidthDL SupportedBandwidth,
+ channelBW-90mhz ENUMERATED {supported} OPTIONAL,
+ maxNumberMIMO-LayersPDSCH MIMO-LayersDL OPTIONAL,
+ supportedModulationOrderDL ModulationOrder OPTIONAL
+}
+
+FeatureSetDownlinkPerCC-v1620 ::= SEQUENCE {
+ -- R1 16-2a: Mulit-DCI based multi-TRP
+ multiDCI-MultiTRP-r16 MultiDCI-MultiTRP-r16 OPTIONAL,
+ -- R1 16-2b-3: Support of single-DCI based FDMSchemeB
+ supportFDM-SchemeB-r16 ENUMERATED {supported} OPTIONAL
+}
+
+FeatureSetDownlinkPerCC-v1700 ::= SEQUENCE {
+ supportedMinBandwidthDL-r17 SupportedBandwidth-v1700 OPTIONAL,
+ broadcastSCell-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 33-2g: MIMO layers for multicast PDSCH
+ maxNumberMIMO-LayersMulticastPDSCH-r17 ENUMERATED {n2, n4, n8} OPTIONAL,
+ -- R1 33-2h: Dynamic scheduling for multicast for SCell
+ dynamicMulticastSCell-r17 ENUMERATED {supported} OPTIONAL,
+ supportedBandwidthDL-v1710 SupportedBandwidth-v1700 OPTIONAL,
+ -- R4 24-1/24-2/24-3/24-4/24-5
+ supportedCRS-InterfMitigation-r17 CRS-InterfMitigation-r17 OPTIONAL
+}
+
+FeatureSetDownlinkPerCC-v1720 ::= SEQUENCE {
+ -- R1 33-2j: Supported maximum modulation order used for maximum data rate calculation for multicast PDSCH
+ maxModulationOrderForMulticastDataRateCalculation-r17 ENUMERATED {qam64, qam256, qam1024} OPTIONAL,
+ -- R1 33-1-2: FDM-ed unicast PDSCH and group-common PDSCH for broadcast
+ fdm-BroadcastUnicast-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 33-3-2: FDM-ed unicast PDSCH and one group-common PDSCH for multicast
+ fdm-MulticastUnicast-r17 ENUMERATED {supported} OPTIONAL
+}
+
+FeatureSetDownlinkPerCC-v1730 ::= SEQUENCE {
+ -- R1 33-3-3: Intra-slot TDM-ed unicast PDSCH and group-common PDSCH
+ intraSlotTDM-UnicastGroupCommonPDSCH-r17 ENUMERATED {yes, no} OPTIONAL,
+ -- R1 33-5-3: One SPS group-common PDSCH configuration for multicast for SCell
+ sps-MulticastSCell-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 33-5-4: Up to 8 SPS group-common PDSCH configurations per CFR for multicast for SCell
+ sps-MulticastSCellMultiConfig-r17 INTEGER (1..8) OPTIONAL,
+ -- R1 33-1-1: Dynamic slot-level repetition for broadcast MTCH
+ dci-BroadcastWith16Repetitions-r17 ENUMERATED {supported} OPTIONAL
+}
+
+MultiDCI-MultiTRP-r16 ::= SEQUENCE {
+ maxNumberCORESET-r16 ENUMERATED {n2, n3, n4, n5},
+ maxNumberCORESETPerPoolIndex-r16 INTEGER (1..3),
+ maxNumberUnicastPDSCH-PerPool-r16 ENUMERATED {n1, n2, n3, n4, n7}
+}
+
+CRS-InterfMitigation-r17 ::= SEQUENCE {
+ -- R4 24-1 CRS-IM (Interference Mitigation) in DSS scenario
+ crs-IM-DSS-15kHzSCS-r17 ENUMERATED {supported} OPTIONAL,
+ -- R4 24-2 CRS-IM in non-DSS and 15 kHz NR SCS scenario, without the assistance of network signaling on LTE channel bandwidth
+ crs-IM-nonDSS-15kHzSCS-r17 ENUMERATED {supported} OPTIONAL,
+ -- R4 24-3 CRS-IM in non-DSS and 15 kHz NR SCS scenario, with the assistance of network signaling on LTE channel bandwidth
+ crs-IM-nonDSS-NWA-15kHzSCS-r17 ENUMERATED {supported} OPTIONAL,
+ -- R4 24-4 CRS-IM in non-DSS and 30 kHz NR SCS scenario, without the assistance of network signaling on LTE channel bandwidth
+ crs-IM-nonDSS-30kHzSCS-r17 ENUMERATED {supported} OPTIONAL,
+ -- R4 24-5 CRS-IM in non-DSS and 30 kHz NR SCS scenario, with the assistance of network signaling on LTE channel bandwidth
+ crs-IM-nonDSS-NWA-30kHzSCS-r17 ENUMERATED {supported} OPTIONAL
+}
+
+-- TAG-FEATURESETDOWNLINKPERCC-STOP
+-- TAG-FEATURESETDOWNLINKPERCC-ID-START
+
+FeatureSetDownlinkPerCC-Id ::= INTEGER (1..maxPerCC-FeatureSets)
+
+-- TAG-FEATURESETDOWNLINKPERCC-ID-STOP
+-- TAG-FEATURESETEUTRADOWNLINKID-START
+
+FeatureSetEUTRA-DownlinkId ::= INTEGER (0..maxEUTRA-DL-FeatureSets)
+
+-- TAG-FEATURESETEUTRADOWNLINKID-STOP
+-- TAG-FEATURESETEUTRAUPLINKID-START
+
+FeatureSetEUTRA-UplinkId ::= INTEGER (0..maxEUTRA-UL-FeatureSets)
+
+-- TAG-FEATURESETEUTRAUPLINKID-STOP
+-- TAG-FEATURESETS-START
+
+FeatureSets ::= SEQUENCE {
+ featureSetsDownlink SEQUENCE (SIZE (1..maxDownlinkFeatureSets)) OF FeatureSetDownlink OPTIONAL,
+ featureSetsDownlinkPerCC SEQUENCE (SIZE (1..maxPerCC-FeatureSets)) OF FeatureSetDownlinkPerCC OPTIONAL,
+ featureSetsUplink SEQUENCE (SIZE (1..maxUplinkFeatureSets)) OF FeatureSetUplink OPTIONAL,
+ featureSetsUplinkPerCC SEQUENCE (SIZE (1..maxPerCC-FeatureSets)) OF FeatureSetUplinkPerCC OPTIONAL,
+ ...,
+ [[
+ featureSetsDownlink-v1540 SEQUENCE (SIZE (1..maxDownlinkFeatureSets)) OF FeatureSetDownlink-v1540 OPTIONAL,
+ featureSetsUplink-v1540 SEQUENCE (SIZE (1..maxUplinkFeatureSets)) OF FeatureSetUplink-v1540 OPTIONAL,
+ featureSetsUplinkPerCC-v1540 SEQUENCE (SIZE (1..maxPerCC-FeatureSets)) OF FeatureSetUplinkPerCC-v1540 OPTIONAL
+ ]],
+ [[
+ featureSetsDownlink-v15a0 SEQUENCE (SIZE (1..maxDownlinkFeatureSets)) OF FeatureSetDownlink-v15a0 OPTIONAL
+ ]],
+ [[
+ featureSetsDownlink-v1610 SEQUENCE (SIZE (1..maxDownlinkFeatureSets)) OF FeatureSetDownlink-v1610 OPTIONAL,
+ featureSetsUplink-v1610 SEQUENCE (SIZE (1..maxUplinkFeatureSets)) OF FeatureSetUplink-v1610 OPTIONAL,
+ featureSetDownlinkPerCC-v1620 SEQUENCE (SIZE (1..maxPerCC-FeatureSets)) OF FeatureSetDownlinkPerCC-v1620 OPTIONAL
+ ]],
+ [[
+ featureSetsUplink-v1630 SEQUENCE (SIZE (1..maxUplinkFeatureSets)) OF FeatureSetUplink-v1630 OPTIONAL
+ ]],
+ [[
+ featureSetsUplink-v1640 SEQUENCE (SIZE (1..maxUplinkFeatureSets)) OF FeatureSetUplink-v1640 OPTIONAL
+ ]],
+ [[
+ featureSetsDownlink-v1700 SEQUENCE (SIZE (1..maxDownlinkFeatureSets)) OF FeatureSetDownlink-v1700 OPTIONAL,
+ featureSetsDownlinkPerCC-v1700 SEQUENCE (SIZE (1..maxPerCC-FeatureSets)) OF FeatureSetDownlinkPerCC-v1700 OPTIONAL,
+ featureSetsUplink-v1710 SEQUENCE (SIZE (1..maxUplinkFeatureSets)) OF FeatureSetUplink-v1710 OPTIONAL,
+ featureSetsUplinkPerCC-v1700 SEQUENCE (SIZE (1..maxPerCC-FeatureSets)) OF FeatureSetUplinkPerCC-v1700 OPTIONAL
+ ]],
+ [[
+ featureSetsDownlink-v1720 SEQUENCE (SIZE (1..maxDownlinkFeatureSets)) OF FeatureSetDownlink-v1720 OPTIONAL,
+ featureSetsDownlinkPerCC-v1720 SEQUENCE (SIZE (1..maxPerCC-FeatureSets)) OF FeatureSetDownlinkPerCC-v1720 OPTIONAL,
+ featureSetsUplink-v1720 SEQUENCE (SIZE (1..maxUplinkFeatureSets)) OF FeatureSetUplink-v1720 OPTIONAL
+ ]],
+ [[
+ featureSetsDownlink-v1730 SEQUENCE (SIZE (1..maxDownlinkFeatureSets)) OF FeatureSetDownlink-v1730 OPTIONAL,
+ featureSetsDownlinkPerCC-v1730 SEQUENCE (SIZE (1..maxPerCC-FeatureSets)) OF FeatureSetDownlinkPerCC-v1730 OPTIONAL
+ ]]
+}
+
+-- TAG-FEATURESETS-STOP
+-- TAG-FEATURESETUPLINK-START
+
+FeatureSetUplink ::= SEQUENCE {
+ featureSetListPerUplinkCC SEQUENCE (SIZE (1.. maxNrofServingCells)) OF FeatureSetUplinkPerCC-Id,
+ scalingFactor ENUMERATED {f0p4, f0p75, f0p8} OPTIONAL,
+ dummy3 ENUMERATED {supported} OPTIONAL,
+ intraBandFreqSeparationUL FreqSeparationClass OPTIONAL,
+ searchSpaceSharingCA-UL ENUMERATED {supported} OPTIONAL,
+ dummy1 DummyI OPTIONAL,
+ supportedSRS-Resources SRS-Resources OPTIONAL,
+ twoPUCCH-Group ENUMERATED {supported} OPTIONAL,
+ dynamicSwitchSUL ENUMERATED {supported} OPTIONAL,
+ simultaneousTxSUL-NonSUL ENUMERATED {supported} OPTIONAL,
+ pusch-ProcessingType1-DifferentTB-PerSlot SEQUENCE {
+ scs-15kHz ENUMERATED {upto2, upto4, upto7} OPTIONAL,
+ scs-30kHz ENUMERATED {upto2, upto4, upto7} OPTIONAL,
+ scs-60kHz ENUMERATED {upto2, upto4, upto7} OPTIONAL,
+ scs-120kHz ENUMERATED {upto2, upto4, upto7} OPTIONAL
+ } OPTIONAL,
+ dummy2 DummyF OPTIONAL
+}
+
+FeatureSetUplink-v1540 ::= SEQUENCE {
+ zeroSlotOffsetAperiodicSRS ENUMERATED {supported} OPTIONAL,
+ pa-PhaseDiscontinuityImpacts ENUMERATED {supported} OPTIONAL,
+ pusch-SeparationWithGap ENUMERATED {supported} OPTIONAL,
+ pusch-ProcessingType2 SEQUENCE {
+ scs-15kHz ProcessingParameters OPTIONAL,
+ scs-30kHz ProcessingParameters OPTIONAL,
+ scs-60kHz ProcessingParameters OPTIONAL
+ } OPTIONAL,
+ ul-MCS-TableAlt-DynamicIndication ENUMERATED {supported} OPTIONAL
+}
+
+FeatureSetUplink-v1610 ::= SEQUENCE {
+ -- R1 11-5: PUsCH repetition Type B
+ pusch-RepetitionTypeB-r16 SEQUENCE {
+ maxNumberPUSCH-Tx-r16 ENUMERATED {n2, n3, n4, n7, n8, n12},
+ hoppingScheme-r16 ENUMERATED {interSlotHopping, interRepetitionHopping, both}
+ } OPTIONAL,
+ -- R1 11-7: UL cancelation scheme for self-carrier
+ ul-CancellationSelfCarrier-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 11-7a: UL cancelation scheme for cross-carrier
+ ul-CancellationCrossCarrier-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 16-5c: The maximum number of SRS resources in one SRS resource set with usage set to 'codebook' for Mode 2
+ ul-FullPwrMode2-MaxSRS-ResInSet-r16 ENUMERATED {n1, n2, n4} OPTIONAL,
+
+ -- R1 22-4a/4b/4c/4d: CBG based transmission for UL with unicast PUSCH(s) per slot per CC with UE processing time Capability 1
+ cbgPUSCH-ProcessingType1-DifferentTB-PerSlot-r16 SEQUENCE {
+ scs-15kHz-r16 ENUMERATED {one-pusch, upto2, upto4, upto7} OPTIONAL,
+ scs-30kHz-r16 ENUMERATED {one-pusch, upto2, upto4, upto7} OPTIONAL,
+ scs-60kHz-r16 ENUMERATED {one-pusch, upto2, upto4, upto7} OPTIONAL,
+ scs-120kHz-r16 ENUMERATED {one-pusch, upto2, upto4, upto7} OPTIONAL
+ } OPTIONAL,
+
+ -- R1 22-3a/3b/3c/3d: CBG based transmission for UL with unicast PUSCH(s) per slot per CC with UE processing time Capability 2
+ cbgPUSCH-ProcessingType2-DifferentTB-PerSlot-r16 SEQUENCE {
+ scs-15kHz-r16 ENUMERATED {one-pusch, upto2, upto4, upto7} OPTIONAL,
+ scs-30kHz-r16 ENUMERATED {one-pusch, upto2, upto4, upto7} OPTIONAL,
+ scs-60kHz-r16 ENUMERATED {one-pusch, upto2, upto4, upto7} OPTIONAL,
+ scs-120kHz-r16 ENUMERATED {one-pusch, upto2, upto4, upto7} OPTIONAL
+ } OPTIONAL,
+ supportedSRS-PosResources-r16 SRS-AllPosResources-r16 OPTIONAL,
+ intraFreqDAPS-UL-r16 SEQUENCE {
+ dummy ENUMERATED {supported} OPTIONAL,
+ intraFreqTwoTAGs-DAPS-r16 ENUMERATED {supported} OPTIONAL,
+ dummy1 ENUMERATED {supported} OPTIONAL,
+ dummy2 ENUMERATED {supported} OPTIONAL,
+ dummy3 ENUMERATED {short, long} OPTIONAL
+ } OPTIONAL,
+ intraBandFreqSeparationUL-v1620 FreqSeparationClassUL-v1620 OPTIONAL,
+
+ -- R1 11-3: More than one PUCCH for HARQ-ACK transmission within a slot
+ multiPUCCH-r16 SEQUENCE {
+ sub-SlotConfig-NCP-r16 ENUMERATED {set1, set2} OPTIONAL,
+ sub-SlotConfig-ECP-r16 ENUMERATED {set1, set2} OPTIONAL
+ } OPTIONAL,
+ -- R1 11-3c: 2 PUCCH of format 0 or 2 for a single 7*2-symbol subslot based HARQ-ACK codebook
+ twoPUCCH-Type1-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 11-3d: 2 PUCCH of format 0 or 2 for a single 2*7-symbol subslot based HARQ-ACK codebook
+ twoPUCCH-Type2-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 11-3e: 1 PUCCH format 0 or 2 and 1 PUCCH format 1, 3 or 4 in the same subslot for a single 2*7-symbol HARQ-ACK codebooks
+ twoPUCCH-Type3-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 11-3f: 2 PUCCH transmissions in the same subslot for a single 2*7-symbol HARQ-ACK codebooks which are not covered by 11-3d and
+ -- 11-3e
+ twoPUCCH-Type4-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 11-3g: SR/HARQ-ACK multiplexing once per subslot using a PUCCH (or HARQ-ACK piggybacked on a PUSCH) when SR/HARQ-ACK
+ -- are supposed to be sent with different starting symbols in a subslot
+ mux-SR-HARQ-ACK-r16 ENUMERATED {supported} OPTIONAL,
+ dummy1 ENUMERATED {supported} OPTIONAL,
+ dummy2 ENUMERATED {supported} OPTIONAL,
+ -- R1 11-4c: 2 PUCCH of format 0 or 2 for two HARQ-ACK codebooks with one 7*2-symbol sub-slot based HARQ-ACK codebook
+ twoPUCCH-Type5-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 11-4d: 2 PUCCH of format 0 or 2 in consecutive symbols for two HARQ-ACK codebooks with one 2*7-symbol sub-slot based HARQ-ACK
+ -- codebook
+ twoPUCCH-Type6-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 11-4e: 2 PUCCH of format 0 or 2 for two subslot based HARQ-ACK codebooks
+ twoPUCCH-Type7-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 11-4f: 1 PUCCH format 0 or 2 and 1 PUCCH format 1, 3 or 4 in the same subslot for HARQ-ACK codebooks with one 2*7-symbol
+ -- subslot based HARQ-ACK codebook
+ twoPUCCH-Type8-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 11-4g: 1 PUCCH format 0 or 2 and 1 PUCCH format 1, 3 or 4 in the same subslot for two subslot based HARQ-ACK codebooks
+ twoPUCCH-Type9-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 11-4h: 2 PUCCH transmissions in the same subslot for two HARQ-ACK codebooks with one 2*7-symbol subslot which are not covered
+ -- by 11-4c and 11-4e
+ twoPUCCH-Type10-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 11-4i: 2 PUCCH transmissions in the same subslot for two subslot based HARQ-ACK codebooks which are not covered by 11-4d and
+ -- 11-4f
+ twoPUCCH-Type11-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 12-1: UL intra-UE multiplexing/prioritization of overlapping channel/signals with two priority levels in physical layer
+ ul-IntraUE-Mux-r16 SEQUENCE {
+ pusch-PreparationLowPriority-r16 ENUMERATED {sym0, sym1, sym2},
+ pusch-PreparationHighPriority-r16 ENUMERATED {sym0, sym1, sym2}
+ } OPTIONAL,
+ -- R1 16-5a: Supported UL full power transmission mode of fullpower
+ ul-FullPwrMode-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 18-5d: Processing up to X unicast DCI scheduling for UL per scheduled CC
+ crossCarrierSchedulingProcessing-DiffSCS-r16 SEQUENCE {
+ scs-15kHz-120kHz-r16 ENUMERATED {n1,n2,n4} OPTIONAL,
+ scs-15kHz-60kHz-r16 ENUMERATED {n1,n2,n4} OPTIONAL,
+ scs-30kHz-120kHz-r16 ENUMERATED {n1,n2,n4} OPTIONAL,
+ scs-15kHz-30kHz-r16 ENUMERATED {n2} OPTIONAL,
+ scs-30kHz-60kHz-r16 ENUMERATED {n2} OPTIONAL,
+ scs-60kHz-120kHz-r16 ENUMERATED {n2} OPTIONAL
+ } OPTIONAL,
+ -- R1 16-5b: Supported UL full power transmission mode of fullpowerMode1
+ ul-FullPwrMode1-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 16-5c-2: Ports configuration for Mode 2
+ ul-FullPwrMode2-SRSConfig-diffNumSRSPorts-r16 ENUMERATED {p1-2, p1-4, p1-2-4} OPTIONAL,
+ -- R1 16-5c-3: TPMI group for Mode 2
+ ul-FullPwrMode2-TPMIGroup-r16 SEQUENCE {
+ twoPorts-r16 BIT STRING(SIZE(2)) OPTIONAL,
+ fourPortsNonCoherent-r16 ENUMERATED{g0, g1, g2, g3} OPTIONAL,
+ fourPortsPartialCoherent-r16 ENUMERATED{g0, g1, g2, g3, g4, g5, g6} OPTIONAL
+ } OPTIONAL
+}
+
+FeatureSetUplink-v1630 ::= SEQUENCE {
+ -- R1 22-8: For SRS for CB PUSCH and antenna switching on FR1 with symbol level offset for aperiodic SRS transmission
+ offsetSRS-CB-PUSCH-Ant-Switch-fr1-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 22-8a: PDCCH monitoring on any span of up to 3 consecutive OFDM symbols of a slot and constrained timeline for SRS for CB
+ -- PUSCH and antenna switching on FR1
+ offsetSRS-CB-PUSCH-PDCCH-MonitorSingleOcc-fr1-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 22-8b: For type 1 CSS with dedicated RRC configuration, type 3 CSS, and UE-SS, monitoring occasion can be any OFDM symbol(s)
+ -- of a slot for Case 2 and constrained timeline for SRS for CB PUSCH and antenna switching on FR1
+ offsetSRS-CB-PUSCH-PDCCH-MonitorAnyOccWithoutGap-fr1-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 22-8c: For type 1 CSS with dedicated RRC configuration, type 3 CSS, and UE-SS, monitoring occasion can be any OFDM symbol(s)
+ -- of a slot for Case 2 with a DCI gap and constrained timeline for SRS for CB PUSCH and antenna switching on FR1
+ offsetSRS-CB-PUSCH-PDCCH-MonitorAnyOccWithGap-fr1-r16 ENUMERATED {supported} OPTIONAL,
+ dummy ENUMERATED {supported} OPTIONAL,
+ -- R1 22-9: Cancellation of PUCCH, PUSCH or PRACH with a DCI scheduling a PDSCH or CSI-RS or a DCI format 2_0 for SFI
+ partialCancellationPUCCH-PUSCH-PRACH-TX-r16 ENUMERATED {supported} OPTIONAL
+}
+
+FeatureSetUplink-v1640 ::= SEQUENCE {
+ -- R1 11-4: Two HARQ-ACK codebooks with up to one sub-slot based HARQ-ACK codebook (i.e. slot-based + slot-based, or slot-based +
+ -- sub-slot based) simultaneously constructed for supporting HARQ-ACK codebooks with different priorities at a UE
+ twoHARQ-ACK-Codebook-type1-r16 SubSlot-Config-r16 OPTIONAL,
+ -- R1 11-4a: Two sub-slot based HARQ-ACK codebooks simultaneously constructed for supporting HARQ-ACK codebooks with different
+ -- priorities at a UE
+ twoHARQ-ACK-Codebook-type2-r16 SubSlot-Config-r16 OPTIONAL,
+ -- R1 22-8d: All PDCCH monitoring occasion can be any OFDM symbol(s) of a slot for Case 2 with a span gap and constrained timeline
+ -- for SRS for CB PUSCH and antenna switching on FR1
+ offsetSRS-CB-PUSCH-PDCCH-MonitorAnyOccWithSpanGap-fr1-r16 SEQUENCE {
+ scs-15kHz-r16 ENUMERATED {set1, set2, set3} OPTIONAL,
+ scs-30kHz-r16 ENUMERATED {set1, set2, set3} OPTIONAL,
+ scs-60kHz-r16 ENUMERATED {set1, set2, set3} OPTIONAL
+ } OPTIONAL
+}
+
+FeatureSetUplink-v1710 ::= SEQUENCE {
+ -- R1 23-3-1 Multi-TRP PUSCH repetition (type A) -codebook based
+ mTRP-PUSCH-TypeA-CB-r17 ENUMERATED {n1,n2,n4} OPTIONAL,
+ -- R1 23-3-1-2 Multi-TRP PUSCH repetition (type A) - non-codebook based
+ mTRP-PUSCH-RepetitionTypeA-r17 ENUMERATED {n1,n2,n3,n4} OPTIONAL,
+ -- R1 23-3-3 Multi-TRP PUCCH repetition-intra-slot
+ mTRP-PUCCH-IntraSlot-r17 ENUMERATED {pf0-2, pf1-3-4, pf0-4} OPTIONAL,
+ -- R1 23-8-4 Maximum 2 SP and 1 periodic SRS sets for antenna switching
+ srs-AntennaSwitching2SP-1Periodic-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 23-8-9 Extension of aperiodic SRS configuration for 1T4R, 1T2R and 2T4R
+ srs-ExtensionAperiodicSRS-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 23-8-10 1 aperiodic SRS resource set for 1T4R
+ srs-OneAP-SRS-r17 ENUMERATED {supported} OPTIONAL,
+ -- R4 16-8 UE power class per band per band combination
+ ue-PowerClassPerBandPerBC-r17 ENUMERATED {pc1dot5, pc2, pc3} OPTIONAL,
+ -- R4 17-8 UL transmission in FR2 bands within an UL gap when the UL gap is activated
+ tx-Support-UL-GapFR2-r17 ENUMERATED {supported} OPTIONAL
+}
+
+FeatureSetUplink-v1720 ::= SEQUENCE {
+ -- R1 25-3: Repetitions for PUCCH format 0, 1, 2, 3 and 4 over multiple PUCCH subslots with configured K = 2, 4, 8
+ pucch-Repetition-F0-1-2-3-4-RRC-Config-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 25-3a: Repetitions for PUCCH format 0, 1, 2, 3 and 4 over multiple PUCCH subslots using dynamic repetition indication
+ pucch-Repetition-F0-1-2-3-4-DynamicIndication-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 25-3b: Inter-subslot frequency hopping for PUCCH repetitions
+ interSubslotFreqHopping-PUCCH-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 25-8: Semi-static HARQ-ACK codebook for sub-slot PUCCH
+ semiStaticHARQ-ACK-CodebookSub-SlotPUCCH-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 25-14: PHY prioritization of overlapping low-priority DG-PUSCH and high-priority CG-PUSCH
+ phy-PrioritizationLowPriorityDG-HighPriorityCG-r17 INTEGER(1..16) OPTIONAL,
+ -- R1 25-15: PHY prioritization of overlapping high-priority DG-PUSCH and low-priority CG-PUSCH
+ phy-PrioritizationHighPriorityDG-LowPriorityCG-r17 SEQUENCE {
+ pusch-PreparationLowPriority-r17 ENUMERATED{sym0, sym1, sym2},
+ additionalCancellationTime-r17 SEQUENCE {
+ scs-15kHz-r17 ENUMERATED{sym0, sym1, sym2} OPTIONAL,
+ scs-30kHz-r17 ENUMERATED{sym0, sym1, sym2, sym3, sym4} OPTIONAL,
+ scs-60kHz-r17 ENUMERATED{sym0, sym1, sym2, sym3, sym4, sym5, sym6, sym7, sym8} OPTIONAL,
+ scs-120kHz-r17 ENUMERATED{sym0, sym1, sym2, sym3, sym4, sym5, sym6, sym7, sym8, sym9,
+ sym10, sym11, sym12, sym13, sym14, sym15, sym16} OPTIONAL
+ },
+ maxNumberCarriers-r17 INTEGER(1..16)
+ } OPTIONAL,
+ -- R4 17-5 Support of UL DC location(s) report
+ extendedDC-LocationReport-r17 ENUMERATED {supported} OPTIONAL
+}
+
+SubSlot-Config-r16 ::= SEQUENCE {
+ sub-SlotConfig-NCP-r16 ENUMERATED {n4,n5,n6,n7} OPTIONAL,
+ sub-SlotConfig-ECP-r16 ENUMERATED {n4,n5,n6} OPTIONAL
+}
+
+SRS-AllPosResources-r16 ::= SEQUENCE {
+ srs-PosResources-r16 SRS-PosResources-r16,
+ srs-PosResourceAP-r16 SRS-PosResourceAP-r16 OPTIONAL,
+ srs-PosResourceSP-r16 SRS-PosResourceSP-r16 OPTIONAL
+}
+
+SRS-PosResources-r16 ::= SEQUENCE {
+ maxNumberSRS-PosResourceSetPerBWP-r16 ENUMERATED {n1, n2, n4, n8, n12, n16},
+ maxNumberSRS-PosResourcesPerBWP-r16 ENUMERATED {n1, n2, n4, n8, n16, n32, n64},
+ maxNumberSRS-ResourcesPerBWP-PerSlot-r16 ENUMERATED {n1, n2, n3, n4, n5, n6, n8, n10, n12, n14},
+ maxNumberPeriodicSRS-PosResourcesPerBWP-r16 ENUMERATED {n1, n2, n4, n8, n16, n32, n64},
+ maxNumberPeriodicSRS-PosResourcesPerBWP-PerSlot-r16 ENUMERATED {n1, n2, n3, n4, n5, n6, n8, n10, n12, n14}
+}
+
+SRS-PosResourceAP-r16 ::= SEQUENCE {
+ maxNumberAP-SRS-PosResourcesPerBWP-r16 ENUMERATED {n1, n2, n4, n8, n16, n32, n64},
+ maxNumberAP-SRS-PosResourcesPerBWP-PerSlot-r16 ENUMERATED {n1, n2, n3, n4, n5, n6, n8, n10, n12, n14}
+}
+
+SRS-PosResourceSP-r16 ::= SEQUENCE {
+ maxNumberSP-SRS-PosResourcesPerBWP-r16 ENUMERATED {n1, n2, n4, n8, n16, n32, n64},
+ maxNumberSP-SRS-PosResourcesPerBWP-PerSlot-r16 ENUMERATED {n1, n2, n3, n4, n5, n6, n8, n10, n12, n14}
+}
+
+SRS-Resources ::= SEQUENCE {
+ maxNumberAperiodicSRS-PerBWP ENUMERATED {n1, n2, n4, n8, n16},
+ maxNumberAperiodicSRS-PerBWP-PerSlot INTEGER (1..6),
+ maxNumberPeriodicSRS-PerBWP ENUMERATED {n1, n2, n4, n8, n16},
+ maxNumberPeriodicSRS-PerBWP-PerSlot INTEGER (1..6),
+ maxNumberSemiPersistentSRS-PerBWP ENUMERATED {n1, n2, n4, n8, n16},
+ maxNumberSemiPersistentSRS-PerBWP-PerSlot INTEGER (1..6),
+ maxNumberSRS-Ports-PerResource ENUMERATED {n1, n2, n4}
+}
+
+DummyF ::= SEQUENCE {
+ maxNumberPeriodicCSI-ReportPerBWP INTEGER (1..4),
+ maxNumberAperiodicCSI-ReportPerBWP INTEGER (1..4),
+ maxNumberSemiPersistentCSI-ReportPerBWP INTEGER (0..4),
+ simultaneousCSI-ReportsAllCC INTEGER (5..32)
+}
+
+-- TAG-FEATURESETUPLINK-STOP
+-- TAG-FEATURESETUPLINKID-START
+
+FeatureSetUplinkId ::= INTEGER (0..maxUplinkFeatureSets)
+
+-- TAG-FEATURESETUPLINKID-STOP
+-- TAG-FEATURESETUPLINKPERCC-START
+
+FeatureSetUplinkPerCC ::= SEQUENCE {
+ supportedSubcarrierSpacingUL SubcarrierSpacing,
+ supportedBandwidthUL SupportedBandwidth,
+ channelBW-90mhz ENUMERATED {supported} OPTIONAL,
+ mimo-CB-PUSCH SEQUENCE {
+ maxNumberMIMO-LayersCB-PUSCH MIMO-LayersUL OPTIONAL,
+ maxNumberSRS-ResourcePerSet INTEGER (1..2)
+ } OPTIONAL,
+ maxNumberMIMO-LayersNonCB-PUSCH MIMO-LayersUL OPTIONAL,
+ supportedModulationOrderUL ModulationOrder OPTIONAL
+}
+FeatureSetUplinkPerCC-v1540 ::= SEQUENCE {
+ mimo-NonCB-PUSCH SEQUENCE {
+ maxNumberSRS-ResourcePerSet INTEGER (1..4),
+ maxNumberSimultaneousSRS-ResourceTx INTEGER (1..4)
+ } OPTIONAL
+}
+
+FeatureSetUplinkPerCC-v1700 ::= SEQUENCE {
+ supportedMinBandwidthUL-r17 SupportedBandwidth-v1700 OPTIONAL,
+ -- R1 23-3-1-3 FeMIMO: Multi-TRP PUSCH repetition (type B) - non-codebook based
+ mTRP-PUSCH-RepetitionTypeB-r17 ENUMERATED {n1,n2,n3,n4} OPTIONAL,
+ -- R1 23-3-1-1 -codebook based Multi-TRP PUSCH repetition (type B)
+ mTRP-PUSCH-TypeB-CB-r17 ENUMERATED {n1,n2,n4} OPTIONAL,
+ supportedBandwidthUL-v1710 SupportedBandwidth-v1700 OPTIONAL
+}
+
+-- TAG-FEATURESETUPLINKPERCC-STOP
+-- TAG-FEATURESETUPLINKPERCC-ID-START
+
+FeatureSetUplinkPerCC-Id ::= INTEGER (1..maxPerCC-FeatureSets)
+
+-- TAG-FEATURESETUPLINKPERCC-ID-STOP
+-- TAG-FREQBANDINDICATOREUTRA-START
+
+FreqBandIndicatorEUTRA ::= INTEGER (1..maxBandsEUTRA)
+
+-- TAG-FREQBANDINDICATOREUTRA-STOP
+-- TAG-FREQBANDLIST-START
+
+FreqBandList ::= SEQUENCE (SIZE (1..maxBandsMRDC)) OF FreqBandInformation
+
+FreqBandInformation ::= CHOICE {
+ bandInformationEUTRA FreqBandInformationEUTRA,
+ bandInformationNR FreqBandInformationNR
+}
+
+FreqBandInformationEUTRA ::= SEQUENCE {
+ bandEUTRA FreqBandIndicatorEUTRA,
+ ca-BandwidthClassDL-EUTRA CA-BandwidthClassEUTRA OPTIONAL, -- Need N
+ ca-BandwidthClassUL-EUTRA CA-BandwidthClassEUTRA OPTIONAL -- Need N
+}
+
+FreqBandInformationNR ::= SEQUENCE {
+ bandNR FreqBandIndicatorNR,
+ maxBandwidthRequestedDL AggregatedBandwidth OPTIONAL, -- Need N
+ maxBandwidthRequestedUL AggregatedBandwidth OPTIONAL, -- Need N
+ maxCarriersRequestedDL INTEGER (1..maxNrofServingCells) OPTIONAL, -- Need N
+ maxCarriersRequestedUL INTEGER (1..maxNrofServingCells) OPTIONAL -- Need N
+}
+
+AggregatedBandwidth ::= ENUMERATED {mhz50, mhz100, mhz150, mhz200, mhz250, mhz300, mhz350,
+ mhz400, mhz450, mhz500, mhz550, mhz600, mhz650, mhz700, mhz750, mhz800}
+
+-- TAG-FREQBANDLIST-STOP
+-- TAG-FREQSEPARATIONCLASS-START
+
+FreqSeparationClass ::= ENUMERATED { mhz800, mhz1200, mhz1400, ..., mhz400-v1650, mhz600-v1650}
+
+FreqSeparationClassDL-v1620 ::= ENUMERATED {mhz1000, mhz1600, mhz1800, mhz2000, mhz2200, mhz2400}
+
+FreqSeparationClassUL-v1620 ::= ENUMERATED {mhz1000}
+
+-- TAG-FREQSEPARATIONCLASS-STOP
+-- TAG-FREQSEPARATIONCLASSDL-Only-START
+
+FreqSeparationClassDL-Only-r16 ::= ENUMERATED {mhz200, mhz400, mhz600, mhz800, mhz1000, mhz1200}
+
+-- TAG-FREQSEPARATIONCLASSDL-Only-STOP
+-- TAG-FR2-2-ACCESSPARAMSPERBAND-START
+
+FR2-2-AccessParamsPerBand-r17 ::= SEQUENCE {
+ -- R1 24-1: Basic FR2-2 DL support
+ dl-FR2-2-SCS-120kHz-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 24-1a: Basic FR2-2 UL support
+ ul-FR2-2-SCS-120kHz-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 24-2: 120KHz SSB support for initial access in FR2-2
+ initialAccessSSB-120kHz-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 24-1b: Wideband PRACH for 120 kHz in FR2-2
+ widebandPRACH-SCS-120kHz-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 24-1c: Multi-RB support PUCCH format 0/1/4 for 120 kHz in FR2-2
+ multiRB-PUCCH-SCS-120kHz-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 24-1d: Multiple PDSCH scheduling by single DCI for 120kHz in FR2-2
+ multiPDSCH-SingleDCI-FR2-2-SCS-120kHz-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 24-1e: Multiple PUSCH scheduling by single DCI for 120kHz in FR2-2
+ multiPUSCH-SingleDCI-FR2-2-SCS-120kHz-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 24-4: 480KHz SCS support for DL
+ dl-FR2-2-SCS-480kHz-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 24-4a: 480KHz SCS support for UL
+ ul-FR2-2-SCS-480kHz-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 24-3: 480KHz SSB support for initial access in FR2-2
+ initialAccessSSB-480kHz-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 24-4b: Wideband PRACH for 480 kHz in FR2-2
+ widebandPRACH-SCS-480kHz-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 24-4c: Multi-RB support PUCCH format 0/1/4 for 480 kHz in FR2-2
+ multiRB-PUCCH-SCS-480kHz-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 24-4f: Enhanced PDCCH monitoring for 480KHz in FR2-2
+ enhancedPDCCH-monitoringSCS-480kHz-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 24-5: 960KHz SCS support for DL
+ dl-FR2-2-SCS-960kHz-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 24-5a: 960KHz SCS support for UL
+ ul-FR2-2-SCS-960kHz-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 24-5c: Multi-RB support PUCCH format 0/1/4 for 960 kHz in FR2-2
+ multiRB-PUCCH-SCS-960kHz-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 24-5f: Enhanced PDCCH monitoring for 960KHz in FR2-2
+ enhancedPDCCH-monitoringSCS-960kHz-r17 SEQUENCE {
+ pdcch-monitoring4-1-r17 ENUMERATED {supported} OPTIONAL,
+ pdcch-monitoring4-2-r17 ENUMERATED {supported} OPTIONAL,
+ pdcch-monitoring8-4-r17 ENUMERATED {supported} OPTIONAL
+ } OPTIONAL,
+ -- R1 24-6: Type 1 channel access procedure in uplink for FR2-2 with shared spectrum channel access
+ type1-ChannelAccess-FR2-2-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 24-7: Type 2 channel access procedure in uplink for FR2-2 with shared spectrum channel access
+ type2-ChannelAccess-FR2-2-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 24-10: Reduced beam switching time delay
+ reduced-BeamSwitchTiming-FR2-2-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 24-8: 32 DL HARQ processes for FR 2-2
+ support32-DL-HARQ-ProcessPerSCS-r17 SEQUENCE {
+ scs-120kHz-r17 ENUMERATED {supported} OPTIONAL,
+ scs-480kHz-r17 ENUMERATED {supported} OPTIONAL,
+ scs-960kHz-r17 ENUMERATED {supported} OPTIONAL
+ } OPTIONAL,
+ -- R1 24-9: 32 UL HARQ processes for FR 2-2
+ support32-UL-HARQ-ProcessPerSCS-r17 SEQUENCE {
+ scs-120kHz-r17 ENUMERATED {supported} OPTIONAL,
+ scs-480kHz-r17 ENUMERATED {supported} OPTIONAL,
+ scs-960kHz-r17 ENUMERATED {supported} OPTIONAL
+ } OPTIONAL,
+ ...,
+ [[
+ -- R4 15-1: 64QAM for PUSCH for FR2-2
+ modulation64-QAM-PUSCH-FR2-2-r17 ENUMERATED {supported} OPTIONAL
+ ]]
+}
+
+-- TAG-FR2-2-ACCESSPARAMSPERBAND-STOP
+-- TAG-HIGHSPEEDPARAMETERS-START
+
+HighSpeedParameters-r16 ::= SEQUENCE {
+ measurementEnhancement-r16 ENUMERATED {supported} OPTIONAL,
+ demodulationEnhancement-r16 ENUMERATED {supported} OPTIONAL
+}
+
+HighSpeedParameters-v1650 ::= CHOICE {
+ intraNR-MeasurementEnhancement-r16 ENUMERATED {supported},
+ interRAT-MeasurementEnhancement-r16 ENUMERATED {supported}
+}
+
+HighSpeedParameters-v1700 ::= SEQUENCE {
+ -- R4 18-1: Enhanced RRM requirements specified for CA for FR1 HST
+ measurementEnhancementCA-r17 ENUMERATED {supported} OPTIONAL,
+ -- R4 18-2: Enhanced RRM requirements specified for inter-frequency measurement in connected mode for FR1 HST
+ measurementEnhancementInterFreq-r17 ENUMERATED {supported} OPTIONAL
+}
+
+-- TAG-HIGHSPEEDPARAMETERS-STOP
+-- TAG-IMS-PARAMETERS-START
+
+IMS-Parameters ::= SEQUENCE {
+ ims-ParametersCommon IMS-ParametersCommon OPTIONAL,
+ ims-ParametersFRX-Diff IMS-ParametersFRX-Diff OPTIONAL,
+ ...
+}
+
+IMS-Parameters-v1700 ::= SEQUENCE {
+ ims-ParametersFR2-2-r17 IMS-ParametersFR2-2-r17 OPTIONAL
+}
+
+IMS-ParametersCommon ::= SEQUENCE {
+ voiceOverEUTRA-5GC ENUMERATED {supported} OPTIONAL,
+ ...,
+ [[
+ voiceOverSCG-BearerEUTRA-5GC ENUMERATED {supported} OPTIONAL
+ ]],
+ [[
+ voiceFallbackIndicationEPS-r16 ENUMERATED {supported} OPTIONAL
+ ]]
+}
+
+IMS-ParametersFRX-Diff ::= SEQUENCE {
+ voiceOverNR ENUMERATED {supported} OPTIONAL,
+ ...
+}
+
+IMS-ParametersFR2-2-r17 ::= SEQUENCE {
+ voiceOverNR-r17 ENUMERATED {supported} OPTIONAL,
+ ...
+}
+
+-- TAG-IMS-PARAMETERS-STOP
+-- TAG-INTERRAT-PARAMETERS-START
+
+InterRAT-Parameters ::= SEQUENCE {
+ eutra EUTRA-Parameters OPTIONAL,
+ ...,
+ [[
+ utra-FDD-r16 UTRA-FDD-Parameters-r16 OPTIONAL
+ ]]
+
+}
+
+EUTRA-Parameters ::= SEQUENCE {
+ supportedBandListEUTRA SEQUENCE (SIZE (1..maxBandsEUTRA)) OF FreqBandIndicatorEUTRA,
+ eutra-ParametersCommon EUTRA-ParametersCommon OPTIONAL,
+ eutra-ParametersXDD-Diff EUTRA-ParametersXDD-Diff OPTIONAL,
+ ...
+}
+
+EUTRA-ParametersCommon ::= SEQUENCE {
+ mfbi-EUTRA ENUMERATED {supported} OPTIONAL,
+ modifiedMPR-BehaviorEUTRA BIT STRING (SIZE (32)) OPTIONAL,
+ multiNS-Pmax-EUTRA ENUMERATED {supported} OPTIONAL,
+ rs-SINR-MeasEUTRA ENUMERATED {supported} OPTIONAL,
+ ...,
+ [[
+ ne-DC ENUMERATED {supported} OPTIONAL
+ ]],
+ [[
+ nr-HO-ToEN-DC-r16 ENUMERATED {supported} OPTIONAL
+ ]]
+}
+
+EUTRA-ParametersXDD-Diff ::= SEQUENCE {
+ rsrqMeasWidebandEUTRA ENUMERATED {supported} OPTIONAL,
+ ...
+}
+
+UTRA-FDD-Parameters-r16 ::= SEQUENCE {
+ supportedBandListUTRA-FDD-r16 SEQUENCE (SIZE (1..maxBandsUTRA-FDD-r16)) OF SupportedBandUTRA-FDD-r16,
+ ...
+}
+
+SupportedBandUTRA-FDD-r16 ::= ENUMERATED {
+ bandI, bandII, bandIII, bandIV, bandV, bandVI,
+ bandVII, bandVIII, bandIX, bandX, bandXI,
+ bandXII, bandXIII, bandXIV, bandXV, bandXVI,
+ bandXVII, bandXVIII, bandXIX, bandXX,
+ bandXXI, bandXXII, bandXXIII, bandXXIV,
+ bandXXV, bandXXVI, bandXXVII, bandXXVIII,
+ bandXXIX, bandXXX, bandXXXI, bandXXXII}
+
+-- TAG-INTERRAT-PARAMETERS-STOP
+-- TAG-MAC-PARAMETERS-START
+
+MAC-Parameters ::= SEQUENCE {
+ mac-ParametersCommon MAC-ParametersCommon OPTIONAL,
+ mac-ParametersXDD-Diff MAC-ParametersXDD-Diff OPTIONAL
+}
+
+MAC-Parameters-v1610 ::= SEQUENCE {
+ mac-ParametersFRX-Diff-r16 MAC-ParametersFRX-Diff-r16 OPTIONAL
+}
+
+MAC-Parameters-v1700 ::= SEQUENCE {
+ mac-ParametersFR2-2-r17 MAC-ParametersFR2-2-r17 OPTIONAL
+}
+
+MAC-ParametersCommon ::= SEQUENCE {
+ lcp-Restriction ENUMERATED {supported} OPTIONAL,
+ dummy ENUMERATED {supported} OPTIONAL,
+ lch-ToSCellRestriction ENUMERATED {supported} OPTIONAL,
+ ...,
+ [[
+ recommendedBitRate ENUMERATED {supported} OPTIONAL,
+ recommendedBitRateQuery ENUMERATED {supported} OPTIONAL
+ ]],
+ [[
+ recommendedBitRateMultiplier-r16 ENUMERATED {supported} OPTIONAL,
+ preEmptiveBSR-r16 ENUMERATED {supported} OPTIONAL,
+ autonomousTransmission-r16 ENUMERATED {supported} OPTIONAL,
+ lch-PriorityBasedPrioritization-r16 ENUMERATED {supported} OPTIONAL,
+ lch-ToConfiguredGrantMapping-r16 ENUMERATED {supported} OPTIONAL,
+ lch-ToGrantPriorityRestriction-r16 ENUMERATED {supported} OPTIONAL,
+ singlePHR-P-r16 ENUMERATED {supported} OPTIONAL,
+ ul-LBT-FailureDetectionRecovery-r16 ENUMERATED {supported} OPTIONAL,
+ -- R4 8-1: MPE
+ tdd-MPE-P-MPR-Reporting-r16 ENUMERATED {supported} OPTIONAL,
+ lcid-ExtensionIAB-r16 ENUMERATED {supported} OPTIONAL
+ ]],
+ [[
+ spCell-BFR-CBRA-r16 ENUMERATED {supported} OPTIONAL
+ ]],
+ [[
+ srs-ResourceId-Ext-r16 ENUMERATED {supported} OPTIONAL
+ ]],
+ [[
+ enhancedUuDRX-forSidelink-r17 ENUMERATED {supported} OPTIONAL,
+ --27-10: Support of UL MAC CE based MG activation request for PRS measurements
+ mg-ActivationRequestPRS-Meas-r17 ENUMERATED {supported} OPTIONAL,
+ --27-11: Support of DL MAC CE based MG activation request for PRS measurements
+ mg-ActivationCommPRS-Meas-r17 ENUMERATED {supported} OPTIONAL,
+ intraCG-Prioritization-r17 ENUMERATED {supported} OPTIONAL,
+ jointPrioritizationCG-Retx-Timer-r17 ENUMERATED {supported} OPTIONAL,
+ survivalTime-r17 ENUMERATED {supported} OPTIONAL,
+ lcg-ExtensionIAB-r17 ENUMERATED {supported} OPTIONAL,
+ harq-FeedbackDisabled-r17 ENUMERATED {supported} OPTIONAL,
+ uplink-Harq-ModeB-r17 ENUMERATED {supported} OPTIONAL,
+ sr-TriggeredBy-TA-Report-r17 ENUMERATED {supported} OPTIONAL,
+ extendedDRX-CycleInactive-r17 ENUMERATED {supported} OPTIONAL,
+ simultaneousSR-PUSCH-DiffPUCCH-groups-r17 ENUMERATED {supported} OPTIONAL,
+ lastTransmissionUL-r17 ENUMERATED {supported} OPTIONAL
+ ]]
+}
+
+MAC-ParametersFRX-Diff-r16 ::= SEQUENCE {
+ directMCG-SCellActivation-r16 ENUMERATED {supported} OPTIONAL,
+ directMCG-SCellActivationResume-r16 ENUMERATED {supported} OPTIONAL,
+ directSCG-SCellActivation-r16 ENUMERATED {supported} OPTIONAL,
+ directSCG-SCellActivationResume-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 19-1: DRX Adaptation
+ drx-Adaptation-r16 SEQUENCE {
+ non-SharedSpectrumChAccess-r16 MinTimeGap-r16 OPTIONAL,
+ sharedSpectrumChAccess-r16 MinTimeGap-r16 OPTIONAL
+ } OPTIONAL,
+ ...
+}
+
+MAC-ParametersFR2-2-r17 ::= SEQUENCE {
+ directMCG-SCellActivation-r17 ENUMERATED {supported} OPTIONAL,
+ directMCG-SCellActivationResume-r17 ENUMERATED {supported} OPTIONAL,
+ directSCG-SCellActivation-r17 ENUMERATED {supported} OPTIONAL,
+ directSCG-SCellActivationResume-r17 ENUMERATED {supported} OPTIONAL,
+ drx-Adaptation-r17 SEQUENCE {
+ non-SharedSpectrumChAccess-r17 MinTimeGapFR2-2-r17 OPTIONAL,
+ sharedSpectrumChAccess-r17 MinTimeGapFR2-2-r17 OPTIONAL
+ } OPTIONAL,
+ ...
+}
+
+MAC-ParametersXDD-Diff ::= SEQUENCE {
+ skipUplinkTxDynamic ENUMERATED {supported} OPTIONAL,
+ logicalChannelSR-DelayTimer ENUMERATED {supported} OPTIONAL,
+ longDRX-Cycle ENUMERATED {supported} OPTIONAL,
+ shortDRX-Cycle ENUMERATED {supported} OPTIONAL,
+ multipleSR-Configurations ENUMERATED {supported} OPTIONAL,
+ multipleConfiguredGrants ENUMERATED {supported} OPTIONAL,
+ ...,
+ [[
+ secondaryDRX-Group-r16 ENUMERATED {supported} OPTIONAL
+ ]],
+ [[
+ enhancedSkipUplinkTxDynamic-r16 ENUMERATED {supported} OPTIONAL,
+ enhancedSkipUplinkTxConfigured-r16 ENUMERATED {supported} OPTIONAL
+ ]]
+}
+
+MinTimeGap-r16 ::= SEQUENCE {
+ scs-15kHz-r16 ENUMERATED {sl1, sl3} OPTIONAL,
+ scs-30kHz-r16 ENUMERATED {sl1, sl6} OPTIONAL,
+ scs-60kHz-r16 ENUMERATED {sl1, sl12} OPTIONAL,
+ scs-120kHz-r16 ENUMERATED {sl2, sl24} OPTIONAL
+}
+
+MinTimeGapFR2-2-r17 ::= SEQUENCE {
+ scs-120kHz-r17 ENUMERATED {sl2, sl24} OPTIONAL,
+ scs-480kHz-r17 ENUMERATED {sl8, sl96} OPTIONAL,
+ scs-960kHz-r17 ENUMERATED {sl16, sl192} OPTIONAL
+}
+
+-- TAG-MAC-PARAMETERS-STOP
+-- TAG-MEASANDMOBPARAMETERS-START
+
+MeasAndMobParameters ::= SEQUENCE {
+ measAndMobParametersCommon MeasAndMobParametersCommon OPTIONAL,
+ measAndMobParametersXDD-Diff MeasAndMobParametersXDD-Diff OPTIONAL,
+ measAndMobParametersFRX-Diff MeasAndMobParametersFRX-Diff OPTIONAL
+}
+
+MeasAndMobParameters-v1700 ::= SEQUENCE {
+ measAndMobParametersFR2-2-r17 MeasAndMobParametersFR2-2-r17 OPTIONAL
+}
+
+MeasAndMobParametersCommon ::= SEQUENCE {
+ supportedGapPattern BIT STRING (SIZE (22)) OPTIONAL,
+ ssb-RLM ENUMERATED {supported} OPTIONAL,
+ ssb-AndCSI-RS-RLM ENUMERATED {supported} OPTIONAL,
+ ...,
+ [[
+ eventB-MeasAndReport ENUMERATED {supported} OPTIONAL,
+ handoverFDD-TDD ENUMERATED {supported} OPTIONAL,
+ eutra-CGI-Reporting ENUMERATED {supported} OPTIONAL,
+ nr-CGI-Reporting ENUMERATED {supported} OPTIONAL
+ ]],
+ [[
+ independentGapConfig ENUMERATED {supported} OPTIONAL,
+ periodicEUTRA-MeasAndReport ENUMERATED {supported} OPTIONAL,
+ handoverFR1-FR2 ENUMERATED {supported} OPTIONAL,
+ maxNumberCSI-RS-RRM-RS-SINR ENUMERATED {n4, n8, n16, n32, n64, n96} OPTIONAL
+ ]],
+ [[
+ nr-CGI-Reporting-ENDC ENUMERATED {supported} OPTIONAL
+ ]],
+ [[
+ eutra-CGI-Reporting-NEDC ENUMERATED {supported} OPTIONAL,
+ eutra-CGI-Reporting-NRDC ENUMERATED {supported} OPTIONAL,
+ nr-CGI-Reporting-NEDC ENUMERATED {supported} OPTIONAL,
+ nr-CGI-Reporting-NRDC ENUMERATED {supported} OPTIONAL
+ ]],
+ [[
+ reportAddNeighMeasForPeriodic-r16 ENUMERATED {supported} OPTIONAL,
+ condHandoverParametersCommon-r16 SEQUENCE {
+ condHandoverFDD-TDD-r16 ENUMERATED {supported} OPTIONAL,
+ condHandoverFR1-FR2-r16 ENUMERATED {supported} OPTIONAL
+ } OPTIONAL,
+ nr-NeedForGap-Reporting-r16 ENUMERATED {supported} OPTIONAL,
+ supportedGapPattern-NRonly-r16 BIT STRING (SIZE (10)) OPTIONAL,
+ supportedGapPattern-NRonly-NEDC-r16 ENUMERATED {supported} OPTIONAL,
+ maxNumberCLI-RSSI-r16 ENUMERATED {n8, n16, n32, n64} OPTIONAL,
+ maxNumberCLI-SRS-RSRP-r16 ENUMERATED {n4, n8, n16, n32} OPTIONAL,
+ maxNumberPerSlotCLI-SRS-RSRP-r16 ENUMERATED {n2, n4, n8} OPTIONAL,
+ mfbi-IAB-r16 ENUMERATED {supported} OPTIONAL,
+ dummy ENUMERATED {supported} OPTIONAL,
+ nr-CGI-Reporting-NPN-r16 ENUMERATED {supported} OPTIONAL,
+ idleInactiveEUTRA-MeasReport-r16 ENUMERATED {supported} OPTIONAL,
+ idleInactive-ValidityArea-r16 ENUMERATED {supported} OPTIONAL,
+ eutra-AutonomousGaps-r16 ENUMERATED {supported} OPTIONAL,
+ eutra-AutonomousGaps-NEDC-r16 ENUMERATED {supported} OPTIONAL,
+ eutra-AutonomousGaps-NRDC-r16 ENUMERATED {supported} OPTIONAL,
+ pcellT312-r16 ENUMERATED {supported} OPTIONAL,
+ supportedGapPattern-r16 BIT STRING (SIZE (2)) OPTIONAL
+ ]],
+ [[
+ -- R4 19-2 Concurrent measurement gaps
+ concurrentMeasGap-r17 CHOICE {
+ concurrentPerUE-OnlyMeasGap-r17 ENUMERATED {supported},
+ concurrentPerUE-PerFRCombMeasGap-r17 ENUMERATED {supported}
+ } OPTIONAL,
+ -- R4 19-1 Network controlled small gap (NCSG)
+ nr-NeedForGapNCSG-Reporting-r17 ENUMERATED {supported} OPTIONAL,
+ eutra-NeedForGapNCSG-Reporting-r17 ENUMERATED {supported} OPTIONAL,
+ -- R4 19-1-1 per FR Network controlled small gap (NCSG)
+ ncsg-MeasGapPerFR-r17 ENUMERATED {supported} OPTIONAL,
+ -- R4 19-1-2 Network controlled small gap (NCSG) supported patterns
+ ncsg-MeasGapPatterns-r17 BIT STRING (SIZE(24)) OPTIONAL,
+ -- R4 19-1-3 Network controlled small gap (NCSG) supported NR-only patterns
+ ncsg-MeasGapNR-Patterns-r17 BIT STRING (SIZE(24)) OPTIONAL,
+ -- R4 19-3-2 pre-configured measurement gap
+ preconfiguredUE-AutonomousMeasGap-r17 ENUMERATED {supported} OPTIONAL,
+ -- R4 19-3-1 pre-configured measurement gap
+ preconfiguredNW-ControlledMeasGap-r17 ENUMERATED {supported} OPTIONAL,
+ handoverFR1-FR2-2-r17 ENUMERATED {supported} OPTIONAL,
+ handoverFR2-1-FR2-2-r17 ENUMERATED {supported} OPTIONAL,
+ -- RAN4 14-1: per-FR MG for PRS measurement
+ independentGapConfigPRS-r17 ENUMERATED {supported} OPTIONAL,
+ rrm-RelaxationRRC-ConnectedRedCap-r17 ENUMERATED {supported} OPTIONAL,
+ -- R4 25-3: Parallel measurements with multiple measurement gaps
+ parallelMeasurementGap-r17 ENUMERATED {n2} OPTIONAL,
+ condHandoverWithSCG-NRDC-r17 ENUMERATED {supported} OPTIONAL,
+ gNB-ID-LengthReporting-r17 ENUMERATED {supported} OPTIONAL,
+ gNB-ID-LengthReporting-ENDC-r17 ENUMERATED {supported} OPTIONAL,
+ gNB-ID-LengthReporting-NEDC-r17 ENUMERATED {supported} OPTIONAL,
+ gNB-ID-LengthReporting-NRDC-r17 ENUMERATED {supported} OPTIONAL,
+ gNB-ID-LengthReporting-NPN-r17 ENUMERATED {supported} OPTIONAL
+ ]],
+ [[
+ -- R4 25-1: Parallel measurements on multiple SMTC-s for a single frequency carrier
+ parallelSMTC-r17 ENUMERATED {n4} OPTIONAL,
+ -- R4 19-2-1 Concurrent measurement gaps for EUTRA
+ concurrentMeasGapEUTRA-r17 ENUMERATED {supported} OPTIONAL,
+ serviceLinkPropDelayDiffReporting-r17 ENUMERATED {supported} OPTIONAL,
+ -- R4 19-1-4 Network controlled small gap (NCSG) performing measurement based on flagderiveSSB-IndexFromCell-inter
+ ncsg-SymbolLevelScheduleRestrictionInter-r17 ENUMERATED {supported} OPTIONAL
+ ]],
+ [[
+ eventD1-MeasReportTrigger-r17 ENUMERATED {supported} OPTIONAL,
+ independentGapConfig-maxCC-r17 SEQUENCE {
+ fr1-Only-r17 INTEGER (1..32) OPTIONAL,
+ fr2-Only-r17 INTEGER (1..32) OPTIONAL,
+ fr1-AndFR2-r17 INTEGER (1..32) OPTIONAL
+ } OPTIONAL
+ ]]
+}
+
+MeasAndMobParametersXDD-Diff ::= SEQUENCE {
+ intraAndInterF-MeasAndReport ENUMERATED {supported} OPTIONAL,
+ eventA-MeasAndReport ENUMERATED {supported} OPTIONAL,
+ ...,
+ [[
+ handoverInterF ENUMERATED {supported} OPTIONAL,
+ handoverLTE-EPC ENUMERATED {supported} OPTIONAL,
+ handoverLTE-5GC ENUMERATED {supported} OPTIONAL
+ ]],
+ [[
+ sftd-MeasNR-Neigh ENUMERATED {supported} OPTIONAL,
+ sftd-MeasNR-Neigh-DRX ENUMERATED {supported} OPTIONAL
+ ]],
+ [[
+ dummy ENUMERATED {supported} OPTIONAL
+ ]]
+}
+
+MeasAndMobParametersFRX-Diff ::= SEQUENCE {
+ ss-SINR-Meas ENUMERATED {supported} OPTIONAL,
+ csi-RSRP-AndRSRQ-MeasWithSSB ENUMERATED {supported} OPTIONAL,
+ csi-RSRP-AndRSRQ-MeasWithoutSSB ENUMERATED {supported} OPTIONAL,
+ csi-SINR-Meas ENUMERATED {supported} OPTIONAL,
+ csi-RS-RLM ENUMERATED {supported} OPTIONAL,
+ ...,
+ [[
+ handoverInterF ENUMERATED {supported} OPTIONAL,
+ handoverLTE-EPC ENUMERATED {supported} OPTIONAL,
+ handoverLTE-5GC ENUMERATED {supported} OPTIONAL
+ ]],
+ [[
+ maxNumberResource-CSI-RS-RLM ENUMERATED {n2, n4, n6, n8} OPTIONAL
+ ]],
+ [[
+ simultaneousRxDataSSB-DiffNumerology ENUMERATED {supported} OPTIONAL
+ ]],
+ [[
+ nr-AutonomousGaps-r16 ENUMERATED {supported} OPTIONAL,
+ nr-AutonomousGaps-ENDC-r16 ENUMERATED {supported} OPTIONAL,
+ nr-AutonomousGaps-NEDC-r16 ENUMERATED {supported} OPTIONAL,
+ nr-AutonomousGaps-NRDC-r16 ENUMERATED {supported} OPTIONAL,
+ dummy ENUMERATED {supported} OPTIONAL,
+ cli-RSSI-Meas-r16 ENUMERATED {supported} OPTIONAL,
+ cli-SRS-RSRP-Meas-r16 ENUMERATED {supported} OPTIONAL,
+ interFrequencyMeas-NoGap-r16 ENUMERATED {supported} OPTIONAL,
+ simultaneousRxDataSSB-DiffNumerology-Inter-r16 ENUMERATED {supported} OPTIONAL,
+ idleInactiveNR-MeasReport-r16 ENUMERATED {supported} OPTIONAL,
+ -- R4 6-2: Support of beam level Early Measurement Reporting
+ idleInactiveNR-MeasBeamReport-r16 ENUMERATED {supported} OPTIONAL
+ ]],
+ [[
+ increasedNumberofCSIRSPerMO-r16 ENUMERATED {supported} OPTIONAL
+ ]]
+}
+
+MeasAndMobParametersFR2-2-r17 ::= SEQUENCE {
+ handoverInterF-r17 ENUMERATED {supported} OPTIONAL,
+ handoverLTE-EPC-r17 ENUMERATED {supported} OPTIONAL,
+ handoverLTE-5GC-r17 ENUMERATED {supported} OPTIONAL,
+ idleInactiveNR-MeasReport-r17 ENUMERATED {supported} OPTIONAL,
+...
+}
+
+-- TAG-MEASANDMOBPARAMETERS-STOP
+-- TAG-MEASANDMOBPARAMETERSMRDC-START
+
+MeasAndMobParametersMRDC ::= SEQUENCE {
+ measAndMobParametersMRDC-Common MeasAndMobParametersMRDC-Common OPTIONAL,
+ measAndMobParametersMRDC-XDD-Diff MeasAndMobParametersMRDC-XDD-Diff OPTIONAL,
+ measAndMobParametersMRDC-FRX-Diff MeasAndMobParametersMRDC-FRX-Diff OPTIONAL
+}
+
+MeasAndMobParametersMRDC-v1560 ::= SEQUENCE {
+ measAndMobParametersMRDC-XDD-Diff-v1560 MeasAndMobParametersMRDC-XDD-Diff-v1560 OPTIONAL
+}
+
+MeasAndMobParametersMRDC-v1610 ::= SEQUENCE {
+ measAndMobParametersMRDC-Common-v1610 MeasAndMobParametersMRDC-Common-v1610 OPTIONAL,
+ interNR-MeasEUTRA-IAB-r16 ENUMERATED {supported} OPTIONAL
+}
+
+MeasAndMobParametersMRDC-v1700 ::= SEQUENCE {
+ measAndMobParametersMRDC-Common-v1700 MeasAndMobParametersMRDC-Common-v1700 OPTIONAL
+}
+
+MeasAndMobParametersMRDC-v1730 ::= SEQUENCE {
+ measAndMobParametersMRDC-Common-v1730 MeasAndMobParametersMRDC-Common-v1730 OPTIONAL
+}
+
+MeasAndMobParametersMRDC-Common ::= SEQUENCE {
+ independentGapConfig ENUMERATED {supported} OPTIONAL
+}
+
+MeasAndMobParametersMRDC-Common-v1610 ::= SEQUENCE {
+ condPSCellChangeParametersCommon-r16 SEQUENCE {
+ condPSCellChangeFDD-TDD-r16 ENUMERATED {supported} OPTIONAL,
+ condPSCellChangeFR1-FR2-r16 ENUMERATED {supported} OPTIONAL
+ } OPTIONAL,
+ pscellT312-r16 ENUMERATED {supported} OPTIONAL
+}
+
+MeasAndMobParametersMRDC-Common-v1700 ::= SEQUENCE {
+ condPSCellChangeParameters-r17 SEQUENCE {
+ inter-SN-condPSCellChangeFDD-TDD-NRDC-r17 ENUMERATED {supported} OPTIONAL,
+ inter-SN-condPSCellChangeFR1-FR2-NRDC-r17 ENUMERATED {supported} OPTIONAL,
+ inter-SN-condPSCellChangeFDD-TDD-ENDC-r17 ENUMERATED {supported} OPTIONAL,
+ inter-SN-condPSCellChangeFR1-FR2-ENDC-r17 ENUMERATED {supported} OPTIONAL,
+ mn-InitiatedCondPSCellChange-FR1FDD-ENDC-r17 ENUMERATED {supported} OPTIONAL,
+ mn-InitiatedCondPSCellChange-FR1TDD-ENDC-r17 ENUMERATED {supported} OPTIONAL,
+ mn-InitiatedCondPSCellChange-FR2TDD-ENDC-r17 ENUMERATED {supported} OPTIONAL,
+ sn-InitiatedCondPSCellChange-FR1FDD-ENDC-r17 ENUMERATED {supported} OPTIONAL,
+ sn-InitiatedCondPSCellChange-FR1TDD-ENDC-r17 ENUMERATED {supported} OPTIONAL,
+ sn-InitiatedCondPSCellChange-FR2TDD-ENDC-r17 ENUMERATED {supported} OPTIONAL
+ } OPTIONAL,
+ condHandoverWithSCG-ENDC-r17 ENUMERATED {supported} OPTIONAL,
+ condHandoverWithSCG-NEDC-r17 ENUMERATED {supported} OPTIONAL
+}
+
+MeasAndMobParametersMRDC-Common-v1730 ::= SEQUENCE {
+ independentGapConfig-maxCC-r17 SEQUENCE {
+ fr1-Only-r17 INTEGER (1..32) OPTIONAL,
+ fr2-Only-r17 INTEGER (1..32) OPTIONAL,
+ fr1-AndFR2-r17 INTEGER (1..32) OPTIONAL
+ }
+}
+
+MeasAndMobParametersMRDC-XDD-Diff ::= SEQUENCE {
+ sftd-MeasPSCell ENUMERATED {supported} OPTIONAL,
+ sftd-MeasNR-Cell ENUMERATED {supported} OPTIONAL
+}
+
+MeasAndMobParametersMRDC-XDD-Diff-v1560 ::= SEQUENCE {
+ sftd-MeasPSCell-NEDC ENUMERATED {supported} OPTIONAL
+}
+
+MeasAndMobParametersMRDC-FRX-Diff ::= SEQUENCE {
+ simultaneousRxDataSSB-DiffNumerology ENUMERATED {supported} OPTIONAL
+}
+
+-- TAG-MEASANDMOBPARAMETERSMRDC-STOP
+-- TAG-MIMO-LAYERS-START
+
+MIMO-LayersDL ::= ENUMERATED {twoLayers, fourLayers, eightLayers}
+
+MIMO-LayersUL ::= ENUMERATED {oneLayer, twoLayers, fourLayers}
+
+-- TAG-MIMO-LAYERS-STOP
+-- TAG-MIMO-PARAMETERSPERBAND-START
+
+MIMO-ParametersPerBand ::= SEQUENCE {
+ tci-StatePDSCH SEQUENCE {
+ maxNumberConfiguredTCI-StatesPerCC ENUMERATED {n4, n8, n16, n32, n64, n128} OPTIONAL,
+ maxNumberActiveTCI-PerBWP ENUMERATED {n1, n2, n4, n8} OPTIONAL
+ } OPTIONAL,
+ additionalActiveTCI-StatePDCCH ENUMERATED {supported} OPTIONAL,
+ pusch-TransCoherence ENUMERATED {nonCoherent, partialCoherent, fullCoherent} OPTIONAL,
+ beamCorrespondenceWithoutUL-BeamSweeping ENUMERATED {supported} OPTIONAL,
+ periodicBeamReport ENUMERATED {supported} OPTIONAL,
+ aperiodicBeamReport ENUMERATED {supported} OPTIONAL,
+ sp-BeamReportPUCCH ENUMERATED {supported} OPTIONAL,
+ sp-BeamReportPUSCH ENUMERATED {supported} OPTIONAL,
+ dummy1 DummyG OPTIONAL,
+ maxNumberRxBeam INTEGER (2..8) OPTIONAL,
+ maxNumberRxTxBeamSwitchDL SEQUENCE {
+ scs-15kHz ENUMERATED {n4, n7, n14} OPTIONAL,
+ scs-30kHz ENUMERATED {n4, n7, n14} OPTIONAL,
+ scs-60kHz ENUMERATED {n4, n7, n14} OPTIONAL,
+ scs-120kHz ENUMERATED {n4, n7, n14} OPTIONAL,
+ scs-240kHz ENUMERATED {n4, n7, n14} OPTIONAL
+ } OPTIONAL,
+ maxNumberNonGroupBeamReporting ENUMERATED {n1, n2, n4} OPTIONAL,
+ groupBeamReporting ENUMERATED {supported} OPTIONAL,
+ uplinkBeamManagement SEQUENCE {
+ maxNumberSRS-ResourcePerSet-BM ENUMERATED {n2, n4, n8, n16},
+ maxNumberSRS-ResourceSet INTEGER (1..8)
+ } OPTIONAL,
+ maxNumberCSI-RS-BFD INTEGER (1..64) OPTIONAL,
+ maxNumberSSB-BFD INTEGER (1..64) OPTIONAL,
+ maxNumberCSI-RS-SSB-CBD INTEGER (1..256) OPTIONAL,
+ dummy2 ENUMERATED {supported} OPTIONAL,
+ twoPortsPTRS-UL ENUMERATED {supported} OPTIONAL,
+ dummy5 SRS-Resources OPTIONAL,
+ dummy3 INTEGER (1..4) OPTIONAL,
+ beamReportTiming SEQUENCE {
+ scs-15kHz ENUMERATED {sym2, sym4, sym8} OPTIONAL,
+ scs-30kHz ENUMERATED {sym4, sym8, sym14, sym28} OPTIONAL,
+ scs-60kHz ENUMERATED {sym8, sym14, sym28} OPTIONAL,
+ scs-120kHz ENUMERATED {sym14, sym28, sym56} OPTIONAL
+ } OPTIONAL,
+ ptrs-DensityRecommendationSetDL SEQUENCE {
+ scs-15kHz PTRS-DensityRecommendationDL OPTIONAL,
+ scs-30kHz PTRS-DensityRecommendationDL OPTIONAL,
+ scs-60kHz PTRS-DensityRecommendationDL OPTIONAL,
+ scs-120kHz PTRS-DensityRecommendationDL OPTIONAL
+ } OPTIONAL,
+ ptrs-DensityRecommendationSetUL SEQUENCE {
+ scs-15kHz PTRS-DensityRecommendationUL OPTIONAL,
+ scs-30kHz PTRS-DensityRecommendationUL OPTIONAL,
+ scs-60kHz PTRS-DensityRecommendationUL OPTIONAL,
+ scs-120kHz PTRS-DensityRecommendationUL OPTIONAL
+ } OPTIONAL,
+ dummy4 DummyH OPTIONAL,
+ aperiodicTRS ENUMERATED {supported} OPTIONAL,
+ ...,
+ [[
+ dummy6 ENUMERATED {true} OPTIONAL,
+ beamManagementSSB-CSI-RS BeamManagementSSB-CSI-RS OPTIONAL,
+ beamSwitchTiming SEQUENCE {
+ scs-60kHz ENUMERATED {sym14, sym28, sym48, sym224, sym336} OPTIONAL,
+ scs-120kHz ENUMERATED {sym14, sym28, sym48, sym224, sym336} OPTIONAL
+ } OPTIONAL,
+ codebookParameters CodebookParameters OPTIONAL,
+ csi-RS-IM-ReceptionForFeedback CSI-RS-IM-ReceptionForFeedback OPTIONAL,
+ csi-RS-ProcFrameworkForSRS CSI-RS-ProcFrameworkForSRS OPTIONAL,
+ csi-ReportFramework CSI-ReportFramework OPTIONAL,
+ csi-RS-ForTracking CSI-RS-ForTracking OPTIONAL,
+ srs-AssocCSI-RS SEQUENCE (SIZE (1.. maxNrofCSI-RS-Resources)) OF SupportedCSI-RS-Resource OPTIONAL,
+ spatialRelations SpatialRelations OPTIONAL
+ ]],
+ [[
+ -- R1 16-2b-0: Support of default QCL assumption with two TCI states
+ defaultQCL-TwoTCI-r16 ENUMERATED {supported} OPTIONAL,
+ codebookParametersPerBand-r16 CodebookParameters-v1610 OPTIONAL,
+ -- R1 16-1b-3: Support of PUCCH resource groups per BWP for simultaneous spatial relation update
+ simul-SpatialRelationUpdatePUCCHResGroup-r16 ENUMERATED {supported} OPTIONAL,
+
+ -- R1 16-1f: Maximum number of SCells configured for SCell beam failure recovery simultaneously
+ maxNumberSCellBFR-r16 ENUMERATED {n1,n2,n4,n8} OPTIONAL,
+
+ -- R1 16-2c: Supports simultaneous reception with different Type-D for FR2 only
+ simultaneousReceptionDiffTypeD-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 16-1a-1: SSB/CSI-RS for L1-SINR measurement
+ ssb-csirs-SINR-measurement-r16 SEQUENCE {
+ maxNumberSSB-CSIRS-OneTx-CMR-r16 ENUMERATED {n8, n16, n32, n64},
+ maxNumberCSI-IM-NZP-IMR-res-r16 ENUMERATED {n8, n16, n32, n64},
+ maxNumberCSIRS-2Tx-res-r16 ENUMERATED {n0, n4, n8, n16, n32, n64},
+ maxNumberSSB-CSIRS-res-r16 ENUMERATED {n8, n16, n32, n64, n128},
+ maxNumberCSI-IM-NZP-IMR-res-mem-r16 ENUMERATED {n8, n16, n32, n64, n128},
+ supportedCSI-RS-Density-CMR-r16 ENUMERATED {one, three, oneAndThree},
+ maxNumberAperiodicCSI-RS-Res-r16 ENUMERATED {n2, n4, n8, n16, n32, n64},
+ supportedSINR-meas-r16 ENUMERATED {ssbWithCSI-IM, ssbWithNZP-IMR, csirsWithNZP-IMR, csi-RSWithoutIMR} OPTIONAL
+ } OPTIONAL,
+ -- R1 16-1a-2: Non-group based L1-SINR reporting
+ nonGroupSINR-reporting-r16 ENUMERATED {n1, n2, n4} OPTIONAL,
+ -- R1 16-1a-3: Non-group based L1-SINR reporting
+ groupSINR-reporting-r16 ENUMERATED {supported} OPTIONAL,
+
+ multiDCI-multiTRP-Parameters-r16 SEQUENCE {
+ -- R1 16-2a-0: Overlapping PDSCHs in time and fully overlapping in frequency and time
+ overlapPDSCHsFullyFreqTime-r16 INTEGER (1..2) OPTIONAL,
+ -- R1 16-2a-1: Overlapping PDSCHs in time and partially overlapping in frequency and time
+ overlapPDSCHsInTimePartiallyFreq-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 16-2a-2: Out of order operation for DL
+ outOfOrderOperationDL-r16 SEQUENCE {
+ supportPDCCH-ToPDSCH-r16 ENUMERATED {supported} OPTIONAL,
+ supportPDSCH-ToHARQ-ACK-r16 ENUMERATED {supported} OPTIONAL
+ } OPTIONAL,
+ -- R1 16-2a-3: Out of order operation for UL
+ outOfOrderOperationUL-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 16-2a-5: Separate CRS rate matching
+ separateCRS-RateMatching-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 16-2a-6: Default QCL enhancement for multi-DCI based multi-TRP
+ defaultQCL-PerCORESETPoolIndex-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 16-2a-7: Maximum number of activated TCI states
+ maxNumberActivatedTCI-States-r16 SEQUENCE {
+ maxNumberPerCORESET-Pool-r16 ENUMERATED {n1, n2, n4, n8},
+ maxTotalNumberAcrossCORESET-Pool-r16 ENUMERATED {n2, n4, n8, n16}
+ } OPTIONAL
+ } OPTIONAL,
+ singleDCI-SDM-scheme-Parameters-r16 SEQUENCE {
+ -- R1 16-2b-1b: Single-DCI based SDM scheme - Support of new DMRS port entry
+ supportNewDMRS-Port-r16 ENUMERATED {supported1, supported2, supported3} OPTIONAL,
+ -- R1 16-2b-1a: Support of s-port DL PTRS
+ supportTwoPortDL-PTRS-r16 ENUMERATED {supported} OPTIONAL
+ } OPTIONAL,
+ -- R1 16-2b-2: Support of single-DCI based FDMSchemeA
+ supportFDM-SchemeA-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 16-2b-3a: Single-DCI based FDMSchemeB CW soft combining
+ supportCodeWordSoftCombining-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 16-2b-4: Single-DCI based TDMSchemeA
+ supportTDM-SchemeA-r16 ENUMERATED {kb3, kb5, kb10, kb20, noRestriction} OPTIONAL,
+ -- R1 16-2b-5: Single-DCI based inter-slot TDM
+ supportInter-slotTDM-r16 SEQUENCE {
+ supportRepNumPDSCH-TDRA-r16 ENUMERATED {n2, n3, n4, n5, n6, n7, n8, n16},
+ maxTBS-Size-r16 ENUMERATED {kb3, kb5, kb10, kb20, noRestriction},
+ maxNumberTCI-states-r16 INTEGER (1..2)
+ } OPTIONAL,
+ -- R1 16-4: Low PAPR DMRS for PDSCH
+ lowPAPR-DMRS-PDSCH-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 16-6a: Low PAPR DMRS for PUSCH without transform precoding
+ lowPAPR-DMRS-PUSCHwithoutPrecoding-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 16-6b: Low PAPR DMRS for PUCCH
+ lowPAPR-DMRS-PUCCH-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 16-6c: Low PAPR DMRS for PUSCH with transform precoding & pi/2 BPSK
+ lowPAPR-DMRS-PUSCHwithPrecoding-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 16-7: Extension of the maximum number of configured aperiodic CSI report settings
+ csi-ReportFrameworkExt-r16 CSI-ReportFrameworkExt-r16 OPTIONAL,
+ -- R1 16-3a, 16-3a-1, 16-3b, 16-3b-1, 16-8: Individual new codebook types
+ codebookParametersAddition-r16 CodebookParametersAddition-r16 OPTIONAL,
+ -- R1 16-8: Mixed codebook types
+ codebookComboParametersAddition-r16 CodebookComboParametersAddition-r16 OPTIONAL,
+ -- R4 8-2: SSB based beam correspondence
+ beamCorrespondenceSSB-based-r16 ENUMERATED {supported} OPTIONAL,
+ -- R4 8-3: CSI-RS based beam correspondence
+ beamCorrespondenceCSI-RS-based-r16 ENUMERATED {supported} OPTIONAL,
+ beamSwitchTiming-r16 SEQUENCE {
+ scs-60kHz-r16 ENUMERATED {sym224, sym336} OPTIONAL,
+ scs-120kHz-r16 ENUMERATED {sym224, sym336} OPTIONAL
+ } OPTIONAL
+ ]],
+ [[
+ -- R1 16-1a-4: Semi-persistent L1-SINR report on PUCCH
+ semi-PersistentL1-SINR-Report-PUCCH-r16 SEQUENCE {
+ supportReportFormat1-2OFDM-syms-r16 ENUMERATED {supported} OPTIONAL,
+ supportReportFormat4-14OFDM-syms-r16 ENUMERATED {supported} OPTIONAL
+ } OPTIONAL,
+ -- R1 16-1a-5: Semi-persistent L1-SINR report on PUSCH
+ semi-PersistentL1-SINR-Report-PUSCH-r16 ENUMERATED {supported} OPTIONAL
+ ]],
+ [[
+ -- R1 16-1h: Support of 64 configured PUCCH spatial relations
+ spatialRelations-v1640 SEQUENCE {
+ maxNumberConfiguredSpatialRelations-v1640 ENUMERATED {n96, n128, n160, n192, n224, n256, n288, n320}
+ } OPTIONAL,
+ -- R1 16-1i: Support of 64 configured candidate beam RSs for BFR
+ support64CandidateBeamRS-BFR-r16 ENUMERATED {supported} OPTIONAL
+ ]],
+ [[
+ -- R1 16-2a-9: Interpretation of maxNumberMIMO-LayersPDSCH for multi-DCI based mTRP
+ maxMIMO-LayersForMulti-DCI-mTRP-r16 ENUMERATED {supported} OPTIONAL
+ ]],
+ [[
+ supportedSINR-meas-v1670 BIT STRING (SIZE (4)) OPTIONAL
+ ]],
+ [[
+ -- R1 23-8-5 Increased repetition for SRS
+ srs-increasedRepetition-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 23-8-6 Partial frequency sounding of SRS
+ srs-partialFrequencySounding-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 23-8-7 Start RB location hopping for partial frequency SRS
+ srs-startRB-locationHoppingPartial-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 23-8-8 Comb-8 SRS
+ srs-combEight-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 23-9-1 Basic Features of Further Enhanced Port-Selection Type II Codebook (FeType-II) per band information
+ codebookParametersfetype2-r17 CodebookParametersfetype2-r17 OPTIONAL,
+ -- R1 23-3-1-2a Two associated CSI-RS resources
+ mTRP-PUSCH-twoCSI-RS-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 23-3-2 Multi-TRP PUCCH repetition scheme 1 (inter-slot)
+ mTRP-PUCCH-InterSlot-r17 ENUMERATED {pf0-2, pf1-3-4, pf0-4} OPTIONAL,
+ -- R1 23-3-2b Cyclic mapping for multi-TRP PUCCH repetition
+ mTRP-PUCCH-CyclicMapping-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 23-3-2c Second TPC field for multi-TRP PUCCH repetition
+ mTRP-PUCCH-SecondTPC-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 23-5-2 MTRP BFR based on two BFD-RS set
+ mTRP-BFR-twoBFD-RS-Set-r17 SEQUENCE {
+ maxBFD-RS-resourcesPerSetPerBWP-r17 ENUMERATED {n1, n2},
+ maxBFR-r17 INTEGER (1..9),
+ maxBFD-RS-resourcesAcrossSetsPerBWP-r17 ENUMERATED {n2, n3, n4}
+ } OPTIONAL,
+ -- R1 23-5-2a PUCCH-SR resources for MTRP BFRQ - Max number of PUCCH-SR resources for MTRP BFRQ per cell group
+ mTRP-BFR-PUCCH-SR-perCG-r17 ENUMERATED{n1, n2} OPTIONAL,
+ -- R1 23-5-2b Association between a BFD-RS resource set on SpCell and a PUCCH SR resource
+ mTRP-BFR-association-PUCCH-SR-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 23-6-3 Simultaneous activation of two TCI states for PDCCH across multiple CCs (HST/URLLC)
+ sfn-SimulTwoTCI-AcrossMultiCC-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 23-6-4 Default DL beam setup for SFN
+ sfn-DefaultDL-BeamSetup-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 23-6-4a Default UL beam setup for SFN PDCCH(FR2 only)
+ sfn-DefaultUL-BeamSetup-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 23-8-1 SRS triggering offset enhancement
+ srs-TriggeringOffset-r17 ENUMERATED {n1, n2, n4} OPTIONAL,
+ -- R1 23-8-2 Triggering SRS only in DCI 0_1/0_2
+ srs-TriggeringDCI-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 23-9-5 Active CSI-RS resources and ports for mixed codebook types in any slot per band information
+ codebookComboParameterMixedType-r17 CodebookComboParameterMixedType-r17 OPTIONAL,
+ -- R1 23-1-1 Unified TCI [with joint DL/UL TCI update] for intra-cell beam management
+ unifiedJointTCI-r17 SEQUENCE{
+ maxConfiguredJointTCI-r17 ENUMERATED {n8, n12, n16, n24, n32, n48, n64, n128},
+ maxActivatedTCIAcrossCC-r17 ENUMERATED {n1, n2, n4, n8, n16}
+ } OPTIONAL,
+ -- R1 23-1-1b Unified TCI with joint DL/UL TCI update for intra- and inter-cell beam management with more than one MAC-CE
+ unifiedJointTCI-multiMAC-CE-r17 SEQUENCE{
+ minBeamApplicationTime-r17 ENUMERATED {n1, n2, n4, n7, n14, n28, n42, n56, n70, n84, n98, n112, n224, n336}
+ OPTIONAL,
+ maxNumMAC-CE-PerCC ENUMERATED {n2, n3, n4, n5, n6, n7, n8}
+ } OPTIONAL,
+ -- R1 23-1-1d Per BWP TCI state pool configuration for CA mode
+ unifiedJointTCI-perBWP-CA-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 23-1-1e TCI state pool configuration with TCI pool sharing for CA mode
+ unifiedJointTCI-ListSharingCA-r17 ENUMERATED {n1,n2,n4,n8} OPTIONAL,
+ -- R1 23-1-1f Common multi-CC TCI state ID update and activation
+ unifiedJointTCI-commonMultiCC-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 23-1-1g Beam misalignment between the DL source RS in the TCI state
+ unifiedJointTCI-BeamAlignDLRS-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 23-1-1h Association between TCI state and UL PC settings for PUCCH, PUSCH, and SRS
+ unifiedJointTCI-PC-association-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 23-1-1i Indication/configuration of R17 TCI states for aperiodic CSI-RS, PDCCH, PDSCH
+ unifiedJointTCI-Legacy-r17 ENUMERATED {supported} OPTIONAL,
+ -- 23-1-1m Indication/configuration of R17 TCI states for SRS
+ unifiedJointTCI-Legacy-SRS-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 23-1-1j Indication/configuration of R17 TCI states for CORESET #0
+ unifiedJointTCI-Legacy-CORESET0-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 23-1-1c SCell BFR with unified TCI framework (NOTE; pre-requisite is empty)
+ unifiedJointTCI-SCellBFR-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 23-1-1a Unified TCI with joint DL/UL TCI update for inter-cell beam management
+ unifiedJointTCI-InterCell-r17 SEQUENCE{
+ additionalMAC-CE-PerCC-r17 ENUMERATED {n0, n1, n2, n4},
+ additionalMAC-CE-AcrossCC-r17 ENUMERATED {n0, n1, n2, n4}
+ } OPTIONAL,
+ -- R1 23-10-1 Unified TCI with separate DL/UL TCI update for intra-cell beam management
+ unifiedSeparateTCI-r17 SEQUENCE{
+ maxConfiguredDL-TCI-r17 ENUMERATED {n4, n8, n12, n16, n24, n32, n48, n64, n128},
+ maxConfiguredUL-TCI-r17 ENUMERATED {n4, n8, n12, n16, n24, n32, n48, n64},
+ maxActivatedDL-TCIAcrossCC-r17 ENUMERATED {n1, n2, n4, n8, n16},
+ maxActivatedUL-TCIAcrossCC-r17 ENUMERATED {n1, n2, n4, n8, n16}
+ } OPTIONAL,
+ -- R1 23-10-1b Unified TCI with separate DL/UL TCI update for intra-cell beam management with more than one MAC-CE
+ unifiedSeparateTCI-multiMAC-CE-r17 SEQUENCE{
+ minBeamApplicationTime-r17 ENUMERATED {n1, n2, n4, n7, n14, n28, n42, n56, n70, n84, n98, n112, n224, n336},
+ maxActivatedDL-TCIPerCC-r17 INTEGER (2..8),
+ maxActivatedUL-TCIPerCC-r17 INTEGER (2..8)
+ } OPTIONAL,
+ -- R1 23-10-1d Per BWP DL/UL-TCI state pool configuration for CA mode
+ unifiedSeparateTCI-perBWP-CA-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 23-10-1e TCI state pool configuration with DL/UL-TCI pool sharing for CA mode
+ unifiedSeparateTCI-ListSharingCA-r17 SEQUENCE {
+ maxNumListDL-TCI-r17 ENUMERATED {n1,n2,n4,n8} OPTIONAL,
+ maxNumListUL-TCI-r17 ENUMERATED {n1,n2,n4,n8} OPTIONAL
+ } OPTIONAL,
+ -- R1 23-10-1f Common multi-CC DL/UL-TCI state ID update and activation with separate DL/UL TCI update
+ unifiedSeparateTCI-commonMultiCC-r17 ENUMERATED {supported} OPTIONAL,
+ -- 23-10-1m Unified TCI with separate DL/UL TCI update for inter-cell beam management with more than one MAC-CE
+ unifiedSeparateTCI-InterCell-r17 SEQUENCE {
+ k-DL-PerCC-r17 ENUMERATED {n0, n1, n2, n4},
+ k-UL-PerCC-r17 ENUMERATED {n0, n1, n2, n4},
+ k-DL-AcrossCC-r17 ENUMERATED {n0, n1, n2, n4},
+ k-UL-AcrossCC-r17 ENUMERATED {n0, n1, n2, n4}
+ } OPTIONAL,
+ -- R1 23-1-2 Inter-cell beam measurement and reporting (for inter-cell BM and mTRP)
+ unifiedJointTCI-mTRP-InterCell-BM-r17 SEQUENCE {
+ maxNumAdditionalPCI-L1-RSRP-r17 INTEGER (1..7),
+ maxNumSSB-ResourceL1-RSRP-AcrossCC-r17 ENUMERATED {n1,n2,n4,n8}
+ } OPTIONAL,
+ -- R1 23-1-3 MPE mitigation
+ mpe-Mitigation-r17 SEQUENCE {
+ maxNumP-MPR-RI-pairs-r17 INTEGER (1..4),
+ maxNumConfRS-r17 ENUMERATED {n1, n2, n4, n8, n12, n16, n28, n32, n48, n64}
+ } OPTIONAL,
+ -- R1 23-1-4 UE capability value reporting
+ srs-PortReport-r17 SEQUENCE {
+ capVal1-r17 ENUMERATED {n1, n2, n4} OPTIONAL,
+ capVal2-r17 ENUMERATED {n1, n2, n4} OPTIONAL,
+ capVal3-r17 ENUMERATED {n1, n2, n4} OPTIONAL,
+ capVal4-r17 ENUMERATED {n1, n2, n4} OPTIONAL
+ } OPTIONAL,
+ -- R1 23-2-1a Monitoring of individual candidates
+ mTRP-PDCCH-individual-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 23-2-1b PDCCH repetition with PDCCH monitoring on any span of up to 3 consecutive OFDM symbols of a slot
+ mTRP-PDCCH-anySpan-3Symbols-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 23-2-2 Two QCL TypeD for CORESET monitoring in PDCCH repetition
+ mTRP-PDCCH-TwoQCL-TypeD-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 23-3-1-2b CSI-RS processing framework for SRS with two associated CSI-RS resources
+ mTRP-PUSCH-CSI-RS-r17 SEQUENCE {
+ maxNumPeriodicSRS-r17 INTEGER (1..8),
+ maxNumAperiodicSRS-r17 INTEGER (1..8),
+ maxNumSP-SRS-r17 INTEGER (0..8),
+ numSRS-ResourcePerCC-r17 INTEGER (1..16),
+ numSRS-ResourceNonCodebook-r17 INTEGER (1..2)
+ } OPTIONAL,
+ -- R1 23-3-1a Cyclic mapping for Multi-TRP PUSCH repetition
+ mTRP-PUSCH-cyclicMapping-r17 ENUMERATED {typeA,typeB,both} OPTIONAL,
+ -- R1 23-3-1b Second TPC field for Multi-TRP PUSCH repetition
+ mTRP-PUSCH-secondTPC-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 23-3-1c Two PHR reporting
+ mTRP-PUSCH-twoPHR-Reporting-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 23-3-1e A-CSI report
+ mTRP-PUSCH-A-CSI-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 23-3-1f SP-CSI report
+ mTRP-PUSCH-SP-CSI-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 23-3-1g CG PUSCH transmission
+ mTRP-PUSCH-CG-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 23-3-2d Updating two Spatial relation or two sets of power control parameters for PUCCH group
+ mTRP-PUCCH-MAC-CE-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 23-3-2e Maximum number of power control parameter sets configured for multi-TRP PUCCH repetition in FR1
+ mTRP-PUCCH-maxNum-PC-FR1-r17 INTEGER (3..8) OPTIONAL,
+ -- R1 23-4 IntCell-mTRP
+ mTRP-inter-Cell-r17 SEQUENCE {
+ maxNumAdditionalPCI-Case1-r17 INTEGER (1..7),
+ maxNumAdditionalPCI-Case2-r17 INTEGER (0..7)
+ } OPTIONAL,
+ -- R1 23-5-1 Group based L1-RSRP reporting enhancements
+ mTRP-GroupBasedL1-RSRP-r17 SEQUENCE {
+ maxNumBeamGroups-r17 INTEGER (1..4),
+ maxNumRS-WithinSlot-r17 ENUMERATED {n2,n3,n4,n8,n16,n32,n64},
+ maxNumRS-AcrossSlot-r17 ENUMERATED {n8, n16, n32, n64, n128}
+ } OPTIONAL,
+ -- R1 23-5-2c MAC-CE based update of explicit BFD-RS mTRP-PUCCH-IntraSlot-r17 => per band
+ mTRP-BFD-RS-MAC-CE-r17 ENUMERATED {n4, n8, n12, n16, n32, n48, n64 } OPTIONAL,
+ -- R1 23-7-1 Basic Features of CSI Enhancement for Multi-TRP
+ mTRP-CSI-EnhancementPerBand-r17 SEQUENCE {
+ maxNumNZP-CSI-RS-r17 INTEGER (2..8),
+ cSI-Report-mode-r17 ENUMERATED {mode1, mode2, both},
+ supportedComboAcrossCCs-r17 SEQUENCE (SIZE (1..16)) OF CSI-MultiTRP-SupportedCombinations-r17,
+ codebookModeNCJT-r17 ENUMERATED{mode1,mode1And2}
+ } OPTIONAL,
+ -- R1 23-7-1b Active CSI-RS resources and ports in the presence of multi-TRP CSI
+ codebookComboParameterMultiTRP-r17 CodebookComboParameterMultiTRP-r17 OPTIONAL,
+ -- R1 23-7-1a Additional CSI report mode 1
+ mTRP-CSI-additionalCSI-r17 ENUMERATED{x1,x2} OPTIONAL,
+ -- R1 23-7-4 Support of Nmax=2 for Multi-TRP CSI
+ mTRP-CSI-N-Max2-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 23-7-5 CMR sharing
+ mTRP-CSI-CMR-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 23-8-11 Partial frequency sounding of SRS for non-frequency hopping case
+ srs-partialFreqSounding-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1-24 feature: Extend beamSwitchTiming for FR2-2
+ beamSwitchTiming-v1710 SEQUENCE {
+ scs-480kHz ENUMERATED {sym56, sym112, sym192, sym896, sym1344} OPTIONAL,
+ scs-960kHz ENUMERATED {sym112, sym224, sym384, sym1792, sym2688} OPTIONAL
+ } OPTIONAL,
+ -- R1-24 feature: Extend beamSwitchTiming-r16 for FR2-2
+ beamSwitchTiming-r17 SEQUENCE {
+ scs-480kHz-r17 ENUMERATED {sym896, sym1344} OPTIONAL,
+ scs-960kHz-r17 ENUMERATED {sym1792, sym2688} OPTIONAL
+ } OPTIONAL,
+ -- R1-24 feature: Extend beamReportTiming for FR2-2
+ beamReportTiming-v1710 SEQUENCE {
+ scs-480kHz-r17 ENUMERATED {sym56, sym112, sym224} OPTIONAL,
+ scs-960kHz-r17 ENUMERATED {sym112, sym224, sym448} OPTIONAL
+ } OPTIONAL,
+ -- R1-24 feature: Extend maximum number of RX/TX beam switch DL for FR2-2
+ maxNumberRxTxBeamSwitchDL-v1710 SEQUENCE {
+ scs-480kHz-r17 ENUMERATED {n2, n4, n7} OPTIONAL,
+ scs-960kHz-r17 ENUMERATED {n1, n2, n4, n7} OPTIONAL
+ } OPTIONAL
+ ]],
+ [[
+ -- R1-23-1-4a: Semi-persistent/aperiodic capability value report
+ srs-PortReportSP-AP-r17 ENUMERATED {supported} OPTIONAL,
+ maxNumberRxBeam-v1720 INTEGER (9..12) OPTIONAL,
+ -- R1-23-6-5 Support implicit configuration of RS(s) with two TCI states for beam failure detection
+ sfn-ImplicitRS-twoTCI-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1-23-6-6 QCL-TypeD collision handling with CORESET with 2 TCI states
+ sfn-QCL-TypeD-Collision-twoTCI-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1-23-7-1c Basic Features of CSI Enhancement for Multi-TRP - number of CPUs
+ mTRP-CSI-numCPU-r17 ENUMERATED {n2, n3, n4} OPTIONAL
+ ]],
+ [[
+ supportRepNumPDSCH-TDRA-DCI-1-2-r17 ENUMERATED {n2, n3, n4, n5, n6, n7, n8, n16} OPTIONAL
+ ]]
+}
+
+DummyG ::= SEQUENCE {
+ maxNumberSSB-CSI-RS-ResourceOneTx ENUMERATED {n8, n16, n32, n64},
+ maxNumberSSB-CSI-RS-ResourceTwoTx ENUMERATED {n0, n4, n8, n16, n32, n64},
+ supportedCSI-RS-Density ENUMERATED {one, three, oneAndThree}
+}
+
+BeamManagementSSB-CSI-RS ::= SEQUENCE {
+ maxNumberSSB-CSI-RS-ResourceOneTx ENUMERATED {n0, n8, n16, n32, n64},
+ maxNumberCSI-RS-Resource ENUMERATED {n0, n4, n8, n16, n32, n64},
+ maxNumberCSI-RS-ResourceTwoTx ENUMERATED {n0, n4, n8, n16, n32, n64},
+ supportedCSI-RS-Density ENUMERATED {one, three, oneAndThree} OPTIONAL,
+ maxNumberAperiodicCSI-RS-Resource ENUMERATED {n0, n1, n4, n8, n16, n32, n64}
+}
+
+DummyH ::= SEQUENCE {
+ burstLength INTEGER (1..2),
+ maxSimultaneousResourceSetsPerCC INTEGER (1..8),
+ maxConfiguredResourceSetsPerCC INTEGER (1..64),
+ maxConfiguredResourceSetsAllCC INTEGER (1..128)
+}
+
+CSI-RS-ForTracking ::= SEQUENCE {
+ maxBurstLength INTEGER (1..2),
+ maxSimultaneousResourceSetsPerCC INTEGER (1..8),
+ maxConfiguredResourceSetsPerCC INTEGER (1..64),
+ maxConfiguredResourceSetsAllCC INTEGER (1..256)
+}
+
+CSI-RS-IM-ReceptionForFeedback ::= SEQUENCE {
+ maxConfigNumberNZP-CSI-RS-PerCC INTEGER (1..64),
+ maxConfigNumberPortsAcrossNZP-CSI-RS-PerCC INTEGER (2..256),
+ maxConfigNumberCSI-IM-PerCC ENUMERATED {n1, n2, n4, n8, n16, n32},
+ maxNumberSimultaneousNZP-CSI-RS-PerCC INTEGER (1..64),
+ totalNumberPortsSimultaneousNZP-CSI-RS-PerCC INTEGER (2..256)
+}
+
+CSI-RS-ProcFrameworkForSRS ::= SEQUENCE {
+ maxNumberPeriodicSRS-AssocCSI-RS-PerBWP INTEGER (1..4),
+ maxNumberAperiodicSRS-AssocCSI-RS-PerBWP INTEGER (1..4),
+ maxNumberSP-SRS-AssocCSI-RS-PerBWP INTEGER (0..4),
+ simultaneousSRS-AssocCSI-RS-PerCC INTEGER (1..8)
+}
+
+CSI-ReportFramework ::= SEQUENCE {
+ maxNumberPeriodicCSI-PerBWP-ForCSI-Report INTEGER (1..4),
+ maxNumberAperiodicCSI-PerBWP-ForCSI-Report INTEGER (1..4),
+ maxNumberSemiPersistentCSI-PerBWP-ForCSI-Report INTEGER (0..4),
+ maxNumberPeriodicCSI-PerBWP-ForBeamReport INTEGER (1..4),
+ maxNumberAperiodicCSI-PerBWP-ForBeamReport INTEGER (1..4),
+ maxNumberAperiodicCSI-triggeringStatePerCC ENUMERATED {n3, n7, n15, n31, n63, n128},
+ maxNumberSemiPersistentCSI-PerBWP-ForBeamReport INTEGER (0..4),
+ simultaneousCSI-ReportsPerCC INTEGER (1..8)
+}
+
+CSI-ReportFrameworkExt-r16 ::= SEQUENCE {
+ maxNumberAperiodicCSI-PerBWP-ForCSI-ReportExt-r16 INTEGER (5..8)
+}
+
+PTRS-DensityRecommendationDL ::= SEQUENCE {
+ frequencyDensity1 INTEGER (1..276),
+ frequencyDensity2 INTEGER (1..276),
+ timeDensity1 INTEGER (0..29),
+ timeDensity2 INTEGER (0..29),
+ timeDensity3 INTEGER (0..29)
+}
+
+PTRS-DensityRecommendationUL ::= SEQUENCE {
+ frequencyDensity1 INTEGER (1..276),
+ frequencyDensity2 INTEGER (1..276),
+ timeDensity1 INTEGER (0..29),
+ timeDensity2 INTEGER (0..29),
+ timeDensity3 INTEGER (0..29),
+ sampleDensity1 INTEGER (1..276),
+ sampleDensity2 INTEGER (1..276),
+ sampleDensity3 INTEGER (1..276),
+ sampleDensity4 INTEGER (1..276),
+ sampleDensity5 INTEGER (1..276)
+}
+
+SpatialRelations ::= SEQUENCE {
+ maxNumberConfiguredSpatialRelations ENUMERATED {n4, n8, n16, n32, n64, n96},
+ maxNumberActiveSpatialRelations ENUMERATED {n1, n2, n4, n8, n14},
+ additionalActiveSpatialRelationPUCCH ENUMERATED {supported} OPTIONAL,
+ maxNumberDL-RS-QCL-TypeD ENUMERATED {n1, n2, n4, n8, n14}
+}
+
+DummyI ::= SEQUENCE {
+ supportedSRS-TxPortSwitch ENUMERATED {t1r2, t1r4, t2r4, t1r4-t2r4, tr-equal},
+ txSwitchImpactToRx ENUMERATED {true} OPTIONAL
+}
+
+CSI-MultiTRP-SupportedCombinations-r17 ::= SEQUENCE {
+ maxNumTx-Ports-r17 ENUMERATED {n2, n4, n8, n12, n16, n24, n32},
+ maxTotalNumCMR-r17 INTEGER (2..64),
+ maxTotalNumTx-PortsNZP-CSI-RS-r17 INTEGER (2..256)
+}
+
+-- TAG-MIMO-PARAMETERSPERBAND-STOP
+-- TAG-MODULATIONORDER-START
+
+ModulationOrder ::= ENUMERATED {bpsk-halfpi, bpsk, qpsk, qam16, qam64, qam256}
+
+-- TAG-MODULATIONORDER-STOP
+-- TAG-MRDC-PARAMETERS-START
+
+MRDC-Parameters ::= SEQUENCE {
+ singleUL-Transmission ENUMERATED {supported} OPTIONAL,
+ dynamicPowerSharingENDC ENUMERATED {supported} OPTIONAL,
+ tdm-Pattern ENUMERATED {supported} OPTIONAL,
+ ul-SharingEUTRA-NR ENUMERATED {tdm, fdm, both} OPTIONAL,
+ ul-SwitchingTimeEUTRA-NR ENUMERATED {type1, type2} OPTIONAL,
+ simultaneousRxTxInterBandENDC ENUMERATED {supported} OPTIONAL,
+ asyncIntraBandENDC ENUMERATED {supported} OPTIONAL,
+ ...,
+ [[
+ dualPA-Architecture ENUMERATED {supported} OPTIONAL,
+ intraBandENDC-Support ENUMERATED {non-contiguous, both} OPTIONAL,
+ ul-TimingAlignmentEUTRA-NR ENUMERATED {required} OPTIONAL
+ ]]
+}
+
+MRDC-Parameters-v1580 ::= SEQUENCE {
+ dynamicPowerSharingNEDC ENUMERATED {supported} OPTIONAL
+}
+
+MRDC-Parameters-v1590 ::= SEQUENCE {
+ interBandContiguousMRDC ENUMERATED {supported} OPTIONAL
+}
+
+MRDC-Parameters-v15g0 ::= SEQUENCE {
+ simultaneousRxTxInterBandENDCPerBandPair SimultaneousRxTxPerBandPair OPTIONAL
+}
+
+MRDC-Parameters-v1620 ::= SEQUENCE {
+ maxUplinkDutyCycle-interBandENDC-TDD-PC2-r16 SEQUENCE{
+ eutra-TDD-Config0-r16 ENUMERATED {n20, n40, n50, n60, n70, n80, n90, n100} OPTIONAL,
+ eutra-TDD-Config1-r16 ENUMERATED {n20, n40, n50, n60, n70, n80, n90, n100} OPTIONAL,
+ eutra-TDD-Config2-r16 ENUMERATED {n20, n40, n50, n60, n70, n80, n90, n100} OPTIONAL,
+ eutra-TDD-Config3-r16 ENUMERATED {n20, n40, n50, n60, n70, n80, n90, n100} OPTIONAL,
+ eutra-TDD-Config4-r16 ENUMERATED {n20, n40, n50, n60, n70, n80, n90, n100} OPTIONAL,
+ eutra-TDD-Config5-r16 ENUMERATED {n20, n40, n50, n60, n70, n80, n90, n100} OPTIONAL,
+ eutra-TDD-Config6-r16 ENUMERATED {n20, n40, n50, n60, n70, n80, n90, n100} OPTIONAL
+ } OPTIONAL,
+ -- R1 18-2 Single UL TX operation for TDD PCell in EN-DC
+ tdm-restrictionTDD-endc-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 18-2a Single UL TX operation for FDD PCell in EN-DC
+ tdm-restrictionFDD-endc-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 18-2b Support of HARQ-offset for SUO case1 in EN-DC with LTE TDD PCell for type 1 UE
+ singleUL-HARQ-offsetTDD-PCell-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 18-3 Dual Tx transmission for EN-DC with FDD PCell(TDM pattern for dual Tx UE)
+ tdm-restrictionDualTX-FDD-endc-r16 ENUMERATED {supported} OPTIONAL
+}
+
+MRDC-Parameters-v1630 ::= SEQUENCE {
+ -- R4 2-20 Maximum uplink duty cycle for FDD+TDD EN-DC power class 2
+ maxUplinkDutyCycle-interBandENDC-FDD-TDD-PC2-r16 SEQUENCE {
+ maxUplinkDutyCycle-FDD-TDD-EN-DC1-r16 ENUMERATED {n30, n40, n50, n60, n70, n80, n90, n100} OPTIONAL,
+ maxUplinkDutyCycle-FDD-TDD-EN-DC2-r16 ENUMERATED {n30, n40, n50, n60, n70, n80, n90, n100} OPTIONAL
+ } OPTIONAL,
+
+ -- R4 2-19 FDD-FDD or TDD-TDD inter-band MR-DC with overlapping or partially overlapping DL spectrum
+ interBandMRDC-WithOverlapDL-Bands-r16 ENUMERATED {supported} OPTIONAL
+}
+
+MRDC-Parameters-v1700 ::= SEQUENCE {
+ condPSCellAdditionENDC-r17 ENUMERATED {supported} OPTIONAL,
+ scg-ActivationDeactivationENDC-r17 ENUMERATED {supported} OPTIONAL,
+ scg-ActivationDeactivationResumeENDC-r17 ENUMERATED {supported} OPTIONAL
+}
+
+-- TAG-MRDC-PARAMETERS-STOP
+-- TAG-NRDC-PARAMETERS-START
+
+NRDC-Parameters ::= SEQUENCE {
+ measAndMobParametersNRDC MeasAndMobParametersMRDC OPTIONAL,
+ generalParametersNRDC GeneralParametersMRDC-XDD-Diff OPTIONAL,
+ fdd-Add-UE-NRDC-Capabilities UE-MRDC-CapabilityAddXDD-Mode OPTIONAL,
+ tdd-Add-UE-NRDC-Capabilities UE-MRDC-CapabilityAddXDD-Mode OPTIONAL,
+ fr1-Add-UE-NRDC-Capabilities UE-MRDC-CapabilityAddFRX-Mode OPTIONAL,
+ fr2-Add-UE-NRDC-Capabilities UE-MRDC-CapabilityAddFRX-Mode OPTIONAL,
+ dummy2 OCTET STRING OPTIONAL,
+ dummy SEQUENCE {} OPTIONAL
+}
+
+NRDC-Parameters-v1570 ::= SEQUENCE {
+ sfn-SyncNRDC ENUMERATED {supported} OPTIONAL
+}
+
+NRDC-Parameters-v15c0 ::= SEQUENCE {
+ pdcp-DuplicationSplitSRB ENUMERATED {supported} OPTIONAL,
+ pdcp-DuplicationSplitDRB ENUMERATED {supported} OPTIONAL
+}
+
+NRDC-Parameters-v1610 ::= SEQUENCE {
+ measAndMobParametersNRDC-v1610 MeasAndMobParametersMRDC-v1610 OPTIONAL
+}
+
+NRDC-Parameters-v1700 ::= SEQUENCE {
+ f1c-OverNR-RRC-r17 ENUMERATED {supported} OPTIONAL,
+ measAndMobParametersNRDC-v1700 MeasAndMobParametersMRDC-v1700
+}
+
+-- TAG-NRDC-PARAMETERS-STOP
+-- TAG-NTN-PARAMETERS-START
+
+NTN-Parameters-r17 ::= SEQUENCE {
+ inactiveStateNTN-r17 ENUMERATED {supported} OPTIONAL,
+ ra-SDT-NTN-r17 ENUMERATED {supported} OPTIONAL,
+ srb-SDT-NTN-r17 ENUMERATED {supported} OPTIONAL,
+ measAndMobParametersNTN-r17 MeasAndMobParameters OPTIONAL,
+ mac-ParametersNTN-r17 MAC-Parameters OPTIONAL,
+ phy-ParametersNTN-r17 Phy-Parameters OPTIONAL,
+ fdd-Add-UE-NR-CapabilitiesNTN-r17 UE-NR-CapabilityAddXDD-Mode OPTIONAL,
+ fr1-Add-UE-NR-CapabilitiesNTN-r17 UE-NR-CapabilityAddFRX-Mode OPTIONAL,
+ ue-BasedPerfMeas-ParametersNTN-r17 UE-BasedPerfMeas-Parameters-r16 OPTIONAL,
+ son-ParametersNTN-r17 SON-Parameters-r16 OPTIONAL
+}
+
+-- TAG-NTN-PARAMETERS-STOP
+-- TAG-OLPC-SRS-POS-START
+
+OLPC-SRS-Pos-r16 ::= SEQUENCE {
+ olpc-SRS-PosBasedOnPRS-Serving-r16 ENUMERATED {supported} OPTIONAL,
+ olpc-SRS-PosBasedOnSSB-Neigh-r16 ENUMERATED {supported} OPTIONAL,
+ olpc-SRS-PosBasedOnPRS-Neigh-r16 ENUMERATED {supported} OPTIONAL,
+ maxNumberPathLossEstimatePerServing-r16 ENUMERATED {n1, n4, n8, n16} OPTIONAL
+}
+
+--TAG-OLPC-SRS-POS-STOP
+-- TAG-PDCP-PARAMETERS-START
+
+PDCP-Parameters ::= SEQUENCE {
+ supportedROHC-Profiles SEQUENCE {
+ profile0x0000 BOOLEAN,
+ profile0x0001 BOOLEAN,
+ profile0x0002 BOOLEAN,
+ profile0x0003 BOOLEAN,
+ profile0x0004 BOOLEAN,
+ profile0x0006 BOOLEAN,
+ profile0x0101 BOOLEAN,
+ profile0x0102 BOOLEAN,
+ profile0x0103 BOOLEAN,
+ profile0x0104 BOOLEAN
+ },
+ maxNumberROHC-ContextSessions ENUMERATED {cs2, cs4, cs8, cs12, cs16, cs24, cs32, cs48, cs64,
+ cs128, cs256, cs512, cs1024, cs16384, spare2, spare1},
+ uplinkOnlyROHC-Profiles ENUMERATED {supported} OPTIONAL,
+ continueROHC-Context ENUMERATED {supported} OPTIONAL,
+ outOfOrderDelivery ENUMERATED {supported} OPTIONAL,
+ shortSN ENUMERATED {supported} OPTIONAL,
+ pdcp-DuplicationSRB ENUMERATED {supported} OPTIONAL,
+ pdcp-DuplicationMCG-OrSCG-DRB ENUMERATED {supported} OPTIONAL,
+ ...,
+ [[
+ drb-IAB-r16 ENUMERATED {supported} OPTIONAL,
+ non-DRB-IAB-r16 ENUMERATED {supported} OPTIONAL,
+ extendedDiscardTimer-r16 ENUMERATED {supported} OPTIONAL,
+ continueEHC-Context-r16 ENUMERATED {supported} OPTIONAL,
+ ehc-r16 ENUMERATED {supported} OPTIONAL,
+ maxNumberEHC-Contexts-r16 ENUMERATED {cs2, cs4, cs8, cs16, cs32, cs64, cs128, cs256, cs512,
+ cs1024, cs2048, cs4096, cs8192, cs16384, cs32768, cs65536} OPTIONAL,
+ jointEHC-ROHC-Config-r16 ENUMERATED {supported} OPTIONAL,
+ pdcp-DuplicationMoreThanTwoRLC-r16 ENUMERATED {supported} OPTIONAL
+ ]],
+ [[
+ longSN-RedCap-r17 ENUMERATED {supported} OPTIONAL,
+ udc-r17 SEQUENCE {
+ standardDictionary-r17 ENUMERATED {supported} OPTIONAL,
+ operatorDictionary-r17 SEQUENCE {
+ versionOfDictionary-r17 INTEGER (0..15),
+ associatedPLMN-ID-r17 PLMN-Identity
+ } OPTIONAL,
+ continueUDC-r17 ENUMERATED {supported} OPTIONAL,
+ supportOfBufferSize-r17 ENUMERATED {kbyte4, kbyte8} OPTIONAL
+ } OPTIONAL
+ ]]
+}
+
+-- TAG-PDCP-PARAMETERS-STOP
+-- TAG-PDCP-PARAMETERSMRDC-START
+
+PDCP-ParametersMRDC ::= SEQUENCE {
+ pdcp-DuplicationSplitSRB ENUMERATED {supported} OPTIONAL,
+ pdcp-DuplicationSplitDRB ENUMERATED {supported} OPTIONAL
+}
+
+PDCP-ParametersMRDC-v1610 ::= SEQUENCE {
+ scg-DRB-NR-IAB-r16 ENUMERATED {supported} OPTIONAL
+}
+
+-- TAG-PDCP-PARAMETERSMRDC-STOP
+-- TAG-PHY-PARAMETERS-START
+
+Phy-Parameters ::= SEQUENCE {
+ phy-ParametersCommon Phy-ParametersCommon OPTIONAL,
+ phy-ParametersXDD-Diff Phy-ParametersXDD-Diff OPTIONAL,
+ phy-ParametersFRX-Diff Phy-ParametersFRX-Diff OPTIONAL,
+ phy-ParametersFR1 Phy-ParametersFR1 OPTIONAL,
+ phy-ParametersFR2 Phy-ParametersFR2 OPTIONAL
+}
+
+Phy-Parameters-v16a0 ::= SEQUENCE {
+ phy-ParametersCommon-v16a0 Phy-ParametersCommon-v16a0 OPTIONAL
+}
+
+Phy-ParametersCommon ::= SEQUENCE {
+ csi-RS-CFRA-ForHO ENUMERATED {supported} OPTIONAL,
+ dynamicPRB-BundlingDL ENUMERATED {supported} OPTIONAL,
+ sp-CSI-ReportPUCCH ENUMERATED {supported} OPTIONAL,
+ sp-CSI-ReportPUSCH ENUMERATED {supported} OPTIONAL,
+ nzp-CSI-RS-IntefMgmt ENUMERATED {supported} OPTIONAL,
+ type2-SP-CSI-Feedback-LongPUCCH ENUMERATED {supported} OPTIONAL,
+ precoderGranularityCORESET ENUMERATED {supported} OPTIONAL,
+ dynamicHARQ-ACK-Codebook ENUMERATED {supported} OPTIONAL,
+ semiStaticHARQ-ACK-Codebook ENUMERATED {supported} OPTIONAL,
+ spatialBundlingHARQ-ACK ENUMERATED {supported} OPTIONAL,
+ dynamicBetaOffsetInd-HARQ-ACK-CSI ENUMERATED {supported} OPTIONAL,
+ pucch-Repetition-F1-3-4 ENUMERATED {supported} OPTIONAL,
+ ra-Type0-PUSCH ENUMERATED {supported} OPTIONAL,
+ dynamicSwitchRA-Type0-1-PDSCH ENUMERATED {supported} OPTIONAL,
+ dynamicSwitchRA-Type0-1-PUSCH ENUMERATED {supported} OPTIONAL,
+ pdsch-MappingTypeA ENUMERATED {supported} OPTIONAL,
+ pdsch-MappingTypeB ENUMERATED {supported} OPTIONAL,
+ interleavingVRB-ToPRB-PDSCH ENUMERATED {supported} OPTIONAL,
+ interSlotFreqHopping-PUSCH ENUMERATED {supported} OPTIONAL,
+ type1-PUSCH-RepetitionMultiSlots ENUMERATED {supported} OPTIONAL,
+ type2-PUSCH-RepetitionMultiSlots ENUMERATED {supported} OPTIONAL,
+ pusch-RepetitionMultiSlots ENUMERATED {supported} OPTIONAL,
+ pdsch-RepetitionMultiSlots ENUMERATED {supported} OPTIONAL,
+ downlinkSPS ENUMERATED {supported} OPTIONAL,
+ configuredUL-GrantType1 ENUMERATED {supported} OPTIONAL,
+ configuredUL-GrantType2 ENUMERATED {supported} OPTIONAL,
+ pre-EmptIndication-DL ENUMERATED {supported} OPTIONAL,
+ cbg-TransIndication-DL ENUMERATED {supported} OPTIONAL,
+ cbg-TransIndication-UL ENUMERATED {supported} OPTIONAL,
+ cbg-FlushIndication-DL ENUMERATED {supported} OPTIONAL,
+ dynamicHARQ-ACK-CodeB-CBG-Retx-DL ENUMERATED {supported} OPTIONAL,
+ rateMatchingResrcSetSemi-Static ENUMERATED {supported} OPTIONAL,
+ rateMatchingResrcSetDynamic ENUMERATED {supported} OPTIONAL,
+ bwp-SwitchingDelay ENUMERATED {type1, type2} OPTIONAL,
+ ...,
+ [[
+ dummy ENUMERATED {supported} OPTIONAL
+ ]],
+ [[
+ maxNumberSearchSpaces ENUMERATED {n10} OPTIONAL,
+ rateMatchingCtrlResrcSetDynamic ENUMERATED {supported} OPTIONAL,
+ maxLayersMIMO-Indication ENUMERATED {supported} OPTIONAL
+ ]],
+ [[
+ spCellPlacement CarrierAggregationVariant OPTIONAL
+ ]],
+ [[
+ -- R1 9-1: Basic channel structure and procedure of 2-step RACH
+ twoStepRACH-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 11-1: Monitoring DCI format 1_2 and DCI format 0_2
+ dci-Format1-2And0-2-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 11-1a: Monitoring both DCI format 0_1/1_1 and DCI format 0_2/1_2 in the same search space
+ monitoringDCI-SameSearchSpace-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 11-10: Type 2 configured grant release by DCI format 0_1
+ type2-CG-ReleaseDCI-0-1-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 11-11: Type 2 configured grant release by DCI format 0_2
+ type2-CG-ReleaseDCI-0-2-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 12-3: SPS release by DCI format 1_1
+ sps-ReleaseDCI-1-1-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 12-3a: SPS release by DCI format 1_2
+ sps-ReleaseDCI-1-2-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 14-8: CSI trigger states containing non-active BWP
+ csi-TriggerStateNon-ActiveBWP-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 20-2: Support up to 4 SMTCs configured for an IAB node MT per frequency location, including IAB-specific SMTC window periodicities
+ separateSMTC-InterIAB-Support-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 20-3: Support RACH configuration separately from the RACH configuration for UE access, including new IAB-specific offset and scaling factors
+ separateRACH-IAB-Support-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 20-5a: Support semi-static configuration/indication of UL-Flexible-DL slot formats for IAB-MT resources
+ ul-flexibleDL-SlotFormatSemiStatic-IAB-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 20-5b: Support dynamic indication of UL-Flexible-DL slot formats for IAB-MT resources
+ ul-flexibleDL-SlotFormatDynamics-IAB-r16 ENUMERATED {supported} OPTIONAL,
+ dft-S-OFDM-WaveformUL-IAB-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 20-6: Support DCI Format 2_5 based indication of soft resource availability to an IAB node
+ dci-25-AI-RNTI-Support-IAB-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 20-7: Support T_delta reception.
+ t-DeltaReceptionSupport-IAB-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 20-8: Support of Desired guard symbol reporting and provided guard symbok reception.
+ guardSymbolReportReception-IAB-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 18-8 HARQ-ACK codebook type and spatial bundling per PUCCH group
+ harqACK-CB-SpatialBundlingPUCCH-Group-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 19-2: Cross Slot Scheduling
+ crossSlotScheduling-r16 SEQUENCE {
+ non-SharedSpectrumChAccess-r16 ENUMERATED {supported} OPTIONAL,
+ sharedSpectrumChAccess-r16 ENUMERATED {supported} OPTIONAL
+ } OPTIONAL,
+ maxNumberSRS-PosPathLossEstimateAllServingCells-r16 ENUMERATED {n1, n4, n8, n16} OPTIONAL,
+ extendedCG-Periodicities-r16 ENUMERATED {supported} OPTIONAL,
+ extendedSPS-Periodicities-r16 ENUMERATED {supported} OPTIONAL,
+ codebookVariantsList-r16 CodebookVariantsList-r16 OPTIONAL,
+ -- R1 11-6: PUSCH repetition Type A
+ pusch-RepetitionTypeA-r16 SEQUENCE {
+ sharedSpectrumChAccess-r16 ENUMERATED {supported} OPTIONAL,
+ non-SharedSpectrumChAccess-r16 ENUMERATED {supported} OPTIONAL
+ } OPTIONAL,
+ -- R1 11-4b: DL priority indication in DCI with mixed DCI formats
+ dci-DL-PriorityIndicator-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 12-1a: UL priority indication in DCI with mixed DCI formats
+ dci-UL-PriorityIndicator-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 16-1e: Maximum number of configured pathloss reference RSs for PUSCH/PUCCH/SRS by RRC for MAC-CE based pathloss reference RS update
+ maxNumberPathlossRS-Update-r16 ENUMERATED {n4, n8, n16, n32, n64} OPTIONAL,
+
+ -- R1 18-9: Usage of the PDSCH starting time for HARQ-ACK type 2 codebook
+ type2-HARQ-ACK-Codebook-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 16-1g-1: Resources for beam management, pathloss measurement, BFD, RLM and new beam identification across frequency ranges
+ maxTotalResourcesForAcrossFreqRanges-r16 SEQUENCE {
+ maxNumberResWithinSlotAcrossCC-AcrossFR-r16 ENUMERATED {n2, n4, n8, n12, n16, n32, n64, n128} OPTIONAL,
+ maxNumberResAcrossCC-AcrossFR-r16 ENUMERATED {n2, n4, n8, n12, n16, n32, n40, n48, n64, n72, n80, n96, n128, n256}
+ OPTIONAL
+ } OPTIONAL,
+ -- R1 16-2a-4: HARQ-ACK for multi-DCI based multi-TRP - separate
+ harqACK-separateMultiDCI-MultiTRP-r16 SEQUENCE {
+ maxNumberLongPUCCHs-r16 ENUMERATED {longAndLong, longAndShort, shortAndShort} OPTIONAL
+ } OPTIONAL,
+ -- R1 16-2a-4: HARQ-ACK for multi-DCI based multi-TRP - joint
+ harqACK-jointMultiDCI-MultiTRP-r16 ENUMERATED {supported} OPTIONAL,
+ -- R4 9-1: BWP switching on multiple CCs RRM requirements
+ bwp-SwitchingMultiCCs-r16 CHOICE {
+ type1-r16 ENUMERATED {us100, us200},
+ type2-r16 ENUMERATED {us200, us400, us800, us1000}
+ } OPTIONAL
+ ]],
+ [[
+ targetSMTC-SCG-r16 ENUMERATED {supported} OPTIONAL,
+ supportRepetitionZeroOffsetRV-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 11-12: in-order CBG-based re-transmission
+ cbg-TransInOrderPUSCH-UL-r16 ENUMERATED {supported} OPTIONAL
+ ]],
+ [[
+ -- R4 6-3: Dormant BWP switching on multiple CCs RRM requirements
+ bwp-SwitchingMultiDormancyCCs-r16 CHOICE {
+ type1-r16 ENUMERATED {us100, us200},
+ type2-r16 ENUMERATED {us200, us400, us800, us1000}
+ } OPTIONAL,
+ -- R1 16-2a-8: Indicates that retransmission scheduled by a different CORESETPoolIndex for multi-DCI multi-TRP is not supported.
+ supportRetx-Diff-CoresetPool-Multi-DCI-TRP-r16 ENUMERATED {notSupported} OPTIONAL,
+ -- R1 22-10: Support of pdcch-MonitoringAnyOccasionsWithSpanGap in case of cross-carrier scheduling with different SCSs
+ pdcch-MonitoringAnyOccasionsWithSpanGapCrossCarrierSch-r16 ENUMERATED {mode2, mode3} OPTIONAL
+ ]],
+ [[
+ -- R1 16-1j-1: Support of 2 port CSI-RS for new beam identification
+ newBeamIdentifications2PortCSI-RS-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 16-1j-2: Support of 2 port CSI-RS for pathloss estimation
+ pathlossEstimation2PortCSI-RS-r16 ENUMERATED {supported} OPTIONAL
+ ]],
+ [[
+ mux-HARQ-ACK-withoutPUCCH-onPUSCH-r16 ENUMERATED {supported} OPTIONAL
+ ]],
+ [[
+ -- R1 31-1: Support of Desired Guard Symbol reporting and provided guard symbol reception.
+ guardSymbolReportReception-IAB-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 31-2: support of restricted IAB-DU beam reception
+ restricted-IAB-DU-BeamReception-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 31-3: support of recommended IAB-MT beam transmission for DL and UL beam
+ recommended-IAB-MT-BeamTransmission-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 31-4: support of case 6 timing alignment indication reception
+ case6-TimingAlignmentReception-IAB-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 31-5: support of case 7 timing offset indication reception and case 7 timing at parent-node indication reception
+ case7-TimingAlignmentReception-IAB-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 31-6: support of desired DL Tx power adjustment reporting and DL Tx power adjustment reception
+ dl-tx-PowerAdjustment-IAB-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 31-7: support of desired IAB-MT PSD range reporting
+ desired-ul-tx-PowerAdjustment-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 31-8: support of monitoring DCI Format 2_5 scrambled by AI-RNTI for indication of FDM soft resource availability to an IAB node
+ fdm-SoftResourceAvailability-DynamicIndication-r17 ENUMERATED{supported} OPTIONAL,
+ -- R1 31-10: Support of updated T_delta range reception
+ updated-T-DeltaRangeRecption-r17 ENUMERATED{supported} OPTIONAL,
+ -- R1 30-5: Support slot based dynamic PUCCH repetition indication for PUCCH formats 0/1/2/3/4
+ slotBasedDynamicPUCCH-Rep-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 25-1: Support of HARQ-ACK deferral in case of TDD collision
+ sps-HARQ-ACK-Deferral-r17 SEQUENCE {
+ non-SharedSpectrumChAccess-r17 ENUMERATED {supported} OPTIONAL,
+ sharedSpectrumChAccess-r17 ENUMERATED {supported} OPTIONAL
+ } OPTIONAL,
+ -- R1 23-1-1k Maximum number of configured CC lists (per UE)
+ unifiedJointTCI-commonUpdate-r17 INTEGER (1..4) OPTIONAL,
+ -- R1 23-2-1c PDCCH repetition with a single span of three contiguous OFDM symbols that is within the first four OFDM symbols in a slot
+ mTRP-PDCCH-singleSpan-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 27-23: Support of more than one activated PRS processing windows across all active DL BWPs
+ supportedActivatedPRS-ProcessingWindow-r17 ENUMERATED {n2, n3, n4} OPTIONAL,
+ cg-TimeDomainAllocationExtension-r17 ENUMERATED {supported} OPTIONAL
+ ]],
+ [[
+ -- R1 25-20: Propagation delay compensation based on legacy TA procedure for TN and licensed
+ ta-BasedPDC-TN-NonSharedSpectrumChAccess-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 31-11: Directional Collision Handling in DC operation
+ directionalCollisionDC-IAB-r17 ENUMERATED {supported} OPTIONAL
+ ]],
+ [[
+ -- R1 33-6-1: DL priority indication for multicast in DCI
+ priorityIndicatorInDCI-Multicast-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 33-6-1a: DL priority configuration for SPS multicast
+ priorityIndicatorInDCI-SPS-Multicast-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 33-6-2: Two HARQ-ACK codebooks simultaneously constructed for supporting HARQ-ACK codebooks with different priorities
+ -- for unicast and multicast at a UE
+ twoHARQ-ACK-CodebookForUnicastAndMulticast-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 33-6-3: More than one PUCCH for HARQ-ACK transmission for multicast or for unicast and multicast within a slot
+ multiPUCCH-HARQ-ACK-ForMulticastUnicast-r17 ENUMERATED {supported} OPTIONAL,
+ srs-AdditionalRepetition-r17 ENUMERATED {supported} OPTIONAL,
+ pusch-Repetition-CG-SDT-r17 ENUMERATED {supported} OPTIONAL
+ ]]
+}
+
+Phy-ParametersCommon-v16a0 ::= SEQUENCE {
+ srs-PeriodicityAndOffsetExt-r16 ENUMERATED {supported} OPTIONAL
+}
+
+Phy-ParametersXDD-Diff ::= SEQUENCE {
+ dynamicSFI ENUMERATED {supported} OPTIONAL,
+ twoPUCCH-F0-2-ConsecSymbols ENUMERATED {supported} OPTIONAL,
+ twoDifferentTPC-Loop-PUSCH ENUMERATED {supported} OPTIONAL,
+ twoDifferentTPC-Loop-PUCCH ENUMERATED {supported} OPTIONAL,
+ ...,
+ [[
+ dl-SchedulingOffset-PDSCH-TypeA ENUMERATED {supported} OPTIONAL,
+ dl-SchedulingOffset-PDSCH-TypeB ENUMERATED {supported} OPTIONAL,
+ ul-SchedulingOffset ENUMERATED {supported} OPTIONAL
+ ]]
+}
+
+Phy-ParametersFRX-Diff ::= SEQUENCE {
+ dynamicSFI ENUMERATED {supported} OPTIONAL,
+ dummy1 BIT STRING (SIZE (2)) OPTIONAL,
+ twoFL-DMRS BIT STRING (SIZE (2)) OPTIONAL,
+ dummy2 BIT STRING (SIZE (2)) OPTIONAL,
+ dummy3 BIT STRING (SIZE (2)) OPTIONAL,
+ supportedDMRS-TypeDL ENUMERATED {type1, type1And2} OPTIONAL,
+ supportedDMRS-TypeUL ENUMERATED {type1, type1And2} OPTIONAL,
+ semiOpenLoopCSI ENUMERATED {supported} OPTIONAL,
+ csi-ReportWithoutPMI ENUMERATED {supported} OPTIONAL,
+ csi-ReportWithoutCQI ENUMERATED {supported} OPTIONAL,
+ onePortsPTRS BIT STRING (SIZE (2)) OPTIONAL,
+ twoPUCCH-F0-2-ConsecSymbols ENUMERATED {supported} OPTIONAL,
+ pucch-F2-WithFH ENUMERATED {supported} OPTIONAL,
+ pucch-F3-WithFH ENUMERATED {supported} OPTIONAL,
+ pucch-F4-WithFH ENUMERATED {supported} OPTIONAL,
+ pucch-F0-2WithoutFH ENUMERATED {notSupported} OPTIONAL,
+ pucch-F1-3-4WithoutFH ENUMERATED {notSupported} OPTIONAL,
+ mux-SR-HARQ-ACK-CSI-PUCCH-MultiPerSlot ENUMERATED {supported} OPTIONAL,
+ uci-CodeBlockSegmentation ENUMERATED {supported} OPTIONAL,
+ onePUCCH-LongAndShortFormat ENUMERATED {supported} OPTIONAL,
+ twoPUCCH-AnyOthersInSlot ENUMERATED {supported} OPTIONAL,
+ intraSlotFreqHopping-PUSCH ENUMERATED {supported} OPTIONAL,
+ pusch-LBRM ENUMERATED {supported} OPTIONAL,
+ pdcch-BlindDetectionCA INTEGER (4..16) OPTIONAL,
+ tpc-PUSCH-RNTI ENUMERATED {supported} OPTIONAL,
+ tpc-PUCCH-RNTI ENUMERATED {supported} OPTIONAL,
+ tpc-SRS-RNTI ENUMERATED {supported} OPTIONAL,
+ absoluteTPC-Command ENUMERATED {supported} OPTIONAL,
+ twoDifferentTPC-Loop-PUSCH ENUMERATED {supported} OPTIONAL,
+ twoDifferentTPC-Loop-PUCCH ENUMERATED {supported} OPTIONAL,
+ pusch-HalfPi-BPSK ENUMERATED {supported} OPTIONAL,
+ pucch-F3-4-HalfPi-BPSK ENUMERATED {supported} OPTIONAL,
+ almostContiguousCP-OFDM-UL ENUMERATED {supported} OPTIONAL,
+ sp-CSI-RS ENUMERATED {supported} OPTIONAL,
+ sp-CSI-IM ENUMERATED {supported} OPTIONAL,
+ tdd-MultiDL-UL-SwitchPerSlot ENUMERATED {supported} OPTIONAL,
+ multipleCORESET ENUMERATED {supported} OPTIONAL,
+ ...,
+ [[
+ csi-RS-IM-ReceptionForFeedback CSI-RS-IM-ReceptionForFeedback OPTIONAL,
+ csi-RS-ProcFrameworkForSRS CSI-RS-ProcFrameworkForSRS OPTIONAL,
+ csi-ReportFramework CSI-ReportFramework OPTIONAL,
+ mux-SR-HARQ-ACK-CSI-PUCCH-OncePerSlot SEQUENCE {
+ sameSymbol ENUMERATED {supported} OPTIONAL,
+ diffSymbol ENUMERATED {supported} OPTIONAL
+ } OPTIONAL,
+ mux-SR-HARQ-ACK-PUCCH ENUMERATED {supported} OPTIONAL,
+ mux-MultipleGroupCtrlCH-Overlap ENUMERATED {supported} OPTIONAL,
+ dl-SchedulingOffset-PDSCH-TypeA ENUMERATED {supported} OPTIONAL,
+ dl-SchedulingOffset-PDSCH-TypeB ENUMERATED {supported} OPTIONAL,
+ ul-SchedulingOffset ENUMERATED {supported} OPTIONAL,
+ dl-64QAM-MCS-TableAlt ENUMERATED {supported} OPTIONAL,
+ ul-64QAM-MCS-TableAlt ENUMERATED {supported} OPTIONAL,
+ cqi-TableAlt ENUMERATED {supported} OPTIONAL,
+ oneFL-DMRS-TwoAdditionalDMRS-UL ENUMERATED {supported} OPTIONAL,
+ twoFL-DMRS-TwoAdditionalDMRS-UL ENUMERATED {supported} OPTIONAL,
+ oneFL-DMRS-ThreeAdditionalDMRS-UL ENUMERATED {supported} OPTIONAL
+ ]],
+ [[
+ pdcch-BlindDetectionNRDC SEQUENCE {
+ pdcch-BlindDetectionMCG-UE INTEGER (1..15),
+ pdcch-BlindDetectionSCG-UE INTEGER (1..15)
+ } OPTIONAL,
+ mux-HARQ-ACK-PUSCH-DiffSymbol ENUMERATED {supported} OPTIONAL
+ ]],
+ [[
+ -- R1 11-1b: Type 1 HARQ-ACK codebook support for relative TDRA for DL
+ type1-HARQ-ACK-Codebook-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 11-8: Enhanced UL power control scheme
+ enhancedPowerControl-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 16-1b-1: TCI state activation across multiple CCs
+ simultaneousTCI-ActMultipleCC-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 16-1b-2: Spatial relation update across multiple CCs
+ simultaneousSpatialRelationMultipleCC-r16 ENUMERATED {supported} OPTIONAL,
+ cli-RSSI-FDM-DL-r16 ENUMERATED {supported} OPTIONAL,
+ cli-SRS-RSRP-FDM-DL-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 19-3: Maximum MIMO Layer Adaptation
+ maxLayersMIMO-Adaptation-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 12-5: Configuration of aggregation factor per SPS configuration
+ aggregationFactorSPS-DL-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 16-1g: Resources for beam management, pathloss measurement, BFD, RLM and new beam identification
+ maxTotalResourcesForOneFreqRange-r16 SEQUENCE {
+ maxNumberResWithinSlotAcrossCC-OneFR-r16 ENUMERATED {n2, n4, n8, n12, n16, n32, n64, n128} OPTIONAL,
+ maxNumberResAcrossCC-OneFR-r16 ENUMERATED {n2, n4, n8, n12, n16, n32, n40, n48, n64, n72, n80, n96, n128, n256}
+ OPTIONAL
+ } OPTIONAL,
+ -- R1 16-7: Extension of the maximum number of configured aperiodic CSI report settings
+ csi-ReportFrameworkExt-r16 CSI-ReportFrameworkExt-r16 OPTIONAL
+ ]],
+ [[
+ twoTCI-Act-servingCellInCC-List-r16 ENUMERATED {supported} OPTIONAL
+ ]],
+ [[
+ -- R1 22-11: Support of 'cri-RI-CQI' report without non-PMI-PortIndication
+ cri-RI-CQI-WithoutNon-PMI-PortInd-r16 ENUMERATED {supported} OPTIONAL
+ ]],
+ [[
+ -- R1 25-11: 4-bits subband CQI for TN and licensed
+ cqi-4-BitsSubbandTN-NonSharedSpectrumChAccess-r17 ENUMERATED {supported} OPTIONAL
+ ]]
+}
+
+Phy-ParametersFR1 ::= SEQUENCE {
+ pdcch-MonitoringSingleOccasion ENUMERATED {supported} OPTIONAL,
+ scs-60kHz ENUMERATED {supported} OPTIONAL,
+ pdsch-256QAM-FR1 ENUMERATED {supported} OPTIONAL,
+ pdsch-RE-MappingFR1-PerSymbol ENUMERATED {n10, n20} OPTIONAL,
+ ...,
+ [[
+ pdsch-RE-MappingFR1-PerSlot ENUMERATED {n16, n32, n48, n64, n80, n96, n112, n128,
+ n144, n160, n176, n192, n208, n224, n240, n256} OPTIONAL
+ ]],
+ [[
+ -- R1 22-12: PDCCH monitoring with a single span of three contiguous OFDM symbols that is within the first four OFDM symbols in a
+ -- slot
+ pdcch-MonitoringSingleSpanFirst4Sym-r16 ENUMERATED {supported} OPTIONAL
+ ]]
+}
+
+Phy-ParametersFR2 ::= SEQUENCE {
+ dummy ENUMERATED {supported} OPTIONAL,
+ pdsch-RE-MappingFR2-PerSymbol ENUMERATED {n6, n20} OPTIONAL,
+ ...,
+ [[
+ pCell-FR2 ENUMERATED {supported} OPTIONAL,
+ pdsch-RE-MappingFR2-PerSlot ENUMERATED {n16, n32, n48, n64, n80, n96, n112, n128,
+ n144, n160, n176, n192, n208, n224, n240, n256} OPTIONAL
+ ]],
+ [[
+ -- R1 16-1c: Support of default spatial relation and pathloss reference RS for dedicated-PUCCH/SRS and PUSCH
+ defaultSpatialRelationPathlossRS-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 16-1d: Support of spatial relation update for AP-SRS via MAC CE
+ spatialRelationUpdateAP-SRS-r16 ENUMERATED {supported} OPTIONAL,
+ maxNumberSRS-PosSpatialRelationsAllServingCells-r16 ENUMERATED {n0, n1, n2, n4, n8, n16} OPTIONAL
+ ]]
+}
+
+-- TAG-PHY-PARAMETERS-STOP
+-- TAG-PHY-PARAMETERSMRDC-START
+
+Phy-ParametersMRDC ::= SEQUENCE {
+ naics-Capability-List SEQUENCE (SIZE (1..maxNrofNAICS-Entries)) OF NAICS-Capability-Entry OPTIONAL,
+ ...,
+ [[
+ spCellPlacement CarrierAggregationVariant OPTIONAL
+ ]],
+ [[
+ -- R1 18-3b: Semi-statically configured LTE UL transmissions in all UL subframes not limited to tdm-pattern in case of TDD PCell
+ tdd-PCellUL-TX-AllUL-Subframe-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 18-3a: Semi-statically configured LTE UL transmissions in all UL subframes not limited to tdm-pattern in case of FDD PCell
+ fdd-PCellUL-TX-AllUL-Subframe-r16 ENUMERATED {supported} OPTIONAL
+ ]]
+}
+
+NAICS-Capability-Entry ::= SEQUENCE {
+ numberOfNAICS-CapableCC INTEGER(1..5),
+ numberOfAggregatedPRB ENUMERATED {n50, n75, n100, n125, n150, n175, n200, n225,
+ n250, n275, n300, n350, n400, n450, n500, spare},
+ ...
+}
+
+-- TAG-PHY-PARAMETERSMRDC-STOP
+-- TAG-PHY-PARAMETERSSHAREDSPECTRUMCHACCESS-START
+
+Phy-ParametersSharedSpectrumChAccess-r16 ::= SEQUENCE {
+ -- 10-32 (1-2): SS block based SINR measurement (SS-SINR) for unlicensed spectrum
+ ss-SINR-Meas-r16 ENUMERATED {supported} OPTIONAL,
+ -- 10-33 (2-32a): Semi-persistent CSI report on PUCCH for unlicensed spectrum
+ sp-CSI-ReportPUCCH-r16 ENUMERATED {supported} OPTIONAL,
+ -- 10-33a (2-32b): Semi-persistent CSI report on PUSCH for unlicensed spectrum
+ sp-CSI-ReportPUSCH-r16 ENUMERATED {supported} OPTIONAL,
+ -- 10-34 (3-6): Dynamic SFI monitoring for unlicensed spectrum
+ dynamicSFI-r16 ENUMERATED {supported} OPTIONAL,
+ -- 10-35c (4-19c): SR/HARQ-ACK/CSI multiplexing once per slot using a PUCCH (or HARQ-ACK/CSI piggybacked on a PUSCH) when SR/HARQ-
+ -- ACK/CSI are supposed to be sent with different starting symbols in a slot for unlicensed spectrum
+ -- 10-35 (4-19): SR/HARQ-ACK/CSI multiplexing once per slot using a PUCCH (or HARQ-ACK/CSI piggybacked on a PUSCH) when SR/HARQ-
+ -- ACK/CSI are supposed to be sent with the same starting symbol on the PUCCH resources in a slot for unlicensed spectrum
+ mux-SR-HARQ-ACK-CSI-PUCCH-OncePerSlot-r16 SEQUENCE {
+ sameSymbol-r16 ENUMERATED {supported} OPTIONAL,
+ diffSymbol-r16 ENUMERATED {supported} OPTIONAL
+ } OPTIONAL,
+ -- 10-35a (4-19a): Overlapping PUCCH resources have different starting symbols in a slot for unlicensed spectrum
+ mux-SR-HARQ-ACK-PUCCH-r16 ENUMERATED {supported} OPTIONAL,
+ -- 10-35b (4-19b): SR/HARQ-ACK/CSI multiplexing more than once per slot using a PUCCH (or HARQ-ACK/CSI piggybacked on a PUSCH) when
+ -- SR/HARQ ACK/CSI are supposed to be sent with the same or different starting symbol in a slot for unlicensed spectrum
+ mux-SR-HARQ-ACK-CSI-PUCCH-MultiPerSlot-r16 ENUMERATED {supported} OPTIONAL,
+ -- 10-36 (4-28): HARQ-ACK multiplexing on PUSCH with different PUCCH/PUSCH starting OFDM symbols for unlicensed spectrum
+ mux-HARQ-ACK-PUSCH-DiffSymbol-r16 ENUMERATED {supported} OPTIONAL,
+ -- 10-37 (4-23): Repetitions for PUCCH format 1, 3, and 4 over multiple slots with K = 2, 4, 8 for unlicensed spectrum
+ pucch-Repetition-F1-3-4-r16 ENUMERATED {supported} OPTIONAL,
+ -- 10-38 (5-14): Type 1 configured PUSCH repetitions over multiple slots for unlicensed spectrum
+ type1-PUSCH-RepetitionMultiSlots-r16 ENUMERATED {supported} OPTIONAL,
+ -- 10-39 (5-16): Type 2 configured PUSCH repetitions over multiple slots for unlicensed spectrum
+ type2-PUSCH-RepetitionMultiSlots-r16 ENUMERATED {supported} OPTIONAL,
+ -- 10-40 (5-17): PUSCH repetitions over multiple slots for unlicensed spectrum
+ pusch-RepetitionMultiSlots-r16 ENUMERATED {supported} OPTIONAL,
+ -- 10-40a (5-17a): PDSCH repetitions over multiple slots for unlicensed spectrum
+ pdsch-RepetitionMultiSlots-r16 ENUMERATED {supported} OPTIONAL,
+ -- 10-41 (5-18): DL SPS
+ downlinkSPS-r16 ENUMERATED {supported} OPTIONAL,
+ -- 10-42 (5-19): Type 1 Configured UL grant
+ configuredUL-GrantType1-r16 ENUMERATED {supported} OPTIONAL,
+ -- 10-43 (5-20): Type 2 Configured UL grant
+ configuredUL-GrantType2-r16 ENUMERATED {supported} OPTIONAL,
+ -- 10-44 (5-21): Pre-emption indication for DL
+ pre-EmptIndication-DL-r16 ENUMERATED {supported} OPTIONAL,
+ ...
+}
+
+-- TAG-PHY-PARAMETERSSHAREDSPECTRUMCHACCESS-STOP
+-- TAG-POSSRS-RRC-INACTIVE-OUTSIDEINITIALUL-BWP-START
+
+PosSRS-RRC-Inactive-OutsideInitialUL-BWP-r17::= SEQUENCE {
+ -- R1 27-15b: Positioning SRS transmission in RRC_INACTIVE state configured outside initial UL BWP
+ maxSRSposBandwidthForEachSCS-withinCC-FR1-r17 ENUMERATED {bw5, bw10, bw15, bw20, bw25, bw30, bw35, bw40,
+ bw45, bw50, bw60, bw70, bw80, bw90, bw100} OPTIONAL,
+ maxSRSposBandwidthForEachSCS-withinCC-FR2-r17 ENUMERATED {bw50, bw100, bw200, bw400} OPTIONAL,
+ maxNumOfSRSposResourceSets-r17 ENUMERATED {n1, n2, n4, n8, n12, n16} OPTIONAL,
+ maxNumOfPeriodicSRSposResources-r17 ENUMERATED {n1, n2, n4, n8, n16, n32, n64} OPTIONAL,
+ maxNumOfPeriodicSRSposResourcesPerSlot-r17 ENUMERATED {n1, n2, n3, n4, n5, n6, n8, n10, n12, n14} OPTIONAL,
+ differentNumerologyBetweenSRSposAndInitialBWP-r17 ENUMERATED {supported} OPTIONAL,
+ srsPosWithoutRestrictionOnBWP-r17 ENUMERATED {supported} OPTIONAL,
+ maxNumOfPeriodicAndSemipersistentSRSposResources-r17 ENUMERATED {n1, n2, n4, n8, n16, n32, n64} OPTIONAL,
+ maxNumOfPeriodicAndSemipersistentSRSposResourcesPerSlot-r17 ENUMERATED {n1, n2, n3, n4, n5, n6, n8, n10, n12, n14} OPTIONAL,
+ differentCenterFreqBetweenSRSposAndInitialBWP-r17 ENUMERATED {supported} OPTIONAL,
+ switchingTimeSRS-TX-OtherTX-r17 ENUMERATED {us100, us140, us200, us300, us500} OPTIONAL,
+ -- R1 27-15c: Support of positioning SRS transmission in RRC_INACTIVE state outside initial BWP with semi-persistent SRS
+ maxNumOfSemiPersistentSRSposResources-r17 ENUMERATED {n1, n2, n4, n8, n16, n32, n64} OPTIONAL,
+ maxNumOfSemiPersistentSRSposResourcesPerSlot-r17 ENUMERATED {n1, n2, n3, n4, n5, n6, n8, n10, n12, n14} OPTIONAL,
+ ...
+}
+
+-- TAG-POSSRS-RRC-INACTIVE-OUTSIDEINITIALUL-BWP-STOP
+-- TAG-POWSAV-PARAMETERS-START
+
+PowSav-Parameters-r16 ::= SEQUENCE {
+ powSav-ParametersCommon-r16 PowSav-ParametersCommon-r16 OPTIONAL,
+ powSav-ParametersFRX-Diff-r16 PowSav-ParametersFRX-Diff-r16 OPTIONAL,
+ ...
+}
+
+PowSav-Parameters-v1700 ::= SEQUENCE {
+ powSav-ParametersFR2-2-r17 PowSav-ParametersFR2-2-r17 OPTIONAL,
+ ...
+}
+
+PowSav-ParametersCommon-r16 ::= SEQUENCE {
+ drx-Preference-r16 ENUMERATED {supported} OPTIONAL,
+ maxCC-Preference-r16 ENUMERATED {supported} OPTIONAL,
+ releasePreference-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 19-4a: UE assistance information
+ minSchedulingOffsetPreference-r16 ENUMERATED {supported} OPTIONAL,
+ ...
+}
+
+PowSav-ParametersFRX-Diff-r16 ::= SEQUENCE {
+ maxBW-Preference-r16 ENUMERATED {supported} OPTIONAL,
+ maxMIMO-LayerPreference-r16 ENUMERATED {supported} OPTIONAL,
+ ...
+}
+
+PowSav-ParametersFR2-2-r17 ::= SEQUENCE {
+ maxBW-Preference-r17 ENUMERATED {supported} OPTIONAL,
+ maxMIMO-LayerPreference-r17 ENUMERATED {supported} OPTIONAL,
+ ...
+}
+
+-- TAG-POWSAV-PARAMETERS-STOP
+-- TAG-PROCESSINGPARAMETERS-START
+
+ProcessingParameters ::= SEQUENCE {
+ fallback ENUMERATED {sc, cap1-only},
+ differentTB-PerSlot SEQUENCE {
+ upto1 NumberOfCarriers OPTIONAL,
+ upto2 NumberOfCarriers OPTIONAL,
+ upto4 NumberOfCarriers OPTIONAL,
+ upto7 NumberOfCarriers OPTIONAL
+ } OPTIONAL
+}
+
+NumberOfCarriers ::= INTEGER (1..16)
+
+-- TAG-PROCESSINGPARAMETERS-STOP
+-- TAG-PRS-PROCESSINGCAPABILITYOUTSIDEMGINPPWPERType-START
+
+PRS-ProcessingCapabilityOutsideMGinPPWperType-r17 ::= SEQUENCE {
+ prsProcessingType-r17 ENUMERATED {type1A, type1B, type2},
+ ppw-dl-PRS-BufferType-r17 ENUMERATED {type1, type2, ...},
+ ppw-durationOfPRS-Processing-r17 CHOICE {
+ ppw-durationOfPRS-Processing1-r17 SEQUENCE {
+ ppw-durationOfPRS-ProcessingSymbolsN-r17 ENUMERATED {msDot125, msDot25, msDot5, ms1, ms2, ms4, ms6, ms8, ms12,
+ ms16, ms20, ms25, ms30, ms32, ms35, ms40, ms45, ms50},
+ ppw-durationOfPRS-ProcessingSymbolsT-r17 ENUMERATED {ms1, ms2, ms4, ms8, ms16, ms20, ms30, ms40, ms80,
+ ms160, ms320, ms640, ms1280}
+ },
+ ppw-durationOfPRS-Processing2-r17 SEQUENCE {
+ ppw-durationOfPRS-ProcessingSymbolsN2-r17 ENUMERATED {msDot125, msDot25, msDot5, ms1, ms2, ms3, ms4, ms5,
+ ms6, ms8, ms12},
+ ppw-durationOfPRS-ProcessingSymbolsT2-r17 ENUMERATED {ms4, ms5, ms6, ms8}
+ }
+ } OPTIONAL,
+ ppw-maxNumOfDL-PRS-ResProcessedPerSlot-r17 SEQUENCE {
+ scs15-r17 ENUMERATED {n1, n2, n4, n6, n8, n12, n16, n24, n32, n48, n64} OPTIONAL,
+ scs30-r17 ENUMERATED {n1, n2, n4, n6, n8, n12, n16, n24, n32, n48, n64} OPTIONAL,
+ scs60-r17 ENUMERATED {n1, n2, n4, n6, n8, n12, n16, n24, n32, n48, n64} OPTIONAL,
+ scs120-r17 ENUMERATED {n1, n2, n4, n6, n8, n12, n16, n24, n32, n48, n64} OPTIONAL,
+ ...
+ },
+ ppw-maxNumOfDL-Bandwidth-r17 CHOICE {
+ fr1-r17 ENUMERATED {mhz5, mhz10, mhz20, mhz40, mhz50, mhz80, mhz100},
+ fr2-r17 ENUMERATED {mhz50, mhz100, mhz200, mhz400}
+ } OPTIONAL
+}
+
+-- TAG-PRS-PROCESSINGCAPABILITYOUTSIDEMGINPPWPERType-STOP
+-- TAG-RAT-TYPE-START
+
+RAT-Type ::= ENUMERATED {nr, eutra-nr, eutra, utra-fdd-v1610, ...}
+
+-- TAG-RAT-TYPE-STOP
+-- TAG-REDCAPPARAMETERS-START
+
+RedCapParameters-r17::= SEQUENCE {
+ -- R1 28-1: RedCap UE
+ supportOfRedCap-r17 ENUMERATED {supported} OPTIONAL,
+ supportOf16DRB-RedCap-r17 ENUMERATED {supported} OPTIONAL
+}
+
+-- TAG-REDCAPPARAMETERS-STOP
+-- TAG-RF-PARAMETERS-START
+
+RF-Parameters ::= SEQUENCE {
+ supportedBandListNR SEQUENCE (SIZE (1..maxBands)) OF BandNR,
+ supportedBandCombinationList BandCombinationList OPTIONAL,
+ appliedFreqBandListFilter FreqBandList OPTIONAL,
+ ...,
+ [[
+ supportedBandCombinationList-v1540 BandCombinationList-v1540 OPTIONAL,
+ srs-SwitchingTimeRequested ENUMERATED {true} OPTIONAL
+ ]],
+ [[
+ supportedBandCombinationList-v1550 BandCombinationList-v1550 OPTIONAL
+ ]],
+ [[
+ supportedBandCombinationList-v1560 BandCombinationList-v1560 OPTIONAL
+ ]],
+ [[
+ supportedBandCombinationList-v1610 BandCombinationList-v1610 OPTIONAL,
+ supportedBandCombinationListSidelinkEUTRA-NR-r16 BandCombinationListSidelinkEUTRA-NR-r16 OPTIONAL,
+ supportedBandCombinationList-UplinkTxSwitch-r16 BandCombinationList-UplinkTxSwitch-r16 OPTIONAL
+ ]],
+ [[
+ supportedBandCombinationList-v1630 BandCombinationList-v1630 OPTIONAL,
+ supportedBandCombinationListSidelinkEUTRA-NR-v1630 BandCombinationListSidelinkEUTRA-NR-v1630 OPTIONAL,
+ supportedBandCombinationList-UplinkTxSwitch-v1630 BandCombinationList-UplinkTxSwitch-v1630 OPTIONAL
+ ]],
+ [[
+ supportedBandCombinationList-v1640 BandCombinationList-v1640 OPTIONAL,
+ supportedBandCombinationList-UplinkTxSwitch-v1640 BandCombinationList-UplinkTxSwitch-v1640 OPTIONAL
+ ]],
+ [[
+ supportedBandCombinationList-v1650 BandCombinationList-v1650 OPTIONAL,
+ supportedBandCombinationList-UplinkTxSwitch-v1650 BandCombinationList-UplinkTxSwitch-v1650 OPTIONAL
+ ]],
+ [[
+ extendedBand-n77-r16 ENUMERATED {supported} OPTIONAL
+ ]],
+ [[
+ supportedBandCombinationList-UplinkTxSwitch-v1670 BandCombinationList-UplinkTxSwitch-v1670 OPTIONAL
+ ]],
+ [[
+ supportedBandCombinationList-v1680 BandCombinationList-v1680 OPTIONAL
+ ]],
+ [[
+ supportedBandCombinationList-v1690 BandCombinationList-v1690 OPTIONAL,
+ supportedBandCombinationList-UplinkTxSwitch-v1690 BandCombinationList-UplinkTxSwitch-v1690 OPTIONAL
+ ]],
+ [[
+ supportedBandCombinationList-v1700 BandCombinationList-v1700 OPTIONAL,
+ supportedBandCombinationList-UplinkTxSwitch-v1700 BandCombinationList-UplinkTxSwitch-v1700 OPTIONAL,
+ supportedBandCombinationListSL-RelayDiscovery-r17 OCTET STRING OPTIONAL, -- Contains PC5 BandCombinationListSidelinkNR-r16
+ supportedBandCombinationListSL-NonRelayDiscovery-r17 OCTET STRING OPTIONAL, -- Contains PC5 BandCombinationListSidelinkNR-r16
+ supportedBandCombinationListSidelinkEUTRA-NR-v1710 BandCombinationListSidelinkEUTRA-NR-v1710 OPTIONAL,
+ sidelinkRequested-r17 ENUMERATED {true} OPTIONAL,
+ extendedBand-n77-2-r17 ENUMERATED {supported} OPTIONAL
+ ]],
+ [[
+ supportedBandCombinationList-v1720 BandCombinationList-v1720 OPTIONAL,
+ supportedBandCombinationList-UplinkTxSwitch-v1720 BandCombinationList-UplinkTxSwitch-v1720 OPTIONAL
+ ]],
+ [[
+ supportedBandCombinationList-v1730 BandCombinationList-v1730 OPTIONAL,
+ supportedBandCombinationList-UplinkTxSwitch-v1730 BandCombinationList-UplinkTxSwitch-v1730 OPTIONAL,
+ supportedBandCombinationListSL-RelayDiscovery-v1730 BandCombinationListSL-Discovery-r17 OPTIONAL,
+ supportedBandCombinationListSL-NonRelayDiscovery-v1730 BandCombinationListSL-Discovery-r17 OPTIONAL
+ ]]
+}
+
+RF-Parameters-v15g0 ::= SEQUENCE {
+ supportedBandCombinationList-v15g0 BandCombinationList-v15g0 OPTIONAL
+}
+
+RF-Parameters-v16a0 ::= SEQUENCE {
+ supportedBandCombinationList-v16a0 BandCombinationList-v16a0 OPTIONAL,
+ supportedBandCombinationList-UplinkTxSwitch-v16a0 BandCombinationList-UplinkTxSwitch-v16a0 OPTIONAL
+}
+
+BandNR ::= SEQUENCE {
+ bandNR FreqBandIndicatorNR,
+ modifiedMPR-Behaviour BIT STRING (SIZE (8)) OPTIONAL,
+ mimo-ParametersPerBand MIMO-ParametersPerBand OPTIONAL,
+ extendedCP ENUMERATED {supported} OPTIONAL,
+ multipleTCI ENUMERATED {supported} OPTIONAL,
+ bwp-WithoutRestriction ENUMERATED {supported} OPTIONAL,
+ bwp-SameNumerology ENUMERATED {upto2, upto4} OPTIONAL,
+ bwp-DiffNumerology ENUMERATED {upto4} OPTIONAL,
+ crossCarrierScheduling-SameSCS ENUMERATED {supported} OPTIONAL,
+ pdsch-256QAM-FR2 ENUMERATED {supported} OPTIONAL,
+ pusch-256QAM ENUMERATED {supported} OPTIONAL,
+ ue-PowerClass ENUMERATED {pc1, pc2, pc3, pc4} OPTIONAL,
+ rateMatchingLTE-CRS ENUMERATED {supported} OPTIONAL,
+ channelBWs-DL CHOICE {
+ fr1 SEQUENCE {
+ scs-15kHz BIT STRING (SIZE (10)) OPTIONAL,
+ scs-30kHz BIT STRING (SIZE (10)) OPTIONAL,
+ scs-60kHz BIT STRING (SIZE (10)) OPTIONAL
+ },
+ fr2 SEQUENCE {
+ scs-60kHz BIT STRING (SIZE (3)) OPTIONAL,
+ scs-120kHz BIT STRING (SIZE (3)) OPTIONAL
+ }
+ } OPTIONAL,
+ channelBWs-UL CHOICE {
+ fr1 SEQUENCE {
+ scs-15kHz BIT STRING (SIZE (10)) OPTIONAL,
+ scs-30kHz BIT STRING (SIZE (10)) OPTIONAL,
+ scs-60kHz BIT STRING (SIZE (10)) OPTIONAL
+ },
+ fr2 SEQUENCE {
+ scs-60kHz BIT STRING (SIZE (3)) OPTIONAL,
+ scs-120kHz BIT STRING (SIZE (3)) OPTIONAL
+ }
+ } OPTIONAL,
+ ...,
+ [[
+ maxUplinkDutyCycle-PC2-FR1 ENUMERATED {n60, n70, n80, n90, n100} OPTIONAL
+ ]],
+ [[
+ pucch-SpatialRelInfoMAC-CE ENUMERATED {supported} OPTIONAL,
+ powerBoosting-pi2BPSK ENUMERATED {supported} OPTIONAL
+ ]],
+ [[
+ maxUplinkDutyCycle-FR2 ENUMERATED {n15, n20, n25, n30, n40, n50, n60, n70, n80, n90, n100} OPTIONAL
+ ]],
+ [[
+ channelBWs-DL-v1590 CHOICE {
+ fr1 SEQUENCE {
+ scs-15kHz BIT STRING (SIZE (16)) OPTIONAL,
+ scs-30kHz BIT STRING (SIZE (16)) OPTIONAL,
+ scs-60kHz BIT STRING (SIZE (16)) OPTIONAL
+ },
+ fr2 SEQUENCE {
+ scs-60kHz BIT STRING (SIZE (8)) OPTIONAL,
+ scs-120kHz BIT STRING (SIZE (8)) OPTIONAL
+ }
+ } OPTIONAL,
+ channelBWs-UL-v1590 CHOICE {
+ fr1 SEQUENCE {
+ scs-15kHz BIT STRING (SIZE (16)) OPTIONAL,
+ scs-30kHz BIT STRING (SIZE (16)) OPTIONAL,
+ scs-60kHz BIT STRING (SIZE (16)) OPTIONAL
+ },
+ fr2 SEQUENCE {
+ scs-60kHz BIT STRING (SIZE (8)) OPTIONAL,
+ scs-120kHz BIT STRING (SIZE (8)) OPTIONAL
+ }
+ } OPTIONAL
+ ]],
+ [[
+ asymmetricBandwidthCombinationSet BIT STRING (SIZE (1..32)) OPTIONAL
+ ]],
+ [[
+ -- R1 10: NR-unlicensed
+ sharedSpectrumChAccessParamsPerBand-r16 SharedSpectrumChAccessParamsPerBand-r16 OPTIONAL,
+ -- R1 11-7b: Independent cancellation of the overlapping PUSCHs in an intra-band UL CA
+ cancelOverlappingPUSCH-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 14-1: Multiple LTE-CRS rate matching patterns
+ multipleRateMatchingEUTRA-CRS-r16 SEQUENCE {
+ maxNumberPatterns-r16 INTEGER (2..6),
+ maxNumberNon-OverlapPatterns-r16 INTEGER (1..3)
+ } OPTIONAL,
+ -- R1 14-1a: Two LTE-CRS overlapping rate matching patterns within a part of NR carrier using 15 kHz overlapping with a LTE carrier
+ overlapRateMatchingEUTRA-CRS-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 14-2: PDSCH Type B mapping of length 9 and 10 OFDM symbols
+ pdsch-MappingTypeB-Alt-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 14-3: One slot periodic TRS configuration for FR1
+ oneSlotPeriodicTRS-r16 ENUMERATED {supported} OPTIONAL,
+ olpc-SRS-Pos-r16 OLPC-SRS-Pos-r16 OPTIONAL,
+ spatialRelationsSRS-Pos-r16 SpatialRelationsSRS-Pos-r16 OPTIONAL,
+ simulSRS-MIMO-TransWithinBand-r16 ENUMERATED {n2} OPTIONAL,
+ channelBW-DL-IAB-r16 CHOICE {
+ fr1-100mhz SEQUENCE {
+ scs-15kHz ENUMERATED {supported} OPTIONAL,
+ scs-30kHz ENUMERATED {supported} OPTIONAL,
+ scs-60kHz ENUMERATED {supported} OPTIONAL
+ },
+ fr2-200mhz SEQUENCE {
+ scs-60kHz ENUMERATED {supported} OPTIONAL,
+ scs-120kHz ENUMERATED {supported} OPTIONAL
+ }
+ } OPTIONAL,
+ channelBW-UL-IAB-r16 CHOICE {
+ fr1-100mhz SEQUENCE {
+ scs-15kHz ENUMERATED {supported} OPTIONAL,
+ scs-30kHz ENUMERATED {supported} OPTIONAL,
+ scs-60kHz ENUMERATED {supported} OPTIONAL
+ },
+ fr2-200mhz SEQUENCE {
+ scs-60kHz ENUMERATED {supported} OPTIONAL,
+ scs-120kHz ENUMERATED {supported} OPTIONAL
+ }
+ } OPTIONAL,
+ rasterShift7dot5-IAB-r16 ENUMERATED {supported} OPTIONAL,
+ ue-PowerClass-v1610 ENUMERATED {pc1dot5} OPTIONAL,
+ condHandover-r16 ENUMERATED {supported} OPTIONAL,
+ condHandoverFailure-r16 ENUMERATED {supported} OPTIONAL,
+ condHandoverTwoTriggerEvents-r16 ENUMERATED {supported} OPTIONAL,
+ condPSCellChange-r16 ENUMERATED {supported} OPTIONAL,
+ condPSCellChangeTwoTriggerEvents-r16 ENUMERATED {supported} OPTIONAL,
+ mpr-PowerBoost-FR2-r16 ENUMERATED {supported} OPTIONAL,
+
+ -- R1 11-9: Multiple active configured grant configurations for a BWP of a serving cell
+ activeConfiguredGrant-r16 SEQUENCE {
+ maxNumberConfigsPerBWP-r16 ENUMERATED {n1, n2, n4, n8, n12},
+ maxNumberConfigsAllCC-r16 INTEGER (2..32)
+ } OPTIONAL,
+ -- R1 11-9a: Joint release in a DCI for two or more configured grant Type 2 configurations for a given BWP of a serving cell
+ jointReleaseConfiguredGrantType2-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 12-2: Multiple SPS configurations
+ sps-r16 SEQUENCE {
+ maxNumberConfigsPerBWP-r16 INTEGER (1..8),
+ maxNumberConfigsAllCC-r16 INTEGER (2..32)
+ } OPTIONAL,
+ -- R1 12-2a: Joint release in a DCI for two or more SPS configurations for a given BWP of a serving cell
+ jointReleaseSPS-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 13-19: Simultaneous positioning SRS and MIMO SRS transmission within a band across multiple CCs
+ simulSRS-TransWithinBand-r16 ENUMERATED {n2} OPTIONAL,
+ trs-AdditionalBandwidth-r16 ENUMERATED {trs-AddBW-Set1, trs-AddBW-Set2} OPTIONAL,
+ handoverIntraF-IAB-r16 ENUMERATED {supported} OPTIONAL
+ ]],
+ [[
+ -- R1 22-5a: Simultaneous transmission of SRS for antenna switching and SRS for CB/NCB /BM for intra-band UL CA
+ -- R1 22-5c: Simultaneous transmission of SRS for antenna switching and SRS for antenna switching for intra-band UL CA
+ simulTX-SRS-AntSwitchingIntraBandUL-CA-r16 SimulSRS-ForAntennaSwitching-r16 OPTIONAL,
+ -- R1 10: NR-unlicensed
+ sharedSpectrumChAccessParamsPerBand-v1630 SharedSpectrumChAccessParamsPerBand-v1630 OPTIONAL
+ ]],
+ [[
+ handoverUTRA-FDD-r16 ENUMERATED {supported} OPTIONAL,
+ -- R4 7-4: Report the shorter transient capability supported by the UE: 2, 4 or 7us
+ enhancedUL-TransientPeriod-r16 ENUMERATED {us2, us4, us7} OPTIONAL,
+ sharedSpectrumChAccessParamsPerBand-v1640 SharedSpectrumChAccessParamsPerBand-v1640 OPTIONAL
+ ]],
+ [[
+ type1-PUSCH-RepetitionMultiSlots-v1650 ENUMERATED {supported} OPTIONAL,
+ type2-PUSCH-RepetitionMultiSlots-v1650 ENUMERATED {supported} OPTIONAL,
+ pusch-RepetitionMultiSlots-v1650 ENUMERATED {supported} OPTIONAL,
+ configuredUL-GrantType1-v1650 ENUMERATED {supported} OPTIONAL,
+ configuredUL-GrantType2-v1650 ENUMERATED {supported} OPTIONAL,
+ sharedSpectrumChAccessParamsPerBand-v1650 SharedSpectrumChAccessParamsPerBand-v1650 OPTIONAL
+ ]],
+ [[
+ enhancedSkipUplinkTxConfigured-v1660 ENUMERATED {supported} OPTIONAL,
+ enhancedSkipUplinkTxDynamic-v1660 ENUMERATED {supported} OPTIONAL
+ ]],
+ [[
+ maxUplinkDutyCycle-PC1dot5-MPE-FR1-r16 ENUMERATED {n10, n15, n20, n25, n30, n40, n50, n60, n70, n80, n90, n100} OPTIONAL,
+ txDiversity-r16 ENUMERATED {supported} OPTIONAL
+ ]],
+ [[
+ -- R1 36-1: Support of 1024QAM for PDSCH for FR1
+ pdsch-1024QAM-FR1-r17 ENUMERATED {supported} OPTIONAL,
+ -- R4 22-1 support of FR2 HST operation
+ ue-PowerClass-v1700 ENUMERATED {pc5, pc6, pc7} OPTIONAL,
+ -- R1 24: NR extension to 71GHz (FR2-2)
+ fr2-2-AccessParamsPerBand-r17 FR2-2-AccessParamsPerBand-r17 OPTIONAL,
+ rlm-Relaxation-r17 ENUMERATED {supported} OPTIONAL,
+ bfd-Relaxation-r17 ENUMERATED {supported} OPTIONAL,
+ cg-SDT-r17 ENUMERATED {supported} OPTIONAL,
+ locationBasedCondHandover-r17 ENUMERATED {supported} OPTIONAL,
+ timeBasedCondHandover-r17 ENUMERATED {supported} OPTIONAL,
+ eventA4BasedCondHandover-r17 ENUMERATED {supported} OPTIONAL,
+ mn-InitiatedCondPSCellChangeNRDC-r17 ENUMERATED {supported} OPTIONAL,
+ sn-InitiatedCondPSCellChangeNRDC-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 29-3a: PDCCH skipping
+ pdcch-SkippingWithoutSSSG-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 29-3b: 2 search space sets group switching
+ sssg-Switching-1BitInd-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 29-3c: 3 search space sets group switching
+ sssg-Switching-2BitInd-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 29-3d: 2 search space sets group switching with PDCCH skipping
+ pdcch-SkippingWithSSSG-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 29-3e: Support Search space set group switching capability 2 for FR1
+ searchSpaceSetGrp-switchCap2-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 26-1: Uplink Time and Frequency pre-compensation and timing relationship enhancements
+ uplinkPreCompensation-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 26-4: UE reporting of information related to TA pre-compensation
+ uplink-TA-Reporting-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 26-5: Increasing the number of HARQ processes
+ max-HARQ-ProcessNumber-r17 ENUMERATED {u16d32, u32d16, u32d32} OPTIONAL,
+ -- R1 26-6: Type-2 HARQ codebook enhancement
+ type2-HARQ-Codebook-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 26-6a: Type-1 HARQ codebook enhancement
+ type1-HARQ-Codebook-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 26-6b: Type-3 HARQ codebook enhancement
+ type3-HARQ-Codebook-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 26-9: UE-specific K_offset
+ ue-specific-K-Offset-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 24-1f: Multiple PDSCH scheduling by single DCI for 120kHz in FR2-1
+ multiPDSCH-SingleDCI-FR2-1-SCS-120kHz-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 24-1g: Multiple PUSCH scheduling by single DCI for 120kHz in FR2-1
+ multiPUSCH-SingleDCI-FR2-1-SCS-120kHz-r17 ENUMERATED {supported} OPTIONAL,
+ -- R4 14-4: Parallel PRS measurements in RRC_INACTIVE state, FR1/FR2 diff
+ parallelPRS-MeasRRC-Inactive-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 27-1-2: Support of UE-TxTEGs for UL TDOA
+ nr-UE-TxTEG-ID-MaxSupport-r17 ENUMERATED {n1, n2, n3, n4, n6, n8} OPTIONAL,
+ -- R1 27-17: PRS processing in RRC_INACTIVE
+ prs-ProcessingRRC-Inactive-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 27-3-2: DL PRS measurement outside MG and in a PRS processing window
+ prs-ProcessingWindowType1A-r17 ENUMERATED {option1, option2, option3} OPTIONAL,
+ prs-ProcessingWindowType1B-r17 ENUMERATED {option1, option2, option3} OPTIONAL,
+ prs-ProcessingWindowType2-r17 ENUMERATED {option1, option2, option3} OPTIONAL,
+ -- R1 27-15: Positioning SRS transmission in RRC_INACTIVE state for initial UL BWP
+ srs-AllPosResourcesRRC-Inactive-r17 SRS-AllPosResourcesRRC-Inactive-r17 OPTIONAL,
+ -- R1 27-16: OLPC for positioning SRS in RRC_INACTIVE state - gNB
+ olpc-SRS-PosRRC-Inactive-r17 OLPC-SRS-Pos-r16 OPTIONAL,
+ -- R1 27-19: Spatial relation for positioning SRS in RRC_INACTIVE state - gNB
+ spatialRelationsSRS-PosRRC-Inactive-r17 SpatialRelationsSRS-Pos-r16 OPTIONAL,
+ -- R1 30-1: Increased maximum number of PUSCH Type A repetitions
+ maxNumberPUSCH-TypeA-Repetition-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 30-2: PUSCH Type A repetitions based on available slots
+ puschTypeA-RepetitionsAvailSlot-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 30-3: TB processing over multi-slot PUSCH
+ tb-ProcessingMultiSlotPUSCH-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 30-3a: Repetition of TB processing over multi-slot PUSCH
+ tb-ProcessingRepMultiSlotPUSCH-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 30-4: The maximum duration for DM-RS bundling
+ maxDurationDMRS-Bundling-r17 SEQUENCE {
+ fdd-r17 ENUMERATED {n4, n8, n16, n32} OPTIONAL,
+ tdd-r17 ENUMERATED {n2, n4, n8, n16} OPTIONAL
+ } OPTIONAL,
+ -- R1 30-6: Repetition of PUSCH transmission scheduled by RAR UL grant and DCI format 0_0 with CRC scrambled by TC-RNTI
+ pusch-RepetitionMsg3-r17 ENUMERATED {supported} OPTIONAL,
+ sharedSpectrumChAccessParamsPerBand-v1710 SharedSpectrumChAccessParamsPerBand-v1710 OPTIONAL,
+ -- R4 25-2: Parallel measurements on cells belonging to a different NGSO satellite than a serving satellite without scheduling restrictions
+ -- on normal operations with the serving cell
+ parallelMeasurementWithoutRestriction-r17 ENUMERATED {supported} OPTIONAL,
+ -- R4 25-5: Parallel measurements on multiple NGSO satellites within a SMTC
+ maxNumber-NGSO-SatellitesWithinOneSMTC-r17 ENUMERATED {n1, n2, n3, n4} OPTIONAL,
+ -- R1 26-10: K1 range extension
+ k1-RangeExtension-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 35-1: Aperiodic CSI-RS for tracking for fast SCell activation
+ aperiodicCSI-RS-FastScellActivation-r17 SEQUENCE {
+ maxNumberAperiodicCSI-RS-PerCC-r17 ENUMERATED {n8, n16, n32, n48, n64, n128, n255},
+ maxNumberAperiodicCSI-RS-AcrossCCs-r17 ENUMERATED {n8, n16, n32, n64, n128, n256, n512, n1024}
+ } OPTIONAL,
+ -- R1 35-2: Aperiodic CSI-RS bandwidth for tracking for fast SCell activation for 10MHz UE channel bandwidth
+ aperiodicCSI-RS-AdditionalBandwidth-r17 ENUMERATED {addBW-Set1, addBW-Set2} OPTIONAL,
+ -- R1 28-1a: RRC-configured DL BWP without CD-SSB or NCD-SSB
+ bwp-WithoutCD-SSB-OrNCD-SSB-RedCap-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 28-3: Half-duplex FDD operation type A for RedCap UE
+ halfDuplexFDD-TypeA-RedCap-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 27-15b: Positioning SRS transmission in RRC_INACTIVE state configured outside initial UL BWP
+ posSRS-RRC-Inactive-OutsideInitialUL-BWP-r17 PosSRS-RRC-Inactive-OutsideInitialUL-BWP-r17 OPTIONAL,
+ -- R4 15-3 UE support of CBW for 480kHz SCS
+ channelBWs-DL-SCS-480kHz-FR2-2-r17 BIT STRING (SIZE (8)) OPTIONAL,
+ channelBWs-UL-SCS-480kHz-FR2-2-r17 BIT STRING (SIZE (8)) OPTIONAL,
+ -- R4 15-4 UE support of CBW for 960kHz SCS
+ channelBWs-DL-SCS-960kHz-FR2-2-r17 BIT STRING (SIZE (8)) OPTIONAL,
+ channelBWs-UL-SCS-960kHz-FR2-2-r17 BIT STRING (SIZE (8)) OPTIONAL,
+ -- R4 17-1 UL gap for Tx power management
+ ul-GapFR2-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 25-4: One-shot HARQ ACK feedback triggered by DCI format 1_2
+ oneShotHARQ-feedbackTriggeredByDCI-1-2-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 25-5: PHY priority handling for one-shot HARQ ACK feedback
+ oneShotHARQ-feedbackPhy-Priority-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 25-6: Enhanced type 3 HARQ-ACK codebook feedback
+ enhancedType3-HARQ-CodebookFeedback-r17 SEQUENCE {
+ enhancedType3-HARQ-Codebooks-r17 ENUMERATED {n1, n2, n4, n8},
+ maxNumberPUCCH-Transmissions-r17 ENUMERATED {n1, n2, n3, n4, n5, n6, n7}
+ } OPTIONAL,
+ -- R1 25-7: Triggered HARQ-ACK codebook re-transmission
+ triggeredHARQ-CodebookRetx-r17 SEQUENCE {
+ minHARQ-Retx-Offset-r17 ENUMERATED {n-7, n-5, n-3, n-1, n1},
+ maxHARQ-Retx-Offset-r17 ENUMERATED {n4, n6, n8, n10, n12, n14, n16, n18, n20, n22, n24}
+ } OPTIONAL
+ ]],
+ [[
+ -- R4 22-2 support of one shot large UL timing adjustment
+ ue-OneShotUL-TimingAdj-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 25-2: Repetitions for PUCCH format 0, and 2 over multiple slots with K = 2, 4, 8
+ pucch-Repetition-F0-2-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 25-11a: 4-bits subband CQI for NTN and unlicensed
+ cqi-4-BitsSubbandNTN-SharedSpectrumChAccess-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 25-16: HARQ-ACK with different priorities multiplexing on a PUCCH/PUSCH
+ mux-HARQ-ACK-DiffPriorities-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 25-20a: Propagation delay compensation based on legacy TA procedure for NTN and unlicensed
+ ta-BasedPDC-NTN-SharedSpectrumChAccess-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 33-2b: DCI-based enabling/disabling ACK/NACK-based feedback for dynamic scheduling for multicast
+ ack-NACK-FeedbackForMulticastWithDCI-Enabler-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 33-2e: Multiple G-RNTIs for group-common PDSCHs
+ maxNumberG-RNTI-r17 INTEGER (2..8) OPTIONAL,
+ -- R1 33-2f: Dynamic multicast with DCI format 4_2
+ dynamicMulticastDCI-Format4-2-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 33-2i: Supported maximal modulation order for multicast PDSCH
+ maxModulationOrderForMulticast-r17 CHOICE {
+ fr1-r17 ENUMERATED {qam256, qam1024},
+ fr2-r17 ENUMERATED {qam64, qam256}
+ } OPTIONAL,
+ -- R1 33-3-1: Dynamic Slot-level repetition for group-common PDSCH for TN and licensed
+ dynamicSlotRepetitionMulticastTN-NonSharedSpectrumChAccess-r17 ENUMERATED {n8, n16} OPTIONAL,
+ -- R1 33-3-1a: Dynamic Slot-level repetition for group-common PDSCH for NTN and unlicensed
+ dynamicSlotRepetitionMulticastNTN-SharedSpectrumChAccess-r17 ENUMERATED {n8, n16} OPTIONAL,
+ -- R1 33-4-1: DCI-based enabling/disabling NACK-only based feedback for dynamic scheduling for multicast
+ nack-OnlyFeedbackForMulticastWithDCI-Enabler-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 33-5-1b: DCI-based enabling/disabling ACK/NACK-based feedback for dynamic scheduling for multicast
+ ack-NACK-FeedbackForSPS-MulticastWithDCI-Enabler-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 33-5-1h: Multiple G-CS-RNTIs for SPS group-common PDSCHs
+ maxNumberG-CS-RNTI-r17 INTEGER (2..8) OPTIONAL,
+ -- R1 33-10: Support group-common PDSCH RE-level rate matching for multicast
+ re-LevelRateMatchingForMulticast-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 36-1a: Support of 1024QAM for PDSCH with maximum 2 MIMO layers for FR1
+ pdsch-1024QAM-2MIMO-FR1-r17 ENUMERATED {supported} OPTIONAL,
+ -- R4 14-3 PRS measurement without MG
+ prs-MeasurementWithoutMG-r17 ENUMERATED {cpLength, quarterSymbol, halfSymbol, halfSlot} OPTIONAL,
+ -- R4 25-7: The number of target LEO satellites the UE can monitor per carrier
+ maxNumber-LEO-SatellitesPerCarrier-r17 INTEGER (3..4) OPTIONAL,
+ -- R1 27-3-3 DL PRS Processing Capability outside MG - buffering capability
+ prs-ProcessingCapabilityOutsideMGinPPW-r17 SEQUENCE (SIZE(1..3)) OF PRS-ProcessingCapabilityOutsideMGinPPWperType-r17 OPTIONAL,
+ -- R1 27-15a: Positioning SRS transmission in RRC_INACTIVE state for initial UL BWP with semi-persistent SRS
+ srs-SemiPersistent-PosResourcesRRC-Inactive-r17 SEQUENCE {
+ maxNumOfSemiPersistentSRSposResources-r17 ENUMERATED {n1, n2, n4, n8, n16, n32, n64},
+ maxNumOfSemiPersistentSRSposResourcesPerSlot-r17 ENUMERATED {n1, n2, n3, n4, n5, n6, n8, n10, n12, n14}
+ } OPTIONAL,
+ -- R2: UE support of CBW for 120kHz SCS
+ channelBWs-DL-SCS-120kHz-FR2-2-r17 BIT STRING (SIZE (8)) OPTIONAL,
+ channelBWs-UL-SCS-120kHz-FR2-2-r17 BIT STRING (SIZE (8)) OPTIONAL
+ ]],
+ [[
+ -- R1 30-4a: DM-RS bundling for PUSCH repetition type A
+ dmrs-BundlingPUSCH-RepTypeA-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 30-4b: DM-RS bundling for PUSCH repetition type B
+ dmrs-BundlingPUSCH-RepTypeB-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 30-4c: DM-RS bundling for TB processing over multi-slot PUSCH
+ dmrs-BundlingPUSCH-multiSlot-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 30-4d: DMRS bundling for PUCCH repetitions
+ dmrs-BundlingPUCCH-Rep-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 30-4e: Enhanced inter-slot frequency hopping with inter-slot bundling for PUSCH
+ interSlotFreqHopInterSlotBundlingPUSCH-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 30-4f: Enhanced inter-slot frequency hopping for PUCCH repetitions with DMRS bundling
+ interSlotFreqHopPUCCH-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 30-4g: Restart DM-RS bundling
+ dmrs-BundlingRestart-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 30-4h: DM-RS bundling for non-back-to-back transmission
+ dmrs-BundlingNonBackToBackTX-r17 ENUMERATED {supported} OPTIONAL
+ ]]
+}
+
+-- TAG-RF-PARAMETERS-STOP
+-- TAG-RF-PARAMETERSMRDC-START
+
+RF-ParametersMRDC ::= SEQUENCE {
+ supportedBandCombinationList BandCombinationList OPTIONAL,
+ appliedFreqBandListFilter FreqBandList OPTIONAL,
+ ...,
+ [[
+ srs-SwitchingTimeRequested ENUMERATED {true} OPTIONAL,
+ supportedBandCombinationList-v1540 BandCombinationList-v1540 OPTIONAL
+ ]],
+ [[
+ supportedBandCombinationList-v1550 BandCombinationList-v1550 OPTIONAL
+ ]],
+ [[
+ supportedBandCombinationList-v1560 BandCombinationList-v1560 OPTIONAL,
+ supportedBandCombinationListNEDC-Only BandCombinationList OPTIONAL
+ ]],
+ [[
+ supportedBandCombinationList-v1570 BandCombinationList-v1570 OPTIONAL
+ ]],
+ [[
+ supportedBandCombinationList-v1580 BandCombinationList-v1580 OPTIONAL
+ ]],
+ [[
+ supportedBandCombinationList-v1590 BandCombinationList-v1590 OPTIONAL
+ ]],
+ [[
+ supportedBandCombinationListNEDC-Only-v15a0 SEQUENCE {
+ supportedBandCombinationList-v1540 BandCombinationList-v1540 OPTIONAL,
+ supportedBandCombinationList-v1560 BandCombinationList-v1560 OPTIONAL,
+ supportedBandCombinationList-v1570 BandCombinationList-v1570 OPTIONAL,
+ supportedBandCombinationList-v1580 BandCombinationList-v1580 OPTIONAL,
+ supportedBandCombinationList-v1590 BandCombinationList-v1590 OPTIONAL
+ } OPTIONAL
+ ]],
+ [[
+ supportedBandCombinationList-v1610 BandCombinationList-v1610 OPTIONAL,
+ supportedBandCombinationListNEDC-Only-v1610 BandCombinationList-v1610 OPTIONAL,
+ supportedBandCombinationList-UplinkTxSwitch-r16 BandCombinationList-UplinkTxSwitch-r16 OPTIONAL
+ ]],
+ [[
+ supportedBandCombinationList-v1630 BandCombinationList-v1630 OPTIONAL,
+ supportedBandCombinationListNEDC-Only-v1630 BandCombinationList-v1630 OPTIONAL,
+ supportedBandCombinationList-UplinkTxSwitch-v1630 BandCombinationList-UplinkTxSwitch-v1630 OPTIONAL
+ ]],
+ [[
+ supportedBandCombinationList-v1640 BandCombinationList-v1640 OPTIONAL,
+ supportedBandCombinationListNEDC-Only-v1640 BandCombinationList-v1640 OPTIONAL,
+ supportedBandCombinationList-UplinkTxSwitch-v1640 BandCombinationList-UplinkTxSwitch-v1640 OPTIONAL
+ ]],
+ [[
+ supportedBandCombinationList-UplinkTxSwitch-v1670 BandCombinationList-UplinkTxSwitch-v1670 OPTIONAL
+ ]],
+ [[
+ supportedBandCombinationList-v1700 BandCombinationList-v1700 OPTIONAL,
+ supportedBandCombinationList-UplinkTxSwitch-v1700 BandCombinationList-UplinkTxSwitch-v1700 OPTIONAL
+ ]],
+ [[
+ supportedBandCombinationList-v1720 BandCombinationList-v1720 OPTIONAL,
+ supportedBandCombinationListNEDC-Only-v1720 SEQUENCE {
+ supportedBandCombinationList-v1700 BandCombinationList-v1700 OPTIONAL,
+ supportedBandCombinationList-v1720 BandCombinationList-v1720 OPTIONAL
+ } OPTIONAL,
+ supportedBandCombinationList-UplinkTxSwitch-v1720 BandCombinationList-UplinkTxSwitch-v1720 OPTIONAL
+ ]],
+ [[
+ supportedBandCombinationList-v1730 BandCombinationList-v1730 OPTIONAL,
+ supportedBandCombinationListNEDC-Only-v1730 BandCombinationList-v1730 OPTIONAL,
+ supportedBandCombinationList-UplinkTxSwitch-v1730 BandCombinationList-UplinkTxSwitch-v1730 OPTIONAL
+ ]]
+}
+
+RF-ParametersMRDC-v15g0 ::= SEQUENCE {
+ supportedBandCombinationList-v15g0 BandCombinationList-v15g0 OPTIONAL,
+ supportedBandCombinationListNEDC-Only-v15g0 BandCombinationList-v15g0 OPTIONAL
+}
+
+-- TAG-RF-PARAMETERSMRDC-STOP
+-- TAG-RLC-PARAMETERS-START
+
+RLC-Parameters ::= SEQUENCE {
+ am-WithShortSN ENUMERATED {supported} OPTIONAL,
+ um-WithShortSN ENUMERATED {supported} OPTIONAL,
+ um-WithLongSN ENUMERATED {supported} OPTIONAL,
+ ...,
+ [[
+ extendedT-PollRetransmit-r16 ENUMERATED {supported} OPTIONAL,
+ extendedT-StatusProhibit-r16 ENUMERATED {supported} OPTIONAL
+ ]],
+ [[
+ am-WithLongSN-RedCap-r17 ENUMERATED {supported} OPTIONAL
+ ]]
+}
+
+-- TAG-RLC-PARAMETERS-STOP
+-- TAG-SDAP-PARAMETERS-START
+
+SDAP-Parameters ::= SEQUENCE {
+ as-ReflectiveQoS ENUMERATED {true} OPTIONAL,
+ ...,
+ [[
+ sdap-QOS-IAB-r16 ENUMERATED {supported} OPTIONAL,
+ sdapHeaderIAB-r16 ENUMERATED {supported} OPTIONAL
+ ]]
+
+}
+
+-- TAG-SDAP-PARAMETERS-STOP
+-- TAG-SIDELINKPARAMETERS-START
+
+SidelinkParameters-r16 ::= SEQUENCE {
+ sidelinkParametersNR-r16 SidelinkParametersNR-r16 OPTIONAL,
+ sidelinkParametersEUTRA-r16 SidelinkParametersEUTRA-r16 OPTIONAL
+}
+
+SidelinkParametersNR-r16 ::= SEQUENCE {
+ rlc-ParametersSidelink-r16 RLC-ParametersSidelink-r16 OPTIONAL,
+ mac-ParametersSidelink-r16 MAC-ParametersSidelink-r16 OPTIONAL,
+ fdd-Add-UE-Sidelink-Capabilities-r16 UE-SidelinkCapabilityAddXDD-Mode-r16 OPTIONAL,
+ tdd-Add-UE-Sidelink-Capabilities-r16 UE-SidelinkCapabilityAddXDD-Mode-r16 OPTIONAL,
+ supportedBandListSidelink-r16 SEQUENCE (SIZE (1..maxBands)) OF BandSidelink-r16 OPTIONAL,
+ ...,
+ [[
+ relayParameters-r17 RelayParameters-r17 OPTIONAL
+ ]],
+ [[
+ -- R1 32-x: Use of new P0 parameters for open loop power control
+ p0-OLPC-Sidelink-r17 ENUMERATED {supported} OPTIONAL
+ ]]
+}
+
+SidelinkParametersEUTRA-r16 ::= SEQUENCE {
+ sl-ParametersEUTRA1-r16 OCTET STRING OPTIONAL,
+ sl-ParametersEUTRA2-r16 OCTET STRING OPTIONAL,
+ sl-ParametersEUTRA3-r16 OCTET STRING OPTIONAL,
+ supportedBandListSidelinkEUTRA-r16 SEQUENCE (SIZE (1..maxBandsEUTRA)) OF BandSidelinkEUTRA-r16 OPTIONAL,
+ ...
+}
+
+RLC-ParametersSidelink-r16 ::= SEQUENCE {
+ am-WithLongSN-Sidelink-r16 ENUMERATED {supported} OPTIONAL,
+ um-WithLongSN-Sidelink-r16 ENUMERATED {supported} OPTIONAL,
+ ...
+}
+
+MAC-ParametersSidelink-r16 ::= SEQUENCE {
+ mac-ParametersSidelinkCommon-r16 MAC-ParametersSidelinkCommon-r16 OPTIONAL,
+ mac-ParametersSidelinkXDD-Diff-r16 MAC-ParametersSidelinkXDD-Diff-r16 OPTIONAL,
+ ...
+}
+
+UE-SidelinkCapabilityAddXDD-Mode-r16 ::= SEQUENCE {
+ mac-ParametersSidelinkXDD-Diff-r16 MAC-ParametersSidelinkXDD-Diff-r16 OPTIONAL
+}
+
+MAC-ParametersSidelinkCommon-r16 ::= SEQUENCE {
+ lcp-RestrictionSidelink-r16 ENUMERATED {supported} OPTIONAL,
+ multipleConfiguredGrantsSidelink-r16 ENUMERATED {supported} OPTIONAL,
+ ...,
+ [[
+ drx-OnSidelink-r17 ENUMERATED {supported} OPTIONAL
+ ]]
+}
+
+MAC-ParametersSidelinkXDD-Diff-r16 ::= SEQUENCE {
+ multipleSR-ConfigurationsSidelink-r16 ENUMERATED {supported} OPTIONAL,
+ logicalChannelSR-DelayTimerSidelink-r16 ENUMERATED {supported} OPTIONAL,
+ ...
+}
+
+BandSidelinkEUTRA-r16 ::= SEQUENCE {
+ freqBandSidelinkEUTRA-r16 FreqBandIndicatorEUTRA,
+ -- R1 15-7: Transmitting LTE sidelink mode 3 scheduled by NR Uu
+ gnb-ScheduledMode3SidelinkEUTRA-r16 SEQUENCE {
+ gnb-ScheduledMode3DelaySidelinkEUTRA-r16 ENUMERATED {ms0, ms0dot25, ms0dot5, ms0dot625, ms0dot75, ms1,
+ ms1dot25, ms1dot5, ms1dot75, ms2, ms2dot5, ms3, ms4,
+ ms5, ms6, ms8, ms10, ms20}
+ } OPTIONAL,
+ -- R1 15-9: Transmitting LTE sidelink mode 4 configured by NR Uu
+ gnb-ScheduledMode4SidelinkEUTRA-r16 ENUMERATED {supported} OPTIONAL
+}
+
+BandSidelink-r16 ::= SEQUENCE {
+ freqBandSidelink-r16 FreqBandIndicatorNR,
+ --15-1
+ sl-Reception-r16 SEQUENCE {
+ harq-RxProcessSidelink-r16 ENUMERATED {n16, n24, n32, n48, n64},
+ pscch-RxSidelink-r16 ENUMERATED {value1, value2},
+ scs-CP-PatternRxSidelink-r16 CHOICE {
+ fr1-r16 SEQUENCE {
+ scs-15kHz-r16 BIT STRING (SIZE (16)) OPTIONAL,
+ scs-30kHz-r16 BIT STRING (SIZE (16)) OPTIONAL,
+ scs-60kHz-r16 BIT STRING (SIZE (16)) OPTIONAL
+ },
+ fr2-r16 SEQUENCE {
+ scs-60kHz-r16 BIT STRING (SIZE (16)) OPTIONAL,
+ scs-120kHz-r16 BIT STRING (SIZE (16)) OPTIONAL
+ }
+ } OPTIONAL,
+ extendedCP-RxSidelink-r16 ENUMERATED {supported} OPTIONAL
+ } OPTIONAL,
+ --15-2
+ sl-TransmissionMode1-r16 SEQUENCE {
+ harq-TxProcessModeOneSidelink-r16 ENUMERATED {n8, n16},
+ scs-CP-PatternTxSidelinkModeOne-r16 CHOICE {
+ fr1-r16 SEQUENCE {
+ scs-15kHz-r16 BIT STRING (SIZE (16)) OPTIONAL,
+ scs-30kHz-r16 BIT STRING (SIZE (16)) OPTIONAL,
+ scs-60kHz-r16 BIT STRING (SIZE (16)) OPTIONAL
+ },
+ fr2-r16 SEQUENCE {
+ scs-60kHz-r16 BIT STRING (SIZE (16)) OPTIONAL,
+ scs-120kHz-r16 BIT STRING (SIZE (16)) OPTIONAL
+ }
+ },
+ extendedCP-TxSidelink-r16 ENUMERATED {supported} OPTIONAL,
+ harq-ReportOnPUCCH-r16 ENUMERATED {supported} OPTIONAL
+ } OPTIONAL,
+ --15-4
+ sync-Sidelink-r16 SEQUENCE {
+ gNB-Sync-r16 ENUMERATED {supported} OPTIONAL,
+ gNB-GNSS-UE-SyncWithPriorityOnGNB-ENB-r16 ENUMERATED {supported} OPTIONAL,
+ gNB-GNSS-UE-SyncWithPriorityOnGNSS-r16 ENUMERATED {supported} OPTIONAL
+ } OPTIONAL,
+ --15-10
+ sl-Tx-256QAM-r16 ENUMERATED {supported} OPTIONAL,
+ --15-11
+ psfch-FormatZeroSidelink-r16 SEQUENCE {
+ psfch-RxNumber ENUMERATED {n5, n15, n25, n32, n35, n45, n50, n64},
+ psfch-TxNumber ENUMERATED {n4, n8, n16}
+ } OPTIONAL,
+ --15-12
+ lowSE-64QAM-MCS-TableSidelink-r16 ENUMERATED {supported} OPTIONAL,
+ --15-15
+ enb-sync-Sidelink-r16 ENUMERATED {supported} OPTIONAL,
+ ...,
+ [[
+ --15-3
+ sl-TransmissionMode2-r16 SEQUENCE {
+ harq-TxProcessModeTwoSidelink-r16 ENUMERATED {n8, n16},
+ scs-CP-PatternTxSidelinkModeTwo-r16 ENUMERATED {supported} OPTIONAL,
+ dl-openLoopPC-Sidelink-r16 ENUMERATED {supported} OPTIONAL
+ } OPTIONAL,
+ --15-5
+ congestionControlSidelink-r16 SEQUENCE {
+ cbr-ReportSidelink-r16 ENUMERATED {supported} OPTIONAL,
+ cbr-CR-TimeLimitSidelink-r16 ENUMERATED {time1, time2}
+ } OPTIONAL,
+ --15-22
+ fewerSymbolSlotSidelink-r16 ENUMERATED {supported} OPTIONAL,
+ --15-23
+ sl-openLoopPC-RSRP-ReportSidelink-r16 ENUMERATED {supported} OPTIONAL,
+ --13-1
+ sl-Rx-256QAM-r16 ENUMERATED {supported} OPTIONAL
+ ]],
+ [[
+ ue-PowerClassSidelink-r16 ENUMERATED {pc2, pc3, spare6, spare5, spare4, spare3, spare2, spare1}
+ OPTIONAL
+ ]],
+ [[
+ --32-4a
+ sl-TransmissionMode2-RandomResourceSelection-r17 SEQUENCE {
+ harq-TxProcessModeTwoSidelink-r17 ENUMERATED {n8, n16},
+ scs-CP-PatternTxSidelinkModeTwo-r17 CHOICE {
+ fr1-r17 SEQUENCE {
+ scs-15kHz-r17 BIT STRING (SIZE (16)) OPTIONAL,
+ scs-30kHz-r17 BIT STRING (SIZE (16)) OPTIONAL,
+ scs-60kHz-r17 BIT STRING (SIZE (16)) OPTIONAL
+ },
+ fr2-r17 SEQUENCE {
+ scs-60kHz-r17 BIT STRING (SIZE (16)) OPTIONAL,
+ scs-120kHz-r17 BIT STRING (SIZE (16)) OPTIONAL
+ }
+ } OPTIONAL,
+ extendedCP-Mode2Random-r17 ENUMERATED {supported} OPTIONAL,
+ dl-openLoopPC-Sidelink-r17 ENUMERATED {supported} OPTIONAL
+ } OPTIONAL,
+ --32-4b
+ sync-Sidelink-v1710 SEQUENCE {
+ sync-GNSS-r17 ENUMERATED {supported} OPTIONAL,
+ gNB-Sync-r17 ENUMERATED {supported} OPTIONAL,
+ gNB-GNSS-UE-SyncWithPriorityOnGNB-ENB-r17 ENUMERATED {supported} OPTIONAL,
+ gNB-GNSS-UE-SyncWithPriorityOnGNSS-r17 ENUMERATED {supported} OPTIONAL
+ } OPTIONAL,
+ --32-4c
+ enb-sync-Sidelink-v1710 ENUMERATED {supported} OPTIONAL,
+ --32-5a-2
+ rx-IUC-Scheme1-PreferredMode2Sidelink-r17 ENUMERATED {supported} OPTIONAL,
+ --32-5a-3
+ rx-IUC-Scheme1-NonPreferredMode2Sidelink-r17 ENUMERATED {supported} OPTIONAL,
+ --32-5b-2
+ rx-IUC-Scheme2-Mode2Sidelink-r17 ENUMERATED {n5, n15, n25, n32, n35, n45, n50, n64} OPTIONAL,
+ --32-6-1
+ rx-IUC-Scheme1-SCI-r17 ENUMERATED {supported} OPTIONAL,
+ --32-6-2
+ rx-IUC-Scheme1-SCI-ExplicitReq-r17 ENUMERATED {supported} OPTIONAL
+ ]]
+}
+
+RelayParameters-r17 ::= SEQUENCE {
+ relayUE-Operation-L2-r17 ENUMERATED {supported} OPTIONAL,
+ remoteUE-Operation-L2-r17 ENUMERATED {supported} OPTIONAL,
+ remoteUE-PathSwitchToIdleInactiveRelay-r17 ENUMERATED {supported} OPTIONAL,
+ ...
+}
+
+-- TAG-SIDELINKPARAMETERS-STOP
+-- TAG-SIMULTANEOUSRXTXPERBANDPAIR-START
+
+SimultaneousRxTxPerBandPair ::= BIT STRING (SIZE (3..496))
+
+-- TAG-SIMULTANEOUSRXTXPERBANDPAIR-STOP
+-- TAG-SON-PARAMETERS-START
+
+SON-Parameters-r16 ::= SEQUENCE {
+ rach-Report-r16 ENUMERATED {supported} OPTIONAL,
+ ...,
+ [[
+ rlfReportCHO-r17 ENUMERATED {supported} OPTIONAL,
+ rlfReportDAPS-r17 ENUMERATED {supported} OPTIONAL,
+ success-HO-Report-r17 ENUMERATED {supported} OPTIONAL,
+ twoStepRACH-Report-r17 ENUMERATED {supported} OPTIONAL,
+ pscell-MHI-Report-r17 ENUMERATED {supported} OPTIONAL,
+ onDemandSI-Report-r17 ENUMERATED {supported} OPTIONAL
+ ]]
+}
+
+-- TAG-SON-PARAMETERS-STOP
+-- TAG-SPATIALRELATIONSSRS-POS-START
+
+SpatialRelationsSRS-Pos-r16 ::= SEQUENCE {
+ spatialRelation-SRS-PosBasedOnSSB-Serving-r16 ENUMERATED {supported} OPTIONAL,
+ spatialRelation-SRS-PosBasedOnCSI-RS-Serving-r16 ENUMERATED {supported} OPTIONAL,
+ spatialRelation-SRS-PosBasedOnPRS-Serving-r16 ENUMERATED {supported} OPTIONAL,
+ spatialRelation-SRS-PosBasedOnSRS-r16 ENUMERATED {supported} OPTIONAL,
+ spatialRelation-SRS-PosBasedOnSSB-Neigh-r16 ENUMERATED {supported} OPTIONAL,
+ spatialRelation-SRS-PosBasedOnPRS-Neigh-r16 ENUMERATED {supported} OPTIONAL
+}
+
+--TAG-SPATIALRELATIONSSRS-POS-STOP
+-- TAG-SRS-ALLPOSRESOURCESRRC-INACTIVE-START
+
+SRS-AllPosResourcesRRC-Inactive-r17 ::= SEQUENCE {
+ srs-PosResourcesRRC-Inactive-r17 SEQUENCE {
+ -- R1 27-15: Positioning SRS transmission in RRC_INACTIVE state for initial UL BWP
+ maxNumberSRS-PosResourceSetPerBWP-r17 ENUMERATED {n1, n2, n4, n8, n12, n16},
+ maxNumberSRS-PosResourcesPerBWP-r17 ENUMERATED {n1, n2, n4, n8, n16, n32, n64},
+ maxNumberSRS-ResourcesPerBWP-PerSlot-r17 ENUMERATED {n1, n2, n3, n4, n5, n6, n8, n10, n12, n14},
+ maxNumberPeriodicSRS-PosResourcesPerBWP-r17 ENUMERATED {n1, n2, n4, n8, n16, n32, n64},
+ maxNumberPeriodicSRS-PosResourcesPerBWP-PerSlot-r17 ENUMERATED {n1, n2, n3, n4, n5, n6, n8, n10, n12, n14},
+ dummy1 ENUMERATED {n1, n2, n4, n8, n16, n32, n64 },
+ dummy2 ENUMERATED {n1, n2, n3, n4, n5, n6, n8, n10, n12, n14}
+ }
+}
+
+-- TAG-SRS-ALLPOSRESOURCESRRC-INACTIVE-STOP
+-- TAG-SRS-SWITCHINGTIMENR-START
+
+SRS-SwitchingTimeNR ::= SEQUENCE {
+ switchingTimeDL ENUMERATED {n0us, n30us, n100us, n140us, n200us, n300us, n500us, n900us} OPTIONAL,
+ switchingTimeUL ENUMERATED {n0us, n30us, n100us, n140us, n200us, n300us, n500us, n900us} OPTIONAL
+}
+
+-- TAG-SRS-SWITCHINGTIMENR-STOP
+-- TAG-SRS-SWITCHINGTIMEEUTRA-START
+
+SRS-SwitchingTimeEUTRA ::= SEQUENCE {
+ switchingTimeDL ENUMERATED {n0, n0dot5, n1, n1dot5, n2, n2dot5, n3, n3dot5, n4, n4dot5, n5, n5dot5, n6, n6dot5, n7}
+ OPTIONAL,
+ switchingTimeUL ENUMERATED {n0, n0dot5, n1, n1dot5, n2, n2dot5, n3, n3dot5, n4, n4dot5, n5, n5dot5, n6, n6dot5, n7}
+ OPTIONAL
+}
+-- TAG-SRS-SWITCHINGTIMEEUTRA-STOP
+-- TAG-SUPPORTEDBANDWIDTH-START
+
+SupportedBandwidth ::= CHOICE {
+ fr1 ENUMERATED {mhz5, mhz10, mhz15, mhz20, mhz25, mhz30, mhz40, mhz50, mhz60, mhz80, mhz100},
+ fr2 ENUMERATED {mhz50, mhz100, mhz200, mhz400}
+}
+
+SupportedBandwidth-v1700 ::= CHOICE {
+ fr1-r17 ENUMERATED {mhz5, mhz10, mhz15, mhz20, mhz25, mhz30, mhz35, mhz40, mhz45, mhz50, mhz60, mhz70, mhz80, mhz90, mhz100},
+ fr2-r17 ENUMERATED {mhz50, mhz100, mhz200, mhz400, mhz800, mhz1600, mhz2000}
+}
+
+-- TAG-SUPPORTEDBANDWIDTH-STOP
+-- TAG-UE-BASEDPERFMEAS-PARAMETERS-START
+
+UE-BasedPerfMeas-Parameters-r16 ::= SEQUENCE {
+ barometerMeasReport-r16 ENUMERATED {supported} OPTIONAL,
+ immMeasBT-r16 ENUMERATED {supported} OPTIONAL,
+ immMeasWLAN-r16 ENUMERATED {supported} OPTIONAL,
+ loggedMeasBT-r16 ENUMERATED {supported} OPTIONAL,
+ loggedMeasurements-r16 ENUMERATED {supported} OPTIONAL,
+ loggedMeasWLAN-r16 ENUMERATED {supported} OPTIONAL,
+ orientationMeasReport-r16 ENUMERATED {supported} OPTIONAL,
+ speedMeasReport-r16 ENUMERATED {supported} OPTIONAL,
+ gnss-Location-r16 ENUMERATED {supported} OPTIONAL,
+ ulPDCP-Delay-r16 ENUMERATED {supported} OPTIONAL,
+ ...,
+ [[
+ sigBasedLogMDT-OverrideProtect-r17 ENUMERATED {supported} OPTIONAL,
+ multipleCEF-Report-r17 ENUMERATED {supported} OPTIONAL,
+ excessPacketDelay-r17 ENUMERATED {supported} OPTIONAL,
+ earlyMeasLog-r17 ENUMERATED {supported} OPTIONAL
+ ]]
+}
+
+-- TAG-UE-BASEDPERFMEAS-PARAMETERS-STOP
+-- TAG-UE-CAPABILITYRAT-CONTAINERLIST-START
+
+UE-CapabilityRAT-ContainerList ::= SEQUENCE (SIZE (0..maxRAT-CapabilityContainers)) OF UE-CapabilityRAT-Container
+
+UE-CapabilityRAT-Container ::= SEQUENCE {
+ rat-Type RAT-Type,
+ ue-CapabilityRAT-Container OCTET STRING
+}
+
+-- TAG-UE-CAPABILITYRAT-CONTAINERLIST-STOP
+-- TAG-UE-CAPABILITYRAT-REQUESTLIST-START
+
+UE-CapabilityRAT-RequestList ::= SEQUENCE (SIZE (1..maxRAT-CapabilityContainers)) OF UE-CapabilityRAT-Request
+
+UE-CapabilityRAT-Request ::= SEQUENCE {
+ rat-Type RAT-Type,
+ capabilityRequestFilter OCTET STRING OPTIONAL, -- Need N
+ ...
+}
+
+-- TAG-UE-CAPABILITYRAT-REQUESTLIST-STOP
+-- TAG-UE-CAPABILITYREQUESTFILTERCOMMON-START
+
+UE-CapabilityRequestFilterCommon ::= SEQUENCE {
+ mrdc-Request SEQUENCE {
+ omitEN-DC ENUMERATED {true} OPTIONAL, -- Need N
+ includeNR-DC ENUMERATED {true} OPTIONAL, -- Need N
+ includeNE-DC ENUMERATED {true} OPTIONAL -- Need N
+ } OPTIONAL, -- Need N
+ ...,
+ [[
+ codebookTypeRequest-r16 SEQUENCE {
+ type1-SinglePanel-r16 ENUMERATED {true} OPTIONAL, -- Need N
+ type1-MultiPanel-r16 ENUMERATED {true} OPTIONAL, -- Need N
+ type2-r16 ENUMERATED {true} OPTIONAL, -- Need N
+ type2-PortSelection-r16 ENUMERATED {true} OPTIONAL -- Need N
+ } OPTIONAL, -- Need N
+ uplinkTxSwitchRequest-r16 ENUMERATED {true} OPTIONAL -- Need N
+ ]],
+ [[
+ requestedCellGrouping-r16 SEQUENCE (SIZE (1..maxCellGroupings-r16)) OF CellGrouping-r16 OPTIONAL -- Cond NRDC
+ ]],
+ [[
+ fallbackGroupFiveRequest-r17 ENUMERATED {true} OPTIONAL -- Need N
+ ]]
+}
+
+CellGrouping-r16 ::= SEQUENCE {
+ mcg-r16 SEQUENCE (SIZE (1..maxBands)) OF FreqBandIndicatorNR,
+ scg-r16 SEQUENCE (SIZE (1..maxBands)) OF FreqBandIndicatorNR,
+ mode-r16 ENUMERATED {sync, async}
+}
+
+-- TAG-UE-CAPABILITYREQUESTFILTERCOMMON-STOP
+-- TAG-UE-CAPABILITYREQUESTFILTERNR-START
+
+UE-CapabilityRequestFilterNR ::= SEQUENCE {
+ frequencyBandListFilter FreqBandList OPTIONAL, -- Need N
+ nonCriticalExtension UE-CapabilityRequestFilterNR-v1540 OPTIONAL
+}
+
+UE-CapabilityRequestFilterNR-v1540 ::= SEQUENCE {
+ srs-SwitchingTimeRequest ENUMERATED {true} OPTIONAL, -- Need N
+ nonCriticalExtension UE-CapabilityRequestFilterNR-v1710 OPTIONAL
+}
+
+UE-CapabilityRequestFilterNR-v1710 ::= SEQUENCE {
+ sidelinkRequest-r17 ENUMERATED {true} OPTIONAL, -- Need N
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+-- TAG-UE-CAPABILITYREQUESTFILTERNR-STOP
+-- TAG-UE-MRDC-CAPABILITY-START
+
+UE-MRDC-Capability ::= SEQUENCE {
+ measAndMobParametersMRDC MeasAndMobParametersMRDC OPTIONAL,
+ phy-ParametersMRDC-v1530 Phy-ParametersMRDC OPTIONAL,
+ rf-ParametersMRDC RF-ParametersMRDC,
+ generalParametersMRDC GeneralParametersMRDC-XDD-Diff OPTIONAL,
+ fdd-Add-UE-MRDC-Capabilities UE-MRDC-CapabilityAddXDD-Mode OPTIONAL,
+ tdd-Add-UE-MRDC-Capabilities UE-MRDC-CapabilityAddXDD-Mode OPTIONAL,
+ fr1-Add-UE-MRDC-Capabilities UE-MRDC-CapabilityAddFRX-Mode OPTIONAL,
+ fr2-Add-UE-MRDC-Capabilities UE-MRDC-CapabilityAddFRX-Mode OPTIONAL,
+ featureSetCombinations SEQUENCE (SIZE (1..maxFeatureSetCombinations)) OF FeatureSetCombination OPTIONAL,
+ pdcp-ParametersMRDC-v1530 PDCP-ParametersMRDC OPTIONAL,
+ lateNonCriticalExtension OCTET STRING (CONTAINING UE-MRDC-Capability-v15g0) OPTIONAL,
+ nonCriticalExtension UE-MRDC-Capability-v1560 OPTIONAL
+}
+
+-- Regular non-critical extensions:
+UE-MRDC-Capability-v1560 ::= SEQUENCE {
+ receivedFilters OCTET STRING (CONTAINING UECapabilityEnquiry-v1560-IEs) OPTIONAL,
+ measAndMobParametersMRDC-v1560 MeasAndMobParametersMRDC-v1560 OPTIONAL,
+ fdd-Add-UE-MRDC-Capabilities-v1560 UE-MRDC-CapabilityAddXDD-Mode-v1560 OPTIONAL,
+ tdd-Add-UE-MRDC-Capabilities-v1560 UE-MRDC-CapabilityAddXDD-Mode-v1560 OPTIONAL,
+ nonCriticalExtension UE-MRDC-Capability-v1610 OPTIONAL
+}
+
+UE-MRDC-Capability-v1610 ::= SEQUENCE {
+ measAndMobParametersMRDC-v1610 MeasAndMobParametersMRDC-v1610 OPTIONAL,
+ generalParametersMRDC-v1610 GeneralParametersMRDC-v1610 OPTIONAL,
+ pdcp-ParametersMRDC-v1610 PDCP-ParametersMRDC-v1610 OPTIONAL,
+ nonCriticalExtension UE-MRDC-Capability-v1700 OPTIONAL
+}
+
+UE-MRDC-Capability-v1700 ::= SEQUENCE {
+ measAndMobParametersMRDC-v1700 MeasAndMobParametersMRDC-v1700,
+ nonCriticalExtension UE-MRDC-Capability-v1730 OPTIONAL
+}
+
+UE-MRDC-Capability-v1730 ::= SEQUENCE {
+ measAndMobParametersMRDC-v1730 MeasAndMobParametersMRDC-v1730 OPTIONAL,
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+-- Late non-critical extensions:
+UE-MRDC-Capability-v15g0 ::= SEQUENCE {
+ rf-ParametersMRDC-v15g0 RF-ParametersMRDC-v15g0 OPTIONAL,
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+UE-MRDC-CapabilityAddXDD-Mode ::= SEQUENCE {
+ measAndMobParametersMRDC-XDD-Diff MeasAndMobParametersMRDC-XDD-Diff OPTIONAL,
+ generalParametersMRDC-XDD-Diff GeneralParametersMRDC-XDD-Diff OPTIONAL
+}
+
+UE-MRDC-CapabilityAddXDD-Mode-v1560 ::= SEQUENCE {
+ measAndMobParametersMRDC-XDD-Diff-v1560 MeasAndMobParametersMRDC-XDD-Diff-v1560 OPTIONAL
+}
+
+UE-MRDC-CapabilityAddFRX-Mode ::= SEQUENCE {
+ measAndMobParametersMRDC-FRX-Diff MeasAndMobParametersMRDC-FRX-Diff
+}
+
+
+GeneralParametersMRDC-XDD-Diff ::= SEQUENCE {
+ splitSRB-WithOneUL-Path ENUMERATED {supported} OPTIONAL,
+ splitDRB-withUL-Both-MCG-SCG ENUMERATED {supported} OPTIONAL,
+ srb3 ENUMERATED {supported} OPTIONAL,
+ dummy ENUMERATED {supported} OPTIONAL,
+ ...
+}
+
+GeneralParametersMRDC-v1610 ::= SEQUENCE {
+ f1c-OverEUTRA-r16 ENUMERATED {supported} OPTIONAL
+}
+
+-- TAG-UE-MRDC-CAPABILITY-STOP
+-- TAG-UE-NR-CAPABILITY-START
+
+UE-NR-Capability ::= SEQUENCE {
+ accessStratumRelease AccessStratumRelease,
+ pdcp-Parameters PDCP-Parameters,
+ rlc-Parameters RLC-Parameters OPTIONAL,
+ mac-Parameters MAC-Parameters OPTIONAL,
+ phy-Parameters Phy-Parameters,
+ rf-Parameters RF-Parameters,
+ measAndMobParameters MeasAndMobParameters OPTIONAL,
+ fdd-Add-UE-NR-Capabilities UE-NR-CapabilityAddXDD-Mode OPTIONAL,
+ tdd-Add-UE-NR-Capabilities UE-NR-CapabilityAddXDD-Mode OPTIONAL,
+ fr1-Add-UE-NR-Capabilities UE-NR-CapabilityAddFRX-Mode OPTIONAL,
+ fr2-Add-UE-NR-Capabilities UE-NR-CapabilityAddFRX-Mode OPTIONAL,
+ featureSets FeatureSets OPTIONAL,
+ featureSetCombinations SEQUENCE (SIZE (1..maxFeatureSetCombinations)) OF FeatureSetCombination OPTIONAL,
+ lateNonCriticalExtension OCTET STRING (CONTAINING UE-NR-Capability-v15c0) OPTIONAL,
+ nonCriticalExtension UE-NR-Capability-v1530 OPTIONAL
+}
+
+-- Regular non-critical Rel-15 extensions:
+UE-NR-Capability-v1530 ::= SEQUENCE {
+ fdd-Add-UE-NR-Capabilities-v1530 UE-NR-CapabilityAddXDD-Mode-v1530 OPTIONAL,
+ tdd-Add-UE-NR-Capabilities-v1530 UE-NR-CapabilityAddXDD-Mode-v1530 OPTIONAL,
+ dummy ENUMERATED {supported} OPTIONAL,
+ interRAT-Parameters InterRAT-Parameters OPTIONAL,
+ inactiveState ENUMERATED {supported} OPTIONAL,
+ delayBudgetReporting ENUMERATED {supported} OPTIONAL,
+ nonCriticalExtension UE-NR-Capability-v1540 OPTIONAL
+}
+
+UE-NR-Capability-v1540 ::= SEQUENCE {
+ sdap-Parameters SDAP-Parameters OPTIONAL,
+ overheatingInd ENUMERATED {supported} OPTIONAL,
+ ims-Parameters IMS-Parameters OPTIONAL,
+ fr1-Add-UE-NR-Capabilities-v1540 UE-NR-CapabilityAddFRX-Mode-v1540 OPTIONAL,
+ fr2-Add-UE-NR-Capabilities-v1540 UE-NR-CapabilityAddFRX-Mode-v1540 OPTIONAL,
+ fr1-fr2-Add-UE-NR-Capabilities UE-NR-CapabilityAddFRX-Mode OPTIONAL,
+ nonCriticalExtension UE-NR-Capability-v1550 OPTIONAL
+}
+
+UE-NR-Capability-v1550 ::= SEQUENCE {
+ reducedCP-Latency ENUMERATED {supported} OPTIONAL,
+ nonCriticalExtension UE-NR-Capability-v1560 OPTIONAL
+}
+
+UE-NR-Capability-v1560 ::= SEQUENCE {
+ nrdc-Parameters NRDC-Parameters OPTIONAL,
+ receivedFilters OCTET STRING (CONTAINING UECapabilityEnquiry-v1560-IEs) OPTIONAL,
+ nonCriticalExtension UE-NR-Capability-v1570 OPTIONAL
+}
+
+UE-NR-Capability-v1570 ::= SEQUENCE {
+ nrdc-Parameters-v1570 NRDC-Parameters-v1570 OPTIONAL,
+ nonCriticalExtension UE-NR-Capability-v1610 OPTIONAL
+}
+
+-- Late non-critical Rel-15 extensions:
+UE-NR-Capability-v15c0 ::= SEQUENCE {
+ nrdc-Parameters-v15c0 NRDC-Parameters-v15c0 OPTIONAL,
+ partialFR2-FallbackRX-Req ENUMERATED {true} OPTIONAL,
+ nonCriticalExtension UE-NR-Capability-v15g0 OPTIONAL
+}
+
+UE-NR-Capability-v15g0 ::= SEQUENCE {
+ rf-Parameters-v15g0 RF-Parameters-v15g0 OPTIONAL,
+ nonCriticalExtension UE-NR-Capability-v15j0 OPTIONAL
+}
+
+UE-NR-Capability-v15j0 ::= SEQUENCE {
+ -- Following field is only for REL-15 late non-critical extensions
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension UE-NR-Capability-v16a0 OPTIONAL
+}
+
+-- Regular non-critical Rel-16 extensions:
+UE-NR-Capability-v1610 ::= SEQUENCE {
+ inDeviceCoexInd-r16 ENUMERATED {supported} OPTIONAL,
+ dl-DedicatedMessageSegmentation-r16 ENUMERATED {supported} OPTIONAL,
+ nrdc-Parameters-v1610 NRDC-Parameters-v1610 OPTIONAL,
+ powSav-Parameters-r16 PowSav-Parameters-r16 OPTIONAL,
+ fr1-Add-UE-NR-Capabilities-v1610 UE-NR-CapabilityAddFRX-Mode-v1610 OPTIONAL,
+ fr2-Add-UE-NR-Capabilities-v1610 UE-NR-CapabilityAddFRX-Mode-v1610 OPTIONAL,
+ bh-RLF-Indication-r16 ENUMERATED {supported} OPTIONAL,
+ directSN-AdditionFirstRRC-IAB-r16 ENUMERATED {supported} OPTIONAL,
+ bap-Parameters-r16 BAP-Parameters-r16 OPTIONAL,
+ referenceTimeProvision-r16 ENUMERATED {supported} OPTIONAL,
+ sidelinkParameters-r16 SidelinkParameters-r16 OPTIONAL,
+ highSpeedParameters-r16 HighSpeedParameters-r16 OPTIONAL,
+ mac-Parameters-v1610 MAC-Parameters-v1610 OPTIONAL,
+ mcgRLF-RecoveryViaSCG-r16 ENUMERATED {supported} OPTIONAL,
+ resumeWithStoredMCG-SCells-r16 ENUMERATED {supported} OPTIONAL,
+ resumeWithStoredSCG-r16 ENUMERATED {supported} OPTIONAL,
+ resumeWithSCG-Config-r16 ENUMERATED {supported} OPTIONAL,
+ ue-BasedPerfMeas-Parameters-r16 UE-BasedPerfMeas-Parameters-r16 OPTIONAL,
+ son-Parameters-r16 SON-Parameters-r16 OPTIONAL,
+ onDemandSIB-Connected-r16 ENUMERATED {supported} OPTIONAL,
+ nonCriticalExtension UE-NR-Capability-v1640 OPTIONAL
+}
+
+UE-NR-Capability-v1640 ::= SEQUENCE {
+ redirectAtResumeByNAS-r16 ENUMERATED {supported} OPTIONAL,
+ phy-ParametersSharedSpectrumChAccess-r16 Phy-ParametersSharedSpectrumChAccess-r16 OPTIONAL,
+ nonCriticalExtension UE-NR-Capability-v1650 OPTIONAL
+}
+
+UE-NR-Capability-v1650 ::= SEQUENCE {
+ mpsPriorityIndication-r16 ENUMERATED {supported} OPTIONAL,
+ highSpeedParameters-v1650 HighSpeedParameters-v1650 OPTIONAL,
+ nonCriticalExtension UE-NR-Capability-v1690 OPTIONAL
+}
+
+UE-NR-Capability-v1690 ::= SEQUENCE {
+ ul-RRC-Segmentation-r16 ENUMERATED {supported} OPTIONAL,
+ nonCriticalExtension UE-NR-Capability-v1700 OPTIONAL
+}
+
+-- Late non-critical extensions from Rel-16 onwards:
+UE-NR-Capability-v16a0 ::= SEQUENCE {
+ phy-Parameters-v16a0 Phy-Parameters-v16a0 OPTIONAL,
+ rf-Parameters-v16a0 RF-Parameters-v16a0 OPTIONAL,
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+-- Regular non-critical Rel-17 extensions:
+UE-NR-Capability-v1700 ::= SEQUENCE {
+ inactiveStatePO-Determination-r17 ENUMERATED {supported} OPTIONAL,
+ highSpeedParameters-v1700 HighSpeedParameters-v1700 OPTIONAL,
+ powSav-Parameters-v1700 PowSav-Parameters-v1700 OPTIONAL,
+ mac-Parameters-v1700 MAC-Parameters-v1700 OPTIONAL,
+ ims-Parameters-v1700 IMS-Parameters-v1700 OPTIONAL,
+ measAndMobParameters-v1700 MeasAndMobParameters-v1700,
+ appLayerMeasParameters-r17 AppLayerMeasParameters-r17 OPTIONAL,
+ redCapParameters-r17 RedCapParameters-r17 OPTIONAL,
+ ra-SDT-r17 ENUMERATED {supported} OPTIONAL,
+ srb-SDT-r17 ENUMERATED {supported} OPTIONAL,
+ gNB-SideRTT-BasedPDC-r17 ENUMERATED {supported} OPTIONAL,
+ bh-RLF-DetectionRecovery-Indication-r17 ENUMERATED {supported} OPTIONAL,
+ nrdc-Parameters-v1700 NRDC-Parameters-v1700 OPTIONAL,
+ bap-Parameters-v1700 BAP-Parameters-v1700 OPTIONAL,
+ musim-GapPreference-r17 ENUMERATED {supported} OPTIONAL,
+ musimLeaveConnected-r17 ENUMERATED {supported} OPTIONAL,
+ mbs-Parameters-r17 MBS-Parameters-r17,
+ nonTerrestrialNetwork-r17 ENUMERATED {supported} OPTIONAL,
+ ntn-ScenarioSupport-r17 ENUMERATED {gso, ngso} OPTIONAL,
+ sliceInfoforCellReselection-r17 ENUMERATED {supported} OPTIONAL,
+ ue-RadioPagingInfo-r17 UE-RadioPagingInfo-r17 OPTIONAL,
+ -- R4 17-2 UL gap pattern for Tx power management
+ ul-GapFR2-Pattern-r17 BIT STRING (SIZE (4)) OPTIONAL,
+ ntn-Parameters-r17 NTN-Parameters-r17 OPTIONAL,
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+UE-NR-CapabilityAddXDD-Mode ::= SEQUENCE {
+ phy-ParametersXDD-Diff Phy-ParametersXDD-Diff OPTIONAL,
+ mac-ParametersXDD-Diff MAC-ParametersXDD-Diff OPTIONAL,
+ measAndMobParametersXDD-Diff MeasAndMobParametersXDD-Diff OPTIONAL
+}
+
+UE-NR-CapabilityAddXDD-Mode-v1530 ::= SEQUENCE {
+ eutra-ParametersXDD-Diff EUTRA-ParametersXDD-Diff
+}
+
+UE-NR-CapabilityAddFRX-Mode ::= SEQUENCE {
+ phy-ParametersFRX-Diff Phy-ParametersFRX-Diff OPTIONAL,
+ measAndMobParametersFRX-Diff MeasAndMobParametersFRX-Diff OPTIONAL
+}
+
+UE-NR-CapabilityAddFRX-Mode-v1540 ::= SEQUENCE {
+ ims-ParametersFRX-Diff IMS-ParametersFRX-Diff OPTIONAL
+}
+
+UE-NR-CapabilityAddFRX-Mode-v1610 ::= SEQUENCE {
+ powSav-ParametersFRX-Diff-r16 PowSav-ParametersFRX-Diff-r16 OPTIONAL,
+ mac-ParametersFRX-Diff-r16 MAC-ParametersFRX-Diff-r16 OPTIONAL
+}
+
+BAP-Parameters-r16 ::= SEQUENCE {
+ flowControlBH-RLC-ChannelBased-r16 ENUMERATED {supported} OPTIONAL,
+ flowControlRouting-ID-Based-r16 ENUMERATED {supported} OPTIONAL
+}
+
+BAP-Parameters-v1700 ::= SEQUENCE {
+ bapHeaderRewriting-Rerouting-r17 ENUMERATED {supported} OPTIONAL,
+ bapHeaderRewriting-Routing-r17 ENUMERATED {supported} OPTIONAL
+}
+
+MBS-Parameters-r17 ::= SEQUENCE {
+ maxMRB-Add-r17 INTEGER (1..16) OPTIONAL
+}
+
+-- TAG-UE-NR-CAPABILITY-STOP
+-- TAG-UE-RADIOPAGINGINFO-START
+
+UE-RadioPagingInfo-r17 ::= SEQUENCE {
+ -- R1 29-1: Paging enhancement
+ pei-SubgroupingSupportBandList-r17 SEQUENCE (SIZE (1..maxBands)) OF FreqBandIndicatorNR OPTIONAL,
+ ...
+}
+
+-- TAG-UE-RADIOPAGINGINFO-STOP
+-- TAG-SHAREDSPECTRUMCHACCESSPARAMSPERBAND-START
+
+SharedSpectrumChAccessParamsPerBand-r16 ::= SEQUENCE {
+
+ -- R1 10-1: UL channel access for dynamic channel access mode
+ ul-DynamicChAccess-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 10-1a: UL channel access for semi-static channel access mode
+ ul-Semi-StaticChAccess-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 10-2: SSB-based RRM for dynamic channel access mode
+ ssb-RRM-DynamicChAccess-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 10-2a: SSB-based RRM for semi-static channel access mode
+ ssb-RRM-Semi-StaticChAccess-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 10-2b: MIB reading on unlicensed cell
+ mib-Acquisition-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 10-2c: SSB-based RLM for dynamic channel access mode
+ ssb-RLM-DynamicChAccess-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 10-2d: SSB-based RLM for semi-static channel access mode
+ ssb-RLM-Semi-StaticChAccess-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 10-2e: SIB1 reception on unlicensed cell
+ sib1-Acquisition-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 10-2f: Support monitoring of extended RAR window
+ extRA-ResponseWindow-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 10-2g: SSB-based BFD/CBD for dynamic channel access mode
+ ssb-BFD-CBD-dynamicChannelAccess-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 10-2h: SSB-based BFD/CBD for semi-static channel access mode
+ ssb-BFD-CBD-semi-staticChannelAccess-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 10-2i: CSI-RS-based BFD/CBD for NR-U
+ csi-RS-BFD-CBD-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 10-7: UL channel access for 10 MHz SCell
+ ul-ChannelBW-SCell-10mhz-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 10-10: RSSI and channel occupancy measurement and reporting
+ rssi-ChannelOccupancyReporting-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 10-11:SRS starting position at any OFDM symbol in a slot
+ srs-StartAnyOFDM-Symbol-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 10-20: Support search space set configuration with freqMonitorLocation-r16
+ searchSpaceFreqMonitorLocation-r16 INTEGER (1..5) OPTIONAL,
+ -- R1 10-20a: Support coreset configuration with rb-Offset
+ coreset-RB-Offset-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 10-23:CGI reading on unlicensed cell for ANR functionality
+ cgi-Acquisition-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 10-25: Enable configured UL transmissions when DCI 2_0 is configured but not detected
+ configuredUL-Tx-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 10-27: Wideband PRACH
+ prach-Wideband-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 10-29: Support available RB set indicator field in DCI 2_0
+ dci-AvailableRB-Set-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 10-30: Support channel occupancy duration indicator field in DCI 2_0
+ dci-ChOccupancyDuration-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 10-8: Type B PDSCH length {3, 5, 6, 8, 9, 10, 11, 12, 13} without DMRS shift due to CRS collision
+ typeB-PDSCH-length-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 10-9: Search space set group switching with explicit DCI 2_0 bit field trigger or with implicit PDCCH decoding with DCI 2_0 monitoring
+ searchSpaceSwitchWithDCI-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 10-9b: Search space set group switching with implicit PDCCH decoding without DCI 2_0 monitoring
+ searchSpaceSwitchWithoutDCI-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 10-9d: Support Search space set group switching capability 2
+ searchSpaceSwitchCapability2-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 10-14: Non-numerical PDSCH to HARQ-ACK timing
+ non-numericalPDSCH-HARQ-timing-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 10-15: Enhanced dynamic HARQ codebook
+ enhancedDynamicHARQ-codebook-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 10-16: One-shot HARQ ACK feedback
+ oneShotHARQ-feedback-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 10-17: Multi-PUSCH UL grant
+ multiPUSCH-UL-grant-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 10-26: CSI-RS based RLM for NR-U
+ csi-RS-RLM-r16 ENUMERATED {supported} OPTIONAL,
+ dummy ENUMERATED {supported} OPTIONAL,
+ -- R1 10-31: Support of P/SP-CSI-RS reception with CSI-RS-ValidationWith-DCI-r16 configured
+ periodicAndSemi-PersistentCSI-RS-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 10-3: PRB interlace mapping for PUSCH
+ pusch-PRB-interlace-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 10-3a: PRB interlace mapping for PUCCH
+ pucch-F0-F1-PRB-Interlace-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 10-12: OCC for PRB interlace mapping for PF2 and PF3
+ occ-PRB-PF2-PF3-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 10-13a: Extended CP range of more than one symbol for CG-PUSCH
+ extCP-rangeCG-PUSCH-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 10-18: Configured grant with retransmission in CG resources
+ configuredGrantWithReTx-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 10-21a: Support using ED threshold given by gNB for UL to DL COT sharing
+ ed-Threshold-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 10-21b: Support UL to DL COT sharing
+ ul-DL-COT-Sharing-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 10-24: CG-UCI multiplexing with HARQ ACK
+ mux-CG-UCI-HARQ-ACK-r16 ENUMERATED {supported} OPTIONAL,
+ -- R1 10-28: Configured grant with Rel-16 enhanced resource configuration
+ cg-resourceConfig-r16 ENUMERATED {supported} OPTIONAL
+}
+
+SharedSpectrumChAccessParamsPerBand-v1630 ::= SEQUENCE {
+ -- R4 4-1: DL reception in intra-carrier guardband
+ dl-ReceptionIntraCellGuardband-r16 ENUMERATED {supported} OPTIONAL,
+ -- R4 4-2: DL reception when gNB does not transmit on all RB sets of a carrier as a result of LBT
+ dl-ReceptionLBT-subsetRB-r16 ENUMERATED {supported} OPTIONAL
+}
+
+SharedSpectrumChAccessParamsPerBand-v1640 ::= SEQUENCE {
+ -- 10-26b(1-4): CSI-RS based RRM measurement with associated SS-block
+ csi-RSRP-AndRSRQ-MeasWithSSB-r16 ENUMERATED {supported} OPTIONAL,
+ -- 10-26c(1-5): CSI-RS based RRM measurement without associated SS-block
+ csi-RSRP-AndRSRQ-MeasWithoutSSB-r16 ENUMERATED {supported} OPTIONAL,
+ -- 10-26d(1-6): CSI-RS based RS-SINR measurement
+ csi-SINR-Meas-r16 ENUMERATED {supported} OPTIONAL,
+ -- 10-26e(1-8): RLM based on a mix of SS block and CSI-RS signals within active BWP
+ ssb-AndCSI-RS-RLM-r16 ENUMERATED {supported} OPTIONAL,
+ -- 10-26f(1-9): CSI-RS based contention free RA for HO
+ csi-RS-CFRA-ForHO-r16 ENUMERATED {supported} OPTIONAL
+}
+
+SharedSpectrumChAccessParamsPerBand-v1650 ::= SEQUENCE {
+ -- Extension of R1 10-9 capability to configure up to 16 instead of 4 cells or cell groups, respectively
+ extendedSearchSpaceSwitchWithDCI-r16 ENUMERATED {supported} OPTIONAL
+}
+
+SharedSpectrumChAccessParamsPerBand-v1710 ::= SEQUENCE {
+ -- R1 25-12: UE initiated semi-static channel occupancy with dependent configurations
+ ul-Semi-StaticChAccessDependentConfig-r17 ENUMERATED {supported} OPTIONAL,
+ -- R1 25-13: UE initiated semi-static channel occupancy with independent configurations
+ ul-Semi-StaticChAccessIndependentConfig-r17 ENUMERATED {supported} OPTIONAL
+}
+
+-- TAG-SHAREDSPECTRUMCHACCESSPARAMSPERBAND-STOP
+-- TAG-ABSOLUTETIMEINFO-START
+
+AbsoluteTimeInfo-r16 ::= BIT STRING (SIZE (48))
+
+-- TAG-ABSOLUTETIMEINFO-STOP
+-- TAG-APPLAYERMEASCONFIG-START
+
+AppLayerMeasConfig-r17 ::= SEQUENCE {
+ measConfigAppLayerToAddModList-r17 SEQUENCE (SIZE (1..maxNrofAppLayerMeas-r17)) OF MeasConfigAppLayer-r17 OPTIONAL, -- Need N
+ measConfigAppLayerToReleaseList-r17 SEQUENCE (SIZE (1..maxNrofAppLayerMeas-r17)) OF MeasConfigAppLayerId-r17 OPTIONAL, -- Need N
+ rrc-SegAllowed-r17 ENUMERATED {enabled} OPTIONAL, -- Need R
+ ...
+}
+
+MeasConfigAppLayer-r17 ::= SEQUENCE {
+ measConfigAppLayerId-r17 MeasConfigAppLayerId-r17,
+ measConfigAppLayerContainer-r17 OCTET STRING (SIZE (1..8000)) OPTIONAL, -- Need N
+ serviceType-r17 ENUMERATED {streaming, mtsi, vr, spare5, spare4, spare3, spare2, spare1} OPTIONAL, -- Need M
+ pauseReporting-r17 BOOLEAN OPTIONAL, -- Need M
+ transmissionOfSessionStartStop-r17 BOOLEAN OPTIONAL, -- Need M
+ ran-VisibleParameters-r17 SetupRelease {RAN-VisibleParameters-r17} OPTIONAL, -- Cond ServiceType
+ ...
+}
+
+RAN-VisibleParameters-r17 ::= SEQUENCE {
+ ran-VisiblePeriodicity-r17 ENUMERATED {ms120, ms240, ms480, ms640, ms1024} OPTIONAL, -- Need S
+ numberOfBufferLevelEntries-r17 INTEGER (1..8) OPTIONAL, -- Need R
+ reportPlayoutDelayForMediaStartup-r17 BOOLEAN OPTIONAL, -- Need M
+ ...
+}
+
+-- TAG-APPLAYERMEASCONFIG-STOP
+-- TAG-AREACONFIGURATION-START
+
+AreaConfiguration-r16 ::= SEQUENCE {
+ areaConfig-r16 AreaConfig-r16,
+ interFreqTargetList-r16 SEQUENCE(SIZE (1..maxFreq)) OF InterFreqTargetInfo-r16 OPTIONAL -- Need R
+}
+
+AreaConfiguration-v1700 ::= SEQUENCE {
+ areaConfig-r17 AreaConfig-r16 OPTIONAL, -- Need R
+ interFreqTargetList-r17 SEQUENCE(SIZE (1..maxFreq)) OF InterFreqTargetInfo-r16 OPTIONAL -- Need R
+}
+
+AreaConfig-r16 ::= CHOICE {
+ cellGlobalIdList-r16 CellGlobalIdList-r16,
+ trackingAreaCodeList-r16 TrackingAreaCodeList-r16,
+ trackingAreaIdentityList-r16 TrackingAreaIdentityList-r16
+}
+
+InterFreqTargetInfo-r16 ::= SEQUENCE {
+ dl-CarrierFreq-r16 ARFCN-ValueNR,
+ cellList-r16 SEQUENCE (SIZE (1..32)) OF PhysCellId OPTIONAL -- Need R
+}
+
+CellGlobalIdList-r16 ::= SEQUENCE (SIZE (1..32)) OF CGI-Info-Logging-r16
+
+TrackingAreaCodeList-r16 ::= SEQUENCE (SIZE (1..8)) OF TrackingAreaCode
+
+TrackingAreaIdentityList-r16 ::= SEQUENCE (SIZE (1..8)) OF TrackingAreaIdentity-r16
+
+TrackingAreaIdentity-r16 ::= SEQUENCE {
+ plmn-Identity-r16 PLMN-Identity,
+ trackingAreaCode-r16 TrackingAreaCode
+}
+
+-- TAG-AREACONFIGURATION-STOP
+-- TAG-BTNAMELIST-START
+
+BT-NameList-r16 ::= SEQUENCE (SIZE (1..maxBT-Name-r16)) OF BT-Name-r16
+
+BT-Name-r16 ::= OCTET STRING (SIZE (1..248))
+
+-- TAG-BTNAMELIST-STOP
+-- TAG-DEDICATEDINFOF1C-START
+
+DedicatedInfoF1c-r17 ::= OCTET STRING
+
+-- TAG-DEDICATEDINFOF1C-STOP
+-- TAG-EUTRA-ALLOWEDMEASBANDWIDTH-START
+
+EUTRA-AllowedMeasBandwidth ::= ENUMERATED {mbw6, mbw15, mbw25, mbw50, mbw75, mbw100}
+
+-- TAG-EUTRA-ALLOWEDMEASBANDWIDTH-STOP
+-- TAG-EUTRA-MBSFN-SUBFRAMECONFIGLIST-START
+
+EUTRA-MBSFN-SubframeConfigList ::= SEQUENCE (SIZE (1..maxMBSFN-Allocations)) OF EUTRA-MBSFN-SubframeConfig
+
+EUTRA-MBSFN-SubframeConfig ::= SEQUENCE {
+ radioframeAllocationPeriod ENUMERATED {n1, n2, n4, n8, n16, n32},
+ radioframeAllocationOffset INTEGER (0..7),
+ subframeAllocation1 CHOICE {
+ oneFrame BIT STRING (SIZE(6)),
+ fourFrames BIT STRING (SIZE(24))
+ },
+ subframeAllocation2 CHOICE {
+ oneFrame BIT STRING (SIZE(2)),
+ fourFrames BIT STRING (SIZE(8))
+ } OPTIONAL, -- Need R
+ ...
+}
+
+-- TAG-EUTRA-MBSFN-SUBFRAMECONFIGLIST-STOP
+-- TAG-EUTRA-MULTIBANDINFOLIST-START
+
+EUTRA-MultiBandInfoList ::= SEQUENCE (SIZE (1..maxMultiBands)) OF EUTRA-MultiBandInfo
+
+EUTRA-MultiBandInfo ::= SEQUENCE {
+ eutra-FreqBandIndicator FreqBandIndicatorEUTRA,
+ eutra-NS-PmaxList EUTRA-NS-PmaxList OPTIONAL -- Need R
+}
+
+-- TAG-EUTRA-MULTIBANDINFOLIST-STOP
+-- TAG-EUTRA-NS-PMAXLIST-START
+
+EUTRA-NS-PmaxList ::= SEQUENCE (SIZE (1..maxEUTRA-NS-Pmax)) OF EUTRA-NS-PmaxValue
+
+EUTRA-NS-PmaxValue ::= SEQUENCE {
+ additionalPmax INTEGER (-30..33) OPTIONAL, -- Need R
+ additionalSpectrumEmission INTEGER (1..288) OPTIONAL -- Need R
+}
+
+-- TAG-EUTRA-NS-PMAXLIST-STOP
+-- TAG-EUTRA-PHYSCELLID-START
+
+EUTRA-PhysCellId ::= INTEGER (0..503)
+
+-- TAG-EUTRA-PHYSCELLID-STOP
+-- TAG-EUTRA-PHYSCELLIDRANGE-START
+
+EUTRA-PhysCellIdRange ::= SEQUENCE {
+ start EUTRA-PhysCellId,
+ range ENUMERATED {n4, n8, n12, n16, n24, n32, n48, n64, n84, n96,
+ n128, n168, n252, n504, spare2, spare1} OPTIONAL -- Need N
+}
+
+-- TAG-EUTRA-PHYSCELLIDRANGE-STOP
+-- TAG-EUTRA-PRESENCEANTENNAPORT1-START
+
+EUTRA-PresenceAntennaPort1 ::= BOOLEAN
+
+-- TAG-EUTRA-PRESENCEANTENNAPORT1-STOP
+-- TAG-EUTRA-Q-OFFSETRANGE-START
+
+EUTRA-Q-OffsetRange ::= ENUMERATED {
+ dB-24, dB-22, dB-20, dB-18, dB-16, dB-14,
+ dB-12, dB-10, dB-8, dB-6, dB-5, dB-4, dB-3,
+ dB-2, dB-1, dB0, dB1, dB2, dB3, dB4, dB5,
+ dB6, dB8, dB10, dB12, dB14, dB16, dB18,
+ dB20, dB22, dB24}
+
+-- TAG-EUTRA-Q-OFFSETRANGE-STOP
+-- TAG-IABIPADDRESS-START
+
+IAB-IP-Address-r16 ::= CHOICE {
+ iPv4-Address-r16 BIT STRING (SIZE(32)),
+ iPv6-Address-r16 BIT STRING (SIZE(128)),
+ iPv6-Prefix-r16 BIT STRING (SIZE(64)),
+ ...
+}
+
+-- TAG-IABIPADDRESS-STOP
+-- TAG-IABIPADDRESSINDEX-START
+
+IAB-IP-AddressIndex-r16 ::= INTEGER (1..maxIAB-IP-Address-r16)
+
+-- TAG-IABIPADDRESSINDEX-STOP
+-- TAG-IAB-IP-USAGE-START
+
+IAB-IP-Usage-r16 ::= ENUMERATED {f1-C, f1-U, non-F1, spare}
+
+-- TAG-IAB-IP-USAGE-STOP
+-- TAG-LOGGINGDURATION-START
+
+LoggingDuration-r16 ::= ENUMERATED {
+ min10, min20, min40, min60, min90, min120, spare2, spare1}
+
+-- TAG-LOGGINGDURATION-STOP
+-- TAG-LOGGINGINTERVAL-START
+
+LoggingInterval-r16 ::= ENUMERATED {
+ ms320, ms640, ms1280, ms2560, ms5120, ms10240, ms20480,
+ ms30720, ms40960, ms61440 , infinity}
+
+-- TAG-LOGGINGINTERVAL-STOP
+-- TAG-LOGMEASRESULTLISTBT-START
+
+LogMeasResultListBT-r16 ::= SEQUENCE (SIZE (1..maxBT-IdReport-r16)) OF LogMeasResultBT-r16
+
+LogMeasResultBT-r16 ::= SEQUENCE {
+ bt-Addr-r16 BIT STRING (SIZE (48)),
+ rssi-BT-r16 INTEGER (-128..127) OPTIONAL,
+ ...
+}
+
+-- TAG-LOGMEASRESULTLISTBT-STOP
+-- TAG-LOGMEASRESULTLISTWLAN-START
+
+LogMeasResultListWLAN-r16 ::= SEQUENCE (SIZE (1..maxWLAN-Id-Report-r16)) OF LogMeasResultWLAN-r16
+
+LogMeasResultWLAN-r16 ::= SEQUENCE {
+ wlan-Identifiers-r16 WLAN-Identifiers-r16,
+ rssiWLAN-r16 WLAN-RSSI-Range-r16 OPTIONAL,
+ rtt-WLAN-r16 WLAN-RTT-r16 OPTIONAL,
+ ...
+}
+
+WLAN-Identifiers-r16 ::= SEQUENCE {
+ ssid-r16 OCTET STRING (SIZE (1..32)) OPTIONAL,
+ bssid-r16 OCTET STRING (SIZE (6)) OPTIONAL,
+ hessid-r16 OCTET STRING (SIZE (6)) OPTIONAL,
+ ...
+}
+
+WLAN-RSSI-Range-r16 ::= INTEGER(0..141)
+
+WLAN-RTT-r16 ::= SEQUENCE {
+ rttValue-r16 INTEGER (0..16777215),
+ rttUnits-r16 ENUMERATED {
+ microseconds,
+ hundredsofnanoseconds,
+ tensofnanoseconds,
+ nanoseconds,
+ tenthsofnanoseconds,
+ ...},
+ rttAccuracy-r16 INTEGER (0..255) OPTIONAL,
+ ...
+}
+
+-- TAG-LOGMEASRESULTLISTWLAN-STOP
+-- TAG-MEASCONFIGAPPLAYERID-START
+
+MeasConfigAppLayerId-r17 ::= INTEGER (0..maxNrofAppLayerMeas-1-r17)
+
+-- TAG-MEASCONFIGAPPLAYERID-STOP
+-- TAG-OTHERCONFIG-START
+
+OtherConfig ::= SEQUENCE {
+ delayBudgetReportingConfig CHOICE{
+ release NULL,
+ setup SEQUENCE{
+ delayBudgetReportingProhibitTimer ENUMERATED {s0, s0dot4, s0dot8, s1dot6, s3, s6, s12, s30}
+ }
+ } OPTIONAL -- Need M
+}
+
+OtherConfig-v1540 ::= SEQUENCE {
+ overheatingAssistanceConfig SetupRelease {OverheatingAssistanceConfig} OPTIONAL, -- Need M
+ ...
+}
+CandidateServingFreqListNR-r16 ::= SEQUENCE (SIZE (1..maxFreqIDC-r16)) OF ARFCN-ValueNR
+
+OtherConfig-v1610 ::= SEQUENCE {
+ idc-AssistanceConfig-r16 SetupRelease {IDC-AssistanceConfig-r16} OPTIONAL, -- Need M
+ drx-PreferenceConfig-r16 SetupRelease {DRX-PreferenceConfig-r16} OPTIONAL, -- Need M
+ maxBW-PreferenceConfig-r16 SetupRelease {MaxBW-PreferenceConfig-r16} OPTIONAL, -- Need M
+ maxCC-PreferenceConfig-r16 SetupRelease {MaxCC-PreferenceConfig-r16} OPTIONAL, -- Need M
+ maxMIMO-LayerPreferenceConfig-r16 SetupRelease {MaxMIMO-LayerPreferenceConfig-r16} OPTIONAL, -- Need M
+ minSchedulingOffsetPreferenceConfig-r16 SetupRelease {MinSchedulingOffsetPreferenceConfig-r16} OPTIONAL, -- Need M
+ releasePreferenceConfig-r16 SetupRelease {ReleasePreferenceConfig-r16} OPTIONAL, -- Need M
+ referenceTimePreferenceReporting-r16 ENUMERATED {true} OPTIONAL, -- Need R
+ btNameList-r16 SetupRelease {BT-NameList-r16} OPTIONAL, -- Need M
+ wlanNameList-r16 SetupRelease {WLAN-NameList-r16} OPTIONAL, -- Need M
+ sensorNameList-r16 SetupRelease {Sensor-NameList-r16} OPTIONAL, -- Need M
+ obtainCommonLocation-r16 ENUMERATED {true} OPTIONAL, -- Need R
+ sl-AssistanceConfigNR-r16 ENUMERATED{true} OPTIONAL -- Need R
+}
+
+OtherConfig-v1700 ::= SEQUENCE {
+ ul-GapFR2-PreferenceConfig-r17 ENUMERATED {true} OPTIONAL, -- Need R
+ musim-GapAssistanceConfig-r17 SetupRelease {MUSIM-GapAssistanceConfig-r17} OPTIONAL, -- Need M
+ musim-LeaveAssistanceConfig-r17 SetupRelease {MUSIM-LeaveAssistanceConfig-r17} OPTIONAL, -- Need M
+ successHO-Config-r17 SetupRelease {SuccessHO-Config-r17} OPTIONAL, -- Need M
+ maxBW-PreferenceConfigFR2-2-r17 ENUMERATED {true} OPTIONAL, -- Cond maxBW
+ maxMIMO-LayerPreferenceConfigFR2-2-r17 ENUMERATED {true} OPTIONAL, -- Cond maxMIMO
+ minSchedulingOffsetPreferenceConfigExt-r17 ENUMERATED {true} OPTIONAL, -- Cond minOffset
+ rlm-RelaxationReportingConfig-r17 SetupRelease {RLM-RelaxationReportingConfig-r17} OPTIONAL, -- Need M
+ bfd-RelaxationReportingConfig-r17 SetupRelease {BFD-RelaxationReportingConfig-r17} OPTIONAL, -- Need M
+ scg-DeactivationPreferenceConfig-r17 SetupRelease {SCG-DeactivationPreferenceConfig-r17} OPTIONAL, -- Cond SCG
+ rrm-MeasRelaxationReportingConfig-r17 SetupRelease {RRM-MeasRelaxationReportingConfig-r17} OPTIONAL, -- Need M
+ propDelayDiffReportConfig-r17 SetupRelease {PropDelayDiffReportConfig-r17} OPTIONAL -- Need M
+}
+
+MUSIM-GapAssistanceConfig-r17 ::= SEQUENCE {
+ musim-GapProhibitTimer-r17 ENUMERATED {s0, s0dot1, s0dot2, s0dot3, s0dot4, s0dot5, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10}
+}
+
+MUSIM-LeaveAssistanceConfig-r17 ::= SEQUENCE {
+ musim-LeaveWithoutResponseTimer-r17 ENUMERATED {ms10, ms20, ms40, ms60, ms80, ms100, spare2, spare1}
+}
+
+SuccessHO-Config-r17 ::= SEQUENCE {
+ thresholdPercentageT304-r17 ENUMERATED {p40, p60, p80, spare5, spare4, spare3, spare2, spare1} OPTIONAL, --Need R
+ thresholdPercentageT310-r17 ENUMERATED {p40, p60, p80, spare5, spare4, spare3, spare2, spare1} OPTIONAL, --Need R
+ thresholdPercentageT312-r17 ENUMERATED {p20, p40, p60, p80, spare4, spare3, spare2, spare1} OPTIONAL, --Need R
+ sourceDAPS-FailureReporting-r17 ENUMERATED {true} OPTIONAL, --Need R
+ ...
+}
+
+OverheatingAssistanceConfig ::= SEQUENCE {
+ overheatingIndicationProhibitTimer ENUMERATED {s0, s0dot5, s1, s2, s5, s10, s20, s30,
+ s60, s90, s120, s300, s600, spare3, spare2, spare1}
+}
+
+IDC-AssistanceConfig-r16 ::= SEQUENCE {
+ candidateServingFreqListNR-r16 CandidateServingFreqListNR-r16 OPTIONAL, -- Need R
+ ...
+}
+
+DRX-PreferenceConfig-r16 ::= SEQUENCE {
+ drx-PreferenceProhibitTimer-r16 ENUMERATED {
+ s0, s0dot5, s1, s2, s3, s4, s5, s6, s7,
+ s8, s9, s10, s20, s30, spare2, spare1}
+}
+
+MaxBW-PreferenceConfig-r16 ::= SEQUENCE {
+ maxBW-PreferenceProhibitTimer-r16 ENUMERATED {
+ s0, s0dot5, s1, s2, s3, s4, s5, s6, s7,
+ s8, s9, s10, s20, s30, spare2, spare1}
+}
+
+MaxCC-PreferenceConfig-r16 ::= SEQUENCE {
+ maxCC-PreferenceProhibitTimer-r16 ENUMERATED {
+ s0, s0dot5, s1, s2, s3, s4, s5, s6, s7,
+ s8, s9, s10, s20, s30, spare2, spare1}
+}
+
+MaxMIMO-LayerPreferenceConfig-r16 ::= SEQUENCE {
+ maxMIMO-LayerPreferenceProhibitTimer-r16 ENUMERATED {
+ s0, s0dot5, s1, s2, s3, s4, s5, s6, s7,
+ s8, s9, s10, s20, s30, spare2, spare1}
+}
+
+MinSchedulingOffsetPreferenceConfig-r16 ::= SEQUENCE {
+ minSchedulingOffsetPreferenceProhibitTimer-r16 ENUMERATED {
+ s0, s0dot5, s1, s2, s3, s4, s5, s6, s7,
+ s8, s9, s10, s20, s30, spare2, spare1}
+}
+
+ReleasePreferenceConfig-r16 ::= SEQUENCE {
+ releasePreferenceProhibitTimer-r16 ENUMERATED {
+ s0, s0dot5, s1, s2, s3, s4, s5, s6, s7,
+ s8, s9, s10, s20, s30, infinity, spare1},
+ connectedReporting ENUMERATED {true} OPTIONAL -- Need R
+}
+
+RLM-RelaxationReportingConfig-r17 ::= SEQUENCE {
+ rlm-RelaxtionReportingProhibitTimer ENUMERATED {s0, s0dot5, s1, s2, s5, s10, s20, s30,
+ s60, s90, s120, s300, s600, infinity, spare2, spare1}
+}
+
+BFD-RelaxationReportingConfig-r17 ::= SEQUENCE {
+ bfd-RelaxtionReportingProhibitTimer ENUMERATED {s0, s0dot5, s1, s2, s5, s10, s20, s30,
+ s60, s90, s120, s300, s600, infinity, spare2, spare1}
+}
+
+SCG-DeactivationPreferenceConfig-r17 ::= SEQUENCE {
+ scg-DeactivationPreferenceProhibitTimer-r17 ENUMERATED {
+ s0, s1, s2, s4, s8, s10, s15, s30,
+ s60, s120, s180, s240, s300, s600, s900, s1800}
+}
+
+RRM-MeasRelaxationReportingConfig-r17 ::= SEQUENCE {
+ s-SearchDeltaP-Stationary-r17 ENUMERATED {dB2, dB3, dB6, dB9, dB12, dB15, spare2, spare1},
+ t-SearchDeltaP-Stationary-r17 ENUMERATED {s5, s10, s20, s30, s60, s120, s180, s240, s300, spare7, spare6, spare5,
+ spare4, spare3, spare2, spare1}
+}
+
+PropDelayDiffReportConfig-r17 ::= SEQUENCE {
+ threshPropDelayDiff-r17 ENUMERATED {ms0dot5, ms1, ms2, ms3, ms4, ms5, ms6 ,ms7, ms8, ms9, ms10, spare5,
+ spare4, spare3, spare2, spare1} OPTIONAL, -- Need M
+ neighCellInfoList-r17 SEQUENCE (SIZE (1..maxCellNTN-r17)) OF NeighbourCellInfo-r17 OPTIONAL -- Need M
+}
+
+NeighbourCellInfo-r17 ::= SEQUENCE {
+epochTime-r17 EpochTime-r17,
+ephemerisInfo-r17 EphemerisInfo-r17
+}
+
+-- TAG-OTHERCONFIG-STOP
+-- TAG-PHYSCELLIDUTRA-FDD-START
+
+PhysCellIdUTRA-FDD-r16 ::= INTEGER (0..511)
+
+-- TAG-PHYSCELLIDUTRA-FDD-STOP
+-- TAG-RRC-TRANSACTIONIDENTIFIER-START
+
+RRC-TransactionIdentifier ::= INTEGER (0..3)
+
+-- TAG-RRC-TRANSACTIONIDENTIFIER-STOP
+-- TAG-SENSORNAMELIST-START
+
+Sensor-NameList-r16 ::= SEQUENCE {
+ measUncomBarPre-r16 ENUMERATED {true} OPTIONAL, -- Need R
+ measUeSpeed ENUMERATED {true} OPTIONAL, -- Need R
+ measUeOrientation ENUMERATED {true} OPTIONAL -- Need R
+}
+
+-- TAG-SENSORNAMELIST-STOP
+-- TAG-TRACEREFERENCE-START
+
+TraceReference-r16 ::= SEQUENCE {
+ plmn-Identity-r16 PLMN-Identity,
+ traceId-r16 OCTET STRING (SIZE (3))
+}
+
+-- TAG-TRACEREFERENCE-STOP
+-- TAG-UE-MeasurementsAvailable-START
+
+UE-MeasurementsAvailable-r16 ::= SEQUENCE {
+ logMeasAvailable-r16 ENUMERATED {true} OPTIONAL,
+ logMeasAvailableBT-r16 ENUMERATED {true} OPTIONAL,
+ logMeasAvailableWLAN-r16 ENUMERATED {true} OPTIONAL,
+ connEstFailInfoAvailable-r16 ENUMERATED {true} OPTIONAL,
+ rlf-InfoAvailable-r16 ENUMERATED {true} OPTIONAL,
+ ...,
+ [[
+ successHO-InfoAvailable-r17 ENUMERATED {true} OPTIONAL,
+ sigLogMeasConfigAvailable-r17 BOOLEAN OPTIONAL
+ ]]
+}
+
+-- TAG-UE-MeasurementsAvailable-STOP
+-- TAG-UTRA-FDD-Q-OFFSETRANGE-START
+
+UTRA-FDD-Q-OffsetRange-r16 ::= ENUMERATED {
+ dB-24, dB-22, dB-20, dB-18, dB-16, dB-14,
+ dB-12, dB-10, dB-8, dB-6, dB-5, dB-4, dB-3,
+ dB-2, dB-1, dB0, dB1, dB2, dB3, dB4, dB5,
+ dB6, dB8, dB10, dB12, dB14, dB16, dB18,
+ dB20, dB22, dB24}
+
+-- TAG-UTRA-FDD-Q-OFFSETRANGE-STOP
+-- TAG-VISITEDCELLINFOLIST-START
+
+VisitedCellInfoList-r16 ::= SEQUENCE (SIZE (1..maxCellHistory-r16)) OF VisitedCellInfo-r16
+
+VisitedCellInfo-r16 ::= SEQUENCE {
+ visitedCellId-r16 CHOICE {
+ nr-CellId-r16 CHOICE {
+ cgi-Info CGI-Info-Logging-r16,
+ pci-arfcn-r16 PCI-ARFCN-NR-r16
+ },
+ eutra-CellId-r16 CHOICE {
+ cellGlobalId-r16 CGI-InfoEUTRA,
+ pci-arfcn-r16 PCI-ARFCN-EUTRA-r16
+ }
+ } OPTIONAL,
+ timeSpent-r16 INTEGER (0..4095),
+ ...,
+ [[
+ visitedPSCellInfoListReport-r17 VisitedPSCellInfoList-r17 OPTIONAL
+ ]]
+}
+
+VisitedPSCellInfoList-r17 ::= SEQUENCE (SIZE (1..maxPSCellHistory-r17)) OF VisitedPSCellInfo-r17
+
+VisitedPSCellInfo-r17 ::= SEQUENCE {
+ visitedCellId-r17 CHOICE {
+ nr-CellId-r17 CHOICE {
+ cgi-Info-r17 CGI-Info-Logging-r16,
+ pci-arfcn-r17 PCI-ARFCN-NR-r16
+ },
+ eutra-CellId-r17 CHOICE {
+ cellGlobalId-r17 CGI-InfoEUTRALogging,
+ pci-arfcn-r17 PCI-ARFCN-EUTRA-r16
+ }
+ } OPTIONAL,
+ timeSpent-r17 INTEGER (0..4095),
+ ...
+}
+
+-- TAG-VISITEDCELLINFOLIST-STOP
+-- TAG-WLANNAMELIST-START
+
+WLAN-NameList-r16 ::= SEQUENCE (SIZE (1..maxWLAN-Name-r16)) OF WLAN-Name-r16
+
+WLAN-Name-r16 ::= OCTET STRING (SIZE (1..32))
+
+-- TAG-SL-BWP-CONFIG-START
+
+SL-BWP-Config-r16 ::= SEQUENCE {
+ sl-BWP-Id BWP-Id,
+ sl-BWP-Generic-r16 SL-BWP-Generic-r16 OPTIONAL, -- Need M
+ sl-BWP-PoolConfig-r16 SL-BWP-PoolConfig-r16 OPTIONAL, -- Need M
+ ...,
+ [[
+ sl-BWP-PoolConfigPS-r17 SetupRelease {SL-BWP-PoolConfig-r16} OPTIONAL, -- Need M
+ sl-BWP-DiscPoolConfig-r17 SetupRelease {SL-BWP-DiscPoolConfig-r17} OPTIONAL -- Need M
+ ]]
+}
+
+SL-BWP-Generic-r16 ::= SEQUENCE {
+ sl-BWP-r16 BWP OPTIONAL, -- Need M
+ sl-LengthSymbols-r16 ENUMERATED {sym7, sym8, sym9, sym10, sym11, sym12, sym13, sym14} OPTIONAL, -- Need M
+ sl-StartSymbol-r16 ENUMERATED {sym0, sym1, sym2, sym3, sym4, sym5, sym6, sym7} OPTIONAL, -- Need M
+ sl-PSBCH-Config-r16 SetupRelease {SL-PSBCH-Config-r16} OPTIONAL, -- Need M
+ sl-TxDirectCurrentLocation-r16 INTEGER (0..3301) OPTIONAL, -- Need M
+ ...
+}
+
+-- TAG-SL-BWP-CONFIG-STOP
+-- TAG-SL-BWP-CONFIGCOMMON-START
+
+SL-BWP-ConfigCommon-r16 ::= SEQUENCE {
+ sl-BWP-Generic-r16 SL-BWP-Generic-r16 OPTIONAL, -- Need R
+ sl-BWP-PoolConfigCommon-r16 SL-BWP-PoolConfigCommon-r16 OPTIONAL, -- Need R
+ ...,
+ [[
+ sl-BWP-PoolConfigCommonPS-r17 SL-BWP-PoolConfigCommon-r16 OPTIONAL, -- Need R
+ sl-BWP-DiscPoolConfigCommon-r17 SL-BWP-DiscPoolConfigCommon-r17 OPTIONAL -- Need R
+ ]]
+}
+
+-- TAG-SL-BWP-CONFIGCOMMON-STOP
+-- TAG-SL-BWP-DISCPOOLCONFIG-START
+
+SL-BWP-DiscPoolConfig-r17 ::= SEQUENCE {
+ sl-DiscRxPool-r17 SEQUENCE (SIZE (1..maxNrofRXPool-r16)) OF SL-ResourcePool-r16 OPTIONAL, -- Cond HO
+ sl-DiscTxPoolSelected-r17 SL-TxPoolDedicated-r16 OPTIONAL, -- Need M
+ sl-DiscTxPoolScheduling-r17 SL-TxPoolDedicated-r16 OPTIONAL -- Need N
+}
+
+-- TAG-SL-BWP-DISCPOOLCONFIG-STOP
+-- TAG-SL-BWP-DISCPOOLCONFIGCOMMON-START
+
+SL-BWP-DiscPoolConfigCommon-r17 ::= SEQUENCE {
+ sl-DiscRxPool-r17 SEQUENCE (SIZE (1..maxNrofRXPool-r16)) OF SL-ResourcePool-r16 OPTIONAL, -- Need R
+ sl-DiscTxPoolSelected-r17 SEQUENCE (SIZE (1..maxNrofTXPool-r16)) OF SL-ResourcePoolConfig-r16 OPTIONAL, -- Need R
+ ...
+}
+
+-- TAG-SL-BWP-DISCPOOLCONFIGCOMMON-STOP
+-- TAG-SL-BWP-POOLCONFIG-START
+
+SL-BWP-PoolConfig-r16 ::= SEQUENCE {
+ sl-RxPool-r16 SEQUENCE (SIZE (1..maxNrofRXPool-r16)) OF SL-ResourcePool-r16 OPTIONAL, -- Cond HO
+ sl-TxPoolSelectedNormal-r16 SL-TxPoolDedicated-r16 OPTIONAL, -- Need M
+ sl-TxPoolScheduling-r16 SL-TxPoolDedicated-r16 OPTIONAL, -- Need N
+ sl-TxPoolExceptional-r16 SL-ResourcePoolConfig-r16 OPTIONAL -- Need M
+}
+
+SL-TxPoolDedicated-r16 ::= SEQUENCE {
+ sl-PoolToReleaseList-r16 SEQUENCE (SIZE (1..maxNrofTXPool-r16)) OF SL-ResourcePoolID-r16 OPTIONAL, -- Need N
+ sl-PoolToAddModList-r16 SEQUENCE (SIZE (1..maxNrofTXPool-r16)) OF SL-ResourcePoolConfig-r16 OPTIONAL -- Need N
+}
+
+SL-ResourcePoolConfig-r16 ::= SEQUENCE {
+ sl-ResourcePoolID-r16 SL-ResourcePoolID-r16,
+ sl-ResourcePool-r16 SL-ResourcePool-r16 OPTIONAL -- Need M
+}
+
+SL-ResourcePoolID-r16 ::= INTEGER (1..maxNrofPoolID-r16)
+
+-- TAG-SL-BWP-POOLCONFIG-STOP
+-- TAG-SL-BWP-POOLCONFIGCOMMON-START
+
+SL-BWP-PoolConfigCommon-r16 ::= SEQUENCE {
+ sl-RxPool-r16 SEQUENCE (SIZE (1..maxNrofRXPool-r16)) OF SL-ResourcePool-r16 OPTIONAL, -- Need R
+ sl-TxPoolSelectedNormal-r16 SEQUENCE (SIZE (1..maxNrofTXPool-r16)) OF SL-ResourcePoolConfig-r16 OPTIONAL, -- Need R
+ sl-TxPoolExceptional-r16 SL-ResourcePoolConfig-r16 OPTIONAL -- Need R
+}
+
+-- TAG-SL-BWP-POOLCONFIGCOMMON-STOP
+-- TAG-SL-CBR-PRIORITYTXCONFIGLIST-START
+
+SL-CBR-PriorityTxConfigList-r16 ::= SEQUENCE (SIZE (1..8)) OF SL-PriorityTxConfigIndex-r16
+
+SL-CBR-PriorityTxConfigList-v1650 ::= SEQUENCE (SIZE (1..8)) OF SL-PriorityTxConfigIndex-v1650
+
+SL-PriorityTxConfigIndex-r16 ::= SEQUENCE {
+ sl-PriorityThreshold-r16 INTEGER (1..8) OPTIONAL, -- Need M
+ sl-DefaultTxConfigIndex-r16 INTEGER (0..maxCBR-Level-1-r16) OPTIONAL, -- Need M
+ sl-CBR-ConfigIndex-r16 INTEGER (0..maxCBR-Config-1-r16) OPTIONAL, -- Need M
+ sl-Tx-ConfigIndexList-r16 SEQUENCE (SIZE (1.. maxCBR-Level-r16)) OF SL-TxConfigIndex-r16 OPTIONAL -- Need M
+}
+
+SL-PriorityTxConfigIndex-v1650 ::= SEQUENCE {
+ sl-MCS-RangeList-r16 SEQUENCE (SIZE (1..maxCBR-Level-r16)) OF SL-MinMaxMCS-List-r16 OPTIONAL -- Need M
+}
+
+SL-TxConfigIndex-r16 ::= INTEGER (0..maxTxConfig-1-r16)
+
+-- TAG-SL-CBR-PRIORITYTXCONFIGLIST-STOP
+-- TAG-SL-CBR-COMMONTXCONFIGLIST-START
+
+SL-CBR-CommonTxConfigList-r16 ::= SEQUENCE {
+ sl-CBR-RangeConfigList-r16 SEQUENCE (SIZE (1..maxCBR-Config-r16)) OF SL-CBR-LevelsConfig-r16 OPTIONAL, -- Need M
+ sl-CBR-PSSCH-TxConfigList-r16 SEQUENCE (SIZE (1.. maxTxConfig-r16)) OF SL-CBR-PSSCH-TxConfig-r16 OPTIONAL -- Need M
+}
+
+SL-CBR-LevelsConfig-r16 ::= SEQUENCE (SIZE (1..maxCBR-Level-r16)) OF SL-CBR-r16
+
+SL-CBR-PSSCH-TxConfig-r16 ::= SEQUENCE {
+ sl-CR-Limit-r16 INTEGER(0..10000) OPTIONAL, -- Need M
+ sl-TxParameters-r16 SL-PSSCH-TxParameters-r16 OPTIONAL -- Need M
+}
+
+SL-CBR-r16 ::= INTEGER (0..100)
+
+-- TAG-SL-CBR-COMMONTXCONFIGLIST-STOP
+-- TAG-SL-CONFIGDEDICATEDNR-START
+
+SL-ConfigDedicatedNR-r16 ::= SEQUENCE {
+ sl-PHY-MAC-RLC-Config-r16 SL-PHY-MAC-RLC-Config-r16 OPTIONAL, -- Need M
+ sl-RadioBearerToReleaseList-r16 SEQUENCE (SIZE (1..maxNrofSLRB-r16)) OF SLRB-Uu-ConfigIndex-r16 OPTIONAL, -- Need N
+ sl-RadioBearerToAddModList-r16 SEQUENCE (SIZE (1..maxNrofSLRB-r16)) OF SL-RadioBearerConfig-r16 OPTIONAL, -- Need N
+ sl-MeasConfigInfoToReleaseList-r16 SEQUENCE (SIZE (1..maxNrofSL-Dest-r16)) OF SL-DestinationIndex-r16 OPTIONAL, -- Need N
+ sl-MeasConfigInfoToAddModList-r16 SEQUENCE (SIZE (1..maxNrofSL-Dest-r16)) OF SL-MeasConfigInfo-r16 OPTIONAL, -- Need N
+ t400-r16 ENUMERATED {ms100, ms200, ms300, ms400, ms600, ms1000, ms1500, ms2000} OPTIONAL, -- Need M
+ ...,
+ [[
+ sl-PHY-MAC-RLC-Config-v1700 SetupRelease { SL-PHY-MAC-RLC-Config-v1700 } OPTIONAL, -- Need M
+ sl-DiscConfig-r17 SetupRelease { SL-DiscConfig-r17} OPTIONAL -- Need M
+ ]]
+}
+
+SL-DestinationIndex-r16 ::= INTEGER (0..maxNrofSL-Dest-1-r16)
+
+SL-PHY-MAC-RLC-Config-r16::= SEQUENCE {
+ sl-ScheduledConfig-r16 SetupRelease { SL-ScheduledConfig-r16 } OPTIONAL, -- Need M
+ sl-UE-SelectedConfig-r16 SetupRelease { SL-UE-SelectedConfig-r16 } OPTIONAL, -- Need M
+ sl-FreqInfoToReleaseList-r16 SEQUENCE (SIZE (1..maxNrofFreqSL-r16)) OF SL-Freq-Id-r16 OPTIONAL, -- Need N
+ sl-FreqInfoToAddModList-r16 SEQUENCE (SIZE (1..maxNrofFreqSL-r16)) OF SL-FreqConfig-r16 OPTIONAL, -- Need N
+ sl-RLC-BearerToReleaseList-r16 SEQUENCE (SIZE (1..maxSL-LCID-r16)) OF SL-RLC-BearerConfigIndex-r16 OPTIONAL, -- Need N
+ sl-RLC-BearerToAddModList-r16 SEQUENCE (SIZE (1..maxSL-LCID-r16)) OF SL-RLC-BearerConfig-r16 OPTIONAL, -- Need N
+ sl-MaxNumConsecutiveDTX-r16 ENUMERATED {n1, n2, n3, n4, n6, n8, n16, n32} OPTIONAL, -- Need M
+ sl-CSI-Acquisition-r16 ENUMERATED {enabled} OPTIONAL, -- Need R
+ sl-CSI-SchedulingRequestId-r16 SetupRelease {SchedulingRequestId} OPTIONAL, -- Need M
+ sl-SSB-PriorityNR-r16 INTEGER (1..8) OPTIONAL, -- Need R
+ networkControlledSyncTx-r16 ENUMERATED {on, off} OPTIONAL -- Need M
+}
+
+SL-PHY-MAC-RLC-Config-v1700 ::= SEQUENCE {
+ sl-DRX-Config-r17 SL-DRX-Config-r17 OPTIONAL, -- Need M
+ sl-RLC-ChannelToReleaseList-r17 SEQUENCE (SIZE (1..maxSL-LCID-r16)) OF SL-RLC-ChannelID-r17 OPTIONAL, -- Cond L2U2N
+ sl-RLC-ChannelToAddModList-r17 SEQUENCE (SIZE (1..maxSL-LCID-r16)) OF SL-RLC-ChannelConfig-r17 OPTIONAL, -- Cond L2U2N
+ ...
+}
+
+SL-DiscConfig-r17::= SEQUENCE {
+ sl-RelayUE-Config-r17 SetupRelease { SL-RelayUE-Config-r17} OPTIONAL, -- Cond L2RelayUE
+ sl-RemoteUE-Config-r17 SetupRelease { SL-RemoteUE-Config-r17} OPTIONAL -- Cond L2RemoteUE
+}
+
+-- TAG-SL-CONFIGDEDICATEDNR-STOP
+-- TAG-SL-CONFIGUREDGRANTCONFIG-START
+
+SL-ConfiguredGrantConfig-r16 ::= SEQUENCE {
+ sl-ConfigIndexCG-r16 SL-ConfigIndexCG-r16,
+ sl-PeriodCG-r16 SL-PeriodCG-r16 OPTIONAL, -- Need M
+ sl-NrOfHARQ-Processes-r16 INTEGER (1..16) OPTIONAL, -- Need M
+ sl-HARQ-ProcID-offset-r16 INTEGER (0..15) OPTIONAL, -- Need M
+ sl-CG-MaxTransNumList-r16 SL-CG-MaxTransNumList-r16 OPTIONAL, -- Need M
+ rrc-ConfiguredSidelinkGrant-r16 SEQUENCE {
+ sl-TimeResourceCG-Type1-r16 INTEGER (0..496) OPTIONAL, -- Need M
+ sl-StartSubchannelCG-Type1-r16 INTEGER (0..26) OPTIONAL, -- Need M
+ sl-FreqResourceCG-Type1-r16 INTEGER (0..6929) OPTIONAL, -- Need M
+ sl-TimeOffsetCG-Type1-r16 INTEGER (0..7999) OPTIONAL, -- Need R
+ sl-N1PUCCH-AN-r16 PUCCH-ResourceId OPTIONAL, -- Need M
+ sl-PSFCH-ToPUCCH-CG-Type1-r16 INTEGER (0..15) OPTIONAL, -- Need M
+ sl-ResourcePoolID-r16 SL-ResourcePoolID-r16 OPTIONAL, -- Need M
+ sl-TimeReferenceSFN-Type1-r16 ENUMERATED {sfn512} OPTIONAL -- Need S
+ } OPTIONAL, -- Need M
+ ...,
+ [[
+ sl-N1PUCCH-AN-Type2-r16 PUCCH-ResourceId OPTIONAL -- Need M
+ ]]
+}
+
+SL-ConfigIndexCG-r16 ::= INTEGER (0..maxNrofCG-SL-1-r16)
+
+SL-CG-MaxTransNumList-r16 ::= SEQUENCE (SIZE (1..8)) OF SL-CG-MaxTransNum-r16
+
+SL-CG-MaxTransNum-r16 ::= SEQUENCE {
+ sl-Priority-r16 INTEGER (1..8),
+ sl-MaxTransNum-r16 INTEGER (1..32)
+}
+
+SL-PeriodCG-r16 ::= CHOICE{
+ sl-PeriodCG1-r16 ENUMERATED {ms100, ms200, ms300, ms400, ms500, ms600, ms700, ms800, ms900, ms1000, spare6,
+ spare5, spare4, spare3, spare2, spare1},
+ sl-PeriodCG2-r16 INTEGER (1..99)
+}
+
+-- TAG-SL-CONFIGUREDGRANTCONFIG-STOP
+-- TAG-SL-DESTINATIONIDENTITY-START
+
+SL-DestinationIdentity-r16 ::= BIT STRING (SIZE (24))
+
+-- TAG-SL-DESTINATIONIDENTITY-STOP
+-- TAG-SL-DRX-CONFIG-START
+
+SL-DRX-Config-r17 ::= SEQUENCE {
+ sl-DRX-ConfigGC-BC-r17 SL-DRX-ConfigGC-BC-r17 OPTIONAL, -- Cond HO
+ sl-DRX-ConfigUC-ToReleaseList-r17 SEQUENCE (SIZE (1..maxNrofSL-Dest-r16)) OF SL-DestinationIndex-r16 OPTIONAL, -- Need N
+ sl-DRX-ConfigUC-ToAddModList-r17 SEQUENCE (SIZE (1..maxNrofSL-Dest-r16)) OF SL-DRX-ConfigUC-Info-r17 OPTIONAL, -- Need N
+ ...
+}
+
+SL-DRX-ConfigUC-Info-r17 ::= SEQUENCE {
+ sl-DestinationIndex-r17 SL-DestinationIndex-r16 OPTIONAL, -- Need N
+ sl-DRX-ConfigUC-r17 SL-DRX-ConfigUC-r17 OPTIONAL, -- Need N
+ ...
+}
+
+-- TAG-SL-DRX-CONFIG-STOP
+-- TAG-SL-DRX-CONFIGGC-BC-START
+
+SL-DRX-ConfigGC-BC-r17 ::= SEQUENCE {
+ sl-DRX-GC-BC-PerQoS-List-r17 SEQUENCE (SIZE (1..maxSL-GC-BC-DRX-QoS-r17)) OF SL-DRX-GC-BC-QoS-r17 OPTIONAL, -- Need M
+ sl-DRX-GC-generic-r17 SL-DRX-GC-Generic-r17 OPTIONAL, -- Need M
+ sl-DefaultDRX-GC-BC-r17 SL-DRX-GC-BC-QoS-r17 OPTIONAL, -- Need M
+ ...
+}
+
+SL-DRX-GC-BC-QoS-r17 ::= SEQUENCE {
+ sl-DRX-GC-BC-MappedQoS-FlowList-r17 SEQUENCE (SIZE (1..maxNrofSL-QFIs-r16)) OF SL-QoS-Profile-r16 OPTIONAL, -- Need M
+ sl-DRX-GC-BC-OnDurationTimer-r17 CHOICE {
+ subMilliSeconds INTEGER (1..31),
+ milliSeconds ENUMERATED {
+ ms1, ms2, ms3, ms4, ms5,ms6, ms8, ms10, ms20, ms30, ms40, ms50, ms60,
+ ms80, ms100, ms200, ms300, ms400, ms500, ms600, ms800, ms1000, ms1200,
+ ms1600, spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1}
+ },
+ sl-DRX-GC-InactivityTimer-r17 ENUMERATED {
+ ms0, ms1, ms2, ms3, ms4, ms5, ms6, ms8, ms10, ms20, ms30, ms40, ms50, ms60, ms80,
+ ms100, ms200, ms300, ms500, ms750, ms1280, ms1920, ms2560, spare9, spare8,
+ spare7, spare6, spare5, spare4, spare3, spare2, spare1},
+ sl-DRX-GC-BC-Cycle-r17 ENUMERATED {
+ ms10, ms20, ms32, ms40, ms60, ms64, ms70, ms80, ms128, ms160, ms256, ms320, ms512,
+ ms640, ms1024, ms1280, ms2048, ms2560, ms5120, ms10240, spare12, spare11, spare10,
+ spare9, spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1},
+ ...
+}
+
+SL-DRX-GC-Generic-r17 ::= SEQUENCE {
+ sl-DRX-GC-HARQ-RTT-Timer1-r17 ENUMERATED {sl0, sl1, sl2, sl4, spare4, spare3, spare2, spare1} OPTIONAL, -- Need M
+ sl-DRX-GC-HARQ-RTT-Timer2-r17 ENUMERATED {sl0, sl1, sl2, sl4, spare4, spare3, spare2, spare1} OPTIONAL, -- Need M
+ sl-DRX-GC-RetransmissionTimer-r17 ENUMERATED {
+ sl0, sl1, sl2, sl4, sl6, sl8, sl16, sl24, sl33, sl40, sl64, sl80, sl96, sl112, sl128,
+ sl160, sl320, spare15, spare14, spare13, spare12, spare11, spare10, spare9, spare8,
+ spare7, spare6, spare5, spare4, spare3, spare2, spare1}
+}
+
+-- TAG-SL-DRX-CONFIGGC-BC-STOP
+-- TAG-DRX-CONFIGUC-START
+
+SL-DRX-ConfigUC-r17 ::= SEQUENCE {
+ sl-drx-onDurationTimer-r17 CHOICE {
+ subMilliSeconds INTEGER (1..31),
+ milliSeconds ENUMERATED {
+ ms1, ms2, ms3, ms4, ms5, ms6, ms8, ms10, ms20, ms30, ms40, ms50, ms60,
+ ms80, ms100, ms200, ms300, ms400, ms500, ms600, ms800, ms1000, ms1200,
+ ms1600, spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1}
+ },
+ sl-drx-InactivityTimer-r17 ENUMERATED {
+ ms0, ms1, ms2, ms3, ms4, ms5, ms6, ms8, ms10, ms20, ms30, ms40, ms50, ms60, ms80,
+ ms100, ms200, ms300, ms500, ms750, ms1280, ms1920, ms2560, spare9, spare8,
+ spare7, spare6, spare5, spare4, spare3, spare2, spare1},
+ sl-drx-HARQ-RTT-Timer1-r17 ENUMERATED {sl0, sl1, sl2, sl4, spare4, spare3, spare2, spare1} OPTIONAL, -- Need M
+ sl-drx-HARQ-RTT-Timer2-r17 ENUMERATED {sl0, sl1, sl2, sl4, spare4, spare3, spare2, spare1} OPTIONAL, -- Need M
+ sl-drx-RetransmissionTimer-r17 ENUMERATED {
+ sl0, sl1, sl2, sl4, sl6, sl8, sl16, sl24, sl33, sl40, sl64, sl80, sl96, sl112, sl128,
+ sl160, sl320, spare15, spare14, spare13, spare12, spare11, spare10, spare9,
+ spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1},
+ sl-drx-CycleStartOffset-r17 CHOICE {
+ ms10 INTEGER(0..9),
+ ms20 INTEGER(0..19),
+ ms32 INTEGER(0..31),
+ ms40 INTEGER(0..39),
+ ms60 INTEGER(0..59),
+ ms64 INTEGER(0..63),
+ ms70 INTEGER(0..69),
+ ms80 INTEGER(0..79),
+ ms128 INTEGER(0..127),
+ ms160 INTEGER(0..159),
+ ms256 INTEGER(0..255),
+ ms320 INTEGER(0..319),
+ ms512 INTEGER(0..511),
+ ms640 INTEGER(0..639),
+ ms1024 INTEGER(0..1023),
+ ms1280 INTEGER(0..1279),
+ ms2048 INTEGER(0..2047),
+ ms2560 INTEGER(0..2559),
+ ms5120 INTEGER(0..5119),
+ ms10240 INTEGER(0..10239)
+ },
+ sl-drx-SlotOffset INTEGER (0..31)
+}
+
+-- TAG-SL-DRX-CONFIGUC-STOP
+-- TAG-DRX-CONFIGUCSEMISTATIC-START
+
+SL-DRX-ConfigUC-SemiStatic-r17 ::= SEQUENCE {
+ sl-drx-onDurationTimer-r17 CHOICE {
+ subMilliSeconds INTEGER (1..31),
+ milliSeconds ENUMERATED {
+ ms1, ms2, ms3, ms4, ms5, ms6, ms8, ms10, ms20, ms30, ms40, ms50, ms60,
+ ms80, ms100, ms200, ms300, ms400, ms500, ms600, ms800, ms1000, ms1200,
+ ms1600, spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1}
+ },
+ sl-drx-CycleStartOffset-r17 CHOICE {
+ ms10 INTEGER(0..9),
+ ms20 INTEGER(0..19),
+ ms32 INTEGER(0..31),
+ ms40 INTEGER(0..39),
+ ms60 INTEGER(0..59),
+ ms64 INTEGER(0..63),
+ ms70 INTEGER(0..69),
+ ms80 INTEGER(0..79),
+ ms128 INTEGER(0..127),
+ ms160 INTEGER(0..159),
+ ms256 INTEGER(0..255),
+ ms320 INTEGER(0..319),
+ ms512 INTEGER(0..511),
+ ms640 INTEGER(0..639),
+ ms1024 INTEGER(0..1023),
+ ms1280 INTEGER(0..1279),
+ ms2048 INTEGER(0..2047),
+ ms2560 INTEGER(0..2559),
+ ms5120 INTEGER(0..5119),
+ ms10240 INTEGER(0..10239)
+ },
+ sl-drx-SlotOffset-r17 INTEGER (0..31)
+}
+
+-- TAG-SL-DRX-CONFIGUCSEMISTATIC-STOP
+-- TAG-SL-FREQCONFIG-START
+
+SL-FreqConfig-r16 ::= SEQUENCE {
+ sl-Freq-Id-r16 SL-Freq-Id-r16,
+ sl-SCS-SpecificCarrierList-r16 SEQUENCE (SIZE (1..maxSCSs)) OF SCS-SpecificCarrier,
+ sl-AbsoluteFrequencyPointA-r16 ARFCN-ValueNR OPTIONAL, -- Need M
+ sl-AbsoluteFrequencySSB-r16 ARFCN-ValueNR OPTIONAL, -- Need R
+ frequencyShift7p5khzSL-r16 ENUMERATED {true} OPTIONAL, -- Cond V2X-SL-Shared
+ valueN-r16 INTEGER (-1..1),
+ sl-BWP-ToReleaseList-r16 SEQUENCE (SIZE (1..maxNrofSL-BWPs-r16)) OF BWP-Id OPTIONAL, -- Need N
+ sl-BWP-ToAddModList-r16 SEQUENCE (SIZE (1..maxNrofSL-BWPs-r16)) OF SL-BWP-Config-r16 OPTIONAL, -- Need N
+ sl-SyncConfigList-r16 SL-SyncConfigList-r16 OPTIONAL, -- Need M
+ sl-SyncPriority-r16 ENUMERATED {gnss, gnbEnb} OPTIONAL -- Need M
+}
+
+SL-Freq-Id-r16 ::= INTEGER (1.. maxNrofFreqSL-r16)
+
+-- TAG-SL-FREQCONFIG-STOP
+-- TAG-SL-FREQCONFIGCOMMON-START
+
+SL-FreqConfigCommon-r16 ::= SEQUENCE {
+ sl-SCS-SpecificCarrierList-r16 SEQUENCE (SIZE (1..maxSCSs)) OF SCS-SpecificCarrier,
+ sl-AbsoluteFrequencyPointA-r16 ARFCN-ValueNR,
+ sl-AbsoluteFrequencySSB-r16 ARFCN-ValueNR OPTIONAL, -- Need R
+ frequencyShift7p5khzSL-r16 ENUMERATED {true} OPTIONAL, -- Cond V2X-SL-Shared
+ valueN-r16 INTEGER (-1..1),
+ sl-BWP-List-r16 SEQUENCE (SIZE (1..maxNrofSL-BWPs-r16)) OF SL-BWP-ConfigCommon-r16 OPTIONAL, -- Need R
+ sl-SyncPriority-r16 ENUMERATED {gnss, gnbEnb} OPTIONAL, -- Need R
+ sl-NbAsSync-r16 BOOLEAN OPTIONAL, -- Need R
+ sl-SyncConfigList-r16 SL-SyncConfigList-r16 OPTIONAL, -- Need R
+ ...
+}
+-- TAG-SL-FREQCONFIGCOMMON-STOP
+-- TAG-SL-INTERUE-COORDINATIONCONFIG-START
+
+SL-InterUE-CoordinationConfig-r17 ::= SEQUENCE {
+ sl-InterUE-CoordinationScheme1-r17 SL-InterUE-CoordinationScheme1-r17 OPTIONAL, -- Need M
+ sl-InterUE-CoordinationScheme2-r17 SL-InterUE-CoordinationScheme2-r17 OPTIONAL, -- Need M
+ ...
+}
+
+SL-InterUE-CoordinationScheme1-r17 ::= SEQUENCE {
+ sl-IUC-Explicit-r17 ENUMERATED {enabled, disabled} OPTIONAL, -- Need M
+ sl-IUC-Condition-r17 ENUMERATED {enabled, disabled} OPTIONAL, -- Need M
+ sl-Condition1-A-2-r17 ENUMERATED {disabled} OPTIONAL, -- Need M
+ sl-ThresholdRSRP-Condition1-B-1-Option1List-r17 SEQUENCE (SIZE (1..8)) OF SL-ThresholdRSRP-Condition1-B-1-r17 OPTIONAL, -- Need M
+ sl-ThresholdRSRP-Condition1-B-1-Option2List-r17 SEQUENCE (SIZE (1..8)) OF SL-ThresholdRSRP-Condition1-B-1-r17 OPTIONAL, -- Need M
+ sl-ContainerCoordInfo-r17 ENUMERATED {enabled, disabled} OPTIONAL, -- Need M
+ sl-ContainerRequest-r17 ENUMERATED {enabled, disabled} OPTIONAL, -- Need M
+ sl-TriggerConditionCoordInfo-r17 INTEGER (0..1) OPTIONAL, -- Need M
+ sl-TriggerConditionRequest-r17 INTEGER (0..1) OPTIONAL, -- Need M
+ sl-PriorityCoordInfoExplicit-r17 INTEGER (1..8) OPTIONAL, -- Need M
+ sl-PriorityCoordInfoCondition-r17 INTEGER (1..8) OPTIONAL, -- Need M
+ sl-PriorityRequest-r17 INTEGER (1..8) OPTIONAL, -- Need M
+ sl-PriorityPreferredResourceSet-r17 INTEGER (1..8) OPTIONAL, -- Need M
+ sl-MaxSlotOffsetTRIV-r17 INTEGER (1..8000) OPTIONAL, -- Need M
+ sl-NumSubCH-PreferredResourceSet-r17 INTEGER (1..27) OPTIONAL, -- Need M
+ sl-ReservedPeriodPreferredResourceSet-r17 INTEGER (1..16) OPTIONAL, -- Need M
+ sl-DetermineResourceType-r17 ENUMERATED {uea, ueb} OPTIONAL, -- Need M
+ ...
+}
+
+SL-InterUE-CoordinationScheme2-r17 ::= SEQUENCE {
+ sl-IUC-Scheme2-r17 ENUMERATED {enabled} OPTIONAL, -- Need R
+ sl-RB-SetPSFCH-r17 BIT STRING (SIZE (10..275)) OPTIONAL, -- Need M
+ sl-TypeUE-A-r17 ENUMERATED {enabled} OPTIONAL, -- Need R
+ sl-PSFCH-Occasion-r17 INTEGER (0..1) OPTIONAL, -- Need M
+ sl-SlotLevelResourceExclusion-r17 ENUMERATED {enabled} OPTIONAL, -- Need R
+ sl-OptionForCondition2-A-1-r17 INTEGER (0..1) OPTIONAL, -- Need M
+ sl-IndicationUE-B-r17 ENUMERATED {enabled, disabled} OPTIONAL, -- Need M
+ ...,
+ [[
+ sl-DeltaRSRP-Thresh-v1720 INTEGER (-30..30) OPTIONAL -- Need M
+ ]]
+}
+
+
+SL-ThresholdRSRP-Condition1-B-1-r17 ::= SEQUENCE {
+ sl-Priority-r17 INTEGER (1..8),
+ sl-ThresholdRSRP-Condition1-B-1-r17 INTEGER (0..66)
+}
+
+-- TAG-SL-INTERUE-COORDINATIONCONFIG-STOP
+-- TAG-SL-LOGICALCHANNELCONFIG-START
+
+SL-LogicalChannelConfig-r16 ::= SEQUENCE {
+ sl-Priority-r16 INTEGER (1..8),
+ sl-PrioritisedBitRate-r16 ENUMERATED {kBps0, kBps8, kBps16, kBps32, kBps64, kBps128, kBps256, kBps512,
+ kBps1024, kBps2048, kBps4096, kBps8192, kBps16384, kBps32768, kBps65536, infinity},
+ sl-BucketSizeDuration-r16 ENUMERATED {ms5, ms10, ms20, ms50, ms100, ms150, ms300, ms500, ms1000,
+ spare7, spare6, spare5, spare4, spare3,spare2, spare1},
+ sl-ConfiguredGrantType1Allowed-r16 ENUMERATED {true} OPTIONAL, -- Need R
+ sl-HARQ-FeedbackEnabled-r16 ENUMERATED {enabled, disabled } OPTIONAL, -- Need R
+ sl-AllowedCG-List-r16 SEQUENCE (SIZE (0.. maxNrofCG-SL-1-r16)) OF SL-ConfigIndexCG-r16
+ OPTIONAL, -- Need R
+ sl-AllowedSCS-List-r16 SEQUENCE (SIZE (1..maxSCSs)) OF SubcarrierSpacing OPTIONAL, -- Need R
+ sl-MaxPUSCH-Duration-r16 ENUMERATED {ms0p02, ms0p04, ms0p0625, ms0p125, ms0p25, ms0p5, spare2, spare1}
+ OPTIONAL, -- Need R
+ sl-LogicalChannelGroup-r16 INTEGER (0..maxLCG-ID) OPTIONAL, -- Need R
+ sl-SchedulingRequestId-r16 SchedulingRequestId OPTIONAL, -- Need R
+ sl-LogicalChannelSR-DelayTimerApplied-r16 BOOLEAN OPTIONAL, -- Need R
+ ...
+}
+-- TAG-SL-LOGICALCHANNELCONFIG-STOP
+-- TAG-SL-L2RELAYUE-CONFIG-START
+
+SL-L2RelayUE-Config-r17 ::= SEQUENCE {
+ sl-RemoteUE-ToAddModList-r17 SEQUENCE (SIZE (1..maxNrofRemoteUE-r17)) OF SL-RemoteUE-ToAddMod-r17 OPTIONAL, -- Need N
+ sl-RemoteUE-ToReleaseList-r17 SEQUENCE (SIZE (1..maxNrofRemoteUE-r17)) OF SL-DestinationIdentity-r16 OPTIONAL, -- Need N
+ ...
+}
+
+SL-RemoteUE-ToAddMod-r17 ::= SEQUENCE {
+ sl-L2IdentityRemote-r17 SL-DestinationIdentity-r16,
+ sl-SRAP-ConfigRelay-r17 SL-SRAP-Config-r17 OPTIONAL, -- Need M
+ ...
+}
+
+-- TAG-SL-L2RELAYUE-CONFIG-STOP
+-- TAG-SL-L2REMOTEUE-CONFIG-START
+
+SL-L2RemoteUE-Config-r17 ::= SEQUENCE {
+ sl-SRAP-ConfigRemote-r17 SL-SRAP-Config-r17 OPTIONAL, --Need M
+ sl-UEIdentityRemote-r17 RNTI-Value OPTIONAL, -- Cond FirstRRCReconfig
+ ...
+}
+-- TAG-SL-L2REMOTEUE-CONFIG-STOP
+-- TAG-SL-MEASCONFIGCOMMON-START
+
+SL-MeasConfigCommon-r16 ::= SEQUENCE {
+ sl-MeasObjectListCommon-r16 SL-MeasObjectList-r16 OPTIONAL, -- Need R
+ sl-ReportConfigListCommon-r16 SL-ReportConfigList-r16 OPTIONAL, -- Need R
+ sl-MeasIdListCommon-r16 SL-MeasIdList-r16 OPTIONAL, -- Need R
+ sl-QuantityConfigCommon-r16 SL-QuantityConfig-r16 OPTIONAL, -- Need R
+ ...
+}
+
+-- TAG-SL-MEASCONFIGCOMMON-STOP
+-- TAG-SL-MEASCONFIGINFO-START
+
+SL-MeasConfigInfo-r16 ::= SEQUENCE {
+ sl-DestinationIndex-r16 SL-DestinationIndex-r16,
+ sl-MeasConfig-r16 SL-MeasConfig-r16,
+ ...
+}
+
+SL-MeasConfig-r16 ::= SEQUENCE {
+ sl-MeasObjectToRemoveList-r16 SL-MeasObjectToRemoveList-r16 OPTIONAL, -- Need N
+ sl-MeasObjectToAddModList-r16 SL-MeasObjectList-r16 OPTIONAL, -- Need N
+ sl-ReportConfigToRemoveList-r16 SL-ReportConfigToRemoveList-r16 OPTIONAL, -- Need N
+ sl-ReportConfigToAddModList-r16 SL-ReportConfigList-r16 OPTIONAL, -- Need N
+ sl-MeasIdToRemoveList-r16 SL-MeasIdToRemoveList-r16 OPTIONAL, -- Need N
+ sl-MeasIdToAddModList-r16 SL-MeasIdList-r16 OPTIONAL, -- Need N
+ sl-QuantityConfig-r16 SL-QuantityConfig-r16 OPTIONAL, -- Need M
+ ...
+}
+
+SL-MeasObjectToRemoveList-r16 ::= SEQUENCE (SIZE (1..maxNrofSL-ObjectId-r16)) OF SL-MeasObjectId-r16
+
+SL-ReportConfigToRemoveList-r16 ::= SEQUENCE (SIZE (1..maxNrofSL-ReportConfigId-r16)) OF SL-ReportConfigId-r16
+
+SL-MeasIdToRemoveList-r16 ::= SEQUENCE (SIZE (1..maxNrofSL-MeasId-r16)) OF SL-MeasId-r16
+
+-- TAG-SL-MEASCONFIGINFO-STOP
+-- TAG-SL-MEASIDLIST-START
+
+SL-MeasIdList-r16 ::= SEQUENCE (SIZE (1..maxNrofSL-MeasId-r16)) OF SL-MeasIdInfo-r16
+
+SL-MeasIdInfo-r16 ::= SEQUENCE {
+ sl-MeasId-r16 SL-MeasId-r16,
+ sl-MeasObjectId-r16 SL-MeasObjectId-r16,
+ sl-ReportConfigId-r16 SL-ReportConfigId-r16,
+ ...
+}
+
+SL-MeasId-r16 ::= INTEGER (1..maxNrofSL-MeasId-r16)
+
+-- TAG-SL-MEASIDLIST-STOP
+-- TAG-SL-MEASOBJECTLIST-START
+
+SL-MeasObjectList-r16 ::= SEQUENCE (SIZE (1..maxNrofSL-ObjectId-r16)) OF SL-MeasObjectInfo-r16
+
+SL-MeasObjectInfo-r16 ::= SEQUENCE {
+ sl-MeasObjectId-r16 SL-MeasObjectId-r16,
+ sl-MeasObject-r16 SL-MeasObject-r16,
+ ...
+}
+
+SL-MeasObjectId-r16 ::= INTEGER (1..maxNrofSL-ObjectId-r16)
+
+SL-MeasObject-r16 ::= SEQUENCE {
+ frequencyInfoSL-r16 ARFCN-ValueNR,
+ ...
+}
+
+-- TAG-SL-MEASOBJECTLIST-STOP
+-- TAG-SL-PAGINGIDENTITYREMOTEUE-START
+
+SL-PagingIdentityRemoteUE-r17 ::= SEQUENCE {
+ ng-5G-S-TMSI-r17 NG-5G-S-TMSI,
+ fullI-RNTI-r17 I-RNTI-Value OPTIONAL -- Need R
+}
+
+-- TAG-SL-PAGINGIDENTITYREMOTEUE-STOP
+-- TAG-SL-PBPS-CPS-CONFIG-START
+
+SL-PBPS-CPS-Config-r17 ::= SEQUENCE {
+sl-AllowedResourceSelectionConfig-r17 ENUMERATED {c1, c2, c3, c4, c5, c6, c7} OPTIONAL, -- Need M
+sl-MinNumCandidateSlotsPeriodic-r17 INTEGER (1..32) OPTIONAL, -- Need M
+sl-PBPS-OccasionReservePeriodList-r17 SEQUENCE (SIZE (1..16)) OF INTEGER (1..16) OPTIONAL, -- Need M
+sl-Additional-PBPS-Occasion-r17 ENUMERATED { monitored } OPTIONAL, -- Need M
+sl-CPS-WindowPeriodic-r17 INTEGER (5..30) OPTIONAL, -- Need M
+sl-MinNumCandidateSlotsAperiodic-r17 INTEGER (1..32) OPTIONAL, -- Need M
+sl-MinNumRssiMeasurementSlots-r17 INTEGER (1..800) OPTIONAL, -- Need M
+sl-DefaultCBR-RandomSelection-r17 INTEGER (0..100) OPTIONAL, -- Need M
+sl-DefaultCBR-PartialSensing-r17 INTEGER (0..100) OPTIONAL, -- Need M
+sl-CPS-WindowAperiodic-r17 INTEGER (0..30) OPTIONAL, -- Need M
+sl-PartialSensingInactiveTime-r17 ENUMERATED { enabled, disabled } OPTIONAL, -- Need M
+ ...
+}
+
+-- TAG-SL-PBPS-CPS-CONFIG-STOP
+-- TAG-SL-PDCP-CONFIG-START
+
+SL-PDCP-Config-r16 ::= SEQUENCE {
+ sl-DiscardTimer-r16 ENUMERATED {ms3, ms10, ms20, ms25, ms30, ms40, ms50, ms60, ms75, ms100, ms150, ms200,
+ ms250, ms300, ms500, ms750, ms1500, infinity} OPTIONAL, -- Cond Setup
+ sl-PDCP-SN-Size-r16 ENUMERATED {len12bits, len18bits} OPTIONAL, -- Cond Setup2
+ sl-OutOfOrderDelivery ENUMERATED { true } OPTIONAL, -- Need R
+ ...
+}
+
+-- TAG-SL-PDCP-CONFIG-STOP
+-- TAG-SL-PSBCH-CONFIG-START
+
+SL-PSBCH-Config-r16 ::= SEQUENCE {
+ dl-P0-PSBCH-r16 INTEGER (-16..15) OPTIONAL, -- Need M
+ dl-Alpha-PSBCH-r16 ENUMERATED {alpha0, alpha04, alpha05, alpha06, alpha07, alpha08, alpha09, alpha1} OPTIONAL, -- Need M
+ ...,
+ [[
+ dl-P0-PSBCH-r17 INTEGER (-202..24) OPTIONAL -- Need M
+ ]]
+}
+
+-- TAG-SL-PSBCH-CONFIG-STOP
+-- TAG-SL-PSSCH-TXCONFIGLIST-START
+
+SL-PSSCH-TxConfigList-r16 ::= SEQUENCE (SIZE (1..maxPSSCH-TxConfig-r16)) OF SL-PSSCH-TxConfig-r16
+
+SL-PSSCH-TxConfig-r16 ::= SEQUENCE {
+ sl-TypeTxSync-r16 SL-TypeTxSync-r16 OPTIONAL, -- Need R
+ sl-ThresUE-Speed-r16 ENUMERATED {kmph60, kmph80, kmph100, kmph120,
+ kmph140, kmph160, kmph180, kmph200},
+ sl-ParametersAboveThres-r16 SL-PSSCH-TxParameters-r16,
+ sl-ParametersBelowThres-r16 SL-PSSCH-TxParameters-r16,
+ ...,
+ [[
+ sl-ParametersAboveThres-v1650 SL-MinMaxMCS-List-r16 OPTIONAL, -- Need R
+ sl-ParametersBelowThres-v1650 SL-MinMaxMCS-List-r16 OPTIONAL -- Need R
+ ]]
+}
+
+
+SL-PSSCH-TxParameters-r16 ::= SEQUENCE {
+ sl-MinMCS-PSSCH-r16 INTEGER (0..27),
+ sl-MaxMCS-PSSCH-r16 INTEGER (0..31),
+ sl-MinSubChannelNumPSSCH-r16 INTEGER (1..27),
+ sl-MaxSubchannelNumPSSCH-r16 INTEGER (1..27),
+ sl-MaxTxTransNumPSSCH-r16 INTEGER (1..32),
+ sl-MaxTxPower-r16 SL-TxPower-r16 OPTIONAL -- Cond CBR
+}
+
+-- TAG-SL-PSSCH-TXCONFIGLIST-STOP
+-- TAG-SL-QOS-FLOWIDENTITY-START
+
+SL-QoS-FlowIdentity-r16 ::= INTEGER (1..maxNrofSL-QFIs-r16)
+
+-- TAG-SL-QOS-FLOWIDENTITY-STOP
+-- TAG-SL-QOS-PROFILE-START
+
+SL-QoS-Profile-r16 ::= SEQUENCE {
+ sl-PQI-r16 SL-PQI-r16 OPTIONAL, -- Need R
+ sl-GFBR-r16 INTEGER (0..4000000000) OPTIONAL, -- Need R
+ sl-MFBR-r16 INTEGER (0..4000000000) OPTIONAL, -- Need R
+ sl-Range-r16 INTEGER (1..1000) OPTIONAL, -- Need R
+ ...
+}
+
+SL-PQI-r16 ::= CHOICE {
+ sl-StandardizedPQI-r16 INTEGER (0..255),
+ sl-Non-StandardizedPQI-r16 SEQUENCE {
+ sl-ResourceType-r16 ENUMERATED {gbr, non-GBR, delayCriticalGBR, spare1} OPTIONAL, -- Need R
+ sl-PriorityLevel-r16 INTEGER (1..8) OPTIONAL, -- Need R
+ sl-PacketDelayBudget-r16 INTEGER (0..1023) OPTIONAL, -- Need R
+ sl-PacketErrorRate-r16 INTEGER (0..9) OPTIONAL, -- Need R
+ sl-AveragingWindow-r16 INTEGER (0..4095) OPTIONAL, -- Need R
+ sl-MaxDataBurstVolume-r16 INTEGER (0..4095) OPTIONAL, -- Need R
+ ...
+ }
+}
+
+-- TAG-SL-QOS-PROFILE-STOP
+-- TAG-SL-QUANTITYCONFIG-START
+
+SL-QuantityConfig-r16 ::= SEQUENCE {
+ sl-FilterCoefficientDMRS-r16 FilterCoefficient DEFAULT fc4,
+ ...
+}
+
+-- TAG-SL-QuantityConfig-STOP
+-- TAG-SL-RADIOBEARERCONFIG-START
+
+SL-RadioBearerConfig-r16 ::= SEQUENCE {
+ slrb-Uu-ConfigIndex-r16 SLRB-Uu-ConfigIndex-r16,
+ sl-SDAP-Config-r16 SL-SDAP-Config-r16 OPTIONAL, -- Cond SLRBSetup
+ sl-PDCP-Config-r16 SL-PDCP-Config-r16 OPTIONAL, -- Cond SLRBSetup
+ sl-TransRange-r16 ENUMERATED {m20, m50, m80, m100, m120, m150, m180, m200, m220, m250, m270, m300, m350, m370,
+ m400, m420, m450, m480, m500, m550, m600, m700, m1000, spare9, spare8, spare7, spare6,
+ spare5, spare4, spare3, spare2, spare1} OPTIONAL, -- Need R
+ ...
+}
+
+-- TAG-SL-RADIOBEARERCONFIG-STOP
+-- TAG-SL-RELAYUE-CONFIG-START
+
+SL-RelayUE-Config-r17::= SEQUENCE {
+ threshHighRelay-r17 RSRP-Range OPTIONAL, -- Need R
+ threshLowRelay-r17 RSRP-Range OPTIONAL, -- Need R
+ hystMaxRelay-r17 Hysteresis OPTIONAL, -- Cond ThreshHighRelay
+ hystMinRelay-r17 Hysteresis OPTIONAL -- Cond ThreshLowRelay
+}
+
+-- TAG-SL-RELAYUE-CONFIG-STOP
+-- TAG-SL-REMOTEUE-CONFIG-START
+
+SL-RemoteUE-Config-r17::= SEQUENCE {
+ threshHighRemote-r17 RSRP-Range OPTIONAL, -- Need R
+ hystMaxRemote-r17 Hysteresis OPTIONAL, -- Cond ThreshHighRemote
+ sl-ReselectionConfig-r17 SL-ReselectionConfig-r17 OPTIONAL -- Need R
+}
+
+SL-ReselectionConfig-r17::= SEQUENCE {
+ sl-RSRP-Thresh-r17 SL-RSRP-Range-r16 OPTIONAL, -- Need R
+ sl-FilterCoefficientRSRP-r17 FilterCoefficient OPTIONAL, -- Need R
+ sl-HystMin-r17 Hysteresis OPTIONAL -- Cond SL-RSRP-Thresh
+}
+
+-- TAG-SL-REMOTEUE-CONFIG-STOP
+-- TAG-SL-REPORTCONFIGLIST-START
+
+SL-ReportConfigList-r16 ::= SEQUENCE (SIZE (1..maxNrofSL-ReportConfigId-r16)) OF SL-ReportConfigInfo-r16
+
+SL-ReportConfigInfo-r16 ::= SEQUENCE {
+ sl-ReportConfigId-r16 SL-ReportConfigId-r16,
+ sl-ReportConfig-r16 SL-ReportConfig-r16,
+ ...
+}
+
+SL-ReportConfigId-r16 ::= INTEGER (1..maxNrofSL-ReportConfigId-r16)
+
+SL-ReportConfig-r16 ::= SEQUENCE {
+ sl-ReportType-r16 CHOICE {
+ sl-Periodical-r16 SL-PeriodicalReportConfig-r16,
+ sl-EventTriggered-r16 SL-EventTriggerConfig-r16,
+ ...
+ },
+ ...
+}
+
+SL-PeriodicalReportConfig-r16 ::= SEQUENCE {
+ sl-ReportInterval-r16 ReportInterval,
+ sl-ReportAmount-r16 ENUMERATED {r1, r2, r4, r8, r16, r32, r64, infinity},
+ sl-ReportQuantity-r16 SL-MeasReportQuantity-r16,
+ sl-RS-Type-r16 SL-RS-Type-r16,
+ ...
+}
+
+SL-EventTriggerConfig-r16 ::= SEQUENCE {
+ sl-EventId-r16 CHOICE {
+ eventS1-r16 SEQUENCE {
+ s1-Threshold-r16 SL-MeasTriggerQuantity-r16,
+ sl-ReportOnLeave-r16 BOOLEAN,
+ sl-Hysteresis-r16 Hysteresis,
+ sl-TimeToTrigger-r16 TimeToTrigger,
+ ...
+ },
+ eventS2-r16 SEQUENCE {
+ s2-Threshold-r16 SL-MeasTriggerQuantity-r16,
+ sl-ReportOnLeave-r16 BOOLEAN,
+ sl-Hysteresis-r16 Hysteresis,
+ sl-TimeToTrigger-r16 TimeToTrigger,
+ ...
+ },
+ ...
+ },
+ sl-ReportInterval-r16 ReportInterval,
+ sl-ReportAmount-r16 ENUMERATED {r1, r2, r4, r8, r16, r32, r64, infinity},
+ sl-ReportQuantity-r16 SL-MeasReportQuantity-r16,
+ sl-RS-Type-r16 SL-RS-Type-r16,
+ ...
+}
+
+SL-MeasReportQuantity-r16 ::= CHOICE {
+ sl-RSRP-r16 BOOLEAN,
+ ...
+}
+
+SL-MeasTriggerQuantity-r16 ::= CHOICE {
+ sl-RSRP-r16 RSRP-Range,
+ ...
+}
+
+SL-RS-Type-r16 ::= ENUMERATED {dmrs, spare3, spare2, spare1}
+
+-- TAG-SL-REPORTCONFIGLIST-STOP
+-- TAG-SL-RESOURCEPOOL-START
+
+SL-ResourcePool-r16 ::= SEQUENCE {
+ sl-PSCCH-Config-r16 SetupRelease { SL-PSCCH-Config-r16 } OPTIONAL, -- Need M
+ sl-PSSCH-Config-r16 SetupRelease { SL-PSSCH-Config-r16 } OPTIONAL, -- Need M
+ sl-PSFCH-Config-r16 SetupRelease { SL-PSFCH-Config-r16 } OPTIONAL, -- Need M
+ sl-SyncAllowed-r16 SL-SyncAllowed-r16 OPTIONAL, -- Need M
+ sl-SubchannelSize-r16 ENUMERATED {n10, n12, n15, n20, n25, n50, n75, n100} OPTIONAL, -- Need M
+ dummy INTEGER (10..160) OPTIONAL, -- Need M
+ sl-StartRB-Subchannel-r16 INTEGER (0..265) OPTIONAL, -- Need M
+ sl-NumSubchannel-r16 INTEGER (1..27) OPTIONAL, -- Need M
+ sl-Additional-MCS-Table-r16 ENUMERATED {qam256, qam64LowSE, qam256-qam64LowSE } OPTIONAL, -- Need M
+ sl-ThreshS-RSSI-CBR-r16 INTEGER (0..45) OPTIONAL, -- Need M
+ sl-TimeWindowSizeCBR-r16 ENUMERATED {ms100, slot100} OPTIONAL, -- Need M
+ sl-TimeWindowSizeCR-r16 ENUMERATED {ms1000, slot1000} OPTIONAL, -- Need M
+ sl-PTRS-Config-r16 SL-PTRS-Config-r16 OPTIONAL, -- Need M
+ sl-UE-SelectedConfigRP-r16 SL-UE-SelectedConfigRP-r16 OPTIONAL, -- Need M
+ sl-RxParametersNcell-r16 SEQUENCE {
+ sl-TDD-Configuration-r16 TDD-UL-DL-ConfigCommon OPTIONAL, -- Need M
+ sl-SyncConfigIndex-r16 INTEGER (0..15)
+ } OPTIONAL, -- Need M
+ sl-ZoneConfigMCR-List-r16 SEQUENCE (SIZE (16)) OF SL-ZoneConfigMCR-r16 OPTIONAL, -- Need M
+ sl-FilterCoefficient-r16 FilterCoefficient OPTIONAL, -- Need M
+ sl-RB-Number-r16 INTEGER (10..275) OPTIONAL, -- Need M
+ sl-PreemptionEnable-r16 ENUMERATED {enabled, pl1, pl2, pl3, pl4, pl5, pl6, pl7, pl8} OPTIONAL, -- Need R
+ sl-PriorityThreshold-UL-URLLC-r16 INTEGER (1..9) OPTIONAL, -- Need M
+ sl-PriorityThreshold-r16 INTEGER (1..9) OPTIONAL, -- Need M
+ sl-X-Overhead-r16 ENUMERATED {n0,n3, n6, n9} OPTIONAL, -- Need S
+ sl-PowerControl-r16 SL-PowerControl-r16 OPTIONAL, -- Need M
+ sl-TxPercentageList-r16 SL-TxPercentageList-r16 OPTIONAL, -- Need M
+ sl-MinMaxMCS-List-r16 SL-MinMaxMCS-List-r16 OPTIONAL, -- Need M
+ ...,
+ [[
+ sl-TimeResource-r16 BIT STRING (SIZE (10..160)) OPTIONAL -- Need M
+ ]],
+ [[
+ sl-PBPS-CPS-Config-r17 SetupRelease { SL-PBPS-CPS-Config-r17 } OPTIONAL, -- Need M
+ sl-InterUE-CoordinationConfig-r17 SetupRelease { SL-InterUE-CoordinationConfig-r17 } OPTIONAL -- Need M
+ ]]
+}
+
+SL-ZoneConfigMCR-r16 ::= SEQUENCE {
+ sl-ZoneConfigMCR-Index-r16 INTEGER (0..15),
+ sl-TransRange-r16 ENUMERATED {m20, m50, m80, m100, m120, m150, m180, m200, m220, m250, m270, m300, m350,
+ m370, m400, m420, m450, m480, m500, m550, m600, m700, m1000, spare9, spare8,
+ spare7, spare6, spare5, spare4, spare3, spare2, spare1}
+ OPTIONAL, -- Need M
+ sl-ZoneConfig-r16 SL-ZoneConfig-r16 OPTIONAL, -- Need M
+ ...
+}
+
+SL-SyncAllowed-r16 ::= SEQUENCE {
+ gnss-Sync-r16 ENUMERATED {true} OPTIONAL, -- Need R
+ gnbEnb-Sync-r16 ENUMERATED {true} OPTIONAL, -- Need R
+ ue-Sync-r16 ENUMERATED {true} OPTIONAL -- Need R
+}
+
+SL-PSCCH-Config-r16 ::= SEQUENCE {
+ sl-TimeResourcePSCCH-r16 ENUMERATED {n2, n3} OPTIONAL, -- Need M
+ sl-FreqResourcePSCCH-r16 ENUMERATED {n10,n12, n15, n20, n25} OPTIONAL, -- Need M
+ sl-DMRS-ScrambleID-r16 INTEGER (0..65535) OPTIONAL, -- Need M
+ sl-NumReservedBits-r16 INTEGER (2..4) OPTIONAL, -- Need M
+ ...
+}
+
+SL-PSSCH-Config-r16 ::= SEQUENCE {
+ sl-PSSCH-DMRS-TimePatternList-r16 SEQUENCE (SIZE (1..3)) OF INTEGER (2..4) OPTIONAL, -- Need M
+ sl-BetaOffsets2ndSCI-r16 SEQUENCE (SIZE (4)) OF SL-BetaOffsets-r16 OPTIONAL, -- Need M
+ sl-Scaling-r16 ENUMERATED {f0p5, f0p65, f0p8, f1} OPTIONAL, -- Need M
+ ...
+}
+
+SL-PSFCH-Config-r16 ::= SEQUENCE {
+ sl-PSFCH-Period-r16 ENUMERATED {sl0, sl1, sl2, sl4} OPTIONAL, -- Need M
+ sl-PSFCH-RB-Set-r16 BIT STRING (SIZE (10..275)) OPTIONAL, -- Need M
+ sl-NumMuxCS-Pair-r16 ENUMERATED {n1, n2, n3, n6} OPTIONAL, -- Need M
+ sl-MinTimeGapPSFCH-r16 ENUMERATED {sl2, sl3} OPTIONAL, -- Need M
+ sl-PSFCH-HopID-r16 INTEGER (0..1023) OPTIONAL, -- Need M
+ sl-PSFCH-CandidateResourceType-r16 ENUMERATED {startSubCH, allocSubCH} OPTIONAL, -- Need M
+ ...
+}
+SL-PTRS-Config-r16 ::= SEQUENCE {
+ sl-PTRS-FreqDensity-r16 SEQUENCE (SIZE (2)) OF INTEGER (1..276) OPTIONAL, -- Need M
+ sl-PTRS-TimeDensity-r16 SEQUENCE (SIZE (3)) OF INTEGER (0..29) OPTIONAL, -- Need M
+ sl-PTRS-RE-Offset-r16 ENUMERATED {offset01, offset10, offset11} OPTIONAL, -- Need M
+ ...
+}
+
+SL-UE-SelectedConfigRP-r16 ::= SEQUENCE {
+ sl-CBR-PriorityTxConfigList-r16 SL-CBR-PriorityTxConfigList-r16 OPTIONAL, -- Need M
+ sl-Thres-RSRP-List-r16 SL-Thres-RSRP-List-r16 OPTIONAL, -- Need M
+ sl-MultiReserveResource-r16 ENUMERATED {enabled} OPTIONAL, -- Need M
+ sl-MaxNumPerReserve-r16 ENUMERATED {n2, n3} OPTIONAL, -- Need M
+ sl-SensingWindow-r16 ENUMERATED {ms100, ms1100} OPTIONAL, -- Need M
+ sl-SelectionWindowList-r16 SL-SelectionWindowList-r16 OPTIONAL, -- Need M
+ sl-ResourceReservePeriodList-r16 SEQUENCE (SIZE (1..16)) OF SL-ResourceReservePeriod-r16 OPTIONAL, -- Need M
+ sl-RS-ForSensing-r16 ENUMERATED {pscch, pssch},
+ ...,
+ [[
+ sl-CBR-PriorityTxConfigList-v1650 SL-CBR-PriorityTxConfigList-v1650 OPTIONAL -- Need M
+ ]]
+}
+
+SL-ResourceReservePeriod-r16 ::= CHOICE {
+ sl-ResourceReservePeriod1-r16 ENUMERATED {ms0, ms100, ms200, ms300, ms400, ms500, ms600, ms700, ms800, ms900, ms1000},
+ sl-ResourceReservePeriod2-r16 INTEGER (1..99)
+}
+
+SL-SelectionWindowList-r16 ::= SEQUENCE (SIZE (8)) OF SL-SelectionWindowConfig-r16
+
+SL-SelectionWindowConfig-r16 ::= SEQUENCE {
+ sl-Priority-r16 INTEGER (1..8),
+ sl-SelectionWindow-r16 ENUMERATED {n1, n5, n10, n20}
+}
+
+SL-TxPercentageList-r16 ::= SEQUENCE (SIZE (8)) OF SL-TxPercentageConfig-r16
+
+SL-TxPercentageConfig-r16 ::= SEQUENCE {
+ sl-Priority-r16 INTEGER (1..8),
+ sl-TxPercentage-r16 ENUMERATED {p20, p35, p50}
+}
+
+SL-MinMaxMCS-List-r16 ::= SEQUENCE (SIZE (1..3)) OF SL-MinMaxMCS-Config-r16
+
+SL-MinMaxMCS-Config-r16 ::= SEQUENCE {
+ sl-MCS-Table-r16 ENUMERATED {qam64, qam256, qam64LowSE},
+ sl-MinMCS-PSSCH-r16 INTEGER (0..27),
+ sl-MaxMCS-PSSCH-r16 INTEGER (0..31)
+}
+
+SL-BetaOffsets-r16 ::= INTEGER (0..31)
+
+SL-PowerControl-r16 ::= SEQUENCE {
+ sl-MaxTransPower-r16 INTEGER (-30..33),
+ sl-Alpha-PSSCH-PSCCH-r16 ENUMERATED {alpha0, alpha04, alpha05, alpha06, alpha07, alpha08, alpha09, alpha1} OPTIONAL, -- Need M
+ dl-Alpha-PSSCH-PSCCH-r16 ENUMERATED {alpha0, alpha04, alpha05, alpha06, alpha07, alpha08, alpha09, alpha1} OPTIONAL, -- Need S
+ sl-P0-PSSCH-PSCCH-r16 INTEGER (-16..15) OPTIONAL, -- Need S
+ dl-P0-PSSCH-PSCCH-r16 INTEGER (-16..15) OPTIONAL, -- Need M
+ dl-Alpha-PSFCH-r16 ENUMERATED {alpha0, alpha04, alpha05, alpha06, alpha07, alpha08, alpha09, alpha1} OPTIONAL, -- Need S
+ dl-P0-PSFCH-r16 INTEGER (-16..15) OPTIONAL, -- Need M
+ ...,
+ [[
+ dl-P0-PSSCH-PSCCH-r17 INTEGER (-202..24) OPTIONAL, -- Need M
+ sl-P0-PSSCH-PSCCH-r17 INTEGER (-202..24) OPTIONAL, -- Need S
+ dl-P0-PSFCH-r17 INTEGER (-202..24) OPTIONAL -- Need M
+ ]]
+}
+
+-- TAG-SL-RESOURCEPOOL-STOP
+-- TAG-SL-RLC-BEARERCONFIG-START
+
+SL-RLC-BearerConfig-r16 ::= SEQUENCE {
+ sl-RLC-BearerConfigIndex-r16 SL-RLC-BearerConfigIndex-r16,
+ sl-ServedRadioBearer-r16 SLRB-Uu-ConfigIndex-r16 OPTIONAL, -- Cond LCH-SetupOnly
+ sl-RLC-Config-r16 SL-RLC-Config-r16 OPTIONAL, -- Cond LCH-Setup
+ sl-MAC-LogicalChannelConfig-r16 SL-LogicalChannelConfig-r16 OPTIONAL, -- Cond LCH-Setup
+ ...
+}
+
+-- TAG-SL-RLC-BEARERCONFIG-STOP
+-- TAG-SL-RLC-BEARERCONFIGINDEX-START
+
+SL-RLC-BearerConfigIndex-r16 ::= INTEGER (1..maxSL-LCID-r16)
+
+-- TAG-RLC-BEARERCONFIGINDEX-STOP
+-- TAG-SL-RLC-RLC-CHANNEL-CONFIG-START
+
+SL-RLC-ChannelConfig-r17 ::= SEQUENCE {
+ sl-RLC-ChannelID-r17 SL-RLC-ChannelID-r17,
+ sl-RLC-Config-r17 SL-RLC-Config-r16 OPTIONAL, -- Need M
+ sl-MAC-LogicalChannelConfig-r17 SL-LogicalChannelConfig-r16 OPTIONAL, -- Need M
+ sl-PacketDelayBudget-r17 INTEGER (0..1023) OPTIONAL, -- Need M
+ ...}
+
+-- TAG-SL-RLC-CHANNEL-CONFIG-STOP
+-- TAG-SL-RLC-CHANNELID-START
+
+SL-RLC-ChannelID-r17 ::= INTEGER (1..maxSL-LCID-r16)
+
+-- TAG-SL-RLC-CHANNELID-STOP
+-- TAG-SL-RLC-CONFIG-START
+
+SL-RLC-Config-r16 ::= CHOICE {
+ sl-AM-RLC-r16 SEQUENCE {
+ sl-SN-FieldLengthAM-r16 SN-FieldLengthAM OPTIONAL, -- Cond SLRBSetup
+ sl-T-PollRetransmit-r16 T-PollRetransmit,
+ sl-PollPDU-r16 PollPDU,
+ sl-PollByte-r16 PollByte,
+ sl-MaxRetxThreshold-r16 ENUMERATED { t1, t2, t3, t4, t6, t8, t16, t32 },
+ ...
+ },
+ sl-UM-RLC-r16 SEQUENCE {
+ sl-SN-FieldLengthUM-r16 SN-FieldLengthUM OPTIONAL, -- Cond SLRBSetup
+ ...
+ },
+ ...
+}
+
+-- TAG-SL-RLC-CONFIG-STOP
+-- TAG-SL-SCHEDULEDCONFIG-START
+
+SL-ScheduledConfig-r16 ::= SEQUENCE {
+ sl-RNTI-r16 RNTI-Value,
+ mac-MainConfigSL-r16 MAC-MainConfigSL-r16 OPTIONAL, -- Need M
+ sl-CS-RNTI-r16 RNTI-Value OPTIONAL, -- Need M
+ sl-PSFCH-ToPUCCH-r16 SEQUENCE (SIZE (1..8)) OF INTEGER (0..15) OPTIONAL, -- Need M
+ sl-ConfiguredGrantConfigList-r16 SL-ConfiguredGrantConfigList-r16 OPTIONAL, -- Need M
+ ...,
+ [[
+ sl-DCI-ToSL-Trans-r16 SEQUENCE (SIZE (1..8)) OF INTEGER (1..32) OPTIONAL -- Need M
+ ]]
+}
+
+MAC-MainConfigSL-r16 ::= SEQUENCE {
+ sl-BSR-Config-r16 BSR-Config OPTIONAL, -- Need M
+ ul-PrioritizationThres-r16 INTEGER (1..16) OPTIONAL, -- Need M
+ sl-PrioritizationThres-r16 INTEGER (1..8) OPTIONAL, -- Need M
+ ...
+}
+
+SL-ConfiguredGrantConfigList-r16 ::= SEQUENCE {
+ sl-ConfiguredGrantConfigToReleaseList-r16 SEQUENCE (SIZE (1..maxNrofCG-SL-r16)) OF SL-ConfigIndexCG-r16 OPTIONAL, -- Need N
+ sl-ConfiguredGrantConfigToAddModList-r16 SEQUENCE (SIZE (1..maxNrofCG-SL-r16)) OF SL-ConfiguredGrantConfig-r16 OPTIONAL -- Need N
+}
+
+-- TAG-SL-SCHEDULEDCONFIG-STOP
+-- TAG-SL-SDAP-CONFIG-START
+
+SL-SDAP-Config-r16 ::= SEQUENCE {
+ sl-SDAP-Header-r16 ENUMERATED {present, absent},
+ sl-DefaultRB-r16 BOOLEAN,
+ sl-MappedQoS-Flows-r16 CHOICE {
+ sl-MappedQoS-FlowsList-r16 SEQUENCE (SIZE (1..maxNrofSL-QFIs-r16)) OF SL-QoS-Profile-r16,
+ sl-MappedQoS-FlowsListDedicated-r16 SL-MappedQoS-FlowsListDedicated-r16
+ } OPTIONAL, -- Need M
+ sl-CastType-r16 ENUMERATED {broadcast, groupcast, unicast, spare1} OPTIONAL, -- Need M
+ ...
+}
+
+SL-MappedQoS-FlowsListDedicated-r16 ::= SEQUENCE {
+ sl-MappedQoS-FlowsToAddList-r16 SEQUENCE (SIZE (1..maxNrofSL-QFIs-r16)) OF SL-QoS-FlowIdentity-r16 OPTIONAL, -- Need N
+ sl-MappedQoS-FlowsToReleaseList-r16 SEQUENCE (SIZE (1..maxNrofSL-QFIs-r16)) OF SL-QoS-FlowIdentity-r16 OPTIONAL -- Need N
+}
+
+-- TAG-SL-SDAP-CONFIG-STOP
+-- TAG-SL-SERVINGCELLINFO-START
+
+SL-ServingCellInfo-r17 ::= SEQUENCE {
+ sl-PhysCellId-r17 PhysCellId,
+ sl-CarrierFreqNR-r17 ARFCN-ValueNR
+}
+
+-- TAG-SL-SERVINGCELLINFO-STOP
+-- TAG-SL-SOURCEIDENTITY-START
+
+SL-SourceIdentity-r17 ::= BIT STRING (SIZE (24))
+
+-- TAG-SL-SOURCEIDENTITY-STOP
+-- TAG-SL-SRAP-CONFIG-START
+
+SL-SRAP-Config-r17 ::= SEQUENCE {
+ sl-LocalIdentity-r17 INTEGER (0..255) OPTIONAL, -- Need M
+ sl-MappingToAddModList-r17 SEQUENCE (SIZE (1..maxLC-ID)) OF SL-MappingToAddMod-r17 OPTIONAL, -- Need N
+ sl-MappingToReleaseList-r17 SEQUENCE (SIZE (1..maxLC-ID)) OF SL-RemoteUE-RB-Identity-r17 OPTIONAL, -- Need N
+ ...
+}
+
+SL-MappingToAddMod-r17 ::= SEQUENCE {
+ sl-RemoteUE-RB-Identity-r17 SL-RemoteUE-RB-Identity-r17,
+ sl-EgressRLC-ChannelUu-r17 Uu-RelayRLC-ChannelID-r17 OPTIONAL, -- Cond L2RelayUE
+ sl-EgressRLC-ChannelPC5-r17 SL-RLC-ChannelID-r17 OPTIONAL, -- Need N
+ ...
+}
+
+SL-RemoteUE-RB-Identity-r17 ::= CHOICE {
+ srb-Identity-r17 INTEGER (0..3),
+ drb-Identity-r17 DRB-Identity,
+ ...
+}
+
+-- TAG-SL-SRAP-CONFIG-STOP
+-- TAG-SL-SYNCCONFIG-START
+
+SL-SyncConfigList-r16 ::= SEQUENCE (SIZE (1..maxSL-SyncConfig-r16)) OF SL-SyncConfig-r16
+
+SL-SyncConfig-r16 ::= SEQUENCE {
+ sl-SyncRefMinHyst-r16 ENUMERATED {dB0, dB3, dB6, dB9, dB12} OPTIONAL, -- Need R
+ sl-SyncRefDiffHyst-r16 ENUMERATED {dB0, dB3, dB6, dB9, dB12, dBinf} OPTIONAL, -- Need R
+ sl-filterCoefficient-r16 FilterCoefficient OPTIONAL, -- Need R
+ sl-SSB-TimeAllocation1-r16 SL-SSB-TimeAllocation-r16 OPTIONAL, -- Need R
+ sl-SSB-TimeAllocation2-r16 SL-SSB-TimeAllocation-r16 OPTIONAL, -- Need R
+ sl-SSB-TimeAllocation3-r16 SL-SSB-TimeAllocation-r16 OPTIONAL, -- Need R
+ sl-SSID-r16 INTEGER (0..671) OPTIONAL, -- Need R
+ txParameters-r16 SEQUENCE {
+ syncTxThreshIC-r16 SL-RSRP-Range-r16 OPTIONAL, -- Need R
+ syncTxThreshOoC-r16 SL-RSRP-Range-r16 OPTIONAL, -- Need R
+ syncInfoReserved-r16 BIT STRING (SIZE (2)) OPTIONAL -- Need R
+ },
+ gnss-Sync-r16 ENUMERATED {true} OPTIONAL, -- Need R
+ ...
+}
+
+SL-RSRP-Range-r16 ::= INTEGER (0..13)
+
+SL-SSB-TimeAllocation-r16 ::= SEQUENCE {
+ sl-NumSSB-WithinPeriod-r16 ENUMERATED {n1, n2, n4, n8, n16, n32, n64} OPTIONAL, -- Need R
+ sl-TimeOffsetSSB-r16 INTEGER (0..1279) OPTIONAL, -- Need R
+ sl-TimeInterval-r16 INTEGER (0..639) OPTIONAL -- Need R
+}
+
+-- TAG-SL-SYNCCONFIG-STOP
+-- TAG-SL-THRES-RSRP-LIST-START
+
+SL-Thres-RSRP-List-r16 ::= SEQUENCE (SIZE (64)) OF SL-Thres-RSRP-r16
+
+SL-Thres-RSRP-r16 ::= INTEGER (0..66)
+
+-- TAG-SL-THRES-RSRP-LIST-STOP
+-- TAG-SL-TXPOWER-START
+
+SL-TxPower-r16 ::= CHOICE{
+ minusinfinity-r16 NULL,
+ txPower-r16 INTEGER (-30..33)
+}
+
+-- TAG-SL-TXPOWER-STOP
+-- TAG-SL-TYPETXSYNC-START
+
+SL-TypeTxSync-r16 ::= ENUMERATED {gnss, gnbEnb, ue}
+
+-- TAG-SL-TYPETXSYNC-STOP
+-- TAG-SL-UE-SELECTEDCONFIG-START
+
+SL-UE-SelectedConfig-r16 ::= SEQUENCE {
+ sl-PSSCH-TxConfigList-r16 SL-PSSCH-TxConfigList-r16 OPTIONAL, -- Need R
+ sl-ProbResourceKeep-r16 ENUMERATED {v0, v0dot2, v0dot4, v0dot6, v0dot8} OPTIONAL, -- Need R
+ sl-ReselectAfter-r16 ENUMERATED {n1, n2, n3, n4, n5, n6, n7, n8, n9} OPTIONAL, -- Need R
+ sl-CBR-CommonTxConfigList-r16 SL-CBR-CommonTxConfigList-r16 OPTIONAL, -- Need R
+ ul-PrioritizationThres-r16 INTEGER (1..16) OPTIONAL, -- Need R
+ sl-PrioritizationThres-r16 INTEGER (1..8) OPTIONAL, -- Need R
+ ...
+}
+
+-- TAG-SL-UE-SELECTEDCONFIG-STOP
+-- TAG-SL-ZONECONFIG-START
+
+SL-ZoneConfig-r16 ::= SEQUENCE {
+ sl-ZoneLength-r16 ENUMERATED { m5, m10, m20, m30, m40, m50, spare2, spare1},
+ ...
+}
+
+-- TAG-SL-ZONECONFIG-STOP
+-- TAG-SLRB-UU-CONFIGINDEX-START
+
+SLRB-Uu-ConfigIndex-r16 ::= INTEGER (1..maxNrofSLRB-r16)
+
+-- TAG-SLRB-UU-CONFIGINDEX-STOP
+-- TAG-CARRIERFREQLISTMBS-START
+
+CarrierFreqListMBS-r17 ::= SEQUENCE (SIZE (1..maxFreqMBS-r17)) OF ARFCN-ValueNR
+
+-- TAG-CARRIERFREQLISTMBS-STOP
+-- TAG-CFR-CONFIGMCCH-MTCH-START
+
+CFR-ConfigMCCH-MTCH-r17 ::= SEQUENCE {
+ locationAndBandwidthBroadcast-r17 LocationAndBandwidthBroadcast-r17 OPTIONAL, -- Need S
+ pdsch-ConfigMCCH-r17 PDSCH-ConfigBroadcast-r17 OPTIONAL, -- Need S
+ commonControlResourceSetExt-r17 ControlResourceSet OPTIONAL -- Cond NotSIB1CommonControlResource
+}
+
+LocationAndBandwidthBroadcast-r17 ::= CHOICE {
+ sameAsSib1ConfiguredLocationAndBW NULL,
+ locationAndBandwidth INTEGER (0..37949)
+}
+
+-- TAG-CFR-CONFIGMCCH-MTCH-STOP
+-- TAG-DRX-CONFIGPTM-START
+
+DRX-ConfigPTM-r17 ::= SEQUENCE {
+ drx-onDurationTimerPTM-r17 CHOICE {
+ subMilliSeconds INTEGER (1..31),
+ milliSeconds ENUMERATED {
+ ms1, ms2, ms3, ms4, ms5, ms6, ms8, ms10, ms20, ms30, ms40, ms50, ms60,
+ ms80, ms100, ms200, ms300, ms400, ms500, ms600, ms800, ms1000, ms1200,
+ ms1600, spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1
+ }
+ },
+ drx-InactivityTimerPTM-r17 ENUMERATED {
+ ms0, ms1, ms2, ms3, ms4, ms5, ms6, ms8, ms10, ms20, ms30, ms40, ms50, ms60, ms80,
+ ms100, ms200, ms300, ms500, ms750, ms1280, ms1920, ms2560, spare9, spare8,
+ spare7, spare6, spare5, spare4, spare3, spare2, spare1
+ },
+ drx-HARQ-RTT-TimerDL-PTM-r17 INTEGER (0..56) OPTIONAL, -- Cond HARQFeedback
+ drx-RetransmissionTimerDL-PTM-r17 ENUMERATED {
+ sl0, sl1, sl2, sl4, sl6, sl8, sl16, sl24, sl33, sl40, sl64, sl80, sl96, sl112, sl128,
+ sl160, sl320, spare15, spare14, spare13, spare12, spare11, spare10, spare9,
+ spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1
+ } OPTIONAL, -- Cond HARQFeedback
+ drx-LongCycleStartOffsetPTM-r17 CHOICE {
+ ms10 INTEGER(0..9),
+ ms20 INTEGER(0..19),
+ ms32 INTEGER(0..31),
+ ms40 INTEGER(0..39),
+ ms60 INTEGER(0..59),
+ ms64 INTEGER(0..63),
+ ms70 INTEGER(0..69),
+ ms80 INTEGER(0..79),
+ ms128 INTEGER(0..127),
+ ms160 INTEGER(0..159),
+ ms256 INTEGER(0..255),
+ ms320 INTEGER(0..319),
+ ms512 INTEGER(0..511),
+ ms640 INTEGER(0..639),
+ ms1024 INTEGER(0..1023),
+ ms1280 INTEGER(0..1279),
+ ms2048 INTEGER(0..2047),
+ ms2560 INTEGER(0..2559),
+ ms5120 INTEGER(0..5119),
+ ms10240 INTEGER(0..10239)
+ },
+ drx-SlotOffsetPTM-r17 INTEGER (0..31)
+}
+
+-- TAG-DRX-CONFIGPTM-STOP
+-- TAG-MBS-NEIGHBOURCELLLIST-START
+
+MBS-NeighbourCellList-r17 ::= SEQUENCE (SIZE (0..maxNeighCellMBS-r17)) OF MBS-NeighbourCell-r17
+
+MBS-NeighbourCell-r17 ::= SEQUENCE {
+ physCellId-r17 PhysCellId,
+ carrierFreq-r17 ARFCN-ValueNR OPTIONAL -- Need S
+}
+
+-- TAG-MBS-NEIGHBOURCELLLIST-STOP
+-- TAG-MBS-SERVICELIST-START
+
+MBS-ServiceList-r17 ::= SEQUENCE (SIZE (1..maxNrofMBS-ServiceListPerUE-r17)) OF MBS-ServiceInfo-r17
+
+MBS-ServiceInfo-r17 ::= SEQUENCE {
+ tmgi-r17 TMGI-r17
+}
+
+-- TAG-MBS-SERVICELIST-STOP
+-- TAG-MBS-SESSIONINFOLIST-START
+
+MBS-SessionInfoList-r17 ::= SEQUENCE (SIZE (1..maxNrofMBS-Session-r17)) OF MBS-SessionInfo-r17
+
+MBS-SessionInfo-r17 ::= SEQUENCE {
+ mbs-SessionId-r17 TMGI-r17,
+ g-RNTI-r17 RNTI-Value,
+ mrb-ListBroadcast-r17 MRB-ListBroadcast-r17,
+ mtch-SchedulingInfo-r17 DRX-ConfigPTM-Index-r17 OPTIONAL, -- Need S
+ mtch-NeighbourCell-r17 BIT STRING (SIZE(maxNeighCellMBS-r17)) OPTIONAL, -- Need S
+ pdsch-ConfigIndex-r17 PDSCH-ConfigIndex-r17 OPTIONAL, -- Need S
+ mtch-SSB-MappingWindowIndex-r17 MTCH-SSB-MappingWindowIndex-r17 OPTIONAL -- Cond MTCH-Mapping
+}
+
+DRX-ConfigPTM-Index-r17 ::= INTEGER (0..maxNrofDRX-ConfigPTM-1-r17)
+
+PDSCH-ConfigIndex-r17 ::= INTEGER (0..maxNrofPDSCH-ConfigPTM-1-r17)
+
+MTCH-SSB-MappingWindowIndex-r17 ::= INTEGER (0..maxNrofMTCH-SSB-MappingWindow-1-r17)
+
+MRB-ListBroadcast-r17 ::= SEQUENCE (SIZE (1..maxNrofMRB-Broadcast-r17)) OF MRB-InfoBroadcast-r17
+
+MRB-InfoBroadcast-r17 ::= SEQUENCE {
+ pdcp-Config-r17 MRB-PDCP-ConfigBroadcast-r17,
+ rlc-Config-r17 MRB-RLC-ConfigBroadcast-r17,
+ ...
+}
+
+MRB-PDCP-ConfigBroadcast-r17 ::= SEQUENCE {
+ pdcp-SN-SizeDL-r17 ENUMERATED {len12bits} OPTIONAL, -- Need S
+ headerCompression-r17 CHOICE {
+ notUsed NULL,
+ rohc SEQUENCE {
+ maxCID-r17 INTEGER (1..16) DEFAULT 15,
+ profiles-r17 SEQUENCE {
+ profile0x0000-r17 BOOLEAN,
+ profile0x0001-r17 BOOLEAN,
+ profile0x0002-r17 BOOLEAN
+ }
+ }
+ },
+ t-Reordering-r17 ENUMERATED {ms1, ms10, ms40, ms160, ms500, ms1000, ms1250, ms2750} OPTIONAL -- Need S
+}
+
+MRB-RLC-ConfigBroadcast-r17 ::= SEQUENCE {
+ logicalChannelIdentity-r17 LogicalChannelIdentity,
+ sn-FieldLength-r17 ENUMERATED {size6} OPTIONAL, -- Need S
+ t-Reassembly-r17 T-Reassembly OPTIONAL -- Need S
+}
+
+-- TAG-MBS-SESSIONINFOLIST-STOP
+-- TAG-MTCH-SSB-MAPPINGWINDOWLIST-START
+
+MTCH-SSB-MappingWindowList-r17 ::= SEQUENCE (SIZE (1..maxNrofMTCH-SSB-MappingWindow-r17)) OF MTCH-SSB-MappingWindowCycleOffset-r17
+
+MTCH-SSB-MappingWindowCycleOffset-r17 ::= CHOICE {
+ ms10 INTEGER(0..9),
+ ms20 INTEGER(0..19),
+ ms32 INTEGER(0..31),
+ ms64 INTEGER(0..63),
+ ms128 INTEGER(0..127),
+ ms256 INTEGER(0..255)
+}
+
+-- TAG-MTCH-SSB-MAPPINGWINDOWLIST-STOP
+-- TAG-PDSCH-CONFIGBROADCAST-START
+
+PDSCH-ConfigBroadcast-r17 ::= SEQUENCE {
+ pdschConfigList-r17 SEQUENCE (SIZE (1..maxNrofPDSCH-ConfigPTM-r17) ) OF PDSCH-ConfigPTM-r17,
+ pdsch-TimeDomainAllocationList-r17 PDSCH-TimeDomainResourceAllocationList-r16 OPTIONAL, -- Need R
+ rateMatchPatternToAddModList-r17 SEQUENCE (SIZE (1..maxNrofRateMatchPatterns)) OF RateMatchPattern OPTIONAL, -- Need R
+ lte-CRS-ToMatchAround-r17 RateMatchPatternLTE-CRS OPTIONAL, -- Need R
+ mcs-Table-r17 ENUMERATED {qam256, qam64LowSE} OPTIONAL, -- Need S
+ xOverhead-r17 ENUMERATED {xOh6, xOh12, xOh18} OPTIONAL -- Need S
+}
+
+PDSCH-ConfigPTM-r17 ::= SEQUENCE {
+ dataScramblingIdentityPDSCH-r17 INTEGER (0..1023) OPTIONAL, -- Need S
+ dmrs-ScramblingID0-r17 INTEGER (0..65535) OPTIONAL, -- Need S
+ pdsch-AggregationFactor-r17 ENUMERATED {n2, n4, n8} OPTIONAL -- Need S
+}
+
+-- TAG-PDSCH-CONFIGBROADCAST-STOP
+-- TAG-TMGI-START
+
+TMGI-r17 ::= SEQUENCE {
+ plmn-Id-r17 CHOICE {
+ plmn-Index INTEGER (1..maxPLMN),
+ explicitValue PLMN-Identity
+ },
+ serviceId-r17 OCTET STRING (SIZE (3))
+}
+
+-- TAG-TMGI-STOP
+-- TAG-MULTIPLICITY-AND-TYPE-CONSTRAINT-DEFINITIONS-START
+
+maxAdditionalRACH-r17 INTEGER ::= 256 -- Maximum number of additional RACH configurations.
+maxAI-DCI-PayloadSize-r16 INTEGER ::= 128 --Maximum size of the DCI payload scrambled with ai-RNTI
+maxAI-DCI-PayloadSize-1-r16 INTEGER ::= 127 --Maximum size of the DCI payload scrambled with ai-RNTI minus 1
+maxBandComb INTEGER ::= 65536 -- Maximum number of DL band combinations
+maxBandsUTRA-FDD-r16 INTEGER ::= 64 -- Maximum number of bands listed in UTRA-FDD UE caps
+maxBH-RLC-ChannelID-r16 INTEGER ::= 65536 -- Maximum value of BH RLC Channel ID
+maxBT-IdReport-r16 INTEGER ::= 32 -- Maximum number of Bluetooth IDs to report
+maxBT-Name-r16 INTEGER ::= 4 -- Maximum number of Bluetooth name
+maxCAG-Cell-r16 INTEGER ::= 16 -- Maximum number of NR CAG cell ranges in SIB3, SIB4
+maxTwoPUCCH-Grp-ConfigList-r16 INTEGER ::= 32 -- Maximum number of supported configuration(s) of {primary PUCCH group
+ -- config, secondary PUCCH group config}
+maxTwoPUCCH-Grp-ConfigList-r17 INTEGER ::= 16 -- Maximum number of supported configuration(s) of {primary PUCCH group
+ -- config, secondary PUCCH group config} for PUCCH cell switching
+maxCBR-Config-r16 INTEGER ::= 8 -- Maximum number of CBR range configurations for sidelink communication
+ -- congestion control
+maxCBR-Config-1-r16 INTEGER ::= 7 -- Maximum number of CBR range configurations for sidelink communication
+ -- congestion control minus 1
+maxCBR-Level-r16 INTEGER ::= 16 -- Maximum number of CBR levels
+maxCBR-Level-1-r16 INTEGER ::= 15 -- Maximum number of CBR levels minus 1
+maxCellExcluded INTEGER ::= 16 -- Maximum number of NR exclude-listed cell ranges in SIB3, SIB4
+maxCellGroupings-r16 INTEGER ::= 32 -- Maximum number of cell groupings for NR-DC
+maxCellHistory-r16 INTEGER ::= 16 -- Maximum number of visited PCells reported
+maxPSCellHistory-r17 INTEGER ::= 16 -- Maximum number of visited PSCells across all reported PCells
+maxCellInter INTEGER ::= 16 -- Maximum number of inter-Freq cells listed in SIB4
+maxCellIntra INTEGER ::= 16 -- Maximum number of intra-Freq cells listed in SIB3
+maxCellMeasEUTRA INTEGER ::= 32 -- Maximum number of cells in E-UTRAN
+maxCellMeasIdle-r16 INTEGER ::= 8 -- Maximum number of cells per carrier for idle/inactive measurements
+maxCellMeasUTRA-FDD-r16 INTEGER ::= 32 -- Maximum number of cells in FDD UTRAN
+maxCellNTN-r17 INTEGER ::= 4 -- Maximum number of NTN neighbour cells for which assistance information is
+ -- provided
+maxCarrierTypePairList-r16 INTEGER ::= 16 -- Maximum number of supported carrier type pair of (carrier type on which
+ -- CSI measurement is performed, carrier type on which CSI reporting is
+ -- performed) for CSI reporting cross PUCCH group
+maxCellAllowed INTEGER ::= 16 -- Maximum number of NR allow-listed cell ranges in SIB3, SIB4
+maxEARFCN INTEGER ::= 262143 -- Maximum value of E-UTRA carrier frequency
+maxEUTRA-CellExcluded INTEGER ::= 16 -- Maximum number of E-UTRA exclude-listed physical cell identity ranges
+ -- in SIB5
+maxEUTRA-NS-Pmax INTEGER ::= 8 -- Maximum number of NS and P-Max values per band
+maxFeatureCombPreamblesPerRACHResource-r17 INTEGER ::= 256 -- Maximum number of feature combination preambles.
+maxLogMeasReport-r16 INTEGER ::= 520 -- Maximum number of entries for logged measurements
+maxMultiBands INTEGER ::= 8 -- Maximum number of additional frequency bands that a cell belongs to
+maxNARFCN INTEGER ::= 3279165 -- Maximum value of NR carrier frequency
+maxNR-NS-Pmax INTEGER ::= 8 -- Maximum number of NS and P-Max values per band
+maxFreqIdle-r16 INTEGER ::= 8 -- Maximum number of carrier frequencies for idle/inactive measurements
+maxNrofServingCells INTEGER ::= 32 -- Max number of serving cells (SpCells + SCells)
+maxNrofServingCells-1 INTEGER ::= 31 -- Max number of serving cells (SpCells + SCells) minus 1
+maxNrofAggregatedCellsPerCellGroup INTEGER ::= 16
+maxNrofAggregatedCellsPerCellGroupMinus4-r16 INTEGER ::= 12
+maxNrofDUCells-r16 INTEGER ::= 512 -- Max number of cells configured on the collocated IAB-DU
+maxNrofAppLayerMeas-r17 INTEGER ::= 16 -- Max number of simultaneous application layer measurements
+maxNrofAppLayerMeas-1-r17 INTEGER ::= 15 -- Max number of simultaneous application layer measurements minus 1
+maxNrofAvailabilityCombinationsPerSet-r16 INTEGER ::= 512 -- Max number of AvailabilityCombinationId used in the DCI format 2_5
+maxNrofAvailabilityCombinationsPerSet-1-r16 INTEGER ::= 511 -- Max number of AvailabilityCombinationId used in the DCI format 2_5 minus 1
+maxNrofIABResourceConfig-r17 INTEGER ::= 65536 -- Max number of IAB-ResourceConfigID used in MAC CE
+maxNrofIABResourceConfig-1-r17 INTEGER ::= 65535 -- Max number of IAB-ResourceConfigID used in MAC CE minus 1
+maxNrofSCellActRS-r17 INTEGER ::= 255 -- Max number of RS configurations per SCell for SCell activation
+maxNrofSCells INTEGER ::= 31 -- Max number of secondary serving cells per cell group
+maxNrofCellMeas INTEGER ::= 32 -- Maximum number of entries in each of the cell lists in a measurement object
+maxNrofCRS-IM-InterfCell-r17 INTEGER ::= 8 -- Maximum number of LTE interference cells for CRS-IM per UE
+maxNrofRelayMeas-r17 INTEGER ::= 32 -- Maximum number of L2 U2N Relay UEs to measure for each measurement object
+ -- on sidelink frequency
+maxNrofCG-SL-r16 INTEGER ::= 8 -- Max number of sidelink configured grant
+maxNrofCG-SL-1-r16 INTEGER ::= 7 -- Max number of sidelink configured grant minus 1
+maxSL-GC-BC-DRX-QoS-r17 INTEGER ::= 16 -- Max number of sidelink DRX configurations for NR
+ -- sidelink groupcast/broadcast communication
+maxNrofSL-RxInfoSet-r17 INTEGER ::= 4 -- Max number of sidelink DRX configuration sets in sidelink DRX assistant
+ -- information
+maxNrofSS-BlocksToAverage INTEGER ::= 16 -- Max number for the (max) number of SS blocks to average to determine cell measurement
+maxNrofCondCells-r16 INTEGER ::= 8 -- Max number of conditional candidate SpCells
+maxNrofCondCells-1-r17 INTEGER ::= 7 -- Max number of conditional candidate SpCells minus 1
+maxNrofCSI-RS-ResourcesToAverage INTEGER ::= 16 -- Max number for the (max) number of CSI-RS to average to determine cell measurement
+maxNrofDL-Allocations INTEGER ::= 16 -- Maximum number of PDSCH time domain resource allocations
+maxNrofDL-AllocationsExt-r17 INTEGER ::= 64 -- Maximum number of PDSCH time domain resource allocations for multi-PDSCH
+ -- scheduling
+maxNrofPDU-Sessions-r17 INTEGER ::= 256 -- Maximum number of PDU Sessions
+maxNrofSR-ConfigPerCellGroup INTEGER ::= 8 -- Maximum number of SR configurations per cell group
+maxLCG-ID INTEGER ::= 7 -- Maximum value of LCG ID
+maxLCG-ID-IAB-r17 INTEGER ::= 255 -- Maximum value of LCG ID for IAB-MT
+maxLC-ID INTEGER ::= 32 -- Maximum value of Logical Channel ID
+maxLC-ID-Iab-r16 INTEGER ::= 65855 -- Maximum value of BH Logical Channel ID extension
+maxLTE-CRS-Patterns-r16 INTEGER ::= 3 -- Maximum number of additional LTE CRS rate matching patterns
+maxNrofTAGs INTEGER ::= 4 -- Maximum number of Timing Advance Groups
+maxNrofTAGs-1 INTEGER ::= 3 -- Maximum number of Timing Advance Groups minus 1
+maxNrofBWPs INTEGER ::= 4 -- Maximum number of BWPs per serving cell
+maxNrofCombIDC INTEGER ::= 128 -- Maximum number of reported MR-DC combinations for IDC
+maxNrofSymbols-1 INTEGER ::= 13 -- Maximum index identifying a symbol within a slot (14 symbols, indexed from 0..13)
+maxNrofSlots INTEGER ::= 320 -- Maximum number of slots in a 10 ms period
+maxNrofSlots-1 INTEGER ::= 319 -- Maximum number of slots in a 10 ms period minus 1
+maxNrofPhysicalResourceBlocks INTEGER ::= 275 -- Maximum number of PRBs
+maxNrofPhysicalResourceBlocks-1 INTEGER ::= 274 -- Maximum number of PRBs minus 1
+maxNrofPhysicalResourceBlocksPlus1 INTEGER ::= 276 -- Maximum number of PRBs plus 1
+maxNrofControlResourceSets INTEGER ::= 12 -- Max number of CoReSets configurable on a serving cell
+maxNrofControlResourceSets-1 INTEGER ::= 11 -- Max number of CoReSets configurable on a serving cell minus 1
+maxNrofControlResourceSets-1-r16 INTEGER ::= 15 -- Max number of CoReSets configurable on a serving cell extended in minus 1
+maxNrofCoresetPools-r16 INTEGER ::= 2 -- Maximum number of CORESET pools
+maxCoReSetDuration INTEGER ::= 3 -- Max number of OFDM symbols in a control resource set
+maxNrofSearchSpaces-1 INTEGER ::= 39 -- Max number of Search Spaces minus 1
+maxNrofSearchSpacesLinks-1-r17 INTEGER ::= 39 -- Max number of Search Space links minus 1
+maxNrofBFDResourcePerSet-r17 INTEGER ::= 64 -- Max number of reference signal in one BFD set
+maxSFI-DCI-PayloadSize INTEGER ::= 128 -- Max number payload of a DCI scrambled with SFI-RNTI
+maxSFI-DCI-PayloadSize-1 INTEGER ::= 127 -- Max number payload of a DCI scrambled with SFI-RNTI minus 1
+maxIAB-IP-Address-r16 INTEGER ::= 32 -- Max number of assigned IP addresses
+maxINT-DCI-PayloadSize INTEGER ::= 126 -- Max number payload of a DCI scrambled with INT-RNTI
+maxINT-DCI-PayloadSize-1 INTEGER ::= 125 -- Max number payload of a DCI scrambled with INT-RNTI minus 1
+maxNrofRateMatchPatterns INTEGER ::= 4 -- Max number of rate matching patterns that may be configured
+maxNrofRateMatchPatterns-1 INTEGER ::= 3 -- Max number of rate matching patterns that may be configured minus 1
+maxNrofRateMatchPatternsPerGroup INTEGER ::= 8 -- Max number of rate matching patterns that may be configured in one group
+maxNrofCSI-ReportConfigurations INTEGER ::= 48 -- Maximum number of report configurations
+maxNrofCSI-ReportConfigurations-1 INTEGER ::= 47 -- Maximum number of report configurations minus 1
+maxNrofCSI-ResourceConfigurations INTEGER ::= 112 -- Maximum number of resource configurations
+maxNrofCSI-ResourceConfigurations-1 INTEGER ::= 111 -- Maximum number of resource configurations minus 1
+maxNrofAP-CSI-RS-ResourcesPerSet INTEGER ::= 16
+maxNrOfCSI-AperiodicTriggers INTEGER ::= 128 -- Maximum number of triggers for aperiodic CSI reporting
+maxNrofReportConfigPerAperiodicTrigger INTEGER ::= 16 -- Maximum number of report configurations per trigger state for aperiodic reporting
+maxNrofNZP-CSI-RS-Resources INTEGER ::= 192 -- Maximum number of Non-Zero-Power (NZP) CSI-RS resources
+maxNrofNZP-CSI-RS-Resources-1 INTEGER ::= 191 -- Maximum number of Non-Zero-Power (NZP) CSI-RS resources minus 1
+maxNrofNZP-CSI-RS-ResourcesPerSet INTEGER ::= 64 -- Maximum number of NZP CSI-RS resources per resource set
+maxNrofNZP-CSI-RS-ResourceSets INTEGER ::= 64 -- Maximum number of NZP CSI-RS resource sets per cell
+maxNrofNZP-CSI-RS-ResourceSets-1 INTEGER ::= 63 -- Maximum number of NZP CSI-RS resource sets per cell minus 1
+maxNrofNZP-CSI-RS-ResourceSetsPerConfig INTEGER ::= 16 -- Maximum number of resource sets per resource configuration
+maxNrofNZP-CSI-RS-ResourcesPerConfig INTEGER ::= 128 -- Maximum number of resources per resource configuration
+maxNrofZP-CSI-RS-Resources INTEGER ::= 32 -- Maximum number of Zero-Power (ZP) CSI-RS resources
+maxNrofZP-CSI-RS-Resources-1 INTEGER ::= 31 -- Maximum number of Zero-Power (ZP) CSI-RS resources minus 1
+maxNrofZP-CSI-RS-ResourceSets-1 INTEGER ::= 15
+maxNrofZP-CSI-RS-ResourcesPerSet INTEGER ::= 16
+maxNrofZP-CSI-RS-ResourceSets INTEGER ::= 16
+maxNrofCSI-IM-Resources INTEGER ::= 32 -- Maximum number of CSI-IM resources
+maxNrofCSI-IM-Resources-1 INTEGER ::= 31 -- Maximum number of CSI-IM resources minus 1
+maxNrofCSI-IM-ResourcesPerSet INTEGER ::= 8 -- Maximum number of CSI-IM resources per set
+maxNrofCSI-IM-ResourceSets INTEGER ::= 64 -- Maximum number of NZP CSI-IM resource sets per cell
+maxNrofCSI-IM-ResourceSets-1 INTEGER ::= 63 -- Maximum number of NZP CSI-IM resource sets per cell minus 1
+maxNrofCSI-IM-ResourceSetsPerConfig INTEGER ::= 16 -- Maximum number of CSI IM resource sets per resource configuration
+maxNrofCSI-SSB-ResourcePerSet INTEGER ::= 64 -- Maximum number of SSB resources in a resource set
+maxNrofCSI-SSB-ResourceSets INTEGER ::= 64 -- Maximum number of CSI SSB resource sets per cell
+maxNrofCSI-SSB-ResourceSets-1 INTEGER ::= 63 -- Maximum number of CSI SSB resource sets per cell minus 1
+maxNrofCSI-SSB-ResourceSetsPerConfig INTEGER ::= 1 -- Maximum number of CSI SSB resource sets per resource configuration
+maxNrofCSI-SSB-ResourceSetsPerConfigExt INTEGER ::= 2 -- Maximum number of CSI SSB resource sets per resource configuration
+ -- extended
+maxNrofFailureDetectionResources INTEGER ::= 10 -- Maximum number of failure detection resources
+maxNrofFailureDetectionResources-1 INTEGER ::= 9 -- Maximum number of failure detection resources minus 1
+maxNrofFailureDetectionResources-1-r17 INTEGER ::= 63 -- Maximum number of the enhanced failure detection resources minus 1
+maxNrofFreqSL-r16 INTEGER ::= 8 -- Maximum number of carrier frequency for NR sidelink communication
+maxNrofSL-BWPs-r16 INTEGER ::= 4 -- Maximum number of BWP for NR sidelink communication
+maxFreqSL-EUTRA-r16 INTEGER ::= 8 -- Maximum number of EUTRA anchor carrier frequency for NR sidelink communication
+maxNrofSL-MeasId-r16 INTEGER ::= 64 -- Maximum number of sidelink measurement identity (RSRP) per destination
+maxNrofSL-ObjectId-r16 INTEGER ::= 64 -- Maximum number of sidelink measurement objects (RSRP) per destination
+maxNrofSL-ReportConfigId-r16 INTEGER ::= 64 -- Maximum number of sidelink measurement reporting configuration(RSRP) per destination
+maxNrofSL-PoolToMeasureNR-r16 INTEGER ::= 8 -- Maximum number of resource pool for NR sidelink measurement to measure for
+ -- each measurement object (for CBR)
+maxFreqSL-NR-r16 INTEGER ::= 8 -- Maximum number of NR anchor carrier frequency for NR sidelink communication
+maxNrofSL-QFIs-r16 INTEGER ::= 2048 -- Maximum number of QoS flow for NR sidelink communication per UE
+maxNrofSL-QFIsPerDest-r16 INTEGER ::= 64 -- Maximum number of QoS flow per destination for NR sidelink communication
+maxNrofObjectId INTEGER ::= 64 -- Maximum number of measurement objects
+maxNrofPageRec INTEGER ::= 32 -- Maximum number of page records
+maxNrofPCI-Ranges INTEGER ::= 8 -- Maximum number of PCI ranges
+maxPLMN INTEGER ::= 12 -- Maximum number of PLMNs broadcast and reported by UE at establishment
+maxTAC-r17 INTEGER ::= 12 -- Maximum number of Tracking Area Codes to which a cell belongs to
+maxNrofCSI-RS-ResourcesRRM INTEGER ::= 96 -- Maximum number of CSI-RS resources per cell for an RRM measurement object
+maxNrofCSI-RS-ResourcesRRM-1 INTEGER ::= 95 -- Maximum number of CSI-RS resources per cell for an RRM measurement object
+ -- minus 1.
+maxNrofMeasId INTEGER ::= 64 -- Maximum number of configured measurements
+maxNrofQuantityConfig INTEGER ::= 2 -- Maximum number of quantity configurations
+maxNrofCSI-RS-CellsRRM INTEGER ::= 96 -- Maximum number of cells with CSI-RS resources for an RRM measurement object
+maxNrofSL-Dest-r16 INTEGER ::= 32 -- Maximum number of destination for NR sidelink communication and discovery
+maxNrofSL-Dest-1-r16 INTEGER ::= 31 -- Highest index of destination for NR sidelink communication and discovery
+maxNrofSLRB-r16 INTEGER ::= 512 -- Maximum number of radio bearer for NR sidelink communication per UE
+maxSL-LCID-r16 INTEGER ::= 512 -- Maximum number of RLC bearer for NR sidelink communication per UE
+maxSL-SyncConfig-r16 INTEGER ::= 16 -- Maximum number of sidelink Sync configurations
+maxNrofRXPool-r16 INTEGER ::= 16 -- Maximum number of Rx resource pool for NR sidelink communication and
+ -- discovery
+maxNrofTXPool-r16 INTEGER ::= 8 -- Maximum number of Tx resource pool for NR sidelink communication and
+ -- discovery
+maxNrofPoolID-r16 INTEGER ::= 16 -- Maximum index of resource pool for NR sidelink communication and
+ -- discovery
+maxNrofSRS-PathlossReferenceRS-r16 INTEGER ::= 64 -- Maximum number of RSs used as pathloss reference for SRS power control.
+maxNrofSRS-PathlossReferenceRS-1-r16 INTEGER ::= 63 -- Maximum number of RSs used as pathloss reference for SRS power control
+ -- minus 1.
+maxNrofSRS-ResourceSets INTEGER ::= 16 -- Maximum number of SRS resource sets in a BWP.
+maxNrofSRS-ResourceSets-1 INTEGER ::= 15 -- Maximum number of SRS resource sets in a BWP minus 1.
+maxNrofSRS-PosResourceSets-r16 INTEGER ::= 16 -- Maximum number of SRS Positioning resource sets in a BWP.
+maxNrofSRS-PosResourceSets-1-r16 INTEGER ::= 15 -- Maximum number of SRS Positioning resource sets in a BWP minus 1.
+maxNrofSRS-Resources INTEGER ::= 64 -- Maximum number of SRS resources.
+maxNrofSRS-Resources-1 INTEGER ::= 63 -- Maximum number of SRS resources minus 1.
+maxNrofSRS-PosResources-r16 INTEGER ::= 64 -- Maximum number of SRS Positioning resources.
+maxNrofSRS-PosResources-1-r16 INTEGER ::= 63 -- Maximum number of SRS Positioning resources minus 1.
+maxNrofSRS-ResourcesPerSet INTEGER ::= 16 -- Maximum number of SRS resources in an SRS resource set
+maxNrofSRS-TriggerStates-1 INTEGER ::= 3 -- Maximum number of SRS trigger states minus 1, i.e., the largest code point.
+maxNrofSRS-TriggerStates-2 INTEGER ::= 2 -- Maximum number of SRS trigger states minus 2.
+maxRAT-CapabilityContainers INTEGER ::= 8 -- Maximum number of interworking RAT containers (incl NR and MRDC)
+maxSimultaneousBands INTEGER ::= 32 -- Maximum number of simultaneously aggregated bands
+maxULTxSwitchingBandPairs INTEGER ::= 32 -- Maximum number of band pairs supporting dynamic UL Tx switching in a band
+ -- combination.
+maxNrofSlotFormatCombinationsPerSet INTEGER ::= 512 -- Maximum number of Slot Format Combinations in a SF-Set.
+maxNrofSlotFormatCombinationsPerSet-1 INTEGER ::= 511 -- Maximum number of Slot Format Combinations in a SF-Set minus 1.
+maxNrofTrafficPattern-r16 INTEGER ::= 8 -- Maximum number of Traffic Pattern for NR sidelink communication.
+maxNrofPUCCH-Resources INTEGER ::= 128
+maxNrofPUCCH-Resources-1 INTEGER ::= 127
+maxNrofPUCCH-ResourceSets INTEGER ::= 4 -- Maximum number of PUCCH Resource Sets
+maxNrofPUCCH-ResourceSets-1 INTEGER ::= 3 -- Maximum number of PUCCH Resource Sets minus 1.
+maxNrofPUCCH-ResourcesPerSet INTEGER ::= 32 -- Maximum number of PUCCH Resources per PUCCH-ResourceSet
+maxNrofPUCCH-P0-PerSet INTEGER ::= 8 -- Maximum number of P0-pucch present in a p0-pucch set
+maxNrofPUCCH-PathlossReferenceRSs INTEGER ::= 4 -- Maximum number of RSs used as pathloss reference for PUCCH power control.
+maxNrofPUCCH-PathlossReferenceRSs-1 INTEGER ::= 3 -- Maximum number of RSs used as pathloss reference for PUCCH power control
+ -- minus 1.
+maxNrofPUCCH-PathlossReferenceRSs-r16 INTEGER ::= 64 -- Maximum number of RSs used as pathloss reference for PUCCH power control
+ -- extended.
+maxNrofPUCCH-PathlossReferenceRSs-1-r16 INTEGER ::= 63 -- Maximum number of RSs used as pathloss reference for PUCCH power control
+ -- minus 1 extended.
+maxNrofPUCCH-PathlossReferenceRSs-1-r17 INTEGER ::= 7 -- Maximum number of RSs used as pathloss reference for PUCCH power control
+ -- minus 1.
+maxNrofPUCCH-PathlossReferenceRSsDiff-r16 INTEGER ::= 60 -- Difference between the extended maximum and the non-extended maximum
+maxNrofPUCCH-ResourceGroups-r16 INTEGER ::= 4 -- Maximum number of PUCCH resources groups.
+maxNrofPUCCH-ResourcesPerGroup-r16 INTEGER ::= 128 -- Maximum number of PUCCH resources in a PUCCH group.
+maxNrofPowerControlSetInfos-r17 INTEGER ::= 8 -- Maximum number of PUCCH power control set infos
+maxNrofMultiplePUSCHs-r16 INTEGER ::= 8 -- Maximum number of multiple PUSCHs in PUSCH TDRA list
+maxNrofP0-PUSCH-AlphaSets INTEGER ::= 30 -- Maximum number of P0-pusch-alpha-sets (see TS 38.213 [13], clause 7.1)
+maxNrofP0-PUSCH-AlphaSets-1 INTEGER ::= 29 -- Maximum number of P0-pusch-alpha-sets minus 1 (see TS 38.213 [13], clause 7.1)
+maxNrofPUSCH-PathlossReferenceRSs INTEGER ::= 4 -- Maximum number of RSs used as pathloss reference for PUSCH power control.
+maxNrofPUSCH-PathlossReferenceRSs-1 INTEGER ::= 3 -- Maximum number of RSs used as pathloss reference for PUSCH power control
+ -- minus 1.
+maxNrofPUSCH-PathlossReferenceRSs-r16 INTEGER ::= 64 -- Maximum number of RSs used as pathloss reference for PUSCH power control
+ -- extended
+maxNrofPUSCH-PathlossReferenceRSs-1-r16 INTEGER ::= 63 -- Maximum number of RSs used as pathloss reference for PUSCH power control
+ -- extended minus 1
+maxNrofPUSCH-PathlossReferenceRSsDiff-r16 INTEGER ::= 60 -- Difference between maxNrofPUSCH-PathlossReferenceRSs-r16 and
+ -- maxNrofPUSCH-PathlossReferenceRSs
+maxNrofPathlossReferenceRSs-r17 INTEGER ::= 64 -- Maximum number of RSs used as pathloss reference for PUSCH, PUCCH, SRS
+ -- power control for unified TCI state operation
+maxNrofPathlossReferenceRSs-1-r17 INTEGER ::= 63 -- Maximum number of RSs used as pathloss reference for PUSCH, PUCCH, SRS
+ -- power control for unified TCI state operation minus 1
+maxNrofNAICS-Entries INTEGER ::= 8 -- Maximum number of supported NAICS capability set
+maxBands INTEGER ::= 1024 -- Maximum number of supported bands in UE capability.
+maxBandsMRDC INTEGER ::= 1280
+maxBandsEUTRA INTEGER ::= 256
+maxCellReport INTEGER ::= 8
+maxDRB INTEGER ::= 29 -- Maximum number of DRBs (that can be added in DRB-ToAddModList).
+maxFreq INTEGER ::= 8 -- Max number of frequencies.
+maxFreqLayers INTEGER ::= 4 -- Max number of frequency layers.
+maxFreqPlus1 INTEGER ::= 9 -- Max number of frequencies for Slicing.
+maxFreqIDC-r16 INTEGER ::= 128 -- Max number of frequencies for IDC indication.
+maxCombIDC-r16 INTEGER ::= 128 -- Max number of reported UL CA for IDC indication.
+maxFreqIDC-MRDC INTEGER ::= 32 -- Maximum number of candidate NR frequencies for MR-DC IDC indication
+maxNrofCandidateBeams INTEGER ::= 16 -- Max number of PRACH-ResourceDedicatedBFR in BFR config.
+maxNrofCandidateBeams-r16 INTEGER ::= 64 -- Max number of candidate beam resources in BFR config.
+maxNrofCandidateBeamsExt-r16 INTEGER ::= 48 -- Max number of PRACH-ResourceDedicatedBFR in the CandidateBeamRSListExt
+maxNrofPCIsPerSMTC INTEGER ::= 64 -- Maximum number of PCIs per SMTC.
+maxNrofQFIs INTEGER ::= 64
+maxNrofResourceAvailabilityPerCombination-r16 INTEGER ::= 256
+maxNrOfSemiPersistentPUSCH-Triggers INTEGER ::= 64 -- Maximum number of triggers for semi persistent reporting on PUSCH
+maxNrofSR-Resources INTEGER ::= 8 -- Maximum number of SR resources per BWP in a cell.
+maxNrofSlotFormatsPerCombination INTEGER ::= 256
+maxNrofSpatialRelationInfos INTEGER ::= 8
+maxNrofSpatialRelationInfos-plus-1 INTEGER ::= 9
+maxNrofSpatialRelationInfos-r16 INTEGER ::= 64
+maxNrofSpatialRelationInfosDiff-r16 INTEGER ::= 56 -- Difference between maxNrofSpatialRelationInfos-r16 and maxNrofSpatialRelationInfos
+maxNrofIndexesToReport INTEGER ::= 32
+maxNrofIndexesToReport2 INTEGER ::= 64
+maxNrofSSBs-r16 INTEGER ::= 64 -- Maximum number of SSB resources in a resource set.
+maxNrofSSBs-1 INTEGER ::= 63 -- Maximum number of SSB resources in a resource set minus 1.
+maxNrofS-NSSAI INTEGER ::= 8 -- Maximum number of S-NSSAI.
+maxNrofTCI-StatesPDCCH INTEGER ::= 64
+maxNrofTCI-States INTEGER ::= 128 -- Maximum number of TCI states.
+maxNrofTCI-States-1 INTEGER ::= 127 -- Maximum number of TCI states minus 1.
+maxUL-TCI-r17 INTEGER ::= 64 -- Maximum number of TCI states.
+maxUL-TCI-1-r17 INTEGER ::= 63 -- Maximum number of TCI states minus 1.
+maxNrofAdditionalPCI-r17 INTEGER ::= 7 -- Maximum number of additional PCI
+maxMPE-Resources-r17 INTEGER ::= 64 -- Maximum number of pooled MPE resources
+maxNrofUL-Allocations INTEGER ::= 16 -- Maximum number of PUSCH time domain resource allocations.
+maxQFI INTEGER ::= 63
+maxRA-CSIRS-Resources INTEGER ::= 96
+maxRA-OccasionsPerCSIRS INTEGER ::= 64 -- Maximum number of RA occasions for one CSI-RS
+maxRA-Occasions-1 INTEGER ::= 511 -- Maximum number of RA occasions in the system
+maxRA-SSB-Resources INTEGER ::= 64
+maxSCSs INTEGER ::= 5
+maxSecondaryCellGroups INTEGER ::= 3
+maxNrofServingCellsEUTRA INTEGER ::= 32
+maxMBSFN-Allocations INTEGER ::= 8
+maxNrofMultiBands INTEGER ::= 8
+maxCellSFTD INTEGER ::= 3 -- Maximum number of cells for SFTD reporting
+maxReportConfigId INTEGER ::= 64
+maxNrofCodebooks INTEGER ::= 16 -- Maximum number of codebooks supported by the UE
+maxNrofCSI-RS-ResourcesExt-r16 INTEGER ::= 16 -- Maximum number of codebook resources supported by the UE for eType2/Codebook combo
+maxNrofCSI-RS-ResourcesExt-r17 INTEGER ::= 8 -- Maximum number of codebook resources for fetype2R1 and fetype2R2
+maxNrofCSI-RS-Resources INTEGER ::= 7 -- Maximum number of codebook resources supported by the UE
+maxNrofCSI-RS-ResourcesAlt-r16 INTEGER ::= 512 -- Maximum number of alternative codebook resources supported by the UE
+maxNrofCSI-RS-ResourcesAlt-1-r16 INTEGER ::= 511 -- Maximum number of alternative codebook resources supported by the UE minus 1
+maxNrofSRI-PUSCH-Mappings INTEGER ::= 16
+maxNrofSRI-PUSCH-Mappings-1 INTEGER ::= 15
+maxSIB INTEGER::= 32 -- Maximum number of SIBs
+maxSI-Message INTEGER::= 32 -- Maximum number of SI messages
+maxSIB-MessagePlus1-r17 INTEGER::= 33 -- Maximum number of SIB messages plus 1
+maxPO-perPF INTEGER ::= 4 -- Maximum number of paging occasion per paging frame
+maxPEI-perPF-r17 INTEGER ::= 4 -- Maximum number of PEI occasion per paging frame
+maxAccessCat-1 INTEGER ::= 63 -- Maximum number of Access Categories minus 1
+maxBarringInfoSet INTEGER ::= 8 -- Maximum number of access control parameter sets
+maxCellEUTRA INTEGER ::= 8 -- Maximum number of E-UTRA cells in SIB list
+maxEUTRA-Carrier INTEGER ::= 8 -- Maximum number of E-UTRA carriers in SIB list
+maxPLMNIdentities INTEGER ::= 8 -- Maximum number of PLMN identities in RAN area configurations
+maxDownlinkFeatureSets INTEGER ::= 1024 -- (for NR DL) Total number of FeatureSets (size of the pool)
+maxUplinkFeatureSets INTEGER ::= 1024 -- (for NR UL) Total number of FeatureSets (size of the pool)
+maxEUTRA-DL-FeatureSets INTEGER ::= 256 -- (for E-UTRA) Total number of FeatureSets (size of the pool)
+maxEUTRA-UL-FeatureSets INTEGER ::= 256 -- (for E-UTRA) Total number of FeatureSets (size of the pool)
+maxFeatureSetsPerBand INTEGER ::= 128 -- (for NR) The number of feature sets associated with one band.
+maxPerCC-FeatureSets INTEGER ::= 1024 -- (for NR) Total number of CC-specific FeatureSets (size of the pool)
+maxFeatureSetCombinations INTEGER ::= 1024 -- (for MR-DC/NR)Total number of Feature set combinations (size of the pool)
+maxInterRAT-RSTD-Freq INTEGER ::= 3
+maxGIN-r17 INTEGER ::= 24 -- Maximum number of broadcast GINs
+maxHRNN-Len-r16 INTEGER ::= 48 -- Maximum length of HRNNs
+maxNPN-r16 INTEGER ::= 12 -- Maximum number of NPNs broadcast and reported by UE at establishment
+maxNrOfMinSchedulingOffsetValues-r16 INTEGER ::= 2 -- Maximum number of min. scheduling offset (K0/K2) configurations
+maxK0-SchedulingOffset-r16 INTEGER ::= 16 -- Maximum number of slots configured as min. scheduling offset (K0)
+maxK2-SchedulingOffset-r16 INTEGER ::= 16 -- Maximum number of slots configured as min. scheduling offset (K2)
+maxK0-SchedulingOffset-r17 INTEGER ::= 64 -- Maximum number of slots configured as min. scheduling offset (K0)
+maxK2-SchedulingOffset-r17 INTEGER ::= 64 -- Maximum number of slots configured as min. scheduling offset (K2)
+maxDCI-2-6-Size-r16 INTEGER ::= 140 -- Maximum size of DCI format 2-6
+maxDCI-2-7-Size-r17 INTEGER ::= 43 -- Maximum size of DCI format 2-7
+maxDCI-2-6-Size-1-r16 INTEGER ::= 139 -- Maximum DCI format 2-6 size minus 1
+maxNrofUL-Allocations-r16 INTEGER ::= 64 -- Maximum number of PUSCH time domain resource allocations
+maxNrofP0-PUSCH-Set-r16 INTEGER ::= 2 -- Maximum number of P0 PUSCH set(s)
+maxOnDemandSIB-r16 INTEGER ::= 8 -- Maximum number of SIB(s) that can be requested on-demand
+maxOnDemandPosSIB-r16 INTEGER ::= 32 -- Maximum number of posSIB(s) that can be requested on-demand
+maxCI-DCI-PayloadSize-r16 INTEGER ::= 126 -- Maximum number of the DCI size for CI
+maxCI-DCI-PayloadSize-1-r16 INTEGER ::= 125 -- Maximum number of the DCI size for CI minus 1
+maxUu-RelayRLC-ChannelID-r17 INTEGER ::= 32 -- Maximum value of Uu Relay RLC channel ID
+maxWLAN-Id-Report-r16 INTEGER ::= 32 -- Maximum number of WLAN IDs to report
+maxWLAN-Name-r16 INTEGER ::= 4 -- Maximum number of WLAN name
+maxRAReport-r16 INTEGER ::= 8 -- Maximum number of RA procedures information to be included in the RA report
+maxTxConfig-r16 INTEGER ::= 64 -- Maximum number of sidelink transmission parameters configurations
+maxTxConfig-1-r16 INTEGER ::= 63 -- Maximum number of sidelink transmission parameters configurations minus 1
+maxPSSCH-TxConfig-r16 INTEGER ::= 16 -- Maximum number of PSSCH TX configurations
+maxNrofCLI-RSSI-Resources-r16 INTEGER ::= 64 -- Maximum number of CLI-RSSI resources for UE
+maxNrofCLI-RSSI-Resources-1-r16 INTEGER ::= 63 -- Maximum number of CLI-RSSI resources for UE minus 1
+maxNrofCLI-SRS-Resources-r16 INTEGER ::= 32 -- Maximum number of SRS resources for CLI measurement for UE
+maxCLI-Report-r16 INTEGER ::= 8
+maxNrofCC-Group-r17 INTEGER ::= 16 -- Maximum number of CC groups for DC location report
+maxNrofConfiguredGrantConfig-r16 INTEGER ::= 12 -- Maximum number of configured grant configurations per BWP
+maxNrofConfiguredGrantConfig-1-r16 INTEGER ::= 11 -- Maximum number of configured grant configurations per BWP minus 1
+maxNrofCG-Type2DeactivationState INTEGER ::= 16 -- Maximum number of deactivation state for type 2 configured grants per BWP
+maxNrofConfiguredGrantConfigMAC-1-r16 INTEGER ::= 31 -- Maximum number of configured grant configurations per MAC entity minus 1
+maxNrofSPS-Config-r16 INTEGER ::= 8 -- Maximum number of SPS configurations per BWP
+maxNrofSPS-Config-1-r16 INTEGER ::= 7 -- Maximum number of SPS configurations per BWP minus 1
+maxNrofSPS-DeactivationState INTEGER ::= 16 -- Maximum number of deactivation state for SPS per BWP
+maxNrofPPW-Config-r17 INTEGER ::= 4 -- Maximum number of Preconfigured PRS processing windows per DL BWP
+maxNrofPPW-ID-1-r17 INTEGER ::= 15 -- Maximum number of Preconfigured PRS processing windows minus 1
+maxNrOfTxTEGReport-r17 INTEGER ::= 256 -- Maximum number of UE Tx Timing Error Group Report
+maxNrOfTxTEG-ID-1-r17 INTEGER ::= 7 -- Maximum number of UE Tx Timing Error Group ID minus 1
+maxNrofDormancyGroups INTEGER ::= 5 --
+maxNrofPagingSubgroups-r17 INTEGER ::= 8 -- Maximum number of paging subgroups per paging occasion
+maxNrofPUCCH-ResourceGroups-1-r16 INTEGER ::= 3 --
+maxNrofReqComDC-Location-r17 INTEGER ::= 128 -- Maximum number of requested carriers/BWPs combinations for DC location
+ -- report
+maxNrofServingCellsTCI-r16 INTEGER ::= 32 -- Maximum number of serving cells in simultaneousTCI-UpdateList
+maxNrofTxDC-TwoCarrier-r16 INTEGER ::= 64 -- Maximum number of UL Tx DC locations reported by the UE for 2CC uplink CA
+maxNrofRB-SetGroups-r17 INTEGER ::= 8 -- Maximum number of RB set groups
+maxNrofRB-Sets-r17 INTEGER ::= 8 -- Maximum number of RB sets
+maxNrofEnhType3HARQ-ACK-r17 INTEGER ::= 8 -- Maximum number of enhanced type 3 HARQ-ACK codebook
+maxNrofEnhType3HARQ-ACK-1-r17 INTEGER ::= 7 -- Maximum number of enhanced type 3 HARQ-ACK codebook minus 1
+maxNrofPRS-ResourcesPerSet-r17 INTEGER ::= 64 -- Maximum number of PRS resources for one set
+maxNrofPRS-ResourcesPerSet-1-r17 INTEGER ::= 63 -- Maximum number of PRS resources for one set minus 1
+maxNrofPRS-ResourceOffsetValue-1-r17 INTEGER ::= 511
+maxNrofGapId-r17 INTEGER ::= 8 -- Maximum number of measurement gap ID is FFS
+maxNrofPreConfigPosGapId-r17 INTEGER ::= 16 -- Maximum number of preconfigured positioning measurement gap
+maxNrOfGapPri-r17 INTEGER ::= 16 -- Maximum number of gap priority level
+maxCEFReport-r17 INTEGER ::= 4 -- Maximum number of CEF reports by the UE
+maxNrofMultiplePDSCHs-r17 INTEGER ::= 8 -- Maximum number of PDSCHs in PDSCH TDRA list
+maxSliceInfo-r17 INTEGER ::= 8 -- Maximum number of NSAGs
+maxCellSlice-r17 INTEGER ::= 16 -- Maximum number of cells supporting the NSAG
+maxNrofTRS-ResourceSets-r17 INTEGER ::= 64 -- Maximum number of TRS resource sets
+maxNrofSearchSpaceGroups-1-r17 INTEGER ::= 2 -- Maximum number of search space groups minus 1
+maxNrofRemoteUE-r17 INTEGER ::= 32 -- Maximum number of connected L2 U2N Remote UEs
+maxDCI-4-2-Size-r17 INTEGER ::= 140 -- Maximum size of DCI format 4-2
+maxFreqMBS-r17 INTEGER ::= 16 -- Maximum number of MBS frequencies reported in MBSInterestIndication
+maxNrofDRX-ConfigPTM-r17 INTEGER ::= 64 -- Max number of DRX configuration for PTM provided in MBS broadcast in a
+ -- cell
+maxNrofDRX-ConfigPTM-1-r17 INTEGER ::= 63 -- Max number of DRX configuration for PTM provided in MBS broadcast in a
+ -- cell minus 1
+maxNrofMBS-ServiceListPerUE-r17 INTEGER ::= 16 -- Maximum number of services which the UE can include in the MBS interest
+ -- indication
+maxNrofMBS-Session-r17 INTEGER ::= 1024 -- Maximum number of MBS sessions provided in MBS broadcast in a cell
+maxNrofMTCH-SSB-MappingWindow-r17 INTEGER ::= 16 -- Maximum number of MTCH to SSB beam mapping pattern
+maxNrofMTCH-SSB-MappingWindow-1-r17 INTEGER ::= 15 -- Maximum number of MTCH to SSB beam mapping pattern minus 1
+maxNrofMRB-Broadcast-r17 INTEGER ::= 4 -- Maximum number of broadcast MRBs configured for one MBS broadcast service
+maxNrofPageGroup-r17 INTEGER ::= 32 -- Maximum number of paging groups in a paging message
+maxNrofPDSCH-ConfigPTM-r17 INTEGER ::= 16 -- Maximum number of PDSCH configuration groups for PTM
+maxNrofPDSCH-ConfigPTM-1-r17 INTEGER ::= 15 -- Maximum number of PDSCH configuration groups for PTM minus 1
+maxG-RNTI-r17 INTEGER ::= 16 -- Maximum number of G-RNTI that can be configured for a UE.
+maxG-RNTI-1-r17 INTEGER ::= 15 -- Maximum number of G-RNTI that can be configured for a UE minus 1.
+maxG-CS-RNTI-r17 INTEGER ::= 8 -- Maximum number of G-CS-RNTI that can be configured for a UE.
+maxG-CS-RNTI-1-r17 INTEGER ::= 7 -- Maximum number of G-CS-RNTI that can be configured for a UE minus 1.
+maxMRB-r17 INTEGER ::= 32 -- Maximum number of multicast MRBs (that can be added in MRB-ToAddModLIst)
+maxFSAI-MBS-r17 INTEGER ::= 64 -- Maximum number of MBS frequency selection area identities
+maxNeighCellMBS-r17 INTEGER ::= 8 -- Maximum number of MBS broadcast neighbour cells
+maxNrofPdcch-BlindDetectionMixed-1-r16 INTEGER ::= 7 -- Maximum number of combinations of mixed Rel-16 and Rel-15 PDCCH
+ -- monitoring capabilities minus 1
+maxNrofPdcch-BlindDetection-r17 INTEGER ::= 16 -- Maximum number of combinations of PDCCH blind detection monitoring
+ -- capabilities
+
+-- TAG-MULTIPLICITY-AND-TYPE-CONSTRAINT-DEFINITIONS-STOP
+
+END
+
+-- TAG-PC5-RRC-DEFINITIONS-START
+
+PC5-RRC-Definitions DEFINITIONS AUTOMATIC TAGS ::=
+
+BEGIN
+
+IMPORTS
+ CellAccessRelatedInfo,
+ SetupRelease,
+ RRC-TransactionIdentifier,
+ SN-FieldLengthAM,
+ SN-FieldLengthUM,
+ LogicalChannelIdentity,
+ maxNrofSLRB-r16,
+ maxNrofSL-RxInfoSet-r17,
+ maxNrofSL-QFIs-r16,
+ maxNrofSL-QFIsPerDest-r16,
+ PagingCycle,
+ PagingRecord,
+ RSRP-Range,
+ SL-MeasConfig-r16,
+ SL-MeasId-r16,
+ FreqBandList,
+ FreqBandIndicatorNR,
+ maxNrofRelayMeas-r17,
+ maxSimultaneousBands,
+ maxBandComb,
+ maxBands,
+ maxSIB-MessagePlus1-r17,
+ maxSL-LCID-r16,
+ BandParametersSidelink-r16,
+ RLC-ParametersSidelink-r16,
+ SIB1,
+ SL-DRX-ConfigUC-r17,
+ SL-DRX-ConfigUC-SemiStatic-r17,
+ SL-PagingIdentityRemoteUE-r17,
+ SL-RLC-ChannelID-r17,
+ SL-SourceIdentity-r17,
+ SystemInformation
+FROM NR-RRC-Definitions;
+
+-- TAG-PC5-RRC-DEFINITIONS-STOP
+-- TAG-SBCCH-SL-BCH-MESSAGE-START
+
+SBCCH-SL-BCH-Message ::= SEQUENCE {
+ message SBCCH-SL-BCH-MessageType
+}
+
+SBCCH-SL-BCH-MessageType::= CHOICE {
+ c1 CHOICE {
+ masterInformationBlockSidelink MasterInformationBlockSidelink,
+ spare1 NULL
+ },
+ messageClassExtension SEQUENCE {}
+}
+
+-- TAG-SBCCH-SL-BCH-MESSAGE-STOP
+-- TAG-SCCH-MESSAGE-START
+
+SCCH-Message ::= SEQUENCE {
+ message SCCH-MessageType
+}
+
+SCCH-MessageType ::= CHOICE {
+ c1 CHOICE {
+ measurementReportSidelink MeasurementReportSidelink,
+ rrcReconfigurationSidelink RRCReconfigurationSidelink,
+ rrcReconfigurationCompleteSidelink RRCReconfigurationCompleteSidelink,
+ rrcReconfigurationFailureSidelink RRCReconfigurationFailureSidelink,
+ ueCapabilityEnquirySidelink UECapabilityEnquirySidelink,
+ ueCapabilityInformationSidelink UECapabilityInformationSidelink,
+ uuMessageTransferSidelink-r17 UuMessageTransferSidelink-r17,
+ remoteUEInformationSidelink-r17 RemoteUEInformationSidelink-r17
+ },
+ messageClassExtension CHOICE {
+ c2 CHOICE {
+ notificationMessageSidelink-r17 NotificationMessageSidelink-r17,
+ ueAssistanceInformationSidelink-r17 UEAssistanceInformationSidelink-r17,
+ spare6 NULL, spare5 NULL, spare4 NULL, spare3 NULL, spare2 NULL, spare1 NULL
+ },
+ messageClassExtensionFuture-r17 SEQUENCE {}
+ }
+}
+
+-- TAG-SCCH-MESSAGE-STOP
+-- TAG-MASTERINFORMATIONBLOCKSIDELINK-START
+
+MasterInformationBlockSidelink ::= SEQUENCE {
+ sl-TDD-Config-r16 BIT STRING (SIZE (12)),
+ inCoverage-r16 BOOLEAN,
+ directFrameNumber-r16 BIT STRING (SIZE (10)),
+ slotIndex-r16 BIT STRING (SIZE (7)),
+ reservedBits-r16 BIT STRING (SIZE (2))
+}
+
+-- TAG-MASTERINFORMATIONBLOCKSIDELINK-STOP
+-- TAG-MEASUREMENTREPORTSIDELINK-START
+
+MeasurementReportSidelink ::= SEQUENCE {
+ criticalExtensions CHOICE {
+ measurementReportSidelink-r16 MeasurementReportSidelink-r16-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+MeasurementReportSidelink-r16-IEs ::= SEQUENCE {
+ sl-measResults-r16 SL-MeasResults-r16,
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension SEQUENCE{} OPTIONAL
+}
+
+SL-MeasResults-r16 ::= SEQUENCE {
+ sl-MeasId-r16 SL-MeasId-r16,
+ sl-MeasResult-r16 SL-MeasResult-r16,
+ ...
+}
+
+SL-MeasResult-r16 ::= SEQUENCE {
+ sl-ResultDMRS-r16 SL-MeasQuantityResult-r16 OPTIONAL,
+ ...
+}
+
+SL-MeasQuantityResult-r16 ::= SEQUENCE {
+ sl-RSRP-r16 RSRP-Range OPTIONAL,
+ ...
+}
+
+SL-MeasResultListRelay-r17 ::= SEQUENCE (SIZE (1..maxNrofRelayMeas-r17)) OF SL-MeasResultRelay-r17
+
+SL-MeasResultRelay-r17 ::= SEQUENCE {
+ cellIdentity-r17 CellAccessRelatedInfo,
+ sl-RelayUE-Identity-r17 SL-SourceIdentity-r17,
+ sl-MeasResult-r17 SL-MeasResult-r16,
+ ...
+}
+
+-- TAG-MEASUREMENTREPORTSIDELINK-STOP
+-- TAG-NOTIFICATIONMESSAGESIDELINK-START
+
+NotificationMessageSidelink-r17 ::= SEQUENCE {
+ criticalExtensions CHOICE {
+ notificationMessageSidelink-r17 NotificationMessageSidelink-r17-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+NotificationMessageSidelink-r17-IEs ::= SEQUENCE {
+ indicationType-r17 ENUMERATED {
+ relayUE-Uu-RLF, relayUE-HO, relayUE-CellReselection,
+ relayUE-Uu-RRC-Failure
+ } OPTIONAL, -- Need N
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+-- TAG-NOTIFICATIONMESSAGESIDELINK -STOP
+-- TAG-REMOTEUEINFORMATIONSIDELINK-START
+
+RemoteUEInformationSidelink-r17 ::= SEQUENCE {
+ criticalExtensions CHOICE {
+ remoteUEInformationSidelink-r17 RemoteUEInformationSidelink-r17-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+RemoteUEInformationSidelink-r17-IEs ::= SEQUENCE {
+ sl-RequestedSIB-List-r17 SetupRelease { SL-RequestedSIB-List-r17} OPTIONAL, -- Need M
+ sl-PagingInfo-RemoteUE-r17 SetupRelease { SL-PagingInfo-RemoteUE-r17} OPTIONAL, -- Need M
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+SL-RequestedSIB-List-r17 ::= SEQUENCE (SIZE (maxSIB-MessagePlus1-r17)) OF SL-SIB-ReqInfo-r17
+
+SL-PagingInfo-RemoteUE-r17 ::= SEQUENCE {
+ sl-PagingIdentityRemoteUE-r17 SL-PagingIdentityRemoteUE-r17,
+ sl-PagingCycleRemoteUE-r17 PagingCycle OPTIONAL -- Need M
+}
+
+SL-SIB-ReqInfo-r17 ::= ENUMERATED { sib1, sib2, sib3, sib4, sib5, sib6, sib7, sib8, sib9, sib10, sib11, sib12, sib13,
+ sib14, sib15, sib16, sib17, sib18, sib19, sib20, sib21, spare11, spare10, spare9,
+ spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1, ... }
+
+-- TAG-REMOTEUEINFORMATIONSIDELINK-STOP
+-- TAG-RRCRECONFIGURATIONSIDELINK-START
+
+RRCReconfigurationSidelink ::= SEQUENCE {
+ rrc-TransactionIdentifier-r16 RRC-TransactionIdentifier,
+ criticalExtensions CHOICE {
+ rrcReconfigurationSidelink-r16 RRCReconfigurationSidelink-r16-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+RRCReconfigurationSidelink-r16-IEs ::= SEQUENCE {
+ slrb-ConfigToAddModList-r16 SEQUENCE (SIZE (1..maxNrofSLRB-r16)) OF SLRB-Config-r16 OPTIONAL, -- Need N
+ slrb-ConfigToReleaseList-r16 SEQUENCE (SIZE (1..maxNrofSLRB-r16)) OF SLRB-PC5-ConfigIndex-r16 OPTIONAL, -- Need N
+ sl-MeasConfig-r16 SetupRelease {SL-MeasConfig-r16} OPTIONAL, -- Need M
+ sl-CSI-RS-Config-r16 SetupRelease {SL-CSI-RS-Config-r16} OPTIONAL, -- Need M
+ sl-ResetConfig-r16 ENUMERATED {true} OPTIONAL, -- Need N
+ sl-LatencyBoundCSI-Report-r16 INTEGER (3..160) OPTIONAL, -- Need M
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension RRCReconfigurationSidelink-v1700-IEs OPTIONAL
+}
+
+RRCReconfigurationSidelink-v1700-IEs ::= SEQUENCE {
+ sl-DRX-ConfigUC-PC5-r17 SetupRelease { SL-DRX-ConfigUC-r17 } OPTIONAL, -- Need M
+ sl-LatencyBoundIUC-Report-r17 SetupRelease { SL-LatencyBoundIUC-Report-r17 } OPTIONAL, -- Need M
+ sl-RLC-ChannelToReleaseListPC5-r17 SEQUENCE (SIZE (1..maxSL-LCID-r16)) OF SL-RLC-ChannelID-r17 OPTIONAL, -- Need N
+ sl-RLC-ChannelToAddModListPC5-r17 SEQUENCE (SIZE (1..maxSL-LCID-r16)) OF SL-RLC-ChannelConfigPC5-r17 OPTIONAL, -- Need N
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+SL-LatencyBoundIUC-Report-r17::= INTEGER (3..160)
+
+SLRB-Config-r16::= SEQUENCE {
+ slrb-PC5-ConfigIndex-r16 SLRB-PC5-ConfigIndex-r16,
+ sl-SDAP-ConfigPC5-r16 SL-SDAP-ConfigPC5-r16 OPTIONAL, -- Need M
+ sl-PDCP-ConfigPC5-r16 SL-PDCP-ConfigPC5-r16 OPTIONAL, -- Need M
+ sl-RLC-ConfigPC5-r16 SL-RLC-ConfigPC5-r16 OPTIONAL, -- Need M
+ sl-MAC-LogicalChannelConfigPC5-r16 SL-LogicalChannelConfigPC5-r16 OPTIONAL, -- Need M
+ ...
+}
+
+SLRB-PC5-ConfigIndex-r16 ::= INTEGER (1..maxNrofSLRB-r16)
+
+SL-SDAP-ConfigPC5-r16 ::= SEQUENCE {
+ sl-MappedQoS-FlowsToAddList-r16 SEQUENCE (SIZE (1.. maxNrofSL-QFIsPerDest-r16)) OF SL-PQFI-r16 OPTIONAL, -- Need N
+ sl-MappedQoS-FlowsToReleaseList-r16 SEQUENCE (SIZE (1.. maxNrofSL-QFIsPerDest-r16)) OF SL-PQFI-r16 OPTIONAL, -- Need N
+ sl-SDAP-Header-r16 ENUMERATED {present, absent},
+ ...
+}
+
+SL-PDCP-ConfigPC5-r16 ::= SEQUENCE {
+ sl-PDCP-SN-Size-r16 ENUMERATED {len12bits, len18bits} OPTIONAL, -- Need M
+ sl-OutOfOrderDelivery-r16 ENUMERATED { true } OPTIONAL, -- Need R
+ ...
+}
+
+SL-RLC-ConfigPC5-r16 ::= CHOICE {
+ sl-AM-RLC-r16 SEQUENCE {
+ sl-SN-FieldLengthAM-r16 SN-FieldLengthAM OPTIONAL, -- Need M
+ ...
+ },
+ sl-UM-Bi-Directional-RLC-r16 SEQUENCE {
+ sl-SN-FieldLengthUM-r16 SN-FieldLengthUM OPTIONAL, -- Need M
+ ...
+ },
+ sl-UM-Uni-Directional-RLC-r16 SEQUENCE {
+ sl-SN-FieldLengthUM-r16 SN-FieldLengthUM OPTIONAL, -- Need M
+ ...
+ }
+}
+
+SL-LogicalChannelConfigPC5-r16 ::= SEQUENCE {
+ sl-LogicalChannelIdentity-r16 LogicalChannelIdentity,
+ ...
+}
+
+SL-PQFI-r16 ::= INTEGER (1..64)
+
+SL-CSI-RS-Config-r16 ::= SEQUENCE {
+ sl-CSI-RS-FreqAllocation-r16 CHOICE {
+ sl-OneAntennaPort-r16 BIT STRING (SIZE (12)),
+ sl-TwoAntennaPort-r16 BIT STRING (SIZE (6))
+ } OPTIONAL, -- Need M
+ sl-CSI-RS-FirstSymbol-r16 INTEGER (3..12) OPTIONAL, -- Need M
+ ...
+}
+
+SL-RLC-ChannelConfigPC5-r17::= SEQUENCE {
+ sl-RLC-ChannelID-PC5-r17 SL-RLC-ChannelID-r17,
+ sl-RLC-ConfigPC5-r17 SL-RLC-ConfigPC5-r16 OPTIONAL, -- Need M
+ sl-MAC-LogicalChannelConfigPC5-r17 SL-LogicalChannelConfigPC5-r16 OPTIONAL, -- Need M
+ ...
+}
+
+-- TAG-RRCRECONFIGURATIONSIDELINK-STOP
+-- TAG-RRCRECONFIGURATIONCOMPLETESIDELINK-START
+
+RRCReconfigurationCompleteSidelink ::= SEQUENCE {
+ rrc-TransactionIdentifier-r16 RRC-TransactionIdentifier,
+ criticalExtensions CHOICE {
+ rrcReconfigurationCompleteSidelink-r16 RRCReconfigurationCompleteSidelink-r16-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+RRCReconfigurationCompleteSidelink-r16-IEs ::= SEQUENCE {
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension RRCReconfigurationCompleteSidelink-v1710-IEs OPTIONAL
+}
+
+RRCReconfigurationCompleteSidelink-v1710-IEs ::= SEQUENCE {
+ dummy ENUMERATED {true},
+ nonCriticalExtension RRCReconfigurationCompleteSidelink-v1720-IEs OPTIONAL
+}
+
+
+RRCReconfigurationCompleteSidelink-v1720-IEs ::= SEQUENCE {
+ sl-DRX-ConfigReject-v1720 ENUMERATED {true} OPTIONAL,
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+-- TAG-RRCRECONFIGURATIONCOMPLETESIDELINK-STOP
+-- TAG-RRCRECONFIGURATIONFAILURESIDELINK-START
+
+RRCReconfigurationFailureSidelink ::= SEQUENCE {
+ rrc-TransactionIdentifier-r16 RRC-TransactionIdentifier,
+ criticalExtensions CHOICE {
+ rrcReconfigurationFailureSidelink-r16 RRCReconfigurationFailureSidelink-r16-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+RRCReconfigurationFailureSidelink-r16-IEs ::= SEQUENCE {
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+-- TAG-RRCRECONFIGURATIONFAILURESIDELINK-STOP
+-- TAG-UEASSISTANCEINFORMATIONSIDELINK-START
+
+UEAssistanceInformationSidelink-r17 ::= SEQUENCE {
+ criticalExtensions CHOICE {
+ ueAssistanceInformationSidelink-r17 UEAssistanceInformationSidelink-r17-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+UEAssistanceInformationSidelink-r17-IEs ::= SEQUENCE {
+ sl-PreferredDRX-ConfigList-r17 SEQUENCE (SIZE (1..maxNrofSL-RxInfoSet-r17)) OF SL-DRX-ConfigUC-SemiStatic-r17
+ OPTIONAL, -- Need R
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+-- TAG-UEASSISTANCEINFORMATIONSIDELINK-STOP
+-- TAG-UECAPABILITYENQUIRYSIDELINK-START
+
+UECapabilityEnquirySidelink ::= SEQUENCE {
+ rrc-TransactionIdentifier-r16 RRC-TransactionIdentifier,
+ criticalExtensions CHOICE {
+ ueCapabilityEnquirySidelink-r16 UECapabilityEnquirySidelink-r16-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+UECapabilityEnquirySidelink-r16-IEs ::= SEQUENCE {
+ frequencyBandListFilterSidelink-r16 FreqBandList OPTIONAL, -- Need N
+ ue-CapabilityInformationSidelink-r16 OCTET STRING OPTIONAL, -- Need N
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension SEQUENCE{} OPTIONAL
+}
+
+-- TAG-UECAPABILITYENQUIRYSIDELINK-STOP
+-- TAG-UECAPABILITYINFORMATIONSIDELINK-START
+
+UECapabilityInformationSidelink ::= SEQUENCE {
+ rrc-TransactionIdentifier-r16 RRC-TransactionIdentifier,
+ criticalExtensions CHOICE {
+ ueCapabilityInformationSidelink-r16 UECapabilityInformationSidelink-r16-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+UECapabilityInformationSidelink-r16-IEs ::= SEQUENCE {
+ accessStratumReleaseSidelink-r16 AccessStratumReleaseSidelink-r16,
+ pdcp-ParametersSidelink-r16 PDCP-ParametersSidelink-r16 OPTIONAL,
+ rlc-ParametersSidelink-r16 RLC-ParametersSidelink-r16 OPTIONAL,
+ supportedBandCombinationListSidelinkNR-r16 BandCombinationListSidelinkNR-r16 OPTIONAL,
+ supportedBandListSidelink-r16 SEQUENCE (SIZE (1..maxBands)) OF BandSidelinkPC5-r16 OPTIONAL,
+ appliedFreqBandListFilter-r16 FreqBandList OPTIONAL,
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension UECapabilityInformationSidelink-v1700-IEs OPTIONAL
+}
+
+UECapabilityInformationSidelink-v1700-IEs ::= SEQUENCE {
+ mac-ParametersSidelink-r17 MAC-ParametersSidelink-r17 OPTIONAL,
+ supportedBandCombinationListSidelinkNR-v1710 BandCombinationListSidelinkNR-v1710 OPTIONAL,
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+MAC-ParametersSidelink-r17 ::= SEQUENCE {
+ drx-OnSidelink-r17 ENUMERATED {supported} OPTIONAL,
+ ...
+}
+
+AccessStratumReleaseSidelink-r16 ::= ENUMERATED { rel16, rel17, spare6, spare5, spare4, spare3, spare2, spare1, ... }
+
+PDCP-ParametersSidelink-r16 ::= SEQUENCE {
+ outOfOrderDeliverySidelink-r16 ENUMERATED {supported} OPTIONAL,
+ ...
+}
+
+BandCombinationListSidelinkNR-r16 ::= SEQUENCE (SIZE (1..maxBandComb)) OF BandCombinationParametersSidelinkNR-r16
+
+BandCombinationListSidelinkNR-v1710 ::= SEQUENCE (SIZE (1..maxBandComb)) OF BandCombinationParametersSidelinkNR-v1710
+
+BandCombinationParametersSidelinkNR-r16 ::= SEQUENCE (SIZE (1..maxSimultaneousBands)) OF BandParametersSidelink-r16
+
+BandCombinationParametersSidelinkNR-v1710 ::= SEQUENCE (SIZE (1..maxSimultaneousBands)) OF BandParametersSidelink-v1710
+
+BandParametersSidelink-v1710 ::= SEQUENCE {
+ --32-5a-1
+ tx-IUC-Scheme1-Mode2Sidelink-r17 ENUMERATED {supported} OPTIONAL,
+ --32-5b-1
+ tx-IUC-Scheme2-Mode2Sidelink-r17 ENUMERATED {n4, n8, n16} OPTIONAL
+}
+
+BandSidelinkPC5-r16 ::= SEQUENCE {
+ freqBandSidelink-r16 FreqBandIndicatorNR,
+ --15-1
+ sl-Reception-r16 SEQUENCE {
+ harq-RxProcessSidelink-r16 ENUMERATED {n16, n24, n32, n64},
+ pscch-RxSidelink-r16 ENUMERATED {value1, value2},
+ scs-CP-PatternRxSidelink-r16 CHOICE {
+ fr1-r16 SEQUENCE {
+ scs-15kHz-r16 BIT STRING (SIZE (16)) OPTIONAL,
+ scs-30kHz-r16 BIT STRING (SIZE (16)) OPTIONAL,
+ scs-60kHz-r16 BIT STRING (SIZE (16)) OPTIONAL
+ },
+ fr2-r16 SEQUENCE {
+ scs-60kHz-r16 BIT STRING (SIZE (16)) OPTIONAL,
+ scs-120kHz-r16 BIT STRING (SIZE (16)) OPTIONAL
+ }
+ } OPTIONAL,
+ extendedCP-RxSidelink-r16 ENUMERATED {supported} OPTIONAL
+ } OPTIONAL,
+ --15-10
+ sl-Tx-256QAM-r16 ENUMERATED {supported} OPTIONAL,
+ --15-12
+ lowSE-64QAM-MCS-TableSidelink-r16 ENUMERATED {supported} OPTIONAL,
+ ...,
+ [[
+ --15-14
+ csi-ReportSidelink-r16 SEQUENCE {
+ csi-RS-PortsSidelink-r16 ENUMERATED {p1, p2}
+ } OPTIONAL,
+ --15-19
+ rankTwoReception-r16 ENUMERATED {supported} OPTIONAL,
+ --15-23
+ sl-openLoopPC-RSRP-ReportSidelink-r16 ENUMERATED {supported} OPTIONAL,
+ --13-1
+ sl-Rx-256QAM-r16 ENUMERATED {supported} OPTIONAL
+ ]],
+ [[
+ --32-5a-2
+ rx-IUC-Scheme1-PreferredMode2Sidelink-r17 ENUMERATED {supported} OPTIONAL,
+ --32-5a-3
+ rx-IUC-Scheme1-NonPreferredMode2Sidelink-r17 ENUMERATED {supported} OPTIONAL,
+ --32-5b-2
+ rx-IUC-Scheme2-Mode2Sidelink-r17 ENUMERATED {n5, n15, n25, n32, n35, n45, n50, n64} OPTIONAL,
+ --32-6-1
+ rx-IUC-Scheme1-SCI-r17 ENUMERATED {supported} OPTIONAL,
+ --32-6-2
+ rx-IUC-Scheme1-SCI-ExplicitReq-r17 ENUMERATED {supported} OPTIONAL,
+ --32-7
+ scheme2-ConflictDeterminationRSRP-r17 ENUMERATED {supported} OPTIONAL
+ ]]
+}
+
+-- TAG-UECAPABILITYINFORMATIONSIDELINK-STOP
+-- TAG-UUMESSAGETRANSFERSIDELINK-START
+
+UuMessageTransferSidelink-r17 ::= SEQUENCE {
+ criticalExtensions CHOICE {
+ uuMessageTransferSidelink-r17 UuMessageTransferSidelink-r17-IEs,
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+UuMessageTransferSidelink-r17-IEs ::= SEQUENCE {
+ sl-PagingDelivery-r17 OCTET STRING (CONTAINING PagingRecord) OPTIONAL, -- Need N
+ sl-SIB1-Delivery-r17 OCTET STRING (CONTAINING SIB1) OPTIONAL, -- Need N
+ sl-SystemInformationDelivery-r17 OCTET STRING (CONTAINING SystemInformation) OPTIONAL, -- Need N
+ lateNonCriticalExtension OCTET STRING OPTIONAL,
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+-- TAG-UUMESSAGETRANSFERSIDELINK-STOP
+
+END
+
+-- NR-UE-VARIABLES-START
+
+NR-UE-Variables DEFINITIONS AUTOMATIC TAGS ::=
+
+BEGIN
+
+IMPORTS
+ AreaConfiguration-v1700,
+ ARFCN-ValueNR,
+ CellIdentity,
+ EUTRA-PhysCellId,
+ maxCEFReport-r17,
+ MeasId,
+ MeasIdToAddModList,
+ MeasIdleCarrierEUTRA-r16,
+ MeasIdleCarrierNR-r16,
+ MeasResultIdleEUTRA-r16,
+ MeasResultIdleNR-r16,
+ MeasObjectToAddModList,
+ PhysCellId,
+ RNTI-Value,
+ ReportConfigToAddModList,
+ RSRP-Range,
+ SL-MeasId-r16,
+ SL-MeasIdList-r16,
+ SL-MeasObjectList-r16,
+ SL-ReportConfigList-r16,
+ SL-QuantityConfig-r16,
+ Tx-PoolMeasList-r16,
+ QuantityConfig,
+ maxNrofCellMeas,
+ maxNrofMeasId,
+ maxFreqIdle-r16,
+ PhysCellIdUTRA-FDD-r16,
+ ValidityAreaList-r16,
+ CondReconfigToAddModList-r16,
+ ConnEstFailReport-r16,
+ LoggingDuration-r16,
+ LoggingInterval-r16,
+ LogMeasInfoList-r16,
+ LogMeasInfo-r16,
+ RA-Report-r16,
+ RLF-Report-r16,
+ TraceReference-r16,
+ WLAN-Identifiers-r16,
+ WLAN-NameList-r16,
+ BT-NameList-r16,
+ PLMN-Identity,
+ maxNrofRelayMeas-r17,
+ maxPLMN,
+ RA-ReportList-r16,
+ VisitedCellInfoList-r16,
+ AbsoluteTimeInfo-r16,
+ LoggedEventTriggerConfig-r16,
+ LoggedPeriodicalReportConfig-r16,
+ Sensor-NameList-r16,
+ SL-SourceIdentity-r17,
+ SuccessHO-Report-r17,
+ PLMN-IdentityList2-r16,
+ AreaConfiguration-r16,
+ maxNrofSL-MeasId-r16,
+ maxNrofFreqSL-r16,
+ maxNrofCLI-RSSI-Resources-r16,
+ maxNrofCLI-SRS-Resources-r16,
+ RSSI-ResourceId-r16,
+ SRS-ResourceId,
+ VisitedPSCellInfoList-r17
+FROM NR-RRC-Definitions;
+
+-- NR-UE-VARIABLES-STOP
+-- TAG-VARCONDITIONALRECONFIG-START
+
+VarConditionalReconfig ::= SEQUENCE {
+ condReconfigList CondReconfigToAddModList-r16 OPTIONAL
+}
+
+-- TAG-VARCONDITIONALRECONFIG-STOP
+-- TAG-VARCONNESTFAILREPORT-START
+
+VarConnEstFailReport-r16 ::= SEQUENCE {
+ connEstFailReport-r16 ConnEstFailReport-r16,
+ plmn-Identity-r16 PLMN-Identity
+}
+
+-- TAG-VARCONNESTFAILREPORT-STOP
+-- TAG-VARCONNESTFAILREPORTLIST-START
+
+VarConnEstFailReportList-r17 ::= SEQUENCE {
+ connEstFailReportList-r17 SEQUENCE (SIZE (1..maxCEFReport-r17)) OF VarConnEstFailReport-r16
+}
+
+-- TAG-VARCONNESTFAILREPORTLIST-STOP
+-- TAG-VARLOGMEASCONFIG-START
+
+VarLogMeasConfig-r16-IEs ::= SEQUENCE {
+ areaConfiguration-r16 AreaConfiguration-r16 OPTIONAL,
+ bt-NameList-r16 BT-NameList-r16 OPTIONAL,
+ wlan-NameList-r16 WLAN-NameList-r16 OPTIONAL,
+ sensor-NameList-r16 Sensor-NameList-r16 OPTIONAL,
+ loggingDuration-r16 LoggingDuration-r16,
+ reportType CHOICE {
+ periodical LoggedPeriodicalReportConfig-r16,
+ eventTriggered LoggedEventTriggerConfig-r16
+ },
+ earlyMeasIndication-r17 ENUMERATED {true} OPTIONAL,
+ areaConfiguration-v1700 AreaConfiguration-v1700 OPTIONAL
+}
+-- TAG-VARLOGMEASCONFIG-STOP
+-- TAG-VARLOGMEASREPORT-START
+
+VarLogMeasReport-r16 ::= SEQUENCE {
+ absoluteTimeInfo-r16 AbsoluteTimeInfo-r16,
+ traceReference-r16 TraceReference-r16,
+ traceRecordingSessionRef-r16 OCTET STRING (SIZE (2)),
+ tce-Id-r16 OCTET STRING (SIZE (1)),
+ logMeasInfoList-r16 LogMeasInfoList-r16,
+ plmn-IdentityList-r16 PLMN-IdentityList2-r16,
+ sigLoggedMeasType-r17 ENUMERATED {true}
+}
+
+-- TAG-VARLOGMEASREPORT-STOP
+-- TAG-VARMEASCONFIG-START
+
+VarMeasConfig ::= SEQUENCE {
+ -- Measurement identities
+ measIdList MeasIdToAddModList OPTIONAL,
+ -- Measurement objects
+ measObjectList MeasObjectToAddModList OPTIONAL,
+ -- Reporting configurations
+ reportConfigList ReportConfigToAddModList OPTIONAL,
+ -- Other parameters
+ quantityConfig QuantityConfig OPTIONAL,
+ s-MeasureConfig CHOICE {
+ ssb-RSRP RSRP-Range,
+ csi-RSRP RSRP-Range
+ } OPTIONAL
+}
+
+-- TAG-VARMEASCONFIG-STOP
+-- TAG-VARMEASCONFIGSL-START
+
+VarMeasConfigSL-r16 ::= SEQUENCE {
+ -- NR sidelink measurement identities
+ sl-MeasIdList-r16 SL-MeasIdList-r16 OPTIONAL,
+ -- NR sidelink measurement objects
+ sl-MeasObjectList-r16 SL-MeasObjectList-r16 OPTIONAL,
+ -- NR sidelink reporting configurations
+ sl-reportConfigList-r16 SL-ReportConfigList-r16 OPTIONAL,
+ -- Other parameters
+ sl-QuantityConfig-r16 SL-QuantityConfig-r16 OPTIONAL
+}
+
+-- TAG-VARMEASCONFIGSL-STOP
+-- TAG-VARMEASIDLECONFIG-START
+
+VarMeasIdleConfig-r16 ::= SEQUENCE {
+ measIdleCarrierListNR-r16 SEQUENCE (SIZE (1..maxFreqIdle-r16)) OF MeasIdleCarrierNR-r16 OPTIONAL,
+ measIdleCarrierListEUTRA-r16 SEQUENCE (SIZE (1..maxFreqIdle-r16)) OF MeasIdleCarrierEUTRA-r16 OPTIONAL,
+ measIdleDuration-r16 ENUMERATED {sec10, sec30, sec60, sec120, sec180, sec240, sec300, spare},
+ validityAreaList-r16 ValidityAreaList-r16 OPTIONAL
+}
+
+-- TAG-VARMEASIDLECONFIG-STOP
+-- TAG-VARMEASIDLEREPORT-START
+
+VarMeasIdleReport-r16 ::= SEQUENCE {
+ measReportIdleNR-r16 MeasResultIdleNR-r16 OPTIONAL,
+ measReportIdleEUTRA-r16 MeasResultIdleEUTRA-r16 OPTIONAL
+}
+
+-- TAG-VARMEASIDLEREPORT-STOP
+-- TAG-VARMEASREPORTLIST-START
+
+VarMeasReportList ::= SEQUENCE (SIZE (1..maxNrofMeasId)) OF VarMeasReport
+
+VarMeasReport ::= SEQUENCE {
+ -- List of measurement that have been triggered
+ measId MeasId,
+ cellsTriggeredList CellsTriggeredList OPTIONAL,
+ numberOfReportsSent INTEGER,
+ cli-TriggeredList-r16 CLI-TriggeredList-r16 OPTIONAL,
+ tx-PoolMeasToAddModListNR-r16 Tx-PoolMeasList-r16 OPTIONAL,
+ relaysTriggeredList-r17 RelaysTriggeredList-r17 OPTIONAL
+}
+
+CellsTriggeredList ::= SEQUENCE (SIZE (1..maxNrofCellMeas)) OF CHOICE {
+ physCellId PhysCellId,
+ physCellIdEUTRA EUTRA-PhysCellId,
+ physCellIdUTRA-FDD-r16 PhysCellIdUTRA-FDD-r16
+ }
+
+CLI-TriggeredList-r16 ::= CHOICE {
+ srs-RSRP-TriggeredList-r16 SRS-RSRP-TriggeredList-r16,
+ cli-RSSI-TriggeredList-r16 CLI-RSSI-TriggeredList-r16
+ }
+
+SRS-RSRP-TriggeredList-r16 ::= SEQUENCE (SIZE (1.. maxNrofCLI-SRS-Resources-r16)) OF SRS-ResourceId
+
+CLI-RSSI-TriggeredList-r16 ::= SEQUENCE (SIZE (1.. maxNrofCLI-RSSI-Resources-r16)) OF RSSI-ResourceId-r16
+
+RelaysTriggeredList-r17 ::= SEQUENCE (SIZE (1.. maxNrofRelayMeas-r17)) OF SL-SourceIdentity-r17
+
+-- TAG-VARMEASREPORTLIST-STOP
+-- TAG-VARMEASREPORTLISTSL-START
+
+VarMeasReportListSL-r16 ::= SEQUENCE (SIZE (1..maxNrofSL-MeasId-r16)) OF VarMeasReportSL-r16
+
+VarMeasReportSL-r16 ::= SEQUENCE {
+ -- List of NR sidelink measurement that have been triggered
+ sl-MeasId-r16 SL-MeasId-r16,
+ sl-FrequencyTriggeredList-r16 SEQUENCE (SIZE (1..maxNrofFreqSL-r16)) OF ARFCN-ValueNR OPTIONAL,
+ sl-NumberOfReportsSent-r16 INTEGER
+}
+
+-- TAG-VARMEASREPORTLISTSL-STOP
+-- TAG-VARMOBILITYHISTORYREPORT-START
+
+VarMobilityHistoryReport-r16 ::= VisitedCellInfoList-r16
+
+VarMobilityHistoryReport-r17 ::= SEQUENCE {
+ visitedCellInfoList-r16 VisitedCellInfoList-r16,
+ visitedPSCellInfoListReport-r17 VisitedPSCellInfoList-r17 OPTIONAL
+}
+
+-- TAG-VARMOBILITYHISTORYREPORT-STOP
+-- TAG-VARPENDINGRNA-UPDATE-START
+
+VarPendingRNA-Update ::= SEQUENCE {
+ pendingRNA-Update BOOLEAN OPTIONAL
+}
+
+-- TAG-VARPENDINGRNA-UPDATE-STOP
+-- TAG-VARRA-REPORT-START
+
+VarRA-Report-r16 ::= SEQUENCE {
+ ra-ReportList-r16 RA-ReportList-r16,
+ plmn-IdentityList-r16 PLMN-IdentityList-r16
+}
+
+PLMN-IdentityList-r16 ::= SEQUENCE (SIZE (1..maxPLMN)) OF PLMN-Identity
+
+-- TAG-VARRA-REPORT-STOP
+-- TAG-VARRESUMEMAC-INPUT-START
+
+VarResumeMAC-Input ::= SEQUENCE {
+ sourcePhysCellId PhysCellId,
+ targetCellIdentity CellIdentity,
+ source-c-RNTI RNTI-Value
+}
+
+-- TAG-VARRESUMEMAC-INPUT-STOP
+-- TAG-VARRLF-REPORT-START
+
+VarRLF-Report-r16 ::= SEQUENCE {
+ rlf-Report-r16 RLF-Report-r16,
+ plmn-IdentityList-r16 PLMN-IdentityList2-r16
+}
+
+-- TAG-VARRLF-REPORT-STOP
+-- TAG-VARSHORTMAC-INPUT-START
+
+VarShortMAC-Input ::= SEQUENCE {
+ sourcePhysCellId PhysCellId,
+ targetCellIdentity CellIdentity,
+ source-c-RNTI RNTI-Value
+}
+
+-- TAG-VARSHORTMAC-INPUT-STOP
+-- TAG-VARSUCCESSHO-Report-START
+
+VarSuccessHO-Report-r17-IEs ::= SEQUENCE {
+ successHO-Report-r17 SuccessHO-Report-r17,
+ plmn-IdentityList-r17 PLMN-IdentityList2-r16
+}
+-- TAG-VARSUCCESSHO-Report-STOP
+
+END
+
+-- TAG-NR-SIDELINK-PRECONF-DEFINITIONS-START
+
+NR-Sidelink-Preconf DEFINITIONS AUTOMATIC TAGS ::=
+
+BEGIN
+
+IMPORTS
+ SL-RemoteUE-Config-r17,
+ SL-DRX-ConfigGC-BC-r17,
+ SL-FreqConfigCommon-r16,
+ SL-RadioBearerConfig-r16,
+ SL-RLC-BearerConfig-r16,
+ SL-EUTRA-AnchorCarrierFreqList-r16,
+ SL-NR-AnchorCarrierFreqList-r16,
+ SL-MeasConfigCommon-r16,
+ SL-UE-SelectedConfig-r16,
+ TDD-UL-DL-ConfigCommon,
+ maxNrofFreqSL-r16,
+ maxNrofSLRB-r16,
+ maxSL-LCID-r16
+FROM NR-RRC-Definitions;
+
+-- TAG-NR-SIDELINK-PRECONF-DEFINITIONS-STOP
+-- TAG-SL-PRECONFIGURATIONNR-START
+
+SL-PreconfigurationNR-r16 ::= SEQUENCE {
+ sidelinkPreconfigNR-r16 SidelinkPreconfigNR-r16,
+ ...
+}
+
+SidelinkPreconfigNR-r16 ::= SEQUENCE {
+ sl-PreconfigFreqInfoList-r16 SEQUENCE (SIZE (1..maxNrofFreqSL-r16)) OF SL-FreqConfigCommon-r16 OPTIONAL,
+ sl-PreconfigNR-AnchorCarrierFreqList-r16 SL-NR-AnchorCarrierFreqList-r16 OPTIONAL,
+ sl-PreconfigEUTRA-AnchorCarrierFreqList-r16 SL-EUTRA-AnchorCarrierFreqList-r16 OPTIONAL,
+ sl-RadioBearerPreConfigList-r16 SEQUENCE (SIZE (1..maxNrofSLRB-r16)) OF SL-RadioBearerConfig-r16 OPTIONAL,
+ sl-RLC-BearerPreConfigList-r16 SEQUENCE (SIZE (1..maxSL-LCID-r16)) OF SL-RLC-BearerConfig-r16 OPTIONAL,
+ sl-MeasPreConfig-r16 SL-MeasConfigCommon-r16 OPTIONAL,
+ sl-OffsetDFN-r16 INTEGER (1..1000) OPTIONAL,
+ t400-r16 ENUMERATED{ms100, ms200, ms300, ms400, ms600, ms1000, ms1500, ms2000} OPTIONAL,
+ sl-MaxNumConsecutiveDTX-r16 ENUMERATED {n1, n2, n3, n4, n6, n8, n16, n32} OPTIONAL,
+ sl-SSB-PriorityNR-r16 INTEGER (1..8) OPTIONAL,
+ sl-PreconfigGeneral-r16 SL-PreconfigGeneral-r16 OPTIONAL,
+ sl-UE-SelectedPreConfig-r16 SL-UE-SelectedConfig-r16 OPTIONAL,
+ sl-CSI-Acquisition-r16 ENUMERATED {enabled} OPTIONAL,
+ sl-RoHC-Profiles-r16 SL-RoHC-Profiles-r16 OPTIONAL,
+ sl-MaxCID-r16 INTEGER (1..16383) DEFAULT 15,
+ ...,
+ [[
+ sl-DRX-PreConfigGC-BC-r17 SL-DRX-ConfigGC-BC-r17 OPTIONAL,
+ sl-TxProfileList-r17 SL-TxProfileList-r17 OPTIONAL,
+ sl-PreconfigDiscConfig-r17 SL-RemoteUE-Config-r17 OPTIONAL
+ ]]
+}
+
+SL-TxProfileList-r17 ::= SEQUENCE (SIZE (1..256)) OF SL-TxProfile-r17
+
+SL-TxProfile-r17 ::= ENUMERATED {drx-Compatible, drx-Incompatible, spare6, spare5, spare4, spare3,spare2, spare1}
+
+SL-PreconfigGeneral-r16 ::= SEQUENCE {
+ sl-TDD-Configuration-r16 TDD-UL-DL-ConfigCommon OPTIONAL,
+ reservedBits-r16 BIT STRING (SIZE (2)) OPTIONAL,
+ ...
+}
+
+SL-RoHC-Profiles-r16 ::= SEQUENCE {
+ profile0x0001-r16 BOOLEAN,
+ profile0x0002-r16 BOOLEAN,
+ profile0x0003-r16 BOOLEAN,
+ profile0x0004-r16 BOOLEAN,
+ profile0x0006-r16 BOOLEAN,
+ profile0x0101-r16 BOOLEAN,
+ profile0x0102-r16 BOOLEAN,
+ profile0x0103-r16 BOOLEAN,
+ profile0x0104-r16 BOOLEAN
+}
+
+-- TAG-SL-PRECONFIGURATIONNR-STOP
+
+END
+
+-- TAG-SL-ACCESSINFO-L2U2N-START
+
+NR-Sidelink-DiscoveryMessage DEFINITIONS AUTOMATIC TAGS ::=
+
+BEGIN
+IMPORTS
+ CellAccessRelatedInfo,
+ SL-ServingCellInfo-r17
+FROM NR-RRC-Definitions;
+
+SL-AccessInfo-L2U2N-r17 ::= SEQUENCE {
+ cellAccessRelatedInfo-r17 CellAccessRelatedInfo,
+ sl-ServingCellInfo-r17 SL-ServingCellInfo-r17,
+ ...
+}
+
+-- TAG-SL-ACCESSINFO-L2U2N-STOP
+
+END
+
+-- TAG-NR-INTER-NODE-DEFINITIONS-START
+
+NR-InterNodeDefinitions DEFINITIONS AUTOMATIC TAGS ::=
+
+BEGIN
+
+IMPORTS
+ ARFCN-ValueNR,
+ ARFCN-ValueEUTRA,
+ CellIdentity,
+ CGI-InfoEUTRA,
+ CGI-InfoNR,
+ CondReconfigExecCondSCG-r17,
+ CSI-RS-Index,
+ CSI-RS-CellMobility,
+ DRX-Config,
+ EUTRA-PhysCellId,
+ FeatureSetDownlinkPerCC-Id,
+ FeatureSetUplinkPerCC-Id,
+ FreqBandIndicatorNR,
+ GapConfig,
+ maxBandComb,
+ maxBands,
+ maxBandsEUTRA,
+ maxCellSFTD,
+ maxFeatureSetsPerBand,
+ maxFreq,
+ maxFreqIDC-MRDC,
+ maxNrofCombIDC,
+ maxNrofCondCells-r16,
+ maxNrofCondCells-1-r17,
+ maxNrofPhysicalResourceBlocks,
+ maxNrofSCells,
+ maxNrofServingCells,
+ maxNrofServingCells-1,
+ maxNrofServingCellsEUTRA,
+ maxNrofIndexesToReport,
+ maxSimultaneousBands,
+ MBSInterestIndication-r17,
+ MeasQuantityResults,
+ MeasResultCellListSFTD-EUTRA,
+ MeasResultCellListSFTD-NR,
+ MeasResultList2NR,
+ MeasResultSCG-Failure,
+ MeasResultServFreqListEUTRA-SCG,
+ NeedForGapsInfoNR-r16,
+ NeedForGapNCSG-InfoNR-r17,
+ NeedForGapNCSG-InfoEUTRA-r17,
+ OverheatingAssistance,
+ OverheatingAssistance-r17,
+ P-Max,
+ PhysCellId,
+ RadioBearerConfig,
+ RAN-NotificationAreaInfo,
+ RRCReconfiguration,
+ ServCellIndex,
+ SetupRelease,
+ SSB-Index,
+ SSB-MTC,
+ SSB-ToMeasure,
+ SS-RSSI-Measurement,
+ ShortMAC-I,
+ SubcarrierSpacing,
+ UEAssistanceInformation,
+ UE-CapabilityRAT-ContainerList,
+ maxNrofCLI-RSSI-Resources-r16,
+ maxNrofCLI-SRS-Resources-r16,
+ RSSI-ResourceId-r16,
+ SDT-Config-r17,
+ SidelinkUEInformationNR-r16,
+ SRS-ResourceId,
+ UE-RadioPagingInfo-r17
+FROM NR-RRC-Definitions;
+
+-- TAG-NR-INTER-NODE-DEFINITIONS-STOP
+-- TAG-CG-CANDIDATELIST-START
+
+CG-CandidateList ::= SEQUENCE {
+ criticalExtensions CHOICE {
+ c1 CHOICE{
+ cg-CandidateList-r17 CG-CandidateList-r17-IEs,
+ spare3 NULL, spare2 NULL, spare1 NULL
+ },
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+CG-CandidateList-r17-IEs ::= SEQUENCE {
+ cg-CandidateToAddModList-r17 SEQUENCE (SIZE (1..maxNrofCondCells-r16)) OF CG-CandidateInfo-r17 OPTIONAL,
+ cg-CandidateToReleaseList-r17 SEQUENCE (SIZE (1..maxNrofCondCells-r16)) OF CG-CandidateInfoId-r17 OPTIONAL,
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+CG-CandidateInfo-r17 ::= SEQUENCE {
+ cg-CandidateInfoId-r17 CG-CandidateInfoId-r17,
+ candidateCG-Config-r17 OCTET STRING (CONTAINING CG-Config)
+}
+
+CG-CandidateInfoId-r17::= SEQUENCE {
+ ssbFrequency-r17 ARFCN-ValueNR,
+ physCellId-r17 PhysCellId
+}
+
+-- TAG-CG-CANDIDATELIST-STOP
+-- TAG-HANDOVER-COMMAND-START
+
+HandoverCommand ::= SEQUENCE {
+ criticalExtensions CHOICE {
+ c1 CHOICE{
+ handoverCommand HandoverCommand-IEs,
+ spare3 NULL, spare2 NULL, spare1 NULL
+ },
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+HandoverCommand-IEs ::= SEQUENCE {
+ handoverCommandMessage OCTET STRING (CONTAINING RRCReconfiguration),
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+-- TAG-HANDOVER-COMMAND-STOP
+-- TAG-HANDOVER-PREPARATION-INFORMATION-START
+
+HandoverPreparationInformation ::= SEQUENCE {
+ criticalExtensions CHOICE {
+ c1 CHOICE{
+ handoverPreparationInformation HandoverPreparationInformation-IEs,
+ spare3 NULL, spare2 NULL, spare1 NULL
+ },
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+HandoverPreparationInformation-IEs ::= SEQUENCE {
+ ue-CapabilityRAT-List UE-CapabilityRAT-ContainerList,
+ sourceConfig AS-Config OPTIONAL, -- Cond HO
+ rrm-Config RRM-Config OPTIONAL,
+ as-Context AS-Context OPTIONAL,
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+AS-Config ::= SEQUENCE {
+ rrcReconfiguration OCTET STRING (CONTAINING RRCReconfiguration),
+ ...,
+ [[
+ sourceRB-SN-Config OCTET STRING (CONTAINING RadioBearerConfig) OPTIONAL,
+ sourceSCG-NR-Config OCTET STRING (CONTAINING RRCReconfiguration) OPTIONAL,
+ sourceSCG-EUTRA-Config OCTET STRING OPTIONAL
+ ]],
+ [[
+ sourceSCG-Configured ENUMERATED {true} OPTIONAL
+ ]],
+ [[
+ sdt-Config-r17 SDT-Config-r17 OPTIONAL
+ ]]
+}
+
+AS-Context ::= SEQUENCE {
+ reestablishmentInfo ReestablishmentInfo OPTIONAL,
+ configRestrictInfo ConfigRestrictInfoSCG OPTIONAL,
+ ...,
+ [[ ran-NotificationAreaInfo RAN-NotificationAreaInfo OPTIONAL
+ ]],
+ [[ ueAssistanceInformation OCTET STRING (CONTAINING UEAssistanceInformation) OPTIONAL -- Cond HO2
+ ]],
+ [[
+ selectedBandCombinationSN BandCombinationInfoSN OPTIONAL
+ ]],
+ [[
+ configRestrictInfoDAPS-r16 ConfigRestrictInfoDAPS-r16 OPTIONAL,
+ sidelinkUEInformationNR-r16 OCTET STRING OPTIONAL,
+ sidelinkUEInformationEUTRA-r16 OCTET STRING OPTIONAL,
+ ueAssistanceInformationEUTRA-r16 OCTET STRING OPTIONAL,
+ ueAssistanceInformationSCG-r16 OCTET STRING (CONTAINING UEAssistanceInformation) OPTIONAL, -- Cond HO2
+ needForGapsInfoNR-r16 NeedForGapsInfoNR-r16 OPTIONAL
+ ]],
+ [[
+ configRestrictInfoDAPS-v1640 ConfigRestrictInfoDAPS-v1640 OPTIONAL
+ ]],
+ [[
+ needForGapNCSG-InfoNR-r17 NeedForGapNCSG-InfoNR-r17 OPTIONAL,
+ needForGapNCSG-InfoEUTRA-r17 NeedForGapNCSG-InfoEUTRA-r17 OPTIONAL,
+ mbsInterestIndication-r17 OCTET STRING (CONTAINING MBSInterestIndication-r17) OPTIONAL
+ ]]
+}
+
+ConfigRestrictInfoDAPS-r16 ::= SEQUENCE {
+ powerCoordination-r16 SEQUENCE {
+ p-DAPS-Source-r16 P-Max,
+ p-DAPS-Target-r16 P-Max,
+ uplinkPowerSharingDAPS-Mode-r16 ENUMERATED {semi-static-mode1, semi-static-mode2, dynamic }
+ } OPTIONAL
+}
+
+ConfigRestrictInfoDAPS-v1640 ::= SEQUENCE {
+ sourceFeatureSetPerDownlinkCC-r16 FeatureSetDownlinkPerCC-Id,
+ sourceFeatureSetPerUplinkCC-r16 FeatureSetUplinkPerCC-Id
+}
+
+ReestablishmentInfo ::= SEQUENCE {
+ sourcePhysCellId PhysCellId,
+ targetCellShortMAC-I ShortMAC-I,
+ additionalReestabInfoList ReestabNCellInfoList OPTIONAL
+}
+
+ReestabNCellInfoList ::= SEQUENCE ( SIZE (1..maxCellPrep) ) OF ReestabNCellInfo
+
+ReestabNCellInfo::= SEQUENCE{
+ cellIdentity CellIdentity,
+ key-gNodeB-Star BIT STRING (SIZE (256)),
+ shortMAC-I ShortMAC-I
+}
+
+RRM-Config ::= SEQUENCE {
+ ue-InactiveTime ENUMERATED {
+ s1, s2, s3, s5, s7, s10, s15, s20,
+ s25, s30, s40, s50, min1, min1s20, min1s40,
+ min2, min2s30, min3, min3s30, min4, min5, min6,
+ min7, min8, min9, min10, min12, min14, min17, min20,
+ min24, min28, min33, min38, min44, min50, hr1,
+ hr1min30, hr2, hr2min30, hr3, hr3min30, hr4, hr5, hr6,
+ hr8, hr10, hr13, hr16, hr20, day1, day1hr12, day2,
+ day2hr12, day3, day4, day5, day7, day10, day14, day19,
+ day24, day30, dayMoreThan30} OPTIONAL,
+ candidateCellInfoList MeasResultList2NR OPTIONAL,
+ ...,
+ [[
+ candidateCellInfoListSN-EUTRA MeasResultServFreqListEUTRA-SCG OPTIONAL
+ ]]
+}
+
+-- TAG-HANDOVER-PREPARATION-INFORMATION-STOP
+-- TAG-CG-CONFIG-START
+
+CG-Config ::= SEQUENCE {
+ criticalExtensions CHOICE {
+ c1 CHOICE{
+ cg-Config CG-Config-IEs,
+ spare3 NULL, spare2 NULL, spare1 NULL
+ },
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+CG-Config-IEs ::= SEQUENCE {
+ scg-CellGroupConfig OCTET STRING (CONTAINING RRCReconfiguration) OPTIONAL,
+ scg-RB-Config OCTET STRING (CONTAINING RadioBearerConfig) OPTIONAL,
+ configRestrictModReq ConfigRestrictModReqSCG OPTIONAL,
+ drx-InfoSCG DRX-Info OPTIONAL,
+ candidateCellInfoListSN OCTET STRING (CONTAINING MeasResultList2NR) OPTIONAL,
+ measConfigSN MeasConfigSN OPTIONAL,
+ selectedBandCombination BandCombinationInfoSN OPTIONAL,
+ fr-InfoListSCG FR-InfoList OPTIONAL,
+ candidateServingFreqListNR CandidateServingFreqListNR OPTIONAL,
+ nonCriticalExtension CG-Config-v1540-IEs OPTIONAL
+}
+
+CG-Config-v1540-IEs ::= SEQUENCE {
+ pSCellFrequency ARFCN-ValueNR OPTIONAL,
+ reportCGI-RequestNR SEQUENCE {
+ requestedCellInfo SEQUENCE {
+ ssbFrequency ARFCN-ValueNR,
+ cellForWhichToReportCGI PhysCellId
+ } OPTIONAL
+ } OPTIONAL,
+ ph-InfoSCG PH-TypeListSCG OPTIONAL,
+ nonCriticalExtension CG-Config-v1560-IEs OPTIONAL
+}
+
+CG-Config-v1560-IEs ::= SEQUENCE {
+ pSCellFrequencyEUTRA ARFCN-ValueEUTRA OPTIONAL,
+ scg-CellGroupConfigEUTRA OCTET STRING OPTIONAL,
+ candidateCellInfoListSN-EUTRA OCTET STRING OPTIONAL,
+ candidateServingFreqListEUTRA CandidateServingFreqListEUTRA OPTIONAL,
+ needForGaps ENUMERATED {true} OPTIONAL,
+ drx-ConfigSCG DRX-Config OPTIONAL,
+ reportCGI-RequestEUTRA SEQUENCE {
+ requestedCellInfoEUTRA SEQUENCE {
+ eutraFrequency ARFCN-ValueEUTRA,
+ cellForWhichToReportCGI-EUTRA EUTRA-PhysCellId
+ } OPTIONAL
+ } OPTIONAL,
+ nonCriticalExtension CG-Config-v1590-IEs OPTIONAL
+}
+
+CG-Config-v1590-IEs ::= SEQUENCE {
+ scellFrequenciesSN-NR SEQUENCE (SIZE (1.. maxNrofServingCells-1)) OF ARFCN-ValueNR OPTIONAL,
+ scellFrequenciesSN-EUTRA SEQUENCE (SIZE (1.. maxNrofServingCells-1)) OF ARFCN-ValueEUTRA OPTIONAL,
+ nonCriticalExtension CG-Config-v1610-IEs OPTIONAL
+}
+
+CG-Config-v1610-IEs ::= SEQUENCE {
+ drx-InfoSCG2 DRX-Info2 OPTIONAL,
+ nonCriticalExtension CG-Config-v1620-IEs OPTIONAL
+}
+
+CG-Config-v1620-IEs ::= SEQUENCE {
+ ueAssistanceInformationSCG-r16 OCTET STRING (CONTAINING UEAssistanceInformation) OPTIONAL,
+ nonCriticalExtension CG-Config-v1630-IEs OPTIONAL
+}
+
+CG-Config-v1630-IEs ::= SEQUENCE {
+ selectedToffset-r16 T-Offset-r16 OPTIONAL,
+ nonCriticalExtension CG-Config-v1640-IEs OPTIONAL
+}
+
+CG-Config-v1640-IEs ::= SEQUENCE {
+ servCellInfoListSCG-NR-r16 ServCellInfoListSCG-NR-r16 OPTIONAL,
+ servCellInfoListSCG-EUTRA-r16 ServCellInfoListSCG-EUTRA-r16 OPTIONAL,
+ nonCriticalExtension CG-Config-v1700-IEs OPTIONAL
+}
+
+CG-Config-v1700-IEs ::= SEQUENCE {
+ candidateCellInfoListCPC-r17 CandidateCellInfoListCPC-r17 OPTIONAL,
+ twoPHRModeSCG-r17 ENUMERATED {enabled} OPTIONAL,
+ nonCriticalExtension CG-Config-v1730-IEs OPTIONAL
+}
+
+CG-Config-v1730-IEs ::= SEQUENCE {
+ fr1-Carriers-SCG-r17 INTEGER (1..32) OPTIONAL,
+ fr2-Carriers-SCG-r17 INTEGER (1..32) OPTIONAL,
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+ServCellInfoListSCG-NR-r16 ::= SEQUENCE (SIZE (1.. maxNrofServingCells)) OF ServCellInfoXCG-NR-r16
+
+ServCellInfoXCG-NR-r16 ::= SEQUENCE {
+ dl-FreqInfo-NR-r16 FrequencyConfig-NR-r16 OPTIONAL,
+ ul-FreqInfo-NR-r16 FrequencyConfig-NR-r16 OPTIONAL, -- Cond FDD
+ ...
+}
+
+FrequencyConfig-NR-r16 ::= SEQUENCE {
+ freqBandIndicatorNR-r16 FreqBandIndicatorNR,
+ carrierCenterFreq-NR-r16 ARFCN-ValueNR,
+ carrierBandwidth-NR-r16 INTEGER (1..maxNrofPhysicalResourceBlocks),
+ subcarrierSpacing-NR-r16 SubcarrierSpacing
+}
+
+ServCellInfoListSCG-EUTRA-r16 ::= SEQUENCE (SIZE (1.. maxNrofServingCellsEUTRA)) OF ServCellInfoXCG-EUTRA-r16
+
+ServCellInfoXCG-EUTRA-r16 ::= SEQUENCE {
+ dl-CarrierFreq-EUTRA-r16 ARFCN-ValueEUTRA OPTIONAL,
+ ul-CarrierFreq-EUTRA-r16 ARFCN-ValueEUTRA OPTIONAL, -- Cond FDD
+ transmissionBandwidth-EUTRA-r16 TransmissionBandwidth-EUTRA-r16 OPTIONAL,
+ ...
+}
+
+TransmissionBandwidth-EUTRA-r16 ::= ENUMERATED {rb6, rb15, rb25, rb50, rb75, rb100}
+
+PH-TypeListSCG ::= SEQUENCE (SIZE (1..maxNrofServingCells)) OF PH-InfoSCG
+
+PH-InfoSCG ::= SEQUENCE {
+ servCellIndex ServCellIndex,
+ ph-Uplink PH-UplinkCarrierSCG,
+ ph-SupplementaryUplink PH-UplinkCarrierSCG OPTIONAL,
+ ...,
+ [[
+ twoSRS-PUSCH-Repetition-r17 ENUMERATED{enabled} OPTIONAL
+ ]]
+}
+
+PH-UplinkCarrierSCG ::= SEQUENCE{
+ ph-Type1or3 ENUMERATED {type1, type3},
+ ...
+}
+
+MeasConfigSN ::= SEQUENCE {
+ measuredFrequenciesSN SEQUENCE (SIZE (1..maxMeasFreqsSN)) OF NR-FreqInfo OPTIONAL,
+ ...
+}
+
+NR-FreqInfo ::= SEQUENCE {
+ measuredFrequency ARFCN-ValueNR OPTIONAL,
+ ...
+}
+
+ConfigRestrictModReqSCG ::= SEQUENCE {
+ requestedBC-MRDC BandCombinationInfoSN OPTIONAL,
+ requestedP-MaxFR1 P-Max OPTIONAL,
+ ...,
+ [[
+ requestedPDCCH-BlindDetectionSCG INTEGER (1..15) OPTIONAL,
+ requestedP-MaxEUTRA P-Max OPTIONAL
+ ]],
+ [[
+ requestedP-MaxFR2-r16 P-Max OPTIONAL,
+ requestedMaxInterFreqMeasIdSCG-r16 INTEGER(1..maxMeasIdentitiesMN) OPTIONAL,
+ requestedMaxIntraFreqMeasIdSCG-r16 INTEGER(1..maxMeasIdentitiesMN) OPTIONAL,
+ requestedToffset-r16 T-Offset-r16 OPTIONAL
+ ]]
+}
+
+BandCombinationIndex ::= INTEGER (1..maxBandComb)
+
+BandCombinationInfoSN ::= SEQUENCE {
+ bandCombinationIndex BandCombinationIndex,
+ requestedFeatureSets FeatureSetEntryIndex
+}
+
+FR-InfoList ::= SEQUENCE (SIZE (1..maxNrofServingCells-1)) OF FR-Info
+
+FR-Info ::= SEQUENCE {
+ servCellIndex ServCellIndex,
+ fr-Type ENUMERATED {fr1, fr2}
+}
+
+CandidateServingFreqListNR ::= SEQUENCE (SIZE (1.. maxFreqIDC-MRDC)) OF ARFCN-ValueNR
+
+CandidateServingFreqListEUTRA ::= SEQUENCE (SIZE (1.. maxFreqIDC-MRDC)) OF ARFCN-ValueEUTRA
+
+T-Offset-r16 ::= ENUMERATED {ms0dot5, ms0dot75, ms1, ms1dot5, ms2, ms2dot5, ms3, spare1}
+
+CandidateCellInfoListCPC-r17 ::= SEQUENCE (SIZE (1..maxFreq)) OF CandidateCellInfo-r17
+
+CandidateCellInfo-r17 ::= SEQUENCE {
+ ssbFrequency-r17 ARFCN-ValueNR,
+ candidateList-r17 SEQUENCE (SIZE (1..maxNrofCondCells-r16)) OF CandidateCell-r17
+}
+
+CandidateCell-r17 ::= SEQUENCE {
+ physCellId-r17 PhysCellId,
+ condExecutionCondSCG-r17 OCTET STRING (CONTAINING CondReconfigExecCondSCG-r17) OPTIONAL
+}
+
+-- TAG-CG-CONFIG-STOP
+-- TAG-CG-CONFIG-INFO-START
+
+CG-ConfigInfo ::= SEQUENCE {
+ criticalExtensions CHOICE {
+ c1 CHOICE{
+ cg-ConfigInfo CG-ConfigInfo-IEs,
+ spare3 NULL, spare2 NULL, spare1 NULL
+ },
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+CG-ConfigInfo-IEs ::= SEQUENCE {
+ ue-CapabilityInfo OCTET STRING (CONTAINING UE-CapabilityRAT-ContainerList) OPTIONAL,-- Cond SN-AddMod
+ candidateCellInfoListMN MeasResultList2NR OPTIONAL,
+ candidateCellInfoListSN OCTET STRING (CONTAINING MeasResultList2NR) OPTIONAL,
+ measResultCellListSFTD-NR MeasResultCellListSFTD-NR OPTIONAL,
+ scgFailureInfo SEQUENCE {
+ failureType ENUMERATED { t310-Expiry, randomAccessProblem,
+ rlc-MaxNumRetx, synchReconfigFailure-SCG,
+ scg-reconfigFailure,
+ srb3-IntegrityFailure},
+ measResultSCG OCTET STRING (CONTAINING MeasResultSCG-Failure)
+ } OPTIONAL,
+ configRestrictInfo ConfigRestrictInfoSCG OPTIONAL,
+ drx-InfoMCG DRX-Info OPTIONAL,
+ measConfigMN MeasConfigMN OPTIONAL,
+ sourceConfigSCG OCTET STRING (CONTAINING RRCReconfiguration) OPTIONAL,
+ scg-RB-Config OCTET STRING (CONTAINING RadioBearerConfig) OPTIONAL,
+ mcg-RB-Config OCTET STRING (CONTAINING RadioBearerConfig) OPTIONAL,
+ mrdc-AssistanceInfo MRDC-AssistanceInfo OPTIONAL,
+ nonCriticalExtension CG-ConfigInfo-v1540-IEs OPTIONAL
+}
+
+CG-ConfigInfo-v1540-IEs ::= SEQUENCE {
+ ph-InfoMCG PH-TypeListMCG OPTIONAL,
+ measResultReportCGI SEQUENCE {
+ ssbFrequency ARFCN-ValueNR,
+ cellForWhichToReportCGI PhysCellId,
+ cgi-Info CGI-InfoNR
+ } OPTIONAL,
+ nonCriticalExtension CG-ConfigInfo-v1560-IEs OPTIONAL
+}
+
+CG-ConfigInfo-v1560-IEs ::= SEQUENCE {
+ candidateCellInfoListMN-EUTRA OCTET STRING OPTIONAL,
+ candidateCellInfoListSN-EUTRA OCTET STRING OPTIONAL,
+ sourceConfigSCG-EUTRA OCTET STRING OPTIONAL,
+ scgFailureInfoEUTRA SEQUENCE {
+ failureTypeEUTRA ENUMERATED { t313-Expiry, randomAccessProblem,
+ rlc-MaxNumRetx, scg-ChangeFailure},
+ measResultSCG-EUTRA OCTET STRING
+ } OPTIONAL,
+ drx-ConfigMCG DRX-Config OPTIONAL,
+ measResultReportCGI-EUTRA SEQUENCE {
+ eutraFrequency ARFCN-ValueEUTRA,
+ cellForWhichToReportCGI-EUTRA EUTRA-PhysCellId,
+ cgi-InfoEUTRA CGI-InfoEUTRA
+ } OPTIONAL,
+ measResultCellListSFTD-EUTRA MeasResultCellListSFTD-EUTRA OPTIONAL,
+ fr-InfoListMCG FR-InfoList OPTIONAL,
+ nonCriticalExtension CG-ConfigInfo-v1570-IEs OPTIONAL
+}
+
+CG-ConfigInfo-v1570-IEs ::= SEQUENCE {
+ sftdFrequencyList-NR SFTD-FrequencyList-NR OPTIONAL,
+ sftdFrequencyList-EUTRA SFTD-FrequencyList-EUTRA OPTIONAL,
+ nonCriticalExtension CG-ConfigInfo-v1590-IEs OPTIONAL
+}
+
+CG-ConfigInfo-v1590-IEs ::= SEQUENCE {
+ servFrequenciesMN-NR SEQUENCE (SIZE (1.. maxNrofServingCells-1)) OF ARFCN-ValueNR OPTIONAL,
+ nonCriticalExtension CG-ConfigInfo-v1610-IEs OPTIONAL
+}
+
+CG-ConfigInfo-v1610-IEs ::= SEQUENCE {
+ drx-InfoMCG2 DRX-Info2 OPTIONAL,
+ alignedDRX-Indication ENUMERATED {true} OPTIONAL,
+ scgFailureInfo-r16 SEQUENCE {
+ failureType-r16 ENUMERATED { scg-lbtFailure-r16, beamFailureRecoveryFailure-r16,
+ t312-Expiry-r16, bh-RLF-r16,
+ beamFailure-r17, spare3, spare2, spare1},
+ measResultSCG-r16 OCTET STRING (CONTAINING MeasResultSCG-Failure)
+ } OPTIONAL,
+ dummy1 SEQUENCE {
+ failureTypeEUTRA-r16 ENUMERATED { scg-lbtFailure-r16, beamFailureRecoveryFailure-r16,
+ t312-Expiry-r16, spare5,
+ spare4, spare3, spare2, spare1},
+ measResultSCG-EUTRA-r16 OCTET STRING
+ } OPTIONAL,
+ sidelinkUEInformationNR-r16 OCTET STRING (CONTAINING SidelinkUEInformationNR-r16) OPTIONAL,
+ sidelinkUEInformationEUTRA-r16 OCTET STRING OPTIONAL,
+ nonCriticalExtension CG-ConfigInfo-v1620-IEs OPTIONAL
+}
+
+CG-ConfigInfo-v1620-IEs ::= SEQUENCE {
+ ueAssistanceInformationSourceSCG-r16 OCTET STRING (CONTAINING UEAssistanceInformation) OPTIONAL,
+ nonCriticalExtension CG-ConfigInfo-v1640-IEs OPTIONAL
+}
+
+CG-ConfigInfo-v1640-IEs ::= SEQUENCE {
+ servCellInfoListMCG-NR-r16 ServCellInfoListMCG-NR-r16 OPTIONAL,
+ servCellInfoListMCG-EUTRA-r16 ServCellInfoListMCG-EUTRA-r16 OPTIONAL,
+ nonCriticalExtension CG-ConfigInfo-v1700-IEs OPTIONAL
+}
+
+CG-ConfigInfo-v1700-IEs ::= SEQUENCE {
+ candidateCellListCPC-r17 CandidateCellListCPC-r17 OPTIONAL,
+ twoPHRModeMCG-r17 ENUMERATED {enabled} OPTIONAL,
+ lowMobilityEvaluationConnectedInPCell-r17 ENUMERATED {enabled} OPTIONAL,
+ nonCriticalExtension CG-ConfigInfo-v1730-IEs OPTIONAL
+}
+
+CG-ConfigInfo-v1730-IEs ::= SEQUENCE {
+ fr1-Carriers-MCG-r17 INTEGER (1..32) OPTIONAL,
+ fr2-Carriers-MCG-r17 INTEGER (1..32) OPTIONAL,
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+ServCellInfoListMCG-NR-r16 ::= SEQUENCE (SIZE (1.. maxNrofServingCells)) OF ServCellInfoXCG-NR-r16
+
+ServCellInfoListMCG-EUTRA-r16 ::= SEQUENCE (SIZE (1.. maxNrofServingCellsEUTRA)) OF ServCellInfoXCG-EUTRA-r16
+
+SFTD-FrequencyList-NR ::= SEQUENCE (SIZE (1..maxCellSFTD)) OF ARFCN-ValueNR
+
+SFTD-FrequencyList-EUTRA ::= SEQUENCE (SIZE (1..maxCellSFTD)) OF ARFCN-ValueEUTRA
+
+ConfigRestrictInfoSCG ::= SEQUENCE {
+ allowedBC-ListMRDC BandCombinationInfoList OPTIONAL,
+ powerCoordination-FR1 SEQUENCE {
+ p-maxNR-FR1 P-Max OPTIONAL,
+ p-maxEUTRA P-Max OPTIONAL,
+ p-maxUE-FR1 P-Max OPTIONAL
+ } OPTIONAL,
+ servCellIndexRangeSCG SEQUENCE {
+ lowBound ServCellIndex,
+ upBound ServCellIndex
+ } OPTIONAL, -- Cond SN-AddMod
+ maxMeasFreqsSCG INTEGER(1..maxMeasFreqsMN) OPTIONAL,
+ dummy INTEGER(1..maxMeasIdentitiesMN) OPTIONAL,
+ ...,
+ [[
+ selectedBandEntriesMNList SEQUENCE (SIZE (1..maxBandComb)) OF SelectedBandEntriesMN OPTIONAL,
+ pdcch-BlindDetectionSCG INTEGER (1..15) OPTIONAL,
+ maxNumberROHC-ContextSessionsSN INTEGER(0.. 16384) OPTIONAL
+ ]],
+ [[
+ maxIntraFreqMeasIdentitiesSCG INTEGER(1..maxMeasIdentitiesMN) OPTIONAL,
+ maxInterFreqMeasIdentitiesSCG INTEGER(1..maxMeasIdentitiesMN) OPTIONAL
+ ]],
+ [[
+ p-maxNR-FR1-MCG-r16 P-Max OPTIONAL,
+ powerCoordination-FR2-r16 SEQUENCE {
+ p-maxNR-FR2-MCG-r16 P-Max OPTIONAL,
+ p-maxNR-FR2-SCG-r16 P-Max OPTIONAL,
+ p-maxUE-FR2-r16 P-Max OPTIONAL
+ } OPTIONAL,
+ nrdc-PC-mode-FR1-r16 ENUMERATED {semi-static-mode1, semi-static-mode2, dynamic} OPTIONAL,
+ nrdc-PC-mode-FR2-r16 ENUMERATED {semi-static-mode1, semi-static-mode2, dynamic} OPTIONAL,
+ maxMeasSRS-ResourceSCG-r16 INTEGER(0..maxNrofCLI-SRS-Resources-r16) OPTIONAL,
+ maxMeasCLI-ResourceSCG-r16 INTEGER(0..maxNrofCLI-RSSI-Resources-r16) OPTIONAL,
+ maxNumberEHC-ContextsSN-r16 INTEGER(0..65536) OPTIONAL,
+ allowedReducedConfigForOverheating-r16 OverheatingAssistance OPTIONAL,
+ maxToffset-r16 T-Offset-r16 OPTIONAL
+ ]],
+ [[
+ allowedReducedConfigForOverheating-r17 OverheatingAssistance-r17 OPTIONAL,
+ maxNumberUDC-DRB-r17 INTEGER(0..2) OPTIONAL,
+ maxNumberCPCCandidates-r17 INTEGER(0..maxNrofCondCells-1-r17) OPTIONAL
+ ]]
+}
+
+SelectedBandEntriesMN ::= SEQUENCE (SIZE (1..maxSimultaneousBands)) OF BandEntryIndex
+
+BandEntryIndex ::= INTEGER (0.. maxNrofServingCells)
+
+PH-TypeListMCG ::= SEQUENCE (SIZE (1..maxNrofServingCells)) OF PH-InfoMCG
+
+PH-InfoMCG ::= SEQUENCE {
+ servCellIndex ServCellIndex,
+ ph-Uplink PH-UplinkCarrierMCG,
+ ph-SupplementaryUplink PH-UplinkCarrierMCG OPTIONAL,
+ ...,
+ [[
+ twoSRS-PUSCH-Repetition-r17 ENUMERATED{enabled} OPTIONAL
+ ]]
+}
+
+PH-UplinkCarrierMCG ::= SEQUENCE{
+ ph-Type1or3 ENUMERATED {type1, type3},
+ ...
+}
+
+BandCombinationInfoList ::= SEQUENCE (SIZE (1..maxBandComb)) OF BandCombinationInfo
+
+BandCombinationInfo ::= SEQUENCE {
+ bandCombinationIndex BandCombinationIndex,
+ allowedFeatureSetsList SEQUENCE (SIZE (1..maxFeatureSetsPerBand)) OF FeatureSetEntryIndex
+}
+
+FeatureSetEntryIndex ::= INTEGER (1.. maxFeatureSetsPerBand)
+
+DRX-Info ::= SEQUENCE {
+ drx-LongCycleStartOffset CHOICE {
+ ms10 INTEGER(0..9),
+ ms20 INTEGER(0..19),
+ ms32 INTEGER(0..31),
+ ms40 INTEGER(0..39),
+ ms60 INTEGER(0..59),
+ ms64 INTEGER(0..63),
+ ms70 INTEGER(0..69),
+ ms80 INTEGER(0..79),
+ ms128 INTEGER(0..127),
+ ms160 INTEGER(0..159),
+ ms256 INTEGER(0..255),
+ ms320 INTEGER(0..319),
+ ms512 INTEGER(0..511),
+ ms640 INTEGER(0..639),
+ ms1024 INTEGER(0..1023),
+ ms1280 INTEGER(0..1279),
+ ms2048 INTEGER(0..2047),
+ ms2560 INTEGER(0..2559),
+ ms5120 INTEGER(0..5119),
+ ms10240 INTEGER(0..10239)
+ },
+ shortDRX SEQUENCE {
+ drx-ShortCycle ENUMERATED {
+ ms2, ms3, ms4, ms5, ms6, ms7, ms8, ms10, ms14, ms16, ms20, ms30, ms32,
+ ms35, ms40, ms64, ms80, ms128, ms160, ms256, ms320, ms512, ms640, spare9,
+ spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1 },
+ drx-ShortCycleTimer INTEGER (1..16)
+ } OPTIONAL
+}
+
+DRX-Info2 ::= SEQUENCE {
+ drx-onDurationTimer CHOICE {
+ subMilliSeconds INTEGER (1..31),
+ milliSeconds ENUMERATED {
+ ms1, ms2, ms3, ms4, ms5, ms6, ms8, ms10, ms20, ms30, ms40, ms50, ms60,
+ ms80, ms100, ms200, ms300, ms400, ms500, ms600, ms800, ms1000, ms1200,
+ ms1600, spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1 }
+ }
+}
+
+MeasConfigMN ::= SEQUENCE {
+ measuredFrequenciesMN SEQUENCE (SIZE (1..maxMeasFreqsMN)) OF NR-FreqInfo OPTIONAL,
+ measGapConfig SetupRelease { GapConfig } OPTIONAL,
+ gapPurpose ENUMERATED {perUE, perFR1} OPTIONAL,
+ ...,
+ [[
+ measGapConfigFR2 SetupRelease { GapConfig } OPTIONAL
+ ]],
+ [[
+ interFreqNoGap-r16 ENUMERATED {true} OPTIONAL
+ ]]
+}
+
+MRDC-AssistanceInfo ::= SEQUENCE {
+ affectedCarrierFreqCombInfoListMRDC SEQUENCE (SIZE (1..maxNrofCombIDC)) OF AffectedCarrierFreqCombInfoMRDC,
+ ...,
+ [[
+ overheatingAssistanceSCG-r16 OCTET STRING (CONTAINING OverheatingAssistance) OPTIONAL
+ ]],
+ [[
+ overheatingAssistanceSCG-FR2-2-r17 OCTET STRING (CONTAINING OverheatingAssistance-r17) OPTIONAL
+ ]]
+}
+
+AffectedCarrierFreqCombInfoMRDC ::= SEQUENCE {
+ victimSystemType VictimSystemType,
+ interferenceDirectionMRDC ENUMERATED {eutra-nr, nr, other, utra-nr-other, nr-other, spare3, spare2, spare1},
+ affectedCarrierFreqCombMRDC SEQUENCE {
+ affectedCarrierFreqCombEUTRA AffectedCarrierFreqCombEUTRA OPTIONAL,
+ affectedCarrierFreqCombNR AffectedCarrierFreqCombNR
+ } OPTIONAL
+}
+
+VictimSystemType ::= SEQUENCE {
+ gps ENUMERATED {true} OPTIONAL,
+ glonass ENUMERATED {true} OPTIONAL,
+ bds ENUMERATED {true} OPTIONAL,
+ galileo ENUMERATED {true} OPTIONAL,
+ wlan ENUMERATED {true} OPTIONAL,
+ bluetooth ENUMERATED {true} OPTIONAL
+}
+
+AffectedCarrierFreqCombEUTRA ::= SEQUENCE (SIZE (1..maxNrofServingCellsEUTRA)) OF ARFCN-ValueEUTRA
+
+AffectedCarrierFreqCombNR ::= SEQUENCE (SIZE (1..maxNrofServingCells)) OF ARFCN-ValueNR
+
+CandidateCellListCPC-r17 ::= SEQUENCE (SIZE (1..maxFreq)) OF CandidateCellCPC-r17
+
+CandidateCellCPC-r17 ::= SEQUENCE {
+ ssbFrequency-r17 ARFCN-ValueNR,
+ candidateCellList-r17 SEQUENCE (SIZE (1..maxNrofCondCells-r16)) OF PhysCellId
+}
+
+-- TAG-CG-CONFIG-INFO-STOP
+-- TAG-MEASUREMENT-TIMING-CONFIGURATION-START
+
+MeasurementTimingConfiguration ::= SEQUENCE {
+ criticalExtensions CHOICE {
+ c1 CHOICE{
+ measTimingConf MeasurementTimingConfiguration-IEs,
+ spare3 NULL, spare2 NULL, spare1 NULL
+ },
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+MeasurementTimingConfiguration-IEs ::= SEQUENCE {
+ measTiming MeasTimingList OPTIONAL,
+ nonCriticalExtension MeasurementTimingConfiguration-v1550-IEs OPTIONAL
+}
+
+MeasurementTimingConfiguration-v1550-IEs ::= SEQUENCE {
+ campOnFirstSSB BOOLEAN,
+ psCellOnlyOnFirstSSB BOOLEAN,
+ nonCriticalExtension MeasurementTimingConfiguration-v1610-IEs OPTIONAL
+}
+
+MeasurementTimingConfiguration-v1610-IEs ::= SEQUENCE {
+ csi-RS-Config-r16 SEQUENCE {
+ csi-RS-SubcarrierSpacing-r16 SubcarrierSpacing,
+ csi-RS-CellMobility-r16 CSI-RS-CellMobility,
+ refSSBFreq-r16 ARFCN-ValueNR
+ },
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+MeasTimingList ::= SEQUENCE (SIZE (1..maxMeasFreqsMN)) OF MeasTiming
+
+MeasTiming ::= SEQUENCE {
+ frequencyAndTiming SEQUENCE {
+ carrierFreq ARFCN-ValueNR,
+ ssbSubcarrierSpacing SubcarrierSpacing,
+ ssb-MeasurementTimingConfiguration SSB-MTC,
+ ss-RSSI-Measurement SS-RSSI-Measurement OPTIONAL
+ } OPTIONAL,
+ ...,
+ [[
+ ssb-ToMeasure SSB-ToMeasure OPTIONAL,
+ physCellId PhysCellId OPTIONAL
+ ]]
+}
+
+-- TAG-MEASUREMENT-TIMING-CONFIGURATION-STOP
+-- TAG-UE-RADIO-PAGING-INFORMATION-START
+
+UERadioPagingInformation ::= SEQUENCE {
+ criticalExtensions CHOICE {
+ c1 CHOICE{
+ ueRadioPagingInformation UERadioPagingInformation-IEs,
+ spare7 NULL,
+ spare6 NULL, spare5 NULL, spare4 NULL,
+ spare3 NULL, spare2 NULL, spare1 NULL
+ },
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+UERadioPagingInformation-IEs ::= SEQUENCE {
+ supportedBandListNRForPaging SEQUENCE (SIZE (1..maxBands)) OF FreqBandIndicatorNR OPTIONAL,
+ nonCriticalExtension UERadioPagingInformation-v15e0-IEs OPTIONAL
+}
+
+UERadioPagingInformation-v15e0-IEs ::= SEQUENCE {
+ dl-SchedulingOffset-PDSCH-TypeA-FDD-FR1 ENUMERATED {supported} OPTIONAL,
+ dl-SchedulingOffset-PDSCH-TypeA-TDD-FR1 ENUMERATED {supported} OPTIONAL,
+ dl-SchedulingOffset-PDSCH-TypeA-TDD-FR2 ENUMERATED {supported} OPTIONAL,
+ dl-SchedulingOffset-PDSCH-TypeB-FDD-FR1 ENUMERATED {supported} OPTIONAL,
+ dl-SchedulingOffset-PDSCH-TypeB-TDD-FR1 ENUMERATED {supported} OPTIONAL,
+ dl-SchedulingOffset-PDSCH-TypeB-TDD-FR2 ENUMERATED {supported} OPTIONAL,
+ nonCriticalExtension UERadioPagingInformation-v1700-IEs OPTIONAL
+}
+
+UERadioPagingInformation-v1700-IEs ::= SEQUENCE {
+ ue-RadioPagingInfo-r17 OCTET STRING (CONTAINING UE-RadioPagingInfo-r17) OPTIONAL,
+ inactiveStatePO-Determination-r17 ENUMERATED {supported} OPTIONAL,
+ numberOfRxRedCap-r17 ENUMERATED {one, two} OPTIONAL,
+ halfDuplexFDD-TypeA-RedCap-r17 SEQUENCE (SIZE (1..maxBands)) OF FreqBandIndicatorNR OPTIONAL,
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+-- TAG-UE-RADIO-PAGING-INFORMATION-STOP
+-- TAG-UE-RADIO-ACCESS-CAPABILITY-INFORMATION-START
+
+UERadioAccessCapabilityInformation ::= SEQUENCE {
+ criticalExtensions CHOICE {
+ c1 CHOICE{
+ ueRadioAccessCapabilityInformation UERadioAccessCapabilityInformation-IEs,
+ spare7 NULL,
+ spare6 NULL, spare5 NULL, spare4 NULL,
+ spare3 NULL, spare2 NULL, spare1 NULL
+ },
+ criticalExtensionsFuture SEQUENCE {}
+ }
+}
+
+UERadioAccessCapabilityInformation-IEs ::= SEQUENCE {
+ ue-RadioAccessCapabilityInfo OCTET STRING (CONTAINING UE-CapabilityRAT-ContainerList),
+ nonCriticalExtension SEQUENCE {} OPTIONAL
+}
+
+-- TAG-UE-RADIO-ACCESS-CAPABILITY-INFORMATION-STOP
+-- TAG-NR-MULTIPLICITY-AND-CONSTRAINTS-START
+
+maxMeasFreqsMN INTEGER ::= 32 -- Maximum number of MN-configured measurement frequencies
+maxMeasFreqsSN INTEGER ::= 32 -- Maximum number of SN-configured measurement frequencies
+maxMeasIdentitiesMN INTEGER ::= 62 -- Maximum number of measurement identities that a UE can be configured with
+maxCellPrep INTEGER ::= 32 -- Maximum number of cells prepared for handover
+
+-- TAG-NR-MULTIPLICITY-AND-CONSTRAINTS-STOP
+
+END
+
diff --git a/openair2/RRC/NR/MESSAGES/ASN.1/nr-rrc-17.3.0.cmake b/openair2/RRC/NR/MESSAGES/ASN.1/nr-rrc-17.3.0.cmake
new file mode 100644
index 0000000000..28416eabba
--- /dev/null
+++ b/openair2/RRC/NR/MESSAGES/ASN.1/nr-rrc-17.3.0.cmake
@@ -0,0 +1,4183 @@
+set(NR_RRC_GRAMMAR ASN.1/nr-rrc-17.3.0.asn1)
+
+set(nr_rrc_source
+asn_application.c
+asn_bit_data.c
+asn_codecs_prim.c
+asn_internal.c
+asn_random_fill.c
+asn_SEQUENCE_OF.c
+asn_SET_OF.c
+ber_decoder.c
+ber_tlv_length.c
+ber_tlv_tag.c
+BIT_STRING.c
+BOOLEAN.c
+constraints.c
+constr_CHOICE.c
+constr_SEQUENCE.c
+constr_SEQUENCE_OF.c
+constr_SET_OF.c
+constr_TYPE.c
+der_encoder.c
+INTEGER.c
+NativeEnumerated.c
+NativeInteger.c
+NR_AbsoluteTimeInfo-r16.c
+NR_AccessStratumRelease.c
+NR_AccessStratumReleaseSidelink-r16.c
+NR_AdditionalPCIIndex-r17.c
+NR_AdditionalRACH-ConfigList-r17.c
+NR_AdditionalRACH-Config-r17.c
+NR_AdditionalSpectrumEmission.c
+NR_AffectedCarrierFreqCombEUTRA.c
+NR_AffectedCarrierFreqCombInfoMRDC.c
+NR_AffectedCarrierFreqCombList-r16.c
+NR_AffectedCarrierFreqCombNR.c
+NR_AffectedCarrierFreqComb-r16.c
+NR_AffectedCarrierFreqList-r16.c
+NR_AffectedCarrierFreq-r16.c
+NR_AggregatedBandwidth.c
+NR_AI-RNTI-r16.c
+NR_Alpha.c
+NR_AMF-Identifier.c
+NR_AppLayerBufferLevel-r17.c
+NR_AppLayerMeasConfig-r17.c
+NR_AppLayerMeasParameters-r17.c
+NR_ApplicableDisasterInfo-r17.c
+NR_AreaConfig-r16.c
+NR_AreaConfiguration-r16.c
+NR_AreaConfiguration-v1700.c
+NR_ARFCN-ValueEUTRA.c
+NR_ARFCN-ValueNR.c
+NR_ARFCN-ValueUTRA-FDD-r16.c
+NR_AS-Config.c
+NR_AS-Context.c
+NR_AvailabilityCombinationId-r16.c
+NR_AvailabilityCombination-r16.c
+NR_AvailabilityCombinationRB-Groups-r17.c
+NR_AvailabilityCombinationsPerCellIndex-r16.c
+NR_AvailabilityCombinationsPerCell-r16.c
+NR_AvailabilityIndicator-r16.c
+NR_AvailableRB-SetsPerCell-r16.c
+NR_AvailableSlotOffset-r17.c
+NR_BandCombination.c
+NR_BandCombinationIndex.c
+NR_BandCombinationInfo.c
+NR_BandCombinationInfoList.c
+NR_BandCombinationInfoSN.c
+NR_BandCombinationList.c
+NR_BandCombinationListSidelinkEUTRA-NR-r16.c
+NR_BandCombinationListSidelinkEUTRA-NR-v1630.c
+NR_BandCombinationListSidelinkEUTRA-NR-v1710.c
+NR_BandCombinationListSidelinkNR-r16.c
+NR_BandCombinationListSidelinkNR-v1710.c
+NR_BandCombinationListSL-Discovery-r17.c
+NR_BandCombinationList-UplinkTxSwitch-r16.c
+NR_BandCombinationList-UplinkTxSwitch-v1630.c
+NR_BandCombinationList-UplinkTxSwitch-v1640.c
+NR_BandCombinationList-UplinkTxSwitch-v1650.c
+NR_BandCombinationList-UplinkTxSwitch-v1670.c
+NR_BandCombinationList-UplinkTxSwitch-v1690.c
+NR_BandCombinationList-UplinkTxSwitch-v16a0.c
+NR_BandCombinationList-UplinkTxSwitch-v1700.c
+NR_BandCombinationList-UplinkTxSwitch-v1720.c
+NR_BandCombinationList-UplinkTxSwitch-v1730.c
+NR_BandCombinationList-v1540.c
+NR_BandCombinationList-v1550.c
+NR_BandCombinationList-v1560.c
+NR_BandCombinationList-v1570.c
+NR_BandCombinationList-v1580.c
+NR_BandCombinationList-v1590.c
+NR_BandCombinationList-v15g0.c
+NR_BandCombinationList-v1610.c
+NR_BandCombinationList-v1630.c
+NR_BandCombinationList-v1640.c
+NR_BandCombinationList-v1650.c
+NR_BandCombinationList-v1680.c
+NR_BandCombinationList-v1690.c
+NR_BandCombinationList-v16a0.c
+NR_BandCombinationList-v1700.c
+NR_BandCombinationList-v1720.c
+NR_BandCombinationList-v1730.c
+NR_BandCombinationParametersSidelinkEUTRA-NR-r16.c
+NR_BandCombinationParametersSidelinkEUTRA-NR-v1630.c
+NR_BandCombinationParametersSidelinkEUTRA-NR-v1710.c
+NR_BandCombinationParametersSidelinkNR-r16.c
+NR_BandCombinationParametersSidelinkNR-v1710.c
+NR_BandCombination-UplinkTxSwitch-r16.c
+NR_BandCombination-UplinkTxSwitch-v1630.c
+NR_BandCombination-UplinkTxSwitch-v1640.c
+NR_BandCombination-UplinkTxSwitch-v1650.c
+NR_BandCombination-UplinkTxSwitch-v1670.c
+NR_BandCombination-UplinkTxSwitch-v1690.c
+NR_BandCombination-UplinkTxSwitch-v16a0.c
+NR_BandCombination-UplinkTxSwitch-v1700.c
+NR_BandCombination-UplinkTxSwitch-v1720.c
+NR_BandCombination-UplinkTxSwitch-v1730.c
+NR_BandCombination-v1540.c
+NR_BandCombination-v1550.c
+NR_BandCombination-v1560.c
+NR_BandCombination-v1570.c
+NR_BandCombination-v1580.c
+NR_BandCombination-v1590.c
+NR_BandCombination-v15g0.c
+NR_BandCombination-v1610.c
+NR_BandCombination-v1630.c
+NR_BandCombination-v1640.c
+NR_BandCombination-v1650.c
+NR_BandCombination-v1680.c
+NR_BandCombination-v1690.c
+NR_BandCombination-v16a0.c
+NR_BandCombination-v1700.c
+NR_BandCombination-v1720.c
+NR_BandCombination-v1730.c
+NR_BandEntryIndex.c
+NR_BandNR.c
+NR_BandParameters.c
+NR_BandParametersSidelinkDiscovery-r17.c
+NR_BandParametersSidelinkEUTRA-NR-r16.c
+NR_BandParametersSidelinkEUTRA-NR-v1630.c
+NR_BandParametersSidelinkEUTRA-NR-v1710.c
+NR_BandParametersSidelink-r16.c
+NR_BandParametersSidelink-v1710.c
+NR_BandParameters-v1540.c
+NR_BandParameters-v1610.c
+NR_BandParameters-v1710.c
+NR_BandParameters-v1730.c
+NR_BandSidelinkEUTRA-r16.c
+NR_BandSidelinkPC5-r16.c
+NR_BandSidelink-r16.c
+NR_BAP-Config-r16.c
+NR_BAP-Parameters-r16.c
+NR_BAP-Parameters-v1700.c
+NR_BAP-RoutingID-r16.c
+NR_BCCH-BCH-Message.c
+NR_BCCH-BCH-MessageType.c
+NR_BCCH-Config.c
+NR_BCCH-DL-SCH-Message.c
+NR_BCCH-DL-SCH-MessageType.c
+NR_BeamFailureDetection-r17.c
+NR_BeamFailureDetectionSet-r17.c
+NR_BeamFailureRecoveryConfig.c
+NR_BeamFailureRecoveryRSConfig-r16.c
+NR_BeamLinkMonitoringRS-Id-r17.c
+NR_BeamLinkMonitoringRS-r17.c
+NR_BeamManagementSSB-CSI-RS.c
+NR_BeamMeasConfigIdle-NR-r16.c
+NR_BetaOffsets.c
+NR_BetaOffsetsCrossPri-r17.c
+NR_BetaOffsetsCrossPriSelCG-r17.c
+NR_BetaOffsetsCrossPriSelDCI-0-2-r17.c
+NR_BetaOffsetsCrossPriSel-r17.c
+NR_BFD-RelaxationReportingConfig-r17.c
+NR_BFR-CSIRS-Resource.c
+NR_BFR-SSB-Resource.c
+NR_BH-LogicalChannelIdentity-Ext-r16.c
+NR_BH-LogicalChannelIdentity-r16.c
+NR_BH-RLC-ChannelConfig-r16.c
+NR_BH-RLC-ChannelID-r16.c
+NR_BSR-Config.c
+NR_BT-NameList-r16.c
+NR_BT-Name-r16.c
+NR_BWP.c
+NR_BWP-Downlink.c
+NR_BWP-DownlinkCommon.c
+NR_BWP-DownlinkDedicated.c
+NR_BWP-DownlinkDedicatedSDT-r17.c
+NR_BWP-Id.c
+NR_BWP-Uplink.c
+NR_BWP-UplinkCommon.c
+NR_BWP-UplinkDedicated.c
+NR_BWP-UplinkDedicatedSDT-r17.c
+NR_CA-BandwidthClassEUTRA.c
+NR_CA-BandwidthClassNR.c
+NR_CAG-IdentityInfo-r16.c
+NR_CandidateBeamRSListExt-r16.c
+NR_CandidateBeamRS-r16.c
+NR_CandidateCellCPC-r17.c
+NR_CandidateCellInfoListCPC-r17.c
+NR_CandidateCellInfo-r17.c
+NR_CandidateCellListCPC-r17.c
+NR_CandidateCell-r17.c
+NR_CandidateServingFreqListEUTRA.c
+NR_CandidateServingFreqListNR.c
+NR_CandidateServingFreqListNR-r16.c
+NR_CA-ParametersEUTRA.c
+NR_CA-ParametersEUTRA-v1560.c
+NR_CA-ParametersEUTRA-v1570.c
+NR_CA-ParametersNR.c
+NR_CA-ParametersNRDC.c
+NR_CA-ParametersNRDC-v15g0.c
+NR_CA-ParametersNRDC-v1610.c
+NR_CA-ParametersNRDC-v1630.c
+NR_CA-ParametersNRDC-v1640.c
+NR_CA-ParametersNRDC-v1650.c
+NR_CA-ParametersNRDC-v16a0.c
+NR_CA-ParametersNRDC-v1700.c
+NR_CA-ParametersNRDC-v1720.c
+NR_CA-ParametersNRDC-v1730.c
+NR_CA-ParametersNR-v1540.c
+NR_CA-ParametersNR-v1550.c
+NR_CA-ParametersNR-v1560.c
+NR_CA-ParametersNR-v15g0.c
+NR_CA-ParametersNR-v1610.c
+NR_CA-ParametersNR-v1630.c
+NR_CA-ParametersNR-v1640.c
+NR_CA-ParametersNR-v1690.c
+NR_CA-ParametersNR-v16a0.c
+NR_CA-ParametersNR-v1700.c
+NR_CA-ParametersNR-v1720.c
+NR_CA-ParametersNR-v1730.c
+NR_CarrierAggregationVariant.c
+NR_CarrierFreqEUTRA.c
+NR_CarrierFreqEUTRA-v1610.c
+NR_CarrierFreqEUTRA-v1700.c
+NR_CarrierFreqListEUTRA.c
+NR_CarrierFreqListEUTRA-v1610.c
+NR_CarrierFreqListEUTRA-v1700.c
+NR_CarrierFreqListMBS-r17.c
+NR_CarrierInfoNR.c
+NR_CarrierState-r17.c
+NR_CarrierTypePair-r16.c
+NR_CC-Group-r17.c
+NR_CC-State-r17.c
+NR_CellAccessRelatedInfo.c
+NR_CellAccessRelatedInfo-EUTRA-5GC.c
+NR_CellAccessRelatedInfo-EUTRA-EPC.c
+NR_CellGlobalIdList-r16.c
+NR_CellGroupConfig.c
+NR_CellGroupForSwitch-r16.c
+NR_CellGroupId.c
+NR_CellGrouping-r16.c
+NR_CellIdentity.c
+NR_CellIdentity-EUTRA-5GC.c
+NR_CellListEUTRA-r16.c
+NR_CellListNR-r16.c
+NR_CellReselectionPriorities.c
+NR_CellReselectionPriority.c
+NR_CellReselectionSubPriority.c
+NR_CellsToAddMod.c
+NR_CellsToAddModExt-v1710.c
+NR_CellsToAddModList.c
+NR_CellsToAddModListExt-v1710.c
+NR_CellsToAddModListUTRA-FDD-r16.c
+NR_CellsToAddModUTRA-FDD-r16.c
+NR_CellsTriggeredList.c
+NR_CFRA.c
+NR_CFRA-CSIRS-Resource.c
+NR_CFRA-SSB-Resource.c
+NR_CFRA-TwoStep-r16.c
+NR_CFR-ConfigMCCH-MTCH-r17.c
+NR_CFR-ConfigMulticast-r17.c
+NR_CG-CandidateInfoId-r17.c
+NR_CG-CandidateInfo-r17.c
+NR_CG-CandidateList.c
+NR_CG-CandidateList-r17-IEs.c
+NR_CG-Config.c
+NR_CG-Config-IEs.c
+NR_CG-ConfigInfo.c
+NR_CG-ConfigInfo-IEs.c
+NR_CG-ConfigInfo-v1540-IEs.c
+NR_CG-ConfigInfo-v1560-IEs.c
+NR_CG-ConfigInfo-v1570-IEs.c
+NR_CG-ConfigInfo-v1590-IEs.c
+NR_CG-ConfigInfo-v1610-IEs.c
+NR_CG-ConfigInfo-v1620-IEs.c
+NR_CG-ConfigInfo-v1640-IEs.c
+NR_CG-ConfigInfo-v1700-IEs.c
+NR_CG-ConfigInfo-v1730-IEs.c
+NR_CG-Config-v1540-IEs.c
+NR_CG-Config-v1560-IEs.c
+NR_CG-Config-v1590-IEs.c
+NR_CG-Config-v1610-IEs.c
+NR_CG-Config-v1620-IEs.c
+NR_CG-Config-v1630-IEs.c
+NR_CG-Config-v1640-IEs.c
+NR_CG-Config-v1700-IEs.c
+NR_CG-Config-v1730-IEs.c
+NR_CG-COT-Sharing-r16.c
+NR_CG-COT-Sharing-r17.c
+NR_CGI-InfoEUTRA.c
+NR_CGI-InfoEUTRALogging.c
+NR_CGI-Info-Logging-r16.c
+NR_CGI-InfoNR.c
+NR_CG-SDT-ConfigLCH-Restriction-r17.c
+NR_CG-SDT-Configuration-r17.c
+NR_CG-SDT-TA-ValidationConfig-r17.c
+NR_CG-StartingOffsets-r16.c
+NR_CG-UCI-OnPUSCH.c
+NR_ChannelAccessConfig-r16.c
+NR_ChoCandidateCellList-r17.c
+NR_ChoCandidateCell-r17.c
+NR_CI-ConfigurationPerServingCell-r16.c
+NR_CipheringAlgorithm.c
+NR_CLI-EventTriggerConfig-r16.c
+NR_CLI-PeriodicalReportConfig-r16.c
+NR_CLI-ResourceConfig-r16.c
+NR_CLI-RSSI-Range-r16.c
+NR_CLI-RSSI-TriggeredList-r16.c
+NR_CLI-TriggeredList-r16.c
+NR_CMRGroupingAndPairing-r17.c
+NR_CodebookComboParameterMixedTypePerBC-r17.c
+NR_CodebookComboParameterMixedType-r17.c
+NR_CodebookComboParameterMultiTRP-PerBC-r17.c
+NR_CodebookComboParameterMultiTRP-r17.c
+NR_CodebookComboParametersAdditionPerBC-r16.c
+NR_CodebookComboParametersAddition-r16.c
+NR_CodebookConfig.c
+NR_CodebookConfig-r16.c
+NR_CodebookConfig-r17.c
+NR_CodebookConfig-v1730.c
+NR_CodebookParametersAdditionPerBC-r16.c
+NR_CodebookParametersAddition-r16.c
+NR_CodebookParameters.c
+NR_CodebookParametersfetype2PerBC-r17.c
+NR_CodebookParametersfetype2-r17.c
+NR_CodebookParameters-v1610.c
+NR_CodebookVariantsList-r16.c
+NR_CO-Duration-r16.c
+NR_CO-Duration-r17.c
+NR_CO-DurationsPerCell-r16.c
+NR_CO-DurationsPerCell-r17.c
+NR_CommonLocationInfo-r16.c
+NR_ConditionalReconfiguration-r16.c
+NR_CondReconfigExecCondSCG-r17.c
+NR_CondReconfigId-r16.c
+NR_CondReconfigToAddModList-r16.c
+NR_CondReconfigToAddMod-r16.c
+NR_CondReconfigToRemoveList-r16.c
+NR_CondTriggerConfig-r16.c
+NR_ConfigRestrictInfoDAPS-r16.c
+NR_ConfigRestrictInfoDAPS-v1640.c
+NR_ConfigRestrictInfoSCG.c
+NR_ConfigRestrictModReqSCG.c
+NR_ConfiguredGrantConfig.c
+NR_ConfiguredGrantConfigIndexMAC-r16.c
+NR_ConfiguredGrantConfigIndex-r16.c
+NR_ConfiguredGrantConfigToAddModList-r16.c
+NR_ConfiguredGrantConfigToReleaseList-r16.c
+NR_ConfiguredGrantConfigType2DeactivationStateList-r16.c
+NR_ConfiguredGrantConfigType2DeactivationState-r16.c
+NR_ConnEstFailReportList-r17.c
+NR_ConnEstFailReport-r16.c
+NR_ConnEstFailureControl.c
+NR_ControlResourceSet.c
+NR_ControlResourceSetId.c
+NR_ControlResourceSetId-r16.c
+NR_ControlResourceSetId-v1610.c
+NR_ControlResourceSetZero.c
+NR_CounterCheck.c
+NR_CounterCheck-IEs.c
+NR_CounterCheckResponse.c
+NR_CounterCheckResponse-IEs.c
+NR_CrossCarrierSchedulingConfig.c
+NR_CrossCarrierSchedulingSCell-SpCell-r17.c
+NR_CRS-InterfMitigation-r17.c
+NR_CSI-AperiodicTriggerState.c
+NR_CSI-AperiodicTriggerStateList.c
+NR_CSI-AssociatedReportConfigInfo.c
+NR_CSI-FrequencyOccupation.c
+NR_CSI-IM-Resource.c
+NR_CSI-IM-ResourceId.c
+NR_CSI-IM-ResourceSet.c
+NR_CSI-IM-ResourceSetId.c
+NR_CSI-MeasConfig.c
+NR_CSI-MultiTRP-SupportedCombinations-r17.c
+NR_CSI-ReportConfig.c
+NR_CSI-ReportConfigId.c
+NR_CSI-ReportFramework.c
+NR_CSI-ReportFrameworkExt-r16.c
+NR_CSI-ReportPeriodicityAndOffset.c
+NR_CSI-ResourceConfig.c
+NR_CSI-ResourceConfigId.c
+NR_CSI-ResourcePeriodicityAndOffset.c
+NR_CSI-RS-CellMobility.c
+NR_CSI-RS-ForTracking.c
+NR_CSI-RS-IM-ReceptionForFeedback.c
+NR_CSI-RS-Index.c
+NR_CSI-RS-ProcFrameworkForSRS.c
+NR_CSI-RS-ResourceConfigMobility.c
+NR_CSI-RS-ResourceMapping.c
+NR_CSI-RS-Resource-Mobility.c
+NR_CSI-SemiPersistentOnPUSCH-TriggerState.c
+NR_CSI-SemiPersistentOnPUSCH-TriggerStateList.c
+NR_CSI-SSB-ResourceSet.c
+NR_CSI-SSB-ResourceSetId.c
+NR_DAPS-UplinkPowerConfig-r16.c
+NR_DataInactivityTimer.c
+NR_DCP-Config-r16.c
+NR_DeactivatedSCG-Config-r17.c
+NR_DedicatedInfoF1c-r17.c
+NR_DedicatedNAS-Message.c
+NR_DedicatedSIBRequest-r16.c
+NR_DedicatedSIBRequest-r16-IEs.c
+NR_DefaultDC-Location-r17.c
+NR_DelayBudgetReport.c
+NR_DiscardTimerExt2-r17.c
+NR_DiscardTimerExt-r16.c
+NR_DL-AM-RLC.c
+NR_DL-AM-RLC-v1610.c
+NR_DL-AM-RLC-v1700.c
+NR_DL-CCCH-Message.c
+NR_DL-CCCH-MessageType.c
+NR_DL-DataToUL-ACK-DCI-1-2-r16.c
+NR_DL-DataToUL-ACK-DCI-1-2-r17.c
+NR_DL-DataToUL-ACK-MulticastDCI-Format4-1-r17.c
+NR_DL-DataToUL-ACK-r16.c
+NR_DL-DataToUL-ACK-r17.c
+NR_DL-DataToUL-ACK-v1700.c
+NR_DL-DCCH-Message.c
+NR_DL-DCCH-MessageType.c
+NR_DLDedicatedMessageSegment-r16.c
+NR_DLDedicatedMessageSegment-r16-IEs.c
+NR_DLInformationTransfer.c
+NR_DLInformationTransfer-IEs.c
+NR_DLInformationTransferMRDC-r16.c
+NR_DLInformationTransferMRDC-r16-IEs.c
+NR_DLInformationTransfer-v1610-IEs.c
+NR_DLInformationTransfer-v1700-IEs.c
+NR_DL-PPW-ID-r17.c
+NR_DL-PPW-PeriodicityAndStartSlot-r17.c
+NR_DL-PPW-PreConfig-r17.c
+NR_DL-PPW-PreConfigToAddModList-r17.c
+NR_DL-PPW-PreConfigToReleaseList-r17.c
+NR_DL-PRS-Info-r16.c
+NR_DL-PRS-QCL-Info-r17.c
+NR_DL-UM-RLC.c
+NR_DL-UM-RLC-v1700.c
+NR_DMRS-BundlingPUCCH-Config-r17.c
+NR_DMRS-BundlingPUSCH-Config-r17.c
+NR_DMRS-DownlinkConfig.c
+NR_DMRS-UplinkConfig.c
+NR_DMRS-UplinkTransformPrecoding-r16.c
+NR_DormancyGroupID-r16.c
+NR_DormantBWP-Config-r16.c
+NR_DownlinkConfigCommon.c
+NR_DownlinkConfigCommonSIB.c
+NR_DownlinkHARQ-FeedbackDisabled-r17.c
+NR_DownlinkPreemption.c
+NR_DRB-CountInfo.c
+NR_DRB-CountInfoList.c
+NR_DRB-CountMSB-Info.c
+NR_DRB-CountMSB-InfoList.c
+NR_DRB-Identity.c
+NR_DRB-ToAddMod.c
+NR_DRB-ToAddModList.c
+NR_DRB-ToReleaseList.c
+NR_DRX-Config.c
+NR_DRX-ConfigExt-v1700.c
+NR_DRX-ConfigPTM-Index-r17.c
+NR_DRX-ConfigPTM-r17.c
+NR_DRX-ConfigSecondaryGroup-r16.c
+NR_DRX-ConfigSL-r17.c
+NR_DRX-Info2.c
+NR_DRX-Info.c
+NR_DRX-PreferenceConfig-r16.c
+NR_DRX-Preference-r16.c
+NR_DummyA.c
+NR_DummyB.c
+NR_DummyC.c
+NR_DummyD.c
+NR_DummyE.c
+NR_DummyF.c
+NR_DummyG.c
+NR_DummyH.c
+NR_DummyI.c
+NR_DummyJ.c
+NR_DummyPathlossReferenceRS-v1710.c
+NR_Dummy-TDRA-List.c
+NR_EphemerisInfo-r17.c
+NR_EpochTime-r17.c
+NR_EstablishmentCause.c
+NR_EthernetHeaderCompression-r16.c
+NR_EUTRA-AllowedMeasBandwidth.c
+NR_EUTRA-Cell.c
+NR_EUTRA-CellIndex.c
+NR_EUTRA-CellIndexList.c
+NR_EUTRA-ExcludedCell.c
+NR_EUTRA-FreqExcludedCellList.c
+NR_EUTRA-FreqNeighCellInfo.c
+NR_EUTRA-FreqNeighCellList.c
+NR_EUTRA-FreqNeighHSDN-CellList-r17.c
+NR_EUTRA-MBSFN-SubframeConfig.c
+NR_EUTRA-MBSFN-SubframeConfigList.c
+NR_EUTRA-MultiBandInfo.c
+NR_EUTRA-MultiBandInfoList.c
+NR_EUTRA-NS-PmaxList.c
+NR_EUTRA-NS-PmaxValue.c
+NR_EUTRA-Parameters.c
+NR_EUTRA-ParametersCommon.c
+NR_EUTRA-ParametersXDD-Diff.c
+NR_EUTRA-PhysCellId.c
+NR_EUTRA-PhysCellIdRange.c
+NR_EUTRA-PresenceAntennaPort1.c
+NR_EUTRA-Q-OffsetRange.c
+NR_EUTRA-RSTD-Info.c
+NR_EUTRA-RSTD-InfoList.c
+NR_EventTriggerConfig.c
+NR_EventTriggerConfigInterRAT.c
+NR_EventTriggerConfigNR-SL-r16.c
+NR_EventType-r16.c
+NR_ExcessDelay-DRB-IdentityInfo-r17.c
+NR_ExtendedPagingCycle-r17.c
+NR_FailureInfoDAPS-r16.c
+NR_FailureInfoRLC-Bearer.c
+NR_FailureInformation.c
+NR_FailureInformation-IEs.c
+NR_FailureInformation-v1610-IEs.c
+NR_FailureReportMCG-r16.c
+NR_FailureReportSCG.c
+NR_FailureReportSCG-EUTRA.c
+NR_FDM-TDM-r16.c
+NR_FeatureCombinationPreambles-r17.c
+NR_FeatureCombination-r17.c
+NR_FeaturePriority-r17.c
+NR_FeatureSet.c
+NR_FeatureSetCombination.c
+NR_FeatureSetCombinationId.c
+NR_FeatureSetDownlink.c
+NR_FeatureSetDownlinkId.c
+NR_FeatureSetDownlinkPerCC.c
+NR_FeatureSetDownlinkPerCC-Id.c
+NR_FeatureSetDownlinkPerCC-v1620.c
+NR_FeatureSetDownlinkPerCC-v1700.c
+NR_FeatureSetDownlinkPerCC-v1720.c
+NR_FeatureSetDownlinkPerCC-v1730.c
+NR_FeatureSetDownlink-v1540.c
+NR_FeatureSetDownlink-v15a0.c
+NR_FeatureSetDownlink-v1610.c
+NR_FeatureSetDownlink-v1700.c
+NR_FeatureSetDownlink-v1720.c
+NR_FeatureSetDownlink-v1730.c
+NR_FeatureSetEntryIndex.c
+NR_FeatureSetEUTRA-DownlinkId.c
+NR_FeatureSetEUTRA-UplinkId.c
+NR_FeatureSets.c
+NR_FeatureSetsPerBand.c
+NR_FeatureSetUplink.c
+NR_FeatureSetUplinkId.c
+NR_FeatureSetUplinkPerCC.c
+NR_FeatureSetUplinkPerCC-Id.c
+NR_FeatureSetUplinkPerCC-v1540.c
+NR_FeatureSetUplinkPerCC-v1700.c
+NR_FeatureSetUplink-v1540.c
+NR_FeatureSetUplink-v1610.c
+NR_FeatureSetUplink-v1630.c
+NR_FeatureSetUplink-v1640.c
+NR_FeatureSetUplink-v1710.c
+NR_FeatureSetUplink-v1720.c
+NR_FilterCoefficient.c
+NR_FilterConfig.c
+NR_FilterConfigCLI-r16.c
+NR_FR2-2-AccessParamsPerBand-r17.c
+NR_FreqBandIndicatorEUTRA.c
+NR_FreqBandIndicatorNR.c
+NR_FreqBandInformation.c
+NR_FreqBandInformationEUTRA.c
+NR_FreqBandInformationNR.c
+NR_FreqBandList.c
+NR_FreqPriorityDedicatedSlicing-r17.c
+NR_FreqPriorityEUTRA.c
+NR_FreqPriorityListDedicatedSlicing-r17.c
+NR_FreqPriorityListEUTRA.c
+NR_FreqPriorityListNR.c
+NR_FreqPriorityListSlicing-r17.c
+NR_FreqPriorityNR.c
+NR_FreqPrioritySlicing-r17.c
+NR_FreqSeparationClass.c
+NR_FreqSeparationClassDL-Only-r16.c
+NR_FreqSeparationClassDL-v1620.c
+NR_FreqSeparationClassUL-v1620.c
+NR_FrequencyComponent-r17.c
+NR_FrequencyConfig-NR-r16.c
+NR_FrequencyHoppingOffsetListsDCI-0-2-r16.c
+NR_FrequencyInfoDL.c
+NR_FrequencyInfoDL-SIB.c
+NR_FrequencyInfoUL.c
+NR_FrequencyInfoUL-SIB.c
+NR_FR-Info.c
+NR_FR-InfoList.c
+NR_GapConfig.c
+NR_GapConfig-r17.c
+NR_GapPriority-r17.c
+NR_GeneralParametersMRDC-v1610.c
+NR_GeneralParametersMRDC-XDD-Diff.c
+NR_GIN-Element-r17.c
+NR_GINs-PerSNPN-r17.c
+NR_GNSS-ID-r16.c
+NR_GoodServingCellEvaluation-r17.c
+NR_GroupB-ConfiguredTwoStepRA-r16.c
+NR_GuardBand-r16.c
+NR_HandoverCommand.c
+NR_HandoverCommand-IEs.c
+NR_HandoverPreparationInformation.c
+NR_HandoverPreparationInformation-IEs.c
+NR_HighSpeedConfigFR2-r17.c
+NR_HighSpeedConfig-r16.c
+NR_HighSpeedConfig-v1700.c
+NR_HighSpeedParameters-r16.c
+NR_HighSpeedParameters-v1650.c
+NR_HighSpeedParameters-v1700.c
+NR_HRNN-List-r16.c
+NR_HRNN-r16.c
+NR_Hysteresis.c
+NR_HysteresisLocation-r17.c
+NR_IAB-IP-AddressAndTraffic-r16.c
+NR_IAB-IP-AddressConfigurationList-r16.c
+NR_IAB-IP-AddressConfiguration-r16.c
+NR_IAB-IP-AddressIndex-r16.c
+NR_IAB-IP-AddressNumReq-r16.c
+NR_IAB-IP-AddressPrefixReq-r16.c
+NR_IAB-IP-Address-r16.c
+NR_IAB-IP-PrefixAndTraffic-r16.c
+NR_IAB-IP-Usage-r16.c
+NR_IABOtherInformation-r16.c
+NR_IABOtherInformation-r16-IEs.c
+NR_IAB-ResourceConfigID-r17.c
+NR_IAB-ResourceConfig-r17.c
+NR_IDC-AssistanceConfig-r16.c
+NR_IDC-Assistance-r16.c
+NR_IMS-Parameters.c
+NR_IMS-ParametersCommon.c
+NR_IMS-ParametersFR2-2-r17.c
+NR_IMS-ParametersFRX-Diff.c
+NR_IMS-Parameters-v1700.c
+NR_InitialUE-Identity.c
+NR_INT-ConfigurationPerServingCell.c
+NR_IntegrityProtAlgorithm.c
+NR_InterFreqAllowedCellList-r16.c
+NR_InterFreqCAG-CellListPerPLMN-r16.c
+NR_InterFreqCarrierFreqInfo.c
+NR_InterFreqCarrierFreqInfo-v1610.c
+NR_InterFreqCarrierFreqInfo-v1700.c
+NR_InterFreqCarrierFreqInfo-v1720.c
+NR_InterFreqCarrierFreqInfo-v1730.c
+NR_InterFreqCarrierFreqList.c
+NR_InterFreqCarrierFreqList-v1610.c
+NR_InterFreqCarrierFreqList-v1700.c
+NR_InterFreqCarrierFreqList-v1720.c
+NR_InterFreqCarrierFreqList-v1730.c
+NR_InterFreqExcludedCellList.c
+NR_InterFreqNeighCellInfo.c
+NR_InterFreqNeighCellInfo-v1610.c
+NR_InterFreqNeighCellInfo-v1710.c
+NR_InterFreqNeighCellList.c
+NR_InterFreqNeighCellList-v1610.c
+NR_InterFreqNeighCellList-v1710.c
+NR_InterFreqNeighHSDN-CellList-r17.c
+NR_InterFreqTargetInfo-r16.c
+NR_InterRAT-Parameters.c
+NR_IntraBandCC-Combination-r17.c
+NR_IntraBandCC-CombinationReqList-r17.c
+NR_IntraBandPowerClass-r16.c
+NR_IntraCellGuardBandsPerSCS-r16.c
+NR_IntraFreqAllowedCellList-r16.c
+NR_IntraFreqCAG-CellListPerPLMN-r16.c
+NR_IntraFreqExcludedCellList.c
+NR_IntraFreqNeighCellInfo.c
+NR_IntraFreqNeighCellInfo-v1610.c
+NR_IntraFreqNeighCellInfo-v1710.c
+NR_IntraFreqNeighCellList.c
+NR_IntraFreqNeighCellList-v1610.c
+NR_IntraFreqNeighCellList-v1710.c
+NR_IntraFreqNeighHSDN-CellList-r17.c
+NR_InvalidSymbolPattern-r16.c
+NR_I-RNTI-Value.c
+NR_LBT-FailureRecoveryConfig-r16.c
+NR_LocationAndBandwidthBroadcast-r17.c
+NR_LocationInfo-r16.c
+NR_LocationMeasurementIndication.c
+NR_LocationMeasurementIndication-IEs.c
+NR_LocationMeasurementInfo.c
+NR_LoggedEventTriggerConfig-r16.c
+NR_LoggedMeasurementConfiguration-r16.c
+NR_LoggedMeasurementConfiguration-r16-IEs.c
+NR_LoggedMeasurementConfiguration-v1700-IEs.c
+NR_LoggedPeriodicalReportConfig-r16.c
+NR_LoggingDuration-r16.c
+NR_LoggingInterval-r16.c
+NR_LogicalChannelConfig.c
+NR_LogicalChannelIdentity.c
+NR_LogicalChannelIdentityExt-r17.c
+NR_LogMeasInfoList-r16.c
+NR_LogMeasInfo-r16.c
+NR_LogMeasReport-r16.c
+NR_LogMeasResultBT-r16.c
+NR_LogMeasResultListBT-r16.c
+NR_LogMeasResultListWLAN-r16.c
+NR_LogMeasResultWLAN-r16.c
+NR_LTE-CRS-PatternList-r16.c
+NR_LTE-NeighCellsCRS-AssistInfoList-r17.c
+NR_LTE-NeighCellsCRS-AssistInfo-r17.c
+NR_MAC-CellGroupConfig.c
+NR_MAC-MainConfigSL-r16.c
+NR_MAC-Parameters.c
+NR_MAC-ParametersCommon.c
+NR_MAC-ParametersFR2-2-r17.c
+NR_MAC-ParametersFRX-Diff-r16.c
+NR_MAC-ParametersSidelinkCommon-r16.c
+NR_MAC-ParametersSidelink-r16.c
+NR_MAC-ParametersSidelink-r17.c
+NR_MAC-ParametersSidelinkXDD-Diff-r16.c
+NR_MAC-Parameters-v1610.c
+NR_MAC-Parameters-v1700.c
+NR_MAC-ParametersXDD-Diff.c
+NR_MasterInformationBlockSidelink.c
+NR_MasterKeyUpdate.c
+NR_MaxBW-PreferenceConfig-r16.c
+NR_MaxBW-PreferenceFR2-2-r17.c
+NR_MaxBW-Preference-r16.c
+NR_MaxCC-PreferenceConfig-r16.c
+NR_MaxCC-Preference-r16.c
+NR_MaxMIMO-LayerPreferenceConfig-r16.c
+NR_MaxMIMO-LayerPreferenceFR2-2-r17.c
+NR_MaxMIMO-LayerPreference-r16.c
+NR_MaxMIMO-LayersDCI-0-2-r16.c
+NR_MaxMIMO-LayersDL-r16.c
+NR_MBSBroadcastConfiguration-r17.c
+NR_MBSBroadcastConfiguration-r17-IEs.c
+NR_MBS-FSAI-InterFreqList-r17.c
+NR_MBS-FSAI-InterFreq-r17.c
+NR_MBS-FSAI-List-r17.c
+NR_MBS-FSAI-r17.c
+NR_MBSInterestIndication-r17.c
+NR_MBSInterestIndication-r17-IEs.c
+NR_MBS-NeighbourCellList-r17.c
+NR_MBS-NeighbourCell-r17.c
+NR_MBS-Parameters-r17.c
+NR_MBS-RNTI-SpecificConfigId-r17.c
+NR_MBS-RNTI-SpecificConfig-r17.c
+NR_MBS-ServiceInfo-r17.c
+NR_MBS-ServiceList-r17.c
+NR_MBS-SessionInfoList-r17.c
+NR_MBS-SessionInfo-r17.c
+NR_MCC.c
+NR_MCCH-Config-r17.c
+NR_MCCH-Message-r17.c
+NR_MCCH-MessageType-r17.c
+NR_MCCH-RepetitionPeriodAndOffset-r17.c
+NR_MCC-MNC-Digit.c
+NR_MCGFailureInformation-r16.c
+NR_MCGFailureInformation-r16-IEs.c
+NR_MeasAndMobParameters.c
+NR_MeasAndMobParametersCommon.c
+NR_MeasAndMobParametersFR2-2-r17.c
+NR_MeasAndMobParametersFRX-Diff.c
+NR_MeasAndMobParametersMRDC.c
+NR_MeasAndMobParametersMRDC-Common.c
+NR_MeasAndMobParametersMRDC-Common-v1610.c
+NR_MeasAndMobParametersMRDC-Common-v1700.c
+NR_MeasAndMobParametersMRDC-Common-v1730.c
+NR_MeasAndMobParametersMRDC-FRX-Diff.c
+NR_MeasAndMobParametersMRDC-v1560.c
+NR_MeasAndMobParametersMRDC-v1610.c
+NR_MeasAndMobParametersMRDC-v1700.c
+NR_MeasAndMobParametersMRDC-v1730.c
+NR_MeasAndMobParametersMRDC-XDD-Diff.c
+NR_MeasAndMobParametersMRDC-XDD-Diff-v1560.c
+NR_MeasAndMobParameters-v1700.c
+NR_MeasAndMobParametersXDD-Diff.c
+NR_MeasConfigAppLayerId-r17.c
+NR_MeasConfigAppLayer-r17.c
+NR_MeasConfig.c
+NR_MeasConfigMN.c
+NR_MeasConfigSN.c
+NR_MeasGapConfig.c
+NR_MeasGapId-r17.c
+NR_MeasGapSharingConfig.c
+NR_MeasGapSharingScheme.c
+NR_MeasId.c
+NR_MeasIdleCarrierEUTRA-r16.c
+NR_MeasIdleCarrierNR-r16.c
+NR_MeasIdleConfigDedicated-r16.c
+NR_MeasIdleConfigSIB-r16.c
+NR_MeasIdToAddMod.c
+NR_MeasIdToAddModList.c
+NR_MeasIdToRemoveList.c
+NR_MeasObjectCLI-r16.c
+NR_MeasObjectEUTRA.c
+NR_MeasObjectId.c
+NR_MeasObjectNR.c
+NR_MeasObjectNR-SL-r16.c
+NR_MeasObjectRxTxDiff-r17.c
+NR_MeasObjectToAddMod.c
+NR_MeasObjectToAddModList.c
+NR_MeasObjectToRemoveList.c
+NR_MeasObjectUTRA-FDD-r16.c
+NR_MeasPosPreConfigGapId-r17.c
+NR_MeasQuantityResults.c
+NR_MeasQuantityResultsEUTRA.c
+NR_MeasReportAppLayer-r17.c
+NR_MeasReportQuantity.c
+NR_MeasReportQuantityCLI-r16.c
+NR_MeasReportQuantity-r16.c
+NR_MeasReportQuantityUTRA-FDD-r16.c
+NR_MeasResult2EUTRA.c
+NR_MeasResult2EUTRA-r16.c
+NR_MeasResult2NR.c
+NR_MeasResult2NR-r16.c
+NR_MeasResult2UTRA-FDD-r16.c
+NR_MeasResultCBR-NR-r16.c
+NR_MeasResultCellListSFTD-EUTRA.c
+NR_MeasResultCellListSFTD-NR.c
+NR_MeasResultCellSFTD-NR.c
+NR_MeasResultCLI-r16.c
+NR_MeasResultCLI-RSSI-r16.c
+NR_MeasResultEUTRA.c
+NR_MeasResultFailedCell-r16.c
+NR_MeasResultForRSSI-r16.c
+NR_MeasResultFreqList.c
+NR_MeasResultFreqListFailMRDC.c
+NR_MeasResultIdleEUTRA-r16.c
+NR_MeasResultIdleNR-r16.c
+NR_MeasResultList2EUTRA.c
+NR_MeasResultList2EUTRA-r16.c
+NR_MeasResultList2NR.c
+NR_MeasResultList2NR-r16.c
+NR_MeasResultList2UTRA.c
+NR_MeasResultListCLI-RSSI-r16.c
+NR_MeasResultListEUTRA.c
+NR_MeasResultListLogging2NR-r16.c
+NR_MeasResultListLoggingNR-r16.c
+NR_MeasResultListNR.c
+NR_MeasResultListSRS-RSRP-r16.c
+NR_MeasResultListUTRA-FDD-r16.c
+NR_MeasResultLogging2NR-r16.c
+NR_MeasResultLoggingNR-r16.c
+NR_MeasResultNR.c
+NR_MeasResultNR-SL-r16.c
+NR_MeasResultRLFNR-r16.c
+NR_MeasResultRxTxTimeDiff-r17.c
+NR_MeasResults.c
+NR_MeasResultSCG-Failure.c
+NR_MeasResultServFreqListEUTRA-SCG.c
+NR_MeasResultServFreqListNR-SCG.c
+NR_MeasResultServingCell-r16.c
+NR_MeasResultServMO.c
+NR_MeasResultServMOList.c
+NR_MeasResultSFTD-EUTRA.c
+NR_MeasResultsPerCarrierIdleEUTRA-r16.c
+NR_MeasResultsPerCarrierIdleNR-r16.c
+NR_MeasResultsPerCellIdleEUTRA-r16.c
+NR_MeasResultsPerCellIdleNR-r16.c
+NR_MeasResultSRS-RSRP-r16.c
+NR_MeasResultsSL-r16.c
+NR_MeasResultSuccessHONR-r17.c
+NR_MeasResultUTRA-FDD-r16.c
+NR_MeasRSSI-ReportConfig-r16.c
+NR_MeasTiming.c
+NR_MeasTimingList.c
+NR_MeasTriggerQuantity.c
+NR_MeasTriggerQuantityCLI-r16.c
+NR_MeasTriggerQuantityEUTRA.c
+NR_MeasTriggerQuantityOffset.c
+NR_MeasTriggerQuantityUTRA-FDD-r16.c
+NR_MeasurementReportAppLayerList-r17.c
+NR_MeasurementReportAppLayer-r17.c
+NR_MeasurementReportAppLayer-r17-IEs.c
+NR_MeasurementReport.c
+NR_MeasurementReport-IEs.c
+NR_MeasurementReportSidelink.c
+NR_MeasurementReportSidelink-r16-IEs.c
+NR_MeasurementTimingConfiguration.c
+NR_MeasurementTimingConfiguration-IEs.c
+NR_MeasurementTimingConfiguration-v1550-IEs.c
+NR_MeasurementTimingConfiguration-v1610-IEs.c
+NR_MIB.c
+NR_MIMO-LayersDL.c
+NR_MIMO-LayersUL.c
+NR_MIMO-ParametersPerBand.c
+NR_MIMOParam-r17.c
+NR_MinSchedulingOffsetK0-Values-r16.c
+NR_MinSchedulingOffsetK0-Values-r17.c
+NR_MinSchedulingOffsetK2-Values-r16.c
+NR_MinSchedulingOffsetK2-Values-r17.c
+NR_MinSchedulingOffsetPreferenceConfig-r16.c
+NR_MinSchedulingOffsetPreferenceExt-r17.c
+NR_MinSchedulingOffsetPreference-r16.c
+NR_MinTimeGapFR2-2-r17.c
+NR_MinTimeGap-r16.c
+NR_MNC.c
+NR_MobilityFromNRCommand.c
+NR_MobilityFromNRCommand-IEs.c
+NR_MobilityFromNRCommand-v1610-IEs.c
+NR_MobilityHistoryReport-r16.c
+NR_MobilityStateParameters.c
+NR_ModulationOrder.c
+NR_MPE-Config-FR2-r16.c
+NR_MPE-Config-FR2-r17.c
+NR_MPE-ResourceId-r17.c
+NR_MPE-Resource-r17.c
+NR_MRB-Identity-r17.c
+NR_MRB-InfoBroadcast-r17.c
+NR_MRB-ListBroadcast-r17.c
+NR_MRB-PDCP-ConfigBroadcast-r17.c
+NR_MRB-RLC-ConfigBroadcast-r17.c
+NR_MRB-ToAddModList-r17.c
+NR_MRB-ToAddMod-r17.c
+NR_MRB-ToReleaseList-r17.c
+NR_MRDC-AssistanceInfo.c
+NR_MRDC-Parameters.c
+NR_MRDC-Parameters-v1580.c
+NR_MRDC-Parameters-v1590.c
+NR_MRDC-Parameters-v15g0.c
+NR_MRDC-Parameters-v1620.c
+NR_MRDC-Parameters-v1630.c
+NR_MRDC-Parameters-v1700.c
+NR_MRDC-SecondaryCellGroupConfig.c
+NR_MsgA-ConfigCommon-r16.c
+NR_MsgA-DMRS-Config-r16.c
+NR_MsgA-PUSCH-Config-r16.c
+NR_MsgA-PUSCH-Resource-r16.c
+NR_MTCH-SSB-MappingWindowCycleOffset-r17.c
+NR_MTCH-SSB-MappingWindowIndex-r17.c
+NR_MTCH-SSB-MappingWindowList-r17.c
+NR_MultiBandInfoListEUTRA.c
+NR_MulticastConfig-r17.c
+NR_MulticastRLC-BearerConfig-r17.c
+NR_MultiDCI-MultiTRP-r16.c
+NR_MultiFrequencyBandListNR.c
+NR_MultiFrequencyBandListNR-SIB.c
+NR_MultiPDSCH-TDRA-List-r17.c
+NR_MultiPDSCH-TDRA-r17.c
+NR_MUSIM-Assistance-r17.c
+NR_MUSIM-GapAssistanceConfig-r17.c
+NR_MUSIM-GapConfig-r17.c
+NR_MUSIM-GapId-r17.c
+NR_MUSIM-GapInfo-r17.c
+NR_MUSIM-GapPreferenceList-r17.c
+NR_MUSIM-Gap-r17.c
+NR_MUSIM-LeaveAssistanceConfig-r17.c
+NR_MUSIM-Starting-SFN-AndSubframe-r17.c
+NR_NAICS-Capability-Entry.c
+NR_NeedForGapNCSG-ConfigEUTRA-r17.c
+NR_NeedForGapNCSG-ConfigNR-r17.c
+NR_NeedForGapNCSG-InfoEUTRA-r17.c
+NR_NeedForGapNCSG-InfoNR-r17.c
+NR_NeedForGapsBandListNR-r16.c
+NR_NeedForGapsConfigNR-r16.c
+NR_NeedForGapsInfoNR-r16.c
+NR_NeedForGapsIntraFreqList-r16.c
+NR_NeedForGapsIntraFreq-r16.c
+NR_NeedForGapsNR-r16.c
+NR_NeedForNCSG-BandListNR-r17.c
+NR_NeedForNCSG-EUTRA-r17.c
+NR_NeedForNCSG-IntraFreqList-r17.c
+NR_NeedForNCSG-IntraFreq-r17.c
+NR_NeedForNCSG-NR-r17.c
+NR_NeighbourCellInfo-r17.c
+NR_NextHopChainingCount.c
+NR_NG-5G-S-TMSI.c
+NR_NID-r16.c
+NR_NonCellDefiningSSB-r17.c
+NR_NotificationMessageSidelink-r17.c
+NR_NotificationMessageSidelink-r17-IEs.c
+NR_NPN-IdentityInfoList-r16.c
+NR_NPN-IdentityInfo-r16.c
+NR_NPN-Identity-r16.c
+NR_NRDC-Parameters.c
+NR_NRDC-Parameters-v1570.c
+NR_NRDC-Parameters-v15c0.c
+NR_NRDC-Parameters-v1610.c
+NR_NRDC-Parameters-v1700.c
+NR_NR-DL-PRS-PDC-Info-r17.c
+NR_NR-DL-PRS-PDC-ResourceSet-r17.c
+NR_NR-DL-PRS-Periodicity-and-ResourceSetSlotOffset-r17.c
+NR_NR-DL-PRS-ResourceID-r17.c
+NR_NR-DL-PRS-Resource-r17.c
+NR_NR-FreqInfo.c
+NR_NR-MultiBandInfo.c
+NR_NR-NS-PmaxList.c
+NR_NR-NS-PmaxValue.c
+NR_NR-PRS-MeasurementInfoList-r16.c
+NR_NR-PRS-MeasurementInfo-r16.c
+NR_NR-RS-Type.c
+NR_NR-TimeStamp-r17.c
+NR_NSAG-IdentityInfo-r17.c
+NR_NSAG-ID-r17.c
+NR_NSAG-List-r17.c
+NR_NTN-Config-r17.c
+NR_NTN-NeighCellConfigList-r17.c
+NR_NTN-NeighCellConfig-r17.c
+NR_NTN-Parameters-r17.c
+NR_NumberOfCarriers.c
+NR_NumberOfMsg3-Repetitions-r17.c
+NR_NZP-CSI-RS-Pairing-r17.c
+NR_NZP-CSI-RS-Resource.c
+NR_NZP-CSI-RS-ResourceId.c
+NR_NZP-CSI-RS-ResourceSet.c
+NR_NZP-CSI-RS-ResourceSetId.c
+NR_OffsetValue-r17.c
+NR_OLPC-SRS-Pos-r16.c
+NR_OnDemandSIB-Request-r16.c
+NR_Orbital-r17.c
+NR_OtherConfig.c
+NR_OtherConfig-v1540.c
+NR_OtherConfig-v1610.c
+NR_OtherConfig-v1700.c
+NR_OutsideActiveTimeConfig-r16.c
+NR_OverheatingAssistance.c
+NR_OverheatingAssistanceConfig.c
+NR_OverheatingAssistance-r17.c
+NR_P0AlphaSet-r17.c
+NR_P0-PUCCH.c
+NR_P0-PUCCH-Id.c
+NR_P0-PUSCH-AlphaSet.c
+NR_P0-PUSCH-AlphaSetId.c
+NR_P0-PUSCH-r16.c
+NR_P0-PUSCH-SetId-r16.c
+NR_P0-PUSCH-Set-r16.c
+NR_Paging.c
+NR_PagingCycle.c
+NR_PagingGroupList-r17.c
+NR_PagingRecord.c
+NR_PagingRecordList.c
+NR_PagingRecordList-v1700.c
+NR_PagingRecord-v1700.c
+NR_PagingUE-Identity.c
+NR_Paging-v1700-IEs.c
+NR_PathlossReferenceRS-Config.c
+NR_PathlossReferenceRS-Id-r17.c
+NR_PathlossReferenceRSList-r16.c
+NR_PathlossReferenceRS-r16.c
+NR_PathlossReferenceRS-r17.c
+NR_PathlossReferenceRSs-v1610.c
+NR_PCCH-Config.c
+NR_PCCH-Message.c
+NR_PCCH-MessageType.c
+NR_PCI-ARFCN-EUTRA-r16.c
+NR_PCI-ARFCN-NR-r16.c
+NR_PCI-List.c
+NR_PCI-Range.c
+NR_PCI-RangeElement.c
+NR_PCI-RangeIndex.c
+NR_PCI-RangeIndexList.c
+NR_PDCCH-BlindDetection2-r16.c
+NR_PDCCH-BlindDetection3-r16.c
+NR_PDCCH-BlindDetection.c
+NR_PDCCH-BlindDetectionCA-CombIndicator-r16.c
+NR_PDCCH-BlindDetectionCA-CombIndicator-r17.c
+NR_PDCCH-BlindDetectionCA-Mixed1-r17.c
+NR_PDCCH-BlindDetectionCA-MixedExt-r16.c
+NR_PDCCH-BlindDetectionCA-Mixed-r17.c
+NR_PDCCH-BlindDetectionCG-UE-Mixed1-r17.c
+NR_PDCCH-BlindDetectionCG-UE-MixedExt-r16.c
+NR_PDCCH-BlindDetectionCG-UE-Mixed-r17.c
+NR_PDCCH-BlindDetectionMCG-SCG-r17.c
+NR_PDCCH-BlindDetectionMixed1-r17.c
+NR_PDCCH-BlindDetectionMixedList-r16.c
+NR_PDCCH-BlindDetectionMixed-r17.c
+NR_PDCCH-Config.c
+NR_PDCCH-ConfigCommon.c
+NR_PDCCH-ConfigSIB1.c
+NR_PDCCH-MonitoringOccasions-r16.c
+NR_PDCCH-RepetitionParameters-r17.c
+NR_PDCCH-ServingCellConfig.c
+NR_PDCP-Config.c
+NR_PDCP-Parameters.c
+NR_PDCP-ParametersMRDC.c
+NR_PDCP-ParametersMRDC-v1610.c
+NR_PDCP-ParametersSidelink-r16.c
+NR_PDSCH-CodeBlockGroupTransmission.c
+NR_PDSCH-CodeBlockGroupTransmissionList-r16.c
+NR_PDSCH-ConfigBroadcast-r17.c
+NR_PDSCH-Config.c
+NR_PDSCH-ConfigCommon.c
+NR_PDSCH-ConfigIndex-r17.c
+NR_PDSCH-ConfigPTM-r17.c
+NR_PDSCH-HARQ-ACK-CodebookList-r16.c
+NR_PDSCH-HARQ-ACK-EnhType3Index-r17.c
+NR_PDSCH-HARQ-ACK-EnhType3-r17.c
+NR_PDSCH-ServingCellConfig.c
+NR_PDSCH-TimeDomainResourceAllocation.c
+NR_PDSCH-TimeDomainResourceAllocationList.c
+NR_PDSCH-TimeDomainResourceAllocationList-r16.c
+NR_PDSCH-TimeDomainResourceAllocation-r16.c
+NR_PDU-SessionID.c
+NR_PEI-Config-r17.c
+NR_PeriodicalReportConfig.c
+NR_PeriodicalReportConfigInterRAT.c
+NR_PeriodicalReportConfigNR-SL-r16.c
+NR_PeriodicRNAU-TimerValue.c
+NR_PerRAAttemptInfoList-r16.c
+NR_PerRAAttemptInfo-r16.c
+NR_PerRACSI-RSInfo-r16.c
+NR_PerRACSI-RSInfo-v1660.c
+NR_PerRAInfoList-r16.c
+NR_PerRAInfoList-v1660.c
+NR_PerRAInfo-r16.c
+NR_PerRASSBInfo-r16.c
+NR_PH-InfoMCG.c
+NR_PH-InfoSCG.c
+NR_PHR-Config.c
+NR_PH-TypeListMCG.c
+NR_PH-TypeListSCG.c
+NR_PH-UplinkCarrierMCG.c
+NR_PH-UplinkCarrierSCG.c
+NR_Phy-Parameters.c
+NR_Phy-ParametersCommon.c
+NR_Phy-ParametersCommon-v16a0.c
+NR_Phy-ParametersFR1.c
+NR_Phy-ParametersFR2.c
+NR_Phy-ParametersFRX-Diff.c
+NR_Phy-ParametersMRDC.c
+NR_Phy-ParametersSharedSpectrumChAccess-r16.c
+NR_Phy-Parameters-v16a0.c
+NR_Phy-ParametersXDD-Diff.c
+NR_PhysCellId.c
+NR_PhysCellIdUTRA-FDD-r16.c
+NR_PhysicalCellGroupConfig.c
+NR_PLMN-Identity.c
+NR_PLMN-Identity-EUTRA-5GC.c
+NR_PLMN-IdentityInfo.c
+NR_PLMN-IdentityInfoList.c
+NR_PLMN-IdentityList2-r16.c
+NR_PLMN-IdentityList-EUTRA-5GC.c
+NR_PLMN-IdentityList-EUTRA-EPC.c
+NR_PLMN-IdentityList-r16.c
+NR_PLMN-RAN-AreaCell.c
+NR_PLMN-RAN-AreaCellList.c
+NR_PLMN-RAN-AreaConfig.c
+NR_PLMN-RAN-AreaConfigList.c
+NR_P-Max.c
+NR_PollByte.c
+NR_PollPDU.c
+NR_PortIndex2.c
+NR_PortIndex4.c
+NR_PortIndex8.c
+NR_PortIndexFor8Ranks.c
+NR_PosGapConfig-r17.c
+NR_PositionStateVector-r17.c
+NR_PositionVelocity-r17.c
+NR_PosMeasGapPreConfigToAddModList-r17.c
+NR_PosMeasGapPreConfigToReleaseList-r17.c
+NR_PosSchedulingInfo-r16.c
+NR_PosSIB-MappingInfo-r16.c
+NR_PosSIB-ReqInfo-r16.c
+NR_PosSIB-Type-r16.c
+NR_PosSI-SchedulingInfo-r16.c
+NR_PosSRS-RRC-Inactive-OutsideInitialUL-BWP-r17.c
+NR_PosSystemInformation-r16-IEs.c
+NR_PowSav-ParametersCommon-r16.c
+NR_PowSav-ParametersFR2-2-r17.c
+NR_PowSav-ParametersFRX-Diff-r16.c
+NR_PowSav-Parameters-r16.c
+NR_PowSav-Parameters-v1700.c
+NR_PRACH-ResourceDedicatedBFR.c
+NR_PRB-Id.c
+NR_ProcessingParameters.c
+NR_PropagationDelayDifference-r17.c
+NR_PropDelayDiffReportConfig-r17.c
+NR_PRS-ProcessingCapabilityOutsideMGinPPWperType-r17.c
+NR_PTRS-DensityRecommendationDL.c
+NR_PTRS-DensityRecommendationUL.c
+NR_PTRS-DownlinkConfig.c
+NR_PTRS-UplinkConfig.c
+NR_PUCCH-Config.c
+NR_PUCCH-ConfigCommon.c
+NR_PUCCH-ConfigurationList-r16.c
+NR_PUCCH-CSI-Resource.c
+NR_PUCCH-format0.c
+NR_PUCCH-format1.c
+NR_PUCCH-format2.c
+NR_PUCCH-format3.c
+NR_PUCCH-format4.c
+NR_PUCCH-FormatConfig.c
+NR_PUCCH-FormatConfigExt-r17.c
+NR_PUCCH-Group-Config-r17.c
+NR_PUCCH-Grp-CarrierTypes-r16.c
+NR_PUCCH-MaxCodeRate.c
+NR_PUCCH-PathlossReferenceRS.c
+NR_PUCCH-PathlossReferenceRS-Id.c
+NR_PUCCH-PathlossReferenceRS-Id-r17.c
+NR_PUCCH-PathlossReferenceRS-Id-v1610.c
+NR_PUCCH-PathlossReferenceRS-r16.c
+NR_PUCCH-PowerControl.c
+NR_PUCCH-PowerControlSetInfoId-r17.c
+NR_PUCCH-PowerControlSetInfo-r17.c
+NR_PUCCH-Resource.c
+NR_PUCCH-ResourceExt-v1610.c
+NR_PUCCH-ResourceGroupId-r16.c
+NR_PUCCH-ResourceGroup-r16.c
+NR_PUCCH-ResourceId.c
+NR_PUCCH-ResourceSet.c
+NR_PUCCH-ResourceSetId.c
+NR_PUCCH-SpatialRelationInfo.c
+NR_PUCCH-SpatialRelationInfoExt-r16.c
+NR_PUCCH-SpatialRelationInfoId.c
+NR_PUCCH-SpatialRelationInfoId-r16.c
+NR_PUCCH-SpatialRelationInfoId-v1610.c
+NR_PUCCH-SRS.c
+NR_PUCCH-TPC-CommandConfig.c
+NR_PUSCH-Allocation-r16.c
+NR_PUSCH-CodeBlockGroupTransmission.c
+NR_PUSCH-Config.c
+NR_PUSCH-ConfigCommon.c
+NR_PUSCH-PathlossReferenceRS.c
+NR_PUSCH-PathlossReferenceRS-Id.c
+NR_PUSCH-PathlossReferenceRS-Id-r17.c
+NR_PUSCH-PathlossReferenceRS-Id-v1610.c
+NR_PUSCH-PathlossReferenceRS-r16.c
+NR_PUSCH-PowerControl.c
+NR_PUSCH-PowerControl-v1610.c
+NR_PUSCH-ServingCellConfig.c
+NR_PUSCH-TimeDomainResourceAllocation.c
+NR_PUSCH-TimeDomainResourceAllocationList.c
+NR_PUSCH-TimeDomainResourceAllocationList-r16.c
+NR_PUSCH-TimeDomainResourceAllocation-r16.c
+NR_PUSCH-TPC-CommandConfig.c
+NR_QCL-Info.c
+NR_QFI.c
+NR_Q-OffsetRange.c
+NR_Q-OffsetRangeList.c
+NR_Q-QualMin.c
+NR_Q-RxLevMin.c
+NR_QuantityConfig.c
+NR_QuantityConfigNR.c
+NR_QuantityConfigRS.c
+NR_QuantityConfigUTRA-FDD-r16.c
+NR_RACH-ConfigCommon.c
+NR_RACH-ConfigCommonTwoStepRA-r16.c
+NR_RACH-ConfigDedicated.c
+NR_RACH-ConfigGeneric.c
+NR_RACH-ConfigGenericTwoStepRA-r16.c
+NR_RadioBearerConfig.c
+NR_RadioLinkMonitoringConfig.c
+NR_RadioLinkMonitoringRS.c
+NR_RadioLinkMonitoringRS-Id.c
+NR_RA-InformationCommon-r16.c
+NR_RAN-AreaCode.c
+NR_RAN-AreaConfig.c
+NR_RangeToBestCell.c
+NR_RAN-NotificationAreaInfo.c
+NR_RAN-VisibleMeasurements-r17.c
+NR_RAN-VisibleParameters-r17.c
+NR_RA-Prioritization.c
+NR_RA-PrioritizationForSlicing-r17.c
+NR_RA-PrioritizationSliceInfoList-r17.c
+NR_RA-PrioritizationSliceInfo-r17.c
+NR_RA-ReportList-r16.c
+NR_RA-Report-r16.c
+NR_RateMatchPattern.c
+NR_RateMatchPatternGroup.c
+NR_RateMatchPatternId.c
+NR_RateMatchPatternLTE-CRS.c
+NR_RAT-Type.c
+NR_RB-SetGroup-r17.c
+NR_ReconfigurationWithSync.c
+NR_RedCap-ConfigCommonSIB-r17.c
+NR_RedCapParameters-r17.c
+NR_RedirectedCarrierInfo.c
+NR_RedirectedCarrierInfo-EUTRA.c
+NR_ReducedAggregatedBandwidth.c
+NR_ReducedAggregatedBandwidth-r17.c
+NR_ReducedMaxBW-FRx-r16.c
+NR_ReducedMaxCCs-r16.c
+NR_ReestablishmentCause.c
+NR_ReestablishmentInfo.c
+NR_ReestabNCellInfo.c
+NR_ReestabNCellInfoList.c
+NR_ReestabUE-Identity.c
+NR_ReferenceLocation-r17.c
+NR_ReferenceSignalConfig.c
+NR_ReferenceTimeInfo-r16.c
+NR_ReferenceTime-r16.c
+NR_RegisteredAMF.c
+NR_RejectWaitTime.c
+NR_RelayParameters-r17.c
+NR_RelaysTriggeredList-r17.c
+NR_ReleasePreferenceConfig-r16.c
+NR_ReleasePreference-r16.c
+NR_RemoteUEInformationSidelink-r17.c
+NR_RemoteUEInformationSidelink-r17-IEs.c
+NR_RepetitionSchemeConfig-r16.c
+NR_RepetitionSchemeConfig-v1630.c
+NR_RepFactorAndTimeGap-r17.c
+NR_ReportCGI.c
+NR_ReportCGI-EUTRA.c
+NR_ReportConfigId.c
+NR_ReportConfigInterRAT.c
+NR_ReportConfigNR.c
+NR_ReportConfigNR-SL-r16.c
+NR_ReportConfigToAddMod.c
+NR_ReportConfigToAddModList.c
+NR_ReportConfigToRemoveList.c
+NR_ReportInterval.c
+NR_ReportSFTD-EUTRA.c
+NR_ReportSFTD-NR.c
+NR_ReportUplinkTxDirectCurrentMoreCarrier-r17.c
+NR_ReselectionThreshold.c
+NR_ReselectionThresholdQ.c
+NR_ResultsPerCSI-RS-Index.c
+NR_ResultsPerCSI-RS-IndexList.c
+NR_ResultsPerSSB-Index.c
+NR_ResultsPerSSB-IndexIdle-r16.c
+NR_ResultsPerSSB-IndexList.c
+NR_ResultsPerSSB-IndexList-r16.c
+NR_ResumeCause.c
+NR_RF-Parameters.c
+NR_RF-ParametersMRDC.c
+NR_RF-ParametersMRDC-v15g0.c
+NR_RF-Parameters-v15g0.c
+NR_RF-Parameters-v16a0.c
+NR_RLC-BearerConfig.c
+NR_RLC-Config.c
+NR_RLC-Config-v1610.c
+NR_RLC-Config-v1700.c
+NR_RLC-Parameters.c
+NR_RLC-ParametersSidelink-r16.c
+NR_RLF-Report-r16.c
+NR_RLF-TimersAndConstants.c
+NR_RLM-RelaxationReportingConfig-r17.c
+NR_RMTC-Config-r16.c
+NR_RNTI-Value.c
+NR_RRC-PosSystemInfoRequest-r16-IEs.c
+NR_RRCReconfiguration.c
+NR_RRCReconfigurationComplete.c
+NR_RRCReconfigurationComplete-IEs.c
+NR_RRCReconfigurationCompleteSidelink.c
+NR_RRCReconfigurationCompleteSidelink-r16-IEs.c
+NR_RRCReconfigurationCompleteSidelink-v1710-IEs.c
+NR_RRCReconfigurationCompleteSidelink-v1720-IEs.c
+NR_RRCReconfigurationComplete-v1530-IEs.c
+NR_RRCReconfigurationComplete-v1560-IEs.c
+NR_RRCReconfigurationComplete-v1610-IEs.c
+NR_RRCReconfigurationComplete-v1640-IEs.c
+NR_RRCReconfigurationComplete-v1700-IEs.c
+NR_RRCReconfigurationComplete-v1720-IEs.c
+NR_RRCReconfigurationFailureSidelink.c
+NR_RRCReconfigurationFailureSidelink-r16-IEs.c
+NR_RRCReconfiguration-IEs.c
+NR_RRCReconfigurationSidelink.c
+NR_RRCReconfigurationSidelink-r16-IEs.c
+NR_RRCReconfigurationSidelink-v1700-IEs.c
+NR_RRCReconfiguration-v1530-IEs.c
+NR_RRCReconfiguration-v1540-IEs.c
+NR_RRCReconfiguration-v1560-IEs.c
+NR_RRCReconfiguration-v1610-IEs.c
+NR_RRCReconfiguration-v1700-IEs.c
+NR_RRCReestablishment.c
+NR_RRCReestablishmentComplete.c
+NR_RRCReestablishmentComplete-IEs.c
+NR_RRCReestablishmentComplete-v1610-IEs.c
+NR_RRCReestablishment-IEs.c
+NR_RRCReestablishmentRequest.c
+NR_RRCReestablishmentRequest-IEs.c
+NR_RRCReestablishment-v1700-IEs.c
+NR_RRCReject.c
+NR_RRCReject-IEs.c
+NR_RRCRelease.c
+NR_RRCRelease-IEs.c
+NR_RRCRelease-v1540-IEs.c
+NR_RRCRelease-v1610-IEs.c
+NR_RRCRelease-v1650-IEs.c
+NR_RRCRelease-v1710-IEs.c
+NR_RRCResume.c
+NR_RRCResumeComplete.c
+NR_RRCResumeComplete-IEs.c
+NR_RRCResumeComplete-v1610-IEs.c
+NR_RRCResumeComplete-v1640-IEs.c
+NR_RRCResumeComplete-v1700-IEs.c
+NR_RRCResumeComplete-v1720-IEs.c
+NR_RRCResume-IEs.c
+NR_RRCResumeRequest1.c
+NR_RRCResumeRequest1-IEs.c
+NR_RRCResumeRequest.c
+NR_RRCResumeRequest-IEs.c
+NR_RRCResume-v1560-IEs.c
+NR_RRCResume-v1610-IEs.c
+NR_RRCResume-v1700-IEs.c
+NR_RRCSetup.c
+NR_RRCSetupComplete.c
+NR_RRCSetupComplete-IEs.c
+NR_RRCSetupComplete-v1610-IEs.c
+NR_RRCSetupComplete-v1690-IEs.c
+NR_RRCSetupComplete-v1700-IEs.c
+NR_RRCSetup-IEs.c
+NR_RRCSetupRequest.c
+NR_RRCSetupRequest-IEs.c
+NR_RRCSetup-v1700-IEs.c
+NR_RRCSystemInfoRequest.c
+NR_RRCSystemInfoRequest-IEs.c
+NR_RRC-TransactionIdentifier.c
+NR_RRM-Config.c
+NR_RRM-MeasRelaxationReportingConfig-r17.c
+NR_RSRP-ChangeThreshold-r17.c
+NR_RSRP-Range.c
+NR_RSRP-RangeEUTRA.c
+NR_RSRQ-Range.c
+NR_RSRQ-RangeEUTRA.c
+NR_RSRQ-RangeEUTRA-r16.c
+NR_RSSI-PeriodicityAndOffset-r16.c
+NR_RSSI-Range-r16.c
+NR_RSSI-ResourceConfigCLI-r16.c
+NR_RSSI-ResourceId-r16.c
+NR_RSSI-ResourceListConfigCLI-r16.c
+NR_RxTxPeriodical-r17.c
+NR_RxTxReportInterval-r17.c
+NR_RxTxTimeDiff-r17.c
+NR_SBAS-ID-r16.c
+NR_SBCCH-SL-BCH-Message.c
+NR_SBCCH-SL-BCH-MessageType.c
+NR_ScalingFactorSidelink-r16.c
+NR_SCCH-Message.c
+NR_SCCH-MessageType.c
+NR_SCellActivationRS-ConfigId-r17.c
+NR_SCellActivationRS-Config-r17.c
+NR_SCellConfig.c
+NR_SCellIndex.c
+NR_SCellSIB20-r17.c
+NR_SCG-DeactivationPreferenceConfig-r17.c
+NR_SCGFailureInformation.c
+NR_SCGFailureInformationEUTRA.c
+NR_SCGFailureInformationEUTRA-IEs.c
+NR_SCGFailureInformationEUTRA-v1590-IEs.c
+NR_SCGFailureInformation-IEs.c
+NR_SCGFailureInformation-v1590-IEs.c
+NR_SchedulingInfo2-r17.c
+NR_SchedulingInfo.c
+NR_SchedulingRequestConfig.c
+NR_SchedulingRequestConfig-v1700.c
+NR_SchedulingRequestId.c
+NR_SchedulingRequestResourceConfig.c
+NR_SchedulingRequestResourceConfigExt-v1610.c
+NR_SchedulingRequestResourceConfigExt-v1700.c
+NR_SchedulingRequestResourceId.c
+NR_SchedulingRequestToAddMod.c
+NR_SchedulingRequestToAddModExt-v1700.c
+NR_ScramblingId.c
+NR_SCS-SpecificCarrier.c
+NR_SCS-SpecificDuration-r17.c
+NR_SDAP-Config.c
+NR_SDAP-Parameters.c
+NR_SDT-CG-Config-r17.c
+NR_SDT-ConfigCommonSIB-r17.c
+NR_SDT-Config-r17.c
+NR_SDT-MAC-PHY-CG-Config-r17.c
+NR_SearchSpace.c
+NR_SearchSpaceExt-r16.c
+NR_SearchSpaceExt-v1700.c
+NR_SearchSpaceId.c
+NR_SearchSpaceSwitchConfig-r16.c
+NR_SearchSpaceSwitchConfig-r17.c
+NR_SearchSpaceSwitchTrigger-r16.c
+NR_SearchSpaceZero.c
+NR_SecurityAlgorithmConfig.c
+NR_SecurityConfig.c
+NR_SecurityConfigSMC.c
+NR_SecurityModeCommand.c
+NR_SecurityModeCommand-IEs.c
+NR_SecurityModeComplete.c
+NR_SecurityModeComplete-IEs.c
+NR_SecurityModeFailure.c
+NR_SecurityModeFailure-IEs.c
+NR_SelectedBandEntriesMN.c
+NR_SemiStaticChannelAccessConfig-r16.c
+NR_SemiStaticChannelAccessConfigUE-r17.c
+NR_Sensor-LocationInfo-r16.c
+NR_Sensor-NameList-r16.c
+NR_ServCellIndex.c
+NR_ServCellInfoListMCG-EUTRA-r16.c
+NR_ServCellInfoListMCG-NR-r16.c
+NR_ServCellInfoListSCG-EUTRA-r16.c
+NR_ServCellInfoListSCG-NR-r16.c
+NR_ServCellInfoXCG-EUTRA-r16.c
+NR_ServCellInfoXCG-NR-r16.c
+NR_ServingAdditionalPCIIndex-r17.c
+NR_ServingCellAndBWP-Id-r17.c
+NR_ServingCellConfig.c
+NR_ServingCellConfigCommon.c
+NR_ServingCellConfigCommonSIB.c
+NR_SetupRelease.c
+NR_SFTD-FrequencyList-EUTRA.c
+NR_SFTD-FrequencyList-NR.c
+NR_SharedSpectrumChAccessParamsPerBand-r16.c
+NR_SharedSpectrumChAccessParamsPerBand-v1630.c
+NR_SharedSpectrumChAccessParamsPerBand-v1640.c
+NR_SharedSpectrumChAccessParamsPerBand-v1650.c
+NR_SharedSpectrumChAccessParamsPerBand-v1710.c
+NR_ShortI-RNTI-Value.c
+NR_ShortMAC-I.c
+NR_SHR-Cause-r17.c
+NR_SIB10-r16.c
+NR_SIB11-r16.c
+NR_SIB12-IEs-r16.c
+NR_SIB12-r16.c
+NR_SIB13-r16.c
+NR_SIB14-r16.c
+NR_SIB15-r17.c
+NR_SIB16-r17.c
+NR_SIB17-IEs-r17.c
+NR_SIB17-r17.c
+NR_SIB18-r17.c
+NR_SIB19-r17.c
+NR_SIB1.c
+NR_SIB1-v1610-IEs.c
+NR_SIB1-v1630-IEs.c
+NR_SIB1-v1700-IEs.c
+NR_SIB20-r17.c
+NR_SIB21-r17.c
+NR_SIB2.c
+NR_SIB3.c
+NR_SIB4.c
+NR_SIB5.c
+NR_SIB6.c
+NR_SIB7.c
+NR_SIB8.c
+NR_SIB9.c
+NR_SIB-Mapping.c
+NR_SIB-Mapping-v1700.c
+NR_SIBpos-r16.c
+NR_SIB-ReqInfo-r16.c
+NR_SIB-TypeInfo.c
+NR_SIB-TypeInfo-v1700.c
+NR_SIB-Type-r17.c
+NR_SidelinkParametersEUTRA-r16.c
+NR_SidelinkParametersNR-r16.c
+NR_SidelinkParameters-r16.c
+NR_SidelinkPreconfigNR-r16.c
+NR_SidelinkUEInformationNR-r16.c
+NR_SidelinkUEInformationNR-r16-IEs.c
+NR_SidelinkUEInformationNR-v1700-IEs.c
+NR_SimulSRS-ForAntennaSwitching-r16.c
+NR_SimultaneousRxTxPerBandPair.c
+NR_SINR-Range.c
+NR_SINR-RangeEUTRA.c
+NR_SI-RequestConfig.c
+NR_SI-RequestResources.c
+NR_SI-SchedulingInfo.c
+NR_SI-SchedulingInfo-v1700.c
+NR_SK-Counter.c
+NR_SL-AccessInfo-L2U2N-r17.c
+NR_SL-BetaOffsets-r16.c
+NR_SL-BWP-ConfigCommon-r16.c
+NR_SL-BWP-Config-r16.c
+NR_SL-BWP-DiscPoolConfigCommon-r17.c
+NR_SL-BWP-DiscPoolConfig-r17.c
+NR_SL-BWP-Generic-r16.c
+NR_SL-BWP-PoolConfigCommon-r16.c
+NR_SL-BWP-PoolConfig-r16.c
+NR_SL-CBR-CommonTxConfigList-r16.c
+NR_SL-CBR-LevelsConfig-r16.c
+NR_SL-CBR-PriorityTxConfigList-r16.c
+NR_SL-CBR-PriorityTxConfigList-v1650.c
+NR_SL-CBR-PSSCH-TxConfig-r16.c
+NR_SL-CBR-r16.c
+NR_SL-CG-MaxTransNumList-r16.c
+NR_SL-CG-MaxTransNum-r16.c
+NR_SL-ConfigCommonNR-r16.c
+NR_SL-ConfigDedicatedEUTRA-Info-r16.c
+NR_SL-ConfigDedicatedNR-r16.c
+NR_SL-ConfigIndexCG-r16.c
+NR_SL-ConfiguredGrantConfigList-r16.c
+NR_SL-ConfiguredGrantConfig-r16.c
+NR_SL-CSI-RS-Config-r16.c
+NR_SL-DestinationIdentity-r16.c
+NR_SL-DestinationIndex-r16.c
+NR_SL-DiscConfigCommon-r17.c
+NR_SL-DiscConfig-r17.c
+NR_SL-DRX-ConfigGC-BC-r17.c
+NR_SL-DRX-Config-r17.c
+NR_SL-DRX-ConfigUC-Info-r17.c
+NR_SL-DRX-ConfigUC-r17.c
+NR_SL-DRX-ConfigUC-SemiStatic-r17.c
+NR_SL-DRX-GC-BC-QoS-r17.c
+NR_SL-DRX-GC-Generic-r17.c
+NR_SL-EUTRA-AnchorCarrierFreqList-r16.c
+NR_SL-EventTriggerConfig-r16.c
+NR_SL-FailureList-r16.c
+NR_SL-Failure-r16.c
+NR_SL-FreqConfigCommon-r16.c
+NR_SL-FreqConfig-r16.c
+NR_SL-Freq-Id-r16.c
+NR_SliceCellListNR-r17.c
+NR_SliceInfoDedicated-r17.c
+NR_SliceInfoListDedicated-r17.c
+NR_SliceInfoList-r17.c
+NR_SliceInfo-r17.c
+NR_SL-InterestedFreqList-r16.c
+NR_SL-InterUE-CoordinationConfig-r17.c
+NR_SL-InterUE-CoordinationScheme1-r17.c
+NR_SL-InterUE-CoordinationScheme2-r17.c
+NR_SL-L2RelayUE-Config-r17.c
+NR_SL-L2RemoteUE-Config-r17.c
+NR_SL-LatencyBoundIUC-Report-r17.c
+NR_SL-LogicalChannelConfigPC5-r16.c
+NR_SL-LogicalChannelConfig-r16.c
+NR_SL-MappedQoS-FlowsListDedicated-r16.c
+NR_SL-MappingToAddMod-r17.c
+NR_SL-MeasConfigCommon-r16.c
+NR_SL-MeasConfigInfo-r16.c
+NR_SL-MeasConfig-r16.c
+NR_SL-MeasIdInfo-r16.c
+NR_SL-MeasIdList-r16.c
+NR_SL-MeasId-r16.c
+NR_SL-MeasIdToRemoveList-r16.c
+NR_SL-MeasObjectId-r16.c
+NR_SL-MeasObjectInfo-r16.c
+NR_SL-MeasObjectList-r16.c
+NR_SL-MeasObject-r16.c
+NR_SL-MeasObjectToRemoveList-r16.c
+NR_SL-MeasQuantityResult-r16.c
+NR_SL-MeasReportQuantity-r16.c
+NR_SL-MeasResultListRelay-r17.c
+NR_SL-MeasResult-r16.c
+NR_SL-MeasResultRelay-r17.c
+NR_SL-MeasResults-r16.c
+NR_SL-MeasTriggerQuantity-r16.c
+NR_SL-MinMaxMCS-Config-r16.c
+NR_SL-MinMaxMCS-List-r16.c
+NR_SL-NR-AnchorCarrierFreqList-r16.c
+NR_SlotBased-r16.c
+NR_SlotBased-v1630.c
+NR_SlotFormatCombination.c
+NR_SlotFormatCombinationId.c
+NR_SlotFormatCombinationsPerCell.c
+NR_SlotFormatIndicator.c
+NR_SL-PagingIdentityRemoteUE-r17.c
+NR_SL-PagingInfo-RemoteUE-r17.c
+NR_SL-PathSwitchConfig-r17.c
+NR_SL-PBPS-CPS-Config-r17.c
+NR_SL-PDCP-ConfigPC5-r16.c
+NR_SL-PDCP-Config-r16.c
+NR_SL-PeriodCG-r16.c
+NR_SL-PeriodicalReportConfig-r16.c
+NR_SL-PHY-MAC-RLC-Config-r16.c
+NR_SL-PHY-MAC-RLC-Config-v1700.c
+NR_SL-PowerControl-r16.c
+NR_SL-PQFI-r16.c
+NR_SL-PQI-r16.c
+NR_SL-PreconfigGeneral-r16.c
+NR_SL-PreconfigurationNR-r16.c
+NR_SL-PriorityTxConfigIndex-r16.c
+NR_SL-PriorityTxConfigIndex-v1650.c
+NR_SL-PSBCH-Config-r16.c
+NR_SL-PSCCH-Config-r16.c
+NR_SL-PSFCH-Config-r16.c
+NR_SL-PSSCH-Config-r16.c
+NR_SL-PSSCH-TxConfigList-r16.c
+NR_SL-PSSCH-TxConfig-r16.c
+NR_SL-PSSCH-TxParameters-r16.c
+NR_SL-PTRS-Config-r16.c
+NR_SL-QoS-FlowIdentity-r16.c
+NR_SL-QoS-Info-r16.c
+NR_SL-QoS-Profile-r16.c
+NR_SL-QuantityConfig-r16.c
+NR_SL-RadioBearerConfig-r16.c
+NR_SLRB-Config-r16.c
+NR_SLRB-PC5-ConfigIndex-r16.c
+NR_SLRB-Uu-ConfigIndex-r16.c
+NR_SL-RelayUE-Config-r17.c
+NR_SL-RemoteUE-Config-r17.c
+NR_SL-RemoteUE-RB-Identity-r17.c
+NR_SL-RemoteUE-ToAddMod-r17.c
+NR_SL-ReportConfigId-r16.c
+NR_SL-ReportConfigInfo-r16.c
+NR_SL-ReportConfigList-r16.c
+NR_SL-ReportConfig-r16.c
+NR_SL-ReportConfigToRemoveList-r16.c
+NR_SL-RequestedSIB-List-r17.c
+NR_SL-ReselectionConfig-r17.c
+NR_SL-ResourcePoolConfig-r16.c
+NR_SL-ResourcePoolID-r16.c
+NR_SL-ResourcePool-r16.c
+NR_SL-ResourceReservePeriod-r16.c
+NR_SL-RLC-BearerConfigIndex-r16.c
+NR_SL-RLC-BearerConfig-r16.c
+NR_SL-RLC-ChannelConfigPC5-r17.c
+NR_SL-RLC-ChannelConfig-r17.c
+NR_SL-RLC-ChannelID-r17.c
+NR_SL-RLC-ConfigPC5-r16.c
+NR_SL-RLC-Config-r16.c
+NR_SL-RLC-ModeIndication-r16.c
+NR_SL-RoHC-Profiles-r16.c
+NR_SL-RSRP-Range-r16.c
+NR_SL-RS-Type-r16.c
+NR_SL-RxDRX-ReportList-v1700.c
+NR_SL-RxDRX-Report-v1700.c
+NR_SL-RxInterestedGC-BC-DestList-r17.c
+NR_SL-RxInterestedGC-BC-Dest-r17.c
+NR_SL-ScheduledConfig-r16.c
+NR_SL-SDAP-ConfigPC5-r16.c
+NR_SL-SDAP-Config-r16.c
+NR_SL-SelectionWindowConfig-r16.c
+NR_SL-SelectionWindowList-r16.c
+NR_SL-ServingCellInfo-r17.c
+NR_SL-SIB-ReqInfo-r17.c
+NR_SL-SourceIdentity-r17.c
+NR_SL-SRAP-Config-r17.c
+NR_SL-SSB-TimeAllocation-r16.c
+NR_SL-SyncAllowed-r16.c
+NR_SL-SyncConfigList-r16.c
+NR_SL-SyncConfig-r16.c
+NR_SL-ThresholdRSRP-Condition1-B-1-r17.c
+NR_SL-Thres-RSRP-List-r16.c
+NR_SL-Thres-RSRP-r16.c
+NR_SL-TimeOffsetEUTRA-r16.c
+NR_SL-TrafficPatternInfo-r16.c
+NR_SL-TxConfigIndex-r16.c
+NR_SL-TxInterestedFreqList-r16.c
+NR_SL-TxPercentageConfig-r16.c
+NR_SL-TxPercentageList-r16.c
+NR_SL-TxPoolDedicated-r16.c
+NR_SL-TxPower-r16.c
+NR_SL-TxProfileList-r17.c
+NR_SL-TxProfile-r17.c
+NR_SL-TxResourceReqCommRelayInfo-r17.c
+NR_SL-TxResourceReqCommRelay-r17.c
+NR_SL-TxResourceReqDisc-r17.c
+NR_SL-TxResourceReqL2U2N-Relay-r17.c
+NR_SL-TxResourceReqListCommRelay-r17.c
+NR_SL-TxResourceReqListDisc-r17.c
+NR_SL-TxResourceReqList-r16.c
+NR_SL-TxResourceReqList-v1700.c
+NR_SL-TxResourceReq-r16.c
+NR_SL-TxResourceReq-v1700.c
+NR_SL-TypeTxSync-r16.c
+NR_SL-UE-AssistanceInformationNR-r16.c
+NR_SL-UE-SelectedConfig-r16.c
+NR_SL-UE-SelectedConfigRP-r16.c
+NR_SL-ZoneConfigMCR-r16.c
+NR_SL-ZoneConfig-r16.c
+NR_SN-FieldLengthAM.c
+NR_SN-FieldLengthUM.c
+NR_SNPN-AccessInfo-r17.c
+NR_S-NSSAI.c
+NR_SON-Parameters-r16.c
+NR_SpatialRelationInfo-PDC-r17.c
+NR_SpatialRelations.c
+NR_SpatialRelationsSRS-Pos-r16.c
+NR_SpCellConfig.c
+NR_SpeedStateScaleFactors.c
+NR_SPS-Config.c
+NR_SPS-ConfigDeactivationStateList-r16.c
+NR_SPS-ConfigDeactivationState-r16.c
+NR_SPS-ConfigIndex-r16.c
+NR_SPS-ConfigMulticastToAddModList-r17.c
+NR_SPS-ConfigMulticastToReleaseList-r17.c
+NR_SPS-ConfigToAddModList-r16.c
+NR_SPS-ConfigToReleaseList-r16.c
+NR_SPS-PUCCH-AN-List-r16.c
+NR_SPS-PUCCH-AN-r16.c
+NR_SRB-Identity.c
+NR_SRB-Identity-v1700.c
+NR_SRB-ToAddMod.c
+NR_SRB-ToAddModList.c
+NR_SRI-PUSCH-PowerControl.c
+NR_SRI-PUSCH-PowerControlId.c
+NR_SRS-AllPosResources-r16.c
+NR_SRS-AllPosResourcesRRC-Inactive-r17.c
+NR_SRS-CarrierSwitching.c
+NR_SRS-CC-SetIndex.c
+NR_SRS-Config.c
+NR_SRS-PathlossReferenceRS-Id-r16.c
+NR_SRS-PeriodicityAndOffset.c
+NR_SRS-PeriodicityAndOffsetExt-r16.c
+NR_SRS-PeriodicityAndOffset-r16.c
+NR_SRS-PosConfig-r17.c
+NR_SRS-PosResourceAP-r16.c
+NR_SRS-PosResourceId-r16.c
+NR_SRS-PosResource-r16.c
+NR_SRS-PosResourceSetId-r16.c
+NR_SRS-PosResourceSet-r16.c
+NR_SRS-PosResourceSP-r16.c
+NR_SRS-PosResources-r16.c
+NR_SRS-PosRRC-InactiveConfig-r17.c
+NR_SRS-PosRRC-Inactive-r17.c
+NR_SRS-Resource.c
+NR_SRS-ResourceConfigCLI-r16.c
+NR_SRS-ResourceId.c
+NR_SRS-ResourceListConfigCLI-r16.c
+NR_SRS-Resources.c
+NR_SRS-ResourceSet.c
+NR_SRS-ResourceSetId.c
+NR_SRS-RSRP-Range-r16.c
+NR_SRS-RSRP-TriggeredList-r16.c
+NR_SRS-SpatialRelationInfo.c
+NR_SRS-SpatialRelationInfoPos-r16.c
+NR_SRS-SwitchingAffectedBandsNR-r17.c
+NR_SRS-SwitchingTimeEUTRA.c
+NR_SRS-SwitchingTimeNR.c
+NR_SRS-TPC-CommandConfig.c
+NR_SRS-TPC-PDCCH-Config.c
+NR_SSB-ConfigMobility.c
+NR_SSB-Configuration-r16.c
+NR_SSB-Index.c
+NR_SSB-InfoNcell-r16.c
+NR_SSB-MTC2.c
+NR_SSB-MTC2-LP-r16.c
+NR_SSB-MTC3List-r16.c
+NR_SSB-MTC3-r16.c
+NR_SSB-MTC4List-r17.c
+NR_SSB-MTC4-r17.c
+NR_SSB-MTC-AdditionalPCI-r17.c
+NR_SSB-MTC.c
+NR_SSB-PositionQCL-CellList-r17.c
+NR_SSB-PositionQCL-Cell-r17.c
+NR_SSB-PositionQCL-CellsToAddModList-r16.c
+NR_SSB-PositionQCL-CellsToAddMod-r16.c
+NR_SSB-PositionQCL-Relation-r16.c
+NR_SSB-PositionQCL-Relation-r17.c
+NR_SSB-ToMeasure.c
+NR_SS-RSSI-Measurement.c
+NR_SubcarrierSpacing.c
+NR_SubgroupConfig-r17.c
+NR_SubSlot-Config-r16.c
+NR_SuccessHO-Config-r17.c
+NR_SuccessHO-Report-r17.c
+NR_SupportedBandUTRA-FDD-r16.c
+NR_SupportedBandwidth.c
+NR_SupportedBandwidth-v1700.c
+NR_SupportedCSI-RS-Resource.c
+NR_SuspendConfig.c
+NR_SystemInformation.c
+NR_SystemInformation-IEs.c
+NR_T312-r16.c
+NR_T316-r16.c
+NR_TAG.c
+NR_TAG-Config.c
+NR_TAG-Id.c
+NR_TA-Info-r17.c
+NR_TAR-Config-r17.c
+NR_TCI-ActivatedConfig-r17.c
+NR_TCI-State.c
+NR_TCI-StateId.c
+NR_TCI-UL-State-Id-r17.c
+NR_TCI-UL-State-r17.c
+NR_TDD-UL-DL-ConfigCommon.c
+NR_TDD-UL-DL-ConfigDedicated.c
+NR_TDD-UL-DL-ConfigDedicated-IAB-MT-r16.c
+NR_TDD-UL-DL-Pattern.c
+NR_TDD-UL-DL-SlotConfig.c
+NR_TDD-UL-DL-SlotConfig-IAB-MT-r16.c
+NR_TDD-UL-DL-SlotIndex.c
+NR_ThresholdNR.c
+NR_TimeAlignmentTimer.c
+NR_TimeBetweenEvent-r17.c
+NR_TimeConnSourceDAPS-Failure-r17.c
+NR_TimeSinceCHO-Reconfig-r17.c
+NR_TimeSinceFailure-r16.c
+NR_TimeToTrigger.c
+NR_TimeUntilReconnection-r16.c
+NR_TMGI-r17.c
+NR_T-Offset-r16.c
+NR_T-PollRetransmit.c
+NR_TraceReference-r16.c
+NR_TrackingAreaCode.c
+NR_TrackingAreaCodeList-r16.c
+NR_TrackingAreaIdentityList-r16.c
+NR_TrackingAreaIdentity-r16.c
+NR_TransmissionBandwidth-EUTRA-r16.c
+NR_T-Reassembly.c
+NR_T-ReassemblyExt-r17.c
+NR_T-Reselection.c
+NR_TRS-ResourceSet-r17.c
+NR_T-StatusProhibit.c
+NR_T-StatusProhibit-v1610.c
+NR_TwoPUCCH-Grp-ConfigParams-r16.c
+NR_TwoPUCCH-Grp-Configurations-r16.c
+NR_TwoPUCCH-Grp-Configurations-r17.c
+NR_Tx-PoolMeasList-r16.c
+NR_UAC-AC1-SelectAssistInfo-r16.c
+NR_UAC-AccessCategory1-SelectionAssistanceInfo.c
+NR_UAC-BarringInfoSet.c
+NR_UAC-BarringInfoSetIndex.c
+NR_UAC-BarringInfoSetList.c
+NR_UAC-BarringInfoSetList-v1700.c
+NR_UAC-BarringInfoSet-v1700.c
+NR_UAC-BarringPerCat.c
+NR_UAC-BarringPerCatList.c
+NR_UAC-BarringPerPLMN.c
+NR_UAC-BarringPerPLMN-List.c
+NR_UCI-OnPUSCH.c
+NR_UCI-OnPUSCH-DCI-0-2-r16.c
+NR_UCI-OnPUSCH-ListDCI-0-1-r16.c
+NR_UCI-OnPUSCH-ListDCI-0-2-r16.c
+NR_UEAssistanceInformation.c
+NR_UEAssistanceInformation-IEs.c
+NR_UEAssistanceInformationSidelink-r17.c
+NR_UEAssistanceInformationSidelink-r17-IEs.c
+NR_UEAssistanceInformation-v1540-IEs.c
+NR_UEAssistanceInformation-v1610-IEs.c
+NR_UEAssistanceInformation-v1700-IEs.c
+NR_UE-BasedPerfMeas-Parameters-r16.c
+NR_UECapabilityEnquiry.c
+NR_UECapabilityEnquiry-IEs.c
+NR_UECapabilityEnquirySidelink.c
+NR_UECapabilityEnquirySidelink-r16-IEs.c
+NR_UECapabilityEnquiry-v1560-IEs.c
+NR_UECapabilityEnquiry-v1610-IEs.c
+NR_UECapabilityInformation.c
+NR_UECapabilityInformation-IEs.c
+NR_UECapabilityInformationSidelink.c
+NR_UECapabilityInformationSidelink-r16-IEs.c
+NR_UECapabilityInformationSidelink-v1700-IEs.c
+NR_UE-CapabilityRAT-Container.c
+NR_UE-CapabilityRAT-ContainerList.c
+NR_UE-CapabilityRAT-Request.c
+NR_UE-CapabilityRAT-RequestList.c
+NR_UE-CapabilityRequestFilterCommon.c
+NR_UE-CapabilityRequestFilterNR.c
+NR_UE-CapabilityRequestFilterNR-v1540.c
+NR_UE-CapabilityRequestFilterNR-v1710.c
+NR_UEInformationRequest-r16.c
+NR_UEInformationRequest-r16-IEs.c
+NR_UEInformationRequest-v1700-IEs.c
+NR_UEInformationResponse-r16.c
+NR_UEInformationResponse-r16-IEs.c
+NR_UEInformationResponse-v1700-IEs.c
+NR_UE-MeasurementsAvailable-r16.c
+NR_UE-MRDC-CapabilityAddFRX-Mode.c
+NR_UE-MRDC-CapabilityAddXDD-Mode.c
+NR_UE-MRDC-CapabilityAddXDD-Mode-v1560.c
+NR_UE-MRDC-Capability.c
+NR_UE-MRDC-Capability-v1560.c
+NR_UE-MRDC-Capability-v15g0.c
+NR_UE-MRDC-Capability-v1610.c
+NR_UE-MRDC-Capability-v1700.c
+NR_UE-MRDC-Capability-v1730.c
+NR_UE-NR-CapabilityAddFRX-Mode.c
+NR_UE-NR-CapabilityAddFRX-Mode-v1540.c
+NR_UE-NR-CapabilityAddFRX-Mode-v1610.c
+NR_UE-NR-CapabilityAddXDD-Mode.c
+NR_UE-NR-CapabilityAddXDD-Mode-v1530.c
+NR_UE-NR-Capability.c
+NR_UE-NR-Capability-v1530.c
+NR_UE-NR-Capability-v1540.c
+NR_UE-NR-Capability-v1550.c
+NR_UE-NR-Capability-v1560.c
+NR_UE-NR-Capability-v1570.c
+NR_UE-NR-Capability-v15c0.c
+NR_UE-NR-Capability-v15g0.c
+NR_UE-NR-Capability-v15j0.c
+NR_UE-NR-Capability-v1610.c
+NR_UE-NR-Capability-v1640.c
+NR_UE-NR-Capability-v1650.c
+NR_UE-NR-Capability-v1690.c
+NR_UE-NR-Capability-v16a0.c
+NR_UE-NR-Capability-v1700.c
+NR_UEPositioningAssistanceInfo-r17.c
+NR_UEPositioningAssistanceInfo-r17-IEs.c
+NR_UEPositioningAssistanceInfo-v1720-IEs.c
+NR_UERadioAccessCapabilityInformation.c
+NR_UERadioAccessCapabilityInformation-IEs.c
+NR_UE-RadioPagingInfo-r17.c
+NR_UERadioPagingInformation.c
+NR_UERadioPagingInformation-IEs.c
+NR_UERadioPagingInformation-v15e0-IEs.c
+NR_UERadioPagingInformation-v1700-IEs.c
+NR_UE-SidelinkCapabilityAddXDD-Mode-r16.c
+NR_UE-TimersAndConstants.c
+NR_UE-TimersAndConstantsRemoteUE-r17.c
+NR_UE-TxTEG-AssociationList-r17.c
+NR_UE-TxTEG-Association-r17.c
+NR_UE-TxTEG-RequestUL-TDOA-Config-r17.c
+NR_UL-AccessConfigListDCI-0-1-r16.c
+NR_UL-AccessConfigListDCI-0-1-r17.c
+NR_UL-AccessConfigListDCI-0-2-r17.c
+NR_UL-AccessConfigListDCI-1-1-r16.c
+NR_UL-AccessConfigListDCI-1-1-r17.c
+NR_UL-AccessConfigListDCI-1-2-r17.c
+NR_UL-AM-RLC.c
+NR_UL-CCCH1-Message.c
+NR_UL-CCCH1-MessageType.c
+NR_UL-CCCH-Message.c
+NR_UL-CCCH-MessageType.c
+NR_UL-DataSplitThreshold.c
+NR_UL-DCCH-Message.c
+NR_UL-DCCH-MessageType.c
+NR_ULDedicatedMessageSegment-r16.c
+NR_ULDedicatedMessageSegment-r16-IEs.c
+NR_UL-DelayValueConfig-r16.c
+NR_UL-ExcessDelayConfig-r17.c
+NR_UL-GapFR2-Config-r17.c
+NR_UL-GapFR2-Preference-r17.c
+NR_ULInformationTransfer.c
+NR_ULInformationTransfer-IEs.c
+NR_ULInformationTransferIRAT-r16.c
+NR_ULInformationTransferIRAT-r16-IEs.c
+NR_ULInformationTransferMRDC.c
+NR_ULInformationTransferMRDC-IEs.c
+NR_ULInformationTransfer-v1700-IEs.c
+NR_UL-PDCP-DelayValueResultList-r16.c
+NR_UL-PDCP-DelayValueResult-r16.c
+NR_UL-PDCP-ExcessDelayResultList-r17.c
+NR_UL-PDCP-ExcessDelayResult-r17.c
+NR_ULTxSwitchingBandPair-r16.c
+NR_ULTxSwitchingBandPair-v1700.c
+NR_UL-UM-RLC.c
+NR_UPInterruptionTimeAtHO-r17.c
+NR_UplinkCancellation-r16.c
+NR_UplinkConfig.c
+NR_UplinkConfigCommon.c
+NR_UplinkConfigCommonSIB.c
+NR_UplinkConfigCommonSIB-v1700.c
+NR_UplinkConfigCommon-v1700.c
+NR_UplinkDataCompression-r17.c
+NR_UplinkHARQ-mode-r17.c
+NR_Uplink-powerControlId-r17.c
+NR_Uplink-powerControl-r17.c
+NR_UplinkTxDirectCurrentBWP.c
+NR_UplinkTxDirectCurrentCarrierInfo-r16.c
+NR_UplinkTxDirectCurrentCell.c
+NR_UplinkTxDirectCurrentList.c
+NR_UplinkTxDirectCurrentMoreCarrierList-r17.c
+NR_UplinkTxDirectCurrentTwoCarrierInfo-r16.c
+NR_UplinkTxDirectCurrentTwoCarrierList-r16.c
+NR_UplinkTxDirectCurrentTwoCarrier-r16.c
+NR_UplinkTxSwitchingBandParameters-v1700.c
+NR_UplinkTxSwitching-r16.c
+NR_UTRA-FDD-CellIndexList-r16.c
+NR_UTRA-FDD-CellIndex-r16.c
+NR_UTRA-FDD-Parameters-r16.c
+NR_UTRA-FDD-Q-OffsetRange-r16.c
+NR_UuMessageTransferSidelink-r17.c
+NR_UuMessageTransferSidelink-r17-IEs.c
+NR_Uu-RelayRLC-ChannelConfig-r17.c
+NR_Uu-RelayRLC-ChannelID-r17.c
+NR_ValidityAreaList-r16.c
+NR_ValidityArea-r16.c
+NR_ValidityCellList.c
+NR_VarConditionalReconfig.c
+NR_VarConnEstFailReportList-r17.c
+NR_VarConnEstFailReport-r16.c
+NR_VarLogMeasConfig-r16-IEs.c
+NR_VarLogMeasReport-r16.c
+NR_VarMeasConfig.c
+NR_VarMeasConfigSL-r16.c
+NR_VarMeasIdleConfig-r16.c
+NR_VarMeasIdleReport-r16.c
+NR_VarMeasReport.c
+NR_VarMeasReportList.c
+NR_VarMeasReportListSL-r16.c
+NR_VarMeasReportSL-r16.c
+NR_VarMobilityHistoryReport-r16.c
+NR_VarMobilityHistoryReport-r17.c
+NR_VarPendingRNA-Update.c
+NR_VarRA-Report-r16.c
+NR_VarResumeMAC-Input.c
+NR_VarRLF-Report-r16.c
+NR_VarShortMAC-Input.c
+NR_VarSuccessHO-Report-r17-IEs.c
+NR_VelocityStateVector-r17.c
+NR_VictimSystemType.c
+NR_VictimSystemType-r16.c
+NR_VisitedCellInfoList-r16.c
+NR_VisitedCellInfo-r16.c
+NR_VisitedPSCellInfoList-r17.c
+NR_VisitedPSCellInfo-r17.c
+NR_WithinActiveTimeConfig-r16.c
+NR_WLAN-Identifiers-r16.c
+NR_WLAN-NameList-r16.c
+NR_WLAN-Name-r16.c
+NR_WLAN-RSSI-Range-r16.c
+NR_WLAN-RTT-r16.c
+NR_ZP-CSI-RS-Resource.c
+NR_ZP-CSI-RS-ResourceId.c
+NR_ZP-CSI-RS-ResourceSet.c
+NR_ZP-CSI-RS-ResourceSetId.c
+NULL.c
+OCTET_STRING.c
+OPEN_TYPE.c
+per_decoder.c
+per_encoder.c
+per_opentype.c
+per_support.c
+xer_decoder.c
+xer_encoder.c
+xer_support.c
+)
+
+set(nr_rrc_headers
+asn_application.h
+asn_bit_data.h
+asn_codecs.h
+asn_codecs_prim.h
+asn_internal.h
+asn_ioc.h
+asn_random_fill.h
+asn_SEQUENCE_OF.h
+asn_SET_OF.h
+asn_system.h
+ber_decoder.h
+ber_tlv_length.h
+ber_tlv_tag.h
+BIT_STRING.h
+BOOLEAN.h
+constraints.h
+constr_CHOICE.h
+constr_SEQUENCE.h
+constr_SEQUENCE_OF.h
+constr_SET_OF.h
+constr_TYPE.h
+der_encoder.h
+INTEGER.h
+NativeEnumerated.h
+NativeInteger.h
+NR_AbsoluteTimeInfo-r16.h
+NR_AccessStratumRelease.h
+NR_AccessStratumReleaseSidelink-r16.h
+NR_AdditionalPCIIndex-r17.h
+NR_AdditionalRACH-ConfigList-r17.h
+NR_AdditionalRACH-Config-r17.h
+NR_AdditionalSpectrumEmission.h
+NR_AffectedCarrierFreqCombEUTRA.h
+NR_AffectedCarrierFreqCombInfoMRDC.h
+NR_AffectedCarrierFreqCombList-r16.h
+NR_AffectedCarrierFreqCombNR.h
+NR_AffectedCarrierFreqComb-r16.h
+NR_AffectedCarrierFreqList-r16.h
+NR_AffectedCarrierFreq-r16.h
+NR_AggregatedBandwidth.h
+NR_AI-RNTI-r16.h
+NR_Alpha.h
+NR_AMF-Identifier.h
+NR_AppLayerBufferLevel-r17.h
+NR_AppLayerMeasConfig-r17.h
+NR_AppLayerMeasParameters-r17.h
+NR_ApplicableDisasterInfo-r17.h
+NR_AreaConfig-r16.h
+NR_AreaConfiguration-r16.h
+NR_AreaConfiguration-v1700.h
+NR_ARFCN-ValueEUTRA.h
+NR_ARFCN-ValueNR.h
+NR_ARFCN-ValueUTRA-FDD-r16.h
+NR_AS-Config.h
+NR_AS-Context.h
+NR_asn_constant.h
+NR_AvailabilityCombinationId-r16.h
+NR_AvailabilityCombination-r16.h
+NR_AvailabilityCombinationRB-Groups-r17.h
+NR_AvailabilityCombinationsPerCellIndex-r16.h
+NR_AvailabilityCombinationsPerCell-r16.h
+NR_AvailabilityIndicator-r16.h
+NR_AvailableRB-SetsPerCell-r16.h
+NR_AvailableSlotOffset-r17.h
+NR_BandCombination.h
+NR_BandCombinationIndex.h
+NR_BandCombinationInfo.h
+NR_BandCombinationInfoList.h
+NR_BandCombinationInfoSN.h
+NR_BandCombinationList.h
+NR_BandCombinationListSidelinkEUTRA-NR-r16.h
+NR_BandCombinationListSidelinkEUTRA-NR-v1630.h
+NR_BandCombinationListSidelinkEUTRA-NR-v1710.h
+NR_BandCombinationListSidelinkNR-r16.h
+NR_BandCombinationListSidelinkNR-v1710.h
+NR_BandCombinationListSL-Discovery-r17.h
+NR_BandCombinationList-UplinkTxSwitch-r16.h
+NR_BandCombinationList-UplinkTxSwitch-v1630.h
+NR_BandCombinationList-UplinkTxSwitch-v1640.h
+NR_BandCombinationList-UplinkTxSwitch-v1650.h
+NR_BandCombinationList-UplinkTxSwitch-v1670.h
+NR_BandCombinationList-UplinkTxSwitch-v1690.h
+NR_BandCombinationList-UplinkTxSwitch-v16a0.h
+NR_BandCombinationList-UplinkTxSwitch-v1700.h
+NR_BandCombinationList-UplinkTxSwitch-v1720.h
+NR_BandCombinationList-UplinkTxSwitch-v1730.h
+NR_BandCombinationList-v1540.h
+NR_BandCombinationList-v1550.h
+NR_BandCombinationList-v1560.h
+NR_BandCombinationList-v1570.h
+NR_BandCombinationList-v1580.h
+NR_BandCombinationList-v1590.h
+NR_BandCombinationList-v15g0.h
+NR_BandCombinationList-v1610.h
+NR_BandCombinationList-v1630.h
+NR_BandCombinationList-v1640.h
+NR_BandCombinationList-v1650.h
+NR_BandCombinationList-v1680.h
+NR_BandCombinationList-v1690.h
+NR_BandCombinationList-v16a0.h
+NR_BandCombinationList-v1700.h
+NR_BandCombinationList-v1720.h
+NR_BandCombinationList-v1730.h
+NR_BandCombinationParametersSidelinkEUTRA-NR-r16.h
+NR_BandCombinationParametersSidelinkEUTRA-NR-v1630.h
+NR_BandCombinationParametersSidelinkEUTRA-NR-v1710.h
+NR_BandCombinationParametersSidelinkNR-r16.h
+NR_BandCombinationParametersSidelinkNR-v1710.h
+NR_BandCombination-UplinkTxSwitch-r16.h
+NR_BandCombination-UplinkTxSwitch-v1630.h
+NR_BandCombination-UplinkTxSwitch-v1640.h
+NR_BandCombination-UplinkTxSwitch-v1650.h
+NR_BandCombination-UplinkTxSwitch-v1670.h
+NR_BandCombination-UplinkTxSwitch-v1690.h
+NR_BandCombination-UplinkTxSwitch-v16a0.h
+NR_BandCombination-UplinkTxSwitch-v1700.h
+NR_BandCombination-UplinkTxSwitch-v1720.h
+NR_BandCombination-UplinkTxSwitch-v1730.h
+NR_BandCombination-v1540.h
+NR_BandCombination-v1550.h
+NR_BandCombination-v1560.h
+NR_BandCombination-v1570.h
+NR_BandCombination-v1580.h
+NR_BandCombination-v1590.h
+NR_BandCombination-v15g0.h
+NR_BandCombination-v1610.h
+NR_BandCombination-v1630.h
+NR_BandCombination-v1640.h
+NR_BandCombination-v1650.h
+NR_BandCombination-v1680.h
+NR_BandCombination-v1690.h
+NR_BandCombination-v16a0.h
+NR_BandCombination-v1700.h
+NR_BandCombination-v1720.h
+NR_BandCombination-v1730.h
+NR_BandEntryIndex.h
+NR_BandNR.h
+NR_BandParameters.h
+NR_BandParametersSidelinkDiscovery-r17.h
+NR_BandParametersSidelinkEUTRA-NR-r16.h
+NR_BandParametersSidelinkEUTRA-NR-v1630.h
+NR_BandParametersSidelinkEUTRA-NR-v1710.h
+NR_BandParametersSidelink-r16.h
+NR_BandParametersSidelink-v1710.h
+NR_BandParameters-v1540.h
+NR_BandParameters-v1610.h
+NR_BandParameters-v1710.h
+NR_BandParameters-v1730.h
+NR_BandSidelinkEUTRA-r16.h
+NR_BandSidelinkPC5-r16.h
+NR_BandSidelink-r16.h
+NR_BAP-Config-r16.h
+NR_BAP-Parameters-r16.h
+NR_BAP-Parameters-v1700.h
+NR_BAP-RoutingID-r16.h
+NR_BCCH-BCH-Message.h
+NR_BCCH-BCH-MessageType.h
+NR_BCCH-Config.h
+NR_BCCH-DL-SCH-Message.h
+NR_BCCH-DL-SCH-MessageType.h
+NR_BeamFailureDetection-r17.h
+NR_BeamFailureDetectionSet-r17.h
+NR_BeamFailureRecoveryConfig.h
+NR_BeamFailureRecoveryRSConfig-r16.h
+NR_BeamLinkMonitoringRS-Id-r17.h
+NR_BeamLinkMonitoringRS-r17.h
+NR_BeamManagementSSB-CSI-RS.h
+NR_BeamMeasConfigIdle-NR-r16.h
+NR_BetaOffsetsCrossPri-r17.h
+NR_BetaOffsetsCrossPriSelCG-r17.h
+NR_BetaOffsetsCrossPriSelDCI-0-2-r17.h
+NR_BetaOffsetsCrossPriSel-r17.h
+NR_BetaOffsets.h
+NR_BFD-RelaxationReportingConfig-r17.h
+NR_BFR-CSIRS-Resource.h
+NR_BFR-SSB-Resource.h
+NR_BH-LogicalChannelIdentity-Ext-r16.h
+NR_BH-LogicalChannelIdentity-r16.h
+NR_BH-RLC-ChannelConfig-r16.h
+NR_BH-RLC-ChannelID-r16.h
+NR_BSR-Config.h
+NR_BT-NameList-r16.h
+NR_BT-Name-r16.h
+NR_BWP-DownlinkCommon.h
+NR_BWP-DownlinkDedicated.h
+NR_BWP-DownlinkDedicatedSDT-r17.h
+NR_BWP-Downlink.h
+NR_BWP.h
+NR_BWP-Id.h
+NR_BWP-UplinkCommon.h
+NR_BWP-UplinkDedicated.h
+NR_BWP-UplinkDedicatedSDT-r17.h
+NR_BWP-Uplink.h
+NR_CA-BandwidthClassEUTRA.h
+NR_CA-BandwidthClassNR.h
+NR_CAG-IdentityInfo-r16.h
+NR_CandidateBeamRSListExt-r16.h
+NR_CandidateBeamRS-r16.h
+NR_CandidateCellCPC-r17.h
+NR_CandidateCellInfoListCPC-r17.h
+NR_CandidateCellInfo-r17.h
+NR_CandidateCellListCPC-r17.h
+NR_CandidateCell-r17.h
+NR_CandidateServingFreqListEUTRA.h
+NR_CandidateServingFreqListNR.h
+NR_CandidateServingFreqListNR-r16.h
+NR_CA-ParametersEUTRA.h
+NR_CA-ParametersEUTRA-v1560.h
+NR_CA-ParametersEUTRA-v1570.h
+NR_CA-ParametersNRDC.h
+NR_CA-ParametersNRDC-v15g0.h
+NR_CA-ParametersNRDC-v1610.h
+NR_CA-ParametersNRDC-v1630.h
+NR_CA-ParametersNRDC-v1640.h
+NR_CA-ParametersNRDC-v1650.h
+NR_CA-ParametersNRDC-v16a0.h
+NR_CA-ParametersNRDC-v1700.h
+NR_CA-ParametersNRDC-v1720.h
+NR_CA-ParametersNRDC-v1730.h
+NR_CA-ParametersNR.h
+NR_CA-ParametersNR-v1540.h
+NR_CA-ParametersNR-v1550.h
+NR_CA-ParametersNR-v1560.h
+NR_CA-ParametersNR-v15g0.h
+NR_CA-ParametersNR-v1610.h
+NR_CA-ParametersNR-v1630.h
+NR_CA-ParametersNR-v1640.h
+NR_CA-ParametersNR-v1690.h
+NR_CA-ParametersNR-v16a0.h
+NR_CA-ParametersNR-v1700.h
+NR_CA-ParametersNR-v1720.h
+NR_CA-ParametersNR-v1730.h
+NR_CarrierAggregationVariant.h
+NR_CarrierFreqEUTRA.h
+NR_CarrierFreqEUTRA-v1610.h
+NR_CarrierFreqEUTRA-v1700.h
+NR_CarrierFreqListEUTRA.h
+NR_CarrierFreqListEUTRA-v1610.h
+NR_CarrierFreqListEUTRA-v1700.h
+NR_CarrierFreqListMBS-r17.h
+NR_CarrierInfoNR.h
+NR_CarrierState-r17.h
+NR_CarrierTypePair-r16.h
+NR_CC-Group-r17.h
+NR_CC-State-r17.h
+NR_CellAccessRelatedInfo-EUTRA-5GC.h
+NR_CellAccessRelatedInfo-EUTRA-EPC.h
+NR_CellAccessRelatedInfo.h
+NR_CellGlobalIdList-r16.h
+NR_CellGroupConfig.h
+NR_CellGroupForSwitch-r16.h
+NR_CellGroupId.h
+NR_CellGrouping-r16.h
+NR_CellIdentity-EUTRA-5GC.h
+NR_CellIdentity.h
+NR_CellListEUTRA-r16.h
+NR_CellListNR-r16.h
+NR_CellReselectionPriorities.h
+NR_CellReselectionPriority.h
+NR_CellReselectionSubPriority.h
+NR_CellsToAddModExt-v1710.h
+NR_CellsToAddMod.h
+NR_CellsToAddModListExt-v1710.h
+NR_CellsToAddModList.h
+NR_CellsToAddModListUTRA-FDD-r16.h
+NR_CellsToAddModUTRA-FDD-r16.h
+NR_CellsTriggeredList.h
+NR_CFRA-CSIRS-Resource.h
+NR_CFRA.h
+NR_CFRA-SSB-Resource.h
+NR_CFRA-TwoStep-r16.h
+NR_CFR-ConfigMCCH-MTCH-r17.h
+NR_CFR-ConfigMulticast-r17.h
+NR_CG-CandidateInfoId-r17.h
+NR_CG-CandidateInfo-r17.h
+NR_CG-CandidateList.h
+NR_CG-CandidateList-r17-IEs.h
+NR_CG-Config.h
+NR_CG-Config-IEs.h
+NR_CG-ConfigInfo.h
+NR_CG-ConfigInfo-IEs.h
+NR_CG-ConfigInfo-v1540-IEs.h
+NR_CG-ConfigInfo-v1560-IEs.h
+NR_CG-ConfigInfo-v1570-IEs.h
+NR_CG-ConfigInfo-v1590-IEs.h
+NR_CG-ConfigInfo-v1610-IEs.h
+NR_CG-ConfigInfo-v1620-IEs.h
+NR_CG-ConfigInfo-v1640-IEs.h
+NR_CG-ConfigInfo-v1700-IEs.h
+NR_CG-ConfigInfo-v1730-IEs.h
+NR_CG-Config-v1540-IEs.h
+NR_CG-Config-v1560-IEs.h
+NR_CG-Config-v1590-IEs.h
+NR_CG-Config-v1610-IEs.h
+NR_CG-Config-v1620-IEs.h
+NR_CG-Config-v1630-IEs.h
+NR_CG-Config-v1640-IEs.h
+NR_CG-Config-v1700-IEs.h
+NR_CG-Config-v1730-IEs.h
+NR_CG-COT-Sharing-r16.h
+NR_CG-COT-Sharing-r17.h
+NR_CGI-InfoEUTRA.h
+NR_CGI-InfoEUTRALogging.h
+NR_CGI-Info-Logging-r16.h
+NR_CGI-InfoNR.h
+NR_CG-SDT-ConfigLCH-Restriction-r17.h
+NR_CG-SDT-Configuration-r17.h
+NR_CG-SDT-TA-ValidationConfig-r17.h
+NR_CG-StartingOffsets-r16.h
+NR_CG-UCI-OnPUSCH.h
+NR_ChannelAccessConfig-r16.h
+NR_ChoCandidateCellList-r17.h
+NR_ChoCandidateCell-r17.h
+NR_CI-ConfigurationPerServingCell-r16.h
+NR_CipheringAlgorithm.h
+NR_CLI-EventTriggerConfig-r16.h
+NR_CLI-PeriodicalReportConfig-r16.h
+NR_CLI-ResourceConfig-r16.h
+NR_CLI-RSSI-Range-r16.h
+NR_CLI-RSSI-TriggeredList-r16.h
+NR_CLI-TriggeredList-r16.h
+NR_CMRGroupingAndPairing-r17.h
+NR_CodebookComboParameterMixedTypePerBC-r17.h
+NR_CodebookComboParameterMixedType-r17.h
+NR_CodebookComboParameterMultiTRP-PerBC-r17.h
+NR_CodebookComboParameterMultiTRP-r17.h
+NR_CodebookComboParametersAdditionPerBC-r16.h
+NR_CodebookComboParametersAddition-r16.h
+NR_CodebookConfig.h
+NR_CodebookConfig-r16.h
+NR_CodebookConfig-r17.h
+NR_CodebookConfig-v1730.h
+NR_CodebookParametersAdditionPerBC-r16.h
+NR_CodebookParametersAddition-r16.h
+NR_CodebookParametersfetype2PerBC-r17.h
+NR_CodebookParametersfetype2-r17.h
+NR_CodebookParameters.h
+NR_CodebookParameters-v1610.h
+NR_CodebookVariantsList-r16.h
+NR_CO-Duration-r16.h
+NR_CO-Duration-r17.h
+NR_CO-DurationsPerCell-r16.h
+NR_CO-DurationsPerCell-r17.h
+NR_CommonLocationInfo-r16.h
+NR_ConditionalReconfiguration-r16.h
+NR_CondReconfigExecCondSCG-r17.h
+NR_CondReconfigId-r16.h
+NR_CondReconfigToAddModList-r16.h
+NR_CondReconfigToAddMod-r16.h
+NR_CondReconfigToRemoveList-r16.h
+NR_CondTriggerConfig-r16.h
+NR_ConfigRestrictInfoDAPS-r16.h
+NR_ConfigRestrictInfoDAPS-v1640.h
+NR_ConfigRestrictInfoSCG.h
+NR_ConfigRestrictModReqSCG.h
+NR_ConfiguredGrantConfig.h
+NR_ConfiguredGrantConfigIndexMAC-r16.h
+NR_ConfiguredGrantConfigIndex-r16.h
+NR_ConfiguredGrantConfigToAddModList-r16.h
+NR_ConfiguredGrantConfigToReleaseList-r16.h
+NR_ConfiguredGrantConfigType2DeactivationStateList-r16.h
+NR_ConfiguredGrantConfigType2DeactivationState-r16.h
+NR_ConnEstFailReportList-r17.h
+NR_ConnEstFailReport-r16.h
+NR_ConnEstFailureControl.h
+NR_ControlResourceSet.h
+NR_ControlResourceSetId.h
+NR_ControlResourceSetId-r16.h
+NR_ControlResourceSetId-v1610.h
+NR_ControlResourceSetZero.h
+NR_CounterCheck.h
+NR_CounterCheck-IEs.h
+NR_CounterCheckResponse.h
+NR_CounterCheckResponse-IEs.h
+NR_CrossCarrierSchedulingConfig.h
+NR_CrossCarrierSchedulingSCell-SpCell-r17.h
+NR_CRS-InterfMitigation-r17.h
+NR_CSI-AperiodicTriggerState.h
+NR_CSI-AperiodicTriggerStateList.h
+NR_CSI-AssociatedReportConfigInfo.h
+NR_CSI-FrequencyOccupation.h
+NR_CSI-IM-Resource.h
+NR_CSI-IM-ResourceId.h
+NR_CSI-IM-ResourceSet.h
+NR_CSI-IM-ResourceSetId.h
+NR_CSI-MeasConfig.h
+NR_CSI-MultiTRP-SupportedCombinations-r17.h
+NR_CSI-ReportConfig.h
+NR_CSI-ReportConfigId.h
+NR_CSI-ReportFrameworkExt-r16.h
+NR_CSI-ReportFramework.h
+NR_CSI-ReportPeriodicityAndOffset.h
+NR_CSI-ResourceConfig.h
+NR_CSI-ResourceConfigId.h
+NR_CSI-ResourcePeriodicityAndOffset.h
+NR_CSI-RS-CellMobility.h
+NR_CSI-RS-ForTracking.h
+NR_CSI-RS-IM-ReceptionForFeedback.h
+NR_CSI-RS-Index.h
+NR_CSI-RS-ProcFrameworkForSRS.h
+NR_CSI-RS-ResourceConfigMobility.h
+NR_CSI-RS-ResourceMapping.h
+NR_CSI-RS-Resource-Mobility.h
+NR_CSI-SemiPersistentOnPUSCH-TriggerState.h
+NR_CSI-SemiPersistentOnPUSCH-TriggerStateList.h
+NR_CSI-SSB-ResourceSet.h
+NR_CSI-SSB-ResourceSetId.h
+NR_DAPS-UplinkPowerConfig-r16.h
+NR_DataInactivityTimer.h
+NR_DCP-Config-r16.h
+NR_DeactivatedSCG-Config-r17.h
+NR_DedicatedInfoF1c-r17.h
+NR_DedicatedNAS-Message.h
+NR_DedicatedSIBRequest-r16.h
+NR_DedicatedSIBRequest-r16-IEs.h
+NR_DefaultDC-Location-r17.h
+NR_DelayBudgetReport.h
+NR_DiscardTimerExt2-r17.h
+NR_DiscardTimerExt-r16.h
+NR_DL-AM-RLC.h
+NR_DL-AM-RLC-v1610.h
+NR_DL-AM-RLC-v1700.h
+NR_DL-CCCH-Message.h
+NR_DL-CCCH-MessageType.h
+NR_DL-DataToUL-ACK-DCI-1-2-r16.h
+NR_DL-DataToUL-ACK-DCI-1-2-r17.h
+NR_DL-DataToUL-ACK-MulticastDCI-Format4-1-r17.h
+NR_DL-DataToUL-ACK-r16.h
+NR_DL-DataToUL-ACK-r17.h
+NR_DL-DataToUL-ACK-v1700.h
+NR_DL-DCCH-Message.h
+NR_DL-DCCH-MessageType.h
+NR_DLDedicatedMessageSegment-r16.h
+NR_DLDedicatedMessageSegment-r16-IEs.h
+NR_DLInformationTransfer.h
+NR_DLInformationTransfer-IEs.h
+NR_DLInformationTransferMRDC-r16.h
+NR_DLInformationTransferMRDC-r16-IEs.h
+NR_DLInformationTransfer-v1610-IEs.h
+NR_DLInformationTransfer-v1700-IEs.h
+NR_DL-PPW-ID-r17.h
+NR_DL-PPW-PeriodicityAndStartSlot-r17.h
+NR_DL-PPW-PreConfig-r17.h
+NR_DL-PPW-PreConfigToAddModList-r17.h
+NR_DL-PPW-PreConfigToReleaseList-r17.h
+NR_DL-PRS-Info-r16.h
+NR_DL-PRS-QCL-Info-r17.h
+NR_DL-UM-RLC.h
+NR_DL-UM-RLC-v1700.h
+NR_DMRS-BundlingPUCCH-Config-r17.h
+NR_DMRS-BundlingPUSCH-Config-r17.h
+NR_DMRS-DownlinkConfig.h
+NR_DMRS-UplinkConfig.h
+NR_DMRS-UplinkTransformPrecoding-r16.h
+NR_DormancyGroupID-r16.h
+NR_DormantBWP-Config-r16.h
+NR_DownlinkConfigCommon.h
+NR_DownlinkConfigCommonSIB.h
+NR_DownlinkHARQ-FeedbackDisabled-r17.h
+NR_DownlinkPreemption.h
+NR_DRB-CountInfo.h
+NR_DRB-CountInfoList.h
+NR_DRB-CountMSB-Info.h
+NR_DRB-CountMSB-InfoList.h
+NR_DRB-Identity.h
+NR_DRB-ToAddMod.h
+NR_DRB-ToAddModList.h
+NR_DRB-ToReleaseList.h
+NR_DRX-ConfigExt-v1700.h
+NR_DRX-Config.h
+NR_DRX-ConfigPTM-Index-r17.h
+NR_DRX-ConfigPTM-r17.h
+NR_DRX-ConfigSecondaryGroup-r16.h
+NR_DRX-ConfigSL-r17.h
+NR_DRX-Info2.h
+NR_DRX-Info.h
+NR_DRX-PreferenceConfig-r16.h
+NR_DRX-Preference-r16.h
+NR_DummyA.h
+NR_DummyB.h
+NR_DummyC.h
+NR_DummyD.h
+NR_DummyE.h
+NR_DummyF.h
+NR_DummyG.h
+NR_DummyH.h
+NR_DummyI.h
+NR_DummyJ.h
+NR_DummyPathlossReferenceRS-v1710.h
+NR_Dummy-TDRA-List.h
+NR_EphemerisInfo-r17.h
+NR_EpochTime-r17.h
+NR_EstablishmentCause.h
+NR_EthernetHeaderCompression-r16.h
+NR_EUTRA-AllowedMeasBandwidth.h
+NR_EUTRA-Cell.h
+NR_EUTRA-CellIndex.h
+NR_EUTRA-CellIndexList.h
+NR_EUTRA-ExcludedCell.h
+NR_EUTRA-FreqExcludedCellList.h
+NR_EUTRA-FreqNeighCellInfo.h
+NR_EUTRA-FreqNeighCellList.h
+NR_EUTRA-FreqNeighHSDN-CellList-r17.h
+NR_EUTRA-MBSFN-SubframeConfig.h
+NR_EUTRA-MBSFN-SubframeConfigList.h
+NR_EUTRA-MultiBandInfo.h
+NR_EUTRA-MultiBandInfoList.h
+NR_EUTRA-NS-PmaxList.h
+NR_EUTRA-NS-PmaxValue.h
+NR_EUTRA-ParametersCommon.h
+NR_EUTRA-Parameters.h
+NR_EUTRA-ParametersXDD-Diff.h
+NR_EUTRA-PhysCellId.h
+NR_EUTRA-PhysCellIdRange.h
+NR_EUTRA-PresenceAntennaPort1.h
+NR_EUTRA-Q-OffsetRange.h
+NR_EUTRA-RSTD-Info.h
+NR_EUTRA-RSTD-InfoList.h
+NR_EventTriggerConfig.h
+NR_EventTriggerConfigInterRAT.h
+NR_EventTriggerConfigNR-SL-r16.h
+NR_EventType-r16.h
+NR_ExcessDelay-DRB-IdentityInfo-r17.h
+NR_ExtendedPagingCycle-r17.h
+NR_FailureInfoDAPS-r16.h
+NR_FailureInfoRLC-Bearer.h
+NR_FailureInformation.h
+NR_FailureInformation-IEs.h
+NR_FailureInformation-v1610-IEs.h
+NR_FailureReportMCG-r16.h
+NR_FailureReportSCG-EUTRA.h
+NR_FailureReportSCG.h
+NR_FDM-TDM-r16.h
+NR_FeatureCombinationPreambles-r17.h
+NR_FeatureCombination-r17.h
+NR_FeaturePriority-r17.h
+NR_FeatureSetCombination.h
+NR_FeatureSetCombinationId.h
+NR_FeatureSetDownlink.h
+NR_FeatureSetDownlinkId.h
+NR_FeatureSetDownlinkPerCC.h
+NR_FeatureSetDownlinkPerCC-Id.h
+NR_FeatureSetDownlinkPerCC-v1620.h
+NR_FeatureSetDownlinkPerCC-v1700.h
+NR_FeatureSetDownlinkPerCC-v1720.h
+NR_FeatureSetDownlinkPerCC-v1730.h
+NR_FeatureSetDownlink-v1540.h
+NR_FeatureSetDownlink-v15a0.h
+NR_FeatureSetDownlink-v1610.h
+NR_FeatureSetDownlink-v1700.h
+NR_FeatureSetDownlink-v1720.h
+NR_FeatureSetDownlink-v1730.h
+NR_FeatureSetEntryIndex.h
+NR_FeatureSetEUTRA-DownlinkId.h
+NR_FeatureSetEUTRA-UplinkId.h
+NR_FeatureSet.h
+NR_FeatureSets.h
+NR_FeatureSetsPerBand.h
+NR_FeatureSetUplink.h
+NR_FeatureSetUplinkId.h
+NR_FeatureSetUplinkPerCC.h
+NR_FeatureSetUplinkPerCC-Id.h
+NR_FeatureSetUplinkPerCC-v1540.h
+NR_FeatureSetUplinkPerCC-v1700.h
+NR_FeatureSetUplink-v1540.h
+NR_FeatureSetUplink-v1610.h
+NR_FeatureSetUplink-v1630.h
+NR_FeatureSetUplink-v1640.h
+NR_FeatureSetUplink-v1710.h
+NR_FeatureSetUplink-v1720.h
+NR_FilterCoefficient.h
+NR_FilterConfigCLI-r16.h
+NR_FilterConfig.h
+NR_FR2-2-AccessParamsPerBand-r17.h
+NR_FreqBandIndicatorEUTRA.h
+NR_FreqBandIndicatorNR.h
+NR_FreqBandInformationEUTRA.h
+NR_FreqBandInformation.h
+NR_FreqBandInformationNR.h
+NR_FreqBandList.h
+NR_FreqPriorityDedicatedSlicing-r17.h
+NR_FreqPriorityEUTRA.h
+NR_FreqPriorityListDedicatedSlicing-r17.h
+NR_FreqPriorityListEUTRA.h
+NR_FreqPriorityListNR.h
+NR_FreqPriorityListSlicing-r17.h
+NR_FreqPriorityNR.h
+NR_FreqPrioritySlicing-r17.h
+NR_FreqSeparationClassDL-Only-r16.h
+NR_FreqSeparationClassDL-v1620.h
+NR_FreqSeparationClass.h
+NR_FreqSeparationClassUL-v1620.h
+NR_FrequencyComponent-r17.h
+NR_FrequencyConfig-NR-r16.h
+NR_FrequencyHoppingOffsetListsDCI-0-2-r16.h
+NR_FrequencyInfoDL.h
+NR_FrequencyInfoDL-SIB.h
+NR_FrequencyInfoUL.h
+NR_FrequencyInfoUL-SIB.h
+NR_FR-Info.h
+NR_FR-InfoList.h
+NR_GapConfig.h
+NR_GapConfig-r17.h
+NR_GapPriority-r17.h
+NR_GeneralParametersMRDC-v1610.h
+NR_GeneralParametersMRDC-XDD-Diff.h
+NR_GIN-Element-r17.h
+NR_GINs-PerSNPN-r17.h
+NR_GNSS-ID-r16.h
+NR_GoodServingCellEvaluation-r17.h
+NR_GroupB-ConfiguredTwoStepRA-r16.h
+NR_GuardBand-r16.h
+NR_HandoverCommand.h
+NR_HandoverCommand-IEs.h
+NR_HandoverPreparationInformation.h
+NR_HandoverPreparationInformation-IEs.h
+NR_HighSpeedConfigFR2-r17.h
+NR_HighSpeedConfig-r16.h
+NR_HighSpeedConfig-v1700.h
+NR_HighSpeedParameters-r16.h
+NR_HighSpeedParameters-v1650.h
+NR_HighSpeedParameters-v1700.h
+NR_HRNN-List-r16.h
+NR_HRNN-r16.h
+NR_Hysteresis.h
+NR_HysteresisLocation-r17.h
+NR_IAB-IP-AddressAndTraffic-r16.h
+NR_IAB-IP-AddressConfigurationList-r16.h
+NR_IAB-IP-AddressConfiguration-r16.h
+NR_IAB-IP-AddressIndex-r16.h
+NR_IAB-IP-AddressNumReq-r16.h
+NR_IAB-IP-AddressPrefixReq-r16.h
+NR_IAB-IP-Address-r16.h
+NR_IAB-IP-PrefixAndTraffic-r16.h
+NR_IAB-IP-Usage-r16.h
+NR_IABOtherInformation-r16.h
+NR_IABOtherInformation-r16-IEs.h
+NR_IAB-ResourceConfigID-r17.h
+NR_IAB-ResourceConfig-r17.h
+NR_IDC-AssistanceConfig-r16.h
+NR_IDC-Assistance-r16.h
+NR_IMS-ParametersCommon.h
+NR_IMS-ParametersFR2-2-r17.h
+NR_IMS-ParametersFRX-Diff.h
+NR_IMS-Parameters.h
+NR_IMS-Parameters-v1700.h
+NR_InitialUE-Identity.h
+NR_INT-ConfigurationPerServingCell.h
+NR_IntegrityProtAlgorithm.h
+NR_InterFreqAllowedCellList-r16.h
+NR_InterFreqCAG-CellListPerPLMN-r16.h
+NR_InterFreqCarrierFreqInfo.h
+NR_InterFreqCarrierFreqInfo-v1610.h
+NR_InterFreqCarrierFreqInfo-v1700.h
+NR_InterFreqCarrierFreqInfo-v1720.h
+NR_InterFreqCarrierFreqInfo-v1730.h
+NR_InterFreqCarrierFreqList.h
+NR_InterFreqCarrierFreqList-v1610.h
+NR_InterFreqCarrierFreqList-v1700.h
+NR_InterFreqCarrierFreqList-v1720.h
+NR_InterFreqCarrierFreqList-v1730.h
+NR_InterFreqExcludedCellList.h
+NR_InterFreqNeighCellInfo.h
+NR_InterFreqNeighCellInfo-v1610.h
+NR_InterFreqNeighCellInfo-v1710.h
+NR_InterFreqNeighCellList.h
+NR_InterFreqNeighCellList-v1610.h
+NR_InterFreqNeighCellList-v1710.h
+NR_InterFreqNeighHSDN-CellList-r17.h
+NR_InterFreqTargetInfo-r16.h
+NR_InterRAT-Parameters.h
+NR_IntraBandCC-Combination-r17.h
+NR_IntraBandCC-CombinationReqList-r17.h
+NR_IntraBandPowerClass-r16.h
+NR_IntraCellGuardBandsPerSCS-r16.h
+NR_IntraFreqAllowedCellList-r16.h
+NR_IntraFreqCAG-CellListPerPLMN-r16.h
+NR_IntraFreqExcludedCellList.h
+NR_IntraFreqNeighCellInfo.h
+NR_IntraFreqNeighCellInfo-v1610.h
+NR_IntraFreqNeighCellInfo-v1710.h
+NR_IntraFreqNeighCellList.h
+NR_IntraFreqNeighCellList-v1610.h
+NR_IntraFreqNeighCellList-v1710.h
+NR_IntraFreqNeighHSDN-CellList-r17.h
+NR_InvalidSymbolPattern-r16.h
+NR_I-RNTI-Value.h
+NR_LBT-FailureRecoveryConfig-r16.h
+NR_LocationAndBandwidthBroadcast-r17.h
+NR_LocationInfo-r16.h
+NR_LocationMeasurementIndication.h
+NR_LocationMeasurementIndication-IEs.h
+NR_LocationMeasurementInfo.h
+NR_LoggedEventTriggerConfig-r16.h
+NR_LoggedMeasurementConfiguration-r16.h
+NR_LoggedMeasurementConfiguration-r16-IEs.h
+NR_LoggedMeasurementConfiguration-v1700-IEs.h
+NR_LoggedPeriodicalReportConfig-r16.h
+NR_LoggingDuration-r16.h
+NR_LoggingInterval-r16.h
+NR_LogicalChannelConfig.h
+NR_LogicalChannelIdentityExt-r17.h
+NR_LogicalChannelIdentity.h
+NR_LogMeasInfoList-r16.h
+NR_LogMeasInfo-r16.h
+NR_LogMeasReport-r16.h
+NR_LogMeasResultBT-r16.h
+NR_LogMeasResultListBT-r16.h
+NR_LogMeasResultListWLAN-r16.h
+NR_LogMeasResultWLAN-r16.h
+NR_LTE-CRS-PatternList-r16.h
+NR_LTE-NeighCellsCRS-AssistInfoList-r17.h
+NR_LTE-NeighCellsCRS-AssistInfo-r17.h
+NR_MAC-CellGroupConfig.h
+NR_MAC-MainConfigSL-r16.h
+NR_MAC-ParametersCommon.h
+NR_MAC-ParametersFR2-2-r17.h
+NR_MAC-ParametersFRX-Diff-r16.h
+NR_MAC-Parameters.h
+NR_MAC-ParametersSidelinkCommon-r16.h
+NR_MAC-ParametersSidelink-r16.h
+NR_MAC-ParametersSidelink-r17.h
+NR_MAC-ParametersSidelinkXDD-Diff-r16.h
+NR_MAC-Parameters-v1610.h
+NR_MAC-Parameters-v1700.h
+NR_MAC-ParametersXDD-Diff.h
+NR_MasterInformationBlockSidelink.h
+NR_MasterKeyUpdate.h
+NR_MaxBW-PreferenceConfig-r16.h
+NR_MaxBW-PreferenceFR2-2-r17.h
+NR_MaxBW-Preference-r16.h
+NR_MaxCC-PreferenceConfig-r16.h
+NR_MaxCC-Preference-r16.h
+NR_MaxMIMO-LayerPreferenceConfig-r16.h
+NR_MaxMIMO-LayerPreferenceFR2-2-r17.h
+NR_MaxMIMO-LayerPreference-r16.h
+NR_MaxMIMO-LayersDCI-0-2-r16.h
+NR_MaxMIMO-LayersDL-r16.h
+NR_MBSBroadcastConfiguration-r17.h
+NR_MBSBroadcastConfiguration-r17-IEs.h
+NR_MBS-FSAI-InterFreqList-r17.h
+NR_MBS-FSAI-InterFreq-r17.h
+NR_MBS-FSAI-List-r17.h
+NR_MBS-FSAI-r17.h
+NR_MBSInterestIndication-r17.h
+NR_MBSInterestIndication-r17-IEs.h
+NR_MBS-NeighbourCellList-r17.h
+NR_MBS-NeighbourCell-r17.h
+NR_MBS-Parameters-r17.h
+NR_MBS-RNTI-SpecificConfigId-r17.h
+NR_MBS-RNTI-SpecificConfig-r17.h
+NR_MBS-ServiceInfo-r17.h
+NR_MBS-ServiceList-r17.h
+NR_MBS-SessionInfoList-r17.h
+NR_MBS-SessionInfo-r17.h
+NR_MCC.h
+NR_MCCH-Config-r17.h
+NR_MCCH-Message-r17.h
+NR_MCCH-MessageType-r17.h
+NR_MCCH-RepetitionPeriodAndOffset-r17.h
+NR_MCC-MNC-Digit.h
+NR_MCGFailureInformation-r16.h
+NR_MCGFailureInformation-r16-IEs.h
+NR_MeasAndMobParametersCommon.h
+NR_MeasAndMobParametersFR2-2-r17.h
+NR_MeasAndMobParametersFRX-Diff.h
+NR_MeasAndMobParameters.h
+NR_MeasAndMobParametersMRDC-Common.h
+NR_MeasAndMobParametersMRDC-Common-v1610.h
+NR_MeasAndMobParametersMRDC-Common-v1700.h
+NR_MeasAndMobParametersMRDC-Common-v1730.h
+NR_MeasAndMobParametersMRDC-FRX-Diff.h
+NR_MeasAndMobParametersMRDC.h
+NR_MeasAndMobParametersMRDC-v1560.h
+NR_MeasAndMobParametersMRDC-v1610.h
+NR_MeasAndMobParametersMRDC-v1700.h
+NR_MeasAndMobParametersMRDC-v1730.h
+NR_MeasAndMobParametersMRDC-XDD-Diff.h
+NR_MeasAndMobParametersMRDC-XDD-Diff-v1560.h
+NR_MeasAndMobParameters-v1700.h
+NR_MeasAndMobParametersXDD-Diff.h
+NR_MeasConfigAppLayerId-r17.h
+NR_MeasConfigAppLayer-r17.h
+NR_MeasConfig.h
+NR_MeasConfigMN.h
+NR_MeasConfigSN.h
+NR_MeasGapConfig.h
+NR_MeasGapId-r17.h
+NR_MeasGapSharingConfig.h
+NR_MeasGapSharingScheme.h
+NR_MeasId.h
+NR_MeasIdleCarrierEUTRA-r16.h
+NR_MeasIdleCarrierNR-r16.h
+NR_MeasIdleConfigDedicated-r16.h
+NR_MeasIdleConfigSIB-r16.h
+NR_MeasIdToAddMod.h
+NR_MeasIdToAddModList.h
+NR_MeasIdToRemoveList.h
+NR_MeasObjectCLI-r16.h
+NR_MeasObjectEUTRA.h
+NR_MeasObjectId.h
+NR_MeasObjectNR.h
+NR_MeasObjectNR-SL-r16.h
+NR_MeasObjectRxTxDiff-r17.h
+NR_MeasObjectToAddMod.h
+NR_MeasObjectToAddModList.h
+NR_MeasObjectToRemoveList.h
+NR_MeasObjectUTRA-FDD-r16.h
+NR_MeasPosPreConfigGapId-r17.h
+NR_MeasQuantityResultsEUTRA.h
+NR_MeasQuantityResults.h
+NR_MeasReportAppLayer-r17.h
+NR_MeasReportQuantityCLI-r16.h
+NR_MeasReportQuantity.h
+NR_MeasReportQuantity-r16.h
+NR_MeasReportQuantityUTRA-FDD-r16.h
+NR_MeasResult2EUTRA.h
+NR_MeasResult2EUTRA-r16.h
+NR_MeasResult2NR.h
+NR_MeasResult2NR-r16.h
+NR_MeasResult2UTRA-FDD-r16.h
+NR_MeasResultCBR-NR-r16.h
+NR_MeasResultCellListSFTD-EUTRA.h
+NR_MeasResultCellListSFTD-NR.h
+NR_MeasResultCellSFTD-NR.h
+NR_MeasResultCLI-r16.h
+NR_MeasResultCLI-RSSI-r16.h
+NR_MeasResultEUTRA.h
+NR_MeasResultFailedCell-r16.h
+NR_MeasResultForRSSI-r16.h
+NR_MeasResultFreqListFailMRDC.h
+NR_MeasResultFreqList.h
+NR_MeasResultIdleEUTRA-r16.h
+NR_MeasResultIdleNR-r16.h
+NR_MeasResultList2EUTRA.h
+NR_MeasResultList2EUTRA-r16.h
+NR_MeasResultList2NR.h
+NR_MeasResultList2NR-r16.h
+NR_MeasResultList2UTRA.h
+NR_MeasResultListCLI-RSSI-r16.h
+NR_MeasResultListEUTRA.h
+NR_MeasResultListLogging2NR-r16.h
+NR_MeasResultListLoggingNR-r16.h
+NR_MeasResultListNR.h
+NR_MeasResultListSRS-RSRP-r16.h
+NR_MeasResultListUTRA-FDD-r16.h
+NR_MeasResultLogging2NR-r16.h
+NR_MeasResultLoggingNR-r16.h
+NR_MeasResultNR.h
+NR_MeasResultNR-SL-r16.h
+NR_MeasResultRLFNR-r16.h
+NR_MeasResultRxTxTimeDiff-r17.h
+NR_MeasResultSCG-Failure.h
+NR_MeasResultServFreqListEUTRA-SCG.h
+NR_MeasResultServFreqListNR-SCG.h
+NR_MeasResultServingCell-r16.h
+NR_MeasResultServMO.h
+NR_MeasResultServMOList.h
+NR_MeasResultSFTD-EUTRA.h
+NR_MeasResults.h
+NR_MeasResultsPerCarrierIdleEUTRA-r16.h
+NR_MeasResultsPerCarrierIdleNR-r16.h
+NR_MeasResultsPerCellIdleEUTRA-r16.h
+NR_MeasResultsPerCellIdleNR-r16.h
+NR_MeasResultSRS-RSRP-r16.h
+NR_MeasResultsSL-r16.h
+NR_MeasResultSuccessHONR-r17.h
+NR_MeasResultUTRA-FDD-r16.h
+NR_MeasRSSI-ReportConfig-r16.h
+NR_MeasTiming.h
+NR_MeasTimingList.h
+NR_MeasTriggerQuantityCLI-r16.h
+NR_MeasTriggerQuantityEUTRA.h
+NR_MeasTriggerQuantity.h
+NR_MeasTriggerQuantityOffset.h
+NR_MeasTriggerQuantityUTRA-FDD-r16.h
+NR_MeasurementReportAppLayerList-r17.h
+NR_MeasurementReportAppLayer-r17.h
+NR_MeasurementReportAppLayer-r17-IEs.h
+NR_MeasurementReport.h
+NR_MeasurementReport-IEs.h
+NR_MeasurementReportSidelink.h
+NR_MeasurementReportSidelink-r16-IEs.h
+NR_MeasurementTimingConfiguration.h
+NR_MeasurementTimingConfiguration-IEs.h
+NR_MeasurementTimingConfiguration-v1550-IEs.h
+NR_MeasurementTimingConfiguration-v1610-IEs.h
+NR_MIB.h
+NR_MIMO-LayersDL.h
+NR_MIMO-LayersUL.h
+NR_MIMO-ParametersPerBand.h
+NR_MIMOParam-r17.h
+NR_MinSchedulingOffsetK0-Values-r16.h
+NR_MinSchedulingOffsetK0-Values-r17.h
+NR_MinSchedulingOffsetK2-Values-r16.h
+NR_MinSchedulingOffsetK2-Values-r17.h
+NR_MinSchedulingOffsetPreferenceConfig-r16.h
+NR_MinSchedulingOffsetPreferenceExt-r17.h
+NR_MinSchedulingOffsetPreference-r16.h
+NR_MinTimeGapFR2-2-r17.h
+NR_MinTimeGap-r16.h
+NR_MNC.h
+NR_MobilityFromNRCommand.h
+NR_MobilityFromNRCommand-IEs.h
+NR_MobilityFromNRCommand-v1610-IEs.h
+NR_MobilityHistoryReport-r16.h
+NR_MobilityStateParameters.h
+NR_ModulationOrder.h
+NR_MPE-Config-FR2-r16.h
+NR_MPE-Config-FR2-r17.h
+NR_MPE-ResourceId-r17.h
+NR_MPE-Resource-r17.h
+NR_MRB-Identity-r17.h
+NR_MRB-InfoBroadcast-r17.h
+NR_MRB-ListBroadcast-r17.h
+NR_MRB-PDCP-ConfigBroadcast-r17.h
+NR_MRB-RLC-ConfigBroadcast-r17.h
+NR_MRB-ToAddModList-r17.h
+NR_MRB-ToAddMod-r17.h
+NR_MRB-ToReleaseList-r17.h
+NR_MRDC-AssistanceInfo.h
+NR_MRDC-Parameters.h
+NR_MRDC-Parameters-v1580.h
+NR_MRDC-Parameters-v1590.h
+NR_MRDC-Parameters-v15g0.h
+NR_MRDC-Parameters-v1620.h
+NR_MRDC-Parameters-v1630.h
+NR_MRDC-Parameters-v1700.h
+NR_MRDC-SecondaryCellGroupConfig.h
+NR_MsgA-ConfigCommon-r16.h
+NR_MsgA-DMRS-Config-r16.h
+NR_MsgA-PUSCH-Config-r16.h
+NR_MsgA-PUSCH-Resource-r16.h
+NR_MTCH-SSB-MappingWindowCycleOffset-r17.h
+NR_MTCH-SSB-MappingWindowIndex-r17.h
+NR_MTCH-SSB-MappingWindowList-r17.h
+NR_MultiBandInfoListEUTRA.h
+NR_MulticastConfig-r17.h
+NR_MulticastRLC-BearerConfig-r17.h
+NR_MultiDCI-MultiTRP-r16.h
+NR_MultiFrequencyBandListNR.h
+NR_MultiFrequencyBandListNR-SIB.h
+NR_MultiPDSCH-TDRA-List-r17.h
+NR_MultiPDSCH-TDRA-r17.h
+NR_MUSIM-Assistance-r17.h
+NR_MUSIM-GapAssistanceConfig-r17.h
+NR_MUSIM-GapConfig-r17.h
+NR_MUSIM-GapId-r17.h
+NR_MUSIM-GapInfo-r17.h
+NR_MUSIM-GapPreferenceList-r17.h
+NR_MUSIM-Gap-r17.h
+NR_MUSIM-LeaveAssistanceConfig-r17.h
+NR_MUSIM-Starting-SFN-AndSubframe-r17.h
+NR_NAICS-Capability-Entry.h
+NR_NeedForGapNCSG-ConfigEUTRA-r17.h
+NR_NeedForGapNCSG-ConfigNR-r17.h
+NR_NeedForGapNCSG-InfoEUTRA-r17.h
+NR_NeedForGapNCSG-InfoNR-r17.h
+NR_NeedForGapsBandListNR-r16.h
+NR_NeedForGapsConfigNR-r16.h
+NR_NeedForGapsInfoNR-r16.h
+NR_NeedForGapsIntraFreqList-r16.h
+NR_NeedForGapsIntraFreq-r16.h
+NR_NeedForGapsNR-r16.h
+NR_NeedForNCSG-BandListNR-r17.h
+NR_NeedForNCSG-EUTRA-r17.h
+NR_NeedForNCSG-IntraFreqList-r17.h
+NR_NeedForNCSG-IntraFreq-r17.h
+NR_NeedForNCSG-NR-r17.h
+NR_NeighbourCellInfo-r17.h
+NR_NextHopChainingCount.h
+NR_NG-5G-S-TMSI.h
+NR_NID-r16.h
+NR_NonCellDefiningSSB-r17.h
+NR_NotificationMessageSidelink-r17.h
+NR_NotificationMessageSidelink-r17-IEs.h
+NR_NPN-IdentityInfoList-r16.h
+NR_NPN-IdentityInfo-r16.h
+NR_NPN-Identity-r16.h
+NR_NRDC-Parameters.h
+NR_NRDC-Parameters-v1570.h
+NR_NRDC-Parameters-v15c0.h
+NR_NRDC-Parameters-v1610.h
+NR_NRDC-Parameters-v1700.h
+NR_NR-DL-PRS-PDC-Info-r17.h
+NR_NR-DL-PRS-PDC-ResourceSet-r17.h
+NR_NR-DL-PRS-Periodicity-and-ResourceSetSlotOffset-r17.h
+NR_NR-DL-PRS-ResourceID-r17.h
+NR_NR-DL-PRS-Resource-r17.h
+NR_NR-FreqInfo.h
+NR_NR-MultiBandInfo.h
+NR_NR-NS-PmaxList.h
+NR_NR-NS-PmaxValue.h
+NR_NR-PRS-MeasurementInfoList-r16.h
+NR_NR-PRS-MeasurementInfo-r16.h
+NR_NR-RS-Type.h
+NR_NR-TimeStamp-r17.h
+NR_NSAG-IdentityInfo-r17.h
+NR_NSAG-ID-r17.h
+NR_NSAG-List-r17.h
+NR_NTN-Config-r17.h
+NR_NTN-NeighCellConfigList-r17.h
+NR_NTN-NeighCellConfig-r17.h
+NR_NTN-Parameters-r17.h
+NR_NumberOfCarriers.h
+NR_NumberOfMsg3-Repetitions-r17.h
+NR_NZP-CSI-RS-Pairing-r17.h
+NR_NZP-CSI-RS-Resource.h
+NR_NZP-CSI-RS-ResourceId.h
+NR_NZP-CSI-RS-ResourceSet.h
+NR_NZP-CSI-RS-ResourceSetId.h
+NR_OffsetValue-r17.h
+NR_OLPC-SRS-Pos-r16.h
+NR_OnDemandSIB-Request-r16.h
+NR_Orbital-r17.h
+NR_OtherConfig.h
+NR_OtherConfig-v1540.h
+NR_OtherConfig-v1610.h
+NR_OtherConfig-v1700.h
+NR_OutsideActiveTimeConfig-r16.h
+NR_OverheatingAssistanceConfig.h
+NR_OverheatingAssistance.h
+NR_OverheatingAssistance-r17.h
+NR_P0AlphaSet-r17.h
+NR_P0-PUCCH.h
+NR_P0-PUCCH-Id.h
+NR_P0-PUSCH-AlphaSet.h
+NR_P0-PUSCH-AlphaSetId.h
+NR_P0-PUSCH-r16.h
+NR_P0-PUSCH-SetId-r16.h
+NR_P0-PUSCH-Set-r16.h
+NR_PagingCycle.h
+NR_PagingGroupList-r17.h
+NR_Paging.h
+NR_PagingRecord.h
+NR_PagingRecordList.h
+NR_PagingRecordList-v1700.h
+NR_PagingRecord-v1700.h
+NR_PagingUE-Identity.h
+NR_Paging-v1700-IEs.h
+NR_PathlossReferenceRS-Config.h
+NR_PathlossReferenceRS-Id-r17.h
+NR_PathlossReferenceRSList-r16.h
+NR_PathlossReferenceRS-r16.h
+NR_PathlossReferenceRS-r17.h
+NR_PathlossReferenceRSs-v1610.h
+NR_PCCH-Config.h
+NR_PCCH-Message.h
+NR_PCCH-MessageType.h
+NR_PCI-ARFCN-EUTRA-r16.h
+NR_PCI-ARFCN-NR-r16.h
+NR_PCI-List.h
+NR_PCI-RangeElement.h
+NR_PCI-Range.h
+NR_PCI-RangeIndex.h
+NR_PCI-RangeIndexList.h
+NR_PDCCH-BlindDetection2-r16.h
+NR_PDCCH-BlindDetection3-r16.h
+NR_PDCCH-BlindDetectionCA-CombIndicator-r16.h
+NR_PDCCH-BlindDetectionCA-CombIndicator-r17.h
+NR_PDCCH-BlindDetectionCA-Mixed1-r17.h
+NR_PDCCH-BlindDetectionCA-MixedExt-r16.h
+NR_PDCCH-BlindDetectionCA-Mixed-r17.h
+NR_PDCCH-BlindDetectionCG-UE-Mixed1-r17.h
+NR_PDCCH-BlindDetectionCG-UE-MixedExt-r16.h
+NR_PDCCH-BlindDetectionCG-UE-Mixed-r17.h
+NR_PDCCH-BlindDetection.h
+NR_PDCCH-BlindDetectionMCG-SCG-r17.h
+NR_PDCCH-BlindDetectionMixed1-r17.h
+NR_PDCCH-BlindDetectionMixedList-r16.h
+NR_PDCCH-BlindDetectionMixed-r17.h
+NR_PDCCH-ConfigCommon.h
+NR_PDCCH-Config.h
+NR_PDCCH-ConfigSIB1.h
+NR_PDCCH-MonitoringOccasions-r16.h
+NR_PDCCH-RepetitionParameters-r17.h
+NR_PDCCH-ServingCellConfig.h
+NR_PDCP-Config.h
+NR_PDCP-Parameters.h
+NR_PDCP-ParametersMRDC.h
+NR_PDCP-ParametersMRDC-v1610.h
+NR_PDCP-ParametersSidelink-r16.h
+NR_PDSCH-CodeBlockGroupTransmission.h
+NR_PDSCH-CodeBlockGroupTransmissionList-r16.h
+NR_PDSCH-ConfigBroadcast-r17.h
+NR_PDSCH-ConfigCommon.h
+NR_PDSCH-Config.h
+NR_PDSCH-ConfigIndex-r17.h
+NR_PDSCH-ConfigPTM-r17.h
+NR_PDSCH-HARQ-ACK-CodebookList-r16.h
+NR_PDSCH-HARQ-ACK-EnhType3Index-r17.h
+NR_PDSCH-HARQ-ACK-EnhType3-r17.h
+NR_PDSCH-ServingCellConfig.h
+NR_PDSCH-TimeDomainResourceAllocation.h
+NR_PDSCH-TimeDomainResourceAllocationList.h
+NR_PDSCH-TimeDomainResourceAllocationList-r16.h
+NR_PDSCH-TimeDomainResourceAllocation-r16.h
+NR_PDU-SessionID.h
+NR_PEI-Config-r17.h
+NR_PeriodicalReportConfig.h
+NR_PeriodicalReportConfigInterRAT.h
+NR_PeriodicalReportConfigNR-SL-r16.h
+NR_PeriodicRNAU-TimerValue.h
+NR_PerRAAttemptInfoList-r16.h
+NR_PerRAAttemptInfo-r16.h
+NR_PerRACSI-RSInfo-r16.h
+NR_PerRACSI-RSInfo-v1660.h
+NR_PerRAInfoList-r16.h
+NR_PerRAInfoList-v1660.h
+NR_PerRAInfo-r16.h
+NR_PerRASSBInfo-r16.h
+NR_PH-InfoMCG.h
+NR_PH-InfoSCG.h
+NR_PHR-Config.h
+NR_PH-TypeListMCG.h
+NR_PH-TypeListSCG.h
+NR_PH-UplinkCarrierMCG.h
+NR_PH-UplinkCarrierSCG.h
+NR_Phy-ParametersCommon.h
+NR_Phy-ParametersCommon-v16a0.h
+NR_Phy-ParametersFR1.h
+NR_Phy-ParametersFR2.h
+NR_Phy-ParametersFRX-Diff.h
+NR_Phy-Parameters.h
+NR_Phy-ParametersMRDC.h
+NR_Phy-ParametersSharedSpectrumChAccess-r16.h
+NR_Phy-Parameters-v16a0.h
+NR_Phy-ParametersXDD-Diff.h
+NR_PhysCellId.h
+NR_PhysCellIdUTRA-FDD-r16.h
+NR_PhysicalCellGroupConfig.h
+NR_PLMN-Identity-EUTRA-5GC.h
+NR_PLMN-Identity.h
+NR_PLMN-IdentityInfo.h
+NR_PLMN-IdentityInfoList.h
+NR_PLMN-IdentityList2-r16.h
+NR_PLMN-IdentityList-EUTRA-5GC.h
+NR_PLMN-IdentityList-EUTRA-EPC.h
+NR_PLMN-IdentityList-r16.h
+NR_PLMN-RAN-AreaCell.h
+NR_PLMN-RAN-AreaCellList.h
+NR_PLMN-RAN-AreaConfig.h
+NR_PLMN-RAN-AreaConfigList.h
+NR_P-Max.h
+NR_PollByte.h
+NR_PollPDU.h
+NR_PortIndex2.h
+NR_PortIndex4.h
+NR_PortIndex8.h
+NR_PortIndexFor8Ranks.h
+NR_PosGapConfig-r17.h
+NR_PositionStateVector-r17.h
+NR_PositionVelocity-r17.h
+NR_PosMeasGapPreConfigToAddModList-r17.h
+NR_PosMeasGapPreConfigToReleaseList-r17.h
+NR_PosSchedulingInfo-r16.h
+NR_PosSIB-MappingInfo-r16.h
+NR_PosSIB-ReqInfo-r16.h
+NR_PosSIB-Type-r16.h
+NR_PosSI-SchedulingInfo-r16.h
+NR_PosSRS-RRC-Inactive-OutsideInitialUL-BWP-r17.h
+NR_PosSystemInformation-r16-IEs.h
+NR_PowSav-ParametersCommon-r16.h
+NR_PowSav-ParametersFR2-2-r17.h
+NR_PowSav-ParametersFRX-Diff-r16.h
+NR_PowSav-Parameters-r16.h
+NR_PowSav-Parameters-v1700.h
+NR_PRACH-ResourceDedicatedBFR.h
+NR_PRB-Id.h
+NR_ProcessingParameters.h
+NR_PropagationDelayDifference-r17.h
+NR_PropDelayDiffReportConfig-r17.h
+NR_PRS-ProcessingCapabilityOutsideMGinPPWperType-r17.h
+NR_PTRS-DensityRecommendationDL.h
+NR_PTRS-DensityRecommendationUL.h
+NR_PTRS-DownlinkConfig.h
+NR_PTRS-UplinkConfig.h
+NR_PUCCH-ConfigCommon.h
+NR_PUCCH-Config.h
+NR_PUCCH-ConfigurationList-r16.h
+NR_PUCCH-CSI-Resource.h
+NR_PUCCH-format0.h
+NR_PUCCH-format1.h
+NR_PUCCH-format2.h
+NR_PUCCH-format3.h
+NR_PUCCH-format4.h
+NR_PUCCH-FormatConfigExt-r17.h
+NR_PUCCH-FormatConfig.h
+NR_PUCCH-Group-Config-r17.h
+NR_PUCCH-Grp-CarrierTypes-r16.h
+NR_PUCCH-MaxCodeRate.h
+NR_PUCCH-PathlossReferenceRS.h
+NR_PUCCH-PathlossReferenceRS-Id.h
+NR_PUCCH-PathlossReferenceRS-Id-r17.h
+NR_PUCCH-PathlossReferenceRS-Id-v1610.h
+NR_PUCCH-PathlossReferenceRS-r16.h
+NR_PUCCH-PowerControl.h
+NR_PUCCH-PowerControlSetInfoId-r17.h
+NR_PUCCH-PowerControlSetInfo-r17.h
+NR_PUCCH-ResourceExt-v1610.h
+NR_PUCCH-ResourceGroupId-r16.h
+NR_PUCCH-ResourceGroup-r16.h
+NR_PUCCH-Resource.h
+NR_PUCCH-ResourceId.h
+NR_PUCCH-ResourceSet.h
+NR_PUCCH-ResourceSetId.h
+NR_PUCCH-SpatialRelationInfoExt-r16.h
+NR_PUCCH-SpatialRelationInfo.h
+NR_PUCCH-SpatialRelationInfoId.h
+NR_PUCCH-SpatialRelationInfoId-r16.h
+NR_PUCCH-SpatialRelationInfoId-v1610.h
+NR_PUCCH-SRS.h
+NR_PUCCH-TPC-CommandConfig.h
+NR_PUSCH-Allocation-r16.h
+NR_PUSCH-CodeBlockGroupTransmission.h
+NR_PUSCH-ConfigCommon.h
+NR_PUSCH-Config.h
+NR_PUSCH-PathlossReferenceRS.h
+NR_PUSCH-PathlossReferenceRS-Id.h
+NR_PUSCH-PathlossReferenceRS-Id-r17.h
+NR_PUSCH-PathlossReferenceRS-Id-v1610.h
+NR_PUSCH-PathlossReferenceRS-r16.h
+NR_PUSCH-PowerControl.h
+NR_PUSCH-PowerControl-v1610.h
+NR_PUSCH-ServingCellConfig.h
+NR_PUSCH-TimeDomainResourceAllocation.h
+NR_PUSCH-TimeDomainResourceAllocationList.h
+NR_PUSCH-TimeDomainResourceAllocationList-r16.h
+NR_PUSCH-TimeDomainResourceAllocation-r16.h
+NR_PUSCH-TPC-CommandConfig.h
+NR_QCL-Info.h
+NR_QFI.h
+NR_Q-OffsetRange.h
+NR_Q-OffsetRangeList.h
+NR_Q-QualMin.h
+NR_Q-RxLevMin.h
+NR_QuantityConfig.h
+NR_QuantityConfigNR.h
+NR_QuantityConfigRS.h
+NR_QuantityConfigUTRA-FDD-r16.h
+NR_RACH-ConfigCommon.h
+NR_RACH-ConfigCommonTwoStepRA-r16.h
+NR_RACH-ConfigDedicated.h
+NR_RACH-ConfigGeneric.h
+NR_RACH-ConfigGenericTwoStepRA-r16.h
+NR_RadioBearerConfig.h
+NR_RadioLinkMonitoringConfig.h
+NR_RadioLinkMonitoringRS.h
+NR_RadioLinkMonitoringRS-Id.h
+NR_RA-InformationCommon-r16.h
+NR_RAN-AreaCode.h
+NR_RAN-AreaConfig.h
+NR_RangeToBestCell.h
+NR_RAN-NotificationAreaInfo.h
+NR_RAN-VisibleMeasurements-r17.h
+NR_RAN-VisibleParameters-r17.h
+NR_RA-PrioritizationForSlicing-r17.h
+NR_RA-Prioritization.h
+NR_RA-PrioritizationSliceInfoList-r17.h
+NR_RA-PrioritizationSliceInfo-r17.h
+NR_RA-ReportList-r16.h
+NR_RA-Report-r16.h
+NR_RateMatchPatternGroup.h
+NR_RateMatchPattern.h
+NR_RateMatchPatternId.h
+NR_RateMatchPatternLTE-CRS.h
+NR_RAT-Type.h
+NR_RB-SetGroup-r17.h
+NR_ReconfigurationWithSync.h
+NR_RedCap-ConfigCommonSIB-r17.h
+NR_RedCapParameters-r17.h
+NR_RedirectedCarrierInfo-EUTRA.h
+NR_RedirectedCarrierInfo.h
+NR_ReducedAggregatedBandwidth.h
+NR_ReducedAggregatedBandwidth-r17.h
+NR_ReducedMaxBW-FRx-r16.h
+NR_ReducedMaxCCs-r16.h
+NR_ReestablishmentCause.h
+NR_ReestablishmentInfo.h
+NR_ReestabNCellInfo.h
+NR_ReestabNCellInfoList.h
+NR_ReestabUE-Identity.h
+NR_ReferenceLocation-r17.h
+NR_ReferenceSignalConfig.h
+NR_ReferenceTimeInfo-r16.h
+NR_ReferenceTime-r16.h
+NR_RegisteredAMF.h
+NR_RejectWaitTime.h
+NR_RelayParameters-r17.h
+NR_RelaysTriggeredList-r17.h
+NR_ReleasePreferenceConfig-r16.h
+NR_ReleasePreference-r16.h
+NR_RemoteUEInformationSidelink-r17.h
+NR_RemoteUEInformationSidelink-r17-IEs.h
+NR_RepetitionSchemeConfig-r16.h
+NR_RepetitionSchemeConfig-v1630.h
+NR_RepFactorAndTimeGap-r17.h
+NR_ReportCGI-EUTRA.h
+NR_ReportCGI.h
+NR_ReportConfigId.h
+NR_ReportConfigInterRAT.h
+NR_ReportConfigNR.h
+NR_ReportConfigNR-SL-r16.h
+NR_ReportConfigToAddMod.h
+NR_ReportConfigToAddModList.h
+NR_ReportConfigToRemoveList.h
+NR_ReportInterval.h
+NR_ReportSFTD-EUTRA.h
+NR_ReportSFTD-NR.h
+NR_ReportUplinkTxDirectCurrentMoreCarrier-r17.h
+NR_ReselectionThreshold.h
+NR_ReselectionThresholdQ.h
+NR_ResultsPerCSI-RS-Index.h
+NR_ResultsPerCSI-RS-IndexList.h
+NR_ResultsPerSSB-Index.h
+NR_ResultsPerSSB-IndexIdle-r16.h
+NR_ResultsPerSSB-IndexList.h
+NR_ResultsPerSSB-IndexList-r16.h
+NR_ResumeCause.h
+NR_RF-Parameters.h
+NR_RF-ParametersMRDC.h
+NR_RF-ParametersMRDC-v15g0.h
+NR_RF-Parameters-v15g0.h
+NR_RF-Parameters-v16a0.h
+NR_RLC-BearerConfig.h
+NR_RLC-Config.h
+NR_RLC-Config-v1610.h
+NR_RLC-Config-v1700.h
+NR_RLC-Parameters.h
+NR_RLC-ParametersSidelink-r16.h
+NR_RLF-Report-r16.h
+NR_RLF-TimersAndConstants.h
+NR_RLM-RelaxationReportingConfig-r17.h
+NR_RMTC-Config-r16.h
+NR_RNTI-Value.h
+NR_RRC-PosSystemInfoRequest-r16-IEs.h
+NR_RRCReconfigurationComplete.h
+NR_RRCReconfigurationComplete-IEs.h
+NR_RRCReconfigurationCompleteSidelink.h
+NR_RRCReconfigurationCompleteSidelink-r16-IEs.h
+NR_RRCReconfigurationCompleteSidelink-v1710-IEs.h
+NR_RRCReconfigurationCompleteSidelink-v1720-IEs.h
+NR_RRCReconfigurationComplete-v1530-IEs.h
+NR_RRCReconfigurationComplete-v1560-IEs.h
+NR_RRCReconfigurationComplete-v1610-IEs.h
+NR_RRCReconfigurationComplete-v1640-IEs.h
+NR_RRCReconfigurationComplete-v1700-IEs.h
+NR_RRCReconfigurationComplete-v1720-IEs.h
+NR_RRCReconfigurationFailureSidelink.h
+NR_RRCReconfigurationFailureSidelink-r16-IEs.h
+NR_RRCReconfiguration.h
+NR_RRCReconfiguration-IEs.h
+NR_RRCReconfigurationSidelink.h
+NR_RRCReconfigurationSidelink-r16-IEs.h
+NR_RRCReconfigurationSidelink-v1700-IEs.h
+NR_RRCReconfiguration-v1530-IEs.h
+NR_RRCReconfiguration-v1540-IEs.h
+NR_RRCReconfiguration-v1560-IEs.h
+NR_RRCReconfiguration-v1610-IEs.h
+NR_RRCReconfiguration-v1700-IEs.h
+NR_RRCReestablishmentComplete.h
+NR_RRCReestablishmentComplete-IEs.h
+NR_RRCReestablishmentComplete-v1610-IEs.h
+NR_RRCReestablishment.h
+NR_RRCReestablishment-IEs.h
+NR_RRCReestablishmentRequest.h
+NR_RRCReestablishmentRequest-IEs.h
+NR_RRCReestablishment-v1700-IEs.h
+NR_RRCReject.h
+NR_RRCReject-IEs.h
+NR_RRCRelease.h
+NR_RRCRelease-IEs.h
+NR_RRCRelease-v1540-IEs.h
+NR_RRCRelease-v1610-IEs.h
+NR_RRCRelease-v1650-IEs.h
+NR_RRCRelease-v1710-IEs.h
+NR_RRCResumeComplete.h
+NR_RRCResumeComplete-IEs.h
+NR_RRCResumeComplete-v1610-IEs.h
+NR_RRCResumeComplete-v1640-IEs.h
+NR_RRCResumeComplete-v1700-IEs.h
+NR_RRCResumeComplete-v1720-IEs.h
+NR_RRCResume.h
+NR_RRCResume-IEs.h
+NR_RRCResumeRequest1.h
+NR_RRCResumeRequest1-IEs.h
+NR_RRCResumeRequest.h
+NR_RRCResumeRequest-IEs.h
+NR_RRCResume-v1560-IEs.h
+NR_RRCResume-v1610-IEs.h
+NR_RRCResume-v1700-IEs.h
+NR_RRCSetupComplete.h
+NR_RRCSetupComplete-IEs.h
+NR_RRCSetupComplete-v1610-IEs.h
+NR_RRCSetupComplete-v1690-IEs.h
+NR_RRCSetupComplete-v1700-IEs.h
+NR_RRCSetup.h
+NR_RRCSetup-IEs.h
+NR_RRCSetupRequest.h
+NR_RRCSetupRequest-IEs.h
+NR_RRCSetup-v1700-IEs.h
+NR_RRCSystemInfoRequest.h
+NR_RRCSystemInfoRequest-IEs.h
+NR_RRC-TransactionIdentifier.h
+NR_RRM-Config.h
+NR_RRM-MeasRelaxationReportingConfig-r17.h
+NR_RSRP-ChangeThreshold-r17.h
+NR_RSRP-RangeEUTRA.h
+NR_RSRP-Range.h
+NR_RSRQ-RangeEUTRA.h
+NR_RSRQ-RangeEUTRA-r16.h
+NR_RSRQ-Range.h
+NR_RSSI-PeriodicityAndOffset-r16.h
+NR_RSSI-Range-r16.h
+NR_RSSI-ResourceConfigCLI-r16.h
+NR_RSSI-ResourceId-r16.h
+NR_RSSI-ResourceListConfigCLI-r16.h
+NR_RxTxPeriodical-r17.h
+NR_RxTxReportInterval-r17.h
+NR_RxTxTimeDiff-r17.h
+NR_SBAS-ID-r16.h
+NR_SBCCH-SL-BCH-Message.h
+NR_SBCCH-SL-BCH-MessageType.h
+NR_ScalingFactorSidelink-r16.h
+NR_SCCH-Message.h
+NR_SCCH-MessageType.h
+NR_SCellActivationRS-ConfigId-r17.h
+NR_SCellActivationRS-Config-r17.h
+NR_SCellConfig.h
+NR_SCellIndex.h
+NR_SCellSIB20-r17.h
+NR_SCG-DeactivationPreferenceConfig-r17.h
+NR_SCGFailureInformationEUTRA.h
+NR_SCGFailureInformationEUTRA-IEs.h
+NR_SCGFailureInformationEUTRA-v1590-IEs.h
+NR_SCGFailureInformation.h
+NR_SCGFailureInformation-IEs.h
+NR_SCGFailureInformation-v1590-IEs.h
+NR_SchedulingInfo2-r17.h
+NR_SchedulingInfo.h
+NR_SchedulingRequestConfig.h
+NR_SchedulingRequestConfig-v1700.h
+NR_SchedulingRequestId.h
+NR_SchedulingRequestResourceConfigExt-v1610.h
+NR_SchedulingRequestResourceConfigExt-v1700.h
+NR_SchedulingRequestResourceConfig.h
+NR_SchedulingRequestResourceId.h
+NR_SchedulingRequestToAddModExt-v1700.h
+NR_SchedulingRequestToAddMod.h
+NR_ScramblingId.h
+NR_SCS-SpecificCarrier.h
+NR_SCS-SpecificDuration-r17.h
+NR_SDAP-Config.h
+NR_SDAP-Parameters.h
+NR_SDT-CG-Config-r17.h
+NR_SDT-ConfigCommonSIB-r17.h
+NR_SDT-Config-r17.h
+NR_SDT-MAC-PHY-CG-Config-r17.h
+NR_SearchSpaceExt-r16.h
+NR_SearchSpaceExt-v1700.h
+NR_SearchSpace.h
+NR_SearchSpaceId.h
+NR_SearchSpaceSwitchConfig-r16.h
+NR_SearchSpaceSwitchConfig-r17.h
+NR_SearchSpaceSwitchTrigger-r16.h
+NR_SearchSpaceZero.h
+NR_SecurityAlgorithmConfig.h
+NR_SecurityConfig.h
+NR_SecurityConfigSMC.h
+NR_SecurityModeCommand.h
+NR_SecurityModeCommand-IEs.h
+NR_SecurityModeComplete.h
+NR_SecurityModeComplete-IEs.h
+NR_SecurityModeFailure.h
+NR_SecurityModeFailure-IEs.h
+NR_SelectedBandEntriesMN.h
+NR_SemiStaticChannelAccessConfig-r16.h
+NR_SemiStaticChannelAccessConfigUE-r17.h
+NR_Sensor-LocationInfo-r16.h
+NR_Sensor-NameList-r16.h
+NR_ServCellIndex.h
+NR_ServCellInfoListMCG-EUTRA-r16.h
+NR_ServCellInfoListMCG-NR-r16.h
+NR_ServCellInfoListSCG-EUTRA-r16.h
+NR_ServCellInfoListSCG-NR-r16.h
+NR_ServCellInfoXCG-EUTRA-r16.h
+NR_ServCellInfoXCG-NR-r16.h
+NR_ServingAdditionalPCIIndex-r17.h
+NR_ServingCellAndBWP-Id-r17.h
+NR_ServingCellConfigCommon.h
+NR_ServingCellConfigCommonSIB.h
+NR_ServingCellConfig.h
+NR_SetupRelease.h
+NR_SFTD-FrequencyList-EUTRA.h
+NR_SFTD-FrequencyList-NR.h
+NR_SharedSpectrumChAccessParamsPerBand-r16.h
+NR_SharedSpectrumChAccessParamsPerBand-v1630.h
+NR_SharedSpectrumChAccessParamsPerBand-v1640.h
+NR_SharedSpectrumChAccessParamsPerBand-v1650.h
+NR_SharedSpectrumChAccessParamsPerBand-v1710.h
+NR_ShortI-RNTI-Value.h
+NR_ShortMAC-I.h
+NR_SHR-Cause-r17.h
+NR_SIB10-r16.h
+NR_SIB11-r16.h
+NR_SIB12-IEs-r16.h
+NR_SIB12-r16.h
+NR_SIB13-r16.h
+NR_SIB14-r16.h
+NR_SIB15-r17.h
+NR_SIB16-r17.h
+NR_SIB17-IEs-r17.h
+NR_SIB17-r17.h
+NR_SIB18-r17.h
+NR_SIB19-r17.h
+NR_SIB1.h
+NR_SIB1-v1610-IEs.h
+NR_SIB1-v1630-IEs.h
+NR_SIB1-v1700-IEs.h
+NR_SIB20-r17.h
+NR_SIB21-r17.h
+NR_SIB2.h
+NR_SIB3.h
+NR_SIB4.h
+NR_SIB5.h
+NR_SIB6.h
+NR_SIB7.h
+NR_SIB8.h
+NR_SIB9.h
+NR_SIB-Mapping.h
+NR_SIB-Mapping-v1700.h
+NR_SIBpos-r16.h
+NR_SIB-ReqInfo-r16.h
+NR_SIB-TypeInfo.h
+NR_SIB-TypeInfo-v1700.h
+NR_SIB-Type-r17.h
+NR_SidelinkParametersEUTRA-r16.h
+NR_SidelinkParametersNR-r16.h
+NR_SidelinkParameters-r16.h
+NR_SidelinkPreconfigNR-r16.h
+NR_SidelinkUEInformationNR-r16.h
+NR_SidelinkUEInformationNR-r16-IEs.h
+NR_SidelinkUEInformationNR-v1700-IEs.h
+NR_SimulSRS-ForAntennaSwitching-r16.h
+NR_SimultaneousRxTxPerBandPair.h
+NR_SINR-RangeEUTRA.h
+NR_SINR-Range.h
+NR_SI-RequestConfig.h
+NR_SI-RequestResources.h
+NR_SI-SchedulingInfo.h
+NR_SI-SchedulingInfo-v1700.h
+NR_SK-Counter.h
+NR_SL-AccessInfo-L2U2N-r17.h
+NR_SL-BetaOffsets-r16.h
+NR_SL-BWP-ConfigCommon-r16.h
+NR_SL-BWP-Config-r16.h
+NR_SL-BWP-DiscPoolConfigCommon-r17.h
+NR_SL-BWP-DiscPoolConfig-r17.h
+NR_SL-BWP-Generic-r16.h
+NR_SL-BWP-PoolConfigCommon-r16.h
+NR_SL-BWP-PoolConfig-r16.h
+NR_SL-CBR-CommonTxConfigList-r16.h
+NR_SL-CBR-LevelsConfig-r16.h
+NR_SL-CBR-PriorityTxConfigList-r16.h
+NR_SL-CBR-PriorityTxConfigList-v1650.h
+NR_SL-CBR-PSSCH-TxConfig-r16.h
+NR_SL-CBR-r16.h
+NR_SL-CG-MaxTransNumList-r16.h
+NR_SL-CG-MaxTransNum-r16.h
+NR_SL-ConfigCommonNR-r16.h
+NR_SL-ConfigDedicatedEUTRA-Info-r16.h
+NR_SL-ConfigDedicatedNR-r16.h
+NR_SL-ConfigIndexCG-r16.h
+NR_SL-ConfiguredGrantConfigList-r16.h
+NR_SL-ConfiguredGrantConfig-r16.h
+NR_SL-CSI-RS-Config-r16.h
+NR_SL-DestinationIdentity-r16.h
+NR_SL-DestinationIndex-r16.h
+NR_SL-DiscConfigCommon-r17.h
+NR_SL-DiscConfig-r17.h
+NR_SL-DRX-ConfigGC-BC-r17.h
+NR_SL-DRX-Config-r17.h
+NR_SL-DRX-ConfigUC-Info-r17.h
+NR_SL-DRX-ConfigUC-r17.h
+NR_SL-DRX-ConfigUC-SemiStatic-r17.h
+NR_SL-DRX-GC-BC-QoS-r17.h
+NR_SL-DRX-GC-Generic-r17.h
+NR_SL-EUTRA-AnchorCarrierFreqList-r16.h
+NR_SL-EventTriggerConfig-r16.h
+NR_SL-FailureList-r16.h
+NR_SL-Failure-r16.h
+NR_SL-FreqConfigCommon-r16.h
+NR_SL-FreqConfig-r16.h
+NR_SL-Freq-Id-r16.h
+NR_SliceCellListNR-r17.h
+NR_SliceInfoDedicated-r17.h
+NR_SliceInfoListDedicated-r17.h
+NR_SliceInfoList-r17.h
+NR_SliceInfo-r17.h
+NR_SL-InterestedFreqList-r16.h
+NR_SL-InterUE-CoordinationConfig-r17.h
+NR_SL-InterUE-CoordinationScheme1-r17.h
+NR_SL-InterUE-CoordinationScheme2-r17.h
+NR_SL-L2RelayUE-Config-r17.h
+NR_SL-L2RemoteUE-Config-r17.h
+NR_SL-LatencyBoundIUC-Report-r17.h
+NR_SL-LogicalChannelConfigPC5-r16.h
+NR_SL-LogicalChannelConfig-r16.h
+NR_SL-MappedQoS-FlowsListDedicated-r16.h
+NR_SL-MappingToAddMod-r17.h
+NR_SL-MeasConfigCommon-r16.h
+NR_SL-MeasConfigInfo-r16.h
+NR_SL-MeasConfig-r16.h
+NR_SL-MeasIdInfo-r16.h
+NR_SL-MeasIdList-r16.h
+NR_SL-MeasId-r16.h
+NR_SL-MeasIdToRemoveList-r16.h
+NR_SL-MeasObjectId-r16.h
+NR_SL-MeasObjectInfo-r16.h
+NR_SL-MeasObjectList-r16.h
+NR_SL-MeasObject-r16.h
+NR_SL-MeasObjectToRemoveList-r16.h
+NR_SL-MeasQuantityResult-r16.h
+NR_SL-MeasReportQuantity-r16.h
+NR_SL-MeasResultListRelay-r17.h
+NR_SL-MeasResult-r16.h
+NR_SL-MeasResultRelay-r17.h
+NR_SL-MeasResults-r16.h
+NR_SL-MeasTriggerQuantity-r16.h
+NR_SL-MinMaxMCS-Config-r16.h
+NR_SL-MinMaxMCS-List-r16.h
+NR_SL-NR-AnchorCarrierFreqList-r16.h
+NR_SlotBased-r16.h
+NR_SlotBased-v1630.h
+NR_SlotFormatCombination.h
+NR_SlotFormatCombinationId.h
+NR_SlotFormatCombinationsPerCell.h
+NR_SlotFormatIndicator.h
+NR_SL-PagingIdentityRemoteUE-r17.h
+NR_SL-PagingInfo-RemoteUE-r17.h
+NR_SL-PathSwitchConfig-r17.h
+NR_SL-PBPS-CPS-Config-r17.h
+NR_SL-PDCP-ConfigPC5-r16.h
+NR_SL-PDCP-Config-r16.h
+NR_SL-PeriodCG-r16.h
+NR_SL-PeriodicalReportConfig-r16.h
+NR_SL-PHY-MAC-RLC-Config-r16.h
+NR_SL-PHY-MAC-RLC-Config-v1700.h
+NR_SL-PowerControl-r16.h
+NR_SL-PQFI-r16.h
+NR_SL-PQI-r16.h
+NR_SL-PreconfigGeneral-r16.h
+NR_SL-PreconfigurationNR-r16.h
+NR_SL-PriorityTxConfigIndex-r16.h
+NR_SL-PriorityTxConfigIndex-v1650.h
+NR_SL-PSBCH-Config-r16.h
+NR_SL-PSCCH-Config-r16.h
+NR_SL-PSFCH-Config-r16.h
+NR_SL-PSSCH-Config-r16.h
+NR_SL-PSSCH-TxConfigList-r16.h
+NR_SL-PSSCH-TxConfig-r16.h
+NR_SL-PSSCH-TxParameters-r16.h
+NR_SL-PTRS-Config-r16.h
+NR_SL-QoS-FlowIdentity-r16.h
+NR_SL-QoS-Info-r16.h
+NR_SL-QoS-Profile-r16.h
+NR_SL-QuantityConfig-r16.h
+NR_SL-RadioBearerConfig-r16.h
+NR_SLRB-Config-r16.h
+NR_SLRB-PC5-ConfigIndex-r16.h
+NR_SLRB-Uu-ConfigIndex-r16.h
+NR_SL-RelayUE-Config-r17.h
+NR_SL-RemoteUE-Config-r17.h
+NR_SL-RemoteUE-RB-Identity-r17.h
+NR_SL-RemoteUE-ToAddMod-r17.h
+NR_SL-ReportConfigId-r16.h
+NR_SL-ReportConfigInfo-r16.h
+NR_SL-ReportConfigList-r16.h
+NR_SL-ReportConfig-r16.h
+NR_SL-ReportConfigToRemoveList-r16.h
+NR_SL-RequestedSIB-List-r17.h
+NR_SL-ReselectionConfig-r17.h
+NR_SL-ResourcePoolConfig-r16.h
+NR_SL-ResourcePoolID-r16.h
+NR_SL-ResourcePool-r16.h
+NR_SL-ResourceReservePeriod-r16.h
+NR_SL-RLC-BearerConfigIndex-r16.h
+NR_SL-RLC-BearerConfig-r16.h
+NR_SL-RLC-ChannelConfigPC5-r17.h
+NR_SL-RLC-ChannelConfig-r17.h
+NR_SL-RLC-ChannelID-r17.h
+NR_SL-RLC-ConfigPC5-r16.h
+NR_SL-RLC-Config-r16.h
+NR_SL-RLC-ModeIndication-r16.h
+NR_SL-RoHC-Profiles-r16.h
+NR_SL-RSRP-Range-r16.h
+NR_SL-RS-Type-r16.h
+NR_SL-RxDRX-ReportList-v1700.h
+NR_SL-RxDRX-Report-v1700.h
+NR_SL-RxInterestedGC-BC-DestList-r17.h
+NR_SL-RxInterestedGC-BC-Dest-r17.h
+NR_SL-ScheduledConfig-r16.h
+NR_SL-SDAP-ConfigPC5-r16.h
+NR_SL-SDAP-Config-r16.h
+NR_SL-SelectionWindowConfig-r16.h
+NR_SL-SelectionWindowList-r16.h
+NR_SL-ServingCellInfo-r17.h
+NR_SL-SIB-ReqInfo-r17.h
+NR_SL-SourceIdentity-r17.h
+NR_SL-SRAP-Config-r17.h
+NR_SL-SSB-TimeAllocation-r16.h
+NR_SL-SyncAllowed-r16.h
+NR_SL-SyncConfigList-r16.h
+NR_SL-SyncConfig-r16.h
+NR_SL-ThresholdRSRP-Condition1-B-1-r17.h
+NR_SL-Thres-RSRP-List-r16.h
+NR_SL-Thres-RSRP-r16.h
+NR_SL-TimeOffsetEUTRA-r16.h
+NR_SL-TrafficPatternInfo-r16.h
+NR_SL-TxConfigIndex-r16.h
+NR_SL-TxInterestedFreqList-r16.h
+NR_SL-TxPercentageConfig-r16.h
+NR_SL-TxPercentageList-r16.h
+NR_SL-TxPoolDedicated-r16.h
+NR_SL-TxPower-r16.h
+NR_SL-TxProfileList-r17.h
+NR_SL-TxProfile-r17.h
+NR_SL-TxResourceReqCommRelayInfo-r17.h
+NR_SL-TxResourceReqCommRelay-r17.h
+NR_SL-TxResourceReqDisc-r17.h
+NR_SL-TxResourceReqL2U2N-Relay-r17.h
+NR_SL-TxResourceReqListCommRelay-r17.h
+NR_SL-TxResourceReqListDisc-r17.h
+NR_SL-TxResourceReqList-r16.h
+NR_SL-TxResourceReqList-v1700.h
+NR_SL-TxResourceReq-r16.h
+NR_SL-TxResourceReq-v1700.h
+NR_SL-TypeTxSync-r16.h
+NR_SL-UE-AssistanceInformationNR-r16.h
+NR_SL-UE-SelectedConfig-r16.h
+NR_SL-UE-SelectedConfigRP-r16.h
+NR_SL-ZoneConfigMCR-r16.h
+NR_SL-ZoneConfig-r16.h
+NR_SN-FieldLengthAM.h
+NR_SN-FieldLengthUM.h
+NR_SNPN-AccessInfo-r17.h
+NR_S-NSSAI.h
+NR_SON-Parameters-r16.h
+NR_SpatialRelationInfo-PDC-r17.h
+NR_SpatialRelations.h
+NR_SpatialRelationsSRS-Pos-r16.h
+NR_SpCellConfig.h
+NR_SpeedStateScaleFactors.h
+NR_SPS-ConfigDeactivationStateList-r16.h
+NR_SPS-ConfigDeactivationState-r16.h
+NR_SPS-Config.h
+NR_SPS-ConfigIndex-r16.h
+NR_SPS-ConfigMulticastToAddModList-r17.h
+NR_SPS-ConfigMulticastToReleaseList-r17.h
+NR_SPS-ConfigToAddModList-r16.h
+NR_SPS-ConfigToReleaseList-r16.h
+NR_SPS-PUCCH-AN-List-r16.h
+NR_SPS-PUCCH-AN-r16.h
+NR_SRB-Identity.h
+NR_SRB-Identity-v1700.h
+NR_SRB-ToAddMod.h
+NR_SRB-ToAddModList.h
+NR_SRI-PUSCH-PowerControl.h
+NR_SRI-PUSCH-PowerControlId.h
+NR_SRS-AllPosResources-r16.h
+NR_SRS-AllPosResourcesRRC-Inactive-r17.h
+NR_SRS-CarrierSwitching.h
+NR_SRS-CC-SetIndex.h
+NR_SRS-Config.h
+NR_SRS-PathlossReferenceRS-Id-r16.h
+NR_SRS-PeriodicityAndOffsetExt-r16.h
+NR_SRS-PeriodicityAndOffset.h
+NR_SRS-PeriodicityAndOffset-r16.h
+NR_SRS-PosConfig-r17.h
+NR_SRS-PosResourceAP-r16.h
+NR_SRS-PosResourceId-r16.h
+NR_SRS-PosResource-r16.h
+NR_SRS-PosResourceSetId-r16.h
+NR_SRS-PosResourceSet-r16.h
+NR_SRS-PosResourceSP-r16.h
+NR_SRS-PosResources-r16.h
+NR_SRS-PosRRC-InactiveConfig-r17.h
+NR_SRS-PosRRC-Inactive-r17.h
+NR_SRS-ResourceConfigCLI-r16.h
+NR_SRS-Resource.h
+NR_SRS-ResourceId.h
+NR_SRS-ResourceListConfigCLI-r16.h
+NR_SRS-ResourceSet.h
+NR_SRS-ResourceSetId.h
+NR_SRS-Resources.h
+NR_SRS-RSRP-Range-r16.h
+NR_SRS-RSRP-TriggeredList-r16.h
+NR_SRS-SpatialRelationInfo.h
+NR_SRS-SpatialRelationInfoPos-r16.h
+NR_SRS-SwitchingAffectedBandsNR-r17.h
+NR_SRS-SwitchingTimeEUTRA.h
+NR_SRS-SwitchingTimeNR.h
+NR_SRS-TPC-CommandConfig.h
+NR_SRS-TPC-PDCCH-Config.h
+NR_SSB-ConfigMobility.h
+NR_SSB-Configuration-r16.h
+NR_SSB-Index.h
+NR_SSB-InfoNcell-r16.h
+NR_SSB-MTC2.h
+NR_SSB-MTC2-LP-r16.h
+NR_SSB-MTC3List-r16.h
+NR_SSB-MTC3-r16.h
+NR_SSB-MTC4List-r17.h
+NR_SSB-MTC4-r17.h
+NR_SSB-MTC-AdditionalPCI-r17.h
+NR_SSB-MTC.h
+NR_SSB-PositionQCL-CellList-r17.h
+NR_SSB-PositionQCL-Cell-r17.h
+NR_SSB-PositionQCL-CellsToAddModList-r16.h
+NR_SSB-PositionQCL-CellsToAddMod-r16.h
+NR_SSB-PositionQCL-Relation-r16.h
+NR_SSB-PositionQCL-Relation-r17.h
+NR_SSB-ToMeasure.h
+NR_SS-RSSI-Measurement.h
+NR_SubcarrierSpacing.h
+NR_SubgroupConfig-r17.h
+NR_SubSlot-Config-r16.h
+NR_SuccessHO-Config-r17.h
+NR_SuccessHO-Report-r17.h
+NR_SupportedBandUTRA-FDD-r16.h
+NR_SupportedBandwidth.h
+NR_SupportedBandwidth-v1700.h
+NR_SupportedCSI-RS-Resource.h
+NR_SuspendConfig.h
+NR_SystemInformation.h
+NR_SystemInformation-IEs.h
+NR_T312-r16.h
+NR_T316-r16.h
+NR_TAG-Config.h
+NR_TAG.h
+NR_TAG-Id.h
+NR_TA-Info-r17.h
+NR_TAR-Config-r17.h
+NR_TCI-ActivatedConfig-r17.h
+NR_TCI-State.h
+NR_TCI-StateId.h
+NR_TCI-UL-State-Id-r17.h
+NR_TCI-UL-State-r17.h
+NR_TDD-UL-DL-ConfigCommon.h
+NR_TDD-UL-DL-ConfigDedicated.h
+NR_TDD-UL-DL-ConfigDedicated-IAB-MT-r16.h
+NR_TDD-UL-DL-Pattern.h
+NR_TDD-UL-DL-SlotConfig.h
+NR_TDD-UL-DL-SlotConfig-IAB-MT-r16.h
+NR_TDD-UL-DL-SlotIndex.h
+NR_ThresholdNR.h
+NR_TimeAlignmentTimer.h
+NR_TimeBetweenEvent-r17.h
+NR_TimeConnSourceDAPS-Failure-r17.h
+NR_TimeSinceCHO-Reconfig-r17.h
+NR_TimeSinceFailure-r16.h
+NR_TimeToTrigger.h
+NR_TimeUntilReconnection-r16.h
+NR_TMGI-r17.h
+NR_T-Offset-r16.h
+NR_T-PollRetransmit.h
+NR_TraceReference-r16.h
+NR_TrackingAreaCode.h
+NR_TrackingAreaCodeList-r16.h
+NR_TrackingAreaIdentityList-r16.h
+NR_TrackingAreaIdentity-r16.h
+NR_TransmissionBandwidth-EUTRA-r16.h
+NR_T-ReassemblyExt-r17.h
+NR_T-Reassembly.h
+NR_T-Reselection.h
+NR_TRS-ResourceSet-r17.h
+NR_T-StatusProhibit.h
+NR_T-StatusProhibit-v1610.h
+NR_TwoPUCCH-Grp-ConfigParams-r16.h
+NR_TwoPUCCH-Grp-Configurations-r16.h
+NR_TwoPUCCH-Grp-Configurations-r17.h
+NR_Tx-PoolMeasList-r16.h
+NR_UAC-AC1-SelectAssistInfo-r16.h
+NR_UAC-AccessCategory1-SelectionAssistanceInfo.h
+NR_UAC-BarringInfoSet.h
+NR_UAC-BarringInfoSetIndex.h
+NR_UAC-BarringInfoSetList.h
+NR_UAC-BarringInfoSetList-v1700.h
+NR_UAC-BarringInfoSet-v1700.h
+NR_UAC-BarringPerCat.h
+NR_UAC-BarringPerCatList.h
+NR_UAC-BarringPerPLMN.h
+NR_UAC-BarringPerPLMN-List.h
+NR_UCI-OnPUSCH-DCI-0-2-r16.h
+NR_UCI-OnPUSCH.h
+NR_UCI-OnPUSCH-ListDCI-0-1-r16.h
+NR_UCI-OnPUSCH-ListDCI-0-2-r16.h
+NR_UEAssistanceInformation.h
+NR_UEAssistanceInformation-IEs.h
+NR_UEAssistanceInformationSidelink-r17.h
+NR_UEAssistanceInformationSidelink-r17-IEs.h
+NR_UEAssistanceInformation-v1540-IEs.h
+NR_UEAssistanceInformation-v1610-IEs.h
+NR_UEAssistanceInformation-v1700-IEs.h
+NR_UE-BasedPerfMeas-Parameters-r16.h
+NR_UECapabilityEnquiry.h
+NR_UECapabilityEnquiry-IEs.h
+NR_UECapabilityEnquirySidelink.h
+NR_UECapabilityEnquirySidelink-r16-IEs.h
+NR_UECapabilityEnquiry-v1560-IEs.h
+NR_UECapabilityEnquiry-v1610-IEs.h
+NR_UECapabilityInformation.h
+NR_UECapabilityInformation-IEs.h
+NR_UECapabilityInformationSidelink.h
+NR_UECapabilityInformationSidelink-r16-IEs.h
+NR_UECapabilityInformationSidelink-v1700-IEs.h
+NR_UE-CapabilityRAT-Container.h
+NR_UE-CapabilityRAT-ContainerList.h
+NR_UE-CapabilityRAT-Request.h
+NR_UE-CapabilityRAT-RequestList.h
+NR_UE-CapabilityRequestFilterCommon.h
+NR_UE-CapabilityRequestFilterNR.h
+NR_UE-CapabilityRequestFilterNR-v1540.h
+NR_UE-CapabilityRequestFilterNR-v1710.h
+NR_UEInformationRequest-r16.h
+NR_UEInformationRequest-r16-IEs.h
+NR_UEInformationRequest-v1700-IEs.h
+NR_UEInformationResponse-r16.h
+NR_UEInformationResponse-r16-IEs.h
+NR_UEInformationResponse-v1700-IEs.h
+NR_UE-MeasurementsAvailable-r16.h
+NR_UE-MRDC-CapabilityAddFRX-Mode.h
+NR_UE-MRDC-CapabilityAddXDD-Mode.h
+NR_UE-MRDC-CapabilityAddXDD-Mode-v1560.h
+NR_UE-MRDC-Capability.h
+NR_UE-MRDC-Capability-v1560.h
+NR_UE-MRDC-Capability-v15g0.h
+NR_UE-MRDC-Capability-v1610.h
+NR_UE-MRDC-Capability-v1700.h
+NR_UE-MRDC-Capability-v1730.h
+NR_UE-NR-CapabilityAddFRX-Mode.h
+NR_UE-NR-CapabilityAddFRX-Mode-v1540.h
+NR_UE-NR-CapabilityAddFRX-Mode-v1610.h
+NR_UE-NR-CapabilityAddXDD-Mode.h
+NR_UE-NR-CapabilityAddXDD-Mode-v1530.h
+NR_UE-NR-Capability.h
+NR_UE-NR-Capability-v1530.h
+NR_UE-NR-Capability-v1540.h
+NR_UE-NR-Capability-v1550.h
+NR_UE-NR-Capability-v1560.h
+NR_UE-NR-Capability-v1570.h
+NR_UE-NR-Capability-v15c0.h
+NR_UE-NR-Capability-v15g0.h
+NR_UE-NR-Capability-v15j0.h
+NR_UE-NR-Capability-v1610.h
+NR_UE-NR-Capability-v1640.h
+NR_UE-NR-Capability-v1650.h
+NR_UE-NR-Capability-v1690.h
+NR_UE-NR-Capability-v16a0.h
+NR_UE-NR-Capability-v1700.h
+NR_UEPositioningAssistanceInfo-r17.h
+NR_UEPositioningAssistanceInfo-r17-IEs.h
+NR_UEPositioningAssistanceInfo-v1720-IEs.h
+NR_UERadioAccessCapabilityInformation.h
+NR_UERadioAccessCapabilityInformation-IEs.h
+NR_UE-RadioPagingInfo-r17.h
+NR_UERadioPagingInformation.h
+NR_UERadioPagingInformation-IEs.h
+NR_UERadioPagingInformation-v15e0-IEs.h
+NR_UERadioPagingInformation-v1700-IEs.h
+NR_UE-SidelinkCapabilityAddXDD-Mode-r16.h
+NR_UE-TimersAndConstants.h
+NR_UE-TimersAndConstantsRemoteUE-r17.h
+NR_UE-TxTEG-AssociationList-r17.h
+NR_UE-TxTEG-Association-r17.h
+NR_UE-TxTEG-RequestUL-TDOA-Config-r17.h
+NR_UL-AccessConfigListDCI-0-1-r16.h
+NR_UL-AccessConfigListDCI-0-1-r17.h
+NR_UL-AccessConfigListDCI-0-2-r17.h
+NR_UL-AccessConfigListDCI-1-1-r16.h
+NR_UL-AccessConfigListDCI-1-1-r17.h
+NR_UL-AccessConfigListDCI-1-2-r17.h
+NR_UL-AM-RLC.h
+NR_UL-CCCH1-Message.h
+NR_UL-CCCH1-MessageType.h
+NR_UL-CCCH-Message.h
+NR_UL-CCCH-MessageType.h
+NR_UL-DataSplitThreshold.h
+NR_UL-DCCH-Message.h
+NR_UL-DCCH-MessageType.h
+NR_ULDedicatedMessageSegment-r16.h
+NR_ULDedicatedMessageSegment-r16-IEs.h
+NR_UL-DelayValueConfig-r16.h
+NR_UL-ExcessDelayConfig-r17.h
+NR_UL-GapFR2-Config-r17.h
+NR_UL-GapFR2-Preference-r17.h
+NR_ULInformationTransfer.h
+NR_ULInformationTransfer-IEs.h
+NR_ULInformationTransferIRAT-r16.h
+NR_ULInformationTransferIRAT-r16-IEs.h
+NR_ULInformationTransferMRDC.h
+NR_ULInformationTransferMRDC-IEs.h
+NR_ULInformationTransfer-v1700-IEs.h
+NR_UL-PDCP-DelayValueResultList-r16.h
+NR_UL-PDCP-DelayValueResult-r16.h
+NR_UL-PDCP-ExcessDelayResultList-r17.h
+NR_UL-PDCP-ExcessDelayResult-r17.h
+NR_ULTxSwitchingBandPair-r16.h
+NR_ULTxSwitchingBandPair-v1700.h
+NR_UL-UM-RLC.h
+NR_UPInterruptionTimeAtHO-r17.h
+NR_UplinkCancellation-r16.h
+NR_UplinkConfigCommon.h
+NR_UplinkConfigCommonSIB.h
+NR_UplinkConfigCommonSIB-v1700.h
+NR_UplinkConfigCommon-v1700.h
+NR_UplinkConfig.h
+NR_UplinkDataCompression-r17.h
+NR_UplinkHARQ-mode-r17.h
+NR_Uplink-powerControlId-r17.h
+NR_Uplink-powerControl-r17.h
+NR_UplinkTxDirectCurrentBWP.h
+NR_UplinkTxDirectCurrentCarrierInfo-r16.h
+NR_UplinkTxDirectCurrentCell.h
+NR_UplinkTxDirectCurrentList.h
+NR_UplinkTxDirectCurrentMoreCarrierList-r17.h
+NR_UplinkTxDirectCurrentTwoCarrierInfo-r16.h
+NR_UplinkTxDirectCurrentTwoCarrierList-r16.h
+NR_UplinkTxDirectCurrentTwoCarrier-r16.h
+NR_UplinkTxSwitchingBandParameters-v1700.h
+NR_UplinkTxSwitching-r16.h
+NR_UTRA-FDD-CellIndexList-r16.h
+NR_UTRA-FDD-CellIndex-r16.h
+NR_UTRA-FDD-Parameters-r16.h
+NR_UTRA-FDD-Q-OffsetRange-r16.h
+NR_UuMessageTransferSidelink-r17.h
+NR_UuMessageTransferSidelink-r17-IEs.h
+NR_Uu-RelayRLC-ChannelConfig-r17.h
+NR_Uu-RelayRLC-ChannelID-r17.h
+NR_ValidityAreaList-r16.h
+NR_ValidityArea-r16.h
+NR_ValidityCellList.h
+NR_VarConditionalReconfig.h
+NR_VarConnEstFailReportList-r17.h
+NR_VarConnEstFailReport-r16.h
+NR_VarLogMeasConfig-r16-IEs.h
+NR_VarLogMeasReport-r16.h
+NR_VarMeasConfig.h
+NR_VarMeasConfigSL-r16.h
+NR_VarMeasIdleConfig-r16.h
+NR_VarMeasIdleReport-r16.h
+NR_VarMeasReport.h
+NR_VarMeasReportList.h
+NR_VarMeasReportListSL-r16.h
+NR_VarMeasReportSL-r16.h
+NR_VarMobilityHistoryReport-r16.h
+NR_VarMobilityHistoryReport-r17.h
+NR_VarPendingRNA-Update.h
+NR_VarRA-Report-r16.h
+NR_VarResumeMAC-Input.h
+NR_VarRLF-Report-r16.h
+NR_VarShortMAC-Input.h
+NR_VarSuccessHO-Report-r17-IEs.h
+NR_VelocityStateVector-r17.h
+NR_VictimSystemType.h
+NR_VictimSystemType-r16.h
+NR_VisitedCellInfoList-r16.h
+NR_VisitedCellInfo-r16.h
+NR_VisitedPSCellInfoList-r17.h
+NR_VisitedPSCellInfo-r17.h
+NR_WithinActiveTimeConfig-r16.h
+NR_WLAN-Identifiers-r16.h
+NR_WLAN-NameList-r16.h
+NR_WLAN-Name-r16.h
+NR_WLAN-RSSI-Range-r16.h
+NR_WLAN-RTT-r16.h
+NR_ZP-CSI-RS-Resource.h
+NR_ZP-CSI-RS-ResourceId.h
+NR_ZP-CSI-RS-ResourceSet.h
+NR_ZP-CSI-RS-ResourceSetId.h
+NULL.h
+OCTET_STRING.h
+OPEN_TYPE.h
+per_decoder.h
+per_encoder.h
+per_opentype.h
+per_support.h
+xer_decoder.h
+xer_encoder.h
+xer_support.h
+)
diff --git a/openair2/RRC/NR/MESSAGES/CMakeLists.txt b/openair2/RRC/NR/MESSAGES/CMakeLists.txt
index 666f528c37..dcf7ecf3f1 100644
--- a/openair2/RRC/NR/MESSAGES/CMakeLists.txt
+++ b/openair2/RRC/NR/MESSAGES/CMakeLists.txt
@@ -1,9 +1,11 @@
-set(NR_RRC_VERSION 16 4 1)
+set(NR_RRC_VERSION 17 3 0)
make_version(NR_RRC_cc ${NR_RRC_VERSION})
string(REPLACE ";" "." NR_RRC_RELEASE "${NR_RRC_VERSION}")
if(NR_RRC_RELEASE VERSION_EQUAL "16.4.1")
include(ASN.1/nr-rrc-16.4.1.cmake)
+elseif(NR_RRC_RELEASE VERSION_EQUAL "17.3.0")
+ include(ASN.1/nr-rrc-17.3.0.cmake)
else()
message(FATAL_ERROR "unknown NR_RRC_RELEASE ${NR_RRC_RELEASE}")
endif()
diff --git a/openair2/RRC/NR/MESSAGES/asn1_msg.c b/openair2/RRC/NR/MESSAGES/asn1_msg.c
index 4dd0c34e64..4872e729c8 100644
--- a/openair2/RRC/NR/MESSAGES/asn1_msg.c
+++ b/openair2/RRC/NR/MESSAGES/asn1_msg.c
@@ -321,7 +321,7 @@ uint16_t do_SIB1_NR(rrc_gNB_carrier_data_t *carrier,
// cellAccessRelatedInfo
// TODO : Add support for more than one PLMN
int num_plmn = 1; // int num_plmn = configuration->num_plmn;
- asn1cSequenceAdd(sib1->cellAccessRelatedInfo.plmn_IdentityList.list, struct NR_PLMN_IdentityInfo, nr_plmn_info);
+ asn1cSequenceAdd(sib1->cellAccessRelatedInfo.plmn_IdentityInfoList.list, struct NR_PLMN_IdentityInfo, nr_plmn_info);
for (int i = 0; i < num_plmn; ++i) {
asn1cSequenceAdd(nr_plmn_info->plmn_IdentityList.list, struct NR_PLMN_Identity, nr_plmn);
asn1cCalloc(nr_plmn->mcc, mcc);
@@ -723,7 +723,7 @@ void fill_initial_SpCellConfig(int uid,
config_pucch_resset1(pucch_Config, NULL);
set_pucch_power_config(pucch_Config, configuration->do_CSIRS);
- initialUplinkBWP->pusch_Config = config_pusch(NULL, scc);
+ initialUplinkBWP->pusch_Config = config_pusch(NULL);
long maxMIMO_Layers = uplinkConfig &&
uplinkConfig->pusch_ServingCellConfig &&
@@ -1298,27 +1298,24 @@ uint8_t do_NR_SecurityModeCommand(
uint8_t *const buffer,
const uint8_t Transaction_id,
const uint8_t cipheringAlgorithm,
- NR_IntegrityProtAlgorithm_t *integrityProtAlgorithm
+ NR_IntegrityProtAlgorithm_t integrityProtAlgorithm
)
//------------------------------------------------------------------------------
{
- NR_DL_DCCH_Message_t dl_dcch_msg;
+ NR_DL_DCCH_Message_t dl_dcch_msg={0};
asn_enc_rval_t enc_rval;
- memset(&dl_dcch_msg,0,sizeof(NR_DL_DCCH_Message_t));
dl_dcch_msg.message.present = NR_DL_DCCH_MessageType_PR_c1;
- dl_dcch_msg.message.choice.c1=CALLOC(1,sizeof(struct NR_DL_DCCH_MessageType__c1));
- dl_dcch_msg.message.choice.c1->present = NR_DL_DCCH_MessageType__c1_PR_securityModeCommand;
- dl_dcch_msg.message.choice.c1->choice.securityModeCommand = CALLOC(1, sizeof(struct NR_SecurityModeCommand));
- dl_dcch_msg.message.choice.c1->choice.securityModeCommand->rrc_TransactionIdentifier = Transaction_id;
- dl_dcch_msg.message.choice.c1->choice.securityModeCommand->criticalExtensions.present = NR_SecurityModeCommand__criticalExtensions_PR_securityModeCommand;
+ asn1cCalloc(dl_dcch_msg.message.choice.c1, c1);
+ c1->present = NR_DL_DCCH_MessageType__c1_PR_securityModeCommand;
+ asn1cCalloc(c1->choice.securityModeCommand,scm);
+ scm->rrc_TransactionIdentifier = Transaction_id;
+ scm->criticalExtensions.present = NR_SecurityModeCommand__criticalExtensions_PR_securityModeCommand;
- dl_dcch_msg.message.choice.c1->choice.securityModeCommand->criticalExtensions.choice.securityModeCommand =
- CALLOC(1, sizeof(struct NR_SecurityModeCommand_IEs));
+ asn1cCalloc(scm->criticalExtensions.choice.securityModeCommand,scmIE);
// the two following information could be based on the mod_id
- dl_dcch_msg.message.choice.c1->choice.securityModeCommand->criticalExtensions.choice.securityModeCommand->securityConfigSMC.securityAlgorithmConfig.cipheringAlgorithm
+ scmIE->securityConfigSMC.securityAlgorithmConfig.cipheringAlgorithm
= (NR_CipheringAlgorithm_t)cipheringAlgorithm;
- dl_dcch_msg.message.choice.c1->choice.securityModeCommand->criticalExtensions.choice.securityModeCommand->securityConfigSMC.securityAlgorithmConfig.integrityProtAlgorithm
- = integrityProtAlgorithm;
+ asn1cCallocOne(scmIE->securityConfigSMC.securityAlgorithmConfig.integrityProtAlgorithm, integrityProtAlgorithm);
if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
xer_fprint(stdout, &asn_DEF_NR_DL_DCCH_Message, (void *)&dl_dcch_msg);
@@ -1332,7 +1329,7 @@ uint8_t do_NR_SecurityModeCommand(
AssertFatal(enc_rval.encoded >0 , "ASN1 message encoding failed (%s, %lu)!\n",
enc_rval.failed_type->name, enc_rval.encoded);
-
+ ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_NR_DL_DCCH_Message,&dl_dcch_msg);
LOG_D(NR_RRC, "[gNB %d] securityModeCommand for UE %lx Encoded %zd bits (%zd bytes)\n", ctxt_pP->module_id, ctxt_pP->rntiMaybeUEid, enc_rval.encoded, (enc_rval.encoded + 7) / 8);
// rrc_ue_process_ueCapabilityEnquiry(0,1000,&dl_dcch_msg.message.choice.c1.choice.ueCapabilityEnquiry,0);
@@ -1521,10 +1518,7 @@ int16_t do_RRCReconfiguration(
}
if(cellGroupConfig!=NULL){
- update_cellGroupConfig(cellGroupConfig,
- ue_context_pP->local_uid,
- ue_context_pP ? ue_context_pP->ue_context.UE_Capability_nr : NULL,
- configuration);
+ update_cellGroupConfig(cellGroupConfig, ue_context_pP->ue_context.gNB_ue_ngap_id, ue_context_pP ? ue_context_pP->ue_context.UE_Capability_nr : NULL, configuration);
enc_rval = uper_encode_to_buffer(&asn_DEF_NR_CellGroupConfig,
NULL,
@@ -1754,29 +1748,27 @@ do_NR_DLInformationTransfer(
//------------------------------------------------------------------------------
{
ssize_t encoded;
- NR_DL_DCCH_Message_t dl_dcch_msg;
- memset(&dl_dcch_msg, 0, sizeof(NR_DL_DCCH_Message_t));
+ NR_DL_DCCH_Message_t dl_dcch_msg={0};
dl_dcch_msg.message.present = NR_DL_DCCH_MessageType_PR_c1;
- dl_dcch_msg.message.choice.c1 = CALLOC(1, sizeof(struct NR_DL_DCCH_MessageType__c1));
- dl_dcch_msg.message.choice.c1->present = NR_DL_DCCH_MessageType__c1_PR_dlInformationTransfer;
+ asn1cCalloc(dl_dcch_msg.message.choice.c1, c1);
+ c1->present = NR_DL_DCCH_MessageType__c1_PR_dlInformationTransfer;
- dl_dcch_msg.message.choice.c1->choice.dlInformationTransfer = CALLOC(1, sizeof(NR_DLInformationTransfer_t));
- dl_dcch_msg.message.choice.c1->choice.dlInformationTransfer->rrc_TransactionIdentifier = transaction_id;
- dl_dcch_msg.message.choice.c1->choice.dlInformationTransfer->criticalExtensions.present =
+ asn1cCalloc(c1->choice.dlInformationTransfer, infoTransfer);
+ infoTransfer->rrc_TransactionIdentifier = transaction_id;
+ infoTransfer->criticalExtensions.present =
NR_DLInformationTransfer__criticalExtensions_PR_dlInformationTransfer;
- dl_dcch_msg.message.choice.c1->choice.dlInformationTransfer->
- criticalExtensions.choice.dlInformationTransfer = CALLOC(1, sizeof(NR_DLInformationTransfer_IEs_t));
- dl_dcch_msg.message.choice.c1->choice.dlInformationTransfer->
- criticalExtensions.choice.dlInformationTransfer->dedicatedNAS_Message = CALLOC(1, sizeof(NR_DedicatedNAS_Message_t));
- dl_dcch_msg.message.choice.c1->choice.dlInformationTransfer->
- criticalExtensions.choice.dlInformationTransfer->dedicatedNAS_Message->buf = pdu_buffer;
- dl_dcch_msg.message.choice.c1->choice.dlInformationTransfer->
- criticalExtensions.choice.dlInformationTransfer->dedicatedNAS_Message->size = pdu_length;
+ asn1cCalloc(infoTransfer->criticalExtensions.choice.dlInformationTransfer, dlInfoTransfer);
+ asn1cCalloc(dlInfoTransfer->dedicatedNAS_Message,msg);
+ // we will free the caller buffer, that is ok in the present code logic (else it will leak memory) but not natural,
+ // comprehensive code design
+ msg->buf = pdu_buffer;
+ msg->size = pdu_length;
encoded = uper_encode_to_new_buffer (&asn_DEF_NR_DL_DCCH_Message, NULL, (void *) &dl_dcch_msg, (void **)buffer);
AssertFatal(encoded > 0,"ASN1 message encoding failed (%s, %ld)!\n",
"DLInformationTransfer", encoded);
+ ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_NR_DL_DCCH_Message,&dl_dcch_msg );
LOG_D(NR_RRC,"DLInformationTransfer Encoded %zd bytes\n", encoded);
//for (int i=0;iue_context.nb_of_pdusessions - 1;
- pdu_session_param_t *pdu = ue_context_p->ue_context.pduSession + i;
- create_tunnel_req.pdusession_id[0] = pdu->param.pdusession_id;
- create_tunnel_req.incoming_rb_id[0] = i + 1;
- create_tunnel_req.outgoing_qfi[0] = req->pduSession[i].DRBnGRanList[0].qosFlows[0].id;
- memcpy(&create_tunnel_req.dst_addr[0].buffer, &pdu->param.upf_addr.buffer, sizeof(create_tunnel_req.dst_addr[0].buffer));
- create_tunnel_req.dst_addr[0].length = pdu->param.upf_addr.length;
- create_tunnel_req.outgoing_teid[0] = pdu->param.gtp_teid;
-
- create_tunnel_req.num_tunnels = 1;
- create_tunnel_req.ue_id = ue_context_p->ue_context.rnti;
+ gNB_RRC_UE_t *UE = &ue_context_p->ue_context;
+ LOG_W(NR_RRC, "recreate existing tunnels, while adding new ones\n");
+ for (int i = 0; i < UE->nb_of_pdusessions; i++) {
+ rrc_pdu_session_param_t *pdu = UE->pduSession + i;
+ create_tunnel_req.pdusession_id[i] = pdu->param.pdusession_id;
+ create_tunnel_req.incoming_rb_id[i] = i + 1;
+ create_tunnel_req.outgoing_qfi[i] = req->pduSession[i].DRBnGRanList[0].qosFlows[0].id;
+ memcpy(&create_tunnel_req.dst_addr[i].buffer, &pdu->param.upf_addr.buffer, sizeof(create_tunnel_req.dst_addr[0].buffer));
+ create_tunnel_req.dst_addr[i].length = pdu->param.upf_addr.length;
+ create_tunnel_req.outgoing_teid[i] = pdu->param.gtp_teid;
+ }
+ create_tunnel_req.num_tunnels = UE->nb_of_pdusessions;
+ create_tunnel_req.ue_id = UE->rnti;
int ret = gtpv1u_create_ngu_tunnel(getCxtE1(instance)->gtpInstN3, &create_tunnel_req, &create_tunnel_resp);
if (ret != 0) {
@@ -127,7 +128,7 @@ static int drb_config_gtpu_create(const protocol_ctxt_t *const ctxt_p,
return ret;
}
- nr_rrc_gNB_process_GTPV1U_CREATE_TUNNEL_RESP(ctxt_p, &create_tunnel_resp, i);
+ nr_rrc_gNB_process_GTPV1U_CREATE_TUNNEL_RESP(ctxt_p, &create_tunnel_resp, 0);
uint8_t *kRRCenc = NULL;
uint8_t *kRRCint = NULL;
@@ -135,39 +136,27 @@ static int drb_config_gtpu_create(const protocol_ctxt_t *const ctxt_p,
uint8_t *kUPint = NULL;
/* Derive the keys from kgnb */
if (DRB_configList != NULL) {
- nr_derive_key_up_enc(ue_context_p->ue_context.ciphering_algorithm,
- ue_context_p->ue_context.kgnb,
- &kUPenc);
- nr_derive_key_up_int(ue_context_p->ue_context.integrity_algorithm,
- ue_context_p->ue_context.kgnb,
- &kUPint);
+ nr_derive_key_up_enc(UE->ciphering_algorithm, UE->kgnb, &kUPenc);
+ nr_derive_key_up_int(UE->integrity_algorithm, UE->kgnb, &kUPint);
}
- nr_derive_key_rrc_enc(ue_context_p->ue_context.ciphering_algorithm,
- ue_context_p->ue_context.kgnb,
- &kRRCenc);
- nr_derive_key_rrc_int(ue_context_p->ue_context.integrity_algorithm,
- ue_context_p->ue_context.kgnb,
- &kRRCint);
+ nr_derive_key_rrc_enc(UE->ciphering_algorithm, UE->kgnb, &kRRCenc);
+ nr_derive_key_rrc_int(UE->integrity_algorithm, UE->kgnb, &kRRCint);
/* Refresh SRBs/DRBs */
- LOG_D(NR_RRC,"Configuring PDCP DRBs/SRBs for UE %x\n",ue_context_p->ue_context.rnti);
+ LOG_D(NR_RRC, "Configuring PDCP DRBs/SRBs for UE %x\n", UE->rnti);
- nr_pdcp_add_srbs(ctxt_p->enb_flag, ctxt_p->rntiMaybeUEid,
- SRB_configList,
- (ue_context_p->ue_context.integrity_algorithm << 4)
- | ue_context_p->ue_context.ciphering_algorithm,
- kRRCenc,
- kRRCint);
-
- nr_pdcp_add_drbs(ctxt_p->enb_flag, ctxt_p->rntiMaybeUEid, 0,
+ nr_pdcp_add_srbs(ctxt_p->enb_flag, ctxt_p->rntiMaybeUEid, SRB_configList, (UE->integrity_algorithm << 4) | UE->ciphering_algorithm, kRRCenc, kRRCint);
+
+ nr_pdcp_add_drbs(ctxt_p->enb_flag,
+ ctxt_p->rntiMaybeUEid,
+ 0,
DRB_configList,
- (ue_context_p->ue_context.integrity_algorithm << 4)
- | ue_context_p->ue_context.ciphering_algorithm,
+ (UE->integrity_algorithm << 4) | UE->ciphering_algorithm,
kUPenc,
kUPint,
- get_softmodem_params()->sa ? ue_context_p->ue_context.masterCellGroup->rlc_BearerToAddModList : NULL);
-
+ get_softmodem_params()->sa ? UE->masterCellGroup->rlc_BearerToAddModList : NULL);
+
return ret;
}
@@ -187,17 +176,18 @@ static NR_SRB_ToAddModList_t **generateSRB2_confList(gNB_RRC_UE_t *ue, NR_SRB_To
return SRB_configList2;
}
static void cucp_cuup_bearer_context_setup_direct(e1ap_bearer_setup_req_t *const req, instance_t instance) {
- rrc_gNB_ue_context_t *ue_context_p = rrc_gNB_get_ue_context(RC.nrrrc[GNB_INSTANCE_TO_MODULE_ID(instance)], req->rnti);
+ rrc_gNB_ue_context_t *ue_context_p = rrc_gNB_get_ue_context_by_rnti(RC.nrrrc[instance], req->rnti);
+ gNB_RRC_UE_t *UE = &ue_context_p->ue_context;
protocol_ctxt_t ctxt = {0};
- PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, 0, GNB_FLAG_YES, ue_context_p->ue_context.rnti, 0, 0, 0);
+ PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, 0, GNB_FLAG_YES, UE->rnti, 0, 0, 0);
fill_DRB_configList(&ctxt, ue_context_p);
gNB_RRC_INST *rrc = RC.nrrrc[ctxt.module_id];
// Fixme: xid not random, but almost!
- NR_SRB_ToAddModList_t **SRB_configList2 = generateSRB2_confList(&ue_context_p->ue_context, ue_context_p->ue_context.SRB_configList, ue_context_p->ue_context.pduSession[0].xid);
+ NR_SRB_ToAddModList_t **SRB_configList2 = generateSRB2_confList(UE, UE->SRB_configList, UE->pduSession[0].xid);
// GTP tunnel for UL
- int ret = drb_config_gtpu_create(&ctxt, ue_context_p, req, ue_context_p->ue_context.DRB_configList, *SRB_configList2, rrc->e1_inst);
+ int ret = drb_config_gtpu_create(&ctxt, ue_context_p, req, UE->DRB_configList, *SRB_configList2, rrc->e1_inst);
if (ret < 0) AssertFatal(false, "Unable to configure DRB or to create GTP Tunnel\n");
if(!NODE_IS_CU(RC.nrrrc[ctxt.module_id]->node_type)) {
@@ -208,7 +198,7 @@ static void cucp_cuup_bearer_context_setup_direct(e1ap_bearer_setup_req_t *const
in_addr_t my_addr = inet_addr(RC.nrrrc[ctxt.module_id]->eth_params_s.my_addr);
instance_t gtpInst = getCxt(CUtype, instance)->gtpInst;
// GTP tunnel for DL
- fill_e1ap_bearer_setup_resp(&resp, req, gtpInst, ue_context_p->ue_context.rnti, remote_port, my_addr);
+ fill_e1ap_bearer_setup_resp(&resp, req, gtpInst, UE->rnti, remote_port, my_addr);
prepare_and_send_ue_context_modification_f1(ue_context_p, &resp);
}
diff --git a/openair2/RRC/NR/cucp_cuup_e1ap.c b/openair2/RRC/NR/cucp_cuup_e1ap.c
index 069629db0b..a3311b2ee1 100644
--- a/openair2/RRC/NR/cucp_cuup_e1ap.c
+++ b/openair2/RRC/NR/cucp_cuup_e1ap.c
@@ -36,7 +36,7 @@
extern RAN_CONTEXT_t RC;
static void cucp_cuup_bearer_context_setup_e1ap(e1ap_bearer_setup_req_t *const req, instance_t instance) {
- rrc_gNB_ue_context_t *ue_context_p = rrc_gNB_get_ue_context(RC.nrrrc[GNB_INSTANCE_TO_MODULE_ID(instance)], req->rnti);
+ rrc_gNB_ue_context_t *ue_context_p = rrc_gNB_get_ue_context_by_rnti(RC.nrrrc[instance], req->rnti);
protocol_ctxt_t ctxt = {0};
PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, 0, GNB_FLAG_YES, ue_context_p->ue_context.rnti, 0, 0, 0);
diff --git a/openair2/RRC/NR/nr_rrc_config.c b/openair2/RRC/NR/nr_rrc_config.c
index a38f9c3972..a930dc40ed 100644
--- a/openair2/RRC/NR/nr_rrc_config.c
+++ b/openair2/RRC/NR/nr_rrc_config.c
@@ -991,7 +991,7 @@ void set_dl_mcs_table(int scs,
bwp_Dedicated->pdsch_Config->choice.setup->mcs_Table = NULL;
}
-struct NR_SetupRelease_PUSCH_Config *config_pusch(NR_PUSCH_Config_t *pusch_Config, const NR_ServingCellConfigCommon_t *scc)
+struct NR_SetupRelease_PUSCH_Config *config_pusch(NR_PUSCH_Config_t *pusch_Config)
{
struct NR_SetupRelease_PUSCH_Config *setup_puschconfig = calloc(1, sizeof(*setup_puschconfig));
setup_puschconfig->present = NR_SetupRelease_PUSCH_Config_PR_setup;
@@ -1000,24 +1000,34 @@ struct NR_SetupRelease_PUSCH_Config *config_pusch(NR_PUSCH_Config_t *pusch_Confi
setup_puschconfig->choice.setup = pusch_Config;
pusch_Config->dataScramblingIdentityPUSCH = NULL;
- pusch_Config->txConfig = calloc(1, sizeof(*pusch_Config->txConfig));
+ if (!pusch_Config->txConfig)
+ pusch_Config->txConfig = calloc(1, sizeof(*pusch_Config->txConfig));
*pusch_Config->txConfig = NR_PUSCH_Config__txConfig_codebook;
pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA = NULL;
- pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB = calloc(1, sizeof(*pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB));
+ if (!pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB)
+ pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB = calloc(1, sizeof(*pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB));
pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->present = NR_SetupRelease_DMRS_UplinkConfig_PR_setup;
- pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup = calloc(1, sizeof(*pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup));
+ if (!pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup)
+ pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup = calloc(1, sizeof(*pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup));
NR_DMRS_UplinkConfig_t *NR_DMRS_UplinkConfig = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup;
NR_DMRS_UplinkConfig->dmrs_Type = NULL;
NR_DMRS_UplinkConfig->dmrs_AdditionalPosition = NULL;
NR_DMRS_UplinkConfig->phaseTrackingRS = NULL;
NR_DMRS_UplinkConfig->maxLength = NULL;
- NR_DMRS_UplinkConfig->transformPrecodingDisabled = calloc(1, sizeof(*NR_DMRS_UplinkConfig->transformPrecodingDisabled));
+ if (!NR_DMRS_UplinkConfig->transformPrecodingDisabled)
+ NR_DMRS_UplinkConfig->transformPrecodingDisabled = calloc(1, sizeof(*NR_DMRS_UplinkConfig->transformPrecodingDisabled));
NR_DMRS_UplinkConfig->transformPrecodingDisabled->scramblingID0 = NULL;
NR_DMRS_UplinkConfig->transformPrecodingDisabled->scramblingID1 = NULL;
- NR_DMRS_UplinkConfig->transformPrecodingEnabled = NULL;
- pusch_Config->pusch_PowerControl = calloc(1, sizeof(*pusch_Config->pusch_PowerControl));
+ if (!NR_DMRS_UplinkConfig->transformPrecodingEnabled)
+ NR_DMRS_UplinkConfig->transformPrecodingEnabled = calloc(1, sizeof(*NR_DMRS_UplinkConfig->transformPrecodingEnabled));
+ NR_DMRS_UplinkConfig->transformPrecodingEnabled->nPUSCH_Identity = NULL;
+ NR_DMRS_UplinkConfig->transformPrecodingEnabled->sequenceHopping = NULL;
+ NR_DMRS_UplinkConfig->transformPrecodingEnabled->sequenceGroupHopping = NULL;
+ if (!pusch_Config->pusch_PowerControl)
+ pusch_Config->pusch_PowerControl = calloc(1, sizeof(*pusch_Config->pusch_PowerControl));
pusch_Config->pusch_PowerControl->tpc_Accumulation = NULL;
- pusch_Config->pusch_PowerControl->msg3_Alpha = calloc(1, sizeof(*pusch_Config->pusch_PowerControl->msg3_Alpha));
+ if (!pusch_Config->pusch_PowerControl->msg3_Alpha)
+ pusch_Config->pusch_PowerControl->msg3_Alpha = calloc(1, sizeof(*pusch_Config->pusch_PowerControl->msg3_Alpha));
*pusch_Config->pusch_PowerControl->msg3_Alpha = NR_Alpha_alpha1;
pusch_Config->pusch_PowerControl->p0_NominalWithoutGrant = NULL;
pusch_Config->pusch_PowerControl->p0_AlphaSets = calloc(1, sizeof(*pusch_Config->pusch_PowerControl->p0_AlphaSets));
@@ -1036,7 +1046,8 @@ struct NR_SetupRelease_PUSCH_Config *config_pusch(NR_PUSCH_Config_t *pusch_Confi
asn1cSeqAdd(&pusch_Config->pusch_PowerControl->pathlossReferenceRSToAddModList->list, plrefRS);
pusch_Config->pusch_PowerControl->pathlossReferenceRSToReleaseList = NULL;
pusch_Config->pusch_PowerControl->twoPUSCH_PC_AdjustmentStates = NULL;
- pusch_Config->pusch_PowerControl->deltaMCS = calloc(1, sizeof(*pusch_Config->pusch_PowerControl->deltaMCS));
+ if (!pusch_Config->pusch_PowerControl->deltaMCS)
+ pusch_Config->pusch_PowerControl->deltaMCS = calloc(1, sizeof(*pusch_Config->pusch_PowerControl->deltaMCS));
*pusch_Config->pusch_PowerControl->deltaMCS = NR_PUSCH_PowerControl__deltaMCS_enabled;
pusch_Config->pusch_PowerControl->sri_PUSCH_MappingToAddModList = NULL;
pusch_Config->pusch_PowerControl->sri_PUSCH_MappingToReleaseList = NULL;
@@ -1048,13 +1059,12 @@ struct NR_SetupRelease_PUSCH_Config *config_pusch(NR_PUSCH_Config_t *pusch_Confi
pusch_Config->mcs_Table = NULL;
pusch_Config->mcs_TableTransformPrecoder = NULL;
pusch_Config->transformPrecoder = NULL;
- if (scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon->choice.setup->msg3_transformPrecoder == NULL) {
- pusch_Config->transformPrecoder = calloc(1, sizeof(*pusch_Config->transformPrecoder));
- *pusch_Config->transformPrecoder = NR_PUSCH_Config__transformPrecoder_disabled;
- }
- pusch_Config->codebookSubset = calloc(1, sizeof(*pusch_Config->codebookSubset));
+ if (!pusch_Config->codebookSubset)
+ pusch_Config->codebookSubset = calloc(1, sizeof(*pusch_Config->codebookSubset));
*pusch_Config->codebookSubset = NR_PUSCH_Config__codebookSubset_nonCoherent;
- asn1cCallocOne(pusch_Config->maxRank, 1);
+ if (!pusch_Config->maxRank)
+ pusch_Config->maxRank = calloc(1, sizeof(*pusch_Config->maxRank));
+ *pusch_Config->maxRank = 1;
pusch_Config->rbg_Size = NULL;
pusch_Config->uci_OnPUSCH = NULL;
pusch_Config->tp_pi2BPSK = NULL;
@@ -1248,7 +1258,7 @@ void config_uplinkBWP(NR_BWP_Uplink_t *ubwp,
bwp_loop < servingcellconfigdedicated->uplinkConfig->uplinkBWP_ToAddModList->list.count) {
pusch_Config = servingcellconfigdedicated->uplinkConfig->uplinkBWP_ToAddModList->list.array[bwp_loop]->bwp_Dedicated->pusch_Config->choice.setup;
}
- ubwp->bwp_Dedicated->pusch_Config = config_pusch(pusch_Config, scc);
+ ubwp->bwp_Dedicated->pusch_Config = config_pusch(pusch_Config);
long maxMIMO_Layers = servingcellconfigdedicated &&
servingcellconfigdedicated->uplinkConfig
diff --git a/openair2/RRC/NR/nr_rrc_config.h b/openair2/RRC/NR/nr_rrc_config.h
index 85eccc5e53..96b885ed15 100644
--- a/openair2/RRC/NR/nr_rrc_config.h
+++ b/openair2/RRC/NR/nr_rrc_config.h
@@ -90,7 +90,7 @@ void prepare_sim_uecap(NR_UE_NR_Capability_t *cap,
int numerology,
int rbsize,
int mcs_table);
-struct NR_SetupRelease_PUSCH_Config *config_pusch(NR_PUSCH_Config_t *pusch_Config, const NR_ServingCellConfigCommon_t *scc);
+struct NR_SetupRelease_PUSCH_Config *config_pusch(NR_PUSCH_Config_t *pusch_Config);
void config_downlinkBWP(NR_BWP_Downlink_t *bwp,
const NR_ServingCellConfigCommon_t *scc,
const NR_ServingCellConfig_t *servingcellconfigdedicated,
diff --git a/openair2/RRC/NR/nr_rrc_defs.h b/openair2/RRC/NR/nr_rrc_defs.h
index c50bbbbe05..7da8b44af7 100644
--- a/openair2/RRC/NR/nr_rrc_defs.h
+++ b/openair2/RRC/NR/nr_rrc_defs.h
@@ -269,7 +269,7 @@ typedef struct pdu_session_param_s {
uint8_t xid; // transaction_id
ngap_Cause_t cause;
uint8_t cause_value;
-} __attribute__ ((__packed__)) pdu_session_param_t;
+} rrc_pdu_session_param_t;
typedef struct gNB_RRC_UE_s {
uint8_t primaryCC_id;
@@ -281,8 +281,7 @@ typedef struct gNB_RRC_UE_s {
uint8_t DRB_active[NGAP_MAX_DRBS_PER_UE];
NR_SRB_INFO SI;
- NR_SRB_INFO_TABLE_ENTRY Srb1;
- NR_SRB_INFO_TABLE_ENTRY Srb2;
+ NR_SRB_INFO_TABLE_ENTRY Srb[maxSRBs]; // 3gpp max is 3 SRBs, number 1..3, we waste the entry 0 for code simplicity
NR_MeasConfig_t *measConfig;
NR_HANDOVER_INFO *handover_info;
NR_MeasResults_t *measResults;
@@ -332,7 +331,7 @@ typedef struct gNB_RRC_UE_s {
/* Information from S1AP initial_context_setup_req */
uint32_t gNB_ue_s1ap_id :24;
uint32_t gNB_ue_ngap_id;
- uint64_t amf_ue_ngap_id:40;
+ uint64_t amf_ue_ngap_id;
nr_rrc_guami_t ue_guami;
ngap_security_capabilities_t security_capabilities;
@@ -350,11 +349,11 @@ typedef struct gNB_RRC_UE_s {
/* Number of e_rab to be modified in the list */
uint8_t nb_of_modify_pdusessions;
uint8_t nb_of_failed_pdusessions;
- pdu_session_param_t modify_pdusession[NR_NB_RB_MAX];
+ rrc_pdu_session_param_t modify_pdusession[NR_NB_RB_MAX];
/* list of e_rab to be setup by RRC layers */
/* list of pdu session to be setup by RRC layers */
nr_e_rab_param_t e_rab[NB_RB_MAX];//[S1AP_MAX_E_RAB];
- pdu_session_param_t pduSession[NGAP_MAX_PDU_SESSION];
+ rrc_pdu_session_param_t pduSession[NGAP_MAX_PDU_SESSION];
//release e_rabs
uint8_t nb_release_of_e_rabs;
e_rab_failed_t e_rabs_release_failed[S1AP_MAX_E_RAB];
@@ -396,23 +395,13 @@ typedef struct gNB_RRC_UE_s {
struct NR_PhysicalCellGroupConfig *physicalCellGroupConfig;
/* Nas Pdu */
- uint8_t nas_pdu_flag;
- ngap_nas_pdu_t nas_pdu;
+ ngap_pdu_t nas_pdu;
} gNB_RRC_UE_t;
typedef struct rrc_gNB_ue_context_s {
/* Tree related data */
RB_ENTRY(rrc_gNB_ue_context_s) entries;
-
- /* Uniquely identifies the UE between MME and eNB within the eNB.
- * This id is encoded on 24bits.
- */
- ue_id_t ue_id_rnti;
-
- // another key for protocol layers but should not be used as a key for RB tree
- uid_t local_uid;
-
/* UE id for initial connection to NGAP */
struct gNB_RRC_UE_s ue_context;
} rrc_gNB_ue_context_t;
@@ -492,13 +481,7 @@ typedef struct gNB_RRC_INST_s {
eth_params_t eth_params_s;
rrc_gNB_carrier_data_t carrier;
uid_allocator_t uid_allocator;
- RB_HEAD(rrc_nr_ue_tree_s, rrc_gNB_ue_context_s) rrc_ue_head; // ue_context tree key search by rnti
- int Nb_ue;
- hash_table_t *initial_id2_s1ap_ids; // key is content is rrc_ue_s1ap_ids_t
- hash_table_t *s1ap_id2_s1ap_ids ; // key is content is rrc_ue_s1ap_ids_t
- hash_table_t *initial_id2_ngap_ids;
- hash_table_t *ngap_id2_ngap_ids ;
-
+ RB_HEAD(rrc_nr_ue_tree_s, rrc_gNB_ue_context_s) rrc_ue_head; // ue_context tree key search by rnti
/// NR cell id
uint64_t nr_cellid;
diff --git a/openair2/RRC/NR/nr_rrc_proto.h b/openair2/RRC/NR/nr_rrc_proto.h
index cac95239e5..eb2b73a642 100644
--- a/openair2/RRC/NR/nr_rrc_proto.h
+++ b/openair2/RRC/NR/nr_rrc_proto.h
@@ -64,11 +64,11 @@ void rrc_gNB_generate_SgNBAdditionRequestAcknowledge(
rrc_gNB_ue_context_t *const ue_context_pP
);
-struct rrc_gNB_ue_context_s *rrc_gNB_allocate_new_UE_context(gNB_RRC_INST *rrc_instance_pP);
+rrc_gNB_ue_context_t *rrc_gNB_allocate_new_UE_context(gNB_RRC_INST *rrc_instance_pP);
void rrc_parse_ue_capabilities(gNB_RRC_INST *rrc,NR_UE_CapabilityRAT_ContainerList_t *UE_CapabilityRAT_ContainerList, x2ap_ENDC_sgnb_addition_req_t *m, NR_CG_ConfigInfo_IEs_t * cg_config_info);
-void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_p, x2ap_ENDC_sgnb_addition_req_t *m);
+void rrc_add_nsa_user(gNB_RRC_INST *rrc, rrc_gNB_ue_context_t *ue_context_p, x2ap_ENDC_sgnb_addition_req_t *m);
void rrc_remove_nsa_user(gNB_RRC_INST *rrc, int rnti);
@@ -163,12 +163,6 @@ int nr_rrc_reconfiguration_req(rrc_gNB_ue_context_t *const ue_context_pP
const int dl_bwp_id,
const int ul_bwp_id);
-int nr_rrc_gNB_decode_ccch(protocol_ctxt_t *const ctxt_pP,
- const uint8_t *buffer,
- int buffer_length,
- const uint8_t *du_to_cu_rrc_container,
- int du_to_cu_rrc_container_length);
-
void
rrc_gNB_generate_dedicatedRRCReconfiguration_release(
const protocol_ctxt_t *const ctxt_pP,
@@ -217,9 +211,5 @@ void nr_pdcp_add_drbs(eNB_flag_t enb_flag,
uint8_t *const kUPint,
struct NR_CellGroupConfig__rlc_BearerToAddModList *rlc_bearer2add_list);
-int rrc_gNB_generate_pcch_msg(uint32_t tmsi,
- uint8_t paging_drx,
- instance_t instance,
- uint8_t CC_id);
-
+int rrc_gNB_generate_pcch_msg(uint32_t tmsi, uint8_t paging_drx, instance_t instance, uint8_t CC_id);
#endif
diff --git a/openair2/RRC/NR/rrc_gNB.c b/openair2/RRC/NR/rrc_gNB.c
index e2c3b3d2d2..e234d48a6a 100644
--- a/openair2/RRC/NR/rrc_gNB.c
+++ b/openair2/RRC/NR/rrc_gNB.c
@@ -193,9 +193,10 @@ static void init_NR_SI(gNB_RRC_INST *rrc, gNB_RrcConfigurationReq *configuration
pthread_mutex_unlock(&rrc->cell_info_mutex);
if (get_softmodem_params()->phy_test > 0 || get_softmodem_params()->do_ra > 0) {
- struct rrc_gNB_ue_context_s *ue_context_p = rrc_gNB_allocate_new_UE_context(rrc);
- ue_context_p->ue_context.spCellConfig = calloc(1, sizeof(struct NR_SpCellConfig));
- ue_context_p->ue_context.spCellConfig->spCellConfigDedicated = configuration->scd;
+ rrc_gNB_ue_context_t *ue_context_p = rrc_gNB_allocate_new_ue_context(rrc);
+ gNB_RRC_UE_t *UE = &ue_context_p->ue_context;
+ UE->spCellConfig = calloc(1, sizeof(struct NR_SpCellConfig));
+ UE->spCellConfig->spCellConfigDedicated = configuration->scd;
LOG_I(NR_RRC,"Adding new user (%p)\n",ue_context_p);
if (!NODE_IS_CU(RC.nrrrc[0]->node_type)) {
rrc_add_nsa_user(rrc,ue_context_p,NULL);
@@ -241,14 +242,9 @@ static void openair_rrc_gNB_configuration(const module_id_t gnb_mod_idP, gNB_Rrc
AssertFatal(NUMBER_OF_UE_MAX < (module_id_t)0xFFFFFFFFFFFFFFFF, " variable overflow");
AssertFatal(configuration!=NULL,"configuration input is null\n");
rrc->module_id = gnb_mod_idP;
- rrc->Nb_ue = 0;
rrc_gNB_CU_DU_init(rrc);
uid_linear_allocator_init(&rrc->uid_allocator);
RB_INIT(&rrc->rrc_ue_head);
- rrc->initial_id2_s1ap_ids = hashtable_create (NUMBER_OF_UE_MAX * 2, NULL, NULL);
- rrc->s1ap_id2_s1ap_ids = hashtable_create (NUMBER_OF_UE_MAX * 2, NULL, NULL);
- rrc->initial_id2_ngap_ids = hashtable_create (NUMBER_OF_UE_MAX * 2, NULL, NULL);
- rrc->ngap_id2_ngap_ids = hashtable_create (NUMBER_OF_UE_MAX * 2, NULL, NULL);
rrc->configuration = *configuration;
rrc->carrier.servingcellconfigcommon = configuration->scc;
rrc->carrier.servingcellconfig = configuration->scd;
@@ -324,27 +320,21 @@ void apply_macrlc_config_reest(gNB_RRC_INST *rrc, rrc_gNB_ue_context_t *const ue
}
//-----------------------------------------------------------------------------
-static void rrc_gNB_generate_RRCSetup(const protocol_ctxt_t *const ctxt_pP,
+static void rrc_gNB_generate_RRCSetup(instance_t instance,
+ rnti_t rnti,
rrc_gNB_ue_context_t *const ue_context_pP,
const uint8_t *masterCellGroup,
int masterCellGroup_len,
NR_ServingCellConfigCommon_t *scc)
//-----------------------------------------------------------------------------
{
- LOG_I(NR_RRC, "rrc_gNB_generate_RRCSetup for RNTI %04lx\n", ctxt_pP->rntiMaybeUEid);
+ LOG_I(NR_RRC, "rrc_gNB_generate_RRCSetup for RNTI %04x\n", rnti);
gNB_RRC_UE_t *ue_p = &ue_context_pP->ue_context;
- gNB_RRC_INST *rrc = RC.nrrrc[ctxt_pP->module_id];
+ gNB_RRC_INST *rrc = RC.nrrrc[instance];
unsigned char buf[1024];
const NR_ServingCellConfig_t *sccd = rrc->configuration.scd;
- int size = do_RRCSetup(ue_context_pP,
- buf,
- rrc_gNB_get_next_transaction_identifier(ctxt_pP->module_id),
- masterCellGroup,
- masterCellGroup_len,
- scc,
- sccd,
- &rrc->configuration);
+ int size = do_RRCSetup(ue_context_pP, buf, rrc_gNB_get_next_transaction_identifier(instance), masterCellGroup, masterCellGroup_len, scc, sccd, &rrc->configuration);
AssertFatal(size > 0, "do_RRCSetup failed\n");
AssertFatal(size <= 1024, "memory corruption\n");
@@ -359,7 +349,7 @@ static void rrc_gNB_generate_RRCSetup(const protocol_ctxt_t *const ctxt_pP,
ue_context_pP->ue_context.ue_release_timer_thres = 1000;
/* TODO: this should go through the E1 interface */
- nr_pdcp_add_srbs(ctxt_pP->enb_flag, ctxt_pP->rntiMaybeUEid, ue_context_pP->ue_context.SRB_configList, 0, NULL, NULL);
+ nr_pdcp_add_srbs(true, rnti, ue_context_pP->ue_context.SRB_configList, 0, NULL, NULL);
f1ap_dl_rrc_message_t dl_rrc = {
.old_gNB_DU_ue_id = 0xFFFFFF,
@@ -368,31 +358,24 @@ static void rrc_gNB_generate_RRCSetup(const protocol_ctxt_t *const ctxt_pP,
.rnti = ue_p->rnti,
.srb_id = CCCH
};
- rrc->mac_rrc.dl_rrc_message_transfer(ctxt_pP->module_id, &dl_rrc);
+ rrc->mac_rrc.dl_rrc_message_transfer(instance, &dl_rrc);
}
//-----------------------------------------------------------------------------
-static void rrc_gNB_generate_RRCSetup_for_RRCReestablishmentRequest(const protocol_ctxt_t *const ctxt_pP, const int CC_id)
+static void rrc_gNB_generate_RRCSetup_for_RRCReestablishmentRequest(module_id_t module_id, rnti_t rnti, const int CC_id)
//-----------------------------------------------------------------------------
{
LOG_I(NR_RRC, "generate RRCSetup for RRCReestablishmentRequest \n");
rrc_gNB_ue_context_t *ue_context_pP = NULL;
- gNB_RRC_INST *rrc_instance_p = RC.nrrrc[ctxt_pP->module_id];
+ gNB_RRC_INST *rrc_instance_p = RC.nrrrc[module_id];
const NR_ServingCellConfigCommon_t *scc=rrc_instance_p->carrier.servingcellconfigcommon;
const NR_ServingCellConfig_t *sccd = rrc_instance_p->configuration.scd;
- ue_context_pP = rrc_gNB_get_next_free_ue_context(ctxt_pP, rrc_instance_p, 0);
+ ue_context_pP = rrc_gNB_create_ue_context(rnti, rrc_instance_p, 0);
gNB_RRC_UE_t *ue_p = &ue_context_pP->ue_context;
unsigned char buf[1024];
- int size = do_RRCSetup(ue_context_pP,
- buf,
- rrc_gNB_get_next_transaction_identifier(ctxt_pP->module_id),
- NULL,
- 0,
- scc,
- sccd,
- &rrc_instance_p->configuration);
+ int size = do_RRCSetup(ue_context_pP, buf, rrc_gNB_get_next_transaction_identifier(module_id), NULL, 0, scc, sccd, &rrc_instance_p->configuration);
AssertFatal(size > 0, "do_RRCSetup failed\n");
AssertFatal(size <= 1024, "memory corruption\n");
@@ -403,9 +386,7 @@ static void rrc_gNB_generate_RRCSetup_for_RRCReestablishmentRequest(const protoc
size,
"[MSG] RRC Setup\n");
- LOG_D(NR_RRC,
- PROTOCOL_NR_RRC_CTXT_UE_FMT" RRC_gNB --- MAC_CONFIG_REQ (SRB1) ---> MAC_gNB\n",
- PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP));
+ LOG_D(NR_RRC, "RRC_gNB --- MAC_CONFIG_REQ (SRB1) ---> MAC_gNB for rnti %04x\n", rnti);
// update SCC and MIB/SIB (two calls)
nr_mac_config_scc(RC.nrmac[rrc_instance_p->module_id],
@@ -417,16 +398,15 @@ static void rrc_gNB_generate_RRCSetup_for_RRCReestablishmentRequest(const protoc
nr_mac_config_mib(RC.nrmac[rrc_instance_p->module_id], &rrc_instance_p->carrier.mib);
nr_mac_config_sib1(RC.nrmac[rrc_instance_p->module_id], rrc_instance_p->carrier.siblock1);
- LOG_I(NR_RRC,
- PROTOCOL_NR_RRC_CTXT_UE_FMT" [RAPROC] Logical Channel DL-CCCH, Generating RRCSetup (bytes %d)\n",
- PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP),
- size);
+ LOG_I(NR_RRC, " [RAPROC] rnti: %04x Logical Channel DL-CCCH, Generating RRCSetup (bytes %d)\n", rnti, size);
// activate release timer, if RRCSetupComplete not received after 100 frames, remove UE
ue_context_pP->ue_context.ue_release_timer = 1;
// remove UE after 10 frames after RRCConnectionRelease is triggered
ue_context_pP->ue_context.ue_release_timer_thres = 1000;
// configure MAC
- apply_macrlc_config(rrc_instance_p,ue_context_pP,ctxt_pP);
+ protocol_ctxt_t ctxt = {0};
+ PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt, 0, GNB_FLAG_YES, rnti, 0, 0);
+ apply_macrlc_config(rrc_instance_p, ue_context_pP, &ctxt);
//nr_pdcp_add_srbs(ctxt_pP->enb_flag, ctxt_pP->rntiMaybeUEid, ue_context_pP->ue_context.SRB_configList, 0, NULL, NULL);
//apply_pdcp_config(ue_context_pP,ctxt_pP);
@@ -440,18 +420,18 @@ static void rrc_gNB_generate_RRCSetup_for_RRCReestablishmentRequest(const protoc
.rnti = ue_p->rnti,
.srb_id = CCCH
};
- rrc_instance_p->mac_rrc.dl_rrc_message_transfer(ctxt_pP->module_id, &dl_rrc);
+ rrc_instance_p->mac_rrc.dl_rrc_message_transfer(module_id, &dl_rrc);
}
-static void rrc_gNB_generate_RRCReject(const protocol_ctxt_t *const ctxt_pP, rrc_gNB_ue_context_t *const ue_context_pP)
+static void rrc_gNB_generate_RRCReject(module_id_t module_id, rrc_gNB_ue_context_t *const ue_context_pP)
//-----------------------------------------------------------------------------
{
LOG_I(NR_RRC, "rrc_gNB_generate_RRCReject \n");
- gNB_RRC_INST *rrc = RC.nrrrc[ctxt_pP->module_id];
+ gNB_RRC_INST *rrc = RC.nrrrc[module_id];
gNB_RRC_UE_t *ue_p = &ue_context_pP->ue_context;
unsigned char buf[1024];
- int size = do_RRCReject(ctxt_pP->module_id, buf);
+ int size = do_RRCReject(module_id, buf);
AssertFatal(size > 0, "do_RRCReject failed\n");
AssertFatal(size <= 1024, "memory corruption\n");
@@ -459,10 +439,7 @@ static void rrc_gNB_generate_RRCReject(const protocol_ctxt_t *const ctxt_pP, rrc
(char *)buf,
size,
"[MSG] RRCReject \n");
- LOG_I(NR_RRC,
- PROTOCOL_NR_RRC_CTXT_UE_FMT" [RAPROC] Logical Channel DL-CCCH, Generating NR_RRCReject (bytes %d)\n",
- PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP),
- size);
+ LOG_I(NR_RRC, " [RAPROC] ue %04x Logical Channel DL-CCCH, Generating NR_RRCReject (bytes %d)\n", ue_p->rnti, size);
f1ap_dl_rrc_message_t dl_rrc = {
.gNB_CU_ue_id = 0,
@@ -475,7 +452,7 @@ static void rrc_gNB_generate_RRCReject(const protocol_ctxt_t *const ctxt_pP, rrc
.execute_duplication = 1,
.RAT_frequency_priority_information.en_dc = 0
};
- rrc->mac_rrc.dl_rrc_message_transfer(ctxt_pP->module_id, &dl_rrc);
+ rrc->mac_rrc.dl_rrc_message_transfer(module_id, &dl_rrc);
}
//-----------------------------------------------------------------------------
@@ -487,9 +464,9 @@ static void rrc_gNB_process_RRCSetupComplete(const protocol_ctxt_t *const ctxt_p
{
LOG_A(NR_RRC, PROTOCOL_NR_RRC_CTXT_UE_FMT" [RAPROC] Logical Channel UL-DCCH, " "processing NR_RRCSetupComplete from UE (SRB1 Active)\n",
PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP));
- ue_context_pP->ue_context.Srb1.Active = 1;
- ue_context_pP->ue_context.Srb1.Srb_info.Srb_id = 1;
- ue_context_pP->ue_context.Srb2.Active = 0;
+ ue_context_pP->ue_context.Srb[1].Active = 1;
+ ue_context_pP->ue_context.Srb[1].Srb_info.Srb_id = 1;
+ ue_context_pP->ue_context.Srb[2].Active = 0;
ue_context_pP->ue_context.StatusRrc = NR_RRC_CONNECTED;
if (get_softmodem_params()->sa) {
@@ -503,37 +480,28 @@ static void rrc_gNB_process_RRCSetupComplete(const protocol_ctxt_t *const ctxt_p
static void rrc_gNB_generate_defaultRRCReconfiguration(const protocol_ctxt_t *const ctxt_pP, rrc_gNB_ue_context_t *ue_context_pP)
//-----------------------------------------------------------------------------
{
- struct NR_RRCReconfiguration_v1530_IEs__dedicatedNAS_MessageList
- *dedicatedNAS_MessageList = NULL;
- NR_DedicatedNAS_Message_t *dedicatedNAS_Message = NULL;
-
+ gNB_RRC_INST *rrc = RC.nrrrc[ctxt_pP->module_id];
uint8_t xid = rrc_gNB_get_next_transaction_identifier(ctxt_pP->module_id);
/******************** Radio Bearer Config ********************/
+ gNB_RRC_UE_t *ue_p = &ue_context_pP->ue_context;
- dedicatedNAS_MessageList = CALLOC(1, sizeof(struct NR_RRCReconfiguration_v1530_IEs__dedicatedNAS_MessageList));
+ struct NR_RRCReconfiguration_v1530_IEs__dedicatedNAS_MessageList *dedicatedNAS_MessageList = CALLOC(1, sizeof(*dedicatedNAS_MessageList));
/* Add all NAS PDUs to the list */
- for (int i = 0; i < ue_context_pP->ue_context.nb_of_pdusessions; i++) {
- if (ue_context_pP->ue_context.pduSession[i].param.nas_pdu.buffer != NULL) {
- dedicatedNAS_Message = CALLOC(1, sizeof(NR_DedicatedNAS_Message_t));
- OCTET_STRING_fromBuf(dedicatedNAS_Message,
- (char *)ue_context_pP->ue_context.pduSession[i].param.nas_pdu.buffer,
- ue_context_pP->ue_context.pduSession[i].param.nas_pdu.length);
- asn1cSeqAdd(&dedicatedNAS_MessageList->list, dedicatedNAS_Message);
+ for (int i = 0; i < ue_p->nb_of_pdusessions; i++) {
+ if (ue_p->pduSession[i].param.nas_pdu.buffer != NULL) {
+ asn1cSequenceAdd(dedicatedNAS_MessageList->list, NR_DedicatedNAS_Message_t, msg);
+ OCTET_STRING_fromBuf(msg, (char *)ue_p->pduSession[i].param.nas_pdu.buffer, ue_p->pduSession[i].param.nas_pdu.length);
}
- ue_context_pP->ue_context.pduSession[i].status = PDU_SESSION_STATUS_DONE;
- LOG_D(NR_RRC, "setting the status for the default DRB (index %d) to (%d,%s)\n",
- i, ue_context_pP->ue_context.pduSession[i].status, "PDU_SESSION_STATUS_DONE");
+ ue_p->pduSession[i].status = PDU_SESSION_STATUS_DONE;
+ LOG_D(NR_RRC, "setting the status for the default DRB (index %d) to (%d,%s)\n", i, ue_p->pduSession[i].status, "PDU_SESSION_STATUS_DONE");
}
- if (ue_context_pP->ue_context.nas_pdu_flag == 1) {
- dedicatedNAS_Message = CALLOC(1, sizeof(NR_DedicatedNAS_Message_t));
- OCTET_STRING_fromBuf(dedicatedNAS_Message,
- (char *)ue_context_pP->ue_context.nas_pdu.buffer,
- ue_context_pP->ue_context.nas_pdu.length);
- asn1cSeqAdd(&dedicatedNAS_MessageList->list, dedicatedNAS_Message);
+ if (ue_p->nas_pdu.length) {
+ asn1cSequenceAdd(dedicatedNAS_MessageList->list, NR_DedicatedNAS_Message_t, msg);
+ OCTET_STRING_fromBuf(msg, (char *)ue_p->nas_pdu.buffer, ue_p->nas_pdu.length);
}
/* If list is empty free the list and reset the address */
@@ -542,10 +510,8 @@ static void rrc_gNB_generate_defaultRRCReconfiguration(const protocol_ctxt_t *co
dedicatedNAS_MessageList = NULL;
}
- gNB_RRC_INST *rrc = RC.nrrrc[ctxt_pP->module_id];
NR_MeasConfig_t *measconfig = get_defaultMeasConfig(&rrc->configuration);
- gNB_RRC_UE_t *ue_p = &ue_context_pP->ue_context;
uint8_t buffer[RRC_BUF_SIZE] = {0};
int size = do_RRCReconfiguration(ctxt_pP,
buffer,
@@ -564,30 +530,26 @@ static void rrc_gNB_generate_defaultRRCReconfiguration(const protocol_ctxt_t *co
NULL,
ue_p->masterCellGroup);
AssertFatal(size > 0, "cannot encode RRCReconfiguration in %s()\n", __func__);
- LOG_W(RRC, "do_RRCReconfiguration(): size %d\n", size);
+ LOG_W(NR_RRC, "do_RRCReconfiguration(): size %d\n", size);
if (LOG_DEBUGFLAG(DEBUG_ASN1)) {
xer_fprint(stdout, &asn_DEF_NR_CellGroupConfig, ue_p->masterCellGroup);
}
// suspicious if it is always malloced before ?
- free(ue_context_pP->ue_context.nas_pdu.buffer);
+ free(ue_p->nas_pdu.buffer);
LOG_DUMPMSG(NR_RRC, DEBUG_RRC,(char *)buffer, size, "[MSG] RRC Reconfiguration\n");
/* Free all NAS PDUs */
- for (int i = 0; i < ue_context_pP->ue_context.nb_of_pdusessions; i++) {
- if (ue_context_pP->ue_context.pduSession[i].param.nas_pdu.buffer != NULL) {
- free(ue_context_pP->ue_context.pduSession[i].param.nas_pdu.buffer);
- ue_context_pP->ue_context.pduSession[i].param.nas_pdu.buffer = NULL;
+ for (int i = 0; i < ue_p->nb_of_pdusessions; i++) {
+ if (ue_p->pduSession[i].param.nas_pdu.buffer != NULL) {
+ free(ue_p->pduSession[i].param.nas_pdu.buffer);
+ ue_p->pduSession[i].param.nas_pdu.buffer = NULL;
}
}
- LOG_I(NR_RRC, "[gNB %d] Frame %d, Logical Channel DL-DCCH, Generate NR_RRCReconfiguration (bytes %d, UE id %x)\n",
- ctxt_pP->module_id,
- ctxt_pP->frame,
- size,
- ue_context_pP->ue_context.rnti);
+ LOG_I(NR_RRC, "[gNB %d] Frame %d, Logical Channel DL-DCCH, Generate NR_RRCReconfiguration (bytes %d, UE id %x)\n", ctxt_pP->module_id, ctxt_pP->frame, size, ue_p->rnti);
switch (RC.nrrrc[ctxt_pP->module_id]->node_type) {
case ngran_gNB_CU:
case ngran_gNB_CUCP:
@@ -616,16 +578,12 @@ static void rrc_gNB_generate_defaultRRCReconfiguration(const protocol_ctxt_t *co
gNB_RRC_UE_t *ue_p = &ue_context_pP->ue_context;
nr_mac_update_cellgroup(RC.nrmac[rrc->module_id], ue_p->rnti, ue_p->masterCellGroup);
- uint32_t delay_ms = ue_context_pP->ue_context.masterCellGroup &&
- ue_context_pP->ue_context.masterCellGroup->spCellConfig &&
- ue_context_pP->ue_context.masterCellGroup->spCellConfig->spCellConfigDedicated &&
- ue_context_pP->ue_context.masterCellGroup->spCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList ?
- NR_RRC_RECONFIGURATION_DELAY_MS + NR_RRC_BWP_SWITCHING_DELAY_MS : NR_RRC_RECONFIGURATION_DELAY_MS;
+ uint32_t delay_ms = ue_p->masterCellGroup && ue_p->masterCellGroup->spCellConfig && ue_p->masterCellGroup->spCellConfig->spCellConfigDedicated
+ && ue_p->masterCellGroup->spCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList
+ ? NR_RRC_RECONFIGURATION_DELAY_MS + NR_RRC_BWP_SWITCHING_DELAY_MS
+ : NR_RRC_RECONFIGURATION_DELAY_MS;
- nr_mac_enable_ue_rrc_processing_timer(ctxt_pP->module_id,
- ue_context_pP->ue_context.rnti,
- *rrc->carrier.servingcellconfigcommon->ssbSubcarrierSpacing,
- delay_ms);
+ nr_mac_enable_ue_rrc_processing_timer(ctxt_pP->module_id, ue_p->rnti, *rrc->carrier.servingcellconfigcommon->ssbSubcarrierSpacing, delay_ms);
}
}
@@ -633,135 +591,69 @@ void fill_DRB_configList(const protocol_ctxt_t *const ctxt_pP,
rrc_gNB_ue_context_t *ue_context_pP) {
gNB_RRC_INST *rrc = RC.nrrrc[ctxt_pP->module_id];
- gNB_RRC_UE_t *ue_p = &ue_context_pP->ue_context;
- NR_DRB_ToAddModList_t **DRB_configList = NULL;
- NR_DRB_ToAddModList_t **DRB_configList2 = NULL;
- int qos_flow_index = 0;
- int pdu_sessions_done = 0;
+ gNB_RRC_UE_t *ue_p = &ue_context_pP->ue_context;
+ int qos_flow_index = 0;
int i;
uint8_t drb_id_to_setup_start = 0;
uint8_t nb_drb_to_setup = rrc->configuration.drbs;
long drb_priority[NGAP_MAX_DRBS_PER_UE];
- uint8_t xid = rrc_gNB_get_next_transaction_identifier(ctxt_pP->module_id);
+ int xid = rrc_gNB_get_next_transaction_identifier(ctxt_pP->module_id);
- DRB_configList = &ue_context_pP->ue_context.DRB_configList;
- if (*DRB_configList) {
- free(*DRB_configList);
- }
- *DRB_configList = CALLOC(1, sizeof(**DRB_configList));
- memset(*DRB_configList, 0, sizeof(**DRB_configList));
-
- DRB_configList2 = &ue_context_pP->ue_context.DRB_configList2[xid];
- if (*DRB_configList2) {
- free(*DRB_configList2);
- }
- *DRB_configList2 = CALLOC(1, sizeof(**DRB_configList2));
- memset(*DRB_configList2, 0, sizeof(**DRB_configList2));
- for (i = 0; i < ue_context_pP->ue_context.nb_of_pdusessions; i++) {
- if (pdu_sessions_done >= ue_context_pP->ue_context.nb_of_pdusessions) {
- break;
- }
-
- if (ue_context_pP->ue_context.pduSession[i].status >= PDU_SESSION_STATUS_DONE) {
+ if (!ue_p->DRB_configList)
+ ue_p->DRB_configList = CALLOC(1, sizeof(*ue_p->DRB_configList));
+ else
+ memset(ue_p->DRB_configList, 0, sizeof(*ue_p->DRB_configList));
+ if (!ue_p->DRB_configList2[xid])
+ ue_p->DRB_configList2[xid] = CALLOC(1, sizeof(**ue_p->DRB_configList2));
+ else
+ memset(ue_p->DRB_configList2[xid], 0, sizeof(**ue_p->DRB_configList2));
+ for (i = 0; i < ue_p->nb_of_pdusessions; i++) {
+ if (ue_p->pduSession[i].status >= PDU_SESSION_STATUS_DONE) {
continue;
}
- ue_context_pP->ue_context.pduSession[i].xid = xid;
-
+ LOG_I(NR_RRC, "adding rnti %x pdusession %d, nb drb %d, xid %d\n", ue_p->rnti, ue_p->pduSession[i].param.pdusession_id, nb_drb_to_setup, xid);
for(long drb_id_add = 1; drb_id_add <= nb_drb_to_setup; drb_id_add++){
uint8_t drb_id;
-
// Reference TS23501 Table 5.7.4-1: Standardized 5QI to QoS characteristics mapping
- for (qos_flow_index = 0; qos_flow_index < ue_context_pP->ue_context.pduSession[i].param.nb_qos; qos_flow_index++) {
- switch (ue_context_pP->ue_context.pduSession[i].param.qos[qos_flow_index].fiveQI) {
+ for (qos_flow_index = 0; qos_flow_index < ue_p->pduSession[i].param.nb_qos; qos_flow_index++) {
+ switch (ue_p->pduSession[i].param.qos[qos_flow_index].fiveQI) {
case 1 ... 4: /* GBR */
- drb_id = next_available_drb(ue_p, &ue_context_pP->ue_context.pduSession[i], GBR_FLOW);
+ drb_id = next_available_drb(ue_p, &ue_p->pduSession[i], GBR_FLOW);
break;
case 5 ... 9: /* Non-GBR */
if(rrc->configuration.drbs > 1) /* Force the creation from gNB Conf file - Should be used only in noS1 mode and rfsim for testing purposes. */
- drb_id = next_available_drb(ue_p, &ue_context_pP->ue_context.pduSession[i], GBR_FLOW);
+ drb_id = next_available_drb(ue_p, &ue_p->pduSession[i], GBR_FLOW);
else
- drb_id = next_available_drb(ue_p, &ue_context_pP->ue_context.pduSession[i], NONGBR_FLOW);
+ drb_id = next_available_drb(ue_p, &ue_p->pduSession[i], NONGBR_FLOW);
break;
default:
- LOG_E(NR_RRC,"not supported 5qi %lu\n", ue_context_pP->ue_context.pduSession[i].param.qos[qos_flow_index].fiveQI);
- ue_context_pP->ue_context.pduSession[i].status = PDU_SESSION_STATUS_FAILED;
- pdu_sessions_done++;
+ LOG_E(NR_RRC, "not supported 5qi %lu\n", ue_p->pduSession[i].param.qos[qos_flow_index].fiveQI);
+ ue_p->pduSession[i].status = PDU_SESSION_STATUS_FAILED;
continue;
}
-
- switch(ue_context_pP->ue_context.pduSession[i].param.qos[qos_flow_index].allocation_retention_priority.priority_level) {
- case NGAP_PRIORITY_LEVEL_HIGHEST:
- drb_priority[drb_id-1] = 1;
- break;
- case NGAP_PRIORITY_LEVEL_2:
- drb_priority[drb_id-1] = 2;
- break;
- case NGAP_PRIORITY_LEVEL_3:
- drb_priority[drb_id-1] = 3;
- break;
- case NGAP_PRIORITY_LEVEL_4:
- drb_priority[drb_id-1] = 4;
- break;
- case NGAP_PRIORITY_LEVEL_5:
- drb_priority[drb_id-1] = 5;
- break;
- case NGAP_PRIORITY_LEVEL_6:
- drb_priority[drb_id-1] = 6;
- break;
- case NGAP_PRIORITY_LEVEL_7:
- drb_priority[drb_id-1] = 7;
- break;
- case NGAP_PRIORITY_LEVEL_8:
- drb_priority[drb_id-1] = 8;
- break;
- case NGAP_PRIORITY_LEVEL_9:
- drb_priority[drb_id-1] = 9;
- break;
- case NGAP_PRIORITY_LEVEL_10:
- drb_priority[drb_id-1] = 10;
- break;
- case NGAP_PRIORITY_LEVEL_11:
- drb_priority[drb_id-1] = 11;
- break;
- case NGAP_PRIORITY_LEVEL_12:
- drb_priority[drb_id-1] = 12;
- break;
- case NGAP_PRIORITY_LEVEL_13:
- drb_priority[drb_id-1] = 13;
- break;
- case NGAP_PRIORITY_LEVEL_LOWEST:
- drb_priority[drb_id-1] = 14;
- break;
- case NGAP_PRIORITY_LEVEL_NO_PRIORITY:
- drb_priority[drb_id-1] = 15;
- break;
-
- default:
- LOG_E(NR_RRC,"Not supported priority level\n");
- break;
+ drb_priority[drb_id - 1] = ue_p->pduSession[i].param.qos[qos_flow_index].allocation_retention_priority.priority_level;
+ if (drb_priority[drb_id - 1] < 0 || drb_priority[drb_id - 1] > NGAP_PRIORITY_LEVEL_NO_PRIORITY) {
+ LOG_E(NR_RRC, "invalid allocation_retention_priority.priority_level %ld set to _NO_PRIORITY\n", drb_priority[drb_id - 1]);
+ drb_priority[drb_id - 1] = NGAP_PRIORITY_LEVEL_NO_PRIORITY;
}
if(drb_is_active(ue_p, drb_id)){ /* Non-GBR flow using the same DRB or a GBR flow with no available DRBs*/
nb_drb_to_setup--;
} else {
- NR_DRB_ToAddMod_t *DRB_config = generateDRB(ue_p,
- drb_id,
- &ue_context_pP->ue_context.pduSession[i],
- rrc->configuration.enable_sdap,
- rrc->security.do_drb_integrity,
- rrc->security.do_drb_ciphering);
- if (drb_id_to_setup_start == 0) drb_id_to_setup_start = DRB_config->drb_Identity;
- asn1cSeqAdd(&(*DRB_configList)->list, DRB_config);
- asn1cSeqAdd(&(*DRB_configList2)->list, DRB_config);
+ NR_DRB_ToAddMod_t *DRB_config = generateDRB(ue_p, drb_id, &ue_p->pduSession[i], rrc->configuration.enable_sdap, rrc->security.do_drb_integrity, rrc->security.do_drb_ciphering);
+ if (drb_id_to_setup_start == 0)
+ drb_id_to_setup_start = DRB_config->drb_Identity;
+ asn1cSeqAdd(&ue_p->DRB_configList->list, DRB_config);
+ asn1cSeqAdd(&ue_p->DRB_configList2[xid]->list, DRB_config);
}
LOG_D(RRC, "DRB Priority %ld\n", drb_priority[drb_id]); // To supress warning for now
}
}
- ue_context_pP->ue_context.pduSession[i].status = PDU_SESSION_STATUS_DONE;
- ue_context_pP->ue_context.pduSession[i].xid = xid;
+ ue_p->pduSession[i].status = PDU_SESSION_STATUS_DONE;
+ ue_p->pduSession[i].xid = xid;
}
}
@@ -780,7 +672,8 @@ rrc_gNB_generate_dedicatedRRCReconfiguration(
int xid = -1;
int drb_id_to_setup_start = 1;
- NR_DRB_ToAddModList_t *DRB_configList = ue_context_pP->ue_context.DRB_configList;
+ gNB_RRC_UE_t *ue_p = &ue_context_pP->ue_context;
+ NR_DRB_ToAddModList_t *DRB_configList = ue_p->DRB_configList;
int nb_drb_to_setup = DRB_configList->list.count;
struct NR_RRCReconfiguration_v1530_IEs__dedicatedNAS_MessageList *dedicatedNAS_MessageList = NULL;
@@ -791,21 +684,21 @@ rrc_gNB_generate_dedicatedRRCReconfiguration(
NR_DRB_ToAddMod_t *DRB_config = DRB_configList->list.array[i];
if (drb_id_to_setup_start == 1)
drb_id_to_setup_start = DRB_config->drb_Identity;
- int j = ue_context_pP->ue_context.nb_of_pdusessions - 1;
+ int j = ue_p->nb_of_pdusessions - 1;
AssertFatal(j >= 0, "");
- if (ue_context_pP->ue_context.pduSession[j].param.nas_pdu.buffer != NULL) {
+ if (ue_p->pduSession[j].param.nas_pdu.buffer != NULL) {
dedicatedNAS_Message = CALLOC(1, sizeof(NR_DedicatedNAS_Message_t));
memset(dedicatedNAS_Message, 0, sizeof(OCTET_STRING_t));
- OCTET_STRING_fromBuf(dedicatedNAS_Message, (char *)ue_context_pP->ue_context.pduSession[j].param.nas_pdu.buffer, ue_context_pP->ue_context.pduSession[j].param.nas_pdu.length);
+ OCTET_STRING_fromBuf(dedicatedNAS_Message, (char *)ue_p->pduSession[j].param.nas_pdu.buffer, ue_p->pduSession[j].param.nas_pdu.length);
asn1cSeqAdd(&dedicatedNAS_MessageList->list, dedicatedNAS_Message);
- LOG_I(NR_RRC, "add NAS info with size %d (pdusession idx %d)\n", ue_context_pP->ue_context.pduSession[j].param.nas_pdu.length, j);
+ LOG_I(NR_RRC, "add NAS info with size %d (pdusession idx %d)\n", ue_p->pduSession[j].param.nas_pdu.length, j);
} else {
// TODO
LOG_E(NR_RRC, "no NAS info (pdusession idx %d)\n", j);
}
- xid = ue_context_pP->ue_context.pduSession[j].xid;
+ xid = ue_p->pduSession[j].xid;
}
/* If list is empty free the list and reset the address */
@@ -818,7 +711,7 @@ rrc_gNB_generate_dedicatedRRCReconfiguration(
cellGroupConfig = calloc(1, sizeof(NR_CellGroupConfig_t));
// FIXME: fill_mastercellGroupConfig() won't fill the right priorities or
// bearer IDs for the DRBs
- fill_mastercellGroupConfig(cellGroupConfig, ue_context_pP->ue_context.masterCellGroup, rrc->um_on_default_drb, (drb_id_to_setup_start < 2) ? 1 : 0, drb_id_to_setup_start, nb_drb_to_setup, drb_priority);
+ fill_mastercellGroupConfig(cellGroupConfig, ue_p->masterCellGroup, rrc->um_on_default_drb, (drb_id_to_setup_start < 2) ? 1 : 0, drb_id_to_setup_start, nb_drb_to_setup, drb_priority);
}
else{
LOG_I(NR_RRC, "Master cell group originating from the DU \n");
@@ -827,7 +720,7 @@ rrc_gNB_generate_dedicatedRRCReconfiguration(
AssertFatal(xid > -1, "Invalid xid %d. No PDU sessions setup to configure.\n", xid);
NR_SRB_ToAddModList_t *SRB_configList2 = NULL;
- SRB_configList2 = ue_context_pP->ue_context.SRB_configList2[xid];
+ SRB_configList2 = ue_p->SRB_configList2[xid];
uint8_t buffer[RRC_BUF_SIZE] = {0};
int size = do_RRCReconfiguration(ctxt_pP,
@@ -849,20 +742,24 @@ rrc_gNB_generate_dedicatedRRCReconfiguration(
LOG_DUMPMSG(NR_RRC,DEBUG_RRC,(char *)buffer,size,"[MSG] RRC Reconfiguration\n");
/* Free all NAS PDUs */
- for (int i = 0; i < ue_context_pP->ue_context.nb_of_pdusessions; i++) {
- if (ue_context_pP->ue_context.pduSession[i].param.nas_pdu.buffer != NULL) {
+ for (int i = 0; i < ue_p->nb_of_pdusessions; i++) {
+ if (ue_p->pduSession[i].param.nas_pdu.buffer != NULL) {
/* Free the NAS PDU buffer and invalidate it */
- free(ue_context_pP->ue_context.pduSession[i].param.nas_pdu.buffer);
- ue_context_pP->ue_context.pduSession[i].param.nas_pdu.buffer = NULL;
+ free(ue_p->pduSession[i].param.nas_pdu.buffer);
+ ue_p->pduSession[i].param.nas_pdu.buffer = NULL;
}
}
- LOG_I(NR_RRC,
- "[gNB %d] Frame %d, Logical Channel DL-DCCH, Generate RRCReconfiguration (bytes %d, UE RNTI %x)\n",
- ctxt_pP->module_id, ctxt_pP->frame, size, ue_context_pP->ue_context.rnti);
+ LOG_I(NR_RRC, "[gNB %d] Frame %d, Logical Channel DL-DCCH, Generate RRCReconfiguration (bytes %d, UE RNTI %x)\n", ctxt_pP->module_id, ctxt_pP->frame, size, ue_p->rnti);
LOG_D(NR_RRC,
"[FRAME %05d][RRC_gNB][MOD %u][][--- PDCP_DATA_REQ/%d Bytes (rrcReconfiguration to UE %x MUI %d) --->][PDCP][MOD %u][RB %u]\n",
- ctxt_pP->frame, ctxt_pP->module_id, size, ue_context_pP->ue_context.rnti, rrc_gNB_mui, ctxt_pP->module_id, DCCH);
+ ctxt_pP->frame,
+ ctxt_pP->module_id,
+ size,
+ ue_p->rnti,
+ rrc_gNB_mui,
+ ctxt_pP->module_id,
+ DCCH);
nr_rrc_data_req(
ctxt_pP,
@@ -876,16 +773,12 @@ rrc_gNB_generate_dedicatedRRCReconfiguration(
if (NODE_IS_DU(rrc->node_type) || NODE_IS_MONOLITHIC(rrc->node_type)) {
nr_mac_update_cellgroup(RC.nrmac[rrc->module_id], ue_context_pP->ue_context.rnti, ue_context_pP->ue_context.masterCellGroup);
- uint32_t delay_ms = ue_context_pP->ue_context.masterCellGroup &&
- ue_context_pP->ue_context.masterCellGroup->spCellConfig &&
- ue_context_pP->ue_context.masterCellGroup->spCellConfig->spCellConfigDedicated &&
- ue_context_pP->ue_context.masterCellGroup->spCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList ?
- NR_RRC_RECONFIGURATION_DELAY_MS + NR_RRC_BWP_SWITCHING_DELAY_MS : NR_RRC_RECONFIGURATION_DELAY_MS;
+ uint32_t delay_ms = ue_p->masterCellGroup && ue_p->masterCellGroup->spCellConfig && ue_p->masterCellGroup->spCellConfig->spCellConfigDedicated
+ && ue_p->masterCellGroup->spCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList
+ ? NR_RRC_RECONFIGURATION_DELAY_MS + NR_RRC_BWP_SWITCHING_DELAY_MS
+ : NR_RRC_RECONFIGURATION_DELAY_MS;
- nr_mac_enable_ue_rrc_processing_timer(ctxt_pP->module_id,
- ue_context_pP->ue_context.rnti,
- *rrc->carrier.servingcellconfigcommon->ssbSubcarrierSpacing,
- delay_ms);
+ nr_mac_enable_ue_rrc_processing_timer(ctxt_pP->module_id, ue_p->rnti, *rrc->carrier.servingcellconfigcommon->ssbSubcarrierSpacing, delay_ms);
}
}
@@ -906,48 +799,48 @@ rrc_gNB_modify_dedicatedRRCReconfiguration(
int i, j;
uint8_t xid = rrc_gNB_get_next_transaction_identifier(ctxt_pP->module_id);
- DRB_configList = &ue_context_pP->ue_context.DRB_configList;
+ gNB_RRC_UE_t *ue_p = &ue_context_pP->ue_context;
+ DRB_configList = &ue_p->DRB_configList;
DRB_configList2 = CALLOC(1, sizeof(NR_DRB_ToAddModList_t));
memset(DRB_configList2, 0, sizeof(NR_DRB_ToAddModList_t));
dedicatedNAS_MessageList = CALLOC(1, sizeof(struct NR_RRCReconfiguration_v1530_IEs__dedicatedNAS_MessageList));
- for (i = 0; i < ue_context_pP->ue_context.nb_of_modify_pdusessions; i++) {
+ for (i = 0; i < ue_p->nb_of_modify_pdusessions; i++) {
// bypass the new and already configured pdu sessions
- if (ue_context_pP->ue_context.modify_pdusession[i].status >= PDU_SESSION_STATUS_DONE) {
- ue_context_pP->ue_context.modify_pdusession[i].xid = xid;
+ if (ue_p->modify_pdusession[i].status >= PDU_SESSION_STATUS_DONE) {
+ ue_p->modify_pdusession[i].xid = xid;
continue;
}
- if (ue_context_pP->ue_context.modify_pdusession[i].cause != NGAP_CAUSE_NOTHING) {
+ if (ue_p->modify_pdusession[i].cause != NGAP_CAUSE_NOTHING) {
// set xid of failure pdu session
- ue_context_pP->ue_context.modify_pdusession[i].xid = xid;
- ue_context_pP->ue_context.modify_pdusession[i].status = PDU_SESSION_STATUS_FAILED;
+ ue_p->modify_pdusession[i].xid = xid;
+ ue_p->modify_pdusession[i].status = PDU_SESSION_STATUS_FAILED;
continue;
}
// search exist DRB_config
for (j = 0; j < (*DRB_configList)->list.count; j++) {
- if ((*DRB_configList)->list.array[j]->cnAssociation->choice.sdap_Config->pdu_Session ==
- ue_context_pP->ue_context.modify_pdusession[i].param.pdusession_id) {
+ if ((*DRB_configList)->list.array[j]->cnAssociation->choice.sdap_Config->pdu_Session == ue_p->modify_pdusession[i].param.pdusession_id) {
DRB_config = (*DRB_configList)->list.array[j];
break;
}
}
if (DRB_config == NULL) {
- ue_context_pP->ue_context.modify_pdusession[i].xid = xid;
- ue_context_pP->ue_context.modify_pdusession[i].status = PDU_SESSION_STATUS_FAILED;
- ue_context_pP->ue_context.modify_pdusession[i].cause = NGAP_CAUSE_RADIO_NETWORK;
- ue_context_pP->ue_context.modify_pdusession[i].cause_value = NGAP_CauseRadioNetwork_unspecified;
- ue_context_pP->ue_context.nb_of_failed_pdusessions++;
+ ue_p->modify_pdusession[i].xid = xid;
+ ue_p->modify_pdusession[i].status = PDU_SESSION_STATUS_FAILED;
+ ue_p->modify_pdusession[i].cause = NGAP_CAUSE_RADIO_NETWORK;
+ ue_p->modify_pdusession[i].cause_value = NGAP_CauseRadioNetwork_unspecified;
+ ue_p->nb_of_failed_pdusessions++;
continue;
}
// Reference TS23501 Table 5.7.4-1: Standardized 5QI to QoS characteristics mapping
- for (qos_flow_index = 0; qos_flow_index < ue_context_pP->ue_context.modify_pdusession[i].param.nb_qos; qos_flow_index++) {
- switch (ue_context_pP->ue_context.modify_pdusession[i].param.qos[qos_flow_index].fiveQI) {
+ for (qos_flow_index = 0; qos_flow_index < ue_p->modify_pdusession[i].param.nb_qos; qos_flow_index++) {
+ switch (ue_p->modify_pdusession[i].param.qos[qos_flow_index].fiveQI) {
case 1: //100ms
case 2: //150ms
case 3: //50ms
@@ -961,41 +854,39 @@ rrc_gNB_modify_dedicatedRRCReconfiguration(
break;
default:
- LOG_E(NR_RRC,"not supported 5qi %lu\n", ue_context_pP->ue_context.modify_pdusession[i].param.qos[qos_flow_index].fiveQI);
- ue_context_pP->ue_context.modify_pdusession[i].status = PDU_SESSION_STATUS_FAILED;
- ue_context_pP->ue_context.modify_pdusession[i].xid = xid;
- ue_context_pP->ue_context.modify_pdusession[i].cause = NGAP_CAUSE_RADIO_NETWORK;
- ue_context_pP->ue_context.modify_pdusession[i].cause_value = NGAP_CauseRadioNetwork_not_supported_5QI_value;
- ue_context_pP->ue_context.nb_of_failed_pdusessions++;
+ LOG_E(NR_RRC, "not supported 5qi %lu\n", ue_p->modify_pdusession[i].param.qos[qos_flow_index].fiveQI);
+ ue_p->modify_pdusession[i].status = PDU_SESSION_STATUS_FAILED;
+ ue_p->modify_pdusession[i].xid = xid;
+ ue_p->modify_pdusession[i].cause = NGAP_CAUSE_RADIO_NETWORK;
+ ue_p->modify_pdusession[i].cause_value = NGAP_CauseRadioNetwork_not_supported_5QI_value;
+ ue_p->nb_of_failed_pdusessions++;
continue;
}
- LOG_I(NR_RRC, "PDU SESSION ID %ld, DRB ID %ld (index %d), QOS flow %d, 5QI %ld \n",
- DRB_config->cnAssociation->choice.sdap_Config->pdu_Session,
- DRB_config->drb_Identity, i,
- qos_flow_index,
- ue_context_pP->ue_context.modify_pdusession[i].param.qos[qos_flow_index].fiveQI
- );
+ LOG_I(NR_RRC,
+ "PDU SESSION ID %ld, DRB ID %ld (index %d), QOS flow %d, 5QI %ld \n",
+ DRB_config->cnAssociation->choice.sdap_Config->pdu_Session,
+ DRB_config->drb_Identity,
+ i,
+ qos_flow_index,
+ ue_p->modify_pdusession[i].param.qos[qos_flow_index].fiveQI);
}
asn1cSeqAdd(&DRB_configList2->list, DRB_config);
- ue_context_pP->ue_context.modify_pdusession[i].status = PDU_SESSION_STATUS_DONE;
- ue_context_pP->ue_context.modify_pdusession[i].xid = xid;
+ ue_p->modify_pdusession[i].status = PDU_SESSION_STATUS_DONE;
+ ue_p->modify_pdusession[i].xid = xid;
- if (ue_context_pP->ue_context.modify_pdusession[i].param.nas_pdu.buffer != NULL) {
+ if (ue_p->modify_pdusession[i].param.nas_pdu.buffer != NULL) {
dedicatedNAS_Message = CALLOC(1, sizeof(NR_DedicatedNAS_Message_t));
memset(dedicatedNAS_Message, 0, sizeof(OCTET_STRING_t));
- OCTET_STRING_fromBuf(dedicatedNAS_Message,
- (char *)ue_context_pP->ue_context.modify_pdusession[i].param.nas_pdu.buffer,
- ue_context_pP->ue_context.modify_pdusession[i].param.nas_pdu.length);
+ OCTET_STRING_fromBuf(dedicatedNAS_Message, (char *)ue_p->modify_pdusession[i].param.nas_pdu.buffer, ue_p->modify_pdusession[i].param.nas_pdu.length);
asn1cSeqAdd(&dedicatedNAS_MessageList->list, dedicatedNAS_Message);
- LOG_I(NR_RRC,"add NAS info with size %d (pdusession id %d)\n",ue_context_pP->ue_context.pduSession[i].param.nas_pdu.length,
- ue_context_pP->ue_context.modify_pdusession[i].param.pdusession_id);
+ LOG_I(NR_RRC, "add NAS info with size %d (pdusession id %d)\n", ue_p->pduSession[i].param.nas_pdu.length, ue_p->modify_pdusession[i].param.pdusession_id);
} else {
// TODO
- LOG_E(NR_RRC,"no NAS info (pdusession id %d)\n", ue_context_pP->ue_context.modify_pdusession[i].param.pdusession_id);
+ LOG_E(NR_RRC, "no NAS info (pdusession id %d)\n", ue_p->modify_pdusession[i].param.pdusession_id);
}
}
@@ -1025,20 +916,24 @@ rrc_gNB_modify_dedicatedRRCReconfiguration(
LOG_DUMPMSG(NR_RRC, DEBUG_RRC, (char *)buffer, size, "[MSG] RRC Reconfiguration\n");
/* Free all NAS PDUs */
- for (i = 0; i < ue_context_pP->ue_context.nb_of_modify_pdusessions; i++) {
- if (ue_context_pP->ue_context.modify_pdusession[i].param.nas_pdu.buffer != NULL) {
+ for (i = 0; i < ue_p->nb_of_modify_pdusessions; i++) {
+ if (ue_p->modify_pdusession[i].param.nas_pdu.buffer != NULL) {
/* Free the NAS PDU buffer and invalidate it */
- free(ue_context_pP->ue_context.modify_pdusession[i].param.nas_pdu.buffer);
- ue_context_pP->ue_context.modify_pdusession[i].param.nas_pdu.buffer = NULL;
+ free(ue_p->modify_pdusession[i].param.nas_pdu.buffer);
+ ue_p->modify_pdusession[i].param.nas_pdu.buffer = NULL;
}
}
- LOG_I(NR_RRC,
- "[gNB %d] Frame %d, Logical Channel DL-DCCH, Generate RRCReconfiguration (bytes %d, UE RNTI %x)\n",
- ctxt_pP->module_id, ctxt_pP->frame, size, ue_context_pP->ue_context.rnti);
+ LOG_I(NR_RRC, "[gNB %d] Frame %d, Logical Channel DL-DCCH, Generate RRCReconfiguration (bytes %d, UE RNTI %x)\n", ctxt_pP->module_id, ctxt_pP->frame, size, ue_p->rnti);
LOG_D(NR_RRC,
"[FRAME %05d][RRC_gNB][MOD %u][][--- PDCP_DATA_REQ/%d Bytes (rrcReconfiguration to UE %x MUI %d) --->][PDCP][MOD %u][RB %u]\n",
- ctxt_pP->frame, ctxt_pP->module_id, size, ue_context_pP->ue_context.rnti, rrc_gNB_mui, ctxt_pP->module_id, DCCH);
+ ctxt_pP->frame,
+ ctxt_pP->module_id,
+ size,
+ ue_p->rnti,
+ rrc_gNB_mui,
+ ctxt_pP->module_id,
+ DCCH);
nr_rrc_data_req(
ctxt_pP,
@@ -1050,16 +945,12 @@ rrc_gNB_modify_dedicatedRRCReconfiguration(
PDCP_TRANSMISSION_MODE_CONTROL);
if (NODE_IS_DU(RC.nrrrc[ctxt_pP->module_id]->node_type) || NODE_IS_MONOLITHIC(RC.nrrrc[ctxt_pP->module_id]->node_type)) {
- uint32_t delay_ms = ue_context_pP->ue_context.masterCellGroup &&
- ue_context_pP->ue_context.masterCellGroup->spCellConfig &&
- ue_context_pP->ue_context.masterCellGroup->spCellConfig->spCellConfigDedicated &&
- ue_context_pP->ue_context.masterCellGroup->spCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList ?
- NR_RRC_RECONFIGURATION_DELAY_MS + NR_RRC_BWP_SWITCHING_DELAY_MS : NR_RRC_RECONFIGURATION_DELAY_MS;
+ uint32_t delay_ms = ue_p->masterCellGroup && ue_p->masterCellGroup->spCellConfig && ue_p->masterCellGroup->spCellConfig->spCellConfigDedicated
+ && ue_p->masterCellGroup->spCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList
+ ? NR_RRC_RECONFIGURATION_DELAY_MS + NR_RRC_BWP_SWITCHING_DELAY_MS
+ : NR_RRC_RECONFIGURATION_DELAY_MS;
- nr_mac_enable_ue_rrc_processing_timer(ctxt_pP->module_id,
- ue_context_pP->ue_context.rnti,
- *RC.nrrrc[ctxt_pP->module_id]->carrier.servingcellconfigcommon->ssbSubcarrierSpacing,
- delay_ms);
+ nr_mac_enable_ue_rrc_processing_timer(ctxt_pP->module_id, ue_p->rnti, *RC.nrrrc[ctxt_pP->module_id]->carrier.servingcellconfigcommon->ssbSubcarrierSpacing, delay_ms);
}
}
@@ -1079,15 +970,16 @@ rrc_gNB_generate_dedicatedRRCReconfiguration_release(
struct NR_RRCReconfiguration_v1530_IEs__dedicatedNAS_MessageList
*dedicatedNAS_MessageList = NULL;
NR_DedicatedNAS_Message_t *dedicatedNAS_Message = NULL;
+ gNB_RRC_UE_t *ue_p = &ue_context_pP->ue_context;
- DRB_Release_configList2 = &ue_context_pP->ue_context.DRB_Release_configList2[xid];
+ DRB_Release_configList2 = &ue_p->DRB_Release_configList2[xid];
if (*DRB_Release_configList2) {
free(*DRB_Release_configList2);
}
*DRB_Release_configList2 = CALLOC(1, sizeof(**DRB_Release_configList2));
for(i = 0; i < NB_RB_MAX; i++) {
- if((ue_context_pP->ue_context.pduSession[i].status == PDU_SESSION_STATUS_TORELEASE) && ue_context_pP->ue_context.pduSession[i].xid == xid) {
+ if ((ue_p->pduSession[i].status == PDU_SESSION_STATUS_TORELEASE) && ue_p->pduSession[i].xid == xid) {
DRB_release = CALLOC(1, sizeof(NR_DRB_Identity_t));
*DRB_release = i+1;
asn1cSeqAdd(&(*DRB_Release_configList2)->list, DRB_release);
@@ -1111,11 +1003,11 @@ rrc_gNB_generate_dedicatedRRCReconfiguration_release(
uint8_t buffer[RRC_BUF_SIZE] = {0};
int size = do_RRCReconfiguration(ctxt_pP, buffer, RRC_BUF_SIZE, xid, NULL, NULL, *DRB_Release_configList2, NULL, NULL, NULL, dedicatedNAS_MessageList, NULL, NULL, NULL, NULL, NULL);
- ue_context_pP->ue_context.pdu_session_release_command_flag = 1;
+ ue_p->pdu_session_release_command_flag = 1;
LOG_DUMPMSG(NR_RRC,DEBUG_RRC,(char *)buffer,size, "[MSG] RRC Reconfiguration\n");
- ue_context_pP->ue_context.pdu_session_release_command_flag = 1;
+ ue_p->pdu_session_release_command_flag = 1;
/* Free all NAS PDUs */
if (nas_length > 0) {
@@ -1123,12 +1015,16 @@ rrc_gNB_generate_dedicatedRRCReconfiguration_release(
free(nas_buffer);
}
- LOG_I(NR_RRC,
- "[gNB %d] Frame %d, Logical Channel DL-DCCH, Generate NR_RRCReconfiguration (bytes %d, UE RNTI %x)\n",
- ctxt_pP->module_id, ctxt_pP->frame, size, ue_context_pP->ue_context.rnti);
+ LOG_I(NR_RRC, "[gNB %d] Frame %d, Logical Channel DL-DCCH, Generate NR_RRCReconfiguration (bytes %d, UE RNTI %x)\n", ctxt_pP->module_id, ctxt_pP->frame, size, ue_p->rnti);
LOG_D(NR_RRC,
"[FRAME %05d][RRC_gNB][MOD %u][][--- PDCP_DATA_REQ/%d Bytes (rrcReconfiguration to UE %x MUI %d) --->][PDCP][MOD %u][RB %u]\n",
- ctxt_pP->frame, ctxt_pP->module_id, size, ue_context_pP->ue_context.rnti, rrc_gNB_mui, ctxt_pP->module_id, DCCH);
+ ctxt_pP->frame,
+ ctxt_pP->module_id,
+ size,
+ ue_p->rnti,
+ rrc_gNB_mui,
+ ctxt_pP->module_id,
+ DCCH);
nr_rrc_data_req(
ctxt_pP,
DCCH,
@@ -1139,16 +1035,12 @@ rrc_gNB_generate_dedicatedRRCReconfiguration_release(
PDCP_TRANSMISSION_MODE_CONTROL);
if (NODE_IS_DU(RC.nrrrc[ctxt_pP->module_id]->node_type) || NODE_IS_MONOLITHIC(RC.nrrrc[ctxt_pP->module_id]->node_type)) {
- uint32_t delay_ms = ue_context_pP->ue_context.masterCellGroup &&
- ue_context_pP->ue_context.masterCellGroup->spCellConfig &&
- ue_context_pP->ue_context.masterCellGroup->spCellConfig->spCellConfigDedicated &&
- ue_context_pP->ue_context.masterCellGroup->spCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList ?
- NR_RRC_RECONFIGURATION_DELAY_MS + NR_RRC_BWP_SWITCHING_DELAY_MS : NR_RRC_RECONFIGURATION_DELAY_MS;
+ uint32_t delay_ms = ue_p->masterCellGroup && ue_p->masterCellGroup->spCellConfig && ue_p->masterCellGroup->spCellConfig->spCellConfigDedicated
+ && ue_p->masterCellGroup->spCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList
+ ? NR_RRC_RECONFIGURATION_DELAY_MS + NR_RRC_BWP_SWITCHING_DELAY_MS
+ : NR_RRC_RECONFIGURATION_DELAY_MS;
- nr_mac_enable_ue_rrc_processing_timer(ctxt_pP->module_id,
- ue_context_pP->ue_context.rnti,
- *RC.nrrrc[ctxt_pP->module_id]->carrier.servingcellconfigcommon->ssbSubcarrierSpacing,
- delay_ms);
+ nr_mac_enable_ue_rrc_processing_timer(ctxt_pP->module_id, ue_p->rnti, *RC.nrrrc[ctxt_pP->module_id]->carrier.servingcellconfigcommon->ssbSubcarrierSpacing, delay_ms);
}
}
@@ -1156,45 +1048,33 @@ rrc_gNB_generate_dedicatedRRCReconfiguration_release(
/*
* Process the RRC Reconfiguration Complete from the UE
*/
-void
-rrc_gNB_process_RRCReconfigurationComplete(
- const protocol_ctxt_t *const ctxt_pP,
- rrc_gNB_ue_context_t *ue_context_pP,
- const uint8_t xid
-)
+static void rrc_gNB_process_RRCReconfigurationComplete(const protocol_ctxt_t *const ctxt_pP, rrc_gNB_ue_context_t *ue_context_pP, const uint8_t xid)
{
int drb_id;
uint8_t *kRRCenc = NULL;
uint8_t *kRRCint = NULL;
uint8_t *kUPenc = NULL;
uint8_t *kUPint = NULL;
- NR_DRB_ToAddModList_t *DRB_configList = ue_context_pP->ue_context.DRB_configList2[xid];
- NR_SRB_ToAddModList_t *SRB_configList = ue_context_pP->ue_context.SRB_configList2[xid];
- NR_DRB_ToReleaseList_t *DRB_Release_configList2 = ue_context_pP->ue_context.DRB_Release_configList2[xid];
+ gNB_RRC_UE_t *ue_p = &ue_context_pP->ue_context;
+ NR_DRB_ToAddModList_t *DRB_configList = ue_p->DRB_configList2[xid];
+ NR_SRB_ToAddModList_t *SRB_configList = ue_p->SRB_configList2[xid];
+ NR_DRB_ToReleaseList_t *DRB_Release_configList2 = ue_p->DRB_Release_configList2[xid];
NR_DRB_Identity_t *drb_id_p = NULL;
// uint8_t nr_DRB2LCHAN[8];
- ue_context_pP->ue_context.ue_reestablishment_timer = 0;
+ ue_p->ue_reestablishment_timer = 0;
/* Derive the keys from kgnb */
if (DRB_configList != NULL) {
- nr_derive_key_up_enc(ue_context_pP->ue_context.ciphering_algorithm,
- ue_context_pP->ue_context.kgnb,
- &kUPenc);
- nr_derive_key_up_int(ue_context_pP->ue_context.integrity_algorithm,
- ue_context_pP->ue_context.kgnb,
- &kUPint);
+ nr_derive_key_up_enc(ue_p->ciphering_algorithm, ue_p->kgnb, &kUPenc);
+ nr_derive_key_up_int(ue_p->integrity_algorithm, ue_p->kgnb, &kUPint);
}
- nr_derive_key_rrc_enc(ue_context_pP->ue_context.ciphering_algorithm,
- ue_context_pP->ue_context.kgnb,
- &kRRCenc);
- nr_derive_key_rrc_int(ue_context_pP->ue_context.integrity_algorithm,
- ue_context_pP->ue_context.kgnb,
- &kRRCint);
+ nr_derive_key_rrc_enc(ue_p->ciphering_algorithm, ue_p->kgnb, &kRRCenc);
+ nr_derive_key_rrc_int(ue_p->integrity_algorithm, ue_p->kgnb, &kRRCint);
/* Refresh SRBs/DRBs */
- LOG_D(NR_RRC, "Configuring PDCP DRBs/SRBs for UE %04x\n", ue_context_pP->ue_context.rnti);
+ LOG_D(NR_RRC, "Configuring PDCP DRBs/SRBs for UE %04x\n", ue_p->rnti);
ue_id_t reestablish_ue_id = 0;
if (DRB_configList && DRB_configList->list.array[0]->reestablishPDCP && *DRB_configList->list.array[0]->reestablishPDCP == NR_DRB_ToAddMod__reestablishPDCP_true) {
@@ -1212,51 +1092,44 @@ rrc_gNB_process_RRCReconfigurationComplete(
}
}
- nr_pdcp_add_srbs(ctxt_pP->enb_flag, ctxt_pP->rntiMaybeUEid, SRB_configList, (ue_context_pP->ue_context.integrity_algorithm << 4) | ue_context_pP->ue_context.ciphering_algorithm, kRRCenc, kRRCint);
+ nr_pdcp_add_srbs(ctxt_pP->enb_flag, ctxt_pP->rntiMaybeUEid, SRB_configList, (ue_p->integrity_algorithm << 4) | ue_p->ciphering_algorithm, kRRCenc, kRRCint);
nr_pdcp_add_drbs(ctxt_pP->enb_flag,
ctxt_pP->rntiMaybeUEid,
reestablish_ue_id,
DRB_configList,
- (ue_context_pP->ue_context.integrity_algorithm << 4) | ue_context_pP->ue_context.ciphering_algorithm,
+ (ue_p->integrity_algorithm << 4) | ue_p->ciphering_algorithm,
kUPenc,
kUPint,
- get_softmodem_params()->sa ? ue_context_pP->ue_context.masterCellGroup->rlc_BearerToAddModList : NULL);
+ get_softmodem_params()->sa ? ue_p->masterCellGroup->rlc_BearerToAddModList : NULL);
/* Refresh SRBs/DRBs */
if (!NODE_IS_CU(RC.nrrrc[ctxt_pP->module_id]->node_type)) {
- LOG_D(NR_RRC,"Configuring RLC DRBs/SRBs for UE %04x\n",ue_context_pP->ue_context.rnti);
+ LOG_D(NR_RRC, "Configuring RLC DRBs/SRBs for UE %04x\n", ue_p->rnti);
nr_rrc_rlc_config_asn1_req(ctxt_pP,
SRB_configList, // NULL,
DRB_configList,
DRB_Release_configList2,
- get_softmodem_params()->sa ? ue_context_pP->ue_context.masterCellGroup->rlc_BearerToAddModList : NULL);
+ get_softmodem_params()->sa ? ue_p->masterCellGroup->rlc_BearerToAddModList : NULL);
}
/* Set the SRB active in UE context */
if (SRB_configList != NULL) {
for (int i = 0; (i < SRB_configList->list.count) && (i < 3); i++) {
if (SRB_configList->list.array[i]->srb_Identity == 1) {
- ue_context_pP->ue_context.Srb1.Active = 1;
- ue_context_pP->ue_context.Srb1.Srb_info.Srb_id = 1;
+ ue_p->Srb[1].Active = 1;
+ ue_p->Srb[1].Srb_info.Srb_id = 1;
} else if (SRB_configList->list.array[i]->srb_Identity == 2) {
- ue_context_pP->ue_context.Srb2.Active = 1;
- ue_context_pP->ue_context.Srb2.Srb_info.Srb_id = 2;
- LOG_I(NR_RRC,"[gNB %d] Frame %d CC %d: SRB2 is now active\n",
- ctxt_pP->module_id,
- ctxt_pP->frame,
- ue_context_pP->ue_context.primaryCC_id);
+ ue_p->Srb[2].Active = 1;
+ ue_p->Srb[2].Srb_info.Srb_id = 2;
+ LOG_I(NR_RRC, "[gNB %d] Frame %d CC %d : SRB2 is now active\n", ctxt_pP->module_id, ctxt_pP->frame, ue_p->primaryCC_id);
} else {
- LOG_W(NR_RRC,"[gNB %d] Frame %d CC %d: invalid SRB identity %ld\n",
- ctxt_pP->module_id,
- ctxt_pP->frame,
- ue_context_pP->ue_context.primaryCC_id,
- SRB_configList->list.array[i]->srb_Identity);
+ LOG_W(NR_RRC, "[gNB %d] Frame %d CC %d: invalid SRB identity %ld\n", ctxt_pP->module_id, ctxt_pP->frame, ue_p->primaryCC_id, SRB_configList->list.array[i]->srb_Identity);
}
}
free(SRB_configList);
- ue_context_pP->ue_context.SRB_configList2[xid] = NULL;
+ ue_p->SRB_configList2[xid] = NULL;
}
/* Loop through DRBs and establish if necessary */
@@ -1272,8 +1145,8 @@ rrc_gNB_process_RRCReconfigurationComplete(
(int)DRB_configList->list.array[i]->drb_Identity);
//(int)*DRB_configList->list.array[i]->pdcp_Config->moreThanOneRLC->primaryPath.logicalChannel);
- if (ue_context_pP->ue_context.DRB_active[drb_id - 1] == 0) {
- ue_context_pP->ue_context.DRB_active[drb_id - 1] = DRB_ACTIVE;
+ if (ue_p->DRB_active[drb_id - 1] == 0) {
+ ue_p->DRB_active[drb_id - 1] = DRB_ACTIVE;
LOG_D(NR_RRC, "[gNB %d] Frame %d: Establish RLC UM Bidirectional, DRB %d Active\n",
ctxt_pP->module_id, ctxt_pP->frame, (int)DRB_configList->list.array[i]->drb_Identity);
@@ -1287,7 +1160,7 @@ rrc_gNB_process_RRCReconfigurationComplete(
// rrc_mac_config_req_eNB
} else { // remove LCHAN from MAC/PHY
- if (ue_context_pP->ue_context.DRB_active[drb_id] == 1) {
+ if (ue_p->DRB_active[drb_id] == 1) {
/* TODO : It may be needed if gNB goes into full stack working. */
// DRB has just been removed so remove RLC + PDCP for DRB
/* rrc_pdcp_config_req (ctxt_pP->module_id, frameP, 1, CONFIG_ACTION_REMOVE,
@@ -1300,18 +1173,18 @@ rrc_gNB_process_RRCReconfigurationComplete(
nr_DRB2LCHAN[i]);*/
}
- //ue_context_pP->ue_context.DRB_active[drb_id] = 0;
+ // ue_p->DRB_active[drb_id] = 0;
LOG_D(NR_RRC, PROTOCOL_NR_RRC_CTXT_UE_FMT" RRC_eNB --- MAC_CONFIG_REQ (DRB) ---> MAC_eNB\n",
PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP));
// rrc_mac_config_req_eNB
- } // end else of if (ue_context_pP->ue_context.DRB_active[drb_id] == 0)
+ } // end else of if (ue_p->DRB_active[drb_id] == 0)
} // end if (DRB_configList->list.array[i])
} // end for (int i = 0; i < DRB_configList->list.count; i++)
free(DRB_configList);
- ue_context_pP->ue_context.DRB_configList2[xid] = NULL;
+ ue_p->DRB_configList2[xid] = NULL;
} // end if DRB_configList != NULL
if(DRB_Release_configList2 != NULL) {
@@ -1320,14 +1193,14 @@ rrc_gNB_process_RRCReconfigurationComplete(
drb_id_p = DRB_Release_configList2->list.array[i];
drb_id = *drb_id_p;
- if (ue_context_pP->ue_context.DRB_active[drb_id] == 1) {
- ue_context_pP->ue_context.DRB_active[drb_id] = 0;
+ if (ue_p->DRB_active[drb_id] == 1) {
+ ue_p->DRB_active[drb_id] = 0;
}
}
}
free(DRB_Release_configList2);
- ue_context_pP->ue_context.DRB_Release_configList2[xid] = NULL;
+ ue_p->DRB_Release_configList2[xid] = NULL;
}
}
@@ -1347,13 +1220,14 @@ void rrc_gNB_generate_RRCReestablishment(const protocol_ctxt_t *ctxt_pP,
module_id_t module_id = ctxt_pP->module_id;
gNB_RRC_INST *rrc = RC.nrrrc[ctxt_pP->module_id];
int enable_ciphering = 0;
+ gNB_RRC_UE_t *ue_p = &ue_context_pP->ue_context;
// Need to drop spCellConfig when there is a RRCReestablishment
// Save spCellConfig in spCellConfigReestablishment to recover after Reestablishment is completed
- ue_context_pP->ue_context.spCellConfigReestablishment = ue_context_pP->ue_context.masterCellGroup->spCellConfig;
- ue_context_pP->ue_context.masterCellGroup->spCellConfig = NULL;
+ ue_p->spCellConfigReestablishment = ue_p->masterCellGroup->spCellConfig;
+ ue_p->masterCellGroup->spCellConfig = NULL;
- SRB_configList = &(ue_context_pP->ue_context.SRB_configList);
+ SRB_configList = &(ue_p->SRB_configList);
uint8_t buffer[RRC_BUF_SIZE] = {0};
int size = do_RRCReestablishment(ctxt_pP,
@@ -1367,7 +1241,7 @@ void rrc_gNB_generate_RRCReestablishment(const protocol_ctxt_t *ctxt_pP,
scc,
&rrc->carrier);
- LOG_I(NR_RRC, PROTOCOL_NR_RRC_CTXT_UE_FMT " [RAPROC] Logical Channel DL-DCCH, Generating NR_RRCReestablishment (bytes %d)\n", PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP), size);
+ LOG_I(NR_RRC, "[RAPROC] UE %04x Logical Channel DL-DCCH, Generating NR_RRCReestablishment (bytes %d)\n", ue_p->rnti, size);
#if (0)
/* TODO : It may be needed if gNB goes into full stack working. */
UE = find_nr_UE(module_id, rnti);
@@ -1377,7 +1251,7 @@ void rrc_gNB_generate_RRCReestablishment(const protocol_ctxt_t *ctxt_pP,
/* Reject UE after 10 frames, NR_RRCReestablishmentReject is triggered */
RC.nrmac[module_id]->UE_info.UE_sched_ctrl[UE_id].ue_reestablishment_reject_timer_thres = 100;
} else {
- LOG_E(NR_RRC, PROTOCOL_NR_RRC_CTXT_UE_FMT " Generating NR_RRCReestablishment without UE_id(MAC) rnti %x\n", PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP), rnti);
+ LOG_E(NR_RRC, " Generating NR_RRCReestablishment without UE_id(MAC) rnti %x\n", rnti);
}
#endif
@@ -1386,11 +1260,11 @@ void rrc_gNB_generate_RRCReestablishment(const protocol_ctxt_t *ctxt_pP,
uint8_t *kUPenc = NULL;
/* Derive the keys from kgnb */
if (SRB_configList != NULL) {
- nr_derive_key_up_enc(ue_context_pP->ue_context.ciphering_algorithm, ue_context_pP->ue_context.kgnb, &kUPenc);
+ nr_derive_key_up_enc(ue_p->ciphering_algorithm, ue_p->kgnb, &kUPenc);
}
- nr_derive_key_rrc_enc(ue_context_pP->ue_context.ciphering_algorithm, ue_context_pP->ue_context.kgnb, &kRRCenc);
- nr_derive_key_rrc_int(ue_context_pP->ue_context.integrity_algorithm, ue_context_pP->ue_context.kgnb, &kRRCint);
+ nr_derive_key_rrc_enc(ue_p->ciphering_algorithm, ue_p->kgnb, &kRRCenc);
+ nr_derive_key_rrc_int(ue_p->integrity_algorithm, ue_p->kgnb, &kRRCint);
/* Configure SRB1 for UE */
if (*SRB_configList != NULL) {
@@ -1403,20 +1277,19 @@ void rrc_gNB_generate_RRCReestablishment(const protocol_ctxt_t *ctxt_pP,
NULL,
NULL);
}
- LOG_D(NR_RRC, PROTOCOL_NR_RRC_CTXT_UE_FMT " RRC_gNB --- MAC_CONFIG_REQ (SRB1) ---> MAC_gNB\n", PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP));
+ LOG_D(NR_RRC, "UE %04x --- MAC_CONFIG_REQ (SRB1) ---> MAC_gNB\n", ue_p->rnti);
}
} // if (*SRB_configList != NULL)
- LOG_I(NR_RRC, "Set PDCP security RNTI %04lx nca %ld nia %d in RRCReestablishment\n", ctxt_pP->rntiMaybeUEid, ue_context_pP->ue_context.ciphering_algorithm, ue_context_pP->ue_context.integrity_algorithm);
- pdcp_config_set_security(
- ctxt_pP,
- NULL, /* pdcp_pP not used anymore in NR */
- DCCH,
- DCCH + 2,
- enable_ciphering ? ue_context_pP->ue_context.ciphering_algorithm | (ue_context_pP->ue_context.integrity_algorithm << 4) : 0 | (ue_context_pP->ue_context.integrity_algorithm << 4),
- kRRCenc,
- kRRCint,
- kUPenc);
+ LOG_I(NR_RRC, "Set PDCP security RNTI %04lx nca %ld nia %d in RRCReestablishment\n", ctxt_pP->rntiMaybeUEid, ue_p->ciphering_algorithm, ue_p->integrity_algorithm);
+ pdcp_config_set_security(ctxt_pP,
+ NULL, /* pdcp_pP not used anymore in NR */
+ DCCH,
+ DCCH + 2,
+ enable_ciphering ? ue_p->ciphering_algorithm | (ue_p->integrity_algorithm << 4) : 0 | (ue_p->integrity_algorithm << 4),
+ kRRCenc,
+ kRRCint,
+ kUPenc);
if (!NODE_IS_CU(rrc->node_type)) {
apply_macrlc_config_reest(rrc, ue_context_pP, ctxt_pP, ctxt_pP->rntiMaybeUEid);
@@ -1429,12 +1302,11 @@ void rrc_gNB_generate_RRCReestablishment(const protocol_ctxt_t *ctxt_pP,
void rrc_gNB_process_RRCReestablishmentComplete(const protocol_ctxt_t *const ctxt_pP, const rnti_t reestablish_rnti, rrc_gNB_ue_context_t *ue_context_pP, const uint8_t xid)
//-----------------------------------------------------------------------------
{
- LOG_I(NR_RRC,
- PROTOCOL_RRC_CTXT_UE_FMT" [RAPROC] Logical Channel UL-DCCH, processing NR_RRCReestablishmentComplete from UE (SRB1 Active)\n",
- PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP));
+ gNB_RRC_UE_t *ue_p = &ue_context_pP->ue_context;
+ LOG_I(NR_RRC, "[RAPROC] UE %04x Logical Channel UL-DCCH, processing NR_RRCReestablishmentComplete from UE (SRB1 Active)\n", ue_p->rnti);
- NR_DRB_ToAddModList_t *DRB_configList = ue_context_pP->ue_context.DRB_configList;
- NR_SRB_ToAddModList_t *SRB_configList = ue_context_pP->ue_context.SRB_configList;
+ NR_DRB_ToAddModList_t *DRB_configList = ue_p->DRB_configList;
+ NR_SRB_ToAddModList_t *SRB_configList = ue_p->SRB_configList;
NR_SRB_ToAddModList_t **SRB_configList2 = NULL;
NR_DRB_ToAddModList_t **DRB_configList2 = NULL;
NR_SRB_ToAddMod_t *SRB2_config = NULL;
@@ -1444,10 +1316,10 @@ void rrc_gNB_process_RRCReestablishmentComplete(const protocol_ctxt_t *const ctx
uint8_t new_xid = rrc_gNB_get_next_transaction_identifier(ctxt_pP->module_id);
int ret = 0;
- ue_context_pP->ue_context.StatusRrc = NR_RRC_CONNECTED;
- ue_context_pP->ue_context.ue_rrc_inactivity_timer = 1; // set rrc inactivity when UE goes into RRC_CONNECTED
- ue_context_pP->ue_context.reestablishment_xid = new_xid;
- SRB_configList2 = &ue_context_pP->ue_context.SRB_configList2[xid];
+ ue_p->StatusRrc = NR_RRC_CONNECTED;
+ ue_p->ue_rrc_inactivity_timer = 1; // set rrc inactivity when UE goes into RRC_CONNECTED
+ ue_p->reestablishment_xid = new_xid;
+ SRB_configList2 = &ue_p->SRB_configList2[xid];
// get old configuration of SRB2
if (*SRB_configList2 != NULL) {
@@ -1458,7 +1330,7 @@ void rrc_gNB_process_RRCReestablishmentComplete(const protocol_ctxt_t *const ctx
for (i = 0; (i < (*SRB_configList2)->list.count) && (i < 3); i++) {
if ((*SRB_configList2)->list.array[i]->srb_Identity == 2 ) {
- LOG_D(NR_RRC, "get SRB2_config from (ue_context_pP->ue_context.SRB_configList2[%d])\n", xid);
+ LOG_D(NR_RRC, "get SRB2_config from (ue_p->SRB_configList2[%d])\n", xid);
SRB2_config = (*SRB_configList2)->list.array[i];
SRB2_config->reestablishPDCP = CALLOC(1, sizeof(*SRB2_config->reestablishPDCP));
*SRB2_config->reestablishPDCP = NR_SRB_ToAddMod__reestablishPDCP_true;
@@ -1470,12 +1342,12 @@ void rrc_gNB_process_RRCReestablishmentComplete(const protocol_ctxt_t *const ctx
// SRB2_config = CALLOC(1, sizeof(*SRB2_config));
// SRB2_config->srb_Identity = 2;
- SRB_configList2 = &(ue_context_pP->ue_context.SRB_configList2[new_xid]);
- DRB_configList2 = &(ue_context_pP->ue_context.DRB_configList2[new_xid]);
+ SRB_configList2 = &(ue_p->SRB_configList2[new_xid]);
+ DRB_configList2 = &(ue_p->DRB_configList2[new_xid]);
if (*SRB_configList2) {
free(*SRB_configList2);
- LOG_D(NR_RRC, "free(ue_context_pP->ue_context.SRB_configList2[%d])\n", new_xid);
+ LOG_D(NR_RRC, "free(ue_p->SRB_configList2[%d])\n", new_xid);
}
*SRB_configList2 = CALLOC(1, sizeof(**SRB_configList2));
@@ -1484,9 +1356,8 @@ void rrc_gNB_process_RRCReestablishmentComplete(const protocol_ctxt_t *const ctx
// Add SRB2 to SRB configuration list
asn1cSeqAdd(&SRB_configList->list, SRB2_config);
asn1cSeqAdd(&(*SRB_configList2)->list, SRB2_config);
- LOG_D(NR_RRC, "Add SRB2_config (srb_Identity:%ld) to ue_context_pP->ue_context.SRB_configList\n",
- SRB2_config->srb_Identity);
- LOG_D(NR_RRC, "Add SRB2_config (srb_Identity:%ld) to ue_context_pP->ue_context.SRB_configList2[%d]\n", SRB2_config->srb_Identity, new_xid);
+ LOG_D(NR_RRC, "Add SRB2_config (srb_Identity:%ld) to ue_p->SRB_configList\n", SRB2_config->srb_Identity);
+ LOG_D(NR_RRC, "Add SRB2_config (srb_Identity:%ld) to ue_p->SRB_configList2[%d]\n", SRB2_config->srb_Identity, new_xid);
} else {
// SRB configuration list only contains SRB1.
LOG_W(NR_RRC,"SRB2 configuration does not exist in SRB configuration list\n");
@@ -1494,13 +1365,13 @@ void rrc_gNB_process_RRCReestablishmentComplete(const protocol_ctxt_t *const ctx
if (*DRB_configList2) {
free(*DRB_configList2);
- LOG_D(NR_RRC, "free(ue_context_pP->ue_context.DRB_configList2[%d])\n", new_xid);
+ LOG_D(NR_RRC, "free(ue_p->DRB_configList2[%d])\n", new_xid);
}
*DRB_configList2 = CALLOC(1, sizeof(**DRB_configList2));
if (DRB_configList != NULL) {
- LOG_D(NR_RRC, "get DRB_config from (ue_context_pP->ue_context.DRB_configList)\n");
+ LOG_D(NR_RRC, "get DRB_config from (ue_p->DRB_configList)\n");
for (i = 0; (i < DRB_configList->list.count) && (i < 3); i++) {
DRB_config = DRB_configList->list.array[i];
@@ -1510,47 +1381,23 @@ void rrc_gNB_process_RRCReestablishmentComplete(const protocol_ctxt_t *const ctx
}
}
- ue_context_pP->ue_context.Srb1.Active = 1;
- //ue_context_pP->ue_context.Srb2.Srb_info.Srb_id = 2;
+ ue_p->Srb[1].Active = 1;
+ // ue_p->Srb[2].Srb_info.Srb_id = 2;
if (get_softmodem_params()->sa) {
- hashtable_rc_t h_rc;
- int j;
- rrc_ue_ngap_ids_t *rrc_ue_ngap_ids_p = NULL;
- uint16_t ue_initial_id = ue_context_pP->ue_context.ue_initial_id;
- uint32_t gNB_ue_ngap_id = ue_context_pP->ue_context.gNB_ue_ngap_id;
- gNB_RRC_INST *rrc_instance_p = RC.nrrrc[GNB_INSTANCE_TO_MODULE_ID(ctxt_pP->instance)];
-
- if (gNB_ue_ngap_id > 0) {
- h_rc = hashtable_get(rrc_instance_p->ngap_id2_ngap_ids, (hash_key_t)gNB_ue_ngap_id, (void **)&rrc_ue_ngap_ids_p);
-
- if (h_rc == HASH_TABLE_OK) {
- rrc_ue_ngap_ids_p->ue_rnti = ctxt_pP->rntiMaybeUEid;
- }
- }
-
- if (ue_initial_id != 0) {
- h_rc = hashtable_get(rrc_instance_p->initial_id2_ngap_ids, (hash_key_t)ue_initial_id, (void **)&rrc_ue_ngap_ids_p);
-
- if (h_rc == HASH_TABLE_OK) {
- rrc_ue_ngap_ids_p->ue_rnti = ctxt_pP->rntiMaybeUEid;
- }
- }
-
+ LOG_W(NR_RRC, "Rework identity mapping need to be done properly!\n");
gtpv1u_gnb_create_tunnel_req_t create_tunnel_req={0};
/* Save e RAB information for later */
-
- for ( j = 0, i = 0; i < NB_RB_MAX; i++) {
- if (ue_context_pP->ue_context.pduSession[i].status == PDU_SESSION_STATUS_ESTABLISHED || ue_context_pP->ue_context.pduSession[i].status == PDU_SESSION_STATUS_DONE) {
- create_tunnel_req.pdusession_id[j] = ue_context_pP->ue_context.pduSession[i].param.pdusession_id;
+ int j;
+ for (j = 0, i = 0; i < NB_RB_MAX; i++) {
+ if (ue_p->pduSession[i].status == PDU_SESSION_STATUS_ESTABLISHED || ue_p->pduSession[i].status == PDU_SESSION_STATUS_DONE) {
+ create_tunnel_req.pdusession_id[j] = ue_p->pduSession[i].param.pdusession_id;
create_tunnel_req.incoming_rb_id[j] = i+1;
- create_tunnel_req.outgoing_teid[j] = ue_context_pP->ue_context.pduSession[i].param.gtp_teid;
+ create_tunnel_req.outgoing_teid[j] = ue_p->pduSession[i].param.gtp_teid;
// to be developped, use the first QFI only
- create_tunnel_req.outgoing_qfi[j] = ue_context_pP->ue_context.pduSession[i].param.qos[0].qfi;
- memcpy(create_tunnel_req.dst_addr[j].buffer,
- ue_context_pP->ue_context.pduSession[i].param.upf_addr.buffer,
- sizeof(uint8_t)*20);
- create_tunnel_req.dst_addr[j].length = ue_context_pP->ue_context.pduSession[i].param.upf_addr.length;
+ create_tunnel_req.outgoing_qfi[j] = ue_p->pduSession[i].param.qos[0].qfi;
+ memcpy(create_tunnel_req.dst_addr[j].buffer, ue_p->pduSession[i].param.upf_addr.buffer, sizeof(uint8_t) * 20);
+ create_tunnel_req.dst_addr[j].length = ue_p->pduSession[i].param.upf_addr.length;
j++;
}
}
@@ -1563,39 +1410,20 @@ void rrc_gNB_process_RRCReestablishmentComplete(const protocol_ctxt_t *const ctx
reestablish_rnti);
if ( ret != 0 ) {
- LOG_E(NR_RRC,"gtpv1u_update_ngu_tunnel failed,start to release UE %x\n",reestablish_rnti);
-
- // update s1u tunnel failed,reset rnti?
- if (gNB_ue_ngap_id > 0) {
- h_rc = hashtable_get(rrc_instance_p->ngap_id2_ngap_ids, (hash_key_t)gNB_ue_ngap_id, (void **)&rrc_ue_ngap_ids_p);
-
- if (h_rc == HASH_TABLE_OK ) {
- rrc_ue_ngap_ids_p->ue_rnti = reestablish_rnti;
- }
- }
-
- if (ue_initial_id != 0) {
- h_rc = hashtable_get(rrc_instance_p->initial_id2_ngap_ids, (hash_key_t)ue_initial_id, (void **)&rrc_ue_ngap_ids_p);
-
- if (h_rc == HASH_TABLE_OK ) {
- rrc_ue_ngap_ids_p->ue_rnti = reestablish_rnti;
- }
- }
-
- ue_context_pP->ue_context.ue_release_timer_s1 = 1;
- ue_context_pP->ue_context.ue_release_timer_thres_s1 = 100;
- ue_context_pP->ue_context.ue_release_timer = 0;
- ue_context_pP->ue_context.ue_reestablishment_timer = 0;
- ue_context_pP->ue_context.ul_failure_timer = 20000; // set ul_failure to 20000 for triggering rrc_eNB_send_S1AP_UE_CONTEXT_RELEASE_REQ
- ue_context_pP->ue_context.ul_failure_timer = 0;
+ LOG_E(NR_RRC, "gtpv1u_update_ngu_tunnel failed,start to release UE %x\n", reestablish_rnti);
+ ue_p->ue_release_timer_s1 = 1;
+ ue_p->ue_release_timer_thres_s1 = 100;
+ ue_p->ue_release_timer = 0;
+ ue_p->ue_reestablishment_timer = 0;
+ ue_p->ul_failure_timer = 20000; // set ul_failure to 20000 for triggering rrc_eNB_send_S1AP_UE_CONTEXT_RELEASE_REQ
+ ue_p->ul_failure_timer = 0;
return;
}
}
/* Update RNTI in ue_context */
- LOG_I(NR_RRC, "Updating UEid from %04x to %lx\n", ue_context_pP->ue_context.rnti, ctxt_pP->rntiMaybeUEid);
- ue_context_pP->ue_id_rnti = ctxt_pP->rntiMaybeUEid; // here ue_id_rnti is just a key, may be something else
- ue_context_pP->ue_context.rnti = ctxt_pP->rntiMaybeUEid;
+ LOG_I(NR_RRC, "Updating UEid from %04x to %lx\n", ue_p->rnti, ctxt_pP->rntiMaybeUEid);
+ rrc_gNB_update_ue_context_rnti(ctxt_pP->rntiMaybeUEid, RC.nrrrc[ctxt_pP->module_id], ue_p->gNB_ue_ngap_id);
if (get_softmodem_params()->sa) {
uint8_t send_security_mode_command = false;
@@ -1607,31 +1435,29 @@ void rrc_gNB_process_RRCReestablishmentComplete(const protocol_ctxt_t *const ctx
}
uint8_t drb_id_to_setup_start = DRB_configList ? DRB_configList->list.array[0]->drb_Identity : 1;
- uint8_t nb_drb_to_setup = DRB_configList ? DRB_configList->list.count : ue_context_pP->ue_context.nb_of_pdusessions;
+ uint8_t nb_drb_to_setup = DRB_configList ? DRB_configList->list.count : ue_p->nb_of_pdusessions;
/* TODO: hardcoded to 13 for the time being, to be changed? */
long drb_priority[NGAP_MAX_DRBS_PER_UE] = {13};
/* Add all NAS PDUs to the list */
- for (i = 0; i < ue_context_pP->ue_context.nb_of_pdusessions; i++) {
-
+ for (i = 0; i < ue_p->nb_of_pdusessions; i++) {
/* TODO parameters yet to process ... */
/* TODO should test if pdu session are Ok before! */
- ue_context_pP->ue_context.pduSession[i].status = PDU_SESSION_STATUS_DONE;
- ue_context_pP->ue_context.pduSession[i].xid = xid;
- LOG_D(NR_RRC, "setting the status for the default DRB (index %d) to (%d,%s)\n",
- i, ue_context_pP->ue_context.pduSession[i].status, "PDU_SESSION_STATUS_DONE");
+ ue_p->pduSession[i].status = PDU_SESSION_STATUS_DONE;
+ ue_p->pduSession[i].xid = xid;
+ LOG_D(NR_RRC, "setting the status for the default DRB (index %d) to (%d,%s)\n", i, ue_p->pduSession[i].status, "PDU_SESSION_STATUS_DONE");
}
gNB_RRC_INST *rrc = RC.nrrrc[ctxt_pP->module_id];
NR_CellGroupConfig_t *cellGroupConfig = calloc(1, sizeof(NR_CellGroupConfig_t));
// Revert spCellConfig stored in spCellConfigReestablishment before had been dropped during RRC Reestablishment
- ue_context_pP->ue_context.masterCellGroup->spCellConfig = ue_context_pP->ue_context.spCellConfigReestablishment;
- ue_context_pP->ue_context.spCellConfigReestablishment = NULL;
- cellGroupConfig->spCellConfig = ue_context_pP->ue_context.masterCellGroup->spCellConfig;
- cellGroupConfig->physicalCellGroupConfig = ue_context_pP->ue_context.masterCellGroup->physicalCellGroupConfig;
+ ue_p->masterCellGroup->spCellConfig = ue_p->spCellConfigReestablishment;
+ ue_p->spCellConfigReestablishment = NULL;
+ cellGroupConfig->spCellConfig = ue_p->masterCellGroup->spCellConfig;
+cellGroupConfig->physicalCellGroupConfig = ue_p->masterCellGroup->physicalCellGroupConfig;
- fill_mastercellGroupConfig(cellGroupConfig, ue_context_pP->ue_context.masterCellGroup, rrc->um_on_default_drb, (drb_id_to_setup_start < 2) ? 1 : 0, drb_id_to_setup_start, nb_drb_to_setup, drb_priority);
+ fill_mastercellGroupConfig(cellGroupConfig, ue_p->masterCellGroup, rrc->um_on_default_drb, (drb_id_to_setup_start < 2) ? 1 : 0, drb_id_to_setup_start, nb_drb_to_setup, drb_priority);
for(i = 0; i < cellGroupConfig->rlc_BearerToAddModList->list.count; i++) {
cellGroupConfig->rlc_BearerToAddModList->list.array[i]->reestablishRLC = CALLOC(1, sizeof(*cellGroupConfig->rlc_BearerToAddModList->list.array[i]->reestablishRLC));
@@ -1659,11 +1485,11 @@ void rrc_gNB_process_RRCReestablishmentComplete(const protocol_ctxt_t *const ctx
LOG_DUMPMSG(NR_RRC,DEBUG_RRC,(char *)buffer,size, "[MSG] RRC Reconfiguration\n");
/* Free all NAS PDUs */
- for (i = 0; i < ue_context_pP->ue_context.nb_of_pdusessions; i++) {
- if (ue_context_pP->ue_context.pduSession[i].param.nas_pdu.buffer != NULL) {
+ for (i = 0; i < ue_p->nb_of_pdusessions; i++) {
+ if (ue_p->pduSession[i].param.nas_pdu.buffer != NULL) {
/* Free the NAS PDU buffer and invalidate it */
- free(ue_context_pP->ue_context.pduSession[i].param.nas_pdu.buffer);
- ue_context_pP->ue_context.pduSession[i].param.nas_pdu.buffer = NULL;
+ free(ue_p->pduSession[i].param.nas_pdu.buffer);
+ ue_p->pduSession[i].param.nas_pdu.buffer = NULL;
}
}
@@ -1671,13 +1497,13 @@ void rrc_gNB_process_RRCReestablishmentComplete(const protocol_ctxt_t *const ctx
LOG_E(NR_RRC, "RRC decode err!!! do_RRCReconfiguration\n");
return;
} else {
- LOG_I(NR_RRC, "[gNB %d] Frame %d, Logical Channel DL-DCCH, Generate NR_RRCReconfiguration (bytes %d, UE id %04x)\n", ctxt_pP->module_id, ctxt_pP->frame, size, ue_context_pP->ue_context.rnti);
+ LOG_I(NR_RRC, "[gNB %d] Frame %d, Logical Channel DL-DCCH, Generate NR_RRCReconfiguration (bytes %d, UE id %04x)\n", ctxt_pP->module_id, ctxt_pP->frame, size, ue_p->rnti);
LOG_D(NR_RRC,
"[FRAME %05d][RRC_gNB][MOD %u][][--- PDCP_DATA_REQ/%d Bytes (RRCReconfiguration to UE %04x MUI %d) --->][PDCP][MOD %u][RB %u]\n",
ctxt_pP->frame,
ctxt_pP->module_id,
size,
- ue_context_pP->ue_context.rnti,
+ ue_p->rnti,
rrc_gNB_mui,
ctxt_pP->module_id,
DCCH);
@@ -1687,16 +1513,12 @@ void rrc_gNB_process_RRCReestablishmentComplete(const protocol_ctxt_t *const ctx
}
if (NODE_IS_DU(RC.nrrrc[ctxt_pP->module_id]->node_type) || NODE_IS_MONOLITHIC(RC.nrrrc[ctxt_pP->module_id]->node_type)) {
- uint32_t delay_ms = ue_context_pP->ue_context.masterCellGroup &&
- ue_context_pP->ue_context.masterCellGroup->spCellConfig &&
- ue_context_pP->ue_context.masterCellGroup->spCellConfig->spCellConfigDedicated &&
- ue_context_pP->ue_context.masterCellGroup->spCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList ?
- NR_RRC_RECONFIGURATION_DELAY_MS + NR_RRC_BWP_SWITCHING_DELAY_MS : NR_RRC_RECONFIGURATION_DELAY_MS;
+ uint32_t delay_ms = ue_p->masterCellGroup && ue_p->masterCellGroup->spCellConfig && ue_p->masterCellGroup->spCellConfig->spCellConfigDedicated
+ && ue_p->masterCellGroup->spCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList
+ ? NR_RRC_RECONFIGURATION_DELAY_MS + NR_RRC_BWP_SWITCHING_DELAY_MS
+ : NR_RRC_RECONFIGURATION_DELAY_MS;
- nr_mac_enable_ue_rrc_processing_timer(ctxt_pP->module_id,
- ue_context_pP->ue_context.rnti,
- *RC.nrrrc[ctxt_pP->module_id]->carrier.servingcellconfigcommon->ssbSubcarrierSpacing,
- delay_ms);
+ nr_mac_enable_ue_rrc_processing_timer(ctxt_pP->module_id, ue_p->rnti, *RC.nrrrc[ctxt_pP->module_id]->carrier.servingcellconfigcommon->ssbSubcarrierSpacing, delay_ms);
}
}
//-----------------------------------------------------------------------------
@@ -1707,8 +1529,9 @@ int nr_rrc_reconfiguration_req(rrc_gNB_ue_context_t *const ue_context_pP
const int ul_bwp_id) {
uint8_t xid = rrc_gNB_get_next_transaction_identifier(ctxt_pP->module_id);
+ gNB_RRC_UE_t *ue_p = &ue_context_pP->ue_context;
- NR_CellGroupConfig_t *masterCellGroup = ue_context_pP->ue_context.masterCellGroup;
+ NR_CellGroupConfig_t *masterCellGroup = ue_p->masterCellGroup;
if (dl_bwp_id > 0) {
*masterCellGroup->spCellConfig->spCellConfigDedicated->firstActiveDownlinkBWP_Id = dl_bwp_id;
*masterCellGroup->spCellConfig->spCellConfigDedicated->defaultDownlinkBWP_Id = dl_bwp_id;
@@ -1746,95 +1569,75 @@ int nr_rrc_reconfiguration_req(rrc_gNB_ue_context_t *const ue_context_pP
PDCP_TRANSMISSION_MODE_CONTROL);
if (NODE_IS_DU(RC.nrrrc[ctxt_pP->module_id]->node_type) || NODE_IS_MONOLITHIC(RC.nrrrc[ctxt_pP->module_id]->node_type)) {
- uint32_t delay_ms = ue_context_pP->ue_context.masterCellGroup &&
- ue_context_pP->ue_context.masterCellGroup->spCellConfig &&
- ue_context_pP->ue_context.masterCellGroup->spCellConfig->spCellConfigDedicated &&
- ue_context_pP->ue_context.masterCellGroup->spCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList ?
- NR_RRC_RECONFIGURATION_DELAY_MS + NR_RRC_BWP_SWITCHING_DELAY_MS : NR_RRC_RECONFIGURATION_DELAY_MS;
+ uint32_t delay_ms = ue_p->masterCellGroup && ue_p->masterCellGroup->spCellConfig && ue_p->masterCellGroup->spCellConfig->spCellConfigDedicated
+ && ue_p->masterCellGroup->spCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList
+ ? NR_RRC_RECONFIGURATION_DELAY_MS + NR_RRC_BWP_SWITCHING_DELAY_MS
+ : NR_RRC_RECONFIGURATION_DELAY_MS;
- nr_mac_enable_ue_rrc_processing_timer(ctxt_pP->module_id,
- ue_context_pP->ue_context.rnti,
- *RC.nrrrc[ctxt_pP->module_id]->carrier.servingcellconfigcommon->ssbSubcarrierSpacing,
- delay_ms);
+ nr_mac_enable_ue_rrc_processing_timer(ctxt_pP->module_id, ue_p->rnti, *RC.nrrrc[ctxt_pP->module_id]->carrier.servingcellconfigcommon->ssbSubcarrierSpacing, delay_ms);
}
return 0;
}
/*------------------------------------------------------------------------------*/
-int nr_rrc_gNB_decode_ccch(protocol_ctxt_t *const ctxt_pP,
- const uint8_t *buffer,
- int buffer_length,
- const uint8_t *du_to_cu_rrc_container,
- int du_to_cu_rrc_container_len)
+static int nr_rrc_gNB_decode_ccch(module_id_t module_id, rnti_t rnti, const uint8_t *buffer, int buffer_length, const uint8_t *du_to_cu_rrc_container, int du_to_cu_rrc_container_len)
{
module_id_t Idx;
asn_dec_rval_t dec_rval;
- NR_UL_CCCH_Message_t *ul_ccch_msg = NULL;
- struct rrc_gNB_ue_context_s *ue_context_p = NULL;
- gNB_RRC_INST *gnb_rrc_inst = RC.nrrrc[ctxt_pP->module_id];
+ NR_UL_CCCH_Message_t *ul_ccch_msg = NULL;
+ gNB_RRC_INST *gnb_rrc_inst = RC.nrrrc[module_id];
NR_RRCSetupRequest_IEs_t *rrcSetupRequest = NULL;
- NR_RRCReestablishmentRequest_IEs_t rrcReestablishmentRequest;
- uint64_t random_value = 0;
+ NR_RRCReestablishmentRequest_IEs_t rrcReestablishmentRequest;
- LOG_I(NR_RRC, "Decoding CCCH: RNTI %04lx, inst %ld, payload_size %d\n", ctxt_pP->rntiMaybeUEid, ctxt_pP->instance, buffer_length);
+ LOG_I(NR_RRC, "Decoding CCCH: RNTI %04x, payload_size %d\n", rnti, buffer_length);
dec_rval = uper_decode(NULL, &asn_DEF_NR_UL_CCCH_Message, (void **) &ul_ccch_msg, buffer, buffer_length, 0, 0);
if (dec_rval.code != RC_OK || dec_rval.consumed == 0) {
- LOG_E(NR_RRC,
- PROTOCOL_NR_RRC_CTXT_UE_FMT" FATAL Error in receiving CCCH\n",
- PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP));
+ LOG_E(NR_RRC, " FATAL Error in receiving CCCH\n");
return -1;
}
- if (ul_ccch_msg->message.present == NR_UL_CCCH_MessageType_PR_c1) {
- switch (ul_ccch_msg->message.choice.c1->present) {
+ if (ul_ccch_msg->message.present == NR_UL_CCCH_MessageType_PR_c1) {
+ switch (ul_ccch_msg->message.choice.c1->present) {
case NR_UL_CCCH_MessageType__c1_PR_NOTHING:
/* TODO */
- LOG_I(NR_RRC,
- PROTOCOL_NR_RRC_CTXT_FMT" Received PR_NOTHING on UL-CCCH-Message\n",
- PROTOCOL_NR_RRC_CTXT_ARGS(ctxt_pP));
+ LOG_I(NR_RRC, "Received PR_NOTHING on UL-CCCH-Message\n");
break;
case NR_UL_CCCH_MessageType__c1_PR_rrcSetupRequest:
- LOG_D(NR_RRC, "Received RRCSetupRequest on UL-CCCH-Message (UE rnti %lx)\n", ctxt_pP->rntiMaybeUEid);
- ue_context_p = rrc_gNB_get_ue_context(gnb_rrc_inst, ctxt_pP->rntiMaybeUEid);
+ LOG_D(NR_RRC, "Received RRCSetupRequest on UL-CCCH-Message (UE rnti %04x)\n", rnti);
+ rrc_gNB_ue_context_t *ue_context_p = rrc_gNB_get_ue_context_by_rnti(gnb_rrc_inst, rnti);
if (ue_context_p != NULL) {
- rrc_gNB_free_mem_UE_context(ctxt_pP, ue_context_p);
+ LOG_W(NR_RRC, "Got RRC setup request for a already registered RNTI %x, dropping the old one and give up this rrcSetupRequest\n", ue_context_p->ue_context.rnti);
+ rrc_gNB_remove_ue_context(gnb_rrc_inst, ue_context_p);
} else {
rrcSetupRequest = &ul_ccch_msg->message.choice.c1->choice.rrcSetupRequest->rrcSetupRequest;
if (NR_InitialUE_Identity_PR_randomValue == rrcSetupRequest->ue_Identity.present) {
/* randomValue BIT STRING (SIZE (39)) */
if (rrcSetupRequest->ue_Identity.choice.randomValue.size != 5) { // 39-bit random value
- LOG_E(NR_RRC, "wrong InitialUE-Identity randomValue size, expected 5, provided %lu",
- (long unsigned int)rrcSetupRequest->ue_Identity.choice.randomValue.size);
+ LOG_E(NR_RRC, "wrong InitialUE-Identity randomValue size, expected 5, provided %lu", (long unsigned int)rrcSetupRequest->ue_Identity.choice.randomValue.size);
return -1;
}
-
- memcpy(((uint8_t *) & random_value) + 3,
- rrcSetupRequest->ue_Identity.choice.randomValue.buf,
- rrcSetupRequest->ue_Identity.choice.randomValue.size);
+ uint64_t random_value = 0;
+ memcpy(((uint8_t *)&random_value) + 3, rrcSetupRequest->ue_Identity.choice.randomValue.buf, rrcSetupRequest->ue_Identity.choice.randomValue.size);
/* if there is already a registered UE (with another RNTI) with this random_value,
- * the current one must be removed from MAC/PHY (zombie UE)
- */
- if ((ue_context_p = rrc_gNB_ue_context_random_exist(RC.nrrrc[ctxt_pP->module_id], random_value))) {
- LOG_W(NR_RRC,
- "new UE rnti %lx (coming with random value) is already there as UE %x, removing %x from MAC/PHY\n",
- ctxt_pP->rntiMaybeUEid,
- ue_context_p->ue_context.rnti,
- ue_context_p->ue_context.rnti);
- ue_context_p->ue_context.ul_failure_timer = 20000;
+ * the current one must be removed from MAC/PHY (zombie UE)
+ */
+ if ((ue_context_p = rrc_gNB_ue_context_random_exist(gnb_rrc_inst, random_value))) {
+ gNB_RRC_UE_t *UE = &ue_context_p->ue_context;
+ LOG_W(NR_RRC, "new UE rnti (coming with random value) is already there, removing UE %x from MAC/PHY\n", rnti);
+ UE->ul_failure_timer = 20000;
}
- ue_context_p = rrc_gNB_get_next_free_ue_context(ctxt_pP, RC.nrrrc[ctxt_pP->module_id], random_value);
+ ue_context_p = rrc_gNB_create_ue_context(rnti, gnb_rrc_inst, random_value);
} else if (NR_InitialUE_Identity_PR_ng_5G_S_TMSI_Part1 == rrcSetupRequest->ue_Identity.present) {
/* TODO */
/* <5G-S-TMSI> = <5G-TMSI> 48-bit */
/* ng-5G-S-TMSI-Part1 BIT STRING (SIZE (39)) */
if (rrcSetupRequest->ue_Identity.choice.ng_5G_S_TMSI_Part1.size != 5) {
- LOG_E(NR_RRC, "wrong ng_5G_S_TMSI_Part1 size, expected 5, provided %lu \n",
- (long unsigned int)rrcSetupRequest->ue_Identity.choice.ng_5G_S_TMSI_Part1.size);
+ LOG_E(NR_RRC, "wrong ng_5G_S_TMSI_Part1 size, expected 5, provided %lu \n", (long unsigned int)rrcSetupRequest->ue_Identity.choice.ng_5G_S_TMSI_Part1.size);
return -1;
}
@@ -1844,91 +1647,82 @@ int nr_rrc_gNB_decode_ccch(protocol_ctxt_t *const ctxt_pP,
// rrcSetupRequest->ue_Identity.choice.ng_5G_S_TMSI_Part1.buf,
// rrcSetupRequest->ue_Identity.choice.ng_5G_S_TMSI_Part1.size);
- if ((ue_context_p = rrc_gNB_ue_context_5g_s_tmsi_exist(RC.nrrrc[ctxt_pP->module_id], s_tmsi_part1))) {
- LOG_I(NR_RRC, " 5G-S-TMSI-Part1 exists, ue_context_p %p, old rnti %x => %lx\n", ue_context_p, ue_context_p->ue_context.rnti, ctxt_pP->rntiMaybeUEid);
+ if ((ue_context_p = rrc_gNB_ue_context_5g_s_tmsi_exist(gnb_rrc_inst, s_tmsi_part1))) {
+ gNB_RRC_UE_t *UE = &ue_context_p->ue_context;
+ LOG_I(NR_RRC, " 5G-S-TMSI-Part1 exists, old rnti %04x => %04x\n", UE->rnti, rnti);
// TODO: MAC structures should not be accessed directly from the RRC! An implementation using the F1 interface should be developed.
- gNB_MAC_INST *nrmac=RC.nrmac[ctxt_pP->module_id]; //WHAT A BEAUTIFULL RACE CONDITION !!!
- mac_remove_nr_ue(nrmac, ue_context_p->ue_context.rnti);
+ if (!NODE_IS_CU(RC.nrrrc[0]->node_type)) {
+ gNB_MAC_INST *nrmac = RC.nrmac[module_id]; // why MAC instances match RRC instances ?
+ mac_remove_nr_ue(nrmac, UE->rnti);
+ }
/* replace rnti in the context */
- /* for that, remove the context from the RB tree */
- RB_REMOVE(rrc_nr_ue_tree_s, &RC.nrrrc[ctxt_pP->module_id]->rrc_ue_head, ue_context_p);
- /* and insert again, after changing rnti everywhere it has to be changed */
- ue_context_p->ue_id_rnti = ctxt_pP->rntiMaybeUEid;
- ue_context_p->ue_context.rnti = ctxt_pP->rntiMaybeUEid;
- RB_INSERT(rrc_nr_ue_tree_s, &RC.nrrrc[ctxt_pP->module_id]->rrc_ue_head, ue_context_p);
+ UE->rnti = rnti;
/* reset timers */
- ue_context_p->ue_context.ul_failure_timer = 0;
- ue_context_p->ue_context.ue_release_timer = 0;
- ue_context_p->ue_context.ue_reestablishment_timer = 0;
- ue_context_p->ue_context.ue_release_timer_s1 = 0;
- ue_context_p->ue_context.ue_release_timer_rrc = 0;
+ UE->ul_failure_timer = 0;
+ UE->ue_release_timer = 0;
+ UE->ue_reestablishment_timer = 0;
+ UE->ue_release_timer_s1 = 0;
+ UE->ue_release_timer_rrc = 0;
} else {
- LOG_I(NR_RRC, " 5G-S-TMSI-Part1 doesn't exist, setting ng_5G_S_TMSI_Part1 to %p => %ld\n",
- ue_context_p, s_tmsi_part1);
-
- ue_context_p = rrc_gNB_get_next_free_ue_context(ctxt_pP, RC.nrrrc[ctxt_pP->module_id], s_tmsi_part1);
+ LOG_I(NR_RRC, "UE %04x 5G-S-TMSI-Part1 doesn't exist, setting ng_5G_S_TMSI_Part1 => %ld\n", rnti, s_tmsi_part1);
+ ue_context_p = rrc_gNB_create_ue_context(rnti, gnb_rrc_inst, s_tmsi_part1);
if (ue_context_p == NULL) {
- LOG_E(RRC, "%s:%d:%s: rrc_gNB_get_next_free_ue_context returned NULL\n", __FILE__, __LINE__, __FUNCTION__);
- }
-
- if (ue_context_p != NULL) {
- ue_context_p->ue_context.Initialue_identity_5g_s_TMSI.presence = true;
- ue_context_p->ue_context.ng_5G_S_TMSI_Part1 = s_tmsi_part1;
+ LOG_E(NR_RRC, "rrc_gNB_get_next_free_ue_context returned NULL\n");
+ return -1;
}
+ gNB_RRC_UE_t *UE = &ue_context_p->ue_context;
+ UE->Initialue_identity_5g_s_TMSI.presence = true;
+ UE->ng_5G_S_TMSI_Part1 = s_tmsi_part1;
}
} else {
/* TODO */
- memcpy(((uint8_t *) & random_value) + 3,
- rrcSetupRequest->ue_Identity.choice.randomValue.buf,
- rrcSetupRequest->ue_Identity.choice.randomValue.size);
+ uint64_t random_value = 0;
+ memcpy(((uint8_t *)&random_value) + 3, rrcSetupRequest->ue_Identity.choice.randomValue.buf, rrcSetupRequest->ue_Identity.choice.randomValue.size);
- rrc_gNB_get_next_free_ue_context(ctxt_pP, RC.nrrrc[ctxt_pP->module_id], random_value);
- LOG_E(NR_RRC,
- PROTOCOL_NR_RRC_CTXT_UE_FMT" RRCSetupRequest without random UE identity or S-TMSI not supported, let's reject the UE\n",
- PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP));
- rrc_gNB_generate_RRCReject(ctxt_pP, rrc_gNB_get_ue_context(gnb_rrc_inst, ctxt_pP->rntiMaybeUEid));
+ ue_context_p = rrc_gNB_create_ue_context(rnti, gnb_rrc_inst, random_value);
+ LOG_E(NR_RRC, "RRCSetupRequest without random UE identity or S-TMSI not supported, let's reject the UE %04x\n", rnti);
+ rrc_gNB_generate_RRCReject(module_id, ue_context_p);
break;
}
-
- ue_context_p->ue_context.establishment_cause = rrcSetupRequest->establishmentCause;
+ gNB_RRC_UE_t *UE = &ue_context_p->ue_context;
+ UE = &ue_context_p->ue_context;
+ UE->establishment_cause = rrcSetupRequest->establishmentCause;
rrc_gNB_generate_RRCSetup(
- ctxt_pP, rrc_gNB_get_ue_context(gnb_rrc_inst, ctxt_pP->rntiMaybeUEid), du_to_cu_rrc_container, du_to_cu_rrc_container_len, gnb_rrc_inst->carrier.servingcellconfigcommon);
+ module_id, rnti, rrc_gNB_get_ue_context_by_rnti(gnb_rrc_inst, rnti), du_to_cu_rrc_container, du_to_cu_rrc_container_len, gnb_rrc_inst->carrier.servingcellconfigcommon);
}
break;
case NR_UL_CCCH_MessageType__c1_PR_rrcResumeRequest:
- LOG_I(NR_RRC, "receive rrcResumeRequest message \n");
+ LOG_I(NR_RRC, "receive rrcResumeRequest message \n");
break;
case NR_UL_CCCH_MessageType__c1_PR_rrcReestablishmentRequest: {
- LOG_I(NR_RRC, "Received rrcReestablishmentRequest message\n");
LOG_DUMPMSG(NR_RRC, DEBUG_RRC, (char *)(buffer), buffer_length, "[MSG] RRC Reestablishment Request\n");
- LOG_D(NR_RRC, PROTOCOL_NR_RRC_CTXT_UE_FMT "MAC_gNB--- MAC_DATA_IND (rrcReestablishmentRequest on SRB0) --> RRC_gNB\n", PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP));
-
rrcReestablishmentRequest = ul_ccch_msg->message.choice.c1->choice.rrcReestablishmentRequest->rrcReestablishmentRequest;
+ const NR_ReestablishmentCause_t cause = rrcReestablishmentRequest.reestablishmentCause;
+ const long physCellId = rrcReestablishmentRequest.ue_Identity.physCellId;
LOG_I(NR_RRC,
- PROTOCOL_NR_RRC_CTXT_UE_FMT " NR_RRCReestablishmentRequest cause %s\n",
- PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP),
- ((rrcReestablishmentRequest.reestablishmentCause == NR_ReestablishmentCause_otherFailure) ? "Other Failure"
- : (rrcReestablishmentRequest.reestablishmentCause == NR_ReestablishmentCause_handoverFailure) ? "Handover Failure"
- : "reconfigurationFailure"));
+ "UE %04x NR_RRCReestablishmentRequest cause %s\n",
+ rnti,
+ ((cause == NR_ReestablishmentCause_otherFailure) ? "Other Failure"
+ : (cause == NR_ReestablishmentCause_handoverFailure) ? "Handover Failure"
+ : "reconfigurationFailure"));
- if (rrcReestablishmentRequest.ue_Identity.physCellId != RC.nrrrc[ctxt_pP->module_id]->carrier.physCellId) {
+ if (physCellId != gnb_rrc_inst->carrier.physCellId) {
/* UE was moving from previous cell so quickly that RRCReestablishment for previous cell was received in this cell */
LOG_E(NR_RRC,
- PROTOCOL_NR_RRC_CTXT_UE_FMT " NR_RRCReestablishmentRequest ue_Identity.physCellId(%ld) is not equal to current physCellId(%d), fallback to RRC establishment\n",
- PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP),
- rrcReestablishmentRequest.ue_Identity.physCellId,
- RC.nrrrc[ctxt_pP->module_id]->carrier.physCellId);
- rrc_gNB_generate_RRCSetup_for_RRCReestablishmentRequest(ctxt_pP, 0);
+ " NR_RRCReestablishmentRequest ue_Identity.physCellId(%ld) is not equal to current physCellId(%d), fallback to RRC establishment\n",
+ physCellId,
+ gnb_rrc_inst->carrier.physCellId);
+ rrc_gNB_generate_RRCSetup_for_RRCReestablishmentRequest(module_id, rnti, 0);
break;
}
- LOG_I(NR_RRC, "physCellId: %ld\n", rrcReestablishmentRequest.ue_Identity.physCellId);
+ LOG_I(NR_RRC, "physCellId: %ld\n", physCellId);
for (int i = 0; i < rrcReestablishmentRequest.ue_Identity.shortMAC_I.size; i++) {
LOG_D(NR_RRC, "rrcReestablishmentRequest.ue_Identity.shortMAC_I.buf[%d] = %x\n", i, rrcReestablishmentRequest.ue_Identity.shortMAC_I.buf[i]);
@@ -1938,26 +1732,24 @@ int nr_rrc_gNB_decode_ccch(protocol_ctxt_t *const ctxt_pP,
if (rrcReestablishmentRequest.ue_Identity.c_RNTI < 0x1 || rrcReestablishmentRequest.ue_Identity.c_RNTI > 0xffef) {
/* c_RNTI range error should not happen */
LOG_E(NR_RRC, "NR_RRCReestablishmentRequest c_RNTI range error, fallback to RRC establishment\n");
- rrc_gNB_generate_RRCSetup_for_RRCReestablishmentRequest(ctxt_pP, 0);
+ rrc_gNB_generate_RRCSetup_for_RRCReestablishmentRequest(module_id, rnti, 0);
break;
}
rnti_t c_rnti = rrcReestablishmentRequest.ue_Identity.c_RNTI;
LOG_I(NR_RRC, "c_RNTI: %04x\n", c_rnti);
- ue_context_p = rrc_gNB_get_ue_context(gnb_rrc_inst, c_rnti);
+ rrc_gNB_ue_context_t *ue_context_p = rrc_gNB_get_ue_context_by_rnti(gnb_rrc_inst, c_rnti);
+ gNB_RRC_UE_t *UE = &ue_context_p->ue_context;
if (ue_context_p == NULL) {
LOG_E(NR_RRC, "NR_RRCReestablishmentRequest without UE context, fallback to RRC establishment\n");
- rrc_gNB_generate_RRCSetup_for_RRCReestablishmentRequest(ctxt_pP, 0);
+ rrc_gNB_generate_RRCSetup_for_RRCReestablishmentRequest(module_id, c_rnti, 0);
break;
}
-
-#if (0)
- /* TODO : It may be needed if gNB goes into full stack working. */
- int UE_id = find_nr_UE_id(ctxt_pP->module_id, c_rnti);
-
+#if 0
+ int UE_id = find_nr_UE_id(gnb_rrc_inst, c_rnti);
if (UE_id == -1) {
- LOG_E(NR_RRC, PROTOCOL_NR_RRC_CTXT_UE_FMT " NR_RRCReestablishmentRequest without UE_id(MAC) rnti %x, fallback to RRC establishment\n", PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP), c_rnti);
- rrc_gNB_generate_RRCSetup_for_RRCReestablishmentRequest(ctxt_pP, 0);
+ LOG_E(NR_RRC, "NR_RRCReestablishmentRequest without MAC context, rnti %04x, fallback to RRC establishment\n", c_rnti);
+ rrc_gNB_generate_RRCSetup_for_RRCReestablishmentRequest(module_id, rnti, 0);
break;
}
@@ -1972,91 +1764,87 @@ int nr_rrc_gNB_decode_ccch(protocol_ctxt_t *const ctxt_pP,
}
if (previous_rnti != 0) {
- UE_id = find_nr_UE_id(ctxt_pP->module_id, previous_rnti);
-
+ UE_id = find_nr_UE_id(gnb_rrc_inst, previous_rnti);
if (UE_id == -1) {
- LOG_E(NR_RRC,
- PROTOCOL_NR_RRC_CTXT_UE_FMT " RRCReestablishmentRequest without UE_id(MAC) previous rnti %x, fallback to RRC establishment\n",
- PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP),
- previous_rnti);
- rrc_gNB_generate_RRCSetup_for_RRCReestablishmentRequest(ctxt_pP, 0);
+ LOG_E(NR_RRC,"RRCReestablishmentRequest without mac context previous rnti %04x, nex rnti %04x, fallback to RRC establishment\n",
+ previous_rnti, c_rnti);
+ rrc_gNB_generate_RRCSetup_for_RRCReestablishmentRequest(module_id, rnti, 0);
break;
}
}
#endif
// c-plane not end
- if ((ue_context_p->ue_context.StatusRrc != NR_RRC_RECONFIGURED) && (ue_context_p->ue_context.reestablishment_cause == NR_ReestablishmentCause_spare1)) {
+ if ((UE->StatusRrc != NR_RRC_RECONFIGURED) && (UE->reestablishment_cause == NR_ReestablishmentCause_spare1)) {
LOG_E(NR_RRC, "NR_RRCReestablishmentRequest (UE %x c-plane is not end), RRC establishment failed\n", c_rnti);
/* TODO RRC Release ? */
break;
}
- if (ue_context_p->ue_context.ue_reestablishment_timer > 0) {
- LOG_E(NR_RRC, "RRRCReconfigurationComplete(Previous) don't receive, delete the Previous UE,\nprevious Status %d, new Status NR_RRC_RECONFIGURED\n", ue_context_p->ue_context.StatusRrc);
- ue_context_p->ue_context.StatusRrc = NR_RRC_RECONFIGURED;
+ if (UE->ue_reestablishment_timer > 0) {
+ LOG_E(NR_RRC, "RRRCReconfigurationComplete(Previous) don't receive, delete the Previous UE,\nprevious Status %d, new Status NR_RRC_RECONFIGURED\n", UE->StatusRrc);
+ UE->StatusRrc = NR_RRC_RECONFIGURED;
protocol_ctxt_t ctxt_old_p;
- PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt_old_p, ctxt_pP->instance, GNB_FLAG_YES, c_rnti, ctxt_pP->frame, ctxt_pP->subframe);
- rrc_gNB_process_RRCReconfigurationComplete(&ctxt_old_p, ue_context_p, ue_context_p->ue_context.reestablishment_xid);
+ PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt_old_p, module_id, GNB_FLAG_YES, c_rnti, 0, 0);
+ rrc_gNB_process_RRCReconfigurationComplete(&ctxt_old_p, ue_context_p, UE->reestablishment_xid);
- for (uint8_t pdusessionid = 0; pdusessionid < ue_context_p->ue_context.nb_of_pdusessions; pdusessionid++) {
- if (ue_context_p->ue_context.pduSession[pdusessionid].status == PDU_SESSION_STATUS_DONE) {
- ue_context_p->ue_context.pduSession[pdusessionid].status = PDU_SESSION_STATUS_ESTABLISHED;
+ for (uint8_t pdusessionid = 0; pdusessionid < UE->nb_of_pdusessions; pdusessionid++) {
+ if (UE->pduSession[pdusessionid].status == PDU_SESSION_STATUS_DONE) {
+ UE->pduSession[pdusessionid].status = PDU_SESSION_STATUS_ESTABLISHED;
} else {
- ue_context_p->ue_context.pduSession[pdusessionid].status = PDU_SESSION_STATUS_FAILED;
+ UE->pduSession[pdusessionid].status = PDU_SESSION_STATUS_FAILED;
}
}
}
/* reset timers */
- ue_context_p->ue_context.ul_failure_timer = 0;
- ue_context_p->ue_context.ue_release_timer = 0;
- ue_context_p->ue_context.ue_reestablishment_timer = 0;
- // ue_context_p->ue_context.ue_release_timer_s1 = 0;
- ue_context_p->ue_context.ue_release_timer_rrc = 0;
- ue_context_p->ue_context.reestablishment_xid = -1;
+ UE->ul_failure_timer = 0;
+ UE->ue_release_timer = 0;
+ UE->ue_reestablishment_timer = 0;
+ // UE->ue_release_timer_s1 = 0;
+ UE->ue_release_timer_rrc = 0;
+ UE->reestablishment_xid = -1;
// Insert C-RNTI to map
for (int i = 0; i < MAX_MOBILES_PER_GNB; i++) {
- nr_reestablish_rnti_map_t *nr_reestablish_rnti_map = &(RC.nrrrc[ctxt_pP->module_id])->nr_reestablish_rnti_map[i];
+ nr_reestablish_rnti_map_t *nr_reestablish_rnti_map = &gnb_rrc_inst->nr_reestablish_rnti_map[i];
LOG_I(NR_RRC, "Insert nr_reestablish_rnti_map[%d] UEid: %lx, RNTI: %04x\n", i, nr_reestablish_rnti_map->ue_id, nr_reestablish_rnti_map->c_rnti);
if (nr_reestablish_rnti_map->ue_id == 0) {
- nr_reestablish_rnti_map->ue_id = ctxt_pP->rntiMaybeUEid;
+ nr_reestablish_rnti_map->ue_id = rnti;
nr_reestablish_rnti_map->c_rnti = c_rnti;
- LOG_I(NR_RRC, "Insert nr_reestablish_rnti_map[%d] UEid: %lx, RNTI: %04x\n", i, nr_reestablish_rnti_map->ue_id, nr_reestablish_rnti_map->c_rnti);
+ LOG_W(NR_RRC, "Insert nr_reestablish_rnti_map[%d] UEid: %lx, RNTI: %04x bug in UEid to fix \n", i, nr_reestablish_rnti_map->ue_id, nr_reestablish_rnti_map->c_rnti);
break;
}
}
- ue_context_p->ue_context.reestablishment_cause = rrcReestablishmentRequest.reestablishmentCause;
- LOG_D(NR_RRC, "Accept RRCReestablishmentRequest from UE physCellId %ld cause %ld\n", rrcReestablishmentRequest.ue_Identity.physCellId, ue_context_p->ue_context.reestablishment_cause);
+ UE->reestablishment_cause = cause;
+ LOG_D(NR_RRC, "Accept RRCReestablishmentRequest from UE physCellId %ld cause %ld\n", physCellId, cause);
- ue_context_p->ue_context.primaryCC_id = 0;
- //LG COMMENT Idx = (ue_mod_idP * NB_RB_MAX) + DCCH;
- Idx = DCCH;
- // SRB1
- ue_context_p->ue_context.Srb1.Active = 1;
- ue_context_p->ue_context.Srb1.Srb_info.Srb_id = Idx;
- rrc_init_nr_srb_param(&ue_context_p->ue_context.Srb1.Srb_info.Lchan_desc[0]);
- rrc_init_nr_srb_param(&ue_context_p->ue_context.Srb1.Srb_info.Lchan_desc[1]);
- // SRB2: set it to go through SRB1 with id 1 (DCCH)
- ue_context_p->ue_context.Srb2.Active = 1;
- ue_context_p->ue_context.Srb2.Srb_info.Srb_id = Idx;
- rrc_init_nr_srb_param(&ue_context_p->ue_context.Srb2.Srb_info.Lchan_desc[0]);
- rrc_init_nr_srb_param(&ue_context_p->ue_context.Srb2.Srb_info.Lchan_desc[1]);
-
- rrc_gNB_generate_RRCReestablishment(ctxt_pP, ue_context_p, du_to_cu_rrc_container, gnb_rrc_inst->carrier.servingcellconfigcommon, 0);
+ UE->primaryCC_id = 0;
+ // LG COMMENT Idx = (ue_mod_idP * NB_RB_MAX) + DCCH;
+ Idx = DCCH;
+ // SRB1
+ UE->Srb[1].Active = 1;
+ UE->Srb[1].Srb_info.Srb_id = Idx;
+ rrc_init_nr_srb_param(&UE->Srb[1].Srb_info.Lchan_desc[0]);
+ rrc_init_nr_srb_param(&UE->Srb[1].Srb_info.Lchan_desc[1]);
+ // SRB2: set it to go through SRB1 with id 1 (DCCH)
+ UE->Srb[2].Active = 1;
+ UE->Srb[2].Srb_info.Srb_id = Idx;
+ rrc_init_nr_srb_param(&UE->Srb[2].Srb_info.Lchan_desc[0]);
+ rrc_init_nr_srb_param(&UE->Srb[2].Srb_info.Lchan_desc[1]);
+ protocol_ctxt_t ctxt = {.rntiMaybeUEid = rnti, .module_id = module_id, .instance = module_id, .enb_flag = 1, .eNB_index = module_id};
+ rrc_gNB_generate_RRCReestablishment(&ctxt, ue_context_p, du_to_cu_rrc_container, gnb_rrc_inst->carrier.servingcellconfigcommon, 0);
LOG_I(NR_RRC, "CALLING RLC CONFIG SRB1 (rbid %d)\n", Idx);
} break;
case NR_UL_CCCH_MessageType__c1_PR_rrcSystemInfoRequest:
- LOG_I(NR_RRC, "receive rrcSystemInfoRequest message \n");
+ LOG_I(NR_RRC, "UE %04x receive rrcSystemInfoRequest message \n", rnti);
/* TODO */
break;
default:
- LOG_E(NR_RRC, PROTOCOL_NR_RRC_CTXT_UE_FMT" Unknown message\n",
- PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP));
+ LOG_E(NR_RRC, "UE %04x Unknown message\n", rnti);
break;
}
}
@@ -2116,24 +1904,18 @@ rrc_gNB_decode_dcch(
//-----------------------------------------------------------------------------
{
asn_dec_rval_t dec_rval;
- NR_UL_DCCH_Message_t *ul_dcch_msg = NULL;
- struct rrc_gNB_ue_context_s *ue_context_p = NULL;
+ NR_UL_DCCH_Message_t *ul_dcch_msg = NULL;
uint8_t xid;
-
+ gNB_RRC_INST *gnb_rrc_inst = RC.nrrrc[ctxt_pP->module_id];
int i;
if ((Srb_id != 1) && (Srb_id != 2)) {
- LOG_E(NR_RRC, PROTOCOL_NR_RRC_CTXT_UE_FMT" Received message on SRB%ld, should not have ...\n",
- PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP),
- Srb_id);
+ LOG_E(NR_RRC, "Received message on SRB%ld, should not have ...\n", Srb_id);
} else {
- LOG_D(NR_RRC, PROTOCOL_NR_RRC_CTXT_UE_FMT" Received message on SRB%ld\n",
- PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP),
- Srb_id);
+ LOG_D(NR_RRC, "Received message on SRB%ld\n", Srb_id);
}
- LOG_D(NR_RRC, PROTOCOL_NR_RRC_CTXT_UE_FMT" Decoding UL-DCCH Message\n",
- PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP));
+ LOG_D(NR_RRC, "Decoding UL-DCCH Message\n");
//for (int i=0;imodule_id], ctxt_pP->rntiMaybeUEid);
+ rrc_gNB_ue_context_t *ue_context_p = rrc_gNB_get_ue_context_by_rnti(gnb_rrc_inst, ctxt_pP->rntiMaybeUEid);
+ gNB_RRC_UE_t *UE = &ue_context_p->ue_context;
if (ul_dcch_msg->message.present == NR_UL_DCCH_MessageType_PR_c1) {
switch (ul_dcch_msg->message.choice.c1->present) {
case NR_UL_DCCH_MessageType__c1_PR_NOTHING:
- LOG_I(NR_RRC,
- PROTOCOL_NR_RRC_CTXT_FMT" Received PR_NOTHING on UL-DCCH-Message\n",
- PROTOCOL_NR_RRC_CTXT_ARGS(ctxt_pP));
+ LOG_I(NR_RRC, "Received PR_NOTHING on UL-DCCH-Message\n");
break;
case NR_UL_DCCH_MessageType__c1_PR_rrcReconfigurationComplete:
@@ -2202,43 +1981,41 @@ rrc_gNB_decode_dcch(
}
if (get_softmodem_params()->sa) {
- if(ue_context_p->ue_context.pdu_session_release_command_flag == 1) {
+ if (UE->pdu_session_release_command_flag == 1) {
xid = ul_dcch_msg->message.choice.c1->choice.rrcReconfigurationComplete->rrc_TransactionIdentifier;
- ue_context_p->ue_context.pdu_session_release_command_flag = 0;
+ UE->pdu_session_release_command_flag = 0;
//gtp tunnel delete
gtpv1u_gnb_delete_tunnel_req_t req={0};
for(i = 0; i < NB_RB_MAX; i++) {
- if(xid == ue_context_p->ue_context.pduSession[i].xid) {
- req.pdusession_id[req.num_pdusession++] =
- ue_context_p->ue_context.gnb_gtp_psi[i];
- ue_context_p->ue_context.gnb_gtp_teid[i] = 0;
- memset(&ue_context_p->ue_context.gnb_gtp_addrs[i], 0, sizeof(ue_context_p->ue_context.gnb_gtp_addrs[i]));
- ue_context_p->ue_context.gnb_gtp_psi[i] = 0;
+ if (xid == UE->pduSession[i].xid) {
+ req.pdusession_id[req.num_pdusession++] = UE->gnb_gtp_psi[i];
+ UE->gnb_gtp_teid[i] = 0;
+ memset(&UE->gnb_gtp_addrs[i], 0, sizeof(UE->gnb_gtp_addrs[i]));
+ UE->gnb_gtp_psi[i] = 0;
}
}
gtpv1u_delete_ngu_tunnel(ctxt_pP->instance, &req);
//NGAP_PDUSESSION_RELEASE_RESPONSE
rrc_gNB_send_NGAP_PDUSESSION_RELEASE_RESPONSE(ctxt_pP, ue_context_p, xid);
- } else if (ue_context_p->ue_context.established_pdu_sessions_flag != 1) {
- if (ue_context_p->ue_context.reestablishment_xid < 0) {
- if (ue_context_p->ue_context.nb_of_pdusessions > 0) {
+ } else if (UE->established_pdu_sessions_flag != 1) {
+ if (UE->reestablishment_xid < 0) {
+ if (UE->nb_of_pdusessions > 0) {
rrc_gNB_send_NGAP_PDUSESSION_SETUP_RESP(ctxt_pP, ue_context_p, ul_dcch_msg->message.choice.c1->choice.rrcReconfigurationComplete->rrc_TransactionIdentifier);
- ue_context_p->ue_context.nb_of_pdusessions = 0;
}
} else {
- ue_context_p->ue_context.reestablishment_xid = -1;
+ UE->reestablishment_xid = -1;
}
}
- if (ue_context_p->ue_context.nb_of_modify_pdusessions > 0) {
+ if (UE->nb_of_modify_pdusessions > 0) {
rrc_gNB_send_NGAP_PDUSESSION_MODIFY_RESP(ctxt_pP,
ue_context_p,
ul_dcch_msg->message.choice.c1->choice.rrcReconfigurationComplete->rrc_TransactionIdentifier);
- ue_context_p->ue_context.nb_of_modify_pdusessions = 0;
- ue_context_p->ue_context.nb_of_failed_pdusessions = 0;
- memset(ue_context_p->ue_context.modify_pdusession, 0, sizeof(ue_context_p->ue_context.modify_pdusession));
+ UE->nb_of_modify_pdusessions = 0;
+ UE->nb_of_failed_pdusessions = 0;
+ memset(UE->modify_pdusession, 0, sizeof(UE->modify_pdusession));
for(int i = 0; i < NR_NB_RB_MAX; i++) {
- ue_context_p->ue_context.modify_pdusession[i].xid = -1;
+ UE->modify_pdusession[i].xid = -1;
}
}
}
@@ -2280,11 +2057,9 @@ rrc_gNB_decode_dcch(
return -1;
}
- if (ue_context_p->ue_context.ng_5G_S_TMSI_Part1 != 0) {
- ue_context_p->ue_context.ng_5G_S_TMSI_Part2 =
- BIT_STRING_to_uint16(&ul_dcch_msg->message.choice.c1->choice.rrcSetupComplete->
- criticalExtensions.choice.rrcSetupComplete->
- ng_5G_S_TMSI_Value->choice.ng_5G_S_TMSI_Part2);
+ if (UE->ng_5G_S_TMSI_Part1 != 0) {
+ UE->ng_5G_S_TMSI_Part2 =
+ BIT_STRING_to_uint16(&ul_dcch_msg->message.choice.c1->choice.rrcSetupComplete->criticalExtensions.choice.rrcSetupComplete->ng_5G_S_TMSI_Value->choice.ng_5G_S_TMSI_Part2);
}
/* TODO */
@@ -2306,10 +2081,10 @@ rrc_gNB_decode_dcch(
fiveg_s_TMSI, fiveg_s_TMSI >> 38, fiveg_s_TMSI >> 38,
(fiveg_s_TMSI >> 32) & 0x3F, (fiveg_s_TMSI >> 32) & 0x3F,
(uint32_t)fiveg_s_TMSI);
- if (ue_context_p->ue_context.Initialue_identity_5g_s_TMSI.presence == true) {
- ue_context_p->ue_context.Initialue_identity_5g_s_TMSI.amf_set_id = fiveg_s_TMSI >> 38;
- ue_context_p->ue_context.Initialue_identity_5g_s_TMSI.amf_pointer = (fiveg_s_TMSI >> 32) & 0x3F;
- ue_context_p->ue_context.Initialue_identity_5g_s_TMSI.fiveg_tmsi = (uint32_t)fiveg_s_TMSI;
+ if (UE->Initialue_identity_5g_s_TMSI.presence == true) {
+ UE->Initialue_identity_5g_s_TMSI.amf_set_id = fiveg_s_TMSI >> 38;
+ UE->Initialue_identity_5g_s_TMSI.amf_pointer = (fiveg_s_TMSI >> 32) & 0x3F;
+ UE->Initialue_identity_5g_s_TMSI.fiveg_tmsi = (uint32_t)fiveg_s_TMSI;
}
}
}
@@ -2322,7 +2097,7 @@ rrc_gNB_decode_dcch(
PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP));
}
- ue_context_p->ue_context.ue_release_timer = 0;
+ UE->ue_release_timer = 0;
break;
case NR_UL_DCCH_MessageType__c1_PR_measurementReport:
@@ -2424,30 +2199,33 @@ rrc_gNB_decode_dcch(
for(i = 0;i < ul_dcch_msg->message.choice.c1->choice.ueCapabilityInformation->criticalExtensions.choice.ueCapabilityInformation->ue_CapabilityRAT_ContainerList->list.count; i++){
if(ul_dcch_msg->message.choice.c1->choice.ueCapabilityInformation->criticalExtensions.choice.ueCapabilityInformation->ue_CapabilityRAT_ContainerList->list.array[i]->rat_Type ==
NR_RAT_Type_nr){
- if(ue_context_p->ue_context.UE_Capability_nr){
- ASN_STRUCT_FREE(asn_DEF_NR_UE_NR_Capability,ue_context_p->ue_context.UE_Capability_nr);
- ue_context_p->ue_context.UE_Capability_nr = 0;
+ if (UE->UE_Capability_nr) {
+ ASN_STRUCT_FREE(asn_DEF_NR_UE_NR_Capability, UE->UE_Capability_nr);
+ UE->UE_Capability_nr = 0;
}
dec_rval = uper_decode(NULL,
- &asn_DEF_NR_UE_NR_Capability,
- (void**)&ue_context_p->ue_context.UE_Capability_nr,
- ul_dcch_msg->message.choice.c1->choice.ueCapabilityInformation->criticalExtensions.choice.ueCapabilityInformation->ue_CapabilityRAT_ContainerList->list.array[i]->ue_CapabilityRAT_Container.buf,
- ul_dcch_msg->message.choice.c1->choice.ueCapabilityInformation->criticalExtensions.choice.ueCapabilityInformation->ue_CapabilityRAT_ContainerList->list.array[i]->ue_CapabilityRAT_Container.size,
- 0,0);
+ &asn_DEF_NR_UE_NR_Capability,
+ (void **)&UE->UE_Capability_nr,
+ ul_dcch_msg->message.choice.c1->choice.ueCapabilityInformation->criticalExtensions.choice.ueCapabilityInformation->ue_CapabilityRAT_ContainerList->list.array[i]
+ ->ue_CapabilityRAT_Container.buf,
+ ul_dcch_msg->message.choice.c1->choice.ueCapabilityInformation->criticalExtensions.choice.ueCapabilityInformation->ue_CapabilityRAT_ContainerList->list.array[i]
+ ->ue_CapabilityRAT_Container.size,
+ 0,
+ 0);
if(LOG_DEBUGFLAG(DEBUG_ASN1)){
- xer_fprint(stdout,&asn_DEF_NR_UE_NR_Capability,ue_context_p->ue_context.UE_Capability_nr);
+ xer_fprint(stdout, &asn_DEF_NR_UE_NR_Capability, UE->UE_Capability_nr);
}
if((dec_rval.code != RC_OK) && (dec_rval.consumed == 0)){
LOG_E(NR_RRC,PROTOCOL_NR_RRC_CTXT_UE_FMT" Failed to decode nr UE capabilities (%zu bytes)\n",
PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP),dec_rval.consumed);
- ASN_STRUCT_FREE(asn_DEF_NR_UE_NR_Capability,ue_context_p->ue_context.UE_Capability_nr);
- ue_context_p->ue_context.UE_Capability_nr = 0;
+ ASN_STRUCT_FREE(asn_DEF_NR_UE_NR_Capability, UE->UE_Capability_nr);
+ UE->UE_Capability_nr = 0;
}
- ue_context_p->ue_context.UE_Capability_size =
- ul_dcch_msg->message.choice.c1->choice.ueCapabilityInformation->criticalExtensions.choice.ueCapabilityInformation->ue_CapabilityRAT_ContainerList->list.array[i]->ue_CapabilityRAT_Container.size;
+ UE->UE_Capability_size = ul_dcch_msg->message.choice.c1->choice.ueCapabilityInformation->criticalExtensions.choice.ueCapabilityInformation->ue_CapabilityRAT_ContainerList->list.array[i]
+ ->ue_CapabilityRAT_Container.size;
if(eutra_index != -1){
LOG_E(NR_RRC,"fatal: more than 1 eutra capability\n");
exit(1);
@@ -2457,29 +2235,33 @@ rrc_gNB_decode_dcch(
if(ul_dcch_msg->message.choice.c1->choice.ueCapabilityInformation->criticalExtensions.choice.ueCapabilityInformation->ue_CapabilityRAT_ContainerList->list.array[i]->rat_Type ==
NR_RAT_Type_eutra_nr){
- if(ue_context_p->ue_context.UE_Capability_MRDC){
- ASN_STRUCT_FREE(asn_DEF_NR_UE_MRDC_Capability,ue_context_p->ue_context.UE_Capability_MRDC);
- ue_context_p->ue_context.UE_Capability_MRDC = 0;
- }
- dec_rval = uper_decode(NULL,
- &asn_DEF_NR_UE_MRDC_Capability,
- (void**)&ue_context_p->ue_context.UE_Capability_MRDC,
- ul_dcch_msg->message.choice.c1->choice.ueCapabilityInformation->criticalExtensions.choice.ueCapabilityInformation->ue_CapabilityRAT_ContainerList->list.array[i]->ue_CapabilityRAT_Container.buf,
- ul_dcch_msg->message.choice.c1->choice.ueCapabilityInformation->criticalExtensions.choice.ueCapabilityInformation->ue_CapabilityRAT_ContainerList->list.array[i]->ue_CapabilityRAT_Container.size,
- 0,0);
+ if (UE->UE_Capability_MRDC) {
+ ASN_STRUCT_FREE(asn_DEF_NR_UE_MRDC_Capability, UE->UE_Capability_MRDC);
+ UE->UE_Capability_MRDC = 0;
+ }
+ dec_rval = uper_decode(NULL,
+ &asn_DEF_NR_UE_MRDC_Capability,
+ (void **)&UE->UE_Capability_MRDC,
+ ul_dcch_msg->message.choice.c1->choice.ueCapabilityInformation->criticalExtensions.choice.ueCapabilityInformation->ue_CapabilityRAT_ContainerList->list.array[i]
+ ->ue_CapabilityRAT_Container.buf,
+ ul_dcch_msg->message.choice.c1->choice.ueCapabilityInformation->criticalExtensions.choice.ueCapabilityInformation->ue_CapabilityRAT_ContainerList->list.array[i]
+ ->ue_CapabilityRAT_Container.size,
+ 0,
+ 0);
- if(LOG_DEBUGFLAG(DEBUG_ASN1)){
- xer_fprint(stdout,&asn_DEF_NR_UE_MRDC_Capability,ue_context_p->ue_context.UE_Capability_MRDC);
- }
+ if (LOG_DEBUGFLAG(DEBUG_ASN1)) {
+ xer_fprint(stdout, &asn_DEF_NR_UE_MRDC_Capability, UE->UE_Capability_MRDC);
+ }
if((dec_rval.code != RC_OK) && (dec_rval.consumed == 0)){
LOG_E(NR_RRC,PROTOCOL_NR_RRC_CTXT_FMT" Failed to decode nr UE capabilities (%zu bytes)\n",
PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP),dec_rval.consumed);
- ASN_STRUCT_FREE(asn_DEF_NR_UE_MRDC_Capability,ue_context_p->ue_context.UE_Capability_MRDC);
- ue_context_p->ue_context.UE_Capability_MRDC = 0;
+ ASN_STRUCT_FREE(asn_DEF_NR_UE_MRDC_Capability, UE->UE_Capability_MRDC);
+ UE->UE_Capability_MRDC = 0;
}
- ue_context_p->ue_context.UE_MRDC_Capability_size =
- ul_dcch_msg->message.choice.c1->choice.ueCapabilityInformation->criticalExtensions.choice.ueCapabilityInformation->ue_CapabilityRAT_ContainerList->list.array[i]->ue_CapabilityRAT_Container.size;
+ UE->UE_MRDC_Capability_size =
+ ul_dcch_msg->message.choice.c1->choice.ueCapabilityInformation->criticalExtensions.choice.ueCapabilityInformation->ue_CapabilityRAT_ContainerList->list.array[i]
+ ->ue_CapabilityRAT_Container.size;
}
if(ul_dcch_msg->message.choice.c1->choice.ueCapabilityInformation->criticalExtensions.choice.ueCapabilityInformation->ue_CapabilityRAT_ContainerList->list.array[i]->rat_Type ==
@@ -2497,14 +2279,13 @@ rrc_gNB_decode_dcch(
ul_dcch_msg);
}
- if(!NODE_IS_CU(RC.nrrrc[ctxt_pP->module_id]->node_type)){
- if (ue_context_p->ue_context.established_pdu_sessions_flag == 1) {
+ if (!NODE_IS_CU(gnb_rrc_inst->node_type)) {
+ if (UE->established_pdu_sessions_flag == 1) {
rrc_gNB_generate_dedicatedRRCReconfiguration(ctxt_pP, ue_context_p, NULL);
} else {
rrc_gNB_generate_defaultRRCReconfiguration(ctxt_pP, ue_context_p);
}
- }
- else{
+ } else {
/*Generate a UE context setup request message towards the DU to provide the UE
*capability info and get the updates on master cell group config from the DU*/
MessageDef *message_p;
@@ -2513,13 +2294,13 @@ rrc_gNB_decode_dcch(
//UE_IDs will be extracted from F1AP layer
req->gNB_CU_ue_id = 0;
req->gNB_DU_ue_id = 0;
- req->rnti = ue_context_p->ue_context.rnti;
- req->mcc = RC.nrrrc[ctxt_pP->module_id]->configuration.mcc[0];
- req->mnc = RC.nrrrc[ctxt_pP->module_id]->configuration.mnc[0];
- req->mnc_digit_length = RC.nrrrc[ctxt_pP->module_id]->configuration.mnc_digit_length[0];
- req->nr_cellid = RC.nrrrc[ctxt_pP->module_id]->nr_cellid;
+ req->rnti = UE->rnti;
+ req->mcc = gnb_rrc_inst->configuration.mcc[0];
+ req->mnc = gnb_rrc_inst->configuration.mnc[0];
+ req->mnc_digit_length = gnb_rrc_inst->configuration.mnc_digit_length[0];
+ req->nr_cellid = gnb_rrc_inst->nr_cellid;
- if (ue_context_p->ue_context.established_pdu_sessions_flag == 1) {
+ if (UE->established_pdu_sessions_flag == 1) {
/*Instruction towards the DU for SRB2 configuration*/
req->srbs_to_be_setup = malloc(1*sizeof(f1ap_srb_to_be_setup_t));
req->srbs_to_be_setup_length = 1;
@@ -2534,11 +2315,11 @@ rrc_gNB_decode_dcch(
LOG_I(RRC, "Length of DRB list:%d \n", req->drbs_to_be_setup_length);
DRBs[0].drb_id = 1;
DRBs[0].rlc_mode = RLC_MODE_AM;
- DRBs[0].up_ul_tnl[0].tl_address = inet_addr(RC.nrrrc[ctxt_pP->module_id]->eth_params_s.my_addr);
- DRBs[0].up_ul_tnl[0].port=RC.nrrrc[ctxt_pP->module_id]->eth_params_s.my_portd;
+ DRBs[0].up_ul_tnl[0].tl_address = inet_addr(gnb_rrc_inst->eth_params_s.my_addr);
+ DRBs[0].up_ul_tnl[0].port = gnb_rrc_inst->eth_params_s.my_portd;
DRBs[0].up_ul_tnl_length = 1;
- DRBs[0].up_dl_tnl[0].tl_address = inet_addr(RC.nrrrc[ctxt_pP->module_id]->eth_params_s.remote_addr);
- DRBs[0].up_dl_tnl[0].port=RC.nrrrc[ctxt_pP->module_id]->eth_params_s.remote_portd;
+ DRBs[0].up_dl_tnl[0].tl_address = inet_addr(gnb_rrc_inst->eth_params_s.remote_addr);
+ DRBs[0].up_dl_tnl[0].port = gnb_rrc_inst->eth_params_s.remote_portd;
DRBs[0].up_dl_tnl_length = 1;
}
if( ul_dcch_msg->message.choice.c1->choice.ueCapabilityInformation->criticalExtensions.present ==
@@ -2565,49 +2346,43 @@ rrc_gNB_decode_dcch(
itti_send_msg_to_task (TASK_CU_F1, ctxt_pP->module_id, message_p);
}
-
break;
case NR_UL_DCCH_MessageType__c1_PR_rrcReestablishmentComplete: {
LOG_DUMPMSG(NR_RRC, DEBUG_RRC, (char *)Rx_sdu, sdu_sizeP, "[MSG] NR_RRC Connection Reestablishment Complete\n");
- LOG_I(NR_RRC,
- PROTOCOL_RRC_CTXT_UE_FMT
- " RLC RB %02d --- RLC_DATA_IND %d bytes "
- "(rrcReestablishmentComplete) ---> RRC_gNB\n",
- PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),
- DCCH,
- sdu_sizeP);
+ LOG_I(NR_RRC, "RLC RB %02d --- RLC_DATA_IND %d bytes (rrcReestablishmentComplete) ---> RRC_gNB\n", DCCH, sdu_sizeP);
rnti_t reestablish_rnti = 0;
// Select C-RNTI from map
for (i = 0; i < MAX_MOBILES_PER_GNB; i++) {
- nr_reestablish_rnti_map_t *nr_reestablish_rnti_map = &(RC.nrrrc[ctxt_pP->module_id])->nr_reestablish_rnti_map[i];
+ nr_reestablish_rnti_map_t *nr_reestablish_rnti_map = &gnb_rrc_inst->nr_reestablish_rnti_map[i];
LOG_I(NR_RRC, "nr_reestablish_rnti_map[%d] UEid %lx, RNTI %04x, ctxt_pP->rntiMaybeUEid: %lx\n", i, nr_reestablish_rnti_map->ue_id, nr_reestablish_rnti_map->c_rnti, ctxt_pP->rntiMaybeUEid);
if (nr_reestablish_rnti_map->ue_id == ctxt_pP->rntiMaybeUEid) {
LOG_I(NR_RRC, "Removing nr_reestablish_rnti_map[%d] UEid %lx, RNTI %04x\n", i, nr_reestablish_rnti_map->ue_id, nr_reestablish_rnti_map->c_rnti);
reestablish_rnti = nr_reestablish_rnti_map->c_rnti;
- ue_context_p = rrc_gNB_get_ue_context(RC.nrrrc[ctxt_pP->module_id], reestablish_rnti);
+ ue_context_p = rrc_gNB_get_ue_context_by_rnti(gnb_rrc_inst, reestablish_rnti);
+ UE = &ue_context_p->ue_context;
break;
}
}
if (!ue_context_p) {
- LOG_E(NR_RRC, PROTOCOL_NR_RRC_CTXT_UE_FMT " NR_RRCReestablishmentComplete without UE context, falt\n", PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP));
+ LOG_E(NR_RRC, "NR_RRCReestablishmentComplete without UE context, fault\n");
break;
}
#if (0)
/* TODO : It may be needed if gNB goes into full stack working. */
// clear
- int UE_id = find_nr_UE_id(ctxt_pP->module_id, ctxt_pP->rntiMaybeUEid);
+ int UE_id = find_nr_UE_id(gnb_rrc_inst, ctxt_pP->rntiMaybeUEid);
if (UE_id == -1) {
LOG_E(NR_RRC, PROTOCOL_RRC_CTXT_UE_FMT " NR_RRCReestablishmentComplete without UE_id(MAC) rnti %lx, fault\n", PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), ctxt_pP->rntiMaybeUEid);
break;
}
- RC.nrmac[ctxt_pP->module_id]->UE_info.UE_sched_ctrl[UE_id].ue_reestablishment_reject_timer = 0;
+ RC.nrmac[gnb_rrc_inst]->UE_info.UE_sched_ctrl[UE_id].ue_reestablishment_reject_timer = 0;
#endif
if (ul_dcch_msg->message.choice.c1->choice.rrcReestablishmentComplete->criticalExtensions.present == NR_RRCReestablishmentComplete__criticalExtensions_PR_rrcReestablishmentComplete) {
@@ -2616,13 +2391,13 @@ rrc_gNB_decode_dcch(
gNB_MAC_INST *nrmac = RC.nrmac[ctxt_pP->module_id]; // WHAT A BEAUTIFULL RACE CONDITION !!!
mac_remove_nr_ue(nrmac, reestablish_rnti);
- ue_context_p->ue_context.ue_reestablishment_counter++;
+ UE->ue_reestablishment_counter++;
}
- // ue_context_p->ue_context.ue_release_timer = 0;
- ue_context_p->ue_context.ue_reestablishment_timer = 1;
+ // UE->ue_release_timer = 0;
+ UE->ue_reestablishment_timer = 1;
// remove UE after 100 frames after NR_RRCReestablishmentRelease is triggered
- ue_context_p->ue_context.ue_reestablishment_timer_thres = 1000;
+ UE->ue_reestablishment_timer_thres = 1000;
} break;
default:
@@ -2747,14 +2522,7 @@ void rrc_gNB_process_initial_ul_rrc_message(const f1ap_initial_ul_rrc_message_t
i = 0;
LOG_W(RRC, "initial UL RRC message nr_cellid %ld does not match RRC's %ld\n", ul_rrc->nr_cellid, RC.nrrrc[0]->nr_cellid);
}
- protocol_ctxt_t ctxt = { 0 };
- PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt, i, GNB_FLAG_YES, ul_rrc->crnti, 0, 0);
-
- nr_rrc_gNB_decode_ccch(&ctxt,
- ul_rrc->rrc_container,
- ul_rrc->rrc_container_length,
- ul_rrc->du2cu_rrc_container,
- ul_rrc->du2cu_rrc_container_length);
+ nr_rrc_gNB_decode_ccch(i, ul_rrc->crnti, ul_rrc->rrc_container, ul_rrc->rrc_container_length, ul_rrc->du2cu_rrc_container, ul_rrc->du2cu_rrc_container_length);
if (ul_rrc->rrc_container)
free(ul_rrc->rrc_container);
@@ -2774,11 +2542,13 @@ void rrc_gNB_process_dc_overall_timeout(const module_id_t gnb_mod_idP, x2ap_ENDC
rrc_remove_nsa_user(rrc, m->rnti);
}
-static int rrc_process_DU_DL(MessageDef *msg_p, const char *msg_name, instance_t instance) {
+static int rrc_process_DU_DL(MessageDef *msg_p, instance_t instance)
+{
NRDuDlReq_t * req=&NRDuDlReq(msg_p);
protocol_ctxt_t ctxt = {.rntiMaybeUEid = req->rnti, .module_id = instance, .instance = instance, .enb_flag = 1, .eNB_index = instance};
- gNB_RRC_INST *rrc = RC.nrrrc[ctxt.module_id];
- struct rrc_gNB_ue_context_s *ue_context_p = rrc_gNB_get_ue_context(rrc, ctxt.rntiMaybeUEid);
+ gNB_RRC_INST *rrc = RC.nrrrc[instance];
+ rrc_gNB_ue_context_t *ue_context_p = rrc_gNB_get_ue_context_by_rnti(rrc, req->rnti);
+ gNB_RRC_UE_t *UE = &ue_context_p->ue_context;
if (req->srb_id == 0) {
AssertFatal(0 == 1, "should pass through dl_rrc_message()\n");
@@ -2831,19 +2601,18 @@ static int rrc_process_DU_DL(MessageDef *msg_p, const char *msg_name, instance_
if (SRB_configList != NULL) {
for (i = 0; (i < SRB_configList->list.count) && (i < 3); i++) {
if (SRB_configList->list.array[i]->srb_Identity == 1 ) {
- ue_context_p->ue_context.Srb1.Active=1;
- } else if (SRB_configList->list.array[i]->srb_Identity == 2 ) {
- ue_context_p->ue_context.Srb2.Active=1;
- ue_context_p->ue_context.Srb2.Srb_info.Srb_id=2;
- LOG_I(F1AP, "[DU %d] SRB2 is now active\n",ctxt.module_id);
- } else {
- LOG_W(F1AP, "[DU %d] invalide SRB identity %ld\n",ctxt.module_id,
- SRB_configList->list.array[i]->srb_Identity);
- }
- }
- }
-
- if (DRB_configList != NULL) {
+ UE->Srb[1].Active = 1;
+ } else if (SRB_configList->list.array[i]->srb_Identity == 2) {
+ UE->Srb[2].Active = 1;
+ UE->Srb[2].Srb_info.Srb_id = 2;
+ LOG_I(F1AP, "[DU %d] SRB2 is now active\n", ctxt.module_id);
+ } else {
+ LOG_W(F1AP, "[DU %d] invalide SRB identity %ld\n", ctxt.module_id, SRB_configList->list.array[i]->srb_Identity);
+ }
+ }
+ }
+
+ if (DRB_configList != NULL) {
for (i = 0; i < DRB_configList->list.count; i++) { // num max DRB (11-3-8)
if (DRB_configList->list.array[i]) {
drb_id = (int)DRB_configList->list.array[i]->drb_Identity;
@@ -2855,8 +2624,8 @@ static int rrc_process_DU_DL(MessageDef *msg_p, const char *msg_name, instance_
// (int)*DRB_configList->list.array[i]->logicalChannelIdentity);
- if (ue_context_p->ue_context.DRB_active[drb_id] == 0) {
- ue_context_p->ue_context.DRB_active[drb_id] = 1;
+ if (UE->DRB_active[drb_id] == 0) {
+ UE->DRB_active[drb_id] = 1;
// logicalChannelIdentity
// rrc_mac_config_req_eNB
}
@@ -2963,13 +2732,13 @@ static int rrc_process_DU_DL(MessageDef *msg_p, const char *msg_name, instance_
return 0;
}
-static void rrc_DU_process_ue_context_setup_request(MessageDef *msg_p, const char *msg_name, instance_t instance){
-
+static void rrc_DU_process_ue_context_setup_request(MessageDef *msg_p, instance_t instance)
+{
f1ap_ue_context_setup_t * req=&F1AP_UE_CONTEXT_SETUP_REQ(msg_p);
- protocol_ctxt_t ctxt = {.rntiMaybeUEid = req->rnti, .module_id = instance, .instance = instance, .enb_flag = 1, .eNB_index = instance};
- gNB_RRC_INST *rrc = RC.nrrrc[ctxt.module_id];
- gNB_MAC_INST *mac = RC.nrmac[ctxt.module_id];
- struct rrc_gNB_ue_context_s *ue_context_p = rrc_gNB_get_ue_context(rrc, ctxt.rntiMaybeUEid);
+ gNB_RRC_INST *rrc = RC.nrrrc[instance];
+ gNB_MAC_INST *mac = RC.nrmac[instance];
+ rrc_gNB_ue_context_t *ue_context_p = rrc_gNB_get_ue_context_by_rnti(rrc, req->rnti);
+ gNB_RRC_UE_t *UE = &ue_context_p->ue_context;
MessageDef *message_p;
message_p = itti_alloc_new_message (TASK_RRC_GNB, 0, F1AP_UE_CONTEXT_SETUP_RESP);
f1ap_ue_context_setup_t * resp=&F1AP_UE_CONTEXT_SETUP_RESP(message_p);
@@ -2997,30 +2766,29 @@ static void rrc_DU_process_ue_context_setup_request(MessageDef *msg_p, const cha
if(ue_CapabilityRAT_ContainerList->list.array[i]->rat_Type ==
NR_RAT_Type_nr){
LOG_I(NR_RRC, "DU received NR_RAT_Type_nr UE capabilities Info through the UE Context Setup Request from the CU \n");
- if(ue_context_p->ue_context.UE_Capability_nr){
- ASN_STRUCT_FREE(asn_DEF_NR_UE_NR_Capability,ue_context_p->ue_context.UE_Capability_nr);
- ue_context_p->ue_context.UE_Capability_nr = 0;
+ if (UE->UE_Capability_nr) {
+ ASN_STRUCT_FREE(asn_DEF_NR_UE_NR_Capability, UE->UE_Capability_nr);
+ UE->UE_Capability_nr = 0;
}
dec_rval = uper_decode(NULL,
- &asn_DEF_NR_UE_NR_Capability,
- (void**)&ue_context_p->ue_context.UE_Capability_nr,
- ue_CapabilityRAT_ContainerList->list.array[i]->ue_CapabilityRAT_Container.buf,
- ue_CapabilityRAT_ContainerList->list.array[i]->ue_CapabilityRAT_Container.size,
- 0,0);
+ &asn_DEF_NR_UE_NR_Capability,
+ (void **)&UE->UE_Capability_nr,
+ ue_CapabilityRAT_ContainerList->list.array[i]->ue_CapabilityRAT_Container.buf,
+ ue_CapabilityRAT_ContainerList->list.array[i]->ue_CapabilityRAT_Container.size,
+ 0,
+ 0);
if(LOG_DEBUGFLAG(DEBUG_ASN1)){
- xer_fprint(stdout,&asn_DEF_NR_UE_NR_Capability,ue_context_p->ue_context.UE_Capability_nr);
+ xer_fprint(stdout, &asn_DEF_NR_UE_NR_Capability, UE->UE_Capability_nr);
}
if((dec_rval.code != RC_OK) && (dec_rval.consumed == 0)){
- LOG_E(NR_RRC, PROTOCOL_NR_RRC_CTXT_UE_FMT" Failed to decode nr UE capabilities (%zu bytes)\n",
- PROTOCOL_NR_RRC_CTXT_UE_ARGS(&ctxt),dec_rval.consumed);
- ASN_STRUCT_FREE(asn_DEF_NR_UE_NR_Capability,ue_context_p->ue_context.UE_Capability_nr);
- ue_context_p->ue_context.UE_Capability_nr = 0;
+ LOG_E(NR_RRC, "UE %04x Failed to decode nr UE capabilities (%zu bytes)\n", req->rnti, dec_rval.consumed);
+ ASN_STRUCT_FREE(asn_DEF_NR_UE_NR_Capability, UE->UE_Capability_nr);
+ UE->UE_Capability_nr = 0;
}
- ue_context_p->ue_context.UE_Capability_size =
- ue_CapabilityRAT_ContainerList->list.array[i]->ue_CapabilityRAT_Container.size;
+ UE->UE_Capability_size = ue_CapabilityRAT_ContainerList->list.array[i]->ue_CapabilityRAT_Container.size;
if(NR_index != -1){
LOG_E(NR_RRC,"fatal: more than 1 eutra capability\n");
exit(1);
@@ -3031,28 +2799,27 @@ static void rrc_DU_process_ue_context_setup_request(MessageDef *msg_p, const cha
if(ue_CapabilityRAT_ContainerList->list.array[i]->rat_Type ==
NR_RAT_Type_eutra_nr){
LOG_I(NR_RRC, "DU received NR_RAT_Type_eutra_nr UE capabilities Info through the UE Context Setup Request from the CU \n");
- if(ue_context_p->ue_context.UE_Capability_MRDC){
- ASN_STRUCT_FREE(asn_DEF_NR_UE_MRDC_Capability,ue_context_p->ue_context.UE_Capability_MRDC);
- ue_context_p->ue_context.UE_Capability_MRDC = 0;
+ if (UE->UE_Capability_MRDC) {
+ ASN_STRUCT_FREE(asn_DEF_NR_UE_MRDC_Capability, UE->UE_Capability_MRDC);
+ UE->UE_Capability_MRDC = 0;
}
dec_rval = uper_decode(NULL,
- &asn_DEF_NR_UE_MRDC_Capability,
- (void**)&ue_context_p->ue_context.UE_Capability_MRDC,
- ue_CapabilityRAT_ContainerList->list.array[i]->ue_CapabilityRAT_Container.buf,
- ue_CapabilityRAT_ContainerList->list.array[i]->ue_CapabilityRAT_Container.size,
- 0,0);
+ &asn_DEF_NR_UE_MRDC_Capability,
+ (void **)&UE->UE_Capability_MRDC,
+ ue_CapabilityRAT_ContainerList->list.array[i]->ue_CapabilityRAT_Container.buf,
+ ue_CapabilityRAT_ContainerList->list.array[i]->ue_CapabilityRAT_Container.size,
+ 0,
+ 0);
if(LOG_DEBUGFLAG(DEBUG_ASN1)){
- xer_fprint(stdout,&asn_DEF_NR_UE_MRDC_Capability,ue_context_p->ue_context.UE_Capability_MRDC);
+ xer_fprint(stdout, &asn_DEF_NR_UE_MRDC_Capability, UE->UE_Capability_MRDC);
}
if((dec_rval.code != RC_OK) && (dec_rval.consumed == 0)){
- LOG_E(NR_RRC,PROTOCOL_NR_RRC_CTXT_FMT" Failed to decode nr UE capabilities (%zu bytes)\n",
- PROTOCOL_NR_RRC_CTXT_UE_ARGS(&ctxt),dec_rval.consumed);
- ASN_STRUCT_FREE(asn_DEF_NR_UE_MRDC_Capability,ue_context_p->ue_context.UE_Capability_MRDC);
- ue_context_p->ue_context.UE_Capability_MRDC = 0;
+ LOG_E(NR_RRC, "UE %04x Failed to decode nr UE capabilities (%zu bytes)\n", req->rnti, dec_rval.consumed);
+ ASN_STRUCT_FREE(asn_DEF_NR_UE_MRDC_Capability, UE->UE_Capability_MRDC);
+ UE->UE_Capability_MRDC = 0;
}
- ue_context_p->ue_context.UE_MRDC_Capability_size =
- ue_CapabilityRAT_ContainerList->list.array[i]->ue_CapabilityRAT_Container.size;
+ UE->UE_MRDC_Capability_size = ue_CapabilityRAT_ContainerList->list.array[i]->ue_CapabilityRAT_Container.size;
}
if(ue_CapabilityRAT_ContainerList->list.array[i]->rat_Type ==
@@ -3070,11 +2837,11 @@ static void rrc_DU_process_ue_context_setup_request(MessageDef *msg_p, const cha
uint8_t SRBs_before_new_addition = 0;
if(req->srbs_to_be_setup_length>0){
- if(ue_context_p->ue_context.SRB_configList == NULL){
+ if (UE->SRB_configList == NULL) {
LOG_W(NR_RRC, "The SRB list of the UE context is empty before the addition of new SRB at the DU \n");
- ue_context_p->ue_context.SRB_configList = CALLOC(1, sizeof(*ue_context_p->ue_context.SRB_configList));
+ UE->SRB_configList = CALLOC(1, sizeof(*UE->SRB_configList));
}
- SRB_configList = ue_context_p->ue_context.SRB_configList;
+ SRB_configList = UE->SRB_configList;
SRBs_before_new_addition = SRB_configList->list.count;
for (int i=0; isrbs_to_be_setup_length; i++){
SRB2_config = CALLOC(1, sizeof(*SRB2_config));
@@ -3090,10 +2857,10 @@ static void rrc_DU_process_ue_context_setup_request(MessageDef *msg_p, const cha
uint8_t nb_drb_to_setup = 0;
long drb_priority[NGAP_MAX_DRBS_PER_UE];
if(req->drbs_to_be_setup_length>0){
- if(ue_context_p->ue_context.DRB_configList == NULL){
- ue_context_p->ue_context.DRB_configList = CALLOC(1, sizeof(*ue_context_p->ue_context.DRB_configList));
+ if (UE->DRB_configList == NULL) {
+ UE->DRB_configList = CALLOC(1, sizeof(*UE->DRB_configList));
}
- DRB_configList = ue_context_p->ue_context.DRB_configList;
+ DRB_configList = UE->DRB_configList;
nb_drb_to_setup = req->drbs_to_be_setup_length;
for (int i=0; idrbs_to_be_setup_length; i++){
DRB_config = CALLOC(1, sizeof(*DRB_config));
@@ -3124,8 +2891,8 @@ static void rrc_DU_process_ue_context_setup_request(MessageDef *msg_p, const cha
if (req->srbs_to_be_setup_length > 0 || req->drbs_to_be_setup_length>0)
// FIXME: fill_mastercellGroupConfig() won't fill the right priorities or
// bearer IDs for the DRBs
- fill_mastercellGroupConfig(cellGroupConfig, ue_context_p->ue_context.masterCellGroup, rrc->um_on_default_drb, SRB2_config ? 1 : 0, drb_id_to_setup_start, nb_drb_to_setup, drb_priority);
-
+ fill_mastercellGroupConfig(cellGroupConfig, UE->masterCellGroup, rrc->um_on_default_drb, SRB2_config ? 1 : 0, drb_id_to_setup_start, nb_drb_to_setup, drb_priority);
+ protocol_ctxt_t ctxt = {.rntiMaybeUEid = req->rnti, .module_id = instance, .instance = instance, .enb_flag = 1, .eNB_index = instance};
apply_macrlc_config(rrc, ue_context_p, &ctxt);
if(req->rrc_container_length > 0){
@@ -3141,7 +2908,7 @@ static void rrc_DU_process_ue_context_setup_request(MessageDef *msg_p, const cha
/* Fill the UE context setup response ITTI message to send to F1AP */
resp->gNB_CU_ue_id = req->gNB_CU_ue_id;
- resp->rnti = ctxt.rntiMaybeUEid;
+ resp->rnti = req->rnti;
if(DRB_configList){
if(DRB_configList->list.count > 0){
resp->drbs_to_be_setup = calloc(1,DRB_configList->list.count*sizeof(f1ap_drb_to_be_setup_t));
@@ -3179,26 +2946,27 @@ static void rrc_DU_process_ue_context_setup_request(MessageDef *msg_p, const cha
resp->du_to_cu_rrc_information = calloc(1, sizeof(du_to_cu_rrc_information_t));
resp->du_to_cu_rrc_information->cellGroupConfig = calloc(1,1024);
asn_enc_rval_t enc_rval = uper_encode_to_buffer(&asn_DEF_NR_CellGroupConfig,
- NULL,
- ue_context_p->ue_context.masterCellGroup, //(void *)cellGroupConfig,
- resp->du_to_cu_rrc_information->cellGroupConfig,
- 1024);
+ NULL,
+ UE->masterCellGroup, //(void *)cellGroupConfig,
+ resp->du_to_cu_rrc_information->cellGroupConfig,
+ 1024);
if (enc_rval.encoded == -1) {
LOG_E(F1AP,"Could not encode ue_context.masterCellGroup, failed element %s\n",enc_rval.failed_type->name);
exit(-1);
}
resp->du_to_cu_rrc_information->cellGroupConfig_length = (enc_rval.encoded+7)>>3;
free(cellGroupConfig);
- itti_send_msg_to_task (TASK_DU_F1, ctxt.module_id, message_p);
+ itti_send_msg_to_task(TASK_DU_F1, instance, message_p);
}
-static void rrc_DU_process_ue_context_modification_request(MessageDef *msg_p, const char *msg_name, instance_t instance){
-
+static void rrc_DU_process_ue_context_modification_request(MessageDef *msg_p, instance_t instance)
+{
f1ap_ue_context_setup_t * req=&F1AP_UE_CONTEXT_MODIFICATION_REQ(msg_p);
protocol_ctxt_t ctxt = {.rntiMaybeUEid = req->rnti, .module_id = instance, .instance = instance, .enb_flag = 1, .eNB_index = instance};
gNB_RRC_INST *rrc = RC.nrrrc[ctxt.module_id];
gNB_MAC_INST *mac = RC.nrmac[ctxt.module_id];
- struct rrc_gNB_ue_context_s *ue_context_p = rrc_gNB_get_ue_context(rrc, ctxt.rntiMaybeUEid);
+ rrc_gNB_ue_context_t *ue_context_p = rrc_gNB_get_ue_context_by_rnti(rrc, req->rnti);
+ gNB_RRC_UE_t *UE = &ue_context_p->ue_context;
MessageDef *message_p;
message_p = itti_alloc_new_message (TASK_RRC_GNB, 0, F1AP_UE_CONTEXT_MODIFICATION_RESP);
f1ap_ue_context_setup_t * resp=&F1AP_UE_CONTEXT_MODIFICATION_RESP(message_p);
@@ -3211,11 +2979,11 @@ static void rrc_DU_process_ue_context_modification_request(MessageDef *msg_p, co
uint8_t SRBs_before_new_addition = 0;
if(req->srbs_to_be_setup_length>0){
- if(ue_context_p->ue_context.SRB_configList == NULL){
+ if (UE->SRB_configList == NULL) {
LOG_W(NR_RRC, "The SRB list of the UE context is empty before the addition of new SRB at the DU \n");
- ue_context_p->ue_context.SRB_configList = CALLOC(1, sizeof(*ue_context_p->ue_context.SRB_configList));
+ UE->SRB_configList = CALLOC(1, sizeof(*UE->SRB_configList));
}
- SRB_configList = ue_context_p->ue_context.SRB_configList;
+ SRB_configList = UE->SRB_configList;
SRBs_before_new_addition = SRB_configList->list.count;
for (int i=0; isrbs_to_be_setup_length; i++){
SRB2_config = CALLOC(1, sizeof(*SRB2_config));
@@ -3230,10 +2998,10 @@ static void rrc_DU_process_ue_context_modification_request(MessageDef *msg_p, co
int drb_id_to_setup_start = 0;
long drb_priority[NGAP_MAX_DRBS_PER_UE];
if(req->drbs_to_be_setup_length>0){
- if(ue_context_p->ue_context.DRB_configList == NULL){
- ue_context_p->ue_context.DRB_configList = CALLOC(1, sizeof(*ue_context_p->ue_context.DRB_configList));
+ if (UE->DRB_configList == NULL) {
+ UE->DRB_configList = CALLOC(1, sizeof(*UE->DRB_configList));
}
- DRB_configList = ue_context_p->ue_context.DRB_configList;
+ DRB_configList = UE->DRB_configList;
for (int i=0; idrbs_to_be_setup_length; i++){
DRB_config = CALLOC(1, sizeof(*DRB_config));
DRB_config->drb_Identity = req->drbs_to_be_setup[i].drb_id;
@@ -3262,24 +3030,18 @@ static void rrc_DU_process_ue_context_modification_request(MessageDef *msg_p, co
if(req->srbs_to_be_setup_length>0 || req->drbs_to_be_setup_length>0){
cellGroupConfig = calloc(1, sizeof(NR_CellGroupConfig_t));
- fill_mastercellGroupConfig(cellGroupConfig,
- ue_context_p->ue_context.masterCellGroup,
- rrc->um_on_default_drb,
- drb_id_to_setup_start < 2 ? 1 : 0,
- drb_id_to_setup_start,
- req->drbs_to_be_setup_length,
- drb_priority);
- apply_macrlc_config(rrc, ue_context_p, &ctxt);
+ fill_mastercellGroupConfig(cellGroupConfig, UE->masterCellGroup, rrc->um_on_default_drb, drb_id_to_setup_start < 2 ? 1 : 0, drb_id_to_setup_start, req->drbs_to_be_setup_length, drb_priority);
+ apply_macrlc_config(rrc, ue_context_p, &ctxt);
}
if(req->ReconfigComplOutcome == RRCreconf_failure){
LOG_W(NR_RRC, "CU reporting RRC Reconfiguration failure \n");
}
else if(req->ReconfigComplOutcome == RRCreconf_success){
LOG_I(NR_RRC, "CU reporting RRC Reconfiguration success \n");
- if(ue_context_p->ue_context.DRB_configList!=NULL){
+ if (UE->DRB_configList != NULL) {
LOG_I(NR_RRC, "Send first DDD buffer status reporting towards the CU through an ITTI message to gtp-u \n");
- uint8_t drb_id = ue_context_p->ue_context.DRB_configList->list.array[0]->drb_Identity;
- rnti_t rnti = ue_context_p->ue_context.rnti;
+ uint8_t drb_id = UE->DRB_configList->list.array[0]->drb_Identity;
+ rnti_t rnti = UE->rnti;
int rlc_tx_buffer_space = nr_rlc_get_available_tx_space(rnti, drb_id + 3);
LOG_I(NR_RRC, "Reported in DDD drb_id:%d, rnti:%d\n", drb_id, rnti);
MessageDef *msg = itti_alloc_new_message_sized(TASK_RRC_GNB, 0, GTPV1U_DU_BUFFER_REPORT_REQ,
@@ -3290,7 +3052,6 @@ static void rrc_DU_process_ue_context_modification_request(MessageDef *msg_p, co
req->buffer_availability = rlc_tx_buffer_space; //10000000; //Hardcoding to be removed and read the actual RLC buffer availability instead
extern instance_t DUuniqInstance;
itti_send_msg_to_task(TASK_GTPV1_U, DUuniqInstance, msg);
-
}
}
@@ -3333,21 +3094,22 @@ static void rrc_DU_process_ue_context_modification_request(MessageDef *msg_p, co
resp->du_to_cu_rrc_information = calloc(1,sizeof(du_to_cu_rrc_information_t));
resp->du_to_cu_rrc_information->cellGroupConfig = calloc(1,1024);
asn_enc_rval_t enc_rval = uper_encode_to_buffer(&asn_DEF_NR_CellGroupConfig,
- NULL,
- ue_context_p->ue_context.masterCellGroup, //(void *)cellGroupConfig,
- resp->du_to_cu_rrc_information->cellGroupConfig,
- 1024);
+ NULL,
+ UE->masterCellGroup, //(void *)cellGroupConfig,
+ resp->du_to_cu_rrc_information->cellGroupConfig,
+ 1024);
resp->du_to_cu_rrc_information->cellGroupConfig_length = (enc_rval.encoded+7)>>3;
//}
itti_send_msg_to_task (TASK_DU_F1, ctxt.module_id, message_p);
}
-static void rrc_CU_process_ue_context_setup_response(MessageDef *msg_p, const char *msg_name, instance_t instance){
-
+static void rrc_CU_process_ue_context_setup_response(MessageDef *msg_p, instance_t instance)
+{
f1ap_ue_context_setup_t * resp=&F1AP_UE_CONTEXT_SETUP_RESP(msg_p);
protocol_ctxt_t ctxt = {.rntiMaybeUEid = resp->rnti, .module_id = instance, .instance = instance, .enb_flag = 1, .eNB_index = instance};
gNB_RRC_INST *rrc = RC.nrrrc[ctxt.module_id];
- struct rrc_gNB_ue_context_s *ue_context_p = rrc_gNB_get_ue_context(rrc, ctxt.rntiMaybeUEid);
+ rrc_gNB_ue_context_t *ue_context_p = rrc_gNB_get_ue_context_by_rnti(rrc, resp->rnti);
+ gNB_RRC_UE_t *UE = &ue_context_p->ue_context;
NR_CellGroupConfig_t *cellGroupConfig = NULL;
asn_dec_rval_t dec_rval = uper_decode_complete( NULL,
@@ -3364,29 +3126,26 @@ static void rrc_CU_process_ue_context_setup_response(MessageDef *msg_p, const ch
}
//xer_fprint(stdout,&asn_DEF_NR_CellGroupConfig, cellGroupConfig);
- if(ue_context_p->ue_context.masterCellGroup == NULL){
- ue_context_p->ue_context.masterCellGroup = calloc(1, sizeof(NR_CellGroupConfig_t));
+ if (UE->masterCellGroup == NULL) {
+ UE->masterCellGroup = calloc(1, sizeof(NR_CellGroupConfig_t));
}
if(cellGroupConfig->rlc_BearerToAddModList!=NULL){
- if(ue_context_p->ue_context.masterCellGroup->rlc_BearerToAddModList != NULL){
- int ue_ctxt_rlc_Bearers = ue_context_p->ue_context.masterCellGroup->rlc_BearerToAddModList->list.count;
+ if (UE->masterCellGroup->rlc_BearerToAddModList != NULL) {
+ int ue_ctxt_rlc_Bearers = UE->masterCellGroup->rlc_BearerToAddModList->list.count;
for(int i=ue_ctxt_rlc_Bearers; irlc_BearerToAddModList->list.count; i++){
- asn1cSeqAdd(&ue_context_p->ue_context.masterCellGroup->rlc_BearerToAddModList->list,
- cellGroupConfig->rlc_BearerToAddModList->list.array[i-ue_ctxt_rlc_Bearers]);
+ asn1cSeqAdd(&UE->masterCellGroup->rlc_BearerToAddModList->list, cellGroupConfig->rlc_BearerToAddModList->list.array[i - ue_ctxt_rlc_Bearers]);
}
- }
- else{
+ } else {
LOG_W(NR_RRC, "Empty rlc_BearerToAddModList at ue_context of the CU before filling the updates from UE context setup response \n");
- ue_context_p->ue_context.masterCellGroup->rlc_BearerToAddModList = calloc(1, sizeof(*cellGroupConfig->rlc_BearerToAddModList));
- memcpy(ue_context_p->ue_context.masterCellGroup->rlc_BearerToAddModList, cellGroupConfig->rlc_BearerToAddModList,
- sizeof(*cellGroupConfig->rlc_BearerToAddModList));
+ UE->masterCellGroup->rlc_BearerToAddModList = calloc(1, sizeof(*cellGroupConfig->rlc_BearerToAddModList));
+ memcpy(UE->masterCellGroup->rlc_BearerToAddModList, cellGroupConfig->rlc_BearerToAddModList, sizeof(*cellGroupConfig->rlc_BearerToAddModList));
}
}
if (LOG_DEBUGFLAG(DEBUG_ASN1)) {
- xer_fprint(stdout, &asn_DEF_NR_CellGroupConfig, ue_context_p->ue_context.masterCellGroup);
+ xer_fprint(stdout, &asn_DEF_NR_CellGroupConfig, UE->masterCellGroup);
}
- if (ue_context_p->ue_context.established_pdu_sessions_flag == 1) {
+ if (UE->established_pdu_sessions_flag == 1) {
fill_DRB_configList(&ctxt, ue_context_p);
rrc_gNB_generate_dedicatedRRCReconfiguration(&ctxt, ue_context_p, cellGroupConfig);
} else {
@@ -3395,20 +3154,20 @@ static void rrc_CU_process_ue_context_setup_response(MessageDef *msg_p, const ch
free(cellGroupConfig->rlc_BearerToAddModList);
free(cellGroupConfig);
-
}
-static void rrc_CU_process_ue_context_modification_response(MessageDef *msg_p, const char *msg_name, instance_t instance){
-
+static void rrc_CU_process_ue_context_modification_response(MessageDef *msg_p, instance_t instance)
+{
f1ap_ue_context_setup_t *resp=&F1AP_UE_CONTEXT_SETUP_RESP(msg_p);
protocol_ctxt_t ctxt = {.rntiMaybeUEid = resp->rnti, .module_id = instance, .instance = instance, .enb_flag = 1, .eNB_index = instance};
gNB_RRC_INST *rrc = RC.nrrrc[ctxt.module_id];
- struct rrc_gNB_ue_context_s *ue_context_p = rrc_gNB_get_ue_context(rrc, ctxt.rntiMaybeUEid);
+ rrc_gNB_ue_context_t *ue_context_p = rrc_gNB_get_ue_context_by_rnti(rrc, resp->rnti);
+ gNB_RRC_UE_t *UE = &ue_context_p->ue_context;
e1ap_bearer_setup_req_t req = {0};
- req.numPDUSessionsMod = ue_context_p->ue_context.nb_of_pdusessions;
- req.gNB_cu_cp_ue_id = ue_context_p->ue_context.gNB_ue_ngap_id;
- req.rnti = ue_context_p->ue_context.rnti;
+ req.numPDUSessionsMod = UE->nb_of_pdusessions;
+ req.gNB_cu_cp_ue_id = UE->gNB_ue_ngap_id;
+ req.rnti = UE->rnti;
for (int i=0; i < req.numPDUSessionsMod; i++) {
req.pduSessionMod[i].numDRB2Modify = resp->drbs_to_be_setup_length;
for (int j=0; j < resp->drbs_to_be_setup_length; j++) {
@@ -3442,28 +3201,25 @@ static void rrc_CU_process_ue_context_modification_response(MessageDef *msg_p, c
}
//xer_fprint(stdout,&asn_DEF_NR_CellGroupConfig, cellGroupConfig);
- if(ue_context_p->ue_context.masterCellGroup == NULL){
- ue_context_p->ue_context.masterCellGroup = calloc(1, sizeof(NR_CellGroupConfig_t));
+ if (UE->masterCellGroup == NULL) {
+ UE->masterCellGroup = calloc(1, sizeof(NR_CellGroupConfig_t));
}
if(cellGroupConfig->rlc_BearerToAddModList!=NULL){
- if(ue_context_p->ue_context.masterCellGroup->rlc_BearerToAddModList != NULL){
- int ue_ctxt_rlc_Bearers = ue_context_p->ue_context.masterCellGroup->rlc_BearerToAddModList->list.count;
+ if (UE->masterCellGroup->rlc_BearerToAddModList != NULL) {
+ int ue_ctxt_rlc_Bearers = UE->masterCellGroup->rlc_BearerToAddModList->list.count;
for(int i=ue_ctxt_rlc_Bearers; irlc_BearerToAddModList->list.count; i++){
- asn1cSeqAdd(&ue_context_p->ue_context.masterCellGroup->rlc_BearerToAddModList->list,
- cellGroupConfig->rlc_BearerToAddModList->list.array[i-ue_ctxt_rlc_Bearers]);
+ asn1cSeqAdd(&UE->masterCellGroup->rlc_BearerToAddModList->list, cellGroupConfig->rlc_BearerToAddModList->list.array[i - ue_ctxt_rlc_Bearers]);
}
- }
- else{
+ } else {
LOG_W(NR_RRC, "Empty rlc_BearerToAddModList at ue_context of the CU before filling the updates from UE context setup response \n");
- ue_context_p->ue_context.masterCellGroup->rlc_BearerToAddModList = calloc(1, sizeof(*cellGroupConfig->rlc_BearerToAddModList));
- memcpy(ue_context_p->ue_context.masterCellGroup->rlc_BearerToAddModList, cellGroupConfig->rlc_BearerToAddModList,
- sizeof(*cellGroupConfig->rlc_BearerToAddModList));
+ UE->masterCellGroup->rlc_BearerToAddModList = calloc(1, sizeof(*cellGroupConfig->rlc_BearerToAddModList));
+ memcpy(UE->masterCellGroup->rlc_BearerToAddModList, cellGroupConfig->rlc_BearerToAddModList, sizeof(*cellGroupConfig->rlc_BearerToAddModList));
}
}
LOG_I(NR_RRC, "Updated master cell group configuration stored at the UE context of the CU:\n");
if (LOG_DEBUGFLAG(DEBUG_ASN1)) {
- xer_fprint(stdout, &asn_DEF_NR_CellGroupConfig, ue_context_p->ue_context.masterCellGroup);
+ xer_fprint(stdout, &asn_DEF_NR_CellGroupConfig, UE->masterCellGroup);
}
rrc_gNB_generate_dedicatedRRCReconfiguration(&ctxt, ue_context_p, cellGroupConfig);
@@ -3632,19 +3388,20 @@ static int get_dl_mimo_layers(const gNB_RRC_INST *rrc, const NR_UE_NR_Capability
void nr_rrc_subframe_process(protocol_ctxt_t *const ctxt_pP, const int CC_id) {
MessageDef *msg;
+ gNB_RRC_INST *rrc = RC.nrrrc[ctxt_pP->module_id];
rrc_gNB_ue_context_t *ue_context_p = NULL;
- RB_FOREACH(ue_context_p, rrc_nr_ue_tree_s, &(RC.nrrrc[ctxt_pP->module_id]->rrc_ue_head)) {
- ctxt_pP->rntiMaybeUEid = ue_context_p->ue_id_rnti;
- gNB_MAC_INST *nrmac=RC.nrmac[ctxt_pP->module_id]; //WHAT A BEAUTIFULL RACE CONDITION !!!
+ RB_FOREACH(ue_context_p, rrc_nr_ue_tree_s, &rrc->rrc_ue_head)
+ {
+ gNB_RRC_UE_t *UE = &ue_context_p->ue_context;
+ ctxt_pP->rntiMaybeUEid = UE->rnti;
- if (ue_context_p->ue_context.ul_failure_timer > 0) {
- ue_context_p->ue_context.ul_failure_timer++;
+ if (UE->ul_failure_timer > 0) {
+ UE->ul_failure_timer++;
- if (ue_context_p->ue_context.ul_failure_timer >= 20000) {
+ if (UE->ul_failure_timer >= 20000) {
// remove UE after 20 seconds after MAC (or else) has indicated UL failure
- LOG_I(RRC, "Removing UE %x instance, because of uplink failure timer timeout\n",
- ue_context_p->ue_context.rnti);
- if(ue_context_p->ue_context.StatusRrc >= NR_RRC_CONNECTED){
+ LOG_I(RRC, "Removing UE %x instance, because of uplink failure timer timeout\n", UE->rnti);
+ if (UE->StatusRrc >= NR_RRC_CONNECTED) {
rrc_gNB_send_NGAP_UE_CONTEXT_RELEASE_REQ(
ctxt_pP->module_id,
ue_context_p,
@@ -3652,26 +3409,28 @@ void nr_rrc_subframe_process(protocol_ctxt_t *const ctxt_pP, const int CC_id) {
NGAP_CAUSE_RADIO_NETWORK_RADIO_CONNECTION_WITH_UE_LOST);
}
- // Remove here the MAC and RRC context when RRC is not connected or gNB is not connected to CN5G
- if(ue_context_p->ue_context.StatusRrc < NR_RRC_CONNECTED || ue_context_p->ue_context.gNB_ue_ngap_id == 0) {
- if(!NODE_IS_CU(RC.nrrrc[ctxt_pP->instance]->node_type)){
- mac_remove_nr_ue(nrmac, ctxt_pP->rntiMaybeUEid);
+ // Remove here the MAC and RRC context when RRC is not connected
+ if (UE->StatusRrc < NR_RRC_CONNECTED) {
+ if (!NODE_IS_CU(rrc->node_type)) {
+ gNB_MAC_INST *nrmac = RC.nrmac[ctxt_pP->module_id]; // WHAT A BEAUTIFULL RACE CONDITION !!!
+ mac_remove_nr_ue(nrmac, UE->rnti);
rrc_rlc_remove_ue(ctxt_pP);
pdcp_remove_UE(ctxt_pP);
/* remove RRC UE Context */
- ue_context_p = rrc_gNB_get_ue_context(RC.nrrrc[ctxt_pP->module_id], ctxt_pP->rntiMaybeUEid);
+ ue_context_p = rrc_gNB_get_ue_context_by_rnti(rrc, UE->rnti);
if (ue_context_p) {
- rrc_gNB_remove_ue_context(ctxt_pP, RC.nrrrc[ctxt_pP->module_id], ue_context_p);
- LOG_I(NR_RRC, "remove UE %lx \n", ctxt_pP->rntiMaybeUEid);
+ LOG_I(NR_RRC, "remove UE %04x \n", UE->rnti);
+ rrc_gNB_remove_ue_context(rrc, ue_context_p);
+ break; // We must not access this UE context
}
}
// In case of CU trigger UE context release command towards the DU
- else{
+ else {
MessageDef *message_p;
message_p = itti_alloc_new_message (TASK_RRC_GNB, 0, F1AP_UE_CONTEXT_RELEASE_CMD);
f1ap_ue_context_release_cmd_t *rel_cmd=&F1AP_UE_CONTEXT_RELEASE_CMD (message_p);
- rel_cmd->rnti = ctxt_pP->rntiMaybeUEid;
+ rel_cmd->rnti = UE->rnti;
rel_cmd->cause = F1AP_CAUSE_RADIO_NETWORK;
rel_cmd->cause_value = 10; // 10 = F1AP_CauseRadioNetwork_normal_release
itti_send_msg_to_task(TASK_CU_F1, ctxt_pP->module_id, message_p);
@@ -3682,25 +3441,24 @@ void nr_rrc_subframe_process(protocol_ctxt_t *const ctxt_pP, const int CC_id) {
}
}
- if (ue_context_p->ue_context.ue_release_timer_rrc > 0) {
- ue_context_p->ue_context.ue_release_timer_rrc++;
+ if (UE->ue_release_timer_rrc > 0) {
+ UE->ue_release_timer_rrc++;
- if (ue_context_p->ue_context.ue_release_timer_rrc >= ue_context_p->ue_context.ue_release_timer_thres_rrc) {
- LOG_I(NR_RRC, "Removing UE %x instance after UE_CONTEXT_RELEASE_Complete (ue_release_timer_rrc timeout)\n",
- ue_context_p->ue_context.rnti);
- ue_context_p->ue_context.ue_release_timer_rrc = 0;
- mac_remove_nr_ue(nrmac, ctxt_pP->rntiMaybeUEid);
+ if (UE->ue_release_timer_rrc >= UE->ue_release_timer_thres_rrc) {
+ LOG_I(NR_RRC, "Removing UE %x instance after UE_CONTEXT_RELEASE_Complete (ue_release_timer_rrc timeout)\n", UE->rnti);
+ UE->ue_release_timer_rrc = 0;
+ if (!NODE_IS_CU(RC.nrrrc[0]->node_type)) {
+ gNB_MAC_INST *nrmac = RC.nrmac[ctxt_pP->module_id]; // WHAT A BEAUTIFULL RACE CONDITION !!!
+ mac_remove_nr_ue(nrmac, UE->rnti);
+ }
rrc_rlc_remove_ue(ctxt_pP);
pdcp_remove_UE(ctxt_pP);
- newGtpuDeleteAllTunnels(ctxt_pP->instance, ctxt_pP->rntiMaybeUEid);
+ newGtpuDeleteAllTunnels(ctxt_pP->instance, UE->rnti);
/* remove RRC UE Context */
- ue_context_p = rrc_gNB_get_ue_context(RC.nrrrc[ctxt_pP->module_id], ctxt_pP->rntiMaybeUEid);
- if (ue_context_p) {
- rrc_gNB_remove_ue_context(ctxt_pP, RC.nrrrc[ctxt_pP->module_id], ue_context_p);
- LOG_I(NR_RRC, "remove UE %lx \n", ctxt_pP->rntiMaybeUEid);
- }
+ LOG_I(NR_RRC, "remove UE %04x \n", UE->rnti);
+ rrc_gNB_remove_ue_context(rrc, ue_context_p);
break; // break RB_FOREACH
}
}
@@ -3741,14 +3499,15 @@ void prepare_and_send_ue_context_modification_f1(rrc_gNB_ue_context_t *ue_contex
/*Generate a UE context modification request message towards the DU to instruct the DU
*for SRB2 and DRB configuration and get the updates on master cell group config from the DU*/
+ gNB_RRC_UE_t *UE = &ue_context_p->ue_context;
protocol_ctxt_t ctxt = {0};
- PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, 0, GNB_FLAG_YES, ue_context_p->ue_context.rnti, 0, 0, 0);
+ PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, 0, GNB_FLAG_YES, UE->rnti, 0, 0, 0);
// TODO: So many hard codings
MessageDef *message_p;
message_p = itti_alloc_new_message (TASK_RRC_GNB, 0, F1AP_UE_CONTEXT_MODIFICATION_REQ);
f1ap_ue_context_setup_t *req=&F1AP_UE_CONTEXT_MODIFICATION_REQ(message_p);
- req->rnti = ue_context_p->ue_context.rnti;
+ req->rnti = UE->rnti;
req->mcc = RC.nrrrc[ctxt.module_id]->configuration.mcc[0];
req->mnc = RC.nrrrc[ctxt.module_id]->configuration.mnc[0];
req->mnc_digit_length = RC.nrrrc[ctxt.module_id]->configuration.mnc_digit_length[0];
@@ -3780,10 +3539,10 @@ void prepare_and_send_ue_context_modification_f1(rrc_gNB_ue_context_t *ue_contex
void rrc_gNB_process_e1_bearer_context_setup_resp(e1ap_bearer_setup_resp_t *resp, instance_t instance) {
// Find the UE context from UE ID and send ITTI message to F1AP to send UE context modification message to DU
- uint16_t ue_initial_id = 0; // Making an invalid UE initial ID
- rrc_gNB_ue_context_t *ue_context_p = rrc_gNB_get_ue_context_from_ngap_ids(instance, ue_initial_id, resp->gNB_cu_cp_ue_id);
+ rrc_gNB_ue_context_t *ue_context_p = rrc_gNB_get_ue_context(RC.nrrrc[instance], resp->gNB_cu_cp_ue_id);
+ gNB_RRC_UE_t *UE = &ue_context_p->ue_context;
protocol_ctxt_t ctxt = {0};
- PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, 0, GNB_FLAG_YES, ue_context_p->ue_context.rnti, 0, 0, 0);
+ PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, 0, GNB_FLAG_YES, UE->rnti, 0, 0, 0);
gtpv1u_gnb_create_tunnel_resp_t create_tunnel_resp={0};
create_tunnel_resp.num_tunnels = resp->numPDUSessions;
@@ -3834,9 +3593,10 @@ static void write_rrc_stats(const gNB_RRC_INST *rrc)
rrc_gNB_ue_context_t *ue_context_p = NULL;
/* cast is necessary to eliminate warning "discards ‘const’ qualifier" */
- RB_FOREACH(ue_context_p, rrc_nr_ue_tree_s, &((gNB_RRC_INST *)rrc)->rrc_ue_head) {
- const rnti_t rnti = ue_context_p->ue_id_rnti;
+ RB_FOREACH(ue_context_p, rrc_nr_ue_tree_s, &((gNB_RRC_INST *)rrc)->rrc_ue_head)
+ {
const gNB_RRC_UE_t *ue_ctxt = &ue_context_p->ue_context;
+ const rnti_t rnti = ue_ctxt->rnti;
fprintf(f, "NR RRC UE rnti %04x:", rnti);
@@ -3865,8 +3625,7 @@ static void write_rrc_stats(const gNB_RRC_INST *rrc)
///---------------------------------------------------------------------------------------------------------------///
///---------------------------------------------------------------------------------------------------------------///
void *rrc_gnb_task(void *args_p) {
- MessageDef *msg_p;
- const char *msg_name_p;
+ MessageDef *msg_p;
instance_t instance;
int result;
//SRB_INFO *srb_info_p;
@@ -3883,9 +3642,9 @@ void *rrc_gnb_task(void *args_p) {
while (1) {
// Wait for a message
itti_receive_msg(TASK_RRC_GNB, &msg_p);
- msg_name_p = ITTI_MSG_NAME(msg_p);
+ const char *msg_name_p = ITTI_MSG_NAME(msg_p);
instance = ITTI_MSG_DESTINATION_INSTANCE(msg_p);
-
+ LOG_D(NR_RRC, "Received Msg %s\n", msg_name_p);
switch (ITTI_MSG_ID(msg_p)) {
case TERMINATE_MESSAGE:
LOG_W(NR_RRC, " *** Exiting NR_RRC thread\n");
@@ -3935,53 +3694,50 @@ void *rrc_gnb_task(void *args_p) {
break;
case NGAP_DOWNLINK_NAS:
- rrc_gNB_process_NGAP_DOWNLINK_NAS(msg_p, msg_name_p, instance, &rrc_gNB_mui);
+ rrc_gNB_process_NGAP_DOWNLINK_NAS(msg_p, instance, &rrc_gNB_mui);
break;
case NGAP_PDUSESSION_SETUP_REQ:
- rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ(msg_p, msg_name_p, instance);
+ rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ(msg_p, instance);
break;
case NGAP_PDUSESSION_MODIFY_REQ:
- rrc_gNB_process_NGAP_PDUSESSION_MODIFY_REQ(msg_p, msg_name_p, instance);
+ rrc_gNB_process_NGAP_PDUSESSION_MODIFY_REQ(msg_p, instance);
break;
case NGAP_PDUSESSION_RELEASE_COMMAND:
- rrc_gNB_process_NGAP_PDUSESSION_RELEASE_COMMAND(msg_p, msg_name_p, instance);
+ rrc_gNB_process_NGAP_PDUSESSION_RELEASE_COMMAND(msg_p, instance);
break;
/* Messages from gNB app */
case NRRRC_CONFIGURATION_REQ:
- LOG_I(NR_RRC, "[gNB %ld] Received %s : %p\n", instance, msg_name_p,&NRRRC_CONFIGURATION_REQ(msg_p));
- openair_rrc_gNB_configuration(GNB_INSTANCE_TO_MODULE_ID(instance), &NRRRC_CONFIGURATION_REQ(msg_p));
+ openair_rrc_gNB_configuration(instance, &NRRRC_CONFIGURATION_REQ(msg_p));
break;
/* Messages from F1AP task */
case F1AP_SETUP_REQ:
- AssertFatal(NODE_IS_CU(RC.nrrrc[instance]->node_type),
- "should not receive F1AP_SETUP_REQUEST, need call by CU!\n");
- LOG_I(NR_RRC,"[gNB %ld] Received %s : %p\n", instance, msg_name_p, &F1AP_SETUP_REQ(msg_p));
+ AssertFatal(NODE_IS_CU(RC.nrrrc[instance]->node_type), "should not receive F1AP_SETUP_REQUEST, need call by CU!\n");
rrc_gNB_process_f1_setup_req(&F1AP_SETUP_REQ(msg_p));
break;
case NR_DU_RRC_DL_INDICATION:
- rrc_process_DU_DL(msg_p, msg_name_p, instance);
+ rrc_process_DU_DL(msg_p, instance);
break;
case F1AP_UE_CONTEXT_SETUP_REQ:
- rrc_DU_process_ue_context_setup_request(msg_p, msg_name_p, instance);
+ rrc_DU_process_ue_context_setup_request(msg_p, instance);
break;
case F1AP_UE_CONTEXT_SETUP_RESP:
- rrc_CU_process_ue_context_setup_response(msg_p, msg_name_p, instance);
+ rrc_CU_process_ue_context_setup_response(msg_p, instance);
break;
case F1AP_UE_CONTEXT_MODIFICATION_RESP:
- rrc_CU_process_ue_context_modification_response(msg_p, msg_name_p, instance);
+ rrc_CU_process_ue_context_modification_response(msg_p, instance);
break;
case F1AP_UE_CONTEXT_MODIFICATION_REQ:
- rrc_DU_process_ue_context_modification_request(msg_p, msg_name_p, instance);
+ rrc_DU_process_ue_context_modification_request(msg_p, instance);
break;
case F1AP_UE_CONTEXT_RELEASE_CMD:
@@ -3992,7 +3748,7 @@ void *rrc_gnb_task(void *args_p) {
/* Messages from X2AP */
case X2AP_ENDC_SGNB_ADDITION_REQ:
LOG_I(NR_RRC, "Received ENDC sgNB addition request from X2AP \n");
- rrc_gNB_process_AdditionRequestInformation(GNB_INSTANCE_TO_MODULE_ID(instance), &X2AP_ENDC_SGNB_ADDITION_REQ(msg_p));
+ rrc_gNB_process_AdditionRequestInformation(instance, &X2AP_ENDC_SGNB_ADDITION_REQ(msg_p));
break;
case X2AP_ENDC_SGNB_RECONF_COMPLETE:
@@ -4000,37 +3756,35 @@ void *rrc_gnb_task(void *args_p) {
break;
case NGAP_INITIAL_CONTEXT_SETUP_REQ:
- rrc_gNB_process_NGAP_INITIAL_CONTEXT_SETUP_REQ(msg_p, msg_name_p, instance);
+ rrc_gNB_process_NGAP_INITIAL_CONTEXT_SETUP_REQ(msg_p, instance);
break;
case X2AP_ENDC_SGNB_RELEASE_REQUEST:
LOG_I(NR_RRC, "Received ENDC sgNB release request from X2AP \n");
- rrc_gNB_process_release_request(GNB_INSTANCE_TO_MODULE_ID(instance), &X2AP_ENDC_SGNB_RELEASE_REQUEST(msg_p));
+ rrc_gNB_process_release_request(instance, &X2AP_ENDC_SGNB_RELEASE_REQUEST(msg_p));
break;
case X2AP_ENDC_DC_OVERALL_TIMEOUT:
- rrc_gNB_process_dc_overall_timeout(GNB_INSTANCE_TO_MODULE_ID(instance), &X2AP_ENDC_DC_OVERALL_TIMEOUT(msg_p));
+ rrc_gNB_process_dc_overall_timeout(instance, &X2AP_ENDC_DC_OVERALL_TIMEOUT(msg_p));
break;
case NGAP_UE_CONTEXT_RELEASE_REQ:
- rrc_gNB_process_NGAP_UE_CONTEXT_RELEASE_REQ(msg_p, msg_name_p, instance);
+ rrc_gNB_process_NGAP_UE_CONTEXT_RELEASE_REQ(msg_p, instance);
break;
case NGAP_UE_CONTEXT_RELEASE_COMMAND:
- rrc_gNB_process_NGAP_UE_CONTEXT_RELEASE_COMMAND(msg_p, msg_name_p, instance);
+ rrc_gNB_process_NGAP_UE_CONTEXT_RELEASE_COMMAND(msg_p, instance);
break;
case E1AP_SETUP_REQ:
- LOG_I(NR_RRC, "Received E1AP_SETUP_REQ for instance %d\n", (int)instance);
rrc_gNB_process_e1_setup_req(&E1AP_SETUP_REQ(msg_p), instance);
break;
case E1AP_BEARER_CONTEXT_SETUP_RESP:
- LOG_I(NR_RRC, "Received E1AP_BEARER_CONTEXT_SETUP_RESP for instance %d\n", (int)instance);
rrc_gNB_process_e1_bearer_context_setup_resp(&E1AP_BEARER_CONTEXT_SETUP_RESP(msg_p), instance);
case NGAP_PAGING_IND:
- rrc_gNB_process_PAGING_IND(msg_p, msg_name_p, instance);
+ rrc_gNB_process_PAGING_IND(msg_p, instance);
break;
default:
@@ -4054,27 +3808,20 @@ rrc_gNB_generate_SecurityModeCommand(
{
uint8_t buffer[100];
uint8_t size;
+ gNB_RRC_UE_t *ue_p = &ue_context_pP->ue_context;
T(T_ENB_RRC_SECURITY_MODE_COMMAND, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rntiMaybeUEid));
- NR_IntegrityProtAlgorithm_t integrity_algorithm = (NR_IntegrityProtAlgorithm_t)ue_context_pP->ue_context.integrity_algorithm;
- size = do_NR_SecurityModeCommand(
- ctxt_pP,
- buffer,
- rrc_gNB_get_next_transaction_identifier(ctxt_pP->module_id),
- ue_context_pP->ue_context.ciphering_algorithm,
- &integrity_algorithm);
+ NR_IntegrityProtAlgorithm_t integrity_algorithm = (NR_IntegrityProtAlgorithm_t)ue_p->integrity_algorithm;
+ size = do_NR_SecurityModeCommand(ctxt_pP, buffer, rrc_gNB_get_next_transaction_identifier(ctxt_pP->module_id), ue_p->ciphering_algorithm, integrity_algorithm);
LOG_DUMPMSG(NR_RRC,DEBUG_RRC,(char *)buffer,size,"[MSG] RRC Security Mode Command\n");
- LOG_I(NR_RRC,
- PROTOCOL_NR_RRC_CTXT_UE_FMT" Logical Channel DL-DCCH, Generate SecurityModeCommand (bytes %d)\n",
- PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP),
- size);
+ LOG_I(NR_RRC, "UE %04x Logical Channel DL-DCCH, Generate SecurityModeCommand (bytes %d)\n", ue_p->rnti, size);
switch (RC.nrrrc[ctxt_pP->module_id]->node_type) {
case ngran_gNB_CU:
case ngran_gNB_CUCP:
// create an ITTI message
- memcpy(ue_context_pP->ue_context.Srb1.Srb_info.Tx_buffer.Payload, buffer, size);
- ue_context_pP->ue_context.Srb1.Srb_info.Tx_buffer.payload_size = size;
+ memcpy(ue_p->Srb[1].Srb_info.Tx_buffer.Payload, buffer, size);
+ ue_p->Srb[1].Srb_info.Tx_buffer.payload_size = size;
LOG_I(NR_RRC,"calling rrc_data_req :securityModeCommand\n");
nr_rrc_data_req(ctxt_pP,
@@ -4186,10 +3933,12 @@ rrc_gNB_generate_RRCRelease(
{
uint8_t buffer[RRC_BUF_SIZE] = {0};
int size = do_NR_RRCRelease(buffer, RRC_BUF_SIZE, rrc_gNB_get_next_transaction_identifier(ctxt_pP->module_id));
- ue_context_pP->ue_context.ue_reestablishment_timer = 0;
- ue_context_pP->ue_context.ue_release_timer = 0;
- ue_context_pP->ue_context.ul_failure_timer = 0;
- ue_context_pP->ue_context.ue_release_timer_rrc = 0;
+ gNB_RRC_UE_t *ue_p = &ue_context_pP->ue_context;
+
+ ue_p->ue_reestablishment_timer = 0;
+ ue_p->ue_release_timer = 0;
+ ue_p->ul_failure_timer = 0;
+ ue_p->ue_release_timer_rrc = 0;
LOG_I(NR_RRC,
PROTOCOL_NR_RRC_CTXT_UE_FMT" Logical Channel DL-DCCH, Generate RRCRelease (bytes %d)\n",
PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP),
@@ -4220,8 +3969,8 @@ rrc_gNB_generate_RRCRelease(
buffer,
PDCP_TRANSMISSION_MODE_CONTROL);
- rrc_gNB_send_NGAP_UE_CONTEXT_RELEASE_COMPLETE(ctxt_pP->instance, ue_context_pP->ue_context.gNB_ue_ngap_id);
- ue_context_pP->ue_context.ue_release_timer_rrc = 1;
+ rrc_gNB_send_NGAP_UE_CONTEXT_RELEASE_COMPLETE(ctxt_pP->instance, ue_p->gNB_ue_ngap_id);
+ ue_p->ue_release_timer_rrc = 1;
}
}
diff --git a/openair2/RRC/NR/rrc_gNB_GTPV1U.c b/openair2/RRC/NR/rrc_gNB_GTPV1U.c
index d2831dcf5b..1322317b3e 100644
--- a/openair2/RRC/NR/rrc_gNB_GTPV1U.c
+++ b/openair2/RRC/NR/rrc_gNB_GTPV1U.c
@@ -44,68 +44,64 @@
extern RAN_CONTEXT_t RC;
-int
-rrc_gNB_process_GTPV1U_CREATE_TUNNEL_RESP(
- const protocol_ctxt_t *const ctxt_pP,
- const gtpv1u_enb_create_tunnel_resp_t *const create_tunnel_resp_pP,
- uint8_t *inde_list
-) {
- int i;
- struct rrc_gNB_ue_context_s *ue_context_p = NULL;
-
- if (create_tunnel_resp_pP) {
- LOG_D(RRC, PROTOCOL_RRC_CTXT_UE_FMT" RX CREATE_TUNNEL_RESP num tunnels %u \n",
- PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),
- create_tunnel_resp_pP->num_tunnels);
- ue_context_p = rrc_gNB_get_ue_context(RC.nrrrc[ctxt_pP->module_id], ctxt_pP->rntiMaybeUEid);
-
- for (i = 0; i < create_tunnel_resp_pP->num_tunnels; i++) {
- ue_context_p->ue_context.gnb_gtp_teid[inde_list[i]] = create_tunnel_resp_pP->enb_S1u_teid[i];
- ue_context_p->ue_context.gnb_gtp_addrs[inde_list[i]] = create_tunnel_resp_pP->enb_addr;
- ue_context_p->ue_context.gnb_gtp_ebi[inde_list[i]] = create_tunnel_resp_pP->eps_bearer_id[i];
- LOG_I(RRC, PROTOCOL_RRC_CTXT_UE_FMT" rrc_eNB_process_GTPV1U_CREATE_TUNNEL_RESP tunnel (%u, %u) bearer UE context index %u, msg index %u, id %u, gtp addr len %d \n",
- PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),
- create_tunnel_resp_pP->enb_S1u_teid[i],
- ue_context_p->ue_context.gnb_gtp_teid[inde_list[i]],
- inde_list[i],
- i,
- create_tunnel_resp_pP->eps_bearer_id[i],
- create_tunnel_resp_pP->enb_addr.length);
- }
-
- return 0;
- } else {
+int rrc_gNB_process_GTPV1U_CREATE_TUNNEL_RESP(const protocol_ctxt_t *const ctxt_pP, const gtpv1u_enb_create_tunnel_resp_t *const create_tunnel_resp_pP, uint8_t *inde_list)
+{
+ if (!create_tunnel_resp_pP) {
+ LOG_E(NR_RRC, "create_tunnel_resp_pP error\n");
return -1;
}
+
+ LOG_D(RRC, PROTOCOL_RRC_CTXT_UE_FMT " RX CREATE_TUNNEL_RESP num tunnels %u \n", PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), create_tunnel_resp_pP->num_tunnels);
+ rrc_gNB_ue_context_t *ue_context_p = rrc_gNB_get_ue_context_by_rnti(RC.nrrrc[ctxt_pP->module_id], ctxt_pP->rntiMaybeUEid);
+ if (!ue_context_p) {
+ LOG_E(NR_RRC, "UE table error\n");
+ return -1;
+ }
+ for (int i = 0; i < create_tunnel_resp_pP->num_tunnels; i++) {
+ ue_context_p->ue_context.gnb_gtp_teid[inde_list[i]] = create_tunnel_resp_pP->enb_S1u_teid[i];
+ ue_context_p->ue_context.gnb_gtp_addrs[inde_list[i]] = create_tunnel_resp_pP->enb_addr;
+ ue_context_p->ue_context.gnb_gtp_ebi[inde_list[i]] = create_tunnel_resp_pP->eps_bearer_id[i];
+ LOG_I(RRC,
+ PROTOCOL_RRC_CTXT_UE_FMT " rrc_eNB_process_GTPV1U_CREATE_TUNNEL_RESP tunnel (%u, %u) bearer UE context index %u, msg index %u, id %u, gtp addr len %d \n",
+ PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),
+ create_tunnel_resp_pP->enb_S1u_teid[i],
+ ue_context_p->ue_context.gnb_gtp_teid[inde_list[i]],
+ inde_list[i],
+ i,
+ create_tunnel_resp_pP->eps_bearer_id[i],
+ create_tunnel_resp_pP->enb_addr.length);
+ }
+
+ return 0;
}
int nr_rrc_gNB_process_GTPV1U_CREATE_TUNNEL_RESP(const protocol_ctxt_t *const ctxt_pP, const gtpv1u_gnb_create_tunnel_resp_t *const create_tunnel_resp_pP, int offset)
{
- int i;
- struct rrc_gNB_ue_context_s *ue_context_p = NULL;
-
- if (create_tunnel_resp_pP) {
- LOG_D(NR_RRC, PROTOCOL_NR_RRC_CTXT_UE_FMT" RX CREATE_TUNNEL_RESP num tunnels %u \n",
- PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP),
- create_tunnel_resp_pP->num_tunnels);
- ue_context_p = rrc_gNB_get_ue_context(RC.nrrrc[ctxt_pP->module_id], ctxt_pP->rntiMaybeUEid);
-
- for (i = 0; i < create_tunnel_resp_pP->num_tunnels; i++) {
- ue_context_p->ue_context.gnb_gtp_teid[i + offset] = create_tunnel_resp_pP->gnb_NGu_teid[i];
- ue_context_p->ue_context.gnb_gtp_addrs[i + offset] = create_tunnel_resp_pP->gnb_addr;
- ue_context_p->ue_context.gnb_gtp_psi[i + offset] = create_tunnel_resp_pP->pdusession_id[i];
- LOG_I(NR_RRC,
- PROTOCOL_NR_RRC_CTXT_UE_FMT " nr_rrc_gNB_process_GTPV1U_CREATE_TUNNEL_RESP tunnel (%u, %u) bearer UE context index %u, id %u, gtp addr len %d \n",
- PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP),
- create_tunnel_resp_pP->gnb_NGu_teid[i],
- ue_context_p->ue_context.gnb_gtp_teid[i + offset],
- i,
- create_tunnel_resp_pP->pdusession_id[i],
- create_tunnel_resp_pP->gnb_addr.length);
- }
-
- return 0;
- } else {
+ if (!create_tunnel_resp_pP) {
+ LOG_E(NR_RRC, "create_tunnel_resp_pP error\n");
return -1;
}
+
+ LOG_D(NR_RRC, PROTOCOL_NR_RRC_CTXT_UE_FMT " RX CREATE_TUNNEL_RESP num tunnels %u \n", PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP), create_tunnel_resp_pP->num_tunnels);
+ rrc_gNB_ue_context_t *ue_context_p = rrc_gNB_get_ue_context_by_rnti(RC.nrrrc[ctxt_pP->module_id], ctxt_pP->rntiMaybeUEid);
+ if (!ue_context_p) {
+ LOG_E(NR_RRC, "UE table error\n");
+ return -1;
+ }
+
+ for (int i = 0; i < create_tunnel_resp_pP->num_tunnels; i++) {
+ ue_context_p->ue_context.gnb_gtp_teid[i + offset] = create_tunnel_resp_pP->gnb_NGu_teid[i];
+ ue_context_p->ue_context.gnb_gtp_addrs[i + offset] = create_tunnel_resp_pP->gnb_addr;
+ ue_context_p->ue_context.gnb_gtp_psi[i + offset] = create_tunnel_resp_pP->pdusession_id[i];
+ LOG_I(NR_RRC,
+ PROTOCOL_NR_RRC_CTXT_UE_FMT " nr_rrc_gNB_process_GTPV1U_CREATE_TUNNEL_RESP tunnel (%u, %u) bearer UE context index %u, id %u, gtp addr len %d \n",
+ PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP),
+ create_tunnel_resp_pP->gnb_NGu_teid[i],
+ ue_context_p->ue_context.gnb_gtp_teid[i + offset],
+ i,
+ create_tunnel_resp_pP->pdusession_id[i],
+ create_tunnel_resp_pP->gnb_addr.length);
+ }
+
+ return 0;
}
diff --git a/openair2/RRC/NR/rrc_gNB_NGAP.c b/openair2/RRC/NR/rrc_gNB_NGAP.c
index cb24040c9e..262bfec2a9 100644
--- a/openair2/RRC/NR/rrc_gNB_NGAP.c
+++ b/openair2/RRC/NR/rrc_gNB_NGAP.c
@@ -54,16 +54,21 @@
#include "RRC/NR/MESSAGES/asn1_msg.h"
#include "NR_UERadioAccessCapabilityInformation.h"
#include "NR_UE-CapabilityRAT-ContainerList.h"
-#include "NGAP_Cause.h"
#include "NGAP_CauseRadioNetwork.h"
#include "f1ap_messages_types.h"
#include "openair2/E1AP/e1ap_asnc.h"
-
+#include "NGAP_asn_constant.h"
+#include "NGAP_PDUSessionResourceSetupRequestTransfer.h"
+#include "NGAP_PDUSessionResourceModifyRequestTransfer.h"
+#include "NGAP_ProtocolIE-Field.h"
+#include "NGAP_GTPTunnel.h"
+#include "NGAP_QosFlowSetupRequestItem.h"
+#include "NGAP_QosFlowAddOrModifyRequestItem.h"
+#include "NGAP_NonDynamic5QIDescriptor.h"
+#include "conversions.h"
+#include "RRC/NR/rrc_gNB_radio_bearers.h"
extern RAN_CONTEXT_t RC;
-/* Value to indicate an invalid UE initial id */
-static const uint16_t UE_INITIAL_ID_INVALID = 0;
-
/* Masks for NGAP Encryption algorithms, NEA0 is always supported (not coded) */
static const uint16_t NGAP_ENCRYPTION_NEA1_MASK = 0x8000;
static const uint16_t NGAP_ENCRYPTION_NEA2_MASK = 0x4000;
@@ -76,190 +81,7 @@ static const uint16_t NGAP_INTEGRITY_NIA3_MASK = 0x2000;
#define INTEGRITY_ALGORITHM_NONE NR_IntegrityProtAlgorithm_nia0
-/*! \fn uint16_t get_next_ue_initial_id(uint8_t mod_id)
- *\brief provide an UE initial ID for NGAP initial communication.
- *\param mod_id Instance ID of gNB.
- *\return the UE initial ID.
- */
-//------------------------------------------------------------------------------
-static uint16_t
-get_next_ue_initial_id(
- const module_id_t mod_id
-)
-//------------------------------------------------------------------------------
-{
- static uint16_t ue_initial_id[NUMBER_OF_gNB_MAX];
- ue_initial_id[mod_id]++;
-
- /* Never use UE_INITIAL_ID_INVALID this is the invalid id! */
- if (ue_initial_id[mod_id] == UE_INITIAL_ID_INVALID) {
- ue_initial_id[mod_id]++;
- }
-
- return ue_initial_id[mod_id];
-}
-
-//------------------------------------------------------------------------------
-/*
-* Get the UE NG struct containing hashtables NG_id/UE_id.
-* Is also used to set the NG_id of the UE, depending on inputs.
-*/
-struct rrc_ue_ngap_ids_s *
-rrc_gNB_NGAP_get_ue_ids(
- gNB_RRC_INST *const rrc_instance_pP,
- const uint16_t ue_initial_id,
- const uint32_t gNB_ue_ngap_idP
-)
-//------------------------------------------------------------------------------
-{
- rrc_ue_ngap_ids_t *result = NULL;
- rrc_ue_ngap_ids_t *result2 = NULL;
- /*****************************/
- instance_t instance = 0;
- ngap_gNB_instance_t *ngap_gNB_instance_p = NULL;
- ngap_gNB_ue_context_t *ue_desc_p = NULL;
- rrc_gNB_ue_context_t *ue_context_p = NULL;
- /*****************************/
- hashtable_rc_t h_rc;
-
- if (ue_initial_id != UE_INITIAL_ID_INVALID) {
- h_rc = hashtable_get(rrc_instance_pP->initial_id2_ngap_ids, (hash_key_t)ue_initial_id, (void **)&result);
-
- if (h_rc == HASH_TABLE_OK) {
- if (gNB_ue_ngap_idP > 0) {
- h_rc = hashtable_get(rrc_instance_pP->ngap_id2_ngap_ids, (hash_key_t)gNB_ue_ngap_idP, (void **)&result2);
-
- if (h_rc != HASH_TABLE_OK) { // this case is equivalent to associate gNB_ue_ngap_idP and ue_initial_id
- result2 = malloc(sizeof(*result2));
-
- if (NULL != result2) {
- *result2 = *result;
- result2->gNB_ue_ngap_id = gNB_ue_ngap_idP;
- result->gNB_ue_ngap_id = gNB_ue_ngap_idP;
- h_rc = hashtable_insert(rrc_instance_pP->ngap_id2_ngap_ids, (hash_key_t)gNB_ue_ngap_idP, result2);
-
- if (h_rc != HASH_TABLE_OK) {
- LOG_E(NGAP, "[gNB %ld] Error while hashtable_insert in ngap_id2_ngap_ids gNB_ue_ngap_idP %"PRIu32"\n",
- rrc_instance_pP - RC.nrrrc[0],
- gNB_ue_ngap_idP);
- }
- }
- } else { // here we should check that the association was done correctly
- if ((result->ue_initial_id != result2->ue_initial_id) || (result->gNB_ue_ngap_id != result2->gNB_ue_ngap_id)) {
- LOG_E(NGAP, "[gNB %ld] Error while hashtable_get, two rrc_ue_ngap_ids_t that should be equal, are not:\n \
- ue_initial_id 1 = %"PRIu16",\n \
- ue_initial_id 2 = %"PRIu16",\n \
- gNB_ue_ngap_idP 1 = %"PRIu32",\n \
- gNB_ue_ngap_idP 2 = %"PRIu32"\n",
- rrc_instance_pP - RC.nrrrc[0],
- result->ue_initial_id,
- result2->ue_initial_id,
- result->gNB_ue_ngap_id,
- result2->gNB_ue_ngap_id);
- // Still return *result
- }
- }
- } // end if if (gNB_ue_ngap_idP > 0)
- } else { // end if (h_rc == HASH_TABLE_OK)
- LOG_E(NGAP, "[gNB %ld] In hashtable_get, couldn't find in initial_id2_ngap_ids ue_initial_id %"PRIu16"\n",
- rrc_instance_pP - RC.nrrrc[0],
- ue_initial_id);
- return NULL;
- /*
- * At the moment this is written, this case shouldn't (cannot) happen and is equivalent to an error.
- * One could try to find the struct instance based on ngap_id2_ngap_ids and gNB_ue_ngap_idP (if > 0),
- * but this behavior is not expected at the moment.
- */
- } // end else (h_rc != HASH_TABLE_OK)
- } else { // end if (ue_initial_id != UE_INITIAL_ID_INVALID)
- if (gNB_ue_ngap_idP > 0) {
- h_rc = hashtable_get(rrc_instance_pP->ngap_id2_ngap_ids, (hash_key_t)gNB_ue_ngap_idP, (void **)&result);
-
- if (h_rc != HASH_TABLE_OK) {
- /*
- * This case is uncommon, but can happen when:
- * -> if the first NAS message was a Detach Request (non exhaustiv), the UE RRC context exist
- * but is not associated with gNB_ue_ngap_id
- * -> ... (?)
- */
- LOG_E(NGAP, "[gNB %ld] In hashtable_get, couldn't find in ngap_id2_ngap_ids gNB_ue_ngap_idP %"PRIu32", trying to find it through NGAP context\n",
- rrc_instance_pP - RC.nrrrc[0],
- gNB_ue_ngap_idP);
- instance = GNB_MODULE_ID_TO_INSTANCE(rrc_instance_pP - RC.nrrrc[0]); // get gNB instance
- ngap_gNB_instance_p = ngap_gNB_get_instance(instance); // get ngap_gNB_instance
-
- if (ngap_gNB_instance_p != NULL) {
- ue_desc_p = ngap_gNB_get_ue_context(ngap_gNB_instance_p, gNB_ue_ngap_idP); // get s1ap_eNB_ue_context
- } else {
- LOG_E(NGAP, "[gNB instance %ld] Couldn't find the gNB NGAP context\n",
- instance);
- return NULL;
- }
-
- if (ue_desc_p != NULL) {
- struct ngap_gNB_ue_context_s *ngap_ue_context_p = NULL;
-
- if ((ngap_ue_context_p = RB_REMOVE(ngap_ue_map, &ngap_gNB_instance_p->ngap_ue_head, ue_desc_p)) != NULL) {
- LOG_E(NR_RRC, "Removed UE context gNB_ue_ngap_id %u\n", ngap_ue_context_p->gNB_ue_ngap_id);
- ngap_gNB_free_ue_context(ngap_ue_context_p);
- } else {
- LOG_E(NR_RRC, "Removing UE context gNB_ue_ngap_id %u: did not find context\n",ue_desc_p->gNB_ue_ngap_id);
- }
-
- return NULL; //skip the operation below to avoid loop
- result = rrc_gNB_NGAP_get_ue_ids(rrc_instance_pP, ue_desc_p->ue_initial_id, gNB_ue_ngap_idP);
-
- if (ue_desc_p->ue_initial_id != UE_INITIAL_ID_INVALID) {
- result = rrc_gNB_NGAP_get_ue_ids(rrc_instance_pP, ue_desc_p->ue_initial_id, gNB_ue_ngap_idP);
-
- if (result != NULL) {
- ue_context_p = rrc_gNB_get_ue_context(RC.nrrrc[GNB_INSTANCE_TO_MODULE_ID(instance)], result->ue_rnti);
-
- if ((ue_context_p != NULL) && (ue_context_p->ue_context.gNB_ue_ngap_id == 0)) {
- ue_context_p->ue_context.gNB_ue_ngap_id = gNB_ue_ngap_idP;
- } else {
- LOG_E(NR_RRC, "[gNB %ld] Incoherence between RRC context and NGAP context (%d != %d) for UE RNTI %d or UE RRC context doesn't exist\n",
- rrc_instance_pP - RC.nrrrc[0],
- (ue_context_p==NULL)?99999:ue_context_p->ue_context.gNB_ue_ngap_id,
- gNB_ue_ngap_idP,
- result->ue_rnti);
- }
- }
- } else {
- LOG_E(NGAP, "[gNB %ld] NGAP context found but ue_initial_id is invalid (0)\n", rrc_instance_pP - RC.nrrrc[0]);
- return NULL;
- }
- } else {
- LOG_E(NGAP, "[gNB %ld] In hashtable_get, couldn't find in ngap_id2_ngap_ids gNB_ue_ngap_idP %"PRIu32", because ue_initial_id is invalid in NGAP context\n",
- rrc_instance_pP - RC.nrrrc[0],
- gNB_ue_ngap_idP);
- return NULL;
- }
- } // end if (h_rc != HASH_TABLE_OK)
- } // end if (gNB_ue_ngap_idP > 0)
- } // end else (ue_initial_id == UE_INITIAL_ID_INVALID)
-
- return result;
-}
-
-//------------------------------------------------------------------------------
-struct rrc_gNB_ue_context_s *
-rrc_gNB_get_ue_context_from_ngap_ids(
- const instance_t instanceP,
- const uint16_t ue_initial_idP,
- const uint32_t gNB_ue_ngap_idP
-)
-//------------------------------------------------------------------------------
-{
- rrc_ue_ngap_ids_t *temp = NULL;
- temp = rrc_gNB_NGAP_get_ue_ids(RC.nrrrc[GNB_INSTANCE_TO_MODULE_ID(instanceP)], ue_initial_idP, gNB_ue_ngap_idP);
-
- if (temp != NULL) {
- return rrc_gNB_get_ue_context(RC.nrrrc[GNB_INSTANCE_TO_MODULE_ID(instanceP)], temp->ue_rnti);
- }
-
- return NULL;
-}
+static int rrc_gNB_process_security(const protocol_ctxt_t *const ctxt_pP, rrc_gNB_ue_context_t *const ue_context_pP, ngap_security_capabilities_t *security_capabilities_pP);
/*! \fn void process_gNB_security_key (const protocol_ctxt_t* const ctxt_pP, eNB_RRC_UE_t * const ue_context_pP, uint8_t *security_key)
*\brief save security key.
@@ -277,17 +99,19 @@ void process_gNB_security_key (
{
char ascii_buffer[65];
uint8_t i;
+ gNB_RRC_UE_t *UE = &ue_context_pP->ue_context;
+
/* Saves the security key */
- memcpy (ue_context_pP->ue_context.kgnb, security_key_pP, SECURITY_KEY_LENGTH);
- memset (ue_context_pP->ue_context.nh, 0, SECURITY_KEY_LENGTH);
- ue_context_pP->ue_context.nh_ncc = -1;
+ memcpy(UE->kgnb, security_key_pP, SECURITY_KEY_LENGTH);
+ memset(UE->nh, 0, SECURITY_KEY_LENGTH);
+ UE->nh_ncc = -1;
for (i = 0; i < 32; i++) {
- sprintf(&ascii_buffer[2 * i], "%02X", ue_context_pP->ue_context.kgnb[i]);
+ sprintf(&ascii_buffer[2 * i], "%02X", UE->kgnb[i]);
}
ascii_buffer[2 * i] = '\0';
- LOG_I(NR_RRC, "[gNB %d][UE %x] Saved security key %s\n", ctxt_pP->module_id, ue_context_pP->ue_context.rnti, ascii_buffer);
+ LOG_I(NR_RRC, "[gNB %d][UE %x] Saved security key %s\n", ctxt_pP->module_id, UE->rnti, ascii_buffer);
}
//------------------------------------------------------------------------------
@@ -306,20 +130,15 @@ nr_rrc_pdcp_config_security(
uint8_t *kUPenc = NULL;
//uint8_t *k_kdf = NULL;
static int print_keys= 1;
+ gNB_RRC_UE_t *UE = &ue_context_pP->ue_context;
/* Derive the keys from kgnb */
- if (SRB_configList != NULL) {
- nr_derive_key_up_enc(ue_context_pP->ue_context.ciphering_algorithm,
- ue_context_pP->ue_context.kgnb,
- &kUPenc);
+ if (UE->Srb[1].Active || UE->Srb[2].Active) {
+ nr_derive_key_up_enc(UE->ciphering_algorithm, UE->kgnb, &kUPenc);
}
- nr_derive_key_rrc_enc(ue_context_pP->ue_context.ciphering_algorithm,
- ue_context_pP->ue_context.kgnb,
- &kRRCenc);
- nr_derive_key_rrc_int(ue_context_pP->ue_context.integrity_algorithm,
- ue_context_pP->ue_context.kgnb,
- &kRRCint);
+ nr_derive_key_rrc_enc(UE->ciphering_algorithm, UE->kgnb, &kRRCenc);
+ nr_derive_key_rrc_int(UE->integrity_algorithm, UE->kgnb, &kRRCint);
if (!IS_SOFTMODEM_IQPLAYER) {
SET_LOG_DUMP(DEBUG_SECURITY) ;
}
@@ -328,25 +147,20 @@ nr_rrc_pdcp_config_security(
if ( LOG_DUMPFLAG( DEBUG_SECURITY ) ) {
if (print_keys == 1 ) {
print_keys =0;
- LOG_DUMPMSG(NR_RRC, DEBUG_SECURITY, ue_context_pP->ue_context.kgnb, 32,"\nKgNB:" );
+ LOG_DUMPMSG(NR_RRC, DEBUG_SECURITY, UE->kgnb, 32, "\nKgNB:");
LOG_DUMPMSG(NR_RRC, DEBUG_SECURITY, kRRCenc, 16,"\nKRRCenc:" );
LOG_DUMPMSG(NR_RRC, DEBUG_SECURITY, kRRCint, 16,"\nKRRCint:" );
}
}
- pdcp_config_set_security(
- ctxt_pP,
- NULL, /* pdcp_pP not used anymore in NR */
- DCCH,
- DCCH+2,
- enable_ciphering ?
- ue_context_pP->ue_context.ciphering_algorithm
- | (ue_context_pP->ue_context.integrity_algorithm << 4)
- : 0
- | (ue_context_pP->ue_context.integrity_algorithm << 4),
- kRRCenc,
- kRRCint,
- kUPenc);
+ pdcp_config_set_security(ctxt_pP,
+ NULL, /* pdcp_pP not used anymore in NR */
+ DCCH,
+ DCCH + 2,
+ enable_ciphering ? UE->ciphering_algorithm | (UE->integrity_algorithm << 4) : 0 | (UE->integrity_algorithm << 4),
+ kRRCenc,
+ kRRCint,
+ kUPenc);
}
//------------------------------------------------------------------------------
@@ -363,75 +177,51 @@ rrc_gNB_send_NGAP_NAS_FIRST_REQ(
{
// gNB_RRC_INST *rrc = RC.nrrrc[ctxt_pP->module_id];
MessageDef *message_p = NULL;
- rrc_ue_ngap_ids_t *rrc_ue_ngap_ids_p = NULL;
- hashtable_rc_t h_rc;
+ gNB_RRC_UE_t *UE = &ue_context_pP->ue_context;
message_p = itti_alloc_new_message(TASK_RRC_GNB, 0, NGAP_NAS_FIRST_REQ);
- memset(&message_p->ittiMsg.ngap_nas_first_req, 0, sizeof(ngap_nas_first_req_t));
- ue_context_pP->ue_context.ue_initial_id = get_next_ue_initial_id(ctxt_pP->module_id);
- NGAP_NAS_FIRST_REQ(message_p).ue_initial_id = ue_context_pP->ue_context.ue_initial_id;
- rrc_ue_ngap_ids_p = malloc(sizeof(rrc_ue_ngap_ids_t));
- rrc_ue_ngap_ids_p->ue_initial_id = ue_context_pP->ue_context.ue_initial_id;
- rrc_ue_ngap_ids_p->gNB_ue_ngap_id = UE_INITIAL_ID_INVALID;
- rrc_ue_ngap_ids_p->ue_rnti = ctxt_pP->rntiMaybeUEid;
+ ngap_nas_first_req_t *req = &NGAP_NAS_FIRST_REQ(message_p);
+ memset(req, 0, sizeof(*req));
- h_rc = hashtable_insert(RC.nrrrc[ctxt_pP->module_id]->initial_id2_ngap_ids,
- (hash_key_t)ue_context_pP->ue_context.ue_initial_id,
- rrc_ue_ngap_ids_p);
-
- if (h_rc != HASH_TABLE_OK) {
- LOG_E(NGAP, "[gNB %d] Error while hashtable_insert in initial_id2_ngap_ids ue_initial_id %u\n",
- ctxt_pP->module_id,
- ue_context_pP->ue_context.ue_initial_id);
- }
+ req->gNB_ue_ngap_id = UE->gNB_ue_ngap_id;
/* Assume that cause is coded in the same way in RRC and NGap, just check that the value is in NGap range */
- AssertFatal(ue_context_pP->ue_context.establishment_cause < NGAP_RRC_CAUSE_LAST,
- "Establishment cause invalid (%jd/%d) for gNB %d!",
- ue_context_pP->ue_context.establishment_cause,
- NGAP_RRC_CAUSE_LAST,
- ctxt_pP->module_id);
- NGAP_NAS_FIRST_REQ(message_p).establishment_cause = ue_context_pP->ue_context.establishment_cause;
-
+ AssertFatal(UE->establishment_cause < NGAP_RRC_CAUSE_LAST, "Establishment cause invalid (%jd/%d) for gNB %d!", UE->establishment_cause, NGAP_RRC_CAUSE_LAST, ctxt_pP->module_id);
+ req->establishment_cause = UE->establishment_cause;
+
/* Forward NAS message */
- NGAP_NAS_FIRST_REQ(message_p).nas_pdu.buffer = rrcSetupComplete->dedicatedNAS_Message.buf;
- NGAP_NAS_FIRST_REQ(message_p).nas_pdu.length = rrcSetupComplete->dedicatedNAS_Message.size;
+ req->nas_pdu.buffer = rrcSetupComplete->dedicatedNAS_Message.buf;
+ req->nas_pdu.length = rrcSetupComplete->dedicatedNAS_Message.size;
// extract_imsi(NGAP_NAS_FIRST_REQ (message_p).nas_pdu.buffer,
// NGAP_NAS_FIRST_REQ (message_p).nas_pdu.length,
// ue_context_pP);
/* Fill UE identities with available information */
- NGAP_NAS_FIRST_REQ(message_p).ue_identity.presenceMask = NGAP_UE_IDENTITIES_NONE;
+ req->ue_identity.presenceMask = NGAP_UE_IDENTITIES_NONE;
/* Fill s-TMSI */
- NGAP_NAS_FIRST_REQ(message_p).ue_identity.s_tmsi.amf_set_id = ue_context_pP->ue_context.Initialue_identity_5g_s_TMSI.amf_set_id;
- NGAP_NAS_FIRST_REQ(message_p).ue_identity.s_tmsi.amf_pointer = ue_context_pP->ue_context.Initialue_identity_5g_s_TMSI.amf_pointer;
- NGAP_NAS_FIRST_REQ(message_p).ue_identity.s_tmsi.m_tmsi = ue_context_pP->ue_context.Initialue_identity_5g_s_TMSI.fiveg_tmsi;
+ req->ue_identity.s_tmsi.amf_set_id = UE->Initialue_identity_5g_s_TMSI.amf_set_id;
+ req->ue_identity.s_tmsi.amf_pointer = UE->Initialue_identity_5g_s_TMSI.amf_pointer;
+ req->ue_identity.s_tmsi.m_tmsi = UE->Initialue_identity_5g_s_TMSI.fiveg_tmsi;
/* selected_plmn_identity: IE is 1-based, convert to 0-based (C array) */
int selected_plmn_identity = rrcSetupComplete->selectedPLMN_Identity - 1;
- NGAP_NAS_FIRST_REQ(message_p).selected_plmn_identity = selected_plmn_identity;
+ req->selected_plmn_identity = selected_plmn_identity;
if (rrcSetupComplete->registeredAMF != NULL) {
NR_RegisteredAMF_t *r_amf = rrcSetupComplete->registeredAMF;
- NGAP_NAS_FIRST_REQ(message_p).ue_identity.presenceMask |= NGAP_UE_IDENTITIES_guami;
+ req->ue_identity.presenceMask |= NGAP_UE_IDENTITIES_guami;
if (r_amf->plmn_Identity != NULL) {
if ((r_amf->plmn_Identity->mcc != NULL) && (r_amf->plmn_Identity->mcc->list.count > 0)) {
/* Use first indicated PLMN MCC if it is defined */
- NGAP_NAS_FIRST_REQ(message_p).ue_identity.guami.mcc = *r_amf->plmn_Identity->mcc->list.array[selected_plmn_identity];
- LOG_I(NGAP, "[gNB %d] Build NGAP_NAS_FIRST_REQ adding in s_TMSI: GUMMEI MCC %u ue %x\n",
- ctxt_pP->module_id,
- NGAP_NAS_FIRST_REQ (message_p).ue_identity.guami.mcc,
- ue_context_pP->ue_context.rnti);
+ req->ue_identity.guami.mcc = *r_amf->plmn_Identity->mcc->list.array[selected_plmn_identity];
+ LOG_I(NGAP, "[gNB %d] Build NGAP_NAS_FIRST_REQ adding in s_TMSI: GUMMEI MCC %u ue %x\n", ctxt_pP->module_id, req->ue_identity.guami.mcc, UE->rnti);
}
if (r_amf->plmn_Identity->mnc.list.count > 0) {
/* Use first indicated PLMN MNC if it is defined */
- NGAP_NAS_FIRST_REQ(message_p).ue_identity.guami.mnc = *r_amf->plmn_Identity->mnc.list.array[selected_plmn_identity];
- LOG_I(NGAP, "[gNB %d] Build NGAP_NAS_FIRST_REQ adding in s_TMSI: GUMMEI MNC %u ue %x\n",
- ctxt_pP->module_id,
- NGAP_NAS_FIRST_REQ (message_p).ue_identity.guami.mnc,
- ue_context_pP->ue_context.rnti);
+ req->ue_identity.guami.mnc = *r_amf->plmn_Identity->mnc.list.array[selected_plmn_identity];
+ LOG_I(NGAP, "[gNB %d] Build NGAP_NAS_FIRST_REQ adding in s_TMSI: GUMMEI MNC %u ue %x\n", ctxt_pP->module_id, req->ue_identity.guami.mnc, UE->rnti);
}
} else {
/* TODO */
@@ -439,192 +229,248 @@ rrc_gNB_send_NGAP_NAS_FIRST_REQ(
/* amf_Identifier */
uint32_t amf_Id = BIT_STRING_to_uint32(&r_amf->amf_Identifier);
- NGAP_NAS_FIRST_REQ(message_p).ue_identity.guami.amf_region_id = amf_Id >> 16;
- NGAP_NAS_FIRST_REQ(message_p).ue_identity.guami.amf_set_id = ue_context_pP->ue_context.Initialue_identity_5g_s_TMSI.amf_set_id;
- NGAP_NAS_FIRST_REQ(message_p).ue_identity.guami.amf_pointer = ue_context_pP->ue_context.Initialue_identity_5g_s_TMSI.amf_pointer;
+ req->ue_identity.guami.amf_region_id = amf_Id >> 16;
+ req->ue_identity.guami.amf_set_id = UE->Initialue_identity_5g_s_TMSI.amf_set_id;
+ req->ue_identity.guami.amf_pointer = UE->Initialue_identity_5g_s_TMSI.amf_pointer;
- ue_context_pP->ue_context.ue_guami.mcc = NGAP_NAS_FIRST_REQ(message_p).ue_identity.guami.mcc;
- ue_context_pP->ue_context.ue_guami.mnc = NGAP_NAS_FIRST_REQ(message_p).ue_identity.guami.mnc;
- ue_context_pP->ue_context.ue_guami.mnc_len = NGAP_NAS_FIRST_REQ(message_p).ue_identity.guami.mnc_len;
- ue_context_pP->ue_context.ue_guami.amf_region_id = NGAP_NAS_FIRST_REQ(message_p).ue_identity.guami.amf_region_id;
- ue_context_pP->ue_context.ue_guami.amf_set_id = NGAP_NAS_FIRST_REQ(message_p).ue_identity.guami.amf_set_id;
- ue_context_pP->ue_context.ue_guami.amf_pointer = NGAP_NAS_FIRST_REQ(message_p).ue_identity.guami.amf_pointer;
+ // fixme: illogical place to set UE values, should be in the function that call this one
+ UE->ue_guami.mcc = req->ue_identity.guami.mcc;
+ UE->ue_guami.mnc = req->ue_identity.guami.mnc;
+ UE->ue_guami.mnc_len = req->ue_identity.guami.mnc_len;
+ UE->ue_guami.amf_region_id = req->ue_identity.guami.amf_region_id;
+ UE->ue_guami.amf_set_id = req->ue_identity.guami.amf_set_id;
+ UE->ue_guami.amf_pointer = req->ue_identity.guami.amf_pointer;
- LOG_I(NGAP, "[gNB %d] Build NGAP_NAS_FIRST_REQ adding in s_TMSI: GUAMI amf_set_id %u amf_region_id %u ue %x\n",
+ LOG_I(NGAP,
+ "[gNB %d] Build NGAP_NAS_FIRST_REQ adding in s_TMSI: GUAMI amf_set_id %u amf_region_id %u ue %x\n",
ctxt_pP->module_id,
- NGAP_NAS_FIRST_REQ (message_p).ue_identity.guami.amf_set_id,
- NGAP_NAS_FIRST_REQ (message_p).ue_identity.guami.amf_region_id,
- ue_context_pP->ue_context.rnti);
+ req->ue_identity.guami.amf_set_id,
+ req->ue_identity.guami.amf_region_id,
+ UE->rnti);
}
itti_send_msg_to_task (TASK_NGAP, ctxt_pP->instance, message_p);
}
-//------------------------------------------------------------------------------
-int
-rrc_gNB_process_NGAP_INITIAL_CONTEXT_SETUP_REQ(
- MessageDef *msg_p,
- const char *msg_name,
- instance_t instance
-)
-//------------------------------------------------------------------------------
+static void fill_qos(NGAP_QosFlowSetupRequestList_t *qos, pdusession_t *session)
{
- uint16_t ue_initial_id;
- uint32_t gNB_ue_ngap_id;
- rrc_gNB_ue_context_t *ue_context_p = NULL;
- protocol_ctxt_t ctxt={0};
- uint8_t pdu_sessions_done = 0;
- gtpv1u_gnb_create_tunnel_resp_t create_tunnel_resp;
- int ret = 0;
-
- ue_initial_id = NGAP_INITIAL_CONTEXT_SETUP_REQ(msg_p).ue_initial_id;
- gNB_ue_ngap_id = NGAP_INITIAL_CONTEXT_SETUP_REQ(msg_p).gNB_ue_ngap_id;
-
- ue_context_p = rrc_gNB_get_ue_context_from_ngap_ids(instance, ue_initial_id, gNB_ue_ngap_id);
- LOG_I(NR_RRC, "[gNB %ld] Received %s: ue_initial_id %d, gNB_ue_ngap_id %u \n",
- instance, msg_name, ue_initial_id, gNB_ue_ngap_id);
-
- if (ue_context_p == NULL) {
- /* Can not associate this message to an UE index, send a failure to NGAP and discard it! */
- MessageDef *msg_fail_p = NULL;
- LOG_W(NR_RRC, "[gNB %ld] In NGAP_INITIAL_CONTEXT_SETUP_REQ: unknown UE from NGAP ids (%d, %u)\n", instance, ue_initial_id, gNB_ue_ngap_id);
- msg_fail_p = itti_alloc_new_message (TASK_RRC_GNB, 0, NGAP_INITIAL_CONTEXT_SETUP_FAIL);
- NGAP_INITIAL_CONTEXT_SETUP_FAIL (msg_fail_p).gNB_ue_ngap_id = gNB_ue_ngap_id;
- // TODO add failure cause when defined!
- itti_send_msg_to_task (TASK_NGAP, instance, msg_fail_p);
- return (-1);
- } else {
- PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt, instance, GNB_FLAG_YES, ue_context_p->ue_context.rnti, 0, 0);
- gNB_RRC_INST *rrc = RC.nrrrc[ctxt.module_id];
- ue_context_p->ue_context.gNB_ue_ngap_id = NGAP_INITIAL_CONTEXT_SETUP_REQ (msg_p).gNB_ue_ngap_id;
- ue_context_p->ue_context.amf_ue_ngap_id = NGAP_INITIAL_CONTEXT_SETUP_REQ (msg_p).amf_ue_ngap_id;
- ue_context_p->ue_context.nas_pdu_flag = NGAP_INITIAL_CONTEXT_SETUP_REQ (msg_p).nas_pdu_flag;
-
- uint8_t nb_pdusessions_tosetup = NGAP_INITIAL_CONTEXT_SETUP_REQ (msg_p).nb_of_pdusessions;
- if (nb_pdusessions_tosetup != 0) {
- AssertFatal(rrc->node_type != ngran_gNB_CUCP, "PDU sessions in Initial context setup request not handled by E1 yet\n");
- gtpv1u_gnb_create_tunnel_req_t create_tunnel_req={0};
- for (int i = 0; i < NR_NB_RB_MAX - 3; i++) {
- if(ue_context_p->ue_context.pduSession[i].status >= PDU_SESSION_STATUS_DONE)
- continue;
- ue_context_p->ue_context.pduSession[i].status = PDU_SESSION_STATUS_NEW;
- ue_context_p->ue_context.pduSession[i].param = NGAP_INITIAL_CONTEXT_SETUP_REQ (msg_p).pdusession_param[pdu_sessions_done];
- create_tunnel_req.pdusession_id[pdu_sessions_done] = NGAP_INITIAL_CONTEXT_SETUP_REQ (msg_p).pdusession_param[pdu_sessions_done].pdusession_id;
- create_tunnel_req.incoming_rb_id[pdu_sessions_done] = i+1;
- create_tunnel_req.outgoing_teid[pdu_sessions_done] = NGAP_INITIAL_CONTEXT_SETUP_REQ (msg_p).pdusession_param[pdu_sessions_done].gtp_teid;
- // To be developped: hardcoded first flow
- create_tunnel_req.outgoing_qfi[pdu_sessions_done] = NGAP_INITIAL_CONTEXT_SETUP_REQ (msg_p).pdusession_param[pdu_sessions_done].qos[0].qfi;
- create_tunnel_req.dst_addr[pdu_sessions_done].length = NGAP_INITIAL_CONTEXT_SETUP_REQ (msg_p).pdusession_param[pdu_sessions_done].upf_addr.length;
- memcpy(create_tunnel_req.dst_addr[pdu_sessions_done].buffer,
- NGAP_INITIAL_CONTEXT_SETUP_REQ (msg_p).pdusession_param[pdu_sessions_done].upf_addr.buffer,
- sizeof(uint8_t)*20);
- LOG_I(NR_RRC, "PDUSESSION SETUP: local index %d teid %u, pdusession id %d \n",
- i,
- create_tunnel_req.outgoing_teid[pdu_sessions_done],
- create_tunnel_req.pdusession_id[pdu_sessions_done]);
- pdu_sessions_done++;
-
- if(pdu_sessions_done >= nb_pdusessions_tosetup) {
- break;
- }
- }
-
- ue_context_p->ue_context.nb_of_pdusessions = NGAP_INITIAL_CONTEXT_SETUP_REQ (msg_p).nb_of_pdusessions;
- create_tunnel_req.ue_id = ue_context_p->ue_context.rnti;
- create_tunnel_req.num_tunnels = pdu_sessions_done;
-
- ret = gtpv1u_create_ngu_tunnel(
- instance,
- &create_tunnel_req,
- &create_tunnel_resp);
- if (ret != 0) {
- LOG_E(NR_RRC,"rrc_gNB_process_NGAP_INITIAL_CONTEXT_SETUP_REQ : gtpv1u_create_ngu_tunnel failed,start to release UE %x\n",ue_context_p->ue_context.rnti);
- ue_context_p->ue_context.ue_release_timer_ng = 1;
- ue_context_p->ue_context.ue_release_timer_thres_ng = 100;
- ue_context_p->ue_context.ue_release_timer = 0;
- ue_context_p->ue_context.ue_reestablishment_timer = 0;
- ue_context_p->ue_context.ul_failure_timer = 20000;
- ue_context_p->ue_context.ul_failure_timer = 0;
- return (0);
- }
-
- nr_rrc_gNB_process_GTPV1U_CREATE_TUNNEL_RESP(&ctxt, &create_tunnel_resp, 0);
- ue_context_p->ue_context.nb_of_pdusessions += NGAP_INITIAL_CONTEXT_SETUP_REQ(msg_p).nb_of_pdusessions;
- ue_context_p->ue_context.established_pdu_sessions_flag = 1;
+ DevAssert(qos->list.count > 0);
+ DevAssert(qos->list.count <= NGAP_maxnoofQosFlows);
+ for (int qosIdx = 0; qosIdx < qos->list.count; qosIdx++) {
+ NGAP_QosFlowSetupRequestItem_t *qosFlowItem_p = qos->list.array[qosIdx];
+ // Set the QOS informations
+ session->qos[qosIdx].qfi = (uint8_t)qosFlowItem_p->qosFlowIdentifier;
+ NGAP_QosCharacteristics_t *qosChar = &qosFlowItem_p->qosFlowLevelQosParameters.qosCharacteristics;
+ if (qosChar->present == NGAP_QosCharacteristics_PR_nonDynamic5QI) {
+ if (qosChar->choice.nonDynamic5QI != NULL) {
+ session->qos[qosIdx].fiveQI = (uint64_t)qosChar->choice.nonDynamic5QI->fiveQI;
}
-
- /* NAS PDU */
- if (NGAP_INITIAL_CONTEXT_SETUP_REQ(msg_p).nas_pdu_flag == 1) {
- ue_context_p->ue_context.nas_pdu_flag = NGAP_INITIAL_CONTEXT_SETUP_REQ(msg_p).nas_pdu_flag;
- ue_context_p->ue_context.nas_pdu.length = NGAP_INITIAL_CONTEXT_SETUP_REQ(msg_p).nas_pdu.length;
- ue_context_p->ue_context.nas_pdu.buffer = NGAP_INITIAL_CONTEXT_SETUP_REQ(msg_p).nas_pdu.buffer;
- }
-
- /* security */
- rrc_gNB_process_security(&ctxt, ue_context_p, &(NGAP_INITIAL_CONTEXT_SETUP_REQ(msg_p).security_capabilities));
- process_gNB_security_key (
- &ctxt,
- ue_context_p,
- NGAP_INITIAL_CONTEXT_SETUP_REQ(msg_p).security_key);
-
- /* configure only integrity, ciphering comes after receiving SecurityModeComplete */
- nr_rrc_pdcp_config_security(&ctxt, ue_context_p, 0);
-
- rrc_gNB_generate_SecurityModeCommand (&ctxt, ue_context_p);
-
- // in case, send the S1SP initial context response if it is not sent with the attach complete message
- if (ue_context_p->ue_context.StatusRrc == NR_RRC_RECONFIGURED) {
- LOG_I(NR_RRC, "Sending rrc_gNB_send_NGAP_INITIAL_CONTEXT_SETUP_RESP, cause %ld\n", ue_context_p->ue_context.reestablishment_cause);
- rrc_gNB_send_NGAP_INITIAL_CONTEXT_SETUP_RESP(&ctxt,ue_context_p);
}
- return 0;
+ ngap_allocation_retention_priority_t *tmp = &session->qos[qosIdx].allocation_retention_priority;
+ NGAP_AllocationAndRetentionPriority_t *tmp2 = &qosFlowItem_p->qosFlowLevelQosParameters.allocationAndRetentionPriority;
+ tmp->priority_level = tmp2->priorityLevelARP;
+ tmp->pre_emp_capability = tmp2->pre_emptionCapability;
+ tmp->pre_emp_vulnerability = tmp2->pre_emptionVulnerability;
}
+ session->nb_qos = qos->list.count;
+}
+
+static int decodePDUSessionResourceSetup(pdusession_t *session)
+{
+ NGAP_PDUSessionResourceSetupRequestTransfer_t *pdusessionTransfer;
+ for (int i=0; ipdusessionTransfer.length; i++)
+ printf("%02x:",session->pdusessionTransfer.buffer[i]);
+ printf("\n");
+ asn_codec_ctx_t st = {.max_stack_size = 100 * 1000};
+ asn_dec_rval_t dec_rval =
+ aper_decode(&st, &asn_DEF_NGAP_PDUSessionResourceSetupRequestTransfer, (void **)&pdusessionTransfer, session->pdusessionTransfer.buffer, session->pdusessionTransfer.length, 0, 0);
+
+ if (dec_rval.code != RC_OK) {
+ LOG_E(NR_RRC, "can not decode PDUSessionResourceSetupRequestTransfer\n");
+ return -1;
+ }
+
+ for (int i = 0; i < pdusessionTransfer->protocolIEs.list.count; i++) {
+ NGAP_PDUSessionResourceSetupRequestTransferIEs_t *pdusessionTransfer_ies = pdusessionTransfer->protocolIEs.list.array[i];
+ switch (pdusessionTransfer_ies->id) {
+ /* optional PDUSessionAggregateMaximumBitRate */
+ case NGAP_ProtocolIE_ID_id_PDUSessionAggregateMaximumBitRate:
+ break;
+
+ /* mandatory UL-NGU-UP-TNLInformation */
+ case NGAP_ProtocolIE_ID_id_UL_NGU_UP_TNLInformation: {
+ NGAP_GTPTunnel_t *gTPTunnel_p = pdusessionTransfer_ies->value.choice.UPTransportLayerInformation.choice.gTPTunnel;
+
+ /* Set the transport layer address */
+ memcpy(session->upf_addr.buffer, gTPTunnel_p->transportLayerAddress.buf, gTPTunnel_p->transportLayerAddress.size);
+
+ session->upf_addr.length = gTPTunnel_p->transportLayerAddress.size * 8 - gTPTunnel_p->transportLayerAddress.bits_unused;
+
+ /* GTP tunnel endpoint ID */
+ OCTET_STRING_TO_INT32(&gTPTunnel_p->gTP_TEID, session->gtp_teid);
+ }
+
+ break;
+
+ /* optional AdditionalUL-NGU-UP-TNLInformation */
+ case NGAP_ProtocolIE_ID_id_AdditionalUL_NGU_UP_TNLInformation:
+ break;
+
+ /* optional DataForwardingNotPossible */
+ case NGAP_ProtocolIE_ID_id_DataForwardingNotPossible:
+ break;
+
+ /* mandatory PDUSessionType */
+ case NGAP_ProtocolIE_ID_id_PDUSessionType:
+ session->upf_addr.pdu_session_type = (uint8_t)pdusessionTransfer_ies->value.choice.PDUSessionType;
+ break;
+
+ /* optional SecurityIndication */
+ case NGAP_ProtocolIE_ID_id_SecurityIndication:
+ break;
+
+ /* optional NetworkInstance */
+ case NGAP_ProtocolIE_ID_id_NetworkInstance:
+ break;
+
+ /* mandatory QosFlowSetupRequestList */
+ case NGAP_ProtocolIE_ID_id_QosFlowSetupRequestList:
+ fill_qos(&pdusessionTransfer_ies->value.choice.QosFlowSetupRequestList, session);
+ break;
+
+ /* optional CommonNetworkInstance */
+ case NGAP_ProtocolIE_ID_id_CommonNetworkInstance:
+ break;
+
+ default:
+ LOG_E(NR_RRC, "could not found protocolIEs id %ld\n", pdusessionTransfer_ies->id);
+ return -1;
+ }
+ }
+ ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_NGAP_PDUSessionResourceSetupRequestTransfer,pdusessionTransfer );
+
+ return 0;
}
//------------------------------------------------------------------------------
-void
-rrc_gNB_send_NGAP_INITIAL_CONTEXT_SETUP_RESP(
- const protocol_ctxt_t *const ctxt_pP,
- rrc_gNB_ue_context_t *const ue_context_pP
-)
+int rrc_gNB_process_NGAP_INITIAL_CONTEXT_SETUP_REQ(MessageDef *msg_p, instance_t instance)
//------------------------------------------------------------------------------
{
- MessageDef *msg_p = NULL;
- int pdusession;
+ protocol_ctxt_t ctxt = {0};
+ ngap_initial_context_setup_req_t *req = &NGAP_INITIAL_CONTEXT_SETUP_REQ(msg_p);
+
+ rrc_gNB_ue_context_t *ue_context_p = rrc_gNB_get_ue_context(RC.nrrrc[instance], req->gNB_ue_ngap_id);
+ gNB_RRC_UE_t *UE = &ue_context_p->ue_context;
+
+ if (ue_context_p == NULL) {
+ /* Can not associate this message to an UE index, send a failure to NGAP and discard it! */
+ MessageDef *msg_fail_p = NULL;
+ LOG_W(NR_RRC, "[gNB %ld] In NGAP_INITIAL_CONTEXT_SETUP_REQ: unknown UE from NGAP ids (%u)\n", instance, req->gNB_ue_ngap_id);
+ msg_fail_p = itti_alloc_new_message(TASK_RRC_GNB, 0, NGAP_INITIAL_CONTEXT_SETUP_FAIL);
+ NGAP_INITIAL_CONTEXT_SETUP_FAIL(msg_fail_p).gNB_ue_ngap_id = req->gNB_ue_ngap_id;
+ // TODO add failure cause when defined!
+ itti_send_msg_to_task(TASK_NGAP, instance, msg_fail_p);
+ return (-1);
+ }
+ PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt, instance, GNB_FLAG_YES, UE->rnti, 0, 0);
+ UE->amf_ue_ngap_id = req->amf_ue_ngap_id;
+ uint8_t nb_pdusessions_tosetup = req->nb_of_pdusessions;
+ if (nb_pdusessions_tosetup) {
+ AssertFatal(false, "PDU sessions in Initial context setup request not handled by E1 yet\n");
+ gtpv1u_gnb_create_tunnel_req_t create_tunnel_req = {0};
+ for (int i = 0; i < nb_pdusessions_tosetup; i++) {
+ UE->nb_of_pdusessions++;
+ if(UE->pduSession[i].status >= PDU_SESSION_STATUS_DONE)
+ continue;
+ UE->pduSession[i].status = PDU_SESSION_STATUS_NEW;
+ UE->pduSession[i].param = req->pdusession_param[i];
+ create_tunnel_req.num_tunnels++;
+ create_tunnel_req.pdusession_id[i] = req->pdusession_param[i].pdusession_id;
+ create_tunnel_req.outgoing_teid[i] = req->pdusession_param[i].gtp_teid;
+ // To be developped: hardcoded first flow
+ create_tunnel_req.outgoing_qfi[i] = req->pdusession_param[i].qos[0].qfi;
+ create_tunnel_req.dst_addr[i].length = req->pdusession_param[i].upf_addr.length;
+ memcpy(create_tunnel_req.dst_addr[i].buffer, req->pdusession_param[i].upf_addr.buffer, sizeof(create_tunnel_req.dst_addr[i].buffer));
+ LOG_I(NR_RRC, "PDUSESSION SETUP: local index %d teid %u, pdusession id %d \n", i, create_tunnel_req.outgoing_teid[i], create_tunnel_req.pdusession_id[i]);
+ }
+ create_tunnel_req.ue_id = UE->rnti;
+ gtpv1u_gnb_create_tunnel_resp_t create_tunnel_resp = {0};
+ int ret = gtpv1u_create_ngu_tunnel(instance, &create_tunnel_req, &create_tunnel_resp);
+ if (ret != 0) {
+ LOG_E(NR_RRC, "rrc_gNB_process_NGAP_INITIAL_CONTEXT_SETUP_REQ : gtpv1u_create_ngu_tunnel failed,start to release UE %x\n", UE->rnti);
+ UE->ue_release_timer_ng = 1;
+ UE->ue_release_timer_thres_ng = 100;
+ UE->ue_release_timer = 0;
+ UE->ue_reestablishment_timer = 0;
+ UE->ul_failure_timer = 20000;
+ UE->ul_failure_timer = 0;
+ return (0);
+ }
+
+ nr_rrc_gNB_process_GTPV1U_CREATE_TUNNEL_RESP(&ctxt, &create_tunnel_resp, 0);
+ UE->established_pdu_sessions_flag = 1;
+ }
+
+ /* NAS PDU */
+ // this is malloced pointers, we pass it for later free()
+ UE->nas_pdu = req->nas_pdu;
+
+ /* security */
+ rrc_gNB_process_security(&ctxt, ue_context_p, &req->security_capabilities);
+ process_gNB_security_key(&ctxt, ue_context_p, req->security_key);
+
+ /* configure only integrity, ciphering comes after receiving SecurityModeComplete */
+ nr_rrc_pdcp_config_security(&ctxt, ue_context_p, 0);
+
+ rrc_gNB_generate_SecurityModeCommand(&ctxt, ue_context_p);
+
+ // in case, send the S1SP initial context response if it is not sent with the attach complete message
+ if (UE->StatusRrc == NR_RRC_RECONFIGURED) {
+ LOG_I(NR_RRC, "Sending rrc_gNB_send_NGAP_INITIAL_CONTEXT_SETUP_RESP, cause %ld\n", UE->reestablishment_cause);
+ rrc_gNB_send_NGAP_INITIAL_CONTEXT_SETUP_RESP(&ctxt, ue_context_p);
+ }
+
+ return 0;
+}
+
+//------------------------------------------------------------------------------
+void rrc_gNB_send_NGAP_INITIAL_CONTEXT_SETUP_RESP(const protocol_ctxt_t *const ctxt_pP, rrc_gNB_ue_context_t *const ue_context_pP)
+//------------------------------------------------------------------------------
+{
+ MessageDef *msg_p = NULL;
int pdu_sessions_done = 0;
int pdu_sessions_failed = 0;
- int qos_flow_index = 0;
msg_p = itti_alloc_new_message (TASK_RRC_ENB, 0, NGAP_INITIAL_CONTEXT_SETUP_RESP);
- NGAP_INITIAL_CONTEXT_SETUP_RESP (msg_p).gNB_ue_ngap_id = ue_context_pP->ue_context.gNB_ue_ngap_id;
+ ngap_initial_context_setup_resp_t *resp = &NGAP_INITIAL_CONTEXT_SETUP_RESP(msg_p);
+ gNB_RRC_UE_t *UE = &ue_context_pP->ue_context;
- for (pdusession = 0; pdusession < ue_context_pP->ue_context.nb_of_pdusessions; pdusession++) {
- if (ue_context_pP->ue_context.pduSession[pdusession].status == PDU_SESSION_STATUS_DONE) {
+ resp->gNB_ue_ngap_id = UE->gNB_ue_ngap_id;
+
+ for (int pdusession = 0; pdusession < UE->nb_of_pdusessions; pdusession++) {
+ rrc_pdu_session_param_t *session = &UE->pduSession[pdusession];
+ if (session->status == PDU_SESSION_STATUS_DONE) {
pdu_sessions_done++;
- NGAP_INITIAL_CONTEXT_SETUP_RESP (msg_p).pdusessions[pdusession].pdusession_id = ue_context_pP->ue_context.pduSession[pdusession].param.pdusession_id;
- // TODO add other information from S1-U when it will be integrated
- NGAP_INITIAL_CONTEXT_SETUP_RESP (msg_p).pdusessions[pdusession].gtp_teid = ue_context_pP->ue_context.gnb_gtp_teid[pdusession];
- memcpy(NGAP_INITIAL_CONTEXT_SETUP_RESP (msg_p).pdusessions[pdusession].gNB_addr.buffer , ue_context_pP->ue_context.gnb_gtp_addrs[pdusession].buffer, 20);
- NGAP_INITIAL_CONTEXT_SETUP_RESP (msg_p).pdusessions[pdusession].gNB_addr.length = 4;
- ue_context_pP->ue_context.pduSession[pdusession].status = PDU_SESSION_STATUS_ESTABLISHED;
- NGAP_INITIAL_CONTEXT_SETUP_RESP (msg_p).pdusessions[pdusession].nb_of_qos_flow = ue_context_pP->ue_context.pduSession[pdusession].param.nb_qos;
- for (qos_flow_index = 0; qos_flow_index < ue_context_pP->ue_context.pduSession[pdusession].param.nb_qos; qos_flow_index++) {
- NGAP_INITIAL_CONTEXT_SETUP_RESP (msg_p).pdusessions[pdusession].associated_qos_flows[qos_flow_index].qfi =
- ue_context_pP->ue_context.pduSession[pdusession].param.qos[qos_flow_index].qfi;
- NGAP_INITIAL_CONTEXT_SETUP_RESP (msg_p).pdusessions[pdusession].associated_qos_flows[qos_flow_index].qos_flow_mapping_ind = QOSFLOW_MAPPING_INDICATION_DL;
+ resp->pdusessions[pdusession].pdusession_id = session->param.pdusession_id;
+ resp->pdusessions[pdusession].gtp_teid = UE->gnb_gtp_teid[pdusession];
+ memcpy(resp->pdusessions[pdusession].gNB_addr.buffer, UE->gnb_gtp_addrs[pdusession].buffer, 20);
+ resp->pdusessions[pdusession].gNB_addr.length = 4;
+ resp->pdusessions[pdusession].nb_of_qos_flow = session->param.nb_qos;
+ for (int qos_flow_index = 0; qos_flow_index < session->param.nb_qos; qos_flow_index++) {
+ resp->pdusessions[pdusession].associated_qos_flows[qos_flow_index].qfi = session->param.qos[qos_flow_index].qfi;
+ resp->pdusessions[pdusession].associated_qos_flows[qos_flow_index].qos_flow_mapping_ind = QOSFLOW_MAPPING_INDICATION_DL;
}
} else {
pdu_sessions_failed++;
- ue_context_pP->ue_context.pduSession[pdusession].status = PDU_SESSION_STATUS_FAILED;
- NGAP_INITIAL_CONTEXT_SETUP_RESP (msg_p).pdusessions_failed[pdusession].pdusession_id = ue_context_pP->ue_context.pduSession[pdusession].param.pdusession_id;
+ resp->pdusessions_failed[pdusession].pdusession_id = session->param.pdusession_id;
// TODO add cause when it will be integrated
- NGAP_INITIAL_CONTEXT_SETUP_RESP (msg_p).pdusessions_failed[pdusession].cause = NGAP_CAUSE_RADIO_NETWORK;
- NGAP_INITIAL_CONTEXT_SETUP_RESP (msg_p).pdusessions_failed[pdusession].cause_value = NGAP_CauseRadioNetwork_unknown_PDU_session_ID;
+ resp->pdusessions_failed[pdusession].cause = NGAP_CAUSE_RADIO_NETWORK;
+ resp->pdusessions_failed[pdusession].cause_value = NGAP_CauseRadioNetwork_unknown_PDU_session_ID;
}
}
- NGAP_INITIAL_CONTEXT_SETUP_RESP (msg_p).nb_of_pdusessions = pdu_sessions_done;
- NGAP_INITIAL_CONTEXT_SETUP_RESP (msg_p).nb_of_pdusessions_failed = pdu_sessions_failed;
+ resp->nb_of_pdusessions = pdu_sessions_done;
+ resp->nb_of_pdusessions_failed = pdu_sessions_failed;
itti_send_msg_to_task (TASK_NGAP, ctxt_pP->instance, msg_p);
}
@@ -700,144 +546,105 @@ static e_NR_IntegrityProtAlgorithm rrc_gNB_select_integrity(
return ret;
}
-int
-rrc_gNB_process_security(
- const protocol_ctxt_t *const ctxt_pP,
- rrc_gNB_ue_context_t *const ue_context_pP,
- ngap_security_capabilities_t *security_capabilities_pP
-) {
+static int rrc_gNB_process_security(const protocol_ctxt_t *const ctxt_pP, rrc_gNB_ue_context_t *const ue_context_pP, ngap_security_capabilities_t *security_capabilities_pP)
+{
bool changed = false;
NR_CipheringAlgorithm_t cipheringAlgorithm;
e_NR_IntegrityProtAlgorithm integrityProtAlgorithm;
+ gNB_RRC_UE_t *UE = &ue_context_pP->ue_context;
+
/* Save security parameters */
- ue_context_pP->ue_context.security_capabilities = *security_capabilities_pP;
+ UE->security_capabilities = *security_capabilities_pP;
// translation
LOG_D(NR_RRC,
"[gNB %d] NAS security_capabilities.encryption_algorithms %u AS ciphering_algorithm %lu NAS security_capabilities.integrity_algorithms %u AS integrity_algorithm %u\n",
ctxt_pP->module_id,
- ue_context_pP->ue_context.security_capabilities.nRencryption_algorithms,
- (unsigned long)ue_context_pP->ue_context.ciphering_algorithm,
- ue_context_pP->ue_context.security_capabilities.nRintegrity_algorithms,
- ue_context_pP->ue_context.integrity_algorithm);
+ UE->security_capabilities.nRencryption_algorithms,
+ (unsigned long)UE->ciphering_algorithm,
+ UE->security_capabilities.nRintegrity_algorithms,
+ UE->integrity_algorithm);
/* Select relevant algorithms */
- cipheringAlgorithm = rrc_gNB_select_ciphering(ctxt_pP, ue_context_pP->ue_context.security_capabilities.nRencryption_algorithms);
+ cipheringAlgorithm = rrc_gNB_select_ciphering(ctxt_pP, UE->security_capabilities.nRencryption_algorithms);
- if (ue_context_pP->ue_context.ciphering_algorithm != cipheringAlgorithm) {
- ue_context_pP->ue_context.ciphering_algorithm = cipheringAlgorithm;
+ if (UE->ciphering_algorithm != cipheringAlgorithm) {
+ UE->ciphering_algorithm = cipheringAlgorithm;
changed = true;
}
- integrityProtAlgorithm = rrc_gNB_select_integrity(ctxt_pP, ue_context_pP->ue_context.security_capabilities.nRintegrity_algorithms);
+ integrityProtAlgorithm = rrc_gNB_select_integrity(ctxt_pP, UE->security_capabilities.nRintegrity_algorithms);
- if (ue_context_pP->ue_context.integrity_algorithm != integrityProtAlgorithm) {
- ue_context_pP->ue_context.integrity_algorithm = integrityProtAlgorithm;
+ if (UE->integrity_algorithm != integrityProtAlgorithm) {
+ UE->integrity_algorithm = integrityProtAlgorithm;
changed = true;
}
- LOG_I (NR_RRC, "[gNB %d][UE %x] Selected security algorithms (%p): %lx, %x, %s\n",
- ctxt_pP->module_id,
- ue_context_pP->ue_context.rnti,
- security_capabilities_pP,
- (unsigned long)cipheringAlgorithm,
- integrityProtAlgorithm,
- changed ? "changed" : "same");
+ LOG_I(NR_RRC,
+ "[gNB %d][UE %x] Selected security algorithms (%p): %lx, %x, %s\n",
+ ctxt_pP->module_id,
+ UE->rnti,
+ security_capabilities_pP,
+ (unsigned long)cipheringAlgorithm,
+ integrityProtAlgorithm,
+ changed ? "changed" : "same");
return changed;
}
//------------------------------------------------------------------------------
-int
-rrc_gNB_process_NGAP_DOWNLINK_NAS(
- MessageDef *msg_p,
- const char *msg_name,
- instance_t instance,
- mui_t *rrc_gNB_mui
-)
+int rrc_gNB_process_NGAP_DOWNLINK_NAS(MessageDef *msg_p, instance_t instance, mui_t *rrc_gNB_mui)
//------------------------------------------------------------------------------
{
- uint16_t ue_initial_id;
- uint32_t gNB_ue_ngap_id;
- uint32_t length;
- uint8_t *buffer;
- struct rrc_gNB_ue_context_s *ue_context_p = NULL;
- protocol_ctxt_t ctxt;
- memset(&ctxt, 0, sizeof(protocol_ctxt_t));
- ue_initial_id = NGAP_DOWNLINK_NAS (msg_p).ue_initial_id;
- gNB_ue_ngap_id = NGAP_DOWNLINK_NAS (msg_p).gNB_ue_ngap_id;
- ue_context_p = rrc_gNB_get_ue_context_from_ngap_ids(instance, ue_initial_id, gNB_ue_ngap_id);
- LOG_I(NR_RRC, "[gNB %ld] Received %s: ue_initial_id %d, gNB_ue_ngap_id %u\n",
- instance,
- msg_name,
- ue_initial_id,
- gNB_ue_ngap_id);
+ uint32_t length;
+ uint8_t *buffer;
+ protocol_ctxt_t ctxt = {0};
+ ngap_downlink_nas_t *req = &NGAP_DOWNLINK_NAS(msg_p);
+ rrc_gNB_ue_context_t *ue_context_p = rrc_gNB_get_ue_context(RC.nrrrc[instance], req->gNB_ue_ngap_id);
- if (ue_context_p == NULL) {
- /* Can not associate this message to an UE index, send a failure to NGAP and discard it! */
- MessageDef *msg_fail_p;
- LOG_W(NR_RRC, "[gNB %ld] In NGAP_DOWNLINK_NAS: unknown UE from NGAP ids (%d, %u)\n", instance, ue_initial_id, gNB_ue_ngap_id);
- msg_fail_p = itti_alloc_new_message (TASK_RRC_GNB, 0, NGAP_NAS_NON_DELIVERY_IND);
- NGAP_NAS_NON_DELIVERY_IND (msg_fail_p).gNB_ue_ngap_id = gNB_ue_ngap_id;
- NGAP_NAS_NON_DELIVERY_IND (msg_fail_p).nas_pdu.length = NGAP_DOWNLINK_NAS (msg_p).nas_pdu.length;
- NGAP_NAS_NON_DELIVERY_IND (msg_fail_p).nas_pdu.buffer = NGAP_DOWNLINK_NAS (msg_p).nas_pdu.buffer;
- // TODO add failure cause when defined!
- itti_send_msg_to_task (TASK_NGAP, instance, msg_fail_p);
- return (-1);
- } else {
- PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt, instance, GNB_FLAG_YES, ue_context_p->ue_context.rnti, 0, 0);
+ if (ue_context_p == NULL) {
+ /* Can not associate this message to an UE index, send a failure to NGAP and discard it! */
+ MessageDef *msg_fail_p;
+ LOG_W(NR_RRC, "[gNB %ld] In NGAP_DOWNLINK_NAS: unknown UE from NGAP ids (%u)\n", instance, req->gNB_ue_ngap_id);
+ msg_fail_p = itti_alloc_new_message(TASK_RRC_GNB, 0, NGAP_NAS_NON_DELIVERY_IND);
+ ngap_nas_non_delivery_ind_t *msg = &NGAP_NAS_NON_DELIVERY_IND(msg_fail_p);
+ msg->gNB_ue_ngap_id = req->gNB_ue_ngap_id;
+ msg->nas_pdu.length = req->nas_pdu.length;
+ msg->nas_pdu.buffer = req->nas_pdu.buffer;
+ // TODO add failure cause when defined!
+ itti_send_msg_to_task(TASK_NGAP, instance, msg_fail_p);
+ return (-1);
+ }
- /* Is it the first income from NGAP ? */
- if (ue_context_p->ue_context.gNB_ue_ngap_id == 0) {
- ue_context_p->ue_context.gNB_ue_ngap_id = NGAP_DOWNLINK_NAS (msg_p).gNB_ue_ngap_id;
- }
+ gNB_RRC_UE_t *UE = &ue_context_p->ue_context;
+ PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt, instance, GNB_FLAG_YES, UE->rnti, 0, 0);
- /* Create message for PDCP (DLInformationTransfer_t) */
- length = do_NR_DLInformationTransfer (
- instance,
- &buffer,
- rrc_gNB_get_next_transaction_identifier (instance),
- NGAP_DOWNLINK_NAS (msg_p).nas_pdu.length,
- NGAP_DOWNLINK_NAS (msg_p).nas_pdu.buffer);
- LOG_DUMPMSG(NR_RRC, DEBUG_RRC, buffer, length, "[MSG] RRC DL Information Transfer\n");
- /*
- * switch UL or DL NAS message without RRC piggybacked to SRB2 if active.
- */
- switch (RC.nrrrc[ctxt.module_id]->node_type) {
- case ngran_gNB_CU:
- case ngran_gNB_CUCP:
- /* Transfer data to PDCP */
- nr_rrc_data_req (
- &ctxt,
- ue_context_p->ue_context.Srb2.Active == 1 ? ue_context_p->ue_context.Srb2.Srb_info.Srb_id : ue_context_p->ue_context.Srb1.Srb_info.Srb_id,
- (*rrc_gNB_mui)++,
- SDU_CONFIRM_NO,
- length,
- buffer,
- PDCP_TRANSMISSION_MODE_CONTROL);
- break;
+ /* Create message for PDCP (DLInformationTransfer_t) */
+ length = do_NR_DLInformationTransfer(instance, &buffer, rrc_gNB_get_next_transaction_identifier(instance), req->nas_pdu.length, req->nas_pdu.buffer);
+ LOG_DUMPMSG(NR_RRC, DEBUG_RRC, buffer, length, "[MSG] RRC DL Information Transfer\n");
+ /*
+ * switch UL or DL NAS message without RRC piggybacked to SRB2 if active.
+ */
+ switch (RC.nrrrc[ctxt.module_id]->node_type) {
+ case ngran_gNB_CU:
+ case ngran_gNB_CUCP:
+ case ngran_gNB: {
+ long srb_id;
+ if (UE->Srb[2].Active)
+ srb_id = UE->Srb[2].Srb_info.Srb_id;
+ else
+ srb_id = UE->Srb[1].Srb_info.Srb_id;
+ AssertFatal(srb_id > 0 && srb_id < maxSRBs, "");
+ /* Transfer data to PDCP */
+ nr_rrc_data_req(&ctxt, srb_id, (*rrc_gNB_mui)++, SDU_CONFIRM_NO, length, buffer, PDCP_TRANSMISSION_MODE_CONTROL);
+ free(buffer); // nr_rrc_data_req do a second malloc and copy
+ } break;
- case ngran_gNB_DU:
- // nothing to do for DU
- AssertFatal(1==0,"nothing to do for DU\n");
- break;
+ case ngran_gNB_DU:
+ // nothing to do for DU
+ break;
- case ngran_gNB:
- {
- /* Transfer data to PDCP */
- nr_rrc_data_req (
- &ctxt,
- ue_context_p->ue_context.Srb2.Active == 1 ? ue_context_p->ue_context.Srb2.Srb_info.Srb_id : ue_context_p->ue_context.Srb1.Srb_info.Srb_id,
- (*rrc_gNB_mui)++,
- SDU_CONFIRM_NO,
- length,
- buffer,
- PDCP_TRANSMISSION_MODE_CONTROL);
- }
- break;
-
- default :
- LOG_W(NR_RRC, "Unknown node type %d\n", RC.nrrrc[ctxt.module_id]->node_type);
- }
- return (0);
- }
+ default:
+ LOG_W(NR_RRC, "Unknown node type %d\n", RC.nrrrc[ctxt.module_id]->node_type);
+ }
+ return (0);
}
//------------------------------------------------------------------------------
@@ -853,12 +660,13 @@ rrc_gNB_send_NGAP_UPLINK_NAS(
uint8_t *pdu_buffer;
MessageDef *msg_p;
NR_ULInformationTransfer_t *ulInformationTransfer = ul_dcch_msg->message.choice.c1->choice.ulInformationTransfer;
+ gNB_RRC_UE_t *UE = &ue_context_pP->ue_context;
if (ulInformationTransfer->criticalExtensions.present == NR_ULInformationTransfer__criticalExtensions_PR_ulInformationTransfer) {
pdu_length = ulInformationTransfer->criticalExtensions.choice.ulInformationTransfer->dedicatedNAS_Message->size;
pdu_buffer = ulInformationTransfer->criticalExtensions.choice.ulInformationTransfer->dedicatedNAS_Message->buf;
msg_p = itti_alloc_new_message (TASK_RRC_GNB, 0, NGAP_UPLINK_NAS);
- NGAP_UPLINK_NAS (msg_p).gNB_ue_ngap_id = ue_context_pP->ue_context.gNB_ue_ngap_id;
+ NGAP_UPLINK_NAS(msg_p).gNB_ue_ngap_id = UE->gNB_ue_ngap_id;
NGAP_UPLINK_NAS (msg_p).nas_pdu.length = pdu_length;
NGAP_UPLINK_NAS (msg_p).nas_pdu.buffer = pdu_buffer;
// extract_imsi(NGAP_UPLINK_NAS (msg_p).nas_pdu.buffer,
@@ -881,156 +689,118 @@ rrc_gNB_send_NGAP_PDUSESSION_SETUP_RESP(
MessageDef *msg_p;
int pdu_sessions_done = 0;
int pdu_sessions_failed = 0;
- int pdusession;
- int qos_flow_index;
msg_p = itti_alloc_new_message (TASK_RRC_GNB, 0, NGAP_PDUSESSION_SETUP_RESP);
- NGAP_PDUSESSION_SETUP_RESP(msg_p).gNB_ue_ngap_id = ue_context_pP->ue_context.gNB_ue_ngap_id;
+ ngap_pdusession_setup_resp_t *resp = &NGAP_PDUSESSION_SETUP_RESP(msg_p);
+ gNB_RRC_UE_t *UE = &ue_context_pP->ue_context;
+ resp->gNB_ue_ngap_id = UE->gNB_ue_ngap_id;
- for (pdusession = 0; pdusession < ue_context_pP->ue_context.nb_of_pdusessions; pdusession++) {
- // if (xid == ue_context_pP->ue_context.pdusession[pdusession].xid) {
- if (ue_context_pP->ue_context.pduSession[pdusession].status == PDU_SESSION_STATUS_DONE) {
- pdusession_setup_t * tmp=&NGAP_PDUSESSION_SETUP_RESP(msg_p).pdusessions[pdu_sessions_done];
- tmp->pdusession_id = ue_context_pP->ue_context.pduSession[pdusession].param.pdusession_id;
- // tmp->pdusession_id = 1;
- tmp->nb_of_qos_flow = ue_context_pP->ue_context.pduSession[pdusession].param.nb_qos;
- tmp->gtp_teid = ue_context_pP->ue_context.gnb_gtp_teid[pdusession];
- tmp->gNB_addr.pdu_session_type = PDUSessionType_ipv4;
- tmp->gNB_addr.length = ue_context_pP->ue_context.gnb_gtp_addrs[pdusession].length;
- memcpy(tmp->gNB_addr.buffer,
- ue_context_pP->ue_context.gnb_gtp_addrs[pdusession].buffer, tmp->gNB_addr.length);
- for (qos_flow_index = 0; qos_flow_index < tmp->nb_of_qos_flow; qos_flow_index++) {
- tmp->associated_qos_flows[qos_flow_index].qfi =
- ue_context_pP->ue_context.pduSession[pdusession].param.qos[qos_flow_index].qfi;
- tmp->associated_qos_flows[qos_flow_index].qos_flow_mapping_ind = QOSFLOW_MAPPING_INDICATION_DL;
- }
-
- ue_context_pP->ue_context.pduSession[pdusession].status = PDU_SESSION_STATUS_ESTABLISHED;
- LOG_I (NR_RRC,"gnb_gtp_addr (msg index %d, pdu_sessions index %d, status %d, xid %d): nb_of_pdusessions %d, pdusession_id %d, teid: %u \n ",
- pdu_sessions_done, pdusession, ue_context_pP->ue_context.pduSession[pdusession].status, xid,
- ue_context_pP->ue_context.nb_of_pdusessions,
- NGAP_PDUSESSION_SETUP_RESP (msg_p).pdusessions[pdu_sessions_done].pdusession_id,
- NGAP_PDUSESSION_SETUP_RESP (msg_p).pdusessions[pdu_sessions_done].gtp_teid);
- pdu_sessions_done++;
- } else if ((ue_context_pP->ue_context.pduSession[pdusession].status == PDU_SESSION_STATUS_NEW) ||
- (ue_context_pP->ue_context.pduSession[pdusession].status == PDU_SESSION_STATUS_ESTABLISHED)) {
- LOG_D (NR_RRC,"PDU-SESSION is NEW or already ESTABLISHED\n");
- } else { /* to be improved */
- ue_context_pP->ue_context.pduSession[pdusession].status = PDU_SESSION_STATUS_FAILED;
- NGAP_PDUSESSION_SETUP_RESP (msg_p).pdusessions_failed[pdu_sessions_failed].pdusession_id = ue_context_pP->ue_context.pduSession[pdusession].param.pdusession_id;
- pdu_sessions_failed++;
- // TODO add cause when it will be integrated
+ for (int pdusession = 0; pdusession < UE->nb_of_pdusessions; pdusession++) {
+ rrc_pdu_session_param_t *session = &UE->pduSession[pdusession];
+ if (session->status == PDU_SESSION_STATUS_DONE) {
+ pdusession_setup_t *tmp = &resp->pdusessions[pdu_sessions_done];
+ tmp->pdusession_id = session->param.pdusession_id;
+ tmp->nb_of_qos_flow = session->param.nb_qos;
+ tmp->gtp_teid = UE->gnb_gtp_teid[pdusession];
+ tmp->gNB_addr.pdu_session_type = PDUSessionType_ipv4;
+ tmp->gNB_addr.length = UE->gnb_gtp_addrs[pdusession].length;
+ memcpy(tmp->gNB_addr.buffer, UE->gnb_gtp_addrs[pdusession].buffer, tmp->gNB_addr.length);
+ for (int qos_flow_index = 0; qos_flow_index < tmp->nb_of_qos_flow; qos_flow_index++) {
+ tmp->associated_qos_flows[qos_flow_index].qfi = session->param.qos[qos_flow_index].qfi;
+ tmp->associated_qos_flows[qos_flow_index].qos_flow_mapping_ind = QOSFLOW_MAPPING_INDICATION_DL;
}
- NGAP_PDUSESSION_SETUP_RESP(msg_p).nb_of_pdusessions = pdu_sessions_done;
- NGAP_PDUSESSION_SETUP_RESP(msg_p).nb_of_pdusessions_failed = pdu_sessions_failed;
+
+ session->status = PDU_SESSION_STATUS_ESTABLISHED;
+ LOG_I(NR_RRC,
+ "msg index %d, pdu_sessions index %d, status %d, xid %d): nb_of_pdusessions %d, pdusession_id %d, teid: %u \n ",
+ pdu_sessions_done,
+ pdusession,
+ session->status,
+ xid,
+ UE->nb_of_pdusessions,
+ tmp->pdusession_id,
+ tmp->gtp_teid);
+ pdu_sessions_done++;
+ } else if (session->status != PDU_SESSION_STATUS_ESTABLISHED) {
+ session->status = PDU_SESSION_STATUS_FAILED;
+ resp->pdusessions_failed[pdu_sessions_failed].pdusession_id = session->param.pdusession_id;
+ pdu_sessions_failed++;
+ // TODO add cause when it will be integrated
+ }
+ resp->nb_of_pdusessions = pdu_sessions_done;
+ resp->nb_of_pdusessions_failed = pdu_sessions_failed;
// } else {
// LOG_D(NR_RRC,"xid does not corresponds (context pdu_sessions index %d, status %d, xid %d/%d) \n ",
- // pdusession, ue_context_pP->ue_context.pdusession[pdusession].status, xid, ue_context_pP->ue_context.pdusession[pdusession].xid);
+ // pdusession, UE->pdusession[pdusession].status, xid, UE->pdusession[pdusession].xid);
// }
}
- if ((pdu_sessions_done > 0) ) {
- LOG_I(NR_RRC,
- "NGAP_PDUSESSION_SETUP_RESP: sending the message: nb_of_pdusessions %d, total pdu_sessions %d, index %d\n",
- ue_context_pP->ue_context.nb_of_pdusessions,
- ue_context_pP->ue_context.nb_of_pdusessions,
- pdusession);
+ if ((pdu_sessions_done > 0 || pdu_sessions_failed)) {
+ LOG_I(NR_RRC, "NGAP_PDUSESSION_SETUP_RESP: sending the message\n");
itti_send_msg_to_task (TASK_NGAP, ctxt_pP->instance, msg_p);
}
for(int i = 0; i < NB_RB_MAX; i++) {
- ue_context_pP->ue_context.pduSession[i].xid = -1;
+ UE->pduSession[i].xid = -1;
}
return;
}
//------------------------------------------------------------------------------
-void
-rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ(
- MessageDef *msg_p,
- const char *msg_name,
- instance_t instance
-)
+void rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ(MessageDef *msg_p, instance_t instance)
//------------------------------------------------------------------------------
{
- gNB_RRC_INST *rrc;
- uint16_t ue_initial_id;
- uint32_t gNB_ue_ngap_id;
+ gNB_RRC_INST *rrc;
rrc_gNB_ue_context_t *ue_context_p = NULL;
protocol_ctxt_t ctxt={0};
ngap_pdusession_setup_req_t* msg=&NGAP_PDUSESSION_SETUP_REQ(msg_p);
- ue_initial_id = msg->ue_initial_id;
- gNB_ue_ngap_id = msg->gNB_ue_ngap_id;
- ue_context_p = rrc_gNB_get_ue_context_from_ngap_ids(instance, ue_initial_id, gNB_ue_ngap_id);
- PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, 0, GNB_FLAG_YES, ue_context_p->ue_context.rnti, 0, 0, 0);
+ ue_context_p = rrc_gNB_get_ue_context(RC.nrrrc[instance], msg->gNB_ue_ngap_id);
+ gNB_RRC_UE_t *UE = &ue_context_p->ue_context;
+ PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, 0, GNB_FLAG_YES, UE->rnti, 0, 0, 0);
rrc = RC.nrrrc[ctxt.module_id];
- LOG_I(NR_RRC, "[gNB %ld] Received %s: ue_initial_id %d, gNB_ue_ngap_id %u \n",
- instance, msg_name, ue_initial_id, gNB_ue_ngap_id);
+ LOG_I(NR_RRC, "[gNB %ld] gNB_ue_ngap_id %u \n", instance, msg->gNB_ue_ngap_id);
if (ue_context_p == NULL) {
MessageDef *msg_fail_p = NULL;
- LOG_W(NR_RRC, "[gNB %ld] In NGAP_PDUSESSION_SETUP_REQ: unknown UE from NGAP ids (%d, %u)\n", instance, ue_initial_id, gNB_ue_ngap_id);
+ LOG_W(NR_RRC, "[gNB %ld] In NGAP_PDUSESSION_SETUP_REQ: unknown UE from NGAP ids (%u)\n", instance, msg->gNB_ue_ngap_id);
msg_fail_p = itti_alloc_new_message(TASK_RRC_GNB, 0, NGAP_PDUSESSION_SETUP_REQUEST_FAIL);
- NGAP_PDUSESSION_SETUP_REQ(msg_fail_p).gNB_ue_ngap_id = gNB_ue_ngap_id;
+ NGAP_PDUSESSION_SETUP_FAIL(msg_fail_p).gNB_ue_ngap_id = msg->gNB_ue_ngap_id;
// TODO add failure cause when defined!
itti_send_msg_to_task (TASK_NGAP, instance, msg_fail_p);
return ;
}
- ue_context_p->ue_context.gNB_ue_ngap_id = msg->gNB_ue_ngap_id;
- ue_context_p->ue_context.amf_ue_ngap_id = msg->amf_ue_ngap_id;
+ UE->gNB_ue_ngap_id = msg->gNB_ue_ngap_id;
+ UE->amf_ue_ngap_id = msg->amf_ue_ngap_id;
+ e1ap_bearer_setup_req_t bearer_req = {0};
- /* Configurations are referred from rrc_gNB_generate_dedicatedRRCReconfiguration() and
- rrc_gNB_process_RRCReconfigurationComplete()
+ for (int i = 0; i < msg->nb_pdusessions_tosetup; i++) {
+ rrc_pdu_session_param_t *pduSession = find_pduSession(UE, msg->pdusession_setup_params[i].pdusession_id, true);
+ pdusession_t *session = &pduSession->param;
+ LOG_I(NR_RRC, "Adding pdusession %d, total nb of sessions %d\n", session->pdusession_id, UE->nb_of_pdusessions);
+ session->pdusession_id = msg->pdusession_setup_params[i].pdusession_id;
+ session->nas_pdu = msg->pdusession_setup_params[i].nas_pdu;
+ session->pdusessionTransfer = msg->pdusession_setup_params[i].pdusessionTransfer;
+ decodePDUSessionResourceSetup(session);
+ bearer_req.gNB_cu_cp_ue_id = msg->gNB_ue_ngap_id;
+ bearer_req.rnti = UE->rnti;
+ bearer_req.cipheringAlgorithm = UE->ciphering_algorithm;
+ memcpy(bearer_req.encryptionKey, UE->kgnb, sizeof(UE->kgnb));
+ bearer_req.integrityProtectionAlgorithm = UE->integrity_algorithm;
+ memcpy(bearer_req.integrityProtectionKey, UE->kgnb, sizeof(UE->kgnb));
+ bearer_req.ueDlAggMaxBitRate = msg->ueAggMaxBitRateDownlink;
+ pdu_session_to_setup_t *pdu = bearer_req.pduSession + bearer_req.numPDUSessions;
+ bearer_req.numPDUSessions++;
+ pdu->sessionId = session->pdusession_id;
+ pdu->sst = msg->allowed_nssai[i].sST;
+ pdu->integrityProtectionIndication = rrc->security.do_drb_integrity ? E1AP_IntegrityProtectionIndication_required : E1AP_IntegrityProtectionIndication_not_needed;
- At CU-CP we configure the E1 bearer context setup parameters (PDU sessions, DRBs and
- QoS flows) same as in these functions. At CU-UP we create PDU Sessions and allocate DRBs.
- */
- e1ap_bearer_setup_req_t bearer_req;
-
- bearer_req.gNB_cu_cp_ue_id = gNB_ue_ngap_id;
- bearer_req.rnti = ue_context_p->ue_context.rnti;
- bearer_req.cipheringAlgorithm = ue_context_p->ue_context.ciphering_algorithm;
- memcpy(bearer_req.encryptionKey, ue_context_p->ue_context.kgnb, sizeof(ue_context_p->ue_context.kgnb));
- bearer_req.integrityProtectionAlgorithm = ue_context_p->ue_context.integrity_algorithm;
- memcpy(bearer_req.integrityProtectionKey, ue_context_p->ue_context.kgnb, sizeof(ue_context_p->ue_context.kgnb));
- bearer_req.ueDlAggMaxBitRate = msg->ueAggMaxBitRateDownlink;
-
- bearer_req.numPDUSessions = msg->nb_pdusessions_tosetup;
- int xid = rrc_gNB_get_next_transaction_identifier(ctxt.module_id);
-
- for (int i=0; i < bearer_req.numPDUSessions; i++) {
- int idx = ue_context_p->ue_context.nb_of_pdusessions++;
- pdu_session_to_setup_t *pdu = bearer_req.pduSession + i;
+ pdu->confidentialityProtectionIndication = rrc->security.do_drb_ciphering ? E1AP_ConfidentialityProtectionIndication_required : E1AP_ConfidentialityProtectionIndication_not_needed;
+ pdu->teId = session->gtp_teid;
+ memcpy(&pdu->tlAddress, session->upf_addr.buffer, 4); // Fixme: dirty IPv4 target
pdu->numDRB2Setup = 1; // One DRB per PDU Session. TODO: Remove hardcoding
- ue_context_p->ue_context.pduSession[idx].param = msg->pdusession_setup_params[i];
- ue_context_p->ue_context.pduSession[idx].xid = xid;
- ue_context_p->ue_context.pduSession[idx].status = PDU_SESSION_STATUS_NEW;
-
- pdu->sessionId = msg->pdusession_setup_params[i].pdusession_id;
- pdu->sessionType = msg->pdusession_setup_params[i].upf_addr.pdu_session_type;
- pdu->sst = msg->allowed_nssai[i].sST;
- if (rrc->security.do_drb_integrity) {
- pdu->integrityProtectionIndication = E1AP_IntegrityProtectionIndication_required;
- } else {
- pdu->integrityProtectionIndication = E1AP_IntegrityProtectionIndication_not_needed;
- }
-
- if (rrc->security.do_drb_ciphering) {
- pdu->confidentialityProtectionIndication = E1AP_ConfidentialityProtectionIndication_required;
- } else {
- pdu->confidentialityProtectionIndication = E1AP_ConfidentialityProtectionIndication_not_needed;
- }
- pdu->teId = msg->pdusession_setup_params[i].gtp_teid;
- memcpy(&pdu->tlAddress,
- msg->pdusession_setup_params[i].upf_addr.buffer,
- sizeof(uint8_t)*4);
-
- ue_context_p->ue_context.pduSession[idx].param = msg->pdusession_setup_params[i];
- ue_context_p->ue_context.gNB_ue_ngap_id = msg->gNB_ue_ngap_id;
- ue_context_p->ue_context.amf_ue_ngap_id = msg->amf_ue_ngap_id;
for (int j=0; j < pdu->numDRB2Setup; j++) {
DRB_nGRAN_to_setup_t *drb = pdu->DRBnGRanList + j;
@@ -1056,183 +826,197 @@ rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ(
cellGroup->id = 0; // MCG
}
- drb->numQosFlow2Setup = msg->pdusession_setup_params[i].nb_qos;
+ drb->numQosFlow2Setup = session->nb_qos;
for (int k=0; k < drb->numQosFlow2Setup; k++) {
qos_flow_to_setup_t *qos = drb->qosFlows + k;
- qos->id = msg->pdusession_setup_params[j].qos[k].qfi;
- qos->fiveQI = msg->pdusession_setup_params[j].qos[k].fiveQI;
- qos->fiveQI_type = msg->pdusession_setup_params[j].qos[k].fiveQI_type;
+ qos->id = session->qos[k].qfi;
+ qos->fiveQI = session->qos[k].fiveQI;
+ qos->fiveQI_type = session->qos[k].fiveQI_type;
- qos->qoSPriorityLevel = msg->pdusession_setup_params[i].qos[k].allocation_retention_priority.priority_level;
- qos->pre_emptionCapability = msg->pdusession_setup_params[i].qos[k].allocation_retention_priority.pre_emp_capability;
- qos->pre_emptionVulnerability = msg->pdusession_setup_params[i].qos[k].allocation_retention_priority.pre_emp_vulnerability;
+ qos->qoSPriorityLevel = session->qos[k].allocation_retention_priority.priority_level;
+ qos->pre_emptionCapability = session->qos[k].allocation_retention_priority.pre_emp_capability;
+ qos->pre_emptionVulnerability = session->qos[k].allocation_retention_priority.pre_emp_vulnerability;
}
}
}
-
rrc->cucp_cuup.bearer_context_setup(&bearer_req, instance);
return;
}
-//------------------------------------------------------------------------------
-int
-rrc_gNB_process_NGAP_PDUSESSION_MODIFY_REQ(
- MessageDef *msg_p,
- const char *msg_name,
- instance_t instance
-)
-//------------------------------------------------------------------------------
+static void fill_qos2(NGAP_QosFlowAddOrModifyRequestList_t *qos, pdusession_t *session)
{
- uint16_t ue_initial_id;
- uint32_t gNB_ue_ngap_id;
- uint8_t nb_pdusessions_tomodify;
- rrc_gNB_ue_context_t *ue_context_p = NULL;
- uint8_t i;
- uint8_t qos_flow_index;
- protocol_ctxt_t ctxt;
-
- ue_initial_id = NGAP_PDUSESSION_MODIFY_REQ(msg_p).ue_initial_id;
- gNB_ue_ngap_id = NGAP_PDUSESSION_MODIFY_REQ(msg_p).gNB_ue_ngap_id;
- nb_pdusessions_tomodify = NGAP_PDUSESSION_MODIFY_REQ(msg_p).nb_pdusessions_tomodify;
-
- ue_context_p = rrc_gNB_get_ue_context_from_ngap_ids(instance, ue_initial_id, gNB_ue_ngap_id);
- if (ue_context_p == NULL) {
- LOG_W(NR_RRC, "[gNB %ld] In NGAP_PDUSESSION_MODIFY_REQ: unknown UE from NGAP ids (%d, %u)\n", instance, ue_initial_id, gNB_ue_ngap_id);
- // TODO
- return (-1);
- } else {
- PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt, instance, GNB_FLAG_YES, ue_context_p->ue_context.rnti, 0, 0);
- ctxt.eNB_index = 0;
-
- ue_context_p->ue_context.gNB_ue_ngap_id = gNB_ue_ngap_id;
- {
- int j;
- bool is_treated[NGAP_MAX_PDUSESSION] = {false};
- uint8_t nb_of_failed_pdusessions = 0;
-
- for (i = 0; i < nb_pdusessions_tomodify; i++) {
- if (is_treated[i] == true) {
- continue;
- }
-
- //Check if same PDU session ID to handle multiple pdu sessions
- for (j = i+1; j < nb_pdusessions_tomodify; j++) {
- if (is_treated[j] == false &&
- NGAP_PDUSESSION_MODIFY_REQ(msg_p).pdusession_modify_params[j].pdusession_id ==
- NGAP_PDUSESSION_MODIFY_REQ(msg_p).pdusession_modify_params[i].pdusession_id) {
- // handle multiple pdu session id
- LOG_D(NR_RRC, "handle multiple pdu session id \n");
- ue_context_p->ue_context.modify_pdusession[j].status = PDU_SESSION_STATUS_NEW;
- ue_context_p->ue_context.modify_pdusession[j].param.pdusession_id =
- NGAP_PDUSESSION_MODIFY_REQ(msg_p).pdusession_modify_params[j].pdusession_id;
- ue_context_p->ue_context.modify_pdusession[j].cause = NGAP_CAUSE_RADIO_NETWORK;
- ue_context_p->ue_context.modify_pdusession[j].cause_value = NGAP_CauseRadioNetwork_multiple_PDU_session_ID_instances;
- nb_of_failed_pdusessions++;
- is_treated[i] = true;
- is_treated[j] = true;
- }
- }
- // handle multiple pdu session id case
- if (is_treated[i] == true) {
- LOG_D(NR_RRC, "handle multiple pdu session id \n");
- ue_context_p->ue_context.modify_pdusession[i].status = PDU_SESSION_STATUS_NEW;
- ue_context_p->ue_context.modify_pdusession[i].param.pdusession_id =
- NGAP_PDUSESSION_MODIFY_REQ(msg_p).pdusession_modify_params[i].pdusession_id;
- ue_context_p->ue_context.modify_pdusession[i].cause = NGAP_CAUSE_RADIO_NETWORK;
- ue_context_p->ue_context.modify_pdusession[i].cause_value = NGAP_CauseRadioNetwork_multiple_PDU_session_ID_instances;
- nb_of_failed_pdusessions++;
- continue;
- }
-
- // Check pdu session ID is established
- for (j = 0; j < NR_NB_RB_MAX -3; j++) {
- if (ue_context_p->ue_context.pduSession[j].param.pdusession_id ==
- NGAP_PDUSESSION_MODIFY_REQ(msg_p).pdusession_modify_params[i].pdusession_id) {
- if (ue_context_p->ue_context.pduSession[j].status == PDU_SESSION_STATUS_TORELEASE ||
- ue_context_p->ue_context.pduSession[j].status == PDU_SESSION_STATUS_DONE) {
- break;
- }
- // Found established pdu session, prepare to send RRC message
- ue_context_p->ue_context.modify_pdusession[i].status = PDU_SESSION_STATUS_NEW;
- ue_context_p->ue_context.modify_pdusession[i].param.pdusession_id =
- NGAP_PDUSESSION_MODIFY_REQ(msg_p).pdusession_modify_params[i].pdusession_id;
- ue_context_p->ue_context.modify_pdusession[i].cause = NGAP_CAUSE_NOTHING;
- if (NGAP_PDUSESSION_MODIFY_REQ(msg_p).pdusession_modify_params[i].nas_pdu.buffer != NULL) {
- ue_context_p->ue_context.modify_pdusession[i].param.nas_pdu.buffer =
- NGAP_PDUSESSION_MODIFY_REQ(msg_p).pdusession_modify_params[i].nas_pdu.buffer;
- ue_context_p->ue_context.modify_pdusession[i].param.nas_pdu.length =
- NGAP_PDUSESSION_MODIFY_REQ(msg_p).pdusession_modify_params[i].nas_pdu.length;
- }
- // Save new pdu session parameters, qos, upf addr, teid
- for (qos_flow_index = 0; qos_flow_index < NGAP_PDUSESSION_MODIFY_REQ(msg_p).pdusession_modify_params[i].nb_qos; qos_flow_index++) {
- ue_context_p->ue_context.modify_pdusession[i].param.qos[qos_flow_index] =
- NGAP_PDUSESSION_MODIFY_REQ(msg_p).pdusession_modify_params[i].qos[qos_flow_index];
- }
- ue_context_p->ue_context.modify_pdusession[i].param.nb_qos =
- NGAP_PDUSESSION_MODIFY_REQ(msg_p).pdusession_modify_params[i].nb_qos;
-
- ue_context_p->ue_context.modify_pdusession[i].param.upf_addr =
- ue_context_p->ue_context.pduSession[j].param.upf_addr;
- ue_context_p->ue_context.modify_pdusession[i].param.gtp_teid =
- ue_context_p->ue_context.pduSession[j].param.gtp_teid;
-
- is_treated[i] = true;
- break;
- }
- }
-
- // handle Unknown pdu session ID
- if (is_treated[i] == false) {
- LOG_D(NR_RRC, "handle Unknown pdu session ID \n");
- ue_context_p->ue_context.modify_pdusession[i].status = PDU_SESSION_STATUS_NEW;
- ue_context_p->ue_context.modify_pdusession[i].param.pdusession_id =
- NGAP_PDUSESSION_MODIFY_REQ(msg_p).pdusession_modify_params[i].pdusession_id;
- ue_context_p->ue_context.modify_pdusession[i].cause = NGAP_CAUSE_RADIO_NETWORK;
- ue_context_p->ue_context.modify_pdusession[i].cause_value = NGAP_CauseRadioNetwork_unknown_PDU_session_ID;
- nb_of_failed_pdusessions++;
- is_treated[i] = true;
- }
+ // we need to duplicate the function fill_qos because all data types are slightly different
+ DevAssert(qos->list.count > 0);
+ DevAssert(qos->list.count <= NGAP_maxnoofQosFlows);
+ for (int qosIdx = 0; qosIdx < qos->list.count; qosIdx++) {
+ NGAP_QosFlowAddOrModifyRequestItem_t *qosFlowItem_p = qos->list.array[qosIdx];
+ // Set the QOS informations
+ session->qos[qosIdx].qfi = (uint8_t)qosFlowItem_p->qosFlowIdentifier;
+ NGAP_QosCharacteristics_t *qosChar = &qosFlowItem_p->qosFlowLevelQosParameters->qosCharacteristics;
+ if (qosChar->present == NGAP_QosCharacteristics_PR_nonDynamic5QI) {
+ if (qosChar->choice.nonDynamic5QI != NULL) {
+ session->qos[qosIdx].fiveQI = (uint64_t)qosChar->choice.nonDynamic5QI->fiveQI;
}
-
- ue_context_p->ue_context.nb_of_modify_pdusessions = nb_pdusessions_tomodify;
- ue_context_p->ue_context.nb_of_failed_pdusessions = nb_of_failed_pdusessions;
+ } else if (qosChar->present == NGAP_QosCharacteristics_PR_dynamic5QI) {
+ // TODO
}
- if (ue_context_p->ue_context.nb_of_failed_pdusessions < ue_context_p->ue_context.nb_of_modify_pdusessions) {
- LOG_D(NR_RRC, "generate RRCReconfiguration \n");
- rrc_gNB_modify_dedicatedRRCReconfiguration(&ctxt, ue_context_p);
- } else { // all pdu modification failed
- LOG_I(NR_RRC, "pdu session modify failed, fill NGAP_PDUSESSION_MODIFY_RESP with the pdu session information that failed to modify \n");
- uint8_t nb_of_pdu_sessions_failed = 0;
- MessageDef *msg_fail_p = NULL;
- msg_fail_p = itti_alloc_new_message (TASK_RRC_GNB, 0, NGAP_PDUSESSION_MODIFY_RESP);
- if (msg_fail_p == NULL) {
- LOG_E(NR_RRC, "itti_alloc_new_message failed, msg_fail_p is NULL \n");
- return (-1);
- }
+ ngap_allocation_retention_priority_t *tmp = &session->qos[qosIdx].allocation_retention_priority;
+ NGAP_AllocationAndRetentionPriority_t *tmp2 = &qosFlowItem_p->qosFlowLevelQosParameters->allocationAndRetentionPriority;
+ tmp->priority_level = tmp2->priorityLevelARP;
+ tmp->pre_emp_capability = tmp2->pre_emptionCapability;
+ tmp->pre_emp_vulnerability = tmp2->pre_emptionVulnerability;
+ }
+ session->nb_qos = qos->list.count;
+}
- NGAP_PDUSESSION_MODIFY_RESP(msg_fail_p).gNB_ue_ngap_id = gNB_ue_ngap_id;
- NGAP_PDUSESSION_MODIFY_RESP(msg_fail_p).nb_of_pdusessions = 0;
+static void decodePDUSessionResourceModify(pdusession_t *param, const ngap_pdu_t pdu)
+{
+ NGAP_PDUSessionResourceModifyRequestTransfer_t *pdusessionTransfer;
+ asn_dec_rval_t dec_rval = aper_decode(NULL, &asn_DEF_NGAP_PDUSessionResourceModifyRequestTransfer, (void **)&pdusessionTransfer, pdu.buffer, pdu.length, 0, 0);
- for (nb_of_pdu_sessions_failed = 0; nb_of_pdu_sessions_failed < ue_context_p->ue_context.nb_of_failed_pdusessions; nb_of_pdu_sessions_failed++) {
- NGAP_PDUSESSION_MODIFY_RESP(msg_fail_p).pdusessions_failed[nb_of_pdu_sessions_failed].pdusession_id =
- ue_context_p->ue_context.modify_pdusession[nb_of_pdu_sessions_failed].param.pdusession_id;
- NGAP_PDUSESSION_MODIFY_RESP(msg_fail_p).pdusessions_failed[nb_of_pdu_sessions_failed].cause =
- ue_context_p->ue_context.modify_pdusession[nb_of_pdu_sessions_failed].cause;
- NGAP_PDUSESSION_MODIFY_RESP(msg_fail_p).pdusessions_failed[nb_of_pdu_sessions_failed].cause_value =
- ue_context_p->ue_context.modify_pdusession[nb_of_pdu_sessions_failed].cause_value;
- }
+ if (dec_rval.code != RC_OK) {
+ LOG_E(NR_RRC, "could not decode PDUSessionResourceModifyRequestTransfer\n");
+ return;
+ }
- NGAP_PDUSESSION_MODIFY_RESP(msg_fail_p).nb_of_pdusessions_failed =
- ue_context_p->ue_context.nb_of_failed_pdusessions;
- itti_send_msg_to_task(TASK_NGAP, instance, msg_fail_p);
- ue_context_p->ue_context.nb_of_modify_pdusessions = 0;
- ue_context_p->ue_context.nb_of_failed_pdusessions = 0;
- memset(ue_context_p->ue_context.modify_pdusession, 0, sizeof(ue_context_p->ue_context.modify_pdusession));
- return (0);
+ for (int j = 0; j < pdusessionTransfer->protocolIEs.list.count; j++) {
+ NGAP_PDUSessionResourceModifyRequestTransferIEs_t *pdusessionTransfer_ies = pdusessionTransfer->protocolIEs.list.array[j];
+ switch (pdusessionTransfer_ies->id) {
+ /* optional PDUSessionAggregateMaximumBitRate */
+ case NGAP_ProtocolIE_ID_id_PDUSessionAggregateMaximumBitRate:
+ // TODO
+ LOG_E(NR_RRC, "Cant' handle NGAP_ProtocolIE_ID_id_PDUSessionAggregateMaximumBitRate\n");
+ break;
+
+ /* optional UL-NGU-UP-TNLModifyList */
+ case NGAP_ProtocolIE_ID_id_UL_NGU_UP_TNLModifyList:
+ // TODO
+ LOG_E(NR_RRC, "Cant' handle NGAP_ProtocolIE_ID_id_UL_NGU_UP_TNLModifyList\n");
+ break;
+
+ /* optional NetworkInstance */
+ case NGAP_ProtocolIE_ID_id_NetworkInstance:
+ // TODO
+ LOG_E(NR_RRC, "Cant' handle NGAP_ProtocolIE_ID_id_NetworkInstance\n");
+ break;
+
+ /* optional QosFlowAddOrModifyRequestList */
+ case NGAP_ProtocolIE_ID_id_QosFlowAddOrModifyRequestList:
+ fill_qos2(&pdusessionTransfer_ies->value.choice.QosFlowAddOrModifyRequestList, param);
+ break;
+
+ /* optional QosFlowToReleaseList */
+ case NGAP_ProtocolIE_ID_id_QosFlowToReleaseList:
+ // TODO
+ LOG_E(NR_RRC, "Can't handle NGAP_ProtocolIE_ID_id_QosFlowToReleaseList\n");
+ break;
+
+ /* optional AdditionalUL-NGU-UP-TNLInformation */
+ case NGAP_ProtocolIE_ID_id_AdditionalUL_NGU_UP_TNLInformation:
+ // TODO
+ LOG_E(NR_RRC, "Cant' handle NGAP_ProtocolIE_ID_id_AdditionalUL_NGU_UP_TNLInformation\n");
+ break;
+
+ /* optional CommonNetworkInstance */
+ case NGAP_ProtocolIE_ID_id_CommonNetworkInstance:
+ // TODO
+ LOG_E(NR_RRC, "Cant' handle NGAP_ProtocolIE_ID_id_CommonNetworkInstance\n");
+ break;
+
+ default:
+ LOG_E(NR_RRC, "could not found protocolIEs id %ld\n", pdusessionTransfer_ies->id);
+ return;
}
}
+ ASN_STRUCT_FREE(asn_DEF_NGAP_PDUSessionResourceModifyRequestTransfer,pdusessionTransfer );
+}
+
+//------------------------------------------------------------------------------
+int rrc_gNB_process_NGAP_PDUSESSION_MODIFY_REQ(MessageDef *msg_p, instance_t instance)
+//------------------------------------------------------------------------------
+{
+ rrc_gNB_ue_context_t *ue_context_p = NULL;
+
+ protocol_ctxt_t ctxt;
+ ngap_pdusession_modify_req_t *req = &NGAP_PDUSESSION_MODIFY_REQ(msg_p);
+
+ ue_context_p = rrc_gNB_get_ue_context(RC.nrrrc[instance], req->gNB_ue_ngap_id);
+ if (ue_context_p == NULL) {
+ LOG_W(NR_RRC, "[gNB %ld] In NGAP_PDUSESSION_MODIFY_REQ: unknown UE from NGAP ids (%u)\n", instance, req->gNB_ue_ngap_id);
+ // TO implement return setup failed
+ return (-1);
+ }
+ gNB_RRC_UE_t *UE = &ue_context_p->ue_context;
+ PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt, instance, GNB_FLAG_YES, UE->rnti, 0, 0);
+ ctxt.eNB_index = 0;
+ uint8_t nb_of_failed_pdusessions = 0;
+
+ for (int i = 0; i < req->nb_pdusessions_tomodify; i++) {
+ int j;
+ for (j = 0; j < UE->nb_of_pdusessions; j++)
+ if (UE->modify_pdusession[j].param.pdusession_id == req->pdusession_modify_params[j].pdusession_id)
+ break;
+ if (j == UE->nb_of_pdusessions) {
+ LOG_W(NR_RRC, "To finish, modify a not existing pdu session\n");
+ // handle multiple pdu session id
+ LOG_D(NR_RRC, "handle multiple pdu session id \n");
+ UE->modify_pdusession[j].status = PDU_SESSION_STATUS_NEW;
+ UE->modify_pdusession[j].param.pdusession_id = req->pdusession_modify_params[j].pdusession_id;
+ UE->modify_pdusession[j].cause = NGAP_CAUSE_RADIO_NETWORK;
+ UE->modify_pdusession[i].cause_value = NGAP_CauseRadioNetwork_unknown_PDU_session_ID;
+ nb_of_failed_pdusessions++;
+ } else {
+ UE->modify_pdusession[j].status = PDU_SESSION_STATUS_NEW;
+ UE->modify_pdusession[j].param.pdusession_id = req->pdusession_modify_params[i].pdusession_id;
+ UE->modify_pdusession[j].cause = NGAP_CAUSE_RADIO_NETWORK;
+ UE->modify_pdusession[j].cause_value = NGAP_CauseRadioNetwork_multiple_PDU_session_ID_instances;
+ UE->modify_pdusession[j].status = PDU_SESSION_STATUS_NEW;
+ UE->modify_pdusession[j].param.pdusession_id = req->pdusession_modify_params[i].pdusession_id;
+ UE->modify_pdusession[j].cause = NGAP_CAUSE_NOTHING;
+ if (req->pdusession_modify_params[i].nas_pdu.buffer != NULL) {
+ UE->modify_pdusession[i].param.nas_pdu = req->pdusession_modify_params[i].nas_pdu;
+ }
+ // Save new pdu session parameters, qos, upf addr, teid
+ decodePDUSessionResourceModify(&UE->modify_pdusession[j].param, UE->modify_pdusession[i].param.pdusessionTransfer);
+ UE->modify_pdusession[j].param.upf_addr = UE->pduSession[j].param.upf_addr;
+ UE->modify_pdusession[j].param.gtp_teid = UE->pduSession[j].param.gtp_teid;
+ }
+ }
+
+ UE->nb_of_modify_pdusessions = req->nb_pdusessions_tomodify - nb_of_failed_pdusessions;
+ UE->nb_of_failed_pdusessions = nb_of_failed_pdusessions;
+
+ if (UE->nb_of_failed_pdusessions < UE->nb_of_modify_pdusessions) {
+ LOG_D(NR_RRC, "generate RRCReconfiguration \n");
+ rrc_gNB_modify_dedicatedRRCReconfiguration(&ctxt, ue_context_p);
+ } else { // all pdu modification failed
+ LOG_I(NR_RRC, "pdu session modify failed, fill NGAP_PDUSESSION_MODIFY_RESP with the pdu session information that failed to modify \n");
+ MessageDef *msg_fail_p = NULL;
+ msg_fail_p = itti_alloc_new_message(TASK_RRC_GNB, 0, NGAP_PDUSESSION_MODIFY_RESP);
+ if (msg_fail_p == NULL) {
+ LOG_E(NR_RRC, "itti_alloc_new_message failed, msg_fail_p is NULL \n");
+ return (-1);
+ }
+ ngap_pdusession_modify_resp_t *msg = &NGAP_PDUSESSION_MODIFY_RESP(msg_fail_p);
+ msg->gNB_ue_ngap_id = req->gNB_ue_ngap_id;
+ msg->nb_of_pdusessions = 0;
+
+ for (int i = 0; i < UE->nb_of_failed_pdusessions; i++) {
+ msg->pdusessions_failed[i].pdusession_id = UE->modify_pdusession[i].param.pdusession_id;
+ msg->pdusessions_failed[i].cause = UE->modify_pdusession[i].cause;
+ msg->pdusessions_failed[i].cause_value = UE->modify_pdusession[i].cause_value;
+ }
+
+ msg->nb_of_pdusessions_failed = UE->nb_of_failed_pdusessions;
+ itti_send_msg_to_task(TASK_NGAP, instance, msg_fail_p);
+ UE->nb_of_modify_pdusessions = 0;
+ UE->nb_of_failed_pdusessions = 0;
+ memset(UE->modify_pdusession, 0, sizeof(UE->modify_pdusession));
+ return (0);
+ }
+
return 0;
}
@@ -1245,88 +1029,78 @@ rrc_gNB_send_NGAP_PDUSESSION_MODIFY_RESP(
)
//------------------------------------------------------------------------------
{
- MessageDef *msg_p = NULL;
- int i, j;
- uint8_t qos_flow_index;
+ MessageDef *msg_p = NULL;
uint8_t pdu_sessions_failed = 0;
uint8_t pdu_sessions_done = 0;
-
+ gNB_RRC_UE_t *UE = &ue_context_pP->ue_context;
+
msg_p = itti_alloc_new_message (TASK_RRC_GNB, 0, NGAP_PDUSESSION_MODIFY_RESP);
if (msg_p == NULL) {
LOG_E(NR_RRC, "itti_alloc_new_message failed, msg_p is NULL \n");
return (-1);
}
-
+ ngap_pdusession_modify_resp_t *resp = &NGAP_PDUSESSION_MODIFY_RESP(msg_p);
LOG_I(NR_RRC, "send message NGAP_PDUSESSION_MODIFY_RESP \n");
- NGAP_PDUSESSION_MODIFY_RESP(msg_p).gNB_ue_ngap_id = ue_context_pP->ue_context.gNB_ue_ngap_id;
+ resp->gNB_ue_ngap_id = UE->gNB_ue_ngap_id;
- for (i = 0; i < ue_context_pP->ue_context.nb_of_modify_pdusessions; i++) {
- if (xid == ue_context_pP->ue_context.modify_pdusession[i].xid) {
- if (ue_context_pP->ue_context.modify_pdusession[i].status == PDU_SESSION_STATUS_DONE) {
- for (j = 0; j < ue_context_pP->ue_context.nb_of_pdusessions; j++) {
- if (ue_context_pP->ue_context.modify_pdusession[i].param.pdusession_id ==
- ue_context_pP->ue_context.pduSession[j].param.pdusession_id) {
- LOG_I(NR_RRC, "update pdu session %d \n", ue_context_pP->ue_context.pduSession[j].param.pdusession_id);
- // Update ue_context_pP->ue_context.pduSession
- ue_context_pP->ue_context.pduSession[j].status = PDU_SESSION_STATUS_ESTABLISHED;
- ue_context_pP->ue_context.pduSession[j].cause = NGAP_CAUSE_NOTHING;
- for (qos_flow_index = 0; qos_flow_index < ue_context_pP->ue_context.modify_pdusession[i].param.nb_qos; qos_flow_index++) {
- ue_context_pP->ue_context.pduSession[j].param.qos[qos_flow_index] =
- ue_context_pP->ue_context.modify_pdusession[i].param.qos[qos_flow_index];
- }
- break;
- }
+ for (int i = 0; i < UE->nb_of_modify_pdusessions; i++) {
+ if (xid != UE->modify_pdusession[i].xid) {
+ LOG_W(NR_RRC, "xid does not correspond (context pdu session index %d, status %d, xid %d/%d) \n ", i, UE->modify_pdusession[i].status, xid, UE->modify_pdusession[i].xid);
+ continue;
+ }
+ if (UE->modify_pdusession[i].status == PDU_SESSION_STATUS_DONE) {
+ rrc_pdu_session_param_t *pduSession = find_pduSession(UE, UE->modify_pdusession[i].param.pdusession_id, false);
+ if (pduSession) {
+ LOG_I(NR_RRC, "update pdu session %d \n", pduSession->param.pdusession_id);
+ // Update UE->pduSession
+ pduSession->status = PDU_SESSION_STATUS_ESTABLISHED;
+ pduSession->cause = NGAP_CAUSE_NOTHING;
+ for (int qos_flow_index = 0; qos_flow_index < UE->modify_pdusession[i].param.nb_qos; qos_flow_index++) {
+ pduSession->param.qos[qos_flow_index] = UE->modify_pdusession[i].param.qos[qos_flow_index];
}
-
- if (j < ue_context_pP->ue_context.nb_of_pdusessions) {
- NGAP_PDUSESSION_MODIFY_RESP(msg_p).pdusessions[pdu_sessions_done].pdusession_id =
- ue_context_pP->ue_context.modify_pdusession[i].param.pdusession_id;
- for (qos_flow_index = 0; qos_flow_index < ue_context_pP->ue_context.modify_pdusession[i].param.nb_qos; qos_flow_index++) {
- NGAP_PDUSESSION_MODIFY_RESP(msg_p).pdusessions[pdu_sessions_done].qos[qos_flow_index].qfi =
- ue_context_pP->ue_context.modify_pdusession[i].param.qos[qos_flow_index].qfi;
- }
- NGAP_PDUSESSION_MODIFY_RESP(msg_p).pdusessions[pdu_sessions_done].nb_of_qos_flow =
- ue_context_pP->ue_context.modify_pdusession[i].param.nb_qos;
- LOG_I(NR_RRC, "Modify Resp (msg index %d, pdu session index %d, status %d, xid %d): nb_of_modify_pdusessions %d, pdusession_id %d \n ",
- pdu_sessions_done, i, ue_context_pP->ue_context.modify_pdusession[i].status, xid,
- ue_context_pP->ue_context.nb_of_modify_pdusessions,
- NGAP_PDUSESSION_MODIFY_RESP(msg_p).pdusessions[pdu_sessions_done].pdusession_id);
- pdu_sessions_done++;
- } else {
- NGAP_PDUSESSION_MODIFY_RESP(msg_p).pdusessions_failed[pdu_sessions_failed].pdusession_id =
- ue_context_pP->ue_context.modify_pdusession[i].param.pdusession_id;
- NGAP_PDUSESSION_MODIFY_RESP(msg_p).pdusessions_failed[pdu_sessions_failed].cause = NGAP_CAUSE_RADIO_NETWORK;
- NGAP_PDUSESSION_MODIFY_RESP(msg_p).pdusessions_failed[pdu_sessions_failed].cause_value = NGAP_CauseRadioNetwork_unknown_PDU_session_ID;
- pdu_sessions_failed++;
+ resp->pdusessions[pdu_sessions_done].pdusession_id = UE->modify_pdusession[i].param.pdusession_id;
+ for (int qos_flow_index = 0; qos_flow_index < UE->modify_pdusession[i].param.nb_qos; qos_flow_index++) {
+ resp->pdusessions[pdu_sessions_done].qos[qos_flow_index].qfi = UE->modify_pdusession[i].param.qos[qos_flow_index].qfi;
}
- } else if ((ue_context_pP->ue_context.modify_pdusession[i].status == PDU_SESSION_STATUS_NEW) ||
- (ue_context_pP->ue_context.modify_pdusession[i].status == PDU_SESSION_STATUS_ESTABLISHED)) {
- LOG_D (NR_RRC, "PDU SESSION is NEW or already ESTABLISHED\n");
- } else if (ue_context_pP->ue_context.modify_pdusession[i].status == PDU_SESSION_STATUS_FAILED) {
- NGAP_PDUSESSION_MODIFY_RESP(msg_p).pdusessions_failed[pdu_sessions_failed].pdusession_id =
- ue_context_pP->ue_context.modify_pdusession[i].param.pdusession_id;
- NGAP_PDUSESSION_MODIFY_RESP(msg_p).pdusessions_failed[pdu_sessions_failed].cause =
- ue_context_pP->ue_context.modify_pdusession[i].cause;
- NGAP_PDUSESSION_MODIFY_RESP(msg_p).pdusessions_failed[pdu_sessions_failed].cause_value =
- ue_context_pP->ue_context.modify_pdusession[i].cause_value;
+ resp->pdusessions[pdu_sessions_done].pdusession_id = UE->modify_pdusession[i].param.pdusession_id;
+ resp->pdusessions[pdu_sessions_done].nb_of_qos_flow = UE->modify_pdusession[i].param.nb_qos;
+ LOG_I(NR_RRC,
+ "Modify Resp (msg index %d, pdu session index %d, status %d, xid %d): nb_of_modify_pdusessions %d, pdusession_id %d \n ",
+ pdu_sessions_done,
+ i,
+ UE->modify_pdusession[i].status,
+ xid,
+ UE->nb_of_modify_pdusessions,
+ resp->pdusessions[pdu_sessions_done].pdusession_id);
+ pdu_sessions_done++;
+ } else {
+ LOG_W(NR_RRC, "PDU SESSION modify of a not existing pdu session %d \n", UE->modify_pdusession[i].param.pdusession_id);
+ resp->pdusessions_failed[pdu_sessions_failed].pdusession_id = UE->modify_pdusession[i].param.pdusession_id;
+ resp->pdusessions_failed[pdu_sessions_failed].cause = NGAP_CAUSE_RADIO_NETWORK;
+ resp->pdusessions_failed[pdu_sessions_failed].cause_value = NGAP_CauseRadioNetwork_unknown_PDU_session_ID;
pdu_sessions_failed++;
}
- } else {
- LOG_D(NR_RRC,"xid does not correspond (context pdu session index %d, status %d, xid %d/%d) \n ",
- i, ue_context_pP->ue_context.modify_pdusession[i].status, xid, ue_context_pP->ue_context.modify_pdusession[i].xid);
+ } else if ((UE->modify_pdusession[i].status == PDU_SESSION_STATUS_NEW) || (UE->modify_pdusession[i].status == PDU_SESSION_STATUS_ESTABLISHED)) {
+ LOG_D(NR_RRC, "PDU SESSION is NEW or already ESTABLISHED\n");
+ } else if (UE->modify_pdusession[i].status == PDU_SESSION_STATUS_FAILED) {
+ resp->pdusessions_failed[pdu_sessions_failed].pdusession_id = UE->modify_pdusession[i].param.pdusession_id;
+ resp->pdusessions_failed[pdu_sessions_failed].cause = UE->modify_pdusession[i].cause;
+ resp->pdusessions_failed[pdu_sessions_failed].cause_value = UE->modify_pdusession[i].cause_value;
+ pdu_sessions_failed++;
}
+ else
+ LOG_W(NR_RRC,
+ "Modify pdu session %d, unknown state %d \n ",
+ UE->modify_pdusession[i].param.pdusession_id,
+ UE->modify_pdusession[i].status);
}
- NGAP_PDUSESSION_MODIFY_RESP(msg_p).nb_of_pdusessions = pdu_sessions_done;
- NGAP_PDUSESSION_MODIFY_RESP(msg_p).nb_of_pdusessions_failed = pdu_sessions_failed;
+ resp->nb_of_pdusessions = pdu_sessions_done;
+ resp->nb_of_pdusessions_failed = pdu_sessions_failed;
if (pdu_sessions_done > 0 || pdu_sessions_failed > 0) {
- LOG_D(NR_RRC,
- "NGAP_PDUSESSION_MODIFY_RESP: sending the message: nb_of_pdusessions %d, total pdu session %d, index %d\n",
- ue_context_pP->ue_context.nb_of_modify_pdusessions,
- ue_context_pP->ue_context.nb_of_pdusessions,
- i);
+ LOG_D(NR_RRC, "NGAP_PDUSESSION_MODIFY_RESP: sending the message: nb_of_pdusessions %d, total pdu session %d\n", UE->nb_of_modify_pdusessions, UE->nb_of_pdusessions);
itti_send_msg_to_task (TASK_NGAP, ctxt_pP->instance, msg_p);
} else {
itti_free (ITTI_MSG_ORIGIN_ID(msg_p), msg_p);
@@ -1336,40 +1110,32 @@ rrc_gNB_send_NGAP_PDUSESSION_MODIFY_RESP(
}
//------------------------------------------------------------------------------
-void
-rrc_gNB_send_NGAP_UE_CONTEXT_RELEASE_REQ(
- const module_id_t gnb_mod_idP,
- const rrc_gNB_ue_context_t *const ue_context_pP,
- const ngap_Cause_t causeP,
- const long cause_valueP)
+void rrc_gNB_send_NGAP_UE_CONTEXT_RELEASE_REQ(const module_id_t gnb_mod_idP, const rrc_gNB_ue_context_t *const ue_context_pP, const ngap_Cause_t causeP, const long cause_valueP)
//------------------------------------------------------------------------------
{
if (ue_context_pP == NULL) {
LOG_E(RRC, "[gNB] In NGAP_UE_CONTEXT_RELEASE_REQ: invalid UE\n");
} else {
- MessageDef *msg_context_release_req_p = NULL;
- msg_context_release_req_p = itti_alloc_new_message(TASK_RRC_GNB, 0, NGAP_UE_CONTEXT_RELEASE_REQ);
- NGAP_UE_CONTEXT_RELEASE_REQ(msg_context_release_req_p).gNB_ue_ngap_id = ue_context_pP->ue_context.gNB_ue_ngap_id;
- NGAP_UE_CONTEXT_RELEASE_REQ(msg_context_release_req_p).cause = causeP;
- NGAP_UE_CONTEXT_RELEASE_REQ(msg_context_release_req_p).cause_value = cause_valueP;
- NGAP_UE_CONTEXT_RELEASE_REQ(msg_context_release_req_p).nb_of_pdusessions = ue_context_pP->ue_context.nb_of_pdusessions;
- for (int pdusession = 0; pdusession < ue_context_pP->ue_context.nb_of_pdusessions; pdusession++) {
- NGAP_UE_CONTEXT_RELEASE_REQ(msg_context_release_req_p).pdusessions[pdusession].pdusession_id = ue_context_pP->ue_context.pduSession[pdusession].param.pdusession_id;
+ const gNB_RRC_UE_t *UE = &ue_context_pP->ue_context;
+ MessageDef *msg = itti_alloc_new_message(TASK_RRC_GNB, 0, NGAP_UE_CONTEXT_RELEASE_REQ);
+ ngap_ue_release_req_t *req = &NGAP_UE_CONTEXT_RELEASE_REQ(msg);
+ memset(req, 0, sizeof(*req));
+ req->gNB_ue_ngap_id = UE->gNB_ue_ngap_id;
+ req->cause = causeP;
+ req->cause_value = cause_valueP;
+ for (int i = 0; i < UE->nb_of_pdusessions; i++) {
+ req->pdusessions[i].pdusession_id = UE->pduSession[i].param.pdusession_id;
+ req->nb_of_pdusessions++;
}
- itti_send_msg_to_task(TASK_NGAP, GNB_MODULE_ID_TO_INSTANCE(gnb_mod_idP), msg_context_release_req_p);
+ itti_send_msg_to_task(TASK_NGAP, GNB_MODULE_ID_TO_INSTANCE(gnb_mod_idP), msg);
}
}
/*------------------------------------------------------------------------------*/
-int
-rrc_gNB_process_NGAP_UE_CONTEXT_RELEASE_REQ (
- MessageDef *msg_p,
- const char *msg_name,
- instance_t instance)
+int rrc_gNB_process_NGAP_UE_CONTEXT_RELEASE_REQ(MessageDef *msg_p, instance_t instance)
{
uint32_t gNB_ue_ngap_id;
- struct rrc_gNB_ue_context_s *ue_context_p = NULL;
gNB_ue_ngap_id = NGAP_UE_CONTEXT_RELEASE_REQ(msg_p).gNB_ue_ngap_id;
- ue_context_p = rrc_gNB_get_ue_context_from_ngap_ids(instance, UE_INITIAL_ID_INVALID, gNB_ue_ngap_id);
+ rrc_gNB_ue_context_t *ue_context_p = rrc_gNB_get_ue_context(RC.nrrrc[instance], gNB_ue_ngap_id);
if (ue_context_p == NULL) {
/* Can not associate this message to an UE index, send a failure to ngAP and discard it! */
@@ -1385,12 +1151,10 @@ rrc_gNB_process_NGAP_UE_CONTEXT_RELEASE_REQ (
} else {
/* TODO release context. */
/* Send the response */
- {
- MessageDef *msg_resp_p;
- msg_resp_p = itti_alloc_new_message(TASK_RRC_GNB, 0, NGAP_UE_CONTEXT_RELEASE_RESP);
- NGAP_UE_CONTEXT_RELEASE_RESP(msg_resp_p).gNB_ue_ngap_id = gNB_ue_ngap_id;
- itti_send_msg_to_task(TASK_NGAP, instance, msg_resp_p);
- }
+ MessageDef *msg_resp_p;
+ msg_resp_p = itti_alloc_new_message(TASK_RRC_GNB, 0, NGAP_UE_CONTEXT_RELEASE_RESP);
+ NGAP_UE_CONTEXT_RELEASE_RESP(msg_resp_p).gNB_ue_ngap_id = gNB_ue_ngap_id;
+ itti_send_msg_to_task(TASK_NGAP, instance, msg_resp_p);
return (0);
}
}
@@ -1400,18 +1164,13 @@ rrc_gNB_process_NGAP_UE_CONTEXT_RELEASE_REQ (
* Process the NG command NGAP_UE_CONTEXT_RELEASE_COMMAND, sent by AMF.
* The gNB should remove all pdu session, NG context, and other context of the UE.
*/
-int
-rrc_gNB_process_NGAP_UE_CONTEXT_RELEASE_COMMAND(
- MessageDef *msg_p,
- const char *msg_name,
- instance_t instance) {
+int rrc_gNB_process_NGAP_UE_CONTEXT_RELEASE_COMMAND(MessageDef *msg_p, instance_t instance)
+{
//-----------------------------------------------------------------------------
uint32_t gNB_ue_ngap_id = 0;
protocol_ctxt_t ctxt;
- struct rrc_gNB_ue_context_s *ue_context_p = NULL;
- struct rrc_ue_ngap_ids_s *rrc_ue_ngap_ids = NULL;
gNB_ue_ngap_id = NGAP_UE_CONTEXT_RELEASE_COMMAND(msg_p).gNB_ue_ngap_id;
- ue_context_p = rrc_gNB_get_ue_context_from_ngap_ids(instance, UE_INITIAL_ID_INVALID, gNB_ue_ngap_id);
+ rrc_gNB_ue_context_t *ue_context_p = rrc_gNB_get_ue_context(RC.nrrrc[instance], gNB_ue_ngap_id);
if (ue_context_p == NULL) {
/* Can not associate this message to an UE index */
@@ -1422,21 +1181,16 @@ rrc_gNB_process_NGAP_UE_CONTEXT_RELEASE_COMMAND(
msg_complete_p = itti_alloc_new_message(TASK_RRC_GNB, 0, NGAP_UE_CONTEXT_RELEASE_COMPLETE);
NGAP_UE_CONTEXT_RELEASE_COMPLETE(msg_complete_p).gNB_ue_ngap_id = gNB_ue_ngap_id;
itti_send_msg_to_task(TASK_NGAP, instance, msg_complete_p);
- rrc_ue_ngap_ids = rrc_gNB_NGAP_get_ue_ids(RC.nrrrc[instance], UE_INITIAL_ID_INVALID, gNB_ue_ngap_id);
-
- if (rrc_ue_ngap_ids != NULL) {
- rrc_gNB_NGAP_remove_ue_ids(RC.nrrrc[instance], rrc_ue_ngap_ids);
- }
-
return -1;
- } else {
- ue_context_p->ue_context.ue_release_timer_ng = 0;
- ue_context_p->ue_context.ue_release_timer_thres_rrc = 1000;
- PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt, instance, GNB_FLAG_YES, ue_context_p->ue_context.rnti, 0, 0);
- ctxt.eNB_index = 0;
- rrc_gNB_generate_RRCRelease(&ctxt, ue_context_p);
- return 0;
}
+
+ gNB_RRC_UE_t *UE = &ue_context_p->ue_context;
+ UE->ue_release_timer_ng = 0;
+ UE->ue_release_timer_thres_rrc = 1000;
+ PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt, instance, GNB_FLAG_YES, UE->rnti, 0, 0);
+ ctxt.eNB_index = 0;
+ rrc_gNB_generate_RRCRelease(&ctxt, ue_context_p);
+ return 0;
}
void rrc_gNB_send_NGAP_UE_CONTEXT_RELEASE_COMPLETE(
@@ -1447,52 +1201,6 @@ void rrc_gNB_send_NGAP_UE_CONTEXT_RELEASE_COMPLETE(
itti_send_msg_to_task(TASK_NGAP, instance, msg);
}
-//------------------------------------------------------------------------------
-/*
-* Remove UE ids (ue_initial_id and ng_id) from hashtables.
-*/
-void
-rrc_gNB_NGAP_remove_ue_ids(
- gNB_RRC_INST *const rrc_instance_pP,
- struct rrc_ue_ngap_ids_s *const ue_ids_pP
-)
-//------------------------------------------------------------------------------
-{
- hashtable_rc_t h_rc;
-
- if (rrc_instance_pP == NULL) {
- LOG_E(NR_RRC, "Bad NR RRC instance\n");
- return;
- }
-
- if (ue_ids_pP == NULL) {
- LOG_E(NR_RRC, "Trying to free a NULL NGAP UE IDs\n");
- return;
- }
-
- const uint16_t ue_initial_id = ue_ids_pP->ue_initial_id;
- const uint32_t gNB_ue_ngap_id = ue_ids_pP->gNB_ue_ngap_id;
-
- if (gNB_ue_ngap_id > 0) {
- h_rc = hashtable_remove(rrc_instance_pP->ngap_id2_ngap_ids, (hash_key_t)gNB_ue_ngap_id);
-
- if (h_rc != HASH_TABLE_OK) {
- LOG_W(NR_RRC, "NGAP Did not find entry in hashtable ngap_id2_ngap_ids for gNB_ue_ngap_id %u\n", gNB_ue_ngap_id);
- } else {
- LOG_W(NR_RRC, "NGAP removed entry in hashtable ngap_id2_ngap_ids for gNB_ue_ngap_id %u\n", gNB_ue_ngap_id);
- }
- }
-
- if (ue_initial_id != UE_INITIAL_ID_INVALID) {
- h_rc = hashtable_remove(rrc_instance_pP->initial_id2_ngap_ids, (hash_key_t)ue_initial_id);
-
- if (h_rc != HASH_TABLE_OK) {
- LOG_W(NR_RRC, "NGAP Did not find entry in hashtable initial_id2_ngap_ids for ue_initial_id %u\n", ue_initial_id);
- } else {
- LOG_W(NR_RRC, "NGAP removed entry in hashtable initial_id2_ngap_ids for ue_initial_id %u\n", ue_initial_id);
- }
- }
-}
void
rrc_gNB_send_NGAP_UE_CAPABILITIES_IND(
const protocol_ctxt_t *const ctxt_pP,
@@ -1503,40 +1211,38 @@ rrc_gNB_send_NGAP_UE_CAPABILITIES_IND(
{
NR_UE_CapabilityRAT_ContainerList_t *ueCapabilityRATContainerList = ul_dcch_msg->message.choice.c1->choice.ueCapabilityInformation->criticalExtensions.choice.ueCapabilityInformation->ue_CapabilityRAT_ContainerList;
/* 4096 is arbitrary, should be big enough */
- unsigned char buf[4096];
- unsigned char *buf2;
- NR_UERadioAccessCapabilityInformation_t rac;
-
- if (ueCapabilityRATContainerList->list.count == 0) {
- LOG_W(RRC, "[gNB %d][UE %x] bad UE capabilities\n", ctxt_pP->module_id, ue_context_pP->ue_context.rnti);
- }
-
- asn_enc_rval_t ret = uper_encode_to_buffer(&asn_DEF_NR_UE_CapabilityRAT_ContainerList, NULL, ueCapabilityRATContainerList, buf, 4096);
-
- if (ret.encoded == -1) abort();
-
- memset(&rac, 0, sizeof(NR_UERadioAccessCapabilityInformation_t));
- rac.criticalExtensions.present = NR_UERadioAccessCapabilityInformation__criticalExtensions_PR_c1;
- rac.criticalExtensions.choice.c1 = calloc(1,sizeof(*rac.criticalExtensions.choice.c1));
- rac.criticalExtensions.choice.c1->present = NR_UERadioAccessCapabilityInformation__criticalExtensions__c1_PR_ueRadioAccessCapabilityInformation;
- rac.criticalExtensions.choice.c1->choice.ueRadioAccessCapabilityInformation = calloc(1,sizeof(NR_UERadioAccessCapabilityInformation_IEs_t));
- rac.criticalExtensions.choice.c1->choice.ueRadioAccessCapabilityInformation->ue_RadioAccessCapabilityInfo.buf = buf;
- rac.criticalExtensions.choice.c1->choice.ueRadioAccessCapabilityInformation->ue_RadioAccessCapabilityInfo.size = (ret.encoded+7)/8;
- rac.criticalExtensions.choice.c1->choice.ueRadioAccessCapabilityInformation->nonCriticalExtension = NULL;
- /* 8192 is arbitrary, should be big enough */
- buf2 = malloc16(8192);
-
- if (buf2 == NULL) abort();
-
- ret = uper_encode_to_buffer(&asn_DEF_NR_UERadioAccessCapabilityInformation, NULL, &rac, buf2, 8192);
-
- if (ret.encoded == -1) abort();
+ void *buf;
+ NR_UERadioAccessCapabilityInformation_t rac = {0};
+ gNB_RRC_UE_t *UE = &ue_context_pP->ue_context;
+ if (ueCapabilityRATContainerList->list.count == 0) {
+ LOG_W(RRC, "[gNB %d][UE %x] bad UE capabilities\n", ctxt_pP->module_id, UE->rnti);
+ }
+
+ int ret = uper_encode_to_new_buffer(&asn_DEF_NR_UE_CapabilityRAT_ContainerList, NULL, ueCapabilityRATContainerList, &buf);
+ AssertFatal(ret > 0, "fail to encode ue capabilities\n");
+
+ rac.criticalExtensions.present = NR_UERadioAccessCapabilityInformation__criticalExtensions_PR_c1;
+ asn1cCalloc(rac.criticalExtensions.choice.c1, c1);
+ c1->present = NR_UERadioAccessCapabilityInformation__criticalExtensions__c1_PR_ueRadioAccessCapabilityInformation;
+ asn1cCalloc(c1->choice.ueRadioAccessCapabilityInformation, info);
+ info->ue_RadioAccessCapabilityInfo.buf = buf;
+ info->ue_RadioAccessCapabilityInfo.size = ret;
+ info->nonCriticalExtension = NULL;
+ /* 8192 is arbitrary, should be big enough */
+ void *buf2 = NULL;
+ int encoded = uper_encode_to_new_buffer(&asn_DEF_NR_UERadioAccessCapabilityInformation, NULL, &rac, &buf2);
+
+ AssertFatal(encoded > 0, "fail to encode ue capabilities\n");
+ ;
+ ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_NR_UERadioAccessCapabilityInformation, &rac);
MessageDef *msg_p;
msg_p = itti_alloc_new_message (TASK_RRC_GNB, 0, NGAP_UE_CAPABILITIES_IND);
- NGAP_UE_CAPABILITIES_IND (msg_p).gNB_ue_ngap_id = ue_context_pP->ue_context.gNB_ue_ngap_id;
- NGAP_UE_CAPABILITIES_IND (msg_p).ue_radio_cap.length = (ret.encoded+7)/8;
- NGAP_UE_CAPABILITIES_IND (msg_p).ue_radio_cap.buffer = buf2;
+ ngap_ue_cap_info_ind_t *ind = &NGAP_UE_CAPABILITIES_IND(msg_p);
+ memset(ind, 0, sizeof(*ind));
+ ind->gNB_ue_ngap_id = UE->gNB_ue_ngap_id;
+ ind->ue_radio_cap.length = encoded;
+ ind->ue_radio_cap.buffer = buf2;
itti_send_msg_to_task (TASK_NGAP, ctxt_pP->instance, msg_p);
LOG_I(NR_RRC,"Send message to ngap: NGAP_UE_CAPABILITIES_IND\n");
}
@@ -1552,154 +1258,118 @@ rrc_gNB_send_NGAP_PDUSESSION_RELEASE_RESPONSE(
{
int pdu_sessions_released = 0;
MessageDef *msg_p;
+ gNB_RRC_UE_t *UE = &ue_context_pP->ue_context;
msg_p = itti_alloc_new_message (TASK_RRC_GNB, 0, NGAP_PDUSESSION_RELEASE_RESPONSE);
- NGAP_PDUSESSION_RELEASE_RESPONSE (msg_p).gNB_ue_ngap_id = ue_context_pP->ue_context.gNB_ue_ngap_id;
+ ngap_pdusession_release_resp_t *resp = &NGAP_PDUSESSION_RELEASE_RESPONSE(msg_p);
+ memset(resp, 0, sizeof(*resp));
+ resp->gNB_ue_ngap_id = UE->gNB_ue_ngap_id;
for (int i = 0; i < NB_RB_MAX; i++) {
- if (xid == ue_context_pP->ue_context.pduSession[i].xid) {
- NGAP_PDUSESSION_RELEASE_RESPONSE (msg_p).pdusession_release[pdu_sessions_released].pdusession_id =
- ue_context_pP->ue_context.pduSession[i].param.pdusession_id;
+ if (xid == UE->pduSession[i].xid) {
+ resp->pdusession_release[pdu_sessions_released].pdusession_id = UE->pduSession[i].param.pdusession_id;
pdu_sessions_released++;
//clear
- memset(&ue_context_pP->ue_context.pduSession[i], 0, sizeof(pdu_session_param_t));
+ memset(&UE->pduSession[i], 0, sizeof(*UE->pduSession));
}
}
- NGAP_PDUSESSION_RELEASE_RESPONSE (msg_p).nb_of_pdusessions_released = pdu_sessions_released;
- NGAP_PDUSESSION_RELEASE_RESPONSE (msg_p).nb_of_pdusessions_failed = ue_context_pP->ue_context.nb_release_of_pdusessions;
- memcpy(&(NGAP_PDUSESSION_RELEASE_RESPONSE (msg_p).pdusessions_failed[0]), &ue_context_pP->ue_context.pdusessions_release_failed[0],
- sizeof(pdusession_failed_t)*ue_context_pP->ue_context.nb_release_of_pdusessions);
- ue_context_pP->ue_context.nb_of_pdusessions -= pdu_sessions_released;
- LOG_I(NR_RRC,
- "NGAP PDUSESSION RELEASE RESPONSE: GNB_UE_NGAP_ID %u release_pdu_sessions %d setup_pdu_sessions %d \n",
- NGAP_PDUSESSION_RELEASE_RESPONSE(msg_p).gNB_ue_ngap_id,
- pdu_sessions_released,
- ue_context_pP->ue_context.nb_of_pdusessions);
+ resp->nb_of_pdusessions_released = pdu_sessions_released;
+ resp->nb_of_pdusessions_failed = UE->nb_release_of_pdusessions;
+ memcpy(resp->pdusessions_failed, UE->pdusessions_release_failed, sizeof(pdusession_failed_t) * UE->nb_release_of_pdusessions);
+ LOG_E(NR_RRC, "we have to pack the array!!!\n");
+ UE->nb_of_pdusessions -= pdu_sessions_released;
+ LOG_I(NR_RRC, "NGAP PDUSESSION RELEASE RESPONSE: GNB_UE_NGAP_ID %u release_pdu_sessions %d\n", resp->gNB_ue_ngap_id, pdu_sessions_released);
itti_send_msg_to_task (TASK_NGAP, ctxt_pP->instance, msg_p);
//clear xid
for(int i = 0; i < NB_RB_MAX; i++) {
- ue_context_pP->ue_context.pduSession[i].xid = -1;
+ UE->pduSession[i].xid = -1;
}
//clear release pdusessions
- ue_context_pP->ue_context.nb_release_of_pdusessions = 0;
- memset(&ue_context_pP->ue_context.pdusessions_release_failed[0], 0, sizeof(pdusession_failed_t)*NGAP_MAX_PDUSESSION);
+ UE->nb_release_of_pdusessions = 0;
+ memset(UE->pdusessions_release_failed, 0, sizeof(UE->pdusessions_release_failed));
}
//------------------------------------------------------------------------------
-int
-rrc_gNB_process_NGAP_PDUSESSION_RELEASE_COMMAND(
- MessageDef *msg_p,
- const char *msg_name,
- instance_t instance
-)
+int rrc_gNB_process_NGAP_PDUSESSION_RELEASE_COMMAND(MessageDef *msg_p, instance_t instance)
//------------------------------------------------------------------------------
{
- uint32_t gNB_ue_ngap_id;
- rrc_gNB_ue_context_t *ue_context_p = NULL;
- protocol_ctxt_t ctxt;
- pdusession_release_t pdusession_release_params[NGAP_MAX_PDUSESSION];
- uint8_t nb_pdusessions_torelease;
+ uint32_t gNB_ue_ngap_id;
+ protocol_ctxt_t ctxt;
uint8_t xid;
- int i, pdusession;
- uint8_t b_existed,is_existed;
uint8_t pdusession_release_drb = 0;
-
- memcpy(&pdusession_release_params[0], &(NGAP_PDUSESSION_RELEASE_COMMAND (msg_p).pdusession_release_params[0]),
- sizeof(pdusession_release_t)*NGAP_MAX_PDUSESSION);
- gNB_ue_ngap_id = NGAP_PDUSESSION_RELEASE_COMMAND(msg_p).gNB_ue_ngap_id;
- nb_pdusessions_torelease = NGAP_PDUSESSION_RELEASE_COMMAND(msg_p).nb_pdusessions_torelease;
- if (nb_pdusessions_torelease > NGAP_MAX_PDUSESSION) {
+ ngap_pdusession_release_command_t *cmd = &NGAP_PDUSESSION_RELEASE_COMMAND(msg_p);
+ gNB_ue_ngap_id = cmd->gNB_ue_ngap_id;
+ if (cmd->nb_pdusessions_torelease > NGAP_MAX_PDUSESSION) {
+ LOG_E(NR_RRC, "incorrect number of pdu session do release %d\n", cmd->nb_pdusessions_torelease);
return -1;
}
- ue_context_p = rrc_gNB_get_ue_context_from_ngap_ids(instance, UE_INITIAL_ID_INVALID, gNB_ue_ngap_id);
- LOG_I(NR_RRC, "[gNB %ld] Received %s: gNB_ue_ngap_id %u \n", instance, msg_name, gNB_ue_ngap_id);
+ rrc_gNB_ue_context_t *ue_context_p = rrc_gNB_get_ue_context(RC.nrrrc[instance], gNB_ue_ngap_id);
- if (ue_context_p != NULL) {
- PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt, instance, GNB_FLAG_YES, ue_context_p->ue_context.rnti, 0, 0);
- xid = rrc_gNB_get_next_transaction_identifier(ctxt.module_id);
- LOG_I(NR_RRC,"PDU Session Release Command: AMF_UE_NGAP_ID %lu GNB_UE_NGAP_ID %u release_pdusessions %d \n",
- NGAP_PDUSESSION_RELEASE_COMMAND (msg_p).amf_ue_ngap_id&0x000000FFFFFFFFFF, gNB_ue_ngap_id, nb_pdusessions_torelease);
+ if (!ue_context_p) {
+ LOG_E(NR_RRC, "[gNB %ld] not found ue context gNB_ue_ngap_id %u \n", instance, gNB_ue_ngap_id);
+ return -1;
+ }
- for (pdusession = 0; pdusession < nb_pdusessions_torelease; pdusession++) {
- b_existed = 0;
- is_existed = 0;
+ LOG_I(NR_RRC, "[gNB %ld] gNB_ue_ngap_id %u \n", instance, gNB_ue_ngap_id);
+ gNB_RRC_UE_t *UE = &ue_context_p->ue_context;
+ PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt, instance, GNB_FLAG_YES, UE->rnti, 0, 0);
+ xid = rrc_gNB_get_next_transaction_identifier(ctxt.module_id);
+ LOG_I(
+ NR_RRC, "PDU Session Release Command: AMF_UE_NGAP_ID %lu GNB_UE_NGAP_ID %u release_pdusessions %d \n", cmd->amf_ue_ngap_id, gNB_ue_ngap_id, cmd->nb_pdusessions_torelease);
- for (i = pdusession-1; i >= 0; i--) {
- if (pdusession_release_params[pdusession].pdusession_id == pdusession_release_params[i].pdusession_id) {
- is_existed = 1;
- break;
- }
- }
-
- if(is_existed == 1) {
- // pdusession_id is existed
- continue;
- }
-
- for (i = 0; i < NR_NB_RB_MAX; i++) {
- if (pdusession_release_params[pdusession].pdusession_id == ue_context_p->ue_context.pduSession[i].param.pdusession_id) {
- b_existed = 1;
- break;
- }
- }
-
- if(b_existed == 0) {
- // no pdusession_id
- LOG_I(NR_RRC, "no pdusession_id \n");
- ue_context_p->ue_context.pdusessions_release_failed[ue_context_p->ue_context.nb_release_of_pdusessions].pdusession_id = pdusession_release_params[pdusession].pdusession_id;
- ue_context_p->ue_context.pdusessions_release_failed[ue_context_p->ue_context.nb_release_of_pdusessions].cause = NGAP_CAUSE_RADIO_NETWORK;
- ue_context_p->ue_context.pdusessions_release_failed[ue_context_p->ue_context.nb_release_of_pdusessions].cause_value = 30;
- ue_context_p->ue_context.nb_release_of_pdusessions++;
- } else {
- if(ue_context_p->ue_context.pduSession[i].status == PDU_SESSION_STATUS_FAILED) {
- ue_context_p->ue_context.pduSession[i].xid = xid;
- continue;
- } else if(ue_context_p->ue_context.pduSession[i].status == PDU_SESSION_STATUS_ESTABLISHED) {
- LOG_I(NR_RRC, "RELEASE pdusession %d \n", ue_context_p->ue_context.pduSession[i].param.pdusession_id);
- ue_context_p->ue_context.pduSession[i].status = PDU_SESSION_STATUS_TORELEASE;
- ue_context_p->ue_context.pduSession[i].xid = xid;
- pdusession_release_drb++;
- } else {
- // pdusession_id status NG
- ue_context_p->ue_context.pdusessions_release_failed[ue_context_p->ue_context.nb_release_of_pdusessions].pdusession_id = pdusession_release_params[pdusession].pdusession_id;
- ue_context_p->ue_context.pdusessions_release_failed[ue_context_p->ue_context.nb_release_of_pdusessions].cause = NGAP_CAUSE_RADIO_NETWORK;
- ue_context_p->ue_context.pdusessions_release_failed[ue_context_p->ue_context.nb_release_of_pdusessions].cause_value = 0;
- ue_context_p->ue_context.nb_release_of_pdusessions++;
- }
- }
+ for (int pdusession = 0; pdusession < cmd->nb_pdusessions_torelease; pdusession++) {
+ rrc_pdu_session_param_t *pduSession = find_pduSession(UE, cmd->pdusession_release_params[pdusession].pdusession_id, false);
+ if (!pduSession) {
+ LOG_I(NR_RRC, "no pdusession_id \n");
+ UE->pdusessions_release_failed[UE->nb_release_of_pdusessions].pdusession_id = cmd->pdusession_release_params[pdusession].pdusession_id;
+ UE->pdusessions_release_failed[UE->nb_release_of_pdusessions].cause = NGAP_CAUSE_RADIO_NETWORK;
+ UE->pdusessions_release_failed[UE->nb_release_of_pdusessions].cause_value = 30;
+ UE->nb_release_of_pdusessions++;
+ continue;
}
-
- if(pdusession_release_drb > 0) {
- //TODO RRCReconfiguration To UE
- LOG_I(NR_RRC, "Send RRCReconfiguration To UE \n");
- rrc_gNB_generate_dedicatedRRCReconfiguration_release(&ctxt, ue_context_p, xid, NGAP_PDUSESSION_RELEASE_COMMAND (msg_p).nas_pdu.length, NGAP_PDUSESSION_RELEASE_COMMAND (msg_p).nas_pdu.buffer);
- } else {
- //gtp tunnel delete
- LOG_I(NR_RRC, "gtp tunnel delete \n");
- gtpv1u_gnb_delete_tunnel_req_t req={0};
- req.ue_id = ue_context_p->ue_context.rnti;
-
- for(i = 0; i < NB_RB_MAX; i++) {
- if(xid == ue_context_p->ue_context.pduSession[i].xid) {
- req.pdusession_id[req.num_pdusession++] = ue_context_p->ue_context.gnb_gtp_psi[i];
- ue_context_p->ue_context.gnb_gtp_teid[i] = 0;
- memset(&ue_context_p->ue_context.gnb_gtp_addrs[i], 0, sizeof(ue_context_p->ue_context.gnb_gtp_addrs[i]));
- ue_context_p->ue_context.gnb_gtp_psi[i] = 0;
- }
- }
- gtpv1u_delete_ngu_tunnel(instance, &req);
- //NGAP_PDUSESSION_RELEASE_RESPONSE
- rrc_gNB_send_NGAP_PDUSESSION_RELEASE_RESPONSE(&ctxt, ue_context_p, xid);
- LOG_I(NR_RRC, "Send PDU Session Release Response \n");
+ if (pduSession->status == PDU_SESSION_STATUS_FAILED) {
+ pduSession->xid = xid;
+ continue;
}
+ if (pduSession->status == PDU_SESSION_STATUS_ESTABLISHED) {
+ LOG_I(NR_RRC, "RELEASE pdusession %d \n", pduSession->param.pdusession_id);
+ pduSession->status = PDU_SESSION_STATUS_TORELEASE;
+ pduSession->xid = xid;
+ pdusession_release_drb++;
+ continue;
+ }
+ // pdusession_id status NG
+ UE->pdusessions_release_failed[UE->nb_release_of_pdusessions].pdusession_id = cmd->pdusession_release_params[pdusession].pdusession_id;
+ UE->pdusessions_release_failed[UE->nb_release_of_pdusessions].cause = NGAP_CAUSE_RADIO_NETWORK;
+ UE->pdusessions_release_failed[UE->nb_release_of_pdusessions].cause_value = 0;
+ UE->nb_release_of_pdusessions++;
+ }
+
+ if (pdusession_release_drb > 0) {
+ // TODO RRCReconfiguration To UE
+ LOG_I(NR_RRC, "Send RRCReconfiguration To UE \n");
+ rrc_gNB_generate_dedicatedRRCReconfiguration_release(&ctxt, ue_context_p, xid, cmd->nas_pdu.length, cmd->nas_pdu.buffer);
} else {
- LOG_E(NR_RRC, "PDU Session Release Command: AMF_UE_NGAP_ID %lu GNB_UE_NGAP_ID %u Error ue_context_p NULL \n",
- NGAP_PDUSESSION_RELEASE_COMMAND (msg_p).amf_ue_ngap_id&0x000000FFFFFFFFFF, NGAP_PDUSESSION_RELEASE_COMMAND(msg_p).gNB_ue_ngap_id);
- return -1;
- }
+ // gtp tunnel delete
+ LOG_I(NR_RRC, "gtp tunnel delete \n");
+ gtpv1u_gnb_delete_tunnel_req_t req = {0};
+ req.ue_id = UE->rnti;
+ for (int i = 0; i < NB_RB_MAX; i++) {
+ if (xid == UE->pduSession[i].xid) {
+ req.pdusession_id[req.num_pdusession++] = UE->gnb_gtp_psi[i];
+ UE->gnb_gtp_teid[i] = 0;
+ memset(&UE->gnb_gtp_addrs[i], 0, sizeof(UE->gnb_gtp_addrs[i]));
+ UE->gnb_gtp_psi[i] = 0;
+ }
+ }
+ gtpv1u_delete_ngu_tunnel(instance, &req);
+ // NGAP_PDUSESSION_RELEASE_RESPONSE
+ rrc_gNB_send_NGAP_PDUSESSION_RELEASE_RESPONSE(&ctxt, ue_context_p, xid);
+ LOG_I(NR_RRC, "Send PDU Session Release Response \n");
+ }
return 0;
}
@@ -1713,8 +1383,8 @@ void nr_rrc_rx_tx(void) {
}
/*------------------------------------------------------------------------------*/
-int rrc_gNB_process_PAGING_IND(MessageDef *msg_p, const char *msg_name, instance_t instance) {
-
+int rrc_gNB_process_PAGING_IND(MessageDef *msg_p, instance_t instance)
+{
for (uint16_t tai_size = 0; tai_size < NGAP_PAGING_IND(msg_p).tai_size; tai_size++) {
LOG_I(NR_RRC,"[gNB %ld] In NGAP_PAGING_IND: MCC %d, MNC %d, TAC %d\n", instance, NGAP_PAGING_IND(msg_p).plmn_identity[tai_size].mcc,
NGAP_PAGING_IND(msg_p).plmn_identity[tai_size].mnc, NGAP_PAGING_IND(msg_p).tac[tai_size]);
@@ -1745,4 +1415,3 @@ int rrc_gNB_process_PAGING_IND(MessageDef *msg_p, const char *msg_name, instance
return 0;
}
-
diff --git a/openair2/RRC/NR/rrc_gNB_NGAP.h b/openair2/RRC/NR/rrc_gNB_NGAP.h
index 6c8a861f03..a0c42dcaaf 100644
--- a/openair2/RRC/NR/rrc_gNB_NGAP.h
+++ b/openair2/RRC/NR/rrc_gNB_NGAP.h
@@ -40,18 +40,6 @@
#include "NR_UL-DCCH-Message.h"
#include "NGAP_CauseRadioNetwork.h"
-typedef struct rrc_ue_ngap_ids_s {
- /* Tree related data */
- RB_ENTRY(rrc_ue_ngap_ids_s) entries;
-
- // keys
- uint16_t ue_initial_id;
- uint32_t gNB_ue_ngap_id;
-
- // value
- rnti_t ue_rnti;
-} rrc_ue_ngap_ids_t;
-
void
rrc_gNB_send_NGAP_NAS_FIRST_REQ(
const protocol_ctxt_t *const ctxt_pP,
@@ -59,12 +47,7 @@ rrc_gNB_send_NGAP_NAS_FIRST_REQ(
NR_RRCSetupComplete_IEs_t *rrcSetupComplete
);
-int
-rrc_gNB_process_NGAP_INITIAL_CONTEXT_SETUP_REQ(
- MessageDef *msg_p,
- const char *msg_name,
- instance_t instance
-);
+int rrc_gNB_process_NGAP_INITIAL_CONTEXT_SETUP_REQ(MessageDef *msg_p, instance_t instance);
void
rrc_gNB_send_NGAP_INITIAL_CONTEXT_SETUP_RESP(
@@ -72,20 +55,7 @@ rrc_gNB_send_NGAP_INITIAL_CONTEXT_SETUP_RESP(
rrc_gNB_ue_context_t *const ue_context_pP
);
-int
-rrc_gNB_process_security(
- const protocol_ctxt_t *const ctxt_pP,
- rrc_gNB_ue_context_t *const ue_context_pP,
- ngap_security_capabilities_t *security_capabilities_pP
-);
-
-int
-rrc_gNB_process_NGAP_DOWNLINK_NAS(
- MessageDef *msg_p,
- const char *msg_name,
- instance_t instance,
- mui_t *rrc_gNB_mui
-);
+int rrc_gNB_process_NGAP_DOWNLINK_NAS(MessageDef *msg_p, instance_t instance, mui_t *rrc_gNB_mui);
void
rrc_gNB_send_NGAP_UPLINK_NAS(
@@ -101,19 +71,9 @@ rrc_gNB_send_NGAP_PDUSESSION_SETUP_RESP(
uint8_t xid
);
-void
-rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ(
- MessageDef *msg_p,
- const char *msg_name,
- instance_t instance
-);
+void rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ(MessageDef *msg_p, instance_t instance);
-int
-rrc_gNB_process_NGAP_PDUSESSION_MODIFY_REQ(
- MessageDef *msg_p,
- const char *msg_name,
- instance_t instance
-);
+int rrc_gNB_process_NGAP_PDUSESSION_MODIFY_REQ(MessageDef *msg_p, instance_t instance);
int
rrc_gNB_send_NGAP_PDUSESSION_MODIFY_RESP(
@@ -128,38 +88,13 @@ rrc_gNB_modify_dedicatedRRCReconfiguration(
rrc_gNB_ue_context_t *ue_context_pP
);
+void rrc_gNB_send_NGAP_UE_CONTEXT_RELEASE_REQ(const module_id_t gnb_mod_idP, const rrc_gNB_ue_context_t *const ue_context_pP, const ngap_Cause_t causeP, const long cause_valueP);
-void
-rrc_gNB_send_NGAP_UE_CONTEXT_RELEASE_REQ(
- const module_id_t gnb_mod_idP,
- const rrc_gNB_ue_context_t *const ue_context_pP,
- const ngap_Cause_t causeP,
- const long cause_valueP
-);
+int rrc_gNB_process_NGAP_UE_CONTEXT_RELEASE_REQ(MessageDef *msg_p, instance_t instance);
-int
-rrc_gNB_process_NGAP_UE_CONTEXT_RELEASE_REQ (
- MessageDef *msg_p,
- const char *msg_name,
- instance_t instance
-);
+int rrc_gNB_process_NGAP_UE_CONTEXT_RELEASE_COMMAND(MessageDef *msg_p, instance_t instance);
-int
-rrc_gNB_process_NGAP_UE_CONTEXT_RELEASE_COMMAND(
- MessageDef *msg_p,
- const char *msg_name,
- instance_t instance
-);
-
-void rrc_gNB_send_NGAP_UE_CONTEXT_RELEASE_COMPLETE(
- instance_t instance,
- uint32_t gNB_ue_ngap_id);
-
-void
-rrc_gNB_NGAP_remove_ue_ids(
- gNB_RRC_INST *const rrc_instance_pP,
- struct rrc_ue_ngap_ids_s *const ue_ids_pP
-);
+void rrc_gNB_send_NGAP_UE_CONTEXT_RELEASE_COMPLETE(instance_t instance, uint32_t gNB_ue_ngap_id);
void
rrc_gNB_send_NGAP_UE_CAPABILITIES_IND(
@@ -168,12 +103,7 @@ rrc_gNB_send_NGAP_UE_CAPABILITIES_IND(
NR_UL_DCCH_Message_t *const ul_dcch_msg
);
-int
-rrc_gNB_process_NGAP_PDUSESSION_RELEASE_COMMAND(
- MessageDef *msg_p,
- const char *msg_name,
- instance_t instance
-);
+int rrc_gNB_process_NGAP_PDUSESSION_RELEASE_COMMAND(MessageDef *msg_p, instance_t instance);
void
rrc_gNB_send_NGAP_PDUSESSION_RELEASE_RESPONSE(
@@ -189,17 +119,6 @@ nr_rrc_pdcp_config_security(
const uint8_t send_security_mode_command
);
-struct rrc_gNB_ue_context_s *
-rrc_gNB_get_ue_context_from_ngap_ids(
- const instance_t instanceP,
- const uint16_t ue_initial_idP,
- const uint32_t gNB_ue_ngap_idP
-);
-
-int
-rrc_gNB_process_PAGING_IND(
- MessageDef *msg_p,
- const char *msg_name,
- instance_t instance);
+int rrc_gNB_process_PAGING_IND(MessageDef *msg_p, instance_t instance);
#endif
diff --git a/openair2/RRC/NR/rrc_gNB_UE_context.c b/openair2/RRC/NR/rrc_gNB_UE_context.c
index 87b4de23b2..137ed695f5 100644
--- a/openair2/RRC/NR/rrc_gNB_UE_context.c
+++ b/openair2/RRC/NR/rrc_gNB_UE_context.c
@@ -38,15 +38,14 @@
//------------------------------------------------------------------------------
-int rrc_gNB_compare_ue_rnti_id(
- struct rrc_gNB_ue_context_s *c1_pP, struct rrc_gNB_ue_context_s *c2_pP)
+int rrc_gNB_compare_ue_rnti_id(rrc_gNB_ue_context_t *c1_pP, rrc_gNB_ue_context_t *c2_pP)
//------------------------------------------------------------------------------
{
- if (c1_pP->ue_id_rnti > c2_pP->ue_id_rnti) {
+ if (c1_pP->ue_context.gNB_ue_ngap_id > c2_pP->ue_context.gNB_ue_ngap_id) {
return 1;
}
- if (c1_pP->ue_id_rnti < c2_pP->ue_id_rnti) {
+ if (c1_pP->ue_context.gNB_ue_ngap_id < c2_pP->ue_context.gNB_ue_ngap_id) {
return -1;
}
@@ -57,25 +56,17 @@ int rrc_gNB_compare_ue_rnti_id(
RB_GENERATE(rrc_nr_ue_tree_s, rrc_gNB_ue_context_s, entries,
rrc_gNB_compare_ue_rnti_id);
-
-
//------------------------------------------------------------------------------
-struct rrc_gNB_ue_context_s *
-rrc_gNB_allocate_new_UE_context(
- gNB_RRC_INST *rrc_instance_pP
-)
+rrc_gNB_ue_context_t *rrc_gNB_allocate_new_ue_context(gNB_RRC_INST *rrc_instance_pP)
//------------------------------------------------------------------------------
{
- struct rrc_gNB_ue_context_s *new_p;
- new_p = (struct rrc_gNB_ue_context_s * )malloc(sizeof(struct rrc_gNB_ue_context_s));
+ rrc_gNB_ue_context_t *new_p = calloc(1, sizeof(*new_p));
if (new_p == NULL) {
- LOG_E(RRC, "Cannot allocate new ue context\n");
+ LOG_E(NR_RRC, "Cannot allocate new ue context\n");
return NULL;
}
-
- memset(new_p, 0, sizeof(struct rrc_gNB_ue_context_s));
- new_p->local_uid = uid_linear_allocator_new(&rrc_instance_pP->uid_allocator);
+ new_p->ue_context.gNB_ue_ngap_id = uid_linear_allocator_new(&rrc_instance_pP->uid_allocator);
for(int i = 0; i < NB_RB_MAX; i++) {
new_p->ue_context.e_rab[i].xid = -1;
@@ -83,94 +74,66 @@ rrc_gNB_allocate_new_UE_context(
new_p->ue_context.modify_e_rab[i].xid = -1;
}
- LOG_D(NR_RRC,"Returning new UE context at %p\n",new_p);
+ LOG_I(NR_RRC, "Returning new RRC UE context RRC ue id: %d\n", new_p->ue_context.gNB_ue_ngap_id);
return(new_p);
}
//------------------------------------------------------------------------------
-struct rrc_gNB_ue_context_s *
-rrc_gNB_get_ue_context(
- gNB_RRC_INST *rrc_instance_pP,
- rnti_t rntiP)
+rrc_gNB_ue_context_t *rrc_gNB_get_ue_context(gNB_RRC_INST *rrc_instance_pP, ue_id_t ue)
//------------------------------------------------------------------------------
{
rrc_gNB_ue_context_t temp;
- memset(&temp, 0, sizeof(struct rrc_gNB_ue_context_s));
/* gNB ue rrc id = 24 bits wide */
- temp.ue_id_rnti = rntiP;
- struct rrc_gNB_ue_context_s *ue_context_p = NULL;
- ue_context_p = RB_FIND(rrc_nr_ue_tree_s, &rrc_instance_pP->rrc_ue_head, &temp);
-
- if ( ue_context_p != NULL) {
- return ue_context_p;
- } else {
- RB_FOREACH(ue_context_p, rrc_nr_ue_tree_s, &(rrc_instance_pP->rrc_ue_head)) {
- if (ue_context_p->ue_context.rnti == rntiP) {
- return ue_context_p;
- }
- }
- return NULL;
- }
+ temp.ue_context.gNB_ue_ngap_id = ue;
+ return RB_FIND(rrc_nr_ue_tree_s, &rrc_instance_pP->rrc_ue_head, &temp);
}
-void rrc_gNB_free_mem_UE_context(
- const protocol_ctxt_t *const ctxt_pP,
- struct rrc_gNB_ue_context_s *const ue_context_pP
-)
+rrc_gNB_ue_context_t *rrc_gNB_get_ue_context_by_rnti(gNB_RRC_INST *rrc_instance_pP, rnti_t rntiP)
+{
+ rrc_gNB_ue_context_t *ue_context_p;
+ RB_FOREACH(ue_context_p, rrc_nr_ue_tree_s, &(rrc_instance_pP->rrc_ue_head))
+ {
+ if (ue_context_p->ue_context.rnti == rntiP)
+ return ue_context_p;
+ }
+ LOG_W(NR_RRC, "search by rnti not found %04x\n", rntiP);
+ return NULL;
+}
+
+void rrc_gNB_free_mem_ue_context(rrc_gNB_ue_context_t *const ue_context_pP)
//-----------------------------------------------------------------------------
{
-
- LOG_T(RRC,
- PROTOCOL_NR_RRC_CTXT_UE_FMT" Clearing UE context 0x%p (free internal structs)\n",
- PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP),
- ue_context_pP);
-
- //ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_LTE_SCellToAddMod_r10, &ue_context_pP->ue_context.sCell_config[0]);
- //ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_LTE_SCellToAddMod_r10, &ue_context_pP->ue_context.sCell_config[1]);
-
- // empty the internal fields of the UE context here
+ free(ue_context_pP);
+ LOG_T(NR_RRC, " Clearing UE context 0x%p (free internal structs)\n", ue_context_pP);
}
//------------------------------------------------------------------------------
-void rrc_gNB_remove_ue_context(
- const protocol_ctxt_t *const ctxt_pP,
- gNB_RRC_INST *rrc_instance_pP,
- struct rrc_gNB_ue_context_s *ue_context_pP)
+void rrc_gNB_remove_ue_context(gNB_RRC_INST *rrc_instance_pP, rrc_gNB_ue_context_t *ue_context_pP)
//------------------------------------------------------------------------------
{
if (rrc_instance_pP == NULL) {
- LOG_E(RRC, PROTOCOL_NR_RRC_CTXT_UE_FMT" Bad RRC instance\n",
- PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP));
+ LOG_E(NR_RRC, " Bad RRC instance\n");
return;
}
if (ue_context_pP == NULL) {
- LOG_E(RRC, PROTOCOL_NR_RRC_CTXT_UE_FMT" Trying to free a NULL UE context\n",
- PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP));
+ LOG_E(NR_RRC, "Trying to free a NULL UE context\n");
return;
}
RB_REMOVE(rrc_nr_ue_tree_s, &rrc_instance_pP->rrc_ue_head, ue_context_pP);
- rrc_gNB_free_mem_UE_context(ctxt_pP, ue_context_pP);
- uid_linear_allocator_free(&rrc_instance_pP->uid_allocator, ue_context_pP->local_uid);
- free(ue_context_pP);
- rrc_instance_pP->Nb_ue --;
- LOG_I(RRC,
- PROTOCOL_NR_RRC_CTXT_UE_FMT" Removed UE context\n",
- PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP));
+ uid_linear_allocator_free(&rrc_instance_pP->uid_allocator, ue_context_pP->ue_context.gNB_ue_ngap_id);
+ rrc_gNB_free_mem_ue_context(ue_context_pP);
+ LOG_I(NR_RRC, "Removed UE context\n");
}
//-----------------------------------------------------------------------------
// return the ue context if there is already an UE with ue_identityP, NULL otherwise
-struct rrc_gNB_ue_context_s *
-rrc_gNB_ue_context_random_exist(
- gNB_RRC_INST *rrc_instance_pP,
- const uint64_t ue_identityP
-)
+rrc_gNB_ue_context_t *rrc_gNB_ue_context_random_exist(gNB_RRC_INST *rrc_instance_pP, const uint64_t ue_identityP)
//-----------------------------------------------------------------------------
{
- struct rrc_gNB_ue_context_s *ue_context_p = NULL;
+ rrc_gNB_ue_context_t *ue_context_p = NULL;
RB_FOREACH(ue_context_p, rrc_nr_ue_tree_s, &rrc_instance_pP->rrc_ue_head) {
if (ue_context_p->ue_context.random_ue_identity == ue_identityP)
return ue_context_p;
@@ -180,63 +143,48 @@ rrc_gNB_ue_context_random_exist(
//-----------------------------------------------------------------------------
// return the ue context if there is already an UE with the same S-TMSI, NULL otherwise
-struct rrc_gNB_ue_context_s *
-rrc_gNB_ue_context_5g_s_tmsi_exist(
- gNB_RRC_INST *rrc_instance_pP,
- const uint64_t s_TMSI
-)
+rrc_gNB_ue_context_t *rrc_gNB_ue_context_5g_s_tmsi_exist(gNB_RRC_INST *rrc_instance_pP, const uint64_t s_TMSI)
//-----------------------------------------------------------------------------
{
- struct rrc_gNB_ue_context_s *ue_context_p = NULL;
- RB_FOREACH(ue_context_p, rrc_nr_ue_tree_s, &rrc_instance_pP->rrc_ue_head) {
- LOG_I(NR_RRC,"Checking for UE 5G S-TMSI %ld: RNTI %04x\n",
- s_TMSI, ue_context_p->ue_context.rnti);
-
- if (ue_context_p->ue_context.ng_5G_S_TMSI_Part1 == s_TMSI) {
- return ue_context_p;
- }
- }
+ rrc_gNB_ue_context_t *ue_context_p = NULL;
+ RB_FOREACH(ue_context_p, rrc_nr_ue_tree_s, &rrc_instance_pP->rrc_ue_head)
+ {
+ LOG_I(NR_RRC, "Checking for UE 5G S-TMSI %ld: RNTI %04x\n", s_TMSI, ue_context_p->ue_context.rnti);
+ if (ue_context_p->ue_context.ng_5G_S_TMSI_Part1 == s_TMSI)
+ return ue_context_p;
+ }
return NULL;
}
+void rrc_gNB_update_ue_context_rnti(rnti_t rnti, gNB_RRC_INST *rrc_instance_pP, uint32_t gNB_ue_ngap_id)
+{
+ // rnti will need to be a fast access key, with indexing, today it is sequential search
+ // This function will update the index when it will be made
+ rrc_gNB_ue_context_t *ue_context_p = rrc_gNB_get_ue_context(rrc_instance_pP, gNB_ue_ngap_id);
+ if (ue_context_p)
+ ue_context_p->ue_context.rnti = rnti;
+ else
+ LOG_E(NR_RRC, "update rnti on a wrong UE id\n");
+}
//-----------------------------------------------------------------------------
-// return a new ue context structure if ue_identityP, ctxt_pP->rnti not found in collection
-struct rrc_gNB_ue_context_s *
-rrc_gNB_get_next_free_ue_context(
- const protocol_ctxt_t *const ctxt_pP,
- gNB_RRC_INST *rrc_instance_pP,
- const uint64_t ue_identityP
-)
+// return a new ue context structure if ue_identityP, rnti not found in collection
+rrc_gNB_ue_context_t *rrc_gNB_create_ue_context(rnti_t rnti, gNB_RRC_INST *rrc_instance_pP, const uint64_t ue_identityP)
//-----------------------------------------------------------------------------
{
- struct rrc_gNB_ue_context_s *ue_context_p = NULL;
- ue_context_p = rrc_gNB_get_ue_context(rrc_instance_pP, ctxt_pP->rntiMaybeUEid);
+ rrc_gNB_ue_context_t *ue_context_p = rrc_gNB_get_ue_context_by_rnti(rrc_instance_pP, rnti);
- if (ue_context_p == NULL) {
- ue_context_p = rrc_gNB_allocate_new_UE_context(rrc_instance_pP);
-
- if (ue_context_p == NULL) {
- LOG_E(NR_RRC,
- PROTOCOL_NR_RRC_CTXT_UE_FMT" Cannot create new UE context, no memory\n",
- PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP));
- return NULL;
- }
-
- ue_context_p->ue_id_rnti = ctxt_pP->rntiMaybeUEid; // here ue_id_rnti is just a key, may be something else
- ue_context_p->ue_context.rnti = ctxt_pP->rntiMaybeUEid; // yes duplicate, 1 may be removed
- ue_context_p->ue_context.random_ue_identity = ue_identityP;
- RB_INSERT(rrc_nr_ue_tree_s, &rrc_instance_pP->rrc_ue_head, ue_context_p);
- LOG_D(NR_RRC,
- PROTOCOL_NR_RRC_CTXT_UE_FMT" Created new UE context uid %u\n",
- PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP),
- ue_context_p->local_uid);
+ if (ue_context_p) {
+ LOG_E(NR_RRC, "Cannot create new UE context, already exist rnti: %04x\n", rnti);
return ue_context_p;
- } else {
- LOG_E(NR_RRC,
- PROTOCOL_NR_RRC_CTXT_UE_FMT" Cannot create new UE context, already exist\n",
- PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP));
- return NULL;
}
- return(ue_context_p);
+ ue_context_p = rrc_gNB_allocate_new_ue_context(rrc_instance_pP);
+ if (ue_context_p == NULL)
+ return NULL;
+
+ ue_context_p->ue_context.rnti = rnti;
+ ue_context_p->ue_context.random_ue_identity = ue_identityP;
+ RB_INSERT(rrc_nr_ue_tree_s, &rrc_instance_pP->rrc_ue_head, ue_context_p);
+ LOG_W(NR_RRC, " Created new UE context rnti: %04x, random ue id %lx, RRC ue id %u\n", rnti, ue_identityP, ue_context_p->ue_context.gNB_ue_ngap_id);
+ return ue_context_p;
}
diff --git a/openair2/RRC/NR/rrc_gNB_UE_context.h b/openair2/RRC/NR/rrc_gNB_UE_context.h
index 4009f2617f..9c1ec2c164 100644
--- a/openair2/RRC/NR/rrc_gNB_UE_context.h
+++ b/openair2/RRC/NR/rrc_gNB_UE_context.h
@@ -34,52 +34,23 @@
#include "COMMON/platform_types.h"
#include "nr_rrc_defs.h"
-int rrc_gNB_compare_ue_rnti_id(
- struct rrc_gNB_ue_context_s* c1_pP,
- struct rrc_gNB_ue_context_s* c2_pP
-);
+int rrc_gNB_compare_ue_rnti_id(rrc_gNB_ue_context_t* c1_pP, rrc_gNB_ue_context_t* c2_pP);
RB_PROTOTYPE(rrc_nr_ue_tree_s, rrc_gNB_ue_context_s, entries, rrc_gNB_compare_ue_rnti_id);
-struct rrc_gNB_ue_context_s*
-rrc_gNB_allocate_new_UE_context(
- gNB_RRC_INST* rrc_instance_pP
-);
+rrc_gNB_ue_context_t* rrc_gNB_allocate_new_ue_context(gNB_RRC_INST* rrc_instance_pP);
-struct rrc_gNB_ue_context_s*
-rrc_gNB_get_ue_context(
- gNB_RRC_INST* rrc_instance_pP,
- rnti_t rntiP
-);
+rrc_gNB_ue_context_t* rrc_gNB_get_ue_context(gNB_RRC_INST* rrc_instance_pP, ue_id_t ue);
+rrc_gNB_ue_context_t* rrc_gNB_get_ue_context_by_rnti(gNB_RRC_INST* rrc_instance_pP, rnti_t rntiP);
-void rrc_gNB_free_mem_UE_context(
- const protocol_ctxt_t *const ctxt_pP,
- struct rrc_gNB_ue_context_s *const ue_context_pP
-);
+void rrc_gNB_free_mem_ue_context(rrc_gNB_ue_context_t* const ue_context_pP);
-void rrc_gNB_remove_ue_context(
- const protocol_ctxt_t* const ctxt_pP,
- gNB_RRC_INST* rrc_instance_pP,
- struct rrc_gNB_ue_context_s* ue_context_pP
-);
+void rrc_gNB_remove_ue_context(gNB_RRC_INST* rrc_instance_pP, rrc_gNB_ue_context_t* ue_context_pP);
-struct rrc_gNB_ue_context_s *
-rrc_gNB_ue_context_random_exist(
- gNB_RRC_INST *rrc_instance_pP,
- const uint64_t ue_identityP
-);
+rrc_gNB_ue_context_t* rrc_gNB_ue_context_random_exist(gNB_RRC_INST* rrc_instance_pP, const uint64_t ue_identityP);
-struct rrc_gNB_ue_context_s *
-rrc_gNB_ue_context_5g_s_tmsi_exist(
- gNB_RRC_INST *rrc_instance_pP,
- const uint64_t s_TMSI
-);
-
-struct rrc_gNB_ue_context_s *
-rrc_gNB_get_next_free_ue_context(
- const protocol_ctxt_t *const ctxt_pP,
- gNB_RRC_INST *rrc_instance_pP,
- const uint64_t ue_identityP
-);
+rrc_gNB_ue_context_t* rrc_gNB_ue_context_5g_s_tmsi_exist(gNB_RRC_INST* rrc_instance_pP, const uint64_t s_TMSI);
+void rrc_gNB_update_ue_context_rnti(rnti_t rnti, gNB_RRC_INST* rrc_instance_pP, uint32_t gNB_ue_ngap_id);
+rrc_gNB_ue_context_t* rrc_gNB_create_ue_context(rnti_t rnti, gNB_RRC_INST* rrc_instance_pP, const uint64_t ue_identityP);
#endif
diff --git a/openair2/RRC/NR/rrc_gNB_nsa.c b/openair2/RRC/NR/rrc_gNB_nsa.c
index 039fffa555..89c5b44858 100644
--- a/openair2/RRC/NR/rrc_gNB_nsa.c
+++ b/openair2/RRC/NR/rrc_gNB_nsa.c
@@ -45,9 +45,8 @@
#include
#include "pdcp.h"
-void rrc_parse_ue_capabilities(gNB_RRC_INST *rrc, NR_UE_CapabilityRAT_ContainerList_t *UE_CapabilityRAT_ContainerList, x2ap_ENDC_sgnb_addition_req_t *m, NR_CG_ConfigInfo_IEs_t *cg_config_info) {
- struct rrc_gNB_ue_context_s *ue_context_p = NULL;
-
+void rrc_parse_ue_capabilities(gNB_RRC_INST *rrc, NR_UE_CapabilityRAT_ContainerList_t *UE_CapabilityRAT_ContainerList, x2ap_ENDC_sgnb_addition_req_t *m, NR_CG_ConfigInfo_IEs_t *cg_config_info)
+{
OCTET_STRING_t *ueCapabilityRAT_Container_nr=NULL;
OCTET_STRING_t *ueCapabilityRAT_Container_MRDC=NULL;
asn_dec_rval_t dec_rval;
@@ -62,36 +61,27 @@ void rrc_parse_ue_capabilities(gNB_RRC_INST *rrc, NR_UE_CapabilityRAT_ContainerL
}
// decode and store capabilities
- ue_context_p = rrc_gNB_allocate_new_UE_context(rrc);
+ rrc_gNB_ue_context_t *ue_context_p = rrc_gNB_allocate_new_ue_context(rrc);
+ gNB_RRC_UE_t *UE = &ue_context_p->ue_context;
if (ueCapabilityRAT_Container_nr != NULL) {
- dec_rval = uper_decode(NULL,
- &asn_DEF_NR_UE_NR_Capability,
- (void **)&ue_context_p->ue_context.UE_Capability_nr,
- ueCapabilityRAT_Container_nr->buf,
- ueCapabilityRAT_Container_nr->size, 0, 0);
+ dec_rval = uper_decode(NULL, &asn_DEF_NR_UE_NR_Capability, (void **)&UE->UE_Capability_nr, ueCapabilityRAT_Container_nr->buf, ueCapabilityRAT_Container_nr->size, 0, 0);
if ((dec_rval.code != RC_OK) && (dec_rval.consumed == 0)) {
LOG_E(RRC, "Failed to decode UE NR capabilities (%zu bytes) container size %lu\n", dec_rval.consumed,ueCapabilityRAT_Container_nr->size);
- ASN_STRUCT_FREE(asn_DEF_NR_UE_NR_Capability,
- ue_context_p->ue_context.UE_Capability_nr);
- ue_context_p->ue_context.UE_Capability_nr = 0;
+ ASN_STRUCT_FREE(asn_DEF_NR_UE_NR_Capability, UE->UE_Capability_nr);
+ UE->UE_Capability_nr = 0;
AssertFatal(1==0,"exiting\n");
}
}
if (ueCapabilityRAT_Container_MRDC != NULL) {
- dec_rval = uper_decode(NULL,
- &asn_DEF_NR_UE_MRDC_Capability,
- (void **)&ue_context_p->ue_context.UE_Capability_MRDC,
- ueCapabilityRAT_Container_MRDC->buf,
- ueCapabilityRAT_Container_MRDC->size, 0, 0);
+ dec_rval = uper_decode(NULL, &asn_DEF_NR_UE_MRDC_Capability, (void **)&UE->UE_Capability_MRDC, ueCapabilityRAT_Container_MRDC->buf, ueCapabilityRAT_Container_MRDC->size, 0, 0);
if ((dec_rval.code != RC_OK) && (dec_rval.consumed == 0)) {
LOG_E(RRC, "Failed to decode UE MRDC capabilities (%zu bytes)\n", dec_rval.consumed);
- ASN_STRUCT_FREE(asn_DEF_NR_UE_MRDC_Capability,
- ue_context_p->ue_context.UE_Capability_MRDC);
- ue_context_p->ue_context.UE_Capability_MRDC = 0;
+ ASN_STRUCT_FREE(asn_DEF_NR_UE_MRDC_Capability, UE->UE_Capability_MRDC);
+ UE->UE_Capability_MRDC = 0;
AssertFatal(1==0,"exiting\n");
}
}
@@ -99,16 +89,16 @@ void rrc_parse_ue_capabilities(gNB_RRC_INST *rrc, NR_UE_CapabilityRAT_ContainerL
// dump ue_capabilities
if ( LOG_DEBUGFLAG(DEBUG_ASN1) && ueCapabilityRAT_Container_nr != NULL ) {
- xer_fprint(stdout, &asn_DEF_NR_UE_NR_Capability, ue_context_p->ue_context.UE_Capability_nr);
+ xer_fprint(stdout, &asn_DEF_NR_UE_NR_Capability, UE->UE_Capability_nr);
}
if ( LOG_DEBUGFLAG(DEBUG_ASN1) && ueCapabilityRAT_Container_MRDC != NULL ) {
- xer_fprint(stdout, &asn_DEF_NR_UE_MRDC_Capability, ue_context_p->ue_context.UE_Capability_MRDC);
+ xer_fprint(stdout, &asn_DEF_NR_UE_MRDC_Capability, UE->UE_Capability_MRDC);
}
LOG_A(NR_RRC, "Successfully decoded UE NR capabilities (NR and MRDC)\n");
- ue_context_p->ue_context.spCellConfig = calloc(1, sizeof(struct NR_SpCellConfig));
- ue_context_p->ue_context.spCellConfig->spCellConfigDedicated = rrc->carrier.servingcellconfig;
+ UE->spCellConfig = calloc(1, sizeof(struct NR_SpCellConfig));
+ UE->spCellConfig->spCellConfigDedicated = rrc->carrier.servingcellconfig;
LOG_I(NR_RRC,"Adding new NSA user (%p)\n",ue_context_p);
rrc_add_nsa_user(rrc,ue_context_p, m);
}
@@ -117,7 +107,8 @@ void rrc_parse_ue_capabilities(gNB_RRC_INST *rrc, NR_UE_CapabilityRAT_ContainerL
RB_PROTOTYPE(rrc_nr_ue_tree_s, rrc_gNB_ue_context_s, entries,
rrc_gNB_compare_ue_rnti_id);
-void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_p, x2ap_ENDC_sgnb_addition_req_t *m) {
+void rrc_add_nsa_user(gNB_RRC_INST *rrc, rrc_gNB_ue_context_t *ue_context_p, x2ap_ENDC_sgnb_addition_req_t *m)
+{
// generate nr-Config-r15 containers for LTE RRC : inside message for X2 EN-DC (CG-Config Message from 38.331)
rrc_gNB_carrier_data_t *carrier=&rrc->carrier;
const gNB_RrcConfigurationReq *configuration = &rrc->configuration;
@@ -129,6 +120,7 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_
unsigned char *kUPenc = NULL;
unsigned char *kUPint = NULL;
int i;
+ gNB_RRC_UE_t *UE = &ue_context_p->ue_context;
// In case of phy-test and do-ra mode, read UE capabilities directly from file
if (get_softmodem_params()->phy_test == 1 || get_softmodem_params()->do_ra == 1) {
@@ -150,25 +142,20 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_
}
else
LOG_E(NR_RRC,"Could not open UE Capabilities input file. Not handling OAI UE Capabilities.\n");
- ue_context_p->ue_context.UE_Capability_nr = UE_Capability_nr;
+ UE->UE_Capability_nr = UE_Capability_nr;
}
// NR RRCReconfiguration
- AssertFatal(rrc->Nb_ue < MAX_NR_RRC_UE_CONTEXTS,"cannot add another UE\n");
- ue_context_p->ue_context.reconfig = calloc(1,sizeof(NR_RRCReconfiguration_t));
- ue_context_p->ue_context.secondaryCellGroup = calloc(1,sizeof(NR_CellGroupConfig_t));
- memset((void *)ue_context_p->ue_context.reconfig,0,sizeof(NR_RRCReconfiguration_t));
- ue_context_p->ue_context.reconfig->rrc_TransactionIdentifier=0;
- ue_context_p->ue_context.reconfig->criticalExtensions.present = NR_RRCReconfiguration__criticalExtensions_PR_rrcReconfiguration;
+ UE->reconfig = calloc(1, sizeof(NR_RRCReconfiguration_t));
+ UE->secondaryCellGroup = calloc(1, sizeof(NR_CellGroupConfig_t));
+ memset((void *)UE->reconfig, 0, sizeof(NR_RRCReconfiguration_t));
+ UE->reconfig->rrc_TransactionIdentifier = 0;
+ UE->reconfig->criticalExtensions.present = NR_RRCReconfiguration__criticalExtensions_PR_rrcReconfiguration;
NR_RRCReconfiguration_IEs_t *reconfig_ies=calloc(1,sizeof(NR_RRCReconfiguration_IEs_t));
- ue_context_p->ue_context.reconfig->criticalExtensions.choice.rrcReconfiguration = reconfig_ies;
- ue_context_p->ue_context.rb_config = calloc(1,sizeof(NR_RRCReconfiguration_t));
+ UE->reconfig->criticalExtensions.choice.rrcReconfiguration = reconfig_ies;
+ UE->rb_config = calloc(1, sizeof(NR_RRCReconfiguration_t));
if (get_softmodem_params()->phy_test == 1 || get_softmodem_params()->do_ra == 1 || get_softmodem_params()->sa == 1){
- fill_default_rbconfig(ue_context_p->ue_context.rb_config,
- 10 /* EPS bearer ID */,
- 1 /* drb ID */,
- NR_CipheringAlgorithm_nea0,
- NR_SecurityConfig__keyToUse_master);
+ fill_default_rbconfig(UE->rb_config, 10 /* EPS bearer ID */, 1 /* drb ID */, NR_CipheringAlgorithm_nea0, NR_SecurityConfig__keyToUse_master);
} else {
/* TODO: handle more than one bearer */
if (m == NULL) {
@@ -181,9 +168,9 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_
}
/* store security key and security capabilities */
- memcpy(ue_context_p->ue_context.kgnb, m->kgnb, 32);
- ue_context_p->ue_context.security_capabilities.nRencryption_algorithms = m->security_capabilities.encryption_algorithms;
- ue_context_p->ue_context.security_capabilities.nRintegrity_algorithms = m->security_capabilities.integrity_algorithms;
+ memcpy(UE->kgnb, m->kgnb, 32);
+ UE->security_capabilities.nRencryption_algorithms = m->security_capabilities.encryption_algorithms;
+ UE->security_capabilities.nRintegrity_algorithms = m->security_capabilities.integrity_algorithms;
/* Select ciphering algorithm based on gNB configuration file and
* UE's supported algorithms.
@@ -191,7 +178,7 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_
* The ordering of the list comes from the configuration file.
*/
/* preset nea0 as fallback */
- ue_context_p->ue_context.ciphering_algorithm = 0;
+ UE->ciphering_algorithm = 0;
for (i = 0; i < rrc->security.ciphering_algorithms_count; i++) {
int nea_mask[4] = {
0,
@@ -203,13 +190,13 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_
/* nea0 already preselected */
break;
}
- if (ue_context_p->ue_context.security_capabilities.nRencryption_algorithms & nea_mask[rrc->security.ciphering_algorithms[i]]) {
- ue_context_p->ue_context.ciphering_algorithm = rrc->security.ciphering_algorithms[i];
+ if (UE->security_capabilities.nRencryption_algorithms & nea_mask[rrc->security.ciphering_algorithms[i]]) {
+ UE->ciphering_algorithm = rrc->security.ciphering_algorithms[i];
break;
}
}
- LOG_I(RRC, "selecting ciphering algorithm %d\n", (int)ue_context_p->ue_context.ciphering_algorithm);
+ LOG_I(RRC, "selecting ciphering algorithm %d\n", (int)UE->ciphering_algorithm);
/* integrity: no integrity protection for DRB in ENDC mode
* as written in 38.331: "If UE is connected to E-UTRA/EPC, this field
@@ -218,49 +205,46 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_
* So nothing for DRB. Plus a test with a COTS UE revealed that it
* did not apply integrity on the DRB.
*/
- ue_context_p->ue_context.integrity_algorithm = 0;
+ UE->integrity_algorithm = 0;
- LOG_I(RRC, "selecting integrity algorithm %d\n", ue_context_p->ue_context.integrity_algorithm);
+ LOG_I(RRC, "selecting integrity algorithm %d\n", UE->integrity_algorithm);
/* derive UP security key */
- nr_derive_key_up_enc(ue_context_p->ue_context.ciphering_algorithm,
- ue_context_p->ue_context.kgnb,
- &kUPenc);
- nr_derive_key_up_int(ue_context_p->ue_context.integrity_algorithm,
- ue_context_p->ue_context.kgnb,
- &kUPint);
+ nr_derive_key_up_enc(UE->ciphering_algorithm, UE->kgnb, &kUPenc);
+ nr_derive_key_up_int(UE->integrity_algorithm, UE->kgnb, &kUPint);
e_NR_CipheringAlgorithm cipher_algo;
- switch (ue_context_p->ue_context.ciphering_algorithm) {
- case 0: cipher_algo = NR_CipheringAlgorithm_nea0; break;
- case 1: cipher_algo = NR_CipheringAlgorithm_nea1; break;
- case 2: cipher_algo = NR_CipheringAlgorithm_nea2; break;
- case 3: cipher_algo = NR_CipheringAlgorithm_nea3; break;
- default: LOG_E(RRC, "%s:%d:%s: fatal\n", __FILE__, __LINE__, __FUNCTION__); exit(1);
+ switch (UE->ciphering_algorithm) {
+ case 0:
+ cipher_algo = NR_CipheringAlgorithm_nea0;
+ break;
+ case 1:
+ cipher_algo = NR_CipheringAlgorithm_nea1;
+ break;
+ case 2:
+ cipher_algo = NR_CipheringAlgorithm_nea2;
+ break;
+ case 3:
+ cipher_algo = NR_CipheringAlgorithm_nea3;
+ break;
+ default:
+ LOG_E(RRC, "%s:%d:%s: fatal\n", __FILE__, __LINE__, __FUNCTION__);
+ exit(1);
}
- fill_default_rbconfig(ue_context_p->ue_context.rb_config,
- m->e_rabs_tobeadded[0].e_rab_id,
- m->e_rabs_tobeadded[0].drb_ID,
- cipher_algo,
- NR_SecurityConfig__keyToUse_secondary);
+ fill_default_rbconfig(UE->rb_config, m->e_rabs_tobeadded[0].e_rab_id, m->e_rabs_tobeadded[0].drb_ID, cipher_algo, NR_SecurityConfig__keyToUse_secondary);
}
- NR_ServingCellConfig_t *scc = ue_context_p->ue_context.spCellConfig ?
- ue_context_p->ue_context.spCellConfig->spCellConfigDedicated : NULL;
- fill_default_reconfig(carrier->servingcellconfigcommon,
- scc,
- reconfig_ies,
- ue_context_p->ue_context.secondaryCellGroup,
- ue_context_p->ue_context.UE_Capability_nr,
- configuration,
- ue_context_p->local_uid);
-
- ue_context_p->ue_id_rnti = ue_context_p->ue_context.secondaryCellGroup->spCellConfig->reconfigurationWithSync->newUE_Identity;
+ NR_ServingCellConfig_t *scc = UE->spCellConfig ? UE->spCellConfig->spCellConfigDedicated : NULL;
+ fill_default_reconfig(carrier->servingcellconfigcommon, scc, reconfig_ies, UE->secondaryCellGroup, UE->UE_Capability_nr, configuration, ue_context_p->ue_context.gNB_ue_ngap_id);
+ // the UE context is not yet inserted in the RRC UE manager
+ // rrc_gNB_update_ue_context_rnti(UE->secondaryCellGroup->spCellConfig->reconfigurationWithSync->newUE_Identity, rrc,
+ // UE->gNB_ue_ngap_id);
+ UE->rnti = UE->secondaryCellGroup->spCellConfig->reconfigurationWithSync->newUE_Identity;
NR_CG_Config_t *CG_Config = calloc(1,sizeof(*CG_Config));
memset((void *)CG_Config,0,sizeof(*CG_Config));
- //int CG_Config_size = generate_CG_Config(rrc,CG_Config,ue_context_p->ue_context.reconfig,ue_context_p->ue_context.rb_config);
- generate_CG_Config(rrc,CG_Config,ue_context_p->ue_context.reconfig,ue_context_p->ue_context.rb_config);
+ // int CG_Config_size = generate_CG_Config(rrc,CG_Config,UE->reconfig,UE->rb_config);
+ generate_CG_Config(rrc, CG_Config, UE->reconfig, UE->rb_config);
if(m!=NULL) {
uint8_t inde_list[m->nb_e_rabs_tobeadded];
@@ -268,15 +252,15 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_
if (m->nb_e_rabs_tobeadded>0) {
for (int i=0; inb_e_rabs_tobeadded; i++) {
- // Add the new E-RABs at the corresponding rrc ue context of the gNB
- ue_context_p->ue_context.e_rab[i].param.e_rab_id = m->e_rabs_tobeadded[i].e_rab_id;
- ue_context_p->ue_context.e_rab[i].param.gtp_teid = m->e_rabs_tobeadded[i].gtp_teid;
- memcpy(&ue_context_p->ue_context.e_rab[i].param.sgw_addr, &m->e_rabs_tobeadded[i].sgw_addr, sizeof(transport_layer_addr_t));
- ue_context_p->ue_context.nb_of_e_rabs++;
+ // Add the new E-RABs at the corresponding rrc ue context of the gNB
+ UE->e_rab[i].param.e_rab_id = m->e_rabs_tobeadded[i].e_rab_id;
+ UE->e_rab[i].param.gtp_teid = m->e_rabs_tobeadded[i].gtp_teid;
+ memcpy(&UE->e_rab[i].param.sgw_addr, &m->e_rabs_tobeadded[i].sgw_addr, sizeof(transport_layer_addr_t));
+ UE->nb_of_e_rabs++;
//Fill the required E-RAB specific information for the creation of the S1-U tunnel between the gNB and the SGW
- create_tunnel_req.eps_bearer_id[i] = ue_context_p->ue_context.e_rab[i].param.e_rab_id;
- create_tunnel_req.sgw_S1u_teid[i] = ue_context_p->ue_context.e_rab[i].param.gtp_teid;
- memcpy(&create_tunnel_req.sgw_addr[i], &ue_context_p->ue_context.e_rab[i].param.sgw_addr, sizeof(transport_layer_addr_t));
+ create_tunnel_req.eps_bearer_id[i] = UE->e_rab[i].param.e_rab_id;
+ create_tunnel_req.sgw_S1u_teid[i] = UE->e_rab[i].param.gtp_teid;
+ memcpy(&create_tunnel_req.sgw_addr[i], &UE->e_rab[i].param.sgw_addr, sizeof(transport_layer_addr_t));
inde_list[i] = i;
LOG_I(RRC,"S1-U tunnel: index %d target sgw ip %d.%d.%d.%d length %d gtp teid %u\n",
i,
@@ -288,10 +272,10 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_
create_tunnel_req.sgw_S1u_teid[i]);
}
- create_tunnel_req.rnti = ue_context_p->ue_id_rnti;
+ create_tunnel_req.rnti = ue_context_p->ue_context.rnti;
create_tunnel_req.num_tunnels = m->nb_e_rabs_tobeadded;
RB_INSERT(rrc_nr_ue_tree_s, &RC.nrrrc[rrc->module_id]->rrc_ue_head, ue_context_p);
- PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, rrc->module_id, GNB_FLAG_YES, ue_context_p->ue_id_rnti, 0, 0,rrc->module_id);
+ PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, rrc->module_id, GNB_FLAG_YES, ue_context_p->ue_context.rnti, 0, 0, rrc->module_id);
memset(&create_tunnel_resp, 0, sizeof(create_tunnel_resp));
if (!IS_SOFTMODEM_NOS1) {
LOG_D(RRC, "Calling gtpv1u_create_s1u_tunnel()\n");
@@ -307,8 +291,8 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_
X2AP_ENDC_SGNB_ADDITION_REQ_ACK(msg).nb_e_rabs_admitted_tobeadded = m->nb_e_rabs_tobeadded;
X2AP_ENDC_SGNB_ADDITION_REQ_ACK(msg).target_assoc_id = m->target_assoc_id;
- for(int i=0; iue_context.nb_of_e_rabs; i++) {
- X2AP_ENDC_SGNB_ADDITION_REQ_ACK(msg).e_rabs_admitted_tobeadded[i].e_rab_id = ue_context_p->ue_context.e_rab[i].param.e_rab_id;
+ for (int i = 0; i < UE->nb_of_e_rabs; i++) {
+ X2AP_ENDC_SGNB_ADDITION_REQ_ACK(msg).e_rabs_admitted_tobeadded[i].e_rab_id = UE->e_rab[i].param.e_rab_id;
X2AP_ENDC_SGNB_ADDITION_REQ_ACK(msg).e_rabs_admitted_tobeadded[i].gtp_teid = create_tunnel_resp.enb_S1u_teid[i];
memcpy(&X2AP_ENDC_SGNB_ADDITION_REQ_ACK(msg).e_rabs_admitted_tobeadded[i].gnb_addr, &create_tunnel_resp.enb_addr, sizeof(transport_layer_addr_t));
//The length field in the X2AP targetting structure is expected in bits but the create_tunnel_resp returns the address length in bytes
@@ -334,7 +318,7 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_
LOG_W(RRC, "No E-RAB to be added received from SgNB Addition Request message \n");
X2AP_ENDC_SGNB_ADDITION_REQ_ACK(msg).MeNB_ue_x2_id = m->ue_x2_id;
- X2AP_ENDC_SGNB_ADDITION_REQ_ACK(msg).SgNB_ue_x2_id = ue_context_p->ue_context.secondaryCellGroup->spCellConfig->reconfigurationWithSync->newUE_Identity;
+ X2AP_ENDC_SGNB_ADDITION_REQ_ACK(msg).SgNB_ue_x2_id = UE->secondaryCellGroup->spCellConfig->reconfigurationWithSync->newUE_Identity;
//X2AP_ENDC_SGNB_ADDITION_REQ_ACK(msg).rrc_buffer_size = CG_Config_size; //Need to verify correct value for the buffer_size
// Send to X2 entity to transport to MeNB
asn_enc_rval_t enc_rval = uper_encode_to_buffer(&asn_DEF_NR_CG_Config,
@@ -346,18 +330,17 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_
itti_send_msg_to_task(TASK_X2AP, ENB_MODULE_ID_TO_INSTANCE(0), msg); //Check right id instead of hardcoding
}
- rrc->Nb_ue++;
// configure MAC and RLC
bool ret = false;
if (get_softmodem_params()->phy_test) {
// phytest mode: we don't set up RA, etc
- ret = nr_mac_add_test_ue(RC.nrmac[rrc->module_id], ue_context_p->ue_id_rnti, ue_context_p->ue_context.secondaryCellGroup);
+ ret = nr_mac_add_test_ue(RC.nrmac[rrc->module_id] , ue_context_p->ue_context.rnti, ue_context_p->ue_context.secondaryCellGroup);
} else {
- ret = nr_mac_prepare_ra_nsa_ue(RC.nrmac[rrc->module_id], ue_context_p->ue_id_rnti, ue_context_p->ue_context.secondaryCellGroup);
+ ret = nr_mac_prepare_ra_nsa_ue(RC.nrmac[rrc->module_id], ue_context_p->ue_context.rnti, ue_context_p->ue_context.secondaryCellGroup);
}
AssertFatal(ret, "cannot add NSA UE in MAC, aborting\n");
- PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, rrc->module_id, GNB_FLAG_YES, ue_context_p->ue_id_rnti, 0, 0, rrc->module_id);
+ PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, rrc->module_id, GNB_FLAG_YES, ue_context_p->ue_context.rnti, 0, 0, rrc->module_id);
if (get_softmodem_params()->do_ra) ctxt.enb_flag = 0;
LOG_W(RRC,
"Calling RRC PDCP/RLC ASN1 request functions for protocol context %p with module_id %d, rnti %lx, frame %d, subframe %d eNB_index %d \n",
@@ -368,20 +351,11 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_
ctxt.subframe,
ctxt.eNB_index);
- nr_pdcp_add_drbs(ctxt.enb_flag,
- ctxt.rntiMaybeUEid,
- 0,
- ue_context_p->ue_context.rb_config->drb_ToAddModList,
- (ue_context_p->ue_context.integrity_algorithm << 4) | ue_context_p->ue_context.ciphering_algorithm,
- kUPenc,
- kUPint,
- ue_context_p->ue_context.secondaryCellGroup->rlc_BearerToAddModList);
+ nr_pdcp_add_drbs(
+ ctxt.enb_flag, ctxt.rntiMaybeUEid, 0, UE->rb_config->drb_ToAddModList, (UE->integrity_algorithm << 4) | UE->ciphering_algorithm, kUPenc, kUPint, UE->secondaryCellGroup->rlc_BearerToAddModList);
- nr_rrc_rlc_config_asn1_req(&ctxt,
- get_softmodem_params()->sa ? ue_context_p->ue_context.rb_config->srb_ToAddModList : NULL,
- ue_context_p->ue_context.rb_config->drb_ToAddModList,
- ue_context_p->ue_context.rb_config->drb_ToReleaseList,
- ue_context_p->ue_context.secondaryCellGroup->rlc_BearerToAddModList);
+ nr_rrc_rlc_config_asn1_req(
+ &ctxt, get_softmodem_params()->sa ? UE->rb_config->srb_ToAddModList : NULL, UE->rb_config->drb_ToAddModList, UE->rb_config->drb_ToReleaseList, UE->secondaryCellGroup->rlc_BearerToAddModList);
LOG_D(RRC, "%s:%d: done RRC PDCP/RLC ASN1 request for UE rnti %lx\n", __FUNCTION__, __LINE__, ctxt.rntiMaybeUEid);
}
@@ -394,7 +368,7 @@ void rrc_remove_nsa_user(gNB_RRC_INST *rrc, int rnti) {
LOG_D(RRC, "calling rrc_remove_nsa_user rnti %d\n", rnti);
PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, rrc->module_id, GNB_FLAG_YES, rnti, 0, 0, rrc->module_id);
- ue_context = rrc_gNB_get_ue_context(rrc, rnti);
+ ue_context = rrc_gNB_get_ue_context_by_rnti(rrc, rnti);
if (ue_context == NULL) {
LOG_W(RRC, "rrc_remove_nsa_user: rnti %d not found\n", rnti);
return;
@@ -419,5 +393,5 @@ void rrc_remove_nsa_user(gNB_RRC_INST *rrc, int rnti) {
}
gtpv1u_delete_s1u_tunnel(rrc->module_id, &tmp);
/* remove context */
- rrc_gNB_remove_ue_context(&ctxt, rrc, ue_context);
+ rrc_gNB_remove_ue_context(rrc, ue_context);
}
diff --git a/openair2/RRC/NR/rrc_gNB_radio_bearers.c b/openair2/RRC/NR/rrc_gNB_radio_bearers.c
index 37b5d0dd8b..1848601de8 100644
--- a/openair2/RRC/NR/rrc_gNB_radio_bearers.c
+++ b/openair2/RRC/NR/rrc_gNB_radio_bearers.c
@@ -22,19 +22,30 @@
#include "rrc_gNB_radio_bearers.h"
#include "oai_asn1.h"
-NR_DRB_ToAddMod_t *generateDRB(gNB_RRC_UE_t *ue, uint8_t drb_id, pdu_session_param_t *pduSession, bool enable_sdap, int do_drb_integrity, int do_drb_ciphering)
+rrc_pdu_session_param_t *find_pduSession(gNB_RRC_UE_t *ue, int id, bool create)
{
- NR_DRB_ToAddMod_t *DRB_config = NULL;
- NR_SDAP_Config_t *SDAP_config = NULL;
+ int j;
+ for (j = 0; j < ue->nb_of_pdusessions; j++)
+ if (id == ue->pduSession[j].param.pdusession_id)
+ break;
+ if (j == ue->nb_of_pdusessions && create)
+ ue->nb_of_pdusessions++;
+ else
+ return NULL;
+ AssertFatal(ue->nb_of_pdusessions < NGAP_MAX_PDU_SESSION, "");
+ return ue->pduSession + j;
+}
- DRB_config = CALLOC(1, sizeof(*DRB_config));
+NR_DRB_ToAddMod_t *generateDRB(gNB_RRC_UE_t *ue, uint8_t drb_id, rrc_pdu_session_param_t *pduSession, bool enable_sdap, int do_drb_integrity, int do_drb_ciphering)
+{
+ NR_DRB_ToAddMod_t *DRB_config = CALLOC(1, sizeof(*DRB_config));
DRB_config->drb_Identity = drb_id;
- DRB_config->cnAssociation = CALLOC(1, sizeof(*DRB_config->cnAssociation));
- DRB_config->cnAssociation->present = NR_DRB_ToAddMod__cnAssociation_PR_sdap_Config;
-
+ asn1cCalloc(DRB_config->cnAssociation, association);
+ association->present = NR_DRB_ToAddMod__cnAssociation_PR_sdap_Config;
+
/* SDAP Configuration */
- SDAP_config = CALLOC(1, sizeof(NR_SDAP_Config_t));
- SDAP_config->mappedQoS_FlowsToAdd = calloc(1, sizeof(struct NR_SDAP_Config__mappedQoS_FlowsToAdd));
+ NR_SDAP_Config_t *SDAP_config = CALLOC(1, sizeof(NR_SDAP_Config_t));
+ asn1cCalloc(SDAP_config->mappedQoS_FlowsToAdd, sdapFlows);
SDAP_config->pdu_Session = pduSession->param.pdusession_id;
@@ -50,53 +61,36 @@ NR_DRB_ToAddMod_t *generateDRB(gNB_RRC_UE_t *ue, uint8_t drb_id, pdu_session_par
for (int qos_flow_index = 0; qos_flow_index < pduSession->param.nb_qos; qos_flow_index++)
{
- NR_QFI_t *qfi = calloc(1, sizeof(NR_QFI_t));
+ asn1cSequenceAdd(sdapFlows->list, NR_QFI_t, qfi);
*qfi = pduSession->param.qos[qos_flow_index].qfi;
- asn1cSeqAdd(&SDAP_config->mappedQoS_FlowsToAdd->list, qfi);
-
if(pduSession->param.qos[qos_flow_index].fiveQI > 5)
pduSession->param.used_drbs[drb_id - 1] = DRB_ACTIVE_NONGBR;
else
pduSession->param.used_drbs[drb_id - 1] = DRB_ACTIVE;
}
-
- SDAP_config->mappedQoS_FlowsToRelease = NULL;
- DRB_config->cnAssociation->choice.sdap_Config = SDAP_config;
-
+
+ association->choice.sdap_Config = SDAP_config;
+
/* PDCP Configuration */
- DRB_config->reestablishPDCP = NULL;
- DRB_config->recoverPDCP = NULL;
- DRB_config->pdcp_Config = calloc(1, sizeof(*DRB_config->pdcp_Config));
- DRB_config->pdcp_Config->drb = calloc(1,sizeof(*DRB_config->pdcp_Config->drb));
+ asn1cCalloc(DRB_config->pdcp_Config, pdcpConfig);
+ asn1cCalloc(pdcpConfig->drb, drb);
- DRB_config->pdcp_Config->drb->discardTimer = calloc(1, sizeof(*DRB_config->pdcp_Config->drb->discardTimer));
- *DRB_config->pdcp_Config->drb->discardTimer = NR_PDCP_Config__drb__discardTimer_infinity;
- DRB_config->pdcp_Config->drb->pdcp_SN_SizeUL = calloc(1, sizeof(*DRB_config->pdcp_Config->drb->pdcp_SN_SizeUL));
- *DRB_config->pdcp_Config->drb->pdcp_SN_SizeUL = NR_PDCP_Config__drb__pdcp_SN_SizeUL_len18bits;
- DRB_config->pdcp_Config->drb->pdcp_SN_SizeDL = calloc(1, sizeof(*DRB_config->pdcp_Config->drb->pdcp_SN_SizeDL));
- *DRB_config->pdcp_Config->drb->pdcp_SN_SizeDL = NR_PDCP_Config__drb__pdcp_SN_SizeDL_len18bits;
+ asn1cCallocOne(drb->discardTimer, NR_PDCP_Config__drb__discardTimer_infinity);
- DRB_config->pdcp_Config->drb->headerCompression.present = NR_PDCP_Config__drb__headerCompression_PR_notUsed;
- DRB_config->pdcp_Config->drb->headerCompression.choice.notUsed = 0;
-
- DRB_config->pdcp_Config->drb->integrityProtection = NULL;
- DRB_config->pdcp_Config->drb->statusReportRequired = NULL;
- DRB_config->pdcp_Config->drb->outOfOrderDelivery = NULL;
- DRB_config->pdcp_Config->moreThanOneRLC = NULL;
-
- DRB_config->pdcp_Config->t_Reordering = calloc(1, sizeof(*DRB_config->pdcp_Config->t_Reordering));
- *DRB_config->pdcp_Config->t_Reordering = NR_PDCP_Config__t_Reordering_ms100;
- DRB_config->pdcp_Config->ext1 = NULL;
+ asn1cCallocOne(drb->pdcp_SN_SizeUL, NR_PDCP_Config__drb__pdcp_SN_SizeUL_len18bits);
+ asn1cCallocOne(drb->pdcp_SN_SizeDL, NR_PDCP_Config__drb__pdcp_SN_SizeDL_len18bits);
+
+ drb->headerCompression.present = NR_PDCP_Config__drb__headerCompression_PR_notUsed;
+ drb->headerCompression.choice.notUsed = 0;
+
+ asn1cCallocOne(pdcpConfig->t_Reordering, NR_PDCP_Config__t_Reordering_ms100);
if (do_drb_integrity) {
- DRB_config->pdcp_Config->drb->integrityProtection = calloc(1, sizeof(*DRB_config->pdcp_Config->drb->integrityProtection));
- *DRB_config->pdcp_Config->drb->integrityProtection = NR_PDCP_Config__drb__integrityProtection_enabled;
+ asn1cCallocOne(drb->integrityProtection, NR_PDCP_Config__drb__integrityProtection_enabled);
}
-
if (!do_drb_ciphering) {
- DRB_config->pdcp_Config->ext1 = calloc(1, sizeof(*DRB_config->pdcp_Config->ext1));
- DRB_config->pdcp_Config->ext1->cipheringDisabled = calloc(1, sizeof(*DRB_config->pdcp_Config->ext1->cipheringDisabled));
- *DRB_config->pdcp_Config->ext1->cipheringDisabled = NR_PDCP_Config__ext1__cipheringDisabled_true;
+ asn1cCalloc(pdcpConfig->ext1, ext1);
+ asn1cCallocOne(ext1->cipheringDisabled, NR_PDCP_Config__ext1__cipheringDisabled_true);
}
ue->DRB_active[drb_id-1] = DRB_ACTIVE;
@@ -104,7 +98,7 @@ NR_DRB_ToAddMod_t *generateDRB(gNB_RRC_UE_t *ue, uint8_t drb_id, pdu_session_par
return DRB_config;
}
-uint8_t next_available_drb(gNB_RRC_UE_t *ue, pdu_session_param_t *pdusession, bool is_gbr)
+uint8_t next_available_drb(gNB_RRC_UE_t *ue, rrc_pdu_session_param_t *pdusession, bool is_gbr)
{
uint8_t drb_id;
diff --git a/openair2/RRC/NR/rrc_gNB_radio_bearers.h b/openair2/RRC/NR/rrc_gNB_radio_bearers.h
index 6cd6443d4f..62065c1d87 100644
--- a/openair2/RRC/NR/rrc_gNB_radio_bearers.h
+++ b/openair2/RRC/NR/rrc_gNB_radio_bearers.h
@@ -35,10 +35,10 @@
#define GBR_FLOW (1)
#define NONGBR_FLOW (0)
-NR_DRB_ToAddMod_t *generateDRB(gNB_RRC_UE_t *rrc_ue, uint8_t drb_id, pdu_session_param_t *pduSession, bool enable_sdap, int do_drb_integrity, int do_drb_ciphering);
-
-uint8_t next_available_drb(gNB_RRC_UE_t *ue, pdu_session_param_t *pdusession, bool is_gbr);
-
+NR_DRB_ToAddMod_t *generateDRB(gNB_RRC_UE_t *rrc_ue, uint8_t drb_id, rrc_pdu_session_param_t *pduSession, bool enable_sdap, int do_drb_integrity, int do_drb_ciphering);
+uint8_t next_available_drb(gNB_RRC_UE_t *ue, rrc_pdu_session_param_t *pdusession, bool is_gbr);
bool drb_is_active(gNB_RRC_UE_t *ue, uint8_t drb_id);
+rrc_pdu_session_param_t *find_pduSession(gNB_RRC_UE_t *ue, int id, bool create);
+
#endif
diff --git a/openair2/RRC/NR/rrc_gNB_reconfig.c b/openair2/RRC/NR/rrc_gNB_reconfig.c
index c05276ca82..76eca8e71e 100644
--- a/openair2/RRC/NR/rrc_gNB_reconfig.c
+++ b/openair2/RRC/NR/rrc_gNB_reconfig.c
@@ -237,7 +237,7 @@ void fill_default_secondaryCellGroup(NR_ServingCellConfigCommon_t *servingcellco
if (servingcellconfigdedicated->uplinkConfig->uplinkBWP_ToAddModList) {
pusch_Config = servingcellconfigdedicated->uplinkConfig->uplinkBWP_ToAddModList->list.array[0]->bwp_Dedicated->pusch_Config->choice.setup;
}
- initialUplinkBWP->pusch_Config = config_pusch(pusch_Config, servingcellconfigcommon);
+ initialUplinkBWP->pusch_Config = config_pusch(pusch_Config);
long maxMIMO_Layers = servingcellconfigdedicated->uplinkConfig &&
servingcellconfigdedicated->uplinkConfig->pusch_ServingCellConfig &&
diff --git a/openair2/RRC/NR_UE/rrc_UE.c b/openair2/RRC/NR_UE/rrc_UE.c
index 20beb7250d..859d272715 100644
--- a/openair2/RRC/NR_UE/rrc_UE.c
+++ b/openair2/RRC/NR_UE/rrc_UE.c
@@ -763,22 +763,22 @@ void nr_dump_sib3( NR_SIB3_t *sib3 ) {
}
//intraFreqBlackCellList
- if( sib3->intraFreqBlackCellList){
- LOG_I( RRC, "intraFreqBlackCellList : %p\n",
- sib3->intraFreqBlackCellList );
- const int n = sib3->intraFreqBlackCellList->list.count;
+ if( sib3->intraFreqExcludedCellList){
+ LOG_I( RRC, "intraFreqExcludedCellList : %p\n",
+ sib3->intraFreqExcludedCellList );
+ const int n = sib3->intraFreqExcludedCellList->list.count;
for (int i = 0; i < n; ++i){
- LOG_I( RRC, "intraFreqBlackCellList->start : %ld\n",
- sib3->intraFreqBlackCellList->list.array[i]->start );
+ LOG_I( RRC, "intraFreqExcludedCellList->start : %ld\n",
+ sib3->intraFreqExcludedCellList->list.array[i]->start );
- if( sib3->intraFreqBlackCellList->list.array[i]->range)
- LOG_I( RRC, "intraFreqBlackCellList->range : %ld\n",
- *sib3->intraFreqBlackCellList->list.array[i]->range );
+ if( sib3->intraFreqExcludedCellList->list.array[i]->range)
+ LOG_I( RRC, "intraFreqExcludedCellList->range : %ld\n",
+ *sib3->intraFreqExcludedCellList->list.array[i]->range );
else
- LOG_I( RRC, "intraFreqBlackCellList->range : not defined\n" );
+ LOG_I( RRC, "intraFreqExcludedCellList->range : not defined\n" );
}
} else{
- LOG_I( RRC, "intraFreqBlackCellList : not defined\n" );
+ LOG_I( RRC, "intraFreqExcludedCellList : not defined\n" );
}
//lateNonCriticalExtension
diff --git a/openair2/SDAP/nr_sdap/nr_sdap_entity.c b/openair2/SDAP/nr_sdap/nr_sdap_entity.c
index e9a22eb578..280663e2b0 100644
--- a/openair2/SDAP/nr_sdap/nr_sdap_entity.c
+++ b/openair2/SDAP/nr_sdap/nr_sdap_entity.c
@@ -435,14 +435,9 @@ nr_sdap_entity_t *new_nr_sdap_entity(int is_gnb, bool has_sdap_rx, bool has_sdap
if(is_defaultDRB) {
sdap_entity->default_drb = drb_identity;
LOG_I(SDAP, "Default DRB for the created SDAP entity: %ld \n", sdap_entity->default_drb);
-
- if(mappedQFIs2AddCount) {
- LOG_D(SDAP, "RRC updating mapping rules\n");
- for (int i = 0; i < mappedQFIs2AddCount; i++)
- {
- sdap_entity->qfi2drb_map_update(sdap_entity, mapped_qfi_2_add[i], sdap_entity->default_drb, has_sdap_rx, has_sdap_tx);
- }
- }
+ LOG_D(SDAP, "RRC updating mapping rules: %d\n", mappedQFIs2AddCount);
+ for (int i = 0; i < mappedQFIs2AddCount; i++)
+ sdap_entity->qfi2drb_map_update(sdap_entity, mapped_qfi_2_add[i], sdap_entity->default_drb, has_sdap_rx, has_sdap_tx);
}
sdap_entity->next_entity = sdap_info.sdap_entity_llist;
diff --git a/openair2/X2AP/x2ap_eNB_itti_messaging.c b/openair2/X2AP/x2ap_eNB_itti_messaging.c
index 26e26ba411..66be3520e2 100644
--- a/openair2/X2AP/x2ap_eNB_itti_messaging.c
+++ b/openair2/X2AP/x2ap_eNB_itti_messaging.c
@@ -43,7 +43,7 @@ void x2ap_eNB_itti_send_sctp_data_req(instance_t instance, int32_t assoc_id, uin
sctp_data_req->assoc_id = assoc_id;
sctp_data_req->buffer = buffer;
sctp_data_req->buffer_length = buffer_length;
- sctp_data_req->stream = stream;
+ sctp_data_req->stream = stream;
itti_send_msg_to_task(TASK_SCTP, instance, message_p);
}
diff --git a/openair3/NAS/NR_UE/nr_nas_msg_sim.c b/openair3/NAS/NR_UE/nr_nas_msg_sim.c
index 9ab93355b4..9d3eb6db76 100644
--- a/openair3/NAS/NR_UE/nr_nas_msg_sim.c
+++ b/openair3/NAS/NR_UE/nr_nas_msg_sim.c
@@ -859,6 +859,7 @@ void *nas_nrue_task(void *args_p)
instance = msg_p->ittiMsgHeader.originInstance;
Mod_id = instance ;
uicc_t *uicc=checkUicc(Mod_id);
+ LOG_I(NAS, "[UE %d] Received %s\n", Mod_id, ITTI_MSG_NAME(msg_p));
if (instance == INSTANCE_DEFAULT) {
printf("%s:%d: FATAL: instance is INSTANCE_DEFAULT, should not happen.\n",
@@ -867,84 +868,83 @@ void *nas_nrue_task(void *args_p)
}
switch (ITTI_MSG_ID(msg_p)) {
- case INITIALIZE_MESSAGE:
- LOG_I(NAS, "[UE %d] Received %s\n", Mod_id, ITTI_MSG_NAME (msg_p));
+ case INITIALIZE_MESSAGE:
- break;
+ break;
- case TERMINATE_MESSAGE:
- itti_exit_task ();
- break;
+ case TERMINATE_MESSAGE:
+ itti_exit_task();
+ break;
- case MESSAGE_TEST:
- LOG_I(NAS, "[UE %d] Received %s\n", Mod_id, ITTI_MSG_NAME (msg_p));
- break;
+ case MESSAGE_TEST:
+ break;
- case NAS_CELL_SELECTION_CNF:
- LOG_I(NAS, "[UE %d] Received %s: errCode %u, cellID %u, tac %u\n", Mod_id, ITTI_MSG_NAME (msg_p),
- NAS_CELL_SELECTION_CNF (msg_p).errCode, NAS_CELL_SELECTION_CNF (msg_p).cellID, NAS_CELL_SELECTION_CNF (msg_p).tac);
- // as_stmsi_t s_tmsi={0, 0};
- // as_nas_info_t nas_info;
- // plmn_t plmnID={0, 0, 0, 0};
- // generateRegistrationRequest(&nas_info);
- // nr_nas_itti_nas_establish_req(0, AS_TYPE_ORIGINATING_SIGNAL, s_tmsi, plmnID, nas_info.data, nas_info.length, 0);
- break;
+ case NAS_CELL_SELECTION_CNF:
+ LOG_I(NAS,
+ "[UE %d] Received %s: errCode %u, cellID %u, tac %u\n",
+ Mod_id,
+ ITTI_MSG_NAME(msg_p),
+ NAS_CELL_SELECTION_CNF(msg_p).errCode,
+ NAS_CELL_SELECTION_CNF(msg_p).cellID,
+ NAS_CELL_SELECTION_CNF(msg_p).tac);
+ // as_stmsi_t s_tmsi={0, 0};
+ // as_nas_info_t nas_info;
+ // plmn_t plmnID={0, 0, 0, 0};
+ // generateRegistrationRequest(&nas_info);
+ // nr_nas_itti_nas_establish_req(0, AS_TYPE_ORIGINATING_SIGNAL, s_tmsi, plmnID, nas_info.data, nas_info.length, 0);
+ break;
- case NAS_CELL_SELECTION_IND:
- LOG_I(NAS, "[UE %d] Received %s: cellID %u, tac %u\n", Mod_id, ITTI_MSG_NAME (msg_p),
- NAS_CELL_SELECTION_IND (msg_p).cellID, NAS_CELL_SELECTION_IND (msg_p).tac);
+ case NAS_CELL_SELECTION_IND:
+ LOG_I(NAS, "[UE %d] Received %s: cellID %u, tac %u\n", Mod_id, ITTI_MSG_NAME(msg_p), NAS_CELL_SELECTION_IND(msg_p).cellID, NAS_CELL_SELECTION_IND(msg_p).tac);
- /* TODO not processed by NAS currently */
- break;
+ /* TODO not processed by NAS currently */
+ break;
- case NAS_PAGING_IND:
- LOG_I(NAS, "[UE %d] Received %s: cause %u\n", Mod_id, ITTI_MSG_NAME (msg_p),
- NAS_PAGING_IND (msg_p).cause);
+ case NAS_PAGING_IND:
+ LOG_I(NAS, "[UE %d] Received %s: cause %u\n", Mod_id, ITTI_MSG_NAME(msg_p), NAS_PAGING_IND(msg_p).cause);
- /* TODO not processed by NAS currently */
- break;
+ /* TODO not processed by NAS currently */
+ break;
- case NAS_CONN_ESTABLI_CNF:
- {
- LOG_I(NAS, "[UE %d] Received %s: errCode %u, length %u\n", Mod_id, ITTI_MSG_NAME (msg_p),
- NAS_CONN_ESTABLI_CNF (msg_p).errCode, NAS_CONN_ESTABLI_CNF (msg_p).nasMsg.length);
+ case NAS_CONN_ESTABLI_CNF: {
+ LOG_I(NAS, "[UE %d] Received %s: errCode %u, length %u\n", Mod_id, ITTI_MSG_NAME(msg_p), NAS_CONN_ESTABLI_CNF(msg_p).errCode, NAS_CONN_ESTABLI_CNF(msg_p).nasMsg.length);
- pdu_buffer = NAS_CONN_ESTABLI_CNF (msg_p).nasMsg.data;
- msg_type = get_msg_type(pdu_buffer, NAS_CONN_ESTABLI_CNF (msg_p).nasMsg.length);
+ pdu_buffer = NAS_CONN_ESTABLI_CNF(msg_p).nasMsg.data;
+ msg_type = get_msg_type(pdu_buffer, NAS_CONN_ESTABLI_CNF(msg_p).nasMsg.length);
- if(msg_type == REGISTRATION_ACCEPT){
- LOG_I(NAS, "[UE] Received REGISTRATION ACCEPT message\n");
+ if (msg_type == REGISTRATION_ACCEPT) {
+ LOG_I(NAS, "[UE] Received REGISTRATION ACCEPT message\n");
- as_nas_info_t initialNasMsg;
- memset(&initialNasMsg, 0, sizeof(as_nas_info_t));
- generateRegistrationComplete(Mod_id,&initialNasMsg, NULL);
- if(initialNasMsg.length > 0){
- MessageDef *message_p;
- message_p = itti_alloc_new_message(TASK_NAS_NRUE, 0, NAS_UPLINK_DATA_REQ);
- NAS_UPLINK_DATA_REQ(message_p).UEid = Mod_id;
- NAS_UPLINK_DATA_REQ(message_p).nasMsg.data = (uint8_t *)initialNasMsg.data;
- NAS_UPLINK_DATA_REQ(message_p).nasMsg.length = initialNasMsg.length;
- itti_send_msg_to_task(TASK_RRC_NRUE, instance, message_p);
- LOG_I(NAS, "Send NAS_UPLINK_DATA_REQ message(RegistrationComplete)\n");
+ as_nas_info_t initialNasMsg;
+ memset(&initialNasMsg, 0, sizeof(as_nas_info_t));
+ generateRegistrationComplete(Mod_id, &initialNasMsg, NULL);
+ if (initialNasMsg.length > 0) {
+ MessageDef *message_p;
+ message_p = itti_alloc_new_message(TASK_NAS_NRUE, 0, NAS_UPLINK_DATA_REQ);
+ NAS_UPLINK_DATA_REQ(message_p).UEid = Mod_id;
+ NAS_UPLINK_DATA_REQ(message_p).nasMsg.data = (uint8_t *)initialNasMsg.data;
+ NAS_UPLINK_DATA_REQ(message_p).nasMsg.length = initialNasMsg.length;
+ itti_send_msg_to_task(TASK_RRC_NRUE, instance, message_p);
+ LOG_I(NAS, "Send NAS_UPLINK_DATA_REQ message(RegistrationComplete)\n");
+ }
+
+ as_nas_info_t pduEstablishMsg;
+ memset(&pduEstablishMsg, 0, sizeof(as_nas_info_t));
+ generatePduSessionEstablishRequest(Mod_id, uicc, &pduEstablishMsg);
+ if (pduEstablishMsg.length > 0) {
+ MessageDef *message_p;
+ message_p = itti_alloc_new_message(TASK_NAS_NRUE, 0, NAS_UPLINK_DATA_REQ);
+ NAS_UPLINK_DATA_REQ(message_p).UEid = Mod_id;
+ NAS_UPLINK_DATA_REQ(message_p).nasMsg.data = (uint8_t *)pduEstablishMsg.data;
+ NAS_UPLINK_DATA_REQ(message_p).nasMsg.length = pduEstablishMsg.length;
+ itti_send_msg_to_task(TASK_RRC_NRUE, instance, message_p);
+ LOG_I(NAS, "Send NAS_UPLINK_DATA_REQ message(PduSessionEstablishRequest)\n");
+ }
+ } else if (msg_type == FGS_PDU_SESSION_ESTABLISHMENT_ACC) {
+ capture_pdu_session_establishment_accept_msg(pdu_buffer, NAS_CONN_ESTABLI_CNF(msg_p).nasMsg.length);
}
- as_nas_info_t pduEstablishMsg;
- memset(&pduEstablishMsg, 0, sizeof(as_nas_info_t));
- generatePduSessionEstablishRequest(Mod_id, uicc, &pduEstablishMsg);
- if(pduEstablishMsg.length > 0){
- MessageDef *message_p;
- message_p = itti_alloc_new_message(TASK_NAS_NRUE, 0, NAS_UPLINK_DATA_REQ);
- NAS_UPLINK_DATA_REQ(message_p).UEid = Mod_id;
- NAS_UPLINK_DATA_REQ(message_p).nasMsg.data = (uint8_t *)pduEstablishMsg.data;
- NAS_UPLINK_DATA_REQ(message_p).nasMsg.length = pduEstablishMsg.length;
- itti_send_msg_to_task(TASK_RRC_NRUE, instance, message_p);
- LOG_I(NAS, "Send NAS_UPLINK_DATA_REQ message(PduSessionEstablishRequest)\n");
- }
- } else if(msg_type == FGS_PDU_SESSION_ESTABLISHMENT_ACC){
- capture_pdu_session_establishment_accept_msg(pdu_buffer, NAS_CONN_ESTABLI_CNF (msg_p).nasMsg.length);
- }
-
- break;
+ break;
}
case NAS_CONN_RELEASE_IND:
diff --git a/openair3/NGAP/ngap_common.h b/openair3/NGAP/ngap_common.h
index 9879ce7313..8de2542766 100644
--- a/openair3/NGAP/ngap_common.h
+++ b/openair3/NGAP/ngap_common.h
@@ -113,27 +113,27 @@ extern int asn1_xer_print;
# define NGAP_DEBUG(x, args...) do { fprintf(stdout, "[NGAP][D]"x, ##args); } while(0)
#endif
+#define NGAP_FIND_PROTOCOLIE_BY_ID(IE_TYPE, ie, container, IE_ID, mandatory) \
+ do { \
+ IE_TYPE **ptr; \
+ ie = NULL; \
+ for (ptr = container->protocolIEs.list.array; ptr < &container->protocolIEs.list.array[container->protocolIEs.list.count]; ptr++) { \
+ if ((*ptr)->id == IE_ID) { \
+ ie = *ptr; \
+ break; \
+ } \
+ } \
+ if (ie == NULL) { \
+ if (mandatory) { \
+ AssertFatal(NGAP, "NGAP_FIND_PROTOCOLIE_BY_ID ie is NULL (searching for ie: %ld)\n", IE_ID); \
+ } else { \
+ NGAP_INFO("NGAP_FIND_PROTOCOLIE_BY_ID ie is NULL (searching for ie: %ld)\n", IE_ID); \
+ } \
+ } \
+ } while (0); \
+ if (mandatory && !ie) \
+ return -1
-#define NGAP_FIND_PROTOCOLIE_BY_ID(IE_TYPE, ie, container, IE_ID, mandatory) \
- do {\
- IE_TYPE **ptr; \
- ie = NULL; \
- for (ptr = container->protocolIEs.list.array; \
- ptr < &container->protocolIEs.list.array[container->protocolIEs.list.count]; \
- ptr++) { \
- if((*ptr)->id == IE_ID) { \
- ie = *ptr; \
- break; \
- } \
- } \
- if (ie == NULL ) { \
- if (mandatory) {\
- NGAP_ERROR("NGAP_FIND_PROTOCOLIE_BY_ID: %s %d: ie is NULL (searching for ie: %ld)\n",__FILE__,__LINE__, IE_ID);\
- abort();\
- }\
- else NGAP_INFO("NGAP_FIND_PROTOCOLIE_BY_ID: %s %d: ie is NULL (searching for ie: %ld)\n",__FILE__,__LINE__, IE_ID);\
- } \
- } while(0)
/** \brief Function callback prototype.
**/
typedef int (*ngap_message_decoded_callback)(
diff --git a/openair3/NGAP/ngap_gNB.c b/openair3/NGAP/ngap_gNB.c
index b4a3aa2f14..f877e9d4ba 100644
--- a/openair3/NGAP/ngap_gNB.c
+++ b/openair3/NGAP/ngap_gNB.c
@@ -162,7 +162,6 @@ void ngap_gNB_handle_register_gNB(instance_t instance, ngap_register_gnb_req_t *
} else {
new_instance = calloc(1, sizeof(ngap_gNB_instance_t));
DevAssert(new_instance != NULL);
- RB_INIT(&new_instance->ngap_ue_head);
RB_INIT(&new_instance->ngap_amf_head);
/* Copy usefull parameters */
new_instance->instance = instance;
@@ -276,127 +275,88 @@ void *ngap_gNB_process_itti_msg(void *notUsed) {
MessageDef *received_msg = NULL;
int result;
itti_receive_msg(TASK_NGAP, &received_msg);
+ if (received_msg) {
+ instance_t instance = ITTI_MSG_DESTINATION_INSTANCE(received_msg);
+ LOG_D(RRC, "Received message %s\n", ITTI_MSG_NAME(received_msg));
+ switch (ITTI_MSG_ID(received_msg)) {
+ case TERMINATE_MESSAGE:
+ NGAP_WARN(" *** Exiting NGAP thread\n");
+ itti_exit_task();
+ break;
- switch (ITTI_MSG_ID(received_msg)) {
- case TERMINATE_MESSAGE:
- NGAP_WARN(" *** Exiting NGAP thread\n");
- itti_exit_task();
- break;
+ case NGAP_REGISTER_GNB_REQ:
+ /* Register a new gNB.
+ * in Virtual mode gNBs will be distinguished using the mod_id/
+ * Each gNB has to send an NGAP_REGISTER_GNB message with its
+ * own parameters.
+ */
+ ngap_gNB_handle_register_gNB(instance, &NGAP_REGISTER_GNB_REQ(received_msg));
+ break;
- case NGAP_REGISTER_GNB_REQ: {
- /* Register a new gNB.
- * in Virtual mode gNBs will be distinguished using the mod_id/
- * Each gNB has to send an NGAP_REGISTER_GNB message with its
- * own parameters.
- */
- ngap_gNB_handle_register_gNB(ITTI_MSG_DESTINATION_INSTANCE(received_msg),
- &NGAP_REGISTER_GNB_REQ(received_msg));
+ case SCTP_NEW_ASSOCIATION_RESP:
+ ngap_gNB_handle_sctp_association_resp(instance, &received_msg->ittiMsg.sctp_new_association_resp);
+ break;
+
+ case SCTP_DATA_IND:
+ ngap_gNB_handle_sctp_data_ind(&received_msg->ittiMsg.sctp_data_ind);
+ break;
+
+ case NGAP_NAS_FIRST_REQ:
+ ngap_gNB_handle_nas_first_req(instance, &NGAP_NAS_FIRST_REQ(received_msg));
+ break;
+
+ case NGAP_UPLINK_NAS:
+ ngap_gNB_nas_uplink(instance, &NGAP_UPLINK_NAS(received_msg));
+ break;
+
+ case NGAP_UE_CAPABILITIES_IND:
+ ngap_gNB_ue_capabilities(instance, &NGAP_UE_CAPABILITIES_IND(received_msg));
+ break;
+
+ case NGAP_INITIAL_CONTEXT_SETUP_RESP:
+ ngap_gNB_initial_ctxt_resp(instance, &NGAP_INITIAL_CONTEXT_SETUP_RESP(received_msg));
+ break;
+
+ case NGAP_PDUSESSION_SETUP_RESP:
+ ngap_gNB_pdusession_setup_resp(instance, &NGAP_PDUSESSION_SETUP_RESP(received_msg));
+ break;
+
+ case NGAP_PDUSESSION_MODIFY_RESP:
+ ngap_gNB_pdusession_modify_resp(instance, &NGAP_PDUSESSION_MODIFY_RESP(received_msg));
+ break;
+
+ case NGAP_NAS_NON_DELIVERY_IND:
+ ngap_gNB_nas_non_delivery_ind(instance, &NGAP_NAS_NON_DELIVERY_IND(received_msg));
+ break;
+
+ case NGAP_PATH_SWITCH_REQ:
+ ngap_gNB_path_switch_req(instance, &NGAP_PATH_SWITCH_REQ(received_msg));
+ break;
+
+ case NGAP_PDUSESSION_MODIFICATION_IND:
+ ngap_gNB_generate_PDUSESSION_Modification_Indication(instance, &NGAP_PDUSESSION_MODIFICATION_IND(received_msg));
+ break;
+
+ case NGAP_UE_CONTEXT_RELEASE_COMPLETE:
+ ngap_ue_context_release_complete(instance, &NGAP_UE_CONTEXT_RELEASE_COMPLETE(received_msg));
+ break;
+
+ case NGAP_UE_CONTEXT_RELEASE_REQ:
+ ngap_ue_context_release_req(instance, &NGAP_UE_CONTEXT_RELEASE_REQ(received_msg));
+ break;
+
+ case NGAP_PDUSESSION_RELEASE_RESPONSE:
+ ngap_gNB_pdusession_release_resp(instance, &NGAP_PDUSESSION_RELEASE_RESPONSE(received_msg));
+ break;
+
+ default:
+ NGAP_ERROR("Received unhandled message: %d:%s\n", ITTI_MSG_ID(received_msg), ITTI_MSG_NAME(received_msg));
+ break;
}
- break;
- case SCTP_NEW_ASSOCIATION_RESP: {
- ngap_gNB_handle_sctp_association_resp(ITTI_MSG_DESTINATION_INSTANCE(received_msg),
- &received_msg->ittiMsg.sctp_new_association_resp);
- }
- break;
-
- case SCTP_DATA_IND: {
- ngap_gNB_handle_sctp_data_ind(&received_msg->ittiMsg.sctp_data_ind);
- }
- break;
-
- case NGAP_NAS_FIRST_REQ: {
- ngap_gNB_handle_nas_first_req(ITTI_MSG_DESTINATION_INSTANCE(received_msg),
- &NGAP_NAS_FIRST_REQ(received_msg));
- }
- break;
-
- case NGAP_UPLINK_NAS: {
- ngap_gNB_nas_uplink(ITTI_MSG_DESTINATION_INSTANCE(received_msg),
- &NGAP_UPLINK_NAS(received_msg));
- }
- break;
-
- case NGAP_UE_CAPABILITIES_IND: {
- ngap_gNB_ue_capabilities(ITTI_MSG_DESTINATION_INSTANCE(received_msg),
- &NGAP_UE_CAPABILITIES_IND(received_msg));
- }
- break;
-
- case NGAP_INITIAL_CONTEXT_SETUP_RESP: {
- ngap_gNB_initial_ctxt_resp(ITTI_MSG_DESTINATION_INSTANCE(received_msg),
- &NGAP_INITIAL_CONTEXT_SETUP_RESP(received_msg));
- }
- break;
-
- case NGAP_PDUSESSION_SETUP_RESP: {
- ngap_gNB_pdusession_setup_resp(ITTI_MSG_DESTINATION_INSTANCE(received_msg),
- &NGAP_PDUSESSION_SETUP_RESP(received_msg));
- }
- break;
-
- case NGAP_PDUSESSION_MODIFY_RESP: {
- ngap_gNB_pdusession_modify_resp(ITTI_MSG_DESTINATION_INSTANCE(received_msg),
- &NGAP_PDUSESSION_MODIFY_RESP(received_msg));
- }
- break;
-
- case NGAP_NAS_NON_DELIVERY_IND: {
- ngap_gNB_nas_non_delivery_ind(ITTI_MSG_DESTINATION_INSTANCE(received_msg),
- &NGAP_NAS_NON_DELIVERY_IND(received_msg));
- }
- break;
-
- case NGAP_PATH_SWITCH_REQ: {
- ngap_gNB_path_switch_req(ITTI_MSG_DESTINATION_INSTANCE(received_msg),
- &NGAP_PATH_SWITCH_REQ(received_msg));
- }
- break;
-
- case NGAP_PDUSESSION_MODIFICATION_IND: {
- ngap_gNB_generate_PDUSESSION_Modification_Indication(ITTI_MSG_DESTINATION_INSTANCE(received_msg),
- &NGAP_PDUSESSION_MODIFICATION_IND(received_msg));
- }
- break;
-
- case NGAP_UE_CONTEXT_RELEASE_COMPLETE: {
- ngap_ue_context_release_complete(ITTI_MSG_DESTINATION_INSTANCE(received_msg),
- &NGAP_UE_CONTEXT_RELEASE_COMPLETE(received_msg));
- }
- break;
-
- case NGAP_UE_CONTEXT_RELEASE_REQ: {
- ngap_gNB_instance_t *ngap_gNB_instance_p = NULL; // test
- struct ngap_gNB_ue_context_s *ue_context_p = NULL; // test
- ngap_ue_context_release_req(ITTI_MSG_DESTINATION_INSTANCE(received_msg),
- &NGAP_UE_CONTEXT_RELEASE_REQ(received_msg));
- ngap_gNB_instance_p = ngap_gNB_get_instance(ITTI_MSG_DESTINATION_INSTANCE(received_msg)); // test
- DevAssert(ngap_gNB_instance_p != NULL); // test
-
- if ((ue_context_p = ngap_gNB_get_ue_context(ngap_gNB_instance_p,
- NGAP_UE_CONTEXT_RELEASE_REQ(received_msg).gNB_ue_ngap_id)) == NULL) { // test
- /* The context for this gNB ue ngap id doesn't exist in the map of gNB UEs */
- NGAP_ERROR("Failed to find ue context associated with gNB ue ngap id: %u\n",
- NGAP_UE_CONTEXT_RELEASE_REQ(received_msg).gNB_ue_ngap_id); // test
- } // test
- }
- break;
-
- case NGAP_PDUSESSION_RELEASE_RESPONSE: {
- ngap_gNB_pdusession_release_resp(ITTI_MSG_DESTINATION_INSTANCE(received_msg),
- &NGAP_PDUSESSION_RELEASE_RESPONSE(received_msg));
- }
- break;
-
- default:
- NGAP_ERROR("Received unhandled message: %d:%s\n",
- ITTI_MSG_ID(received_msg), ITTI_MSG_NAME(received_msg));
- break;
+ result = itti_free(ITTI_MSG_ORIGIN_ID(received_msg), received_msg);
+ AssertFatal(result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result);
}
-
- result = itti_free (ITTI_MSG_ORIGIN_ID(received_msg), received_msg);
- AssertFatal (result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result);
- received_msg = NULL;
return NULL;
}
diff --git a/openair3/NGAP/ngap_gNB_context_management_procedures.c b/openair3/NGAP/ngap_gNB_context_management_procedures.c
index 6c1a8584a6..8d3c20d218 100644
--- a/openair3/NGAP/ngap_gNB_context_management_procedures.c
+++ b/openair3/NGAP/ngap_gNB_context_management_procedures.c
@@ -58,9 +58,7 @@ int ngap_ue_context_release_complete(instance_t instance,
ngap_gNB_instance_t *ngap_gNB_instance_p = NULL;
struct ngap_gNB_ue_context_s *ue_context_p = NULL;
- NGAP_NGAP_PDU_t pdu;
- NGAP_UEContextReleaseComplete_t *out;
- NGAP_UEContextReleaseComplete_IEs_t *ie;
+ NGAP_NGAP_PDU_t pdu = {0};
uint8_t *buffer;
uint32_t length;
@@ -70,44 +68,37 @@ int ngap_ue_context_release_complete(instance_t instance,
DevAssert(ue_release_complete_p != NULL);
DevAssert(ngap_gNB_instance_p != NULL);
- /*RB_FOREACH(ue_context_p, ngap_ue_map, &ngap_gNB_instance_p->ngap_ue_head) {
- NGAP_WARN("in ngap_ue_map: UE context gNB_ue_ngap_id %u amf_ue_ngap_id %u state %u\n",
- ue_context_p->gNB_ue_ngap_id, ue_context_p->amf_ue_ngap_id,
- ue_context_p->ue_state);
- }*/
- if ((ue_context_p = ngap_gNB_get_ue_context(ngap_gNB_instance_p,
- ue_release_complete_p->gNB_ue_ngap_id)) == NULL) {
+ if ((ue_context_p = ngap_get_ue_context(ue_release_complete_p->gNB_ue_ngap_id)) == NULL) {
/* The context for this gNB ue ngap id doesn't exist in the map of gNB UEs */
- NGAP_WARN("Failed to find ue context associated with gNB ue ngap id: %u\n",
- ue_release_complete_p->gNB_ue_ngap_id);
+ NGAP_ERROR("Failed to find ue context associated with gNB ue ngap id: %u\n", ue_release_complete_p->gNB_ue_ngap_id);
return -1;
}
/* Prepare the NGAP message to encode */
- memset(&pdu, 0, sizeof(pdu));
pdu.present = NGAP_NGAP_PDU_PR_successfulOutcome;
- pdu.choice.successfulOutcome = CALLOC(1, sizeof(struct NGAP_SuccessfulOutcome));
- pdu.choice.successfulOutcome->procedureCode = NGAP_ProcedureCode_id_UEContextRelease;
- pdu.choice.successfulOutcome->criticality = NGAP_Criticality_reject;
- pdu.choice.successfulOutcome->value.present = NGAP_SuccessfulOutcome__value_PR_UEContextReleaseComplete;
- out = &pdu.choice.successfulOutcome->value.choice.UEContextReleaseComplete;
+ asn1cCalloc(pdu.choice.successfulOutcome, head);
+ head->procedureCode = NGAP_ProcedureCode_id_UEContextRelease;
+ head->criticality = NGAP_Criticality_reject;
+ head->value.present = NGAP_SuccessfulOutcome__value_PR_UEContextReleaseComplete;
+ NGAP_UEContextReleaseComplete_t *out = &head->value.choice.UEContextReleaseComplete;
/* mandatory */
- ie = (NGAP_UEContextReleaseComplete_IEs_t *)calloc(1, sizeof(NGAP_UEContextReleaseComplete_IEs_t));
- ie->id = NGAP_ProtocolIE_ID_id_AMF_UE_NGAP_ID;
- ie->criticality = NGAP_Criticality_ignore;
- ie->value.present = NGAP_UEContextReleaseComplete_IEs__value_PR_AMF_UE_NGAP_ID;
- asn_uint642INTEGER(&ie->value.choice.AMF_UE_NGAP_ID, ue_context_p->amf_ue_ngap_id);
- asn1cSeqAdd(&out->protocolIEs.list, ie);
+ {
+ asn1cSequenceAdd(out->protocolIEs.list, NGAP_UEContextReleaseComplete_IEs_t, ie);
+ ie->id = NGAP_ProtocolIE_ID_id_AMF_UE_NGAP_ID;
+ ie->criticality = NGAP_Criticality_ignore;
+ ie->value.present = NGAP_UEContextReleaseComplete_IEs__value_PR_AMF_UE_NGAP_ID;
+ asn_uint642INTEGER(&ie->value.choice.AMF_UE_NGAP_ID, ue_context_p->amf_ue_ngap_id);
+ }
/* mandatory */
- ie = (NGAP_UEContextReleaseComplete_IEs_t *)calloc(1, sizeof(NGAP_UEContextReleaseComplete_IEs_t));
- ie->id = NGAP_ProtocolIE_ID_id_RAN_UE_NGAP_ID;
- ie->criticality = NGAP_Criticality_ignore;
- ie->value.present = NGAP_UEContextReleaseComplete_IEs__value_PR_RAN_UE_NGAP_ID;
- ie->value.choice.RAN_UE_NGAP_ID = ue_release_complete_p->gNB_ue_ngap_id;
- asn1cSeqAdd(&out->protocolIEs.list, ie);
-
+ {
+ asn1cSequenceAdd(out->protocolIEs.list, NGAP_UEContextReleaseComplete_IEs_t, ie);
+ ie->id = NGAP_ProtocolIE_ID_id_RAN_UE_NGAP_ID;
+ ie->criticality = NGAP_Criticality_ignore;
+ ie->value.present = NGAP_UEContextReleaseComplete_IEs__value_PR_RAN_UE_NGAP_ID;
+ ie->value.choice.RAN_UE_NGAP_ID = ue_release_complete_p->gNB_ue_ngap_id;
+ }
if (ngap_gNB_encode_pdu(&pdu, &buffer, &length) < 0) {
/* Encode procedure has failed... */
@@ -123,35 +114,18 @@ int ngap_ue_context_release_complete(instance_t instance,
//LG ngap_gNB_itti_send_sctp_close_association(ngap_gNB_instance_p->instance,
// ue_context_p->amf_ref->assoc_id);
// release UE context
- struct ngap_gNB_ue_context_s *ue_context2_p = NULL;
-
- if ((ue_context2_p = RB_REMOVE(ngap_ue_map, &ngap_gNB_instance_p->ngap_ue_head, ue_context_p))
- != NULL) {
- NGAP_WARN("Removed UE context gNB_ue_ngap_id %u\n",
- ue_context2_p->gNB_ue_ngap_id);
- ngap_gNB_free_ue_context(ue_context2_p);
- } else {
- NGAP_WARN("Removing UE context gNB_ue_ngap_id %u: did not find context\n",
- ue_context_p->gNB_ue_ngap_id);
- }
- /*RB_FOREACH(ue_context_p, ngap_ue_map, &ngap_gNB_instance_p->ngap_ue_head) {
- NGAP_WARN("in ngap_ue_map: UE context gNB_ue_ngap_id %u amf_ue_ngap_id %u state %u\n",
- ue_context_p->gNB_ue_ngap_id, ue_context_p->amf_ue_ngap_id,
- ue_context_p->ue_state);
- }*/
-
+ ngap_gNB_ue_context_t *tmp = ngap_detach_ue_context(ue_release_complete_p->gNB_ue_ngap_id);
+ if (tmp)
+ free(tmp);
return 0;
}
-
int ngap_ue_context_release_req(instance_t instance,
ngap_ue_release_req_t *ue_release_req_p)
{
ngap_gNB_instance_t *ngap_gNB_instance_p = NULL;
struct ngap_gNB_ue_context_s *ue_context_p = NULL;
- NGAP_NGAP_PDU_t pdu;
- NGAP_UEContextReleaseRequest_t *out;
- NGAP_UEContextReleaseRequest_IEs_t *ie;
+ NGAP_NGAP_PDU_t pdu = {0};
uint8_t *buffer = NULL;
uint32_t length;
/* Retrieve the NGAP gNB instance associated with Mod_id */
@@ -160,8 +134,7 @@ int ngap_ue_context_release_req(instance_t instance,
DevAssert(ue_release_req_p != NULL);
DevAssert(ngap_gNB_instance_p != NULL);
- if ((ue_context_p = ngap_gNB_get_ue_context(ngap_gNB_instance_p,
- ue_release_req_p->gNB_ue_ngap_id)) == NULL) {
+ if ((ue_context_p = ngap_get_ue_context(ue_release_req_p->gNB_ue_ngap_id)) == NULL) {
/* The context for this gNB ue ngap id doesn't exist in the map of gNB UEs */
NGAP_WARN("Failed to find ue context associated with gNB ue ngap id: %u\n",
ue_release_req_p->gNB_ue_ngap_id);
@@ -169,33 +142,34 @@ int ngap_ue_context_release_req(instance_t instance,
}
/* Prepare the NGAP message to encode */
- memset(&pdu, 0, sizeof(pdu));
pdu.present = NGAP_NGAP_PDU_PR_initiatingMessage;
- pdu.choice.initiatingMessage = CALLOC(1, sizeof(struct NGAP_InitiatingMessage));
- pdu.choice.initiatingMessage->procedureCode = NGAP_ProcedureCode_id_UEContextReleaseRequest;
- pdu.choice.initiatingMessage->criticality = NGAP_Criticality_ignore;
- pdu.choice.initiatingMessage->value.present = NGAP_InitiatingMessage__value_PR_UEContextReleaseRequest;
- out = &pdu.choice.initiatingMessage->value.choice.UEContextReleaseRequest;
+ asn1cCalloc(pdu.choice.initiatingMessage, head);
+ head->procedureCode = NGAP_ProcedureCode_id_UEContextReleaseRequest;
+ head->criticality = NGAP_Criticality_ignore;
+ head->value.present = NGAP_InitiatingMessage__value_PR_UEContextReleaseRequest;
+ NGAP_UEContextReleaseRequest_t *out = &head->value.choice.UEContextReleaseRequest;
/* mandatory */
- ie = (NGAP_UEContextReleaseRequest_IEs_t *)calloc(1, sizeof(NGAP_UEContextReleaseRequest_IEs_t));
- ie->id = NGAP_ProtocolIE_ID_id_AMF_UE_NGAP_ID;
- ie->criticality = NGAP_Criticality_reject;
- ie->value.present = NGAP_UEContextReleaseRequest_IEs__value_PR_AMF_UE_NGAP_ID;
- asn_uint642INTEGER(&ie->value.choice.AMF_UE_NGAP_ID, ue_context_p->amf_ue_ngap_id);
- asn1cSeqAdd(&out->protocolIEs.list, ie);
+ {
+ asn1cSequenceAdd(out->protocolIEs.list, NGAP_UEContextReleaseRequest_IEs_t, ie);
+ ie->id = NGAP_ProtocolIE_ID_id_AMF_UE_NGAP_ID;
+ ie->criticality = NGAP_Criticality_reject;
+ ie->value.present = NGAP_UEContextReleaseRequest_IEs__value_PR_AMF_UE_NGAP_ID;
+ asn_uint642INTEGER(&ie->value.choice.AMF_UE_NGAP_ID, ue_context_p->amf_ue_ngap_id);
+ }
/* mandatory */
- ie = (NGAP_UEContextReleaseRequest_IEs_t *)calloc(1, sizeof(NGAP_UEContextReleaseRequest_IEs_t));
- ie->id = NGAP_ProtocolIE_ID_id_RAN_UE_NGAP_ID;
- ie->criticality = NGAP_Criticality_reject;
- ie->value.present = NGAP_UEContextReleaseRequest_IEs__value_PR_RAN_UE_NGAP_ID;
- ie->value.choice.RAN_UE_NGAP_ID = ue_release_req_p->gNB_ue_ngap_id;
- asn1cSeqAdd(&out->protocolIEs.list, ie);
+ {
+ asn1cSequenceAdd(out->protocolIEs.list, NGAP_UEContextReleaseRequest_IEs_t, ie);
+ ie->id = NGAP_ProtocolIE_ID_id_RAN_UE_NGAP_ID;
+ ie->criticality = NGAP_Criticality_reject;
+ ie->value.present = NGAP_UEContextReleaseRequest_IEs__value_PR_RAN_UE_NGAP_ID;
+ ie->value.choice.RAN_UE_NGAP_ID = ue_release_req_p->gNB_ue_ngap_id;
+ }
/* optional */
if (ue_release_req_p->nb_of_pdusessions > 0) {
- ie = (NGAP_UEContextReleaseRequest_IEs_t *)calloc(1, sizeof(NGAP_UEContextReleaseRequest_IEs_t));
+ asn1cSequenceAdd(out->protocolIEs.list, NGAP_UEContextReleaseRequest_IEs_t, ie);
ie->id = NGAP_ProtocolIE_ID_id_PDUSessionResourceListCxtRelReq;
ie->criticality = NGAP_Criticality_reject;
ie->value.present = NGAP_UEContextReleaseRequest_IEs__value_PR_PDUSessionResourceListCxtRelReq;
@@ -205,51 +179,19 @@ int ngap_ue_context_release_req(instance_t instance,
item->pDUSessionID = ue_release_req_p->pdusessions[i].pdusession_id;
asn1cSeqAdd(&ie->value.choice.PDUSessionResourceListCxtRelReq.list, item);
}
- asn1cSeqAdd(&out->protocolIEs.list, ie);
}
/* mandatory */
- ie = (NGAP_UEContextReleaseRequest_IEs_t *)calloc(1, sizeof(NGAP_UEContextReleaseRequest_IEs_t));
- ie->id = NGAP_ProtocolIE_ID_id_Cause;
- ie->criticality = NGAP_Criticality_ignore;
- ie->value.present = NGAP_UEContextReleaseRequest_IEs__value_PR_Cause;
-
- switch (ue_release_req_p->cause) {
- case NGAP_Cause_PR_radioNetwork:
- ie->value.choice.Cause.present = NGAP_Cause_PR_radioNetwork;
- ie->value.choice.Cause.choice.radioNetwork = ue_release_req_p->cause_value;
- break;
-
- case NGAP_Cause_PR_transport:
- ie->value.choice.Cause.present = NGAP_Cause_PR_transport;
- ie->value.choice.Cause.choice.transport = ue_release_req_p->cause_value;
- break;
-
- case NGAP_Cause_PR_nas:
- ie->value.choice.Cause.present = NGAP_Cause_PR_nas;
- ie->value.choice.Cause.choice.nas = ue_release_req_p->cause_value;
- break;
-
- case NGAP_Cause_PR_protocol:
- ie->value.choice.Cause.present = NGAP_Cause_PR_protocol;
- ie->value.choice.Cause.choice.protocol = ue_release_req_p->cause_value;
- break;
-
- case NGAP_Cause_PR_misc:
- ie->value.choice.Cause.present = NGAP_Cause_PR_misc;
- ie->value.choice.Cause.choice.misc = ue_release_req_p->cause_value;
- break;
-
- case NGAP_Cause_PR_NOTHING:
- default:
- ie->value.choice.Cause.present = NGAP_Cause_PR_NOTHING;
- break;
+ {
+ asn1cSequenceAdd(out->protocolIEs.list, NGAP_UEContextReleaseRequest_IEs_t, ie);
+ ie->id = NGAP_ProtocolIE_ID_id_Cause;
+ ie->criticality = NGAP_Criticality_ignore;
+ ie->value.present = NGAP_UEContextReleaseRequest_IEs__value_PR_Cause;
+ DevAssert(ue_release_req_p->cause <= NGAP_Cause_PR_choice_ExtensionS);
+ ie->value.choice.Cause.present = ue_release_req_p->cause;
+ ie->value.choice.Cause.choice.misc = ue_release_req_p->cause_value;
}
- asn1cSeqAdd(&out->protocolIEs.list, ie);
-
-
-
if (ngap_gNB_encode_pdu(&pdu, &buffer, &length) < 0) {
/* Encode procedure has failed... */
NGAP_ERROR("Failed to encode UE context release complete\n");
diff --git a/openair3/NGAP/ngap_gNB_decoder.c b/openair3/NGAP/ngap_gNB_decoder.c
index b551471a84..c752ace05d 100644
--- a/openair3/NGAP/ngap_gNB_decoder.c
+++ b/openair3/NGAP/ngap_gNB_decoder.c
@@ -156,13 +156,8 @@ int ngap_gNB_decode_pdu(NGAP_NGAP_PDU_t *pdu, const uint8_t *const buffer,
asn_dec_rval_t dec_ret;
DevAssert(pdu != NULL);
DevAssert(buffer != NULL);
- dec_ret = aper_decode(NULL,
- &asn_DEF_NGAP_NGAP_PDU,
- (void **)&pdu,
- buffer,
- length,
- 0,
- 0);
+ asn_codec_ctx_t st = {.max_stack_size = 100 * 1000}; // if we enable asn1c debug the stack size become large
+ dec_ret = aper_decode(&st, &asn_DEF_NGAP_NGAP_PDU, (void **)&pdu, buffer, length, 0, 0);
if (dec_ret.code != RC_OK) {
NGAP_ERROR("Failed to decode pdu\n");
diff --git a/openair3/NGAP/ngap_gNB_defs.h b/openair3/NGAP/ngap_gNB_defs.h
index f2bdd646ae..5591ecb061 100644
--- a/openair3/NGAP/ngap_gNB_defs.h
+++ b/openair3/NGAP/ngap_gNB_defs.h
@@ -236,11 +236,6 @@ typedef struct ngap_gNB_instance_s {
/* Tree of NGAP AMF associations ordered by association ID */
RB_HEAD(ngap_amf_map, ngap_gNB_amf_data_s) ngap_amf_head;
- /* TODO: add a map ordered by relative AMF capacity */
-
- /* Tree of UE ordered by gNB_ue_ngap_id's */
- RB_HEAD(ngap_ue_map, ngap_gNB_ue_context_s) ngap_ue_head;
-
/* For virtual mode, mod_id as defined in the rest of the L1/L2 stack */
instance_t instance;
diff --git a/openair3/NGAP/ngap_gNB_encoder.c b/openair3/NGAP/ngap_gNB_encoder.c
index c69de32467..e85ae4c8eb 100644
--- a/openair3/NGAP/ngap_gNB_encoder.c
+++ b/openair3/NGAP/ngap_gNB_encoder.c
@@ -38,23 +38,84 @@
#include "ngap_common.h"
#include "ngap_gNB_encoder.h"
-static inline int ngap_gNB_encode_initiating(NGAP_NGAP_PDU_t *pdu,
- uint8_t **buffer,
- uint32_t *len);
+static inline int ngap_gNB_encode_initiating(NGAP_NGAP_PDU_t *pdu, uint8_t **buffer, uint32_t *len)
+{
+ DevAssert(pdu != NULL);
-static inline int ngap_gNB_encode_successfull_outcome(NGAP_NGAP_PDU_t *pdu,
- uint8_t **buffer, uint32_t *len);
+ const NGAP_ProcedureCode_t tmp[] = {NGAP_ProcedureCode_id_NGSetup,
+ NGAP_ProcedureCode_id_UplinkNASTransport,
+ NGAP_ProcedureCode_id_UERadioCapabilityInfoIndication,
+ NGAP_ProcedureCode_id_InitialUEMessage,
+ NGAP_ProcedureCode_id_NASNonDeliveryIndication,
+ NGAP_ProcedureCode_id_UEContextReleaseRequest,
+ NGAP_ProcedureCode_id_PathSwitchRequest,
+ NGAP_ProcedureCode_id_PDUSessionResourceModifyIndication};
+ int i;
+ for (i = 0; i < sizeofArray(tmp); i++)
+ if (pdu->choice.initiatingMessage->procedureCode == tmp[i])
+ break;
+ if (i == sizeofArray(tmp)) {
+ NGAP_DEBUG("Unknown procedure ID (%d) for initiating message\n", (int)pdu->choice.initiatingMessage->procedureCode);
+ return -1;
+ }
-static inline int ngap_gNB_encode_unsuccessfull_outcome(NGAP_NGAP_PDU_t *pdu,
- uint8_t **buffer, uint32_t *len);
+ asn_encode_to_new_buffer_result_t res = asn_encode_to_new_buffer(NULL, ATS_ALIGNED_CANONICAL_PER, &asn_DEF_NGAP_NGAP_PDU, pdu);
+ AssertFatal(res.result.encoded > 0, "failed to encode NGAP msg\n");
+ *buffer = res.buffer;
+ *len = res.result.encoded;
+ return 0;
+}
-int ngap_gNB_encode_pdu(NGAP_NGAP_PDU_t *pdu, uint8_t **buffer, uint32_t *len) {
+static inline int ngap_gNB_encode_successfull_outcome(NGAP_NGAP_PDU_t *pdu, uint8_t **buffer, uint32_t *len)
+{
+ DevAssert(pdu != NULL);
+ const NGAP_ProcedureCode_t tmp[] = {NGAP_ProcedureCode_id_InitialContextSetup,
+ NGAP_ProcedureCode_id_UEContextRelease,
+ NGAP_ProcedureCode_id_PDUSessionResourceSetup,
+ NGAP_ProcedureCode_id_PDUSessionResourceModify,
+ NGAP_ProcedureCode_id_PDUSessionResourceRelease};
+ int i;
+ for (i = 0; i < sizeofArray(tmp); i++)
+ if (pdu->choice.successfulOutcome->procedureCode == tmp[i])
+ break;
+ if (i == sizeofArray(tmp)) {
+ NGAP_WARN("Unknown procedure ID (%ld) for successfull outcome message\n", pdu->choice.successfulOutcome->procedureCode);
+ return -1;
+ }
+
+ asn_encode_to_new_buffer_result_t res = asn_encode_to_new_buffer(NULL, ATS_ALIGNED_CANONICAL_PER, &asn_DEF_NGAP_NGAP_PDU, pdu);
+ AssertFatal(res.result.encoded > 0, "failed to encode NGAP msg\n");
+ *buffer = res.buffer;
+ *len = res.result.encoded;
+ return 0;
+}
+
+static inline int ngap_gNB_encode_unsuccessfull_outcome(NGAP_NGAP_PDU_t *pdu, uint8_t **buffer, uint32_t *len)
+{
+ DevAssert(pdu != NULL);
+
+ if (pdu->choice.unsuccessfulOutcome->procedureCode != NGAP_ProcedureCode_id_InitialContextSetup) {
+ NGAP_DEBUG("Unknown procedure ID (%d) for unsuccessfull outcome message\n", (int)pdu->choice.unsuccessfulOutcome->procedureCode);
+ return -1;
+ }
+
+ asn_encode_to_new_buffer_result_t res = asn_encode_to_new_buffer(NULL, ATS_ALIGNED_CANONICAL_PER, &asn_DEF_NGAP_NGAP_PDU, pdu);
+ AssertFatal(res.result.encoded > 0, "failed to encode NGAP msg\n");
+ *buffer = res.buffer;
+ *len = res.result.encoded;
+ return 0;
+}
+
+int ngap_gNB_encode_pdu(NGAP_NGAP_PDU_t *pdu, uint8_t **buffer, uint32_t *len)
+{
int ret = -1;
DevAssert(pdu != NULL);
DevAssert(buffer != NULL);
DevAssert(len != NULL);
-
- switch(pdu->present) {
+ if (asn1_xer_print) {
+ xer_fprint(stdout, &asn_DEF_NGAP_NGAP_PDU, (void *)pdu);
+ }
+ switch (pdu->present) {
case NGAP_NGAP_PDU_PR_initiatingMessage:
ret = ngap_gNB_encode_initiating(pdu, buffer, len);
break;
@@ -68,156 +129,9 @@ int ngap_gNB_encode_pdu(NGAP_NGAP_PDU_t *pdu, uint8_t **buffer, uint32_t *len) {
break;
default:
- NGAP_DEBUG("Unknown message outcome (%d) or not implemented",
- (int)pdu->present);
+ NGAP_DEBUG("Unknown message outcome (%d) or not implemented", (int)pdu->present);
return -1;
}
-
- //ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_NGAP_NGAP_PDU, pdu);
+ ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_NGAP_NGAP_PDU, pdu);
return ret;
}
-
-static inline
-int ngap_gNB_encode_initiating(NGAP_NGAP_PDU_t *pdu,
- uint8_t **buffer, uint32_t *len) {
- asn_encode_to_new_buffer_result_t res = { NULL, {0, NULL, NULL} };
- DevAssert(pdu != NULL);
-
- switch(pdu->choice.initiatingMessage->procedureCode) {
- case NGAP_ProcedureCode_id_NGSetup:
- res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_NGAP_NGAP_PDU, pdu);
- free(res.buffer);
- break;
-
- case NGAP_ProcedureCode_id_UplinkNASTransport:
- res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_NGAP_NGAP_PDU, pdu);
- free(res.buffer);
- break;
-
- case NGAP_ProcedureCode_id_UERadioCapabilityInfoIndication:
- res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_NGAP_NGAP_PDU, pdu);
- free(res.buffer);
- break;
-
- case NGAP_ProcedureCode_id_InitialUEMessage:
- res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_NGAP_NGAP_PDU, pdu);
- free(res.buffer);
- break;
-
- case NGAP_ProcedureCode_id_NASNonDeliveryIndication:
- res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_NGAP_NGAP_PDU, pdu);
- free(res.buffer);
- break;
-
- case NGAP_ProcedureCode_id_UEContextReleaseRequest:
- res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_NGAP_NGAP_PDU, pdu);
- free(res.buffer);
- break;
-
- case NGAP_ProcedureCode_id_PathSwitchRequest:
- res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_NGAP_NGAP_PDU, pdu);
- free(res.buffer);
- break;
-
- case NGAP_ProcedureCode_id_PDUSessionResourceModifyIndication:
- res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_NGAP_NGAP_PDU, pdu);
- free(res.buffer);
- break;
-
- default:
- NGAP_DEBUG("Unknown procedure ID (%d) for initiating message\n",
- (int)pdu->choice.initiatingMessage->procedureCode);
- return -1;
- }
-
- if (asn1_xer_print) {
- xer_fprint(stdout, &asn_DEF_NGAP_NGAP_PDU, (void *)pdu);
- }
-
- memset(&res, 0, sizeof(res));
- res = asn_encode_to_new_buffer(NULL, ATS_ALIGNED_CANONICAL_PER, &asn_DEF_NGAP_NGAP_PDU, pdu);
- *buffer = res.buffer;
- *len = res.result.encoded;
- return 0;
-}
-
-static inline
-int ngap_gNB_encode_successfull_outcome(NGAP_NGAP_PDU_t *pdu,
- uint8_t **buffer, uint32_t *len) {
- asn_encode_to_new_buffer_result_t res = { NULL, {0, NULL, NULL} };
- DevAssert(pdu != NULL);
-
- switch(pdu->choice.successfulOutcome->procedureCode) {
- case NGAP_ProcedureCode_id_InitialContextSetup:
- res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_NGAP_NGAP_PDU, pdu);
- free(res.buffer);
- break;
-
- case NGAP_ProcedureCode_id_UEContextRelease:
- res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_NGAP_NGAP_PDU, pdu);
- free(res.buffer);
- break;
-
- case NGAP_ProcedureCode_id_PDUSessionResourceSetup:
- res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_NGAP_NGAP_PDU, pdu);
- free(res.buffer);
- NGAP_INFO("PDUSESSIONSetup successful message\n");
- break;
-
- case NGAP_ProcedureCode_id_PDUSessionResourceModify:
- res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_NGAP_NGAP_PDU, pdu);
- free(res.buffer);
- NGAP_INFO("PDUSESSIONModify successful message\n");
- break;
-
- case NGAP_ProcedureCode_id_PDUSessionResourceRelease:
- res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_NGAP_NGAP_PDU, pdu);
- free(res.buffer);
- NGAP_INFO("PDUSESSION Release successful message\n");
- break;
-
- default:
- NGAP_WARN("Unknown procedure ID (%d) for successfull outcome message\n",
- (int)pdu->choice.successfulOutcome->procedureCode);
- return -1;
- }
-
- if (asn1_xer_print) {
- xer_fprint(stdout, &asn_DEF_NGAP_NGAP_PDU, (void *)pdu);
- }
-
- memset(&res, 0, sizeof(res));
- res = asn_encode_to_new_buffer(NULL, ATS_ALIGNED_CANONICAL_PER, &asn_DEF_NGAP_NGAP_PDU, pdu);
- *buffer = res.buffer;
- *len = res.result.encoded;
- return 0;
-}
-
-static inline
-int ngap_gNB_encode_unsuccessfull_outcome(NGAP_NGAP_PDU_t *pdu,
- uint8_t **buffer, uint32_t *len) {
- asn_encode_to_new_buffer_result_t res = { NULL, {0, NULL, NULL} };
- DevAssert(pdu != NULL);
-
- switch(pdu->choice.unsuccessfulOutcome->procedureCode) {
- case NGAP_ProcedureCode_id_InitialContextSetup:
- res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_NGAP_NGAP_PDU, pdu);
- free(res.buffer);
- break;
-
- default:
- NGAP_DEBUG("Unknown procedure ID (%d) for unsuccessfull outcome message\n",
- (int)pdu->choice.unsuccessfulOutcome->procedureCode);
- return -1;
- }
-
- if (asn1_xer_print) {
- xer_fprint(stdout, &asn_DEF_NGAP_NGAP_PDU, (void *)pdu);
- }
-
- memset(&res, 0, sizeof(res));
- res = asn_encode_to_new_buffer(NULL, ATS_ALIGNED_CANONICAL_PER, &asn_DEF_NGAP_NGAP_PDU, pdu);
- *buffer = res.buffer;
- *len = res.result.encoded;
- return 0;
-}
diff --git a/openair3/NGAP/ngap_gNB_handlers.c b/openair3/NGAP/ngap_gNB_handlers.c
index 487dd40ca1..f3fd9e84e7 100644
--- a/openair3/NGAP/ngap_gNB_handlers.c
+++ b/openair3/NGAP/ngap_gNB_handlers.c
@@ -48,119 +48,15 @@
#include "conversions.h"
#include "NGAP_NonDynamic5QIDescriptor.h"
-static int ngap_gNB_handle_ng_setup_response(uint32_t ssoc_id, uint32_t stream, NGAP_NGAP_PDU_t *pdu);
-static
-int ngap_gNB_handle_ng_setup_failure(uint32_t assoc_id,
- uint32_t stream,
- NGAP_NGAP_PDU_t *pdu);
+static void allocCopy(ngap_pdu_t *out, OCTET_STRING_t in)
+{
+ if (in.size) {
+ out->buffer = malloc(in.size);
+ memcpy(out->buffer, in.buf, in.size);
+ }
+ out->length = in.size;
+}
-static
-int ngap_gNB_handle_error_indication(uint32_t assoc_id,
- uint32_t stream,
- NGAP_NGAP_PDU_t *pdu);
-
-static
-int ngap_gNB_handle_initial_context_request(uint32_t assoc_id,
- uint32_t stream,
- NGAP_NGAP_PDU_t *pdu);
-
-static
-int ngap_gNB_handle_ue_context_release_command(uint32_t assoc_id,
- uint32_t stream,
- NGAP_NGAP_PDU_t *pdu);
-
-static
-int ngap_gNB_handle_pdusession_setup_request(uint32_t assoc_id,
- uint32_t stream,
- NGAP_NGAP_PDU_t *pdu);
-
-static
-int ngap_gNB_handle_paging(uint32_t assoc_id,
- uint32_t stream,
- NGAP_NGAP_PDU_t *pdu);
-
-static
-int ngap_gNB_handle_pdusession_modify_request(uint32_t assoc_id,
- uint32_t stream,
- NGAP_NGAP_PDU_t *pdu);
-
-static
-int ngap_gNB_handle_pdusession_release_command(uint32_t assoc_id,
- uint32_t stream,
- NGAP_NGAP_PDU_t *pdu);
-
-static
-int ngap_gNB_handle_ng_path_switch_request_ack(uint32_t assoc_id,
- uint32_t stream,
- NGAP_NGAP_PDU_t *pdu);
-
-static
-int ngap_gNB_handle_ng_path_switch_request_failure(uint32_t assoc_id,
- uint32_t stream,
- NGAP_NGAP_PDU_t *pdu);
-
-static
-int ngap_gNB_handle_ng_ENDC_pdusession_modification_confirm(uint32_t assoc_id,
- uint32_t stream,
- NGAP_NGAP_PDU_t *pdu);
-
-/* Handlers matrix. Only gNB related procedure present here */
-ngap_message_decoded_callback ngap_messages_callback[][3] = {
- { 0, 0, 0 }, /* AMFConfigurationUpdate */
- { 0, 0, 0 }, /* AMFStatusIndication */
- { 0, 0, 0 }, /* CellTrafficTrace */
- { ngap_gNB_handle_deactivate_trace, 0, 0 }, /* DeactivateTrace */
- { ngap_gNB_handle_nas_downlink, 0, 0 }, /* DownlinkNASTransport */
- { 0, 0, 0 }, /* DownlinkNonUEAssociatedNRPPaTransport */
- { 0, 0, 0 }, /* DownlinkRANConfigurationTransfer */
- { 0, 0, 0 }, /* DownlinkRANStatusTransfer */
- { 0, 0, 0 }, /* DownlinkUEAssociatedNRPPaTransport */
- { ngap_gNB_handle_error_indication, 0, 0 }, /* ErrorIndication */
- { 0, 0, 0 }, /* HandoverCancel */
- { 0, 0, 0 }, /* HandoverNotification */
- { 0, 0, 0 }, /* HandoverPreparation */
- { 0, 0, 0 }, /* HandoverResourceAllocation */
- { ngap_gNB_handle_initial_context_request, 0, 0 }, /* InitialContextSetup */
- { 0, 0, 0 }, /* InitialUEMessage */
- { 0, 0, 0 }, /* LocationReportingControl */
- { 0, 0, 0 }, /* LocationReportingFailureIndication */
- { 0, 0, 0 }, /* LocationReport */
- { 0, 0, 0 }, /* NASNonDeliveryIndication */
- { 0, 0, 0 }, /* NGReset */
- { 0, ngap_gNB_handle_ng_setup_response, ngap_gNB_handle_ng_setup_failure }, /* NGSetup */
- { 0, 0, 0 }, /* OverloadStart */
- { 0, 0, 0 }, /* OverloadStop */
- { ngap_gNB_handle_paging, 0, 0 }, /* Paging */
- { 0, ngap_gNB_handle_ng_path_switch_request_ack, ngap_gNB_handle_ng_path_switch_request_failure }, /* PathSwitchRequest */
- { ngap_gNB_handle_pdusession_modify_request, 0, 0 }, /* PDUSessionResourceModify */
- { 0, ngap_gNB_handle_ng_ENDC_pdusession_modification_confirm, 0 }, /* PDUSessionResourceModifyIndication */
- { ngap_gNB_handle_pdusession_release_command, 0, 0 }, /* PDUSessionResourceRelease */
- { ngap_gNB_handle_pdusession_setup_request, 0, 0 }, /* PDUSessionResourceSetup */
- { 0, 0, 0 }, /* PDUSessionResourceNotify */
- { 0, 0, 0 }, /* PrivateMessage */
- { 0, 0, 0 }, /* PWSCancel */
- { 0, 0, 0 }, /* PWSFailureIndication */
- { 0, 0, 0 }, /* PWSRestartIndication */
- { 0, 0, 0 }, /* RANConfigurationUpdate */
- { 0, 0, 0 }, /* RerouteNASRequest */
- { 0, 0, 0 }, /* RRCInactiveTransitionReport */
- { 0, 0, 0 }, /* TraceFailureIndication */
- { ngap_gNB_handle_trace_start, 0, 0 }, /* TraceStart */
- { 0, 0, 0 }, /* UEContextModification */
- { ngap_gNB_handle_ue_context_release_command, 0, 0 }, /* UEContextRelease */
- { 0, 0, 0 }, /* UEContextReleaseRequest */
- { 0, 0, 0 }, /* UERadioCapabilityCheck */
- { 0, 0, 0 }, /* UERadioCapabilityInfoIndication */
- { 0, 0, 0 }, /* UETNLABindingRelease */
- { 0, 0, 0 }, /* UplinkNASTransport */
- { 0, 0, 0 }, /* UplinkNonUEAssociatedNRPPaTransport */
- { 0, 0, 0 }, /* UplinkRANConfigurationTransfer */
- { 0, 0, 0 }, /* UplinkRANStatusTransfer */
- { 0, 0, 0 }, /* UplinkUEAssociatedNRPPaTransport */
- { 0, 0, 0 }, /* WriteReplaceWarning */
- { 0, 0, 0 }, /* SecondaryRATDataUsageReport */
-
-};
char *ngap_direction2String(int ngap_dir) {
static char *ngap_direction_String[] = {
"", /* Nothing */
@@ -209,46 +105,6 @@ void ngap_handle_ng_setup_message(ngap_gNB_amf_data_t *amf_desc_p, int sctp_shut
}
}
-int ngap_gNB_handle_message(uint32_t assoc_id, int32_t stream,
- const uint8_t *const data, const uint32_t data_length) {
- NGAP_NGAP_PDU_t pdu;
- int ret;
- DevAssert(data != NULL);
- memset(&pdu, 0, sizeof(pdu));
-
- if (ngap_gNB_decode_pdu(&pdu, data, data_length) < 0) {
- NGAP_ERROR("Failed to decode PDU\n");
- return -1;
- }
-
- /* Checking procedure Code and direction of message */
- if (pdu.choice.initiatingMessage->procedureCode >= sizeof(ngap_messages_callback) / (3 * sizeof(
- ngap_message_decoded_callback))
- || (pdu.present > NGAP_NGAP_PDU_PR_unsuccessfulOutcome)) {
- NGAP_ERROR("[SCTP %d] Either procedureCode %ld or direction %d exceed expected\n",
- assoc_id, pdu.choice.initiatingMessage->procedureCode, pdu.present);
- ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_NGAP_NGAP_PDU, &pdu);
- return -1;
- }
-
- /* No handler present.
- * This can mean not implemented or no procedure for gNB (wrong direction).
- */
- if (ngap_messages_callback[pdu.choice.initiatingMessage->procedureCode][pdu.present - 1] == NULL) {
- NGAP_ERROR("[SCTP %d] No handler for procedureCode %ld in %s\n",
- assoc_id, pdu.choice.initiatingMessage->procedureCode,
- ngap_direction2String(pdu.present - 1));
- ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_NGAP_NGAP_PDU, &pdu);
- return -1;
- }
-
- /* Calling the right handler */
- ret = (*ngap_messages_callback[pdu.choice.initiatingMessage->procedureCode][pdu.present - 1])
- (assoc_id, stream, &pdu);
- ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_NGAP_NGAP_PDU, &pdu);
- return ret;
-}
-
static
int ngap_gNB_handle_ng_setup_failure(uint32_t assoc_id,
uint32_t stream,
@@ -378,10 +234,8 @@ int ngap_gNB_handle_ng_setup_response(uint32_t assoc_id,
NGAP_ProtocolIE_ID_id_AMFName, true);
if (ie) {
- amf_desc_p->amf_name = calloc(ie->value.choice.AMFName.size + 1, sizeof(char));
- memcpy(amf_desc_p->amf_name, ie->value.choice.AMFName.buf,
- ie->value.choice.AMFName.size);
- /* Convert the amf name to a printable string */
+ amf_desc_p->amf_name = malloc(ie->value.choice.AMFName.size + 1);
+ memcpy(amf_desc_p->amf_name, ie->value.choice.AMFName.buf, ie->value.choice.AMFName.size);
amf_desc_p->amf_name[ie->value.choice.AMFName.size] = '\0';
}
@@ -824,18 +678,12 @@ int ngap_gNB_handle_error_indication(uint32_t assoc_id,
return 0;
}
-
-static
-int ngap_gNB_handle_initial_context_request(uint32_t assoc_id,
- uint32_t stream,
- NGAP_NGAP_PDU_t *pdu) {
-
+static int ngap_gNB_handle_initial_context_request(uint32_t assoc_id, uint32_t stream, NGAP_NGAP_PDU_t *pdu)
+{
int i;
- ngap_gNB_amf_data_t *amf_desc_p = NULL;
- ngap_gNB_ue_context_t *ue_desc_p = NULL;
+ ngap_gNB_amf_data_t *amf_desc_p = NULL;
NGAP_InitialContextSetupRequest_t *container;
NGAP_InitialContextSetupRequestIEs_t *ie;
- NGAP_RAN_UE_NGAP_ID_t ran_ue_ngap_id;
uint64_t amf_ue_ngap_id;
DevAssert(pdu != NULL);
container = &pdu->choice.initiatingMessage->value.choice.InitialContextSetupRequest;
@@ -850,27 +698,20 @@ int ngap_gNB_handle_initial_context_request(uint32_t assoc_id,
NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_InitialContextSetupRequestIEs_t, ie, container,
NGAP_ProtocolIE_ID_id_AMF_UE_NGAP_ID, true);
- if (ie != NULL) { /* checked by macro but cppcheck doesn't see it */
- asn_INTEGER2ulong(&(ie->value.choice.AMF_UE_NGAP_ID), &amf_ue_ngap_id);
- } else {
- return -1;
- }
+ asn_INTEGER2ulong(&(ie->value.choice.AMF_UE_NGAP_ID), &amf_ue_ngap_id);
/* id-RAN-UE-NGAP-ID */
NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_InitialContextSetupRequestIEs_t, ie, container,
NGAP_ProtocolIE_ID_id_RAN_UE_NGAP_ID, true);
- if (ie != NULL) { /* checked by macro but cppcheck doesn't see it */
- ran_ue_ngap_id = ie->value.choice.RAN_UE_NGAP_ID;
-
- if ((ue_desc_p = ngap_gNB_get_ue_context(amf_desc_p->ngap_gNB_instance,
- ran_ue_ngap_id)) == NULL) {
- NGAP_ERROR("[SCTP %d] Received initial context setup request for non "
- "existing UE context 0x%06lx\n", assoc_id,
- ran_ue_ngap_id);
- return -1;
- }
- } else {
+ const NGAP_RAN_UE_NGAP_ID_t ran_ue_ngap_id = ie->value.choice.RAN_UE_NGAP_ID;
+ ngap_gNB_ue_context_t *ue_desc_p = ngap_get_ue_context(ran_ue_ngap_id);
+ if (!ue_desc_p) {
+ NGAP_ERROR(
+ "[SCTP %d] Received initial context setup request for non "
+ "existing UE context 0x%06lx\n",
+ assoc_id,
+ ran_ue_ngap_id);
return -1;
}
@@ -886,8 +727,7 @@ int ngap_gNB_handle_initial_context_request(uint32_t assoc_id,
MessageDef *message_p = itti_alloc_new_message(TASK_NGAP, 0, NGAP_INITIAL_CONTEXT_SETUP_REQ);
ngap_initial_context_setup_req_t * msg=&NGAP_INITIAL_CONTEXT_SETUP_REQ(message_p);
- msg->ue_initial_id = ue_desc_p->ue_initial_id;
- ue_desc_p->ue_initial_id = 0;
+ memset(msg, 0, sizeof(*msg));
msg->gNB_ue_ngap_id = ue_desc_p->gNB_ue_ngap_id;
msg->amf_ue_ngap_id = ue_desc_p->amf_ue_ngap_id;
/* id-UEAggregateMaximumBitRate */
@@ -908,154 +748,26 @@ int ngap_gNB_handle_initial_context_request(uint32_t assoc_id,
NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_InitialContextSetupRequestIEs_t, ie, container,
NGAP_ProtocolIE_ID_id_GUAMI, true);
- if (ie != NULL) { /* checked by macro but cppcheck doesn't see it */
TBCD_TO_MCC_MNC(&ie->value.choice.GUAMI.pLMNIdentity, msg->guami.mcc,
msg->guami.mnc, msg->guami.mnc_len);
OCTET_STRING_TO_INT8(&ie->value.choice.GUAMI.aMFRegionID, msg->guami.amf_region_id);
OCTET_STRING_TO_INT16(&ie->value.choice.GUAMI.aMFSetID, msg->guami.amf_set_id);
OCTET_STRING_TO_INT8(&ie->value.choice.GUAMI.aMFPointer, msg->guami.amf_pointer);
- } else {/* ie != NULL */
- return -1;
- }
- NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_InitialContextSetupRequestIEs_t, ie, container,
- NGAP_ProtocolIE_ID_id_PDUSessionResourceSetupListCxtReq, false);
+ NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_InitialContextSetupRequestIEs_t, ie, container, NGAP_ProtocolIE_ID_id_PDUSessionResourceSetupListCxtReq, false);
+ if (ie != NULL) {
+ msg->nb_of_pdusessions = ie->value.choice.PDUSessionResourceSetupListCxtReq.list.count;
- if (ie != NULL) { /* checked by macro but cppcheck doesn't see it */
- msg->nb_of_pdusessions =
- ie->value.choice.PDUSessionResourceSetupListCxtReq.list.count;
+ for (i = 0; i < ie->value.choice.PDUSessionResourceSetupListCxtReq.list.count; i++) {
+ NGAP_PDUSessionResourceSetupItemCxtReq_t *item_p = ie->value.choice.PDUSessionResourceSetupListCxtReq.list.array[i];
+ msg->pdusession_param[i].pdusession_id = item_p->pDUSessionID;
- for (i = 0; i < ie->value.choice.PDUSessionResourceSetupListCxtReq.list.count; i++) {
- NGAP_PDUSessionResourceSetupItemCxtReq_t *item_p;
- asn_dec_rval_t dec_rval;
- NGAP_PDUSessionResourceSetupRequestTransfer_t *pdusessionTransfer_p = NULL;
- NGAP_PDUSessionResourceSetupRequestTransferIEs_t *pdusessionTransfer_ies = NULL;
-
- item_p = (NGAP_PDUSessionResourceSetupItemCxtReq_t *)ie->value.choice.PDUSessionResourceSetupListCxtReq.list.array[i];
- msg->pdusession_param[i].pdusession_id = item_p->pDUSessionID;
-
- if (item_p->nAS_PDU != NULL) {
- /* Only copy NAS pdu if present */
- msg->pdusession_param[i].nas_pdu.length = item_p->nAS_PDU->size;
- msg->pdusession_param[i].nas_pdu.buffer =
- malloc(sizeof(uint8_t) * item_p->nAS_PDU->size);
- memcpy(msg->pdusession_param[i].nas_pdu.buffer,
- item_p->nAS_PDU->buf, item_p->nAS_PDU->size);
- NGAP_DEBUG("Received NAS message with the PDUSESSION setup procedure\n");
- } else {
- msg->pdusession_param[i].nas_pdu.length = 0;
- msg->pdusession_param[i].nas_pdu.buffer = NULL;
+ allocCopy(&msg->pdusession_param[i].nas_pdu, *item_p->nAS_PDU);
+ allocCopy(&msg->pdusession_param[i].pdusessionTransfer, item_p->pDUSessionResourceSetupRequestTransfer);
}
+ }
-
- dec_rval = aper_decode(NULL,
- &asn_DEF_NGAP_PDUSessionResourceSetupRequestTransfer,
- (void **)&pdusessionTransfer_p,
- item_p->pDUSessionResourceSetupRequestTransfer.buf,
- item_p->pDUSessionResourceSetupRequestTransfer.size, 0, 0);
-
- if(dec_rval.code != RC_OK) {
- NGAP_ERROR("could not decode PDUSessionResourceSetupRequestTransfer\n");
- return -1;
- }
-
- for(int j=0; j< pdusessionTransfer_p->protocolIEs.list.count; j++) {
- pdusessionTransfer_ies = pdusessionTransfer_p->protocolIEs.list.array[j];
- switch(pdusessionTransfer_ies->id) {
- /* optional PDUSessionAggregateMaximumBitRate */
- case NGAP_ProtocolIE_ID_id_PDUSessionAggregateMaximumBitRate:
- break;
-
- /* mandatory UL-NGU-UP-TNLInformation */
- case NGAP_ProtocolIE_ID_id_UL_NGU_UP_TNLInformation:
- {
- NGAP_GTPTunnel_t *gTPTunnel_p;
- gTPTunnel_p = pdusessionTransfer_ies->value.choice.UPTransportLayerInformation.choice.gTPTunnel;
-
- /* Set the transport layer address */
- memcpy(msg->pdusession_param[i].upf_addr.buffer,
- gTPTunnel_p->transportLayerAddress.buf, gTPTunnel_p->transportLayerAddress.size);
-
- msg->pdusession_param[i].upf_addr.length =
- gTPTunnel_p->transportLayerAddress.size * 8 - gTPTunnel_p->transportLayerAddress.bits_unused;
-
- /* GTP tunnel endpoint ID */
- OCTET_STRING_TO_INT32(&gTPTunnel_p->gTP_TEID, msg->pdusession_param[i].gtp_teid);
- }
-
- break;
-
- /* optional AdditionalUL-NGU-UP-TNLInformation */
- case NGAP_ProtocolIE_ID_id_AdditionalUL_NGU_UP_TNLInformation:
- break;
-
- /* optional DataForwardingNotPossible */
- case NGAP_ProtocolIE_ID_id_DataForwardingNotPossible:
- break;
-
- /* mandatory PDUSessionType */
- case NGAP_ProtocolIE_ID_id_PDUSessionType:
- msg->pdusession_param[i].upf_addr.pdu_session_type = (uint8_t)pdusessionTransfer_ies->value.choice.PDUSessionType;
- break;
-
- /* optional SecurityIndication */
- case NGAP_ProtocolIE_ID_id_SecurityIndication:
- break;
-
- /* optional NetworkInstance */
- case NGAP_ProtocolIE_ID_id_NetworkInstance:
- break;
-
- /* mandatory QosFlowSetupRequestList */
- case NGAP_ProtocolIE_ID_id_QosFlowSetupRequestList:
- {
- NGAP_QosFlowSetupRequestItem_t *qosFlowItem_p;
-
- NGAP_DEBUG("QosFlowSetupRequestList.list.count %d\n", pdusessionTransfer_ies->value.choice.QosFlowSetupRequestList.list.count);
- DevAssert(pdusessionTransfer_ies->value.choice.QosFlowSetupRequestList.list.count > 0);
- DevAssert(pdusessionTransfer_ies->value.choice.QosFlowSetupRequestList.list.count <= NGAP_maxnoofQosFlows);
-
- msg->pdusession_param[i].nb_qos = pdusessionTransfer_ies->value.choice.QosFlowSetupRequestList.list.count;
-
- for(int qosIdx = 0; qosIdx < pdusessionTransfer_ies->value.choice.QosFlowSetupRequestList.list.count; qosIdx++) {
- qosFlowItem_p = pdusessionTransfer_ies->value.choice.QosFlowSetupRequestList.list.array[qosIdx];
-
- /* Set the QOS informations */
- msg->pdusession_param[i].qos[qosIdx].qfi = (uint8_t)qosFlowItem_p->qosFlowIdentifier;
- if(qosFlowItem_p->qosFlowLevelQosParameters.qosCharacteristics.present == NGAP_QosCharacteristics_PR_nonDynamic5QI){
- if(qosFlowItem_p->qosFlowLevelQosParameters.qosCharacteristics.choice.nonDynamic5QI != NULL){
- msg->pdusession_param[i].qos[qosIdx].fiveQI =
- (uint64_t)qosFlowItem_p->qosFlowLevelQosParameters.qosCharacteristics.choice.nonDynamic5QI->fiveQI;
- }
- }
-
- msg->pdusession_param[i].qos[qosIdx].allocation_retention_priority.priority_level =
- qosFlowItem_p->qosFlowLevelQosParameters.allocationAndRetentionPriority.priorityLevelARP;
- msg->pdusession_param[i].qos[qosIdx].allocation_retention_priority.pre_emp_capability =
- qosFlowItem_p->qosFlowLevelQosParameters.allocationAndRetentionPriority.pre_emptionCapability;
- msg->pdusession_param[i].qos[qosIdx].allocation_retention_priority.pre_emp_vulnerability =
- qosFlowItem_p->qosFlowLevelQosParameters.allocationAndRetentionPriority.pre_emptionVulnerability;
- }
- }
-
- break;
-
- /* optional CommonNetworkInstance */
- case NGAP_ProtocolIE_ID_id_CommonNetworkInstance:
- break;
-
- default:
- NGAP_ERROR("Not found protocolIEs id %ld\n", pdusessionTransfer_ies->id);
- return -1;
- }
- }
-
- } /* for i... */
- } else {/* ie != NULL */
- NGAP_ERROR("Not found NGAP_ProtocolIE_ID_id_PDUSessionResourceSetupListCxtReq\n");
- }
-
/* id-AllowedNSSAI */
NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_InitialContextSetupRequestIEs_t, ie, container,
NGAP_ProtocolIE_ID_id_AllowedNSSAI, true);
@@ -1067,25 +779,8 @@ int ngap_gNB_handle_initial_context_request(uint32_t assoc_id,
//DevAssert(ie->value.choice.AllowedNSSAI.list.count > 0);
//DevAssert(ie->value.choice.AllowedNSSAI.list.count <= NGAP_maxnoofAllowedS_NSSAIs);
- if (ie == NULL) {
- NGAP_WARN("AllowedNSSAI not present, forging 2 NSSAI\n");
+ AssertFatal(ie, "AllowedNSSAI not present, forging 2 NSSAI\n");
- msg->nb_allowed_nssais = 2;
-
- msg->allowed_nssai[0].sST = 01;
-
- msg->allowed_nssai[0].sD_flag = 1;
- msg->allowed_nssai[0].sD[0] = 01;
- msg->allowed_nssai[0].sD[1] = 02;
- msg->allowed_nssai[0].sD[2] = 03;
-
- msg->allowed_nssai[1].sST = 01;
-
- msg->allowed_nssai[1].sD_flag = 1;
- msg->allowed_nssai[1].sD[0] = 00;//11;
- msg->allowed_nssai[1].sD[1] = 00;//22;
- msg->allowed_nssai[1].sD[2] = 01;//33;
- } else {
NGAP_INFO("AllowedNSSAI.list.count %d\n", ie->value.choice.AllowedNSSAI.list.count);
msg->nb_allowed_nssais = ie->value.choice.AllowedNSSAI.list.count;
@@ -1096,88 +791,56 @@ int ngap_gNB_handle_initial_context_request(uint32_t assoc_id,
if(allow_nssai_item_p->s_NSSAI.sD != NULL) {
msg->allowed_nssai[i].sD_flag = 1;
- msg->allowed_nssai[i].sD[0] = allow_nssai_item_p->s_NSSAI.sD->buf[0];
- msg->allowed_nssai[i].sD[1] = allow_nssai_item_p->s_NSSAI.sD->buf[1];
- msg->allowed_nssai[i].sD[2] = allow_nssai_item_p->s_NSSAI.sD->buf[2];
+ memcpy(msg->allowed_nssai[i].sD, allow_nssai_item_p->s_NSSAI.sD, sizeof(msg->allowed_nssai[i].sD));
}
}
- }
- //} else {/* ie != NULL */
- // return -1;
- //}
/* id-UESecurityCapabilities */
NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_InitialContextSetupRequestIEs_t, ie, container,
NGAP_ProtocolIE_ID_id_UESecurityCapabilities, true);
- if (ie != NULL) { /* checked by macro but cppcheck doesn't see it */
msg->security_capabilities.nRencryption_algorithms =
BIT_STRING_to_uint16(&ie->value.choice.UESecurityCapabilities.nRencryptionAlgorithms);
msg->security_capabilities.nRintegrity_algorithms =
BIT_STRING_to_uint16(&ie->value.choice.UESecurityCapabilities.nRintegrityProtectionAlgorithms);
msg->security_capabilities.eUTRAencryption_algorithms =
BIT_STRING_to_uint16(&ie->value.choice.UESecurityCapabilities.eUTRAencryptionAlgorithms);
- msg->security_capabilities.eUTRAintegrity_algorithms =
- BIT_STRING_to_uint16(&ie->value.choice.UESecurityCapabilities.eUTRAintegrityProtectionAlgorithms);
- } else {/* ie != NULL */
- return -1;
- }
+ msg->security_capabilities.eUTRAintegrity_algorithms = BIT_STRING_to_uint16(&ie->value.choice.UESecurityCapabilities.eUTRAintegrityProtectionAlgorithms);
- /* id-SecurityKey : Copy the security key */
- NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_InitialContextSetupRequestIEs_t, ie, container,
- NGAP_ProtocolIE_ID_id_SecurityKey, true);
+ /* id-SecurityKey : Copy the security key */
+ NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_InitialContextSetupRequestIEs_t, ie, container, NGAP_ProtocolIE_ID_id_SecurityKey, true);
+ memcpy(&msg->security_key, ie->value.choice.SecurityKey.buf, ie->value.choice.SecurityKey.size);
- if (ie != NULL) { /* checked by macro but cppcheck doesn't see it */
- memcpy(&msg->security_key,
- ie->value.choice.SecurityKey.buf, ie->value.choice.SecurityKey.size);
-
- } else {/* ie != NULL */
- return -1;
- }
+ /* id-MobilityRestrictionList */
+ NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_InitialContextSetupRequestIEs_t, ie, container, NGAP_ProtocolIE_ID_id_MobilityRestrictionList, false);
- /* id-MobilityRestrictionList */
- NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_InitialContextSetupRequestIEs_t, ie, container,
- NGAP_ProtocolIE_ID_id_MobilityRestrictionList, false);
-
- if (ie != NULL) { /* checked by macro but cppcheck doesn't see it */
- NGAP_MobilityRestrictionList_t *mobility_rest_list_p = NULL;
- mobility_rest_list_p = &ie->value.choice.MobilityRestrictionList;
+ if (ie != NULL) { /* checked by macro but cppcheck doesn't see it */
+ NGAP_MobilityRestrictionList_t *mobility_rest_list_p = NULL;
+ mobility_rest_list_p = &ie->value.choice.MobilityRestrictionList;
- msg->mobility_restriction_flag = 1;
- TBCD_TO_MCC_MNC(&mobility_rest_list_p->servingPLMN,
- msg->mobility_restriction.serving_plmn.mcc,
- msg->mobility_restriction.serving_plmn.mnc,
- msg->mobility_restriction.serving_plmn.mnc_digit_length);
+ msg->mobility_restriction_flag = 1;
+ TBCD_TO_MCC_MNC(
+ &mobility_rest_list_p->servingPLMN, msg->mobility_restriction.serving_plmn.mcc, msg->mobility_restriction.serving_plmn.mnc, msg->mobility_restriction.serving_plmn.mnc_digit_length);
}
/* id-NAS-PDU */
NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_InitialContextSetupRequestIEs_t, ie, container,
NGAP_ProtocolIE_ID_id_NAS_PDU, false);
-
- if (ie != NULL) { /* checked by macro but cppcheck doesn't see it */
- if(ie->value.choice.NAS_PDU.size > 0) {
- msg->nas_pdu_flag = 1;
- msg->nas_pdu.length = ie->value.choice.NAS_PDU.size;
- msg->nas_pdu.buffer = malloc(sizeof(uint8_t) * ie->value.choice.NAS_PDU.size);
- memcpy(msg->nas_pdu.buffer,
- ie->value.choice.NAS_PDU.buf, ie->value.choice.NAS_PDU.size);
- }
- }
+
+ if (ie)
+ allocCopy(&msg->nas_pdu, ie->value.choice.NAS_PDU);
itti_send_msg_to_task(TASK_RRC_GNB, ue_desc_p->gNB_instance->instance, message_p);
return 0;
}
-
static
int ngap_gNB_handle_ue_context_release_command(uint32_t assoc_id,
uint32_t stream,
NGAP_NGAP_PDU_t *pdu) {
-
- ngap_gNB_amf_data_t *amf_desc_p = NULL;
- ngap_gNB_ue_context_t *ue_desc_p = NULL;
+ ngap_gNB_amf_data_t *amf_desc_p = NULL;
MessageDef *message_p = NULL;
uint64_t amf_ue_ngap_id;
NGAP_RAN_UE_NGAP_ID_t gnb_ue_ngap_id;
@@ -1195,47 +858,43 @@ int ngap_gNB_handle_ue_context_release_command(uint32_t assoc_id,
NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_UEContextReleaseCommand_IEs_t, ie, container,
NGAP_ProtocolIE_ID_id_UE_NGAP_IDs, true);
- if (ie != NULL) { /* checked by macro but cppcheck doesn't see it */
- switch (ie->value.choice.UE_NGAP_IDs.present) {
- case NGAP_UE_NGAP_IDs_PR_uE_NGAP_ID_pair:
- gnb_ue_ngap_id = ie->value.choice.UE_NGAP_IDs.choice.uE_NGAP_ID_pair->rAN_UE_NGAP_ID;
- asn_INTEGER2ulong(&(ie->value.choice.UE_NGAP_IDs.choice.uE_NGAP_ID_pair->aMF_UE_NGAP_ID), &amf_ue_ngap_id);
+ switch (ie->value.choice.UE_NGAP_IDs.present) {
+ case NGAP_UE_NGAP_IDs_PR_uE_NGAP_ID_pair:
+ gnb_ue_ngap_id = ie->value.choice.UE_NGAP_IDs.choice.uE_NGAP_ID_pair->rAN_UE_NGAP_ID;
+ asn_INTEGER2ulong(&(ie->value.choice.UE_NGAP_IDs.choice.uE_NGAP_ID_pair->aMF_UE_NGAP_ID), &amf_ue_ngap_id);
+ ngap_gNB_ue_context_t *ue_desc_p = ngap_get_ue_context(gnb_ue_ngap_id);
+ if (!ue_desc_p) {
+ NGAP_ERROR(
+ "[SCTP %d] Received UE context release command for non "
+ "existing UE context 0x%06lx\n",
+ assoc_id,
+ gnb_ue_ngap_id);
+ return -1;
+ } else {
+ message_p = itti_alloc_new_message(TASK_NGAP, 0, NGAP_UE_CONTEXT_RELEASE_COMMAND);
- if ((ue_desc_p = ngap_gNB_get_ue_context(amf_desc_p->ngap_gNB_instance,
- gnb_ue_ngap_id)) == NULL) {
- NGAP_ERROR("[SCTP %d] Received UE context release command for non "
- "existing UE context 0x%06lx\n",
- assoc_id,
- gnb_ue_ngap_id);
- return -1;
- } else {
- message_p = itti_alloc_new_message(TASK_NGAP, 0, NGAP_UE_CONTEXT_RELEASE_COMMAND);
-
- if (ue_desc_p->amf_ue_ngap_id == 0) { // case of Detach Request and switch off from RRC_IDLE mode
- ue_desc_p->amf_ue_ngap_id = amf_ue_ngap_id;
- }
-
- NGAP_UE_CONTEXT_RELEASE_COMMAND(message_p).gNB_ue_ngap_id = gnb_ue_ngap_id;
- itti_send_msg_to_task(TASK_RRC_GNB, ue_desc_p->gNB_instance->instance, message_p);
- return 0;
+ if (ue_desc_p->amf_ue_ngap_id == 0) { // case of Detach Request and switch off from RRC_IDLE mode
+ ue_desc_p->amf_ue_ngap_id = amf_ue_ngap_id;
}
- break;
+ NGAP_UE_CONTEXT_RELEASE_COMMAND(message_p).gNB_ue_ngap_id = gnb_ue_ngap_id;
+ itti_send_msg_to_task(TASK_RRC_GNB, ue_desc_p->gNB_instance->instance, message_p);
+ return 0;
+ }
+
+ break;
//#warning "TODO mapping amf_ue_ngap_id gnb_ue_ngap_id?"
- case NGAP_UE_NGAP_IDs_PR_aMF_UE_NGAP_ID:
- asn_INTEGER2ulong(&(ie->value.choice.UE_NGAP_IDs.choice.aMF_UE_NGAP_ID), &amf_ue_ngap_id);
- NGAP_ERROR("TO DO mapping amf_ue_ngap_id gnb_ue_ngap_id");
- (void)amf_ue_ngap_id; /* TODO: remove - it's to remove gcc warning about unused var */
+ case NGAP_UE_NGAP_IDs_PR_aMF_UE_NGAP_ID:
+ asn_INTEGER2ulong(&(ie->value.choice.UE_NGAP_IDs.choice.aMF_UE_NGAP_ID), &amf_ue_ngap_id);
+ NGAP_ERROR("TO DO mapping amf_ue_ngap_id gnb_ue_ngap_id");
+ (void)amf_ue_ngap_id; /* TODO: remove - it's to remove gcc warning about unused var */
- case NGAP_UE_NGAP_IDs_PR_NOTHING:
- default:
- NGAP_ERROR("NGAP_UE_CONTEXT_RELEASE_COMMAND not processed, missing info elements");
- return -1;
- }
- } else {
- return -1;
+ case NGAP_UE_NGAP_IDs_PR_NOTHING:
+ default:
+ NGAP_ERROR("NGAP_UE_CONTEXT_RELEASE_COMMAND not processed, missing info elements");
+ return -1;
}
NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_UEContextReleaseCommand_IEs_t, ie, container,
@@ -1253,7 +912,7 @@ int ngap_gNB_handle_pdusession_setup_request(uint32_t assoc_id,
uint64_t amf_ue_ngap_id;
NGAP_RAN_UE_NGAP_ID_t ran_ue_ngap_id;
ngap_gNB_amf_data_t *amf_desc_p = NULL;
- ngap_gNB_ue_context_t *ue_desc_p = NULL;
+
NGAP_PDUSessionResourceSetupRequest_t *container;
NGAP_PDUSessionResourceSetupRequestIEs_t *ie;
DevAssert(pdu != NULL);
@@ -1266,40 +925,21 @@ int ngap_gNB_handle_pdusession_setup_request(uint32_t assoc_id,
}
/* id-AMF-UE-NGAP-ID */
- NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_PDUSessionResourceSetupRequestIEs_t, ie, container,
- NGAP_ProtocolIE_ID_id_AMF_UE_NGAP_ID, true);
-
- if (ie != NULL) { /* checked by macro but cppcheck doesn't see it */
- asn_INTEGER2ulong(&(ie->value.choice.AMF_UE_NGAP_ID), &amf_ue_ngap_id);
- } else {
- return -1;
- }
+ NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_PDUSessionResourceSetupRequestIEs_t, ie, container, NGAP_ProtocolIE_ID_id_AMF_UE_NGAP_ID, true);
+ asn_INTEGER2ulong(&(ie->value.choice.AMF_UE_NGAP_ID), &amf_ue_ngap_id);
/* id-gNB-UE-NGAP-ID */
- NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_PDUSessionResourceSetupRequestIEs_t, ie, container,
- NGAP_ProtocolIE_ID_id_RAN_UE_NGAP_ID, true);
+ NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_PDUSessionResourceSetupRequestIEs_t, ie, container, NGAP_ProtocolIE_ID_id_RAN_UE_NGAP_ID, true);
+ ran_ue_ngap_id = ie->value.choice.RAN_UE_NGAP_ID;
- if (ie != NULL) { /* checked by macro but cppcheck doesn't see it */
- ran_ue_ngap_id = ie->value.choice.RAN_UE_NGAP_ID;
- } else {
- return -1;
- }
-
- if ((ue_desc_p = ngap_gNB_get_ue_context(amf_desc_p->ngap_gNB_instance,
- ran_ue_ngap_id)) == NULL) {
+ ngap_gNB_ue_context_t *ue_desc_p = ngap_get_ue_context(ran_ue_ngap_id);
+ if (!ue_desc_p) {
NGAP_ERROR("[SCTP %d] Received pdu session resource setup request for non "
"existing UE context 0x%06lx\n", assoc_id,
ran_ue_ngap_id);
return -1;
}
- /* Initial context request = UE-related procedure -> stream != 0 */
- // if (stream == 0) {
- // NGAP_ERROR("[SCTP %d] Received UE-related procedure on stream (%d)\n",
- // assoc_id, stream);
- // return -1;
- // }
-
ue_desc_p->rx_stream = stream;
if ( ue_desc_p->amf_ue_ngap_id != amf_ue_ngap_id) {
@@ -1309,8 +949,7 @@ int ngap_gNB_handle_pdusession_setup_request(uint32_t assoc_id,
MessageDef * message_p = itti_alloc_new_message(TASK_NGAP, 0, NGAP_PDUSESSION_SETUP_REQ);
ngap_pdusession_setup_req_t * msg=&NGAP_PDUSESSION_SETUP_REQ(message_p);
- msg->ue_initial_id = ue_desc_p->ue_initial_id;
- ue_desc_p->ue_initial_id = 0;
+ memset(msg, 0, sizeof(*msg));
msg->gNB_ue_ngap_id = ue_desc_p->gNB_ue_ngap_id;
msg->amf_ue_ngap_id = ue_desc_p->amf_ue_ngap_id;
@@ -1325,147 +964,26 @@ int ngap_gNB_handle_pdusession_setup_request(uint32_t assoc_id,
NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_PDUSessionResourceSetupRequestIEs_t, ie, container,
NGAP_ProtocolIE_ID_id_PDUSessionResourceSetupListSUReq, true);
- if (ie != NULL) { /* checked by macro but cppcheck doesn't see it */
- msg->nb_pdusessions_tosetup =
- ie->value.choice.PDUSessionResourceSetupListSUReq.list.count;
+ msg->nb_pdusessions_tosetup = ie->value.choice.PDUSessionResourceSetupListSUReq.list.count;
- for (int i = 0; i < ie->value.choice.PDUSessionResourceSetupListSUReq.list.count; i++) {
- NGAP_PDUSessionResourceSetupItemSUReq_t *item_p;
- asn_dec_rval_t dec_rval;
- NGAP_PDUSessionResourceSetupRequestTransfer_t *pdusessionTransfer_p = NULL;
- NGAP_PDUSessionResourceSetupRequestTransferIEs_t *pdusessionTransfer_ies = NULL;
+ for (int i = 0; i < ie->value.choice.PDUSessionResourceSetupListSUReq.list.count; i++) {
+ NGAP_PDUSessionResourceSetupItemSUReq_t *item_p = ie->value.choice.PDUSessionResourceSetupListSUReq.list.array[i];
+ msg->pdusession_setup_params[i].pdusession_id = item_p->pDUSessionID;
- // PDU session ID
- item_p = (NGAP_PDUSessionResourceSetupItemSUReq_t *)ie->value.choice.PDUSessionResourceSetupListSUReq.list.array[i];
- msg->pdusession_setup_params[i].pdusession_id = item_p->pDUSessionID;
+ // S-NSSAI
+ OCTET_STRING_TO_INT8(&item_p->s_NSSAI.sST, msg->allowed_nssai[i].sST);
+ if (item_p->s_NSSAI.sD != NULL) {
+ msg->allowed_nssai[i].sD_flag = 1;
+ msg->allowed_nssai[i].sD[0] = item_p->s_NSSAI.sD->buf[0];
+ msg->allowed_nssai[i].sD[1] = item_p->s_NSSAI.sD->buf[1];
+ msg->allowed_nssai[i].sD[2] = item_p->s_NSSAI.sD->buf[2];
+ }
- // S-NSSAI
- OCTET_STRING_TO_INT8(&item_p->s_NSSAI.sST, msg->allowed_nssai[i].sST);
- if(item_p->s_NSSAI.sD != NULL) {
- msg->allowed_nssai[i].sD_flag = 1;
- msg->allowed_nssai[i].sD[0] = item_p->s_NSSAI.sD->buf[0];
- msg->allowed_nssai[i].sD[1] = item_p->s_NSSAI.sD->buf[1];
- msg->allowed_nssai[i].sD[2] = item_p->s_NSSAI.sD->buf[2];
- }
-
- // check for the NAS PDU
- if (item_p->pDUSessionNAS_PDU->size > 0 ) {
- msg->pdusession_setup_params[i].nas_pdu.length = item_p->pDUSessionNAS_PDU->size;
- msg->pdusession_setup_params[i].nas_pdu.buffer = malloc(sizeof(uint8_t) * item_p->pDUSessionNAS_PDU->size);
- memcpy(msg->pdusession_setup_params[i].nas_pdu.buffer,
- item_p->pDUSessionNAS_PDU->buf, item_p->pDUSessionNAS_PDU->size);
- // NGAP_INFO("received a NAS PDU with size %d (%02x.%02x)\n",msg->pdusession_setup_params[i].nas_pdu.length, item_p->nAS_PDU.buf[0], item_p->nAS_PDU.buf[1]);
- } else {
- msg->pdusession_setup_params[i].nas_pdu.length = 0;
- msg->pdusession_setup_params[i].nas_pdu.buffer = NULL;
- NGAP_WARN("NAS PDU is not provided, generate a PDUSESSION_SETUP Failure (TBD) back to AMF \n");
- }
-
- dec_rval = aper_decode(NULL,
- &asn_DEF_NGAP_PDUSessionResourceSetupRequestTransfer,
- (void **)&pdusessionTransfer_p,
- item_p->pDUSessionResourceSetupRequestTransfer.buf,
- item_p->pDUSessionResourceSetupRequestTransfer.size, 0, 0);
-
- if(dec_rval.code != RC_OK) {
- NGAP_ERROR("could not decode PDUSessionResourceSetupRequestTransfer\n");
- return -1;
- }
-
- for(int j=0; j< pdusessionTransfer_p->protocolIEs.list.count; j++) {
- pdusessionTransfer_ies = pdusessionTransfer_p->protocolIEs.list.array[j];
-
- switch(pdusessionTransfer_ies->id) {
- /* optional PDUSessionAggregateMaximumBitRate */
- case NGAP_ProtocolIE_ID_id_PDUSessionAggregateMaximumBitRate:
- break;
-
- /* mandatory UL-NGU-UP-TNLInformation */
- case NGAP_ProtocolIE_ID_id_UL_NGU_UP_TNLInformation:
- {
- NGAP_GTPTunnel_t *gTPTunnel_p;
- gTPTunnel_p = pdusessionTransfer_ies->value.choice.UPTransportLayerInformation.choice.gTPTunnel;
- /* The transport layer address for the IP packets */
- OCTET_STRING_TO_INT32(&gTPTunnel_p->gTP_TEID, msg->pdusession_setup_params[i].gtp_teid);
- msg->pdusession_setup_params[i].upf_addr.length =
- gTPTunnel_p->transportLayerAddress.size * 8 - gTPTunnel_p->transportLayerAddress.bits_unused;
- memcpy(msg->pdusession_setup_params[i].upf_addr.buffer ,
- gTPTunnel_p->transportLayerAddress.buf, gTPTunnel_p->transportLayerAddress.size);
- }
- break;
-
- /* optional AdditionalUL-NGU-UP-TNLInformation */
- case NGAP_ProtocolIE_ID_id_AdditionalUL_NGU_UP_TNLInformation:
- break;
-
- /* optional DataForwardingNotPossible */
- case NGAP_ProtocolIE_ID_id_DataForwardingNotPossible:
- break;
-
- /* mandatory PDUSessionType */
- case NGAP_ProtocolIE_ID_id_PDUSessionType:
- msg->pdusession_setup_params[i].upf_addr.pdu_session_type = (uint8_t)pdusessionTransfer_ies->value.choice.PDUSessionType;
- break;
-
- /* optional SecurityIndication */
- case NGAP_ProtocolIE_ID_id_SecurityIndication:
- break;
-
- /* optional NetworkInstance */
- case NGAP_ProtocolIE_ID_id_NetworkInstance:
- break;
-
- /* mandatory QosFlowSetupRequestList */
- case NGAP_ProtocolIE_ID_id_QosFlowSetupRequestList:
- {
- NGAP_QosFlowSetupRequestItem_t *qosFlowItem_p;
-
- NGAP_DEBUG("servedGUAMIs.list.count %d\n", pdusessionTransfer_ies->value.choice.QosFlowSetupRequestList.list.count);
- DevAssert(pdusessionTransfer_ies->value.choice.QosFlowSetupRequestList.list.count > 0);
- DevAssert(pdusessionTransfer_ies->value.choice.QosFlowSetupRequestList.list.count <= NGAP_maxnoofQosFlows);
-
- msg->pdusession_setup_params[i].nb_qos = pdusessionTransfer_ies->value.choice.QosFlowSetupRequestList.list.count;
-
- for(int qosIdx = 0; qosIdx < pdusessionTransfer_ies->value.choice.QosFlowSetupRequestList.list.count; qosIdx++){
- qosFlowItem_p = pdusessionTransfer_ies->value.choice.QosFlowSetupRequestList.list.array[qosIdx];
-
- /* Set the QOS informations */
- msg->pdusession_setup_params[i].qos[qosIdx].qfi = (uint8_t)qosFlowItem_p->qosFlowIdentifier;
- if(qosFlowItem_p->qosFlowLevelQosParameters.qosCharacteristics.present == NGAP_QosCharacteristics_PR_nonDynamic5QI){
- msg->pdusession_setup_params[i].qos[qosIdx].fiveQI_type = non_dynamic;
- if(qosFlowItem_p->qosFlowLevelQosParameters.qosCharacteristics.choice.nonDynamic5QI != NULL){
- msg->pdusession_setup_params[i].qos[qosIdx].fiveQI =
- (uint64_t)qosFlowItem_p->qosFlowLevelQosParameters.qosCharacteristics.choice.nonDynamic5QI->fiveQI;
- }
- } else if (qosFlowItem_p->qosFlowLevelQosParameters.qosCharacteristics.present == NGAP_QosCharacteristics_PR_dynamic5QI)
- {
- msg->pdusession_setup_params[i].qos[qosIdx].fiveQI_type = dynamic;
- }
- msg->pdusession_setup_params[i].qos[qosIdx].allocation_retention_priority.priority_level =
- qosFlowItem_p->qosFlowLevelQosParameters.allocationAndRetentionPriority.priorityLevelARP;
- msg->pdusession_setup_params[i].qos[qosIdx].allocation_retention_priority.pre_emp_capability =
- qosFlowItem_p->qosFlowLevelQosParameters.allocationAndRetentionPriority.pre_emptionCapability;
- msg->pdusession_setup_params[i].qos[qosIdx].allocation_retention_priority.pre_emp_vulnerability =
- qosFlowItem_p->qosFlowLevelQosParameters.allocationAndRetentionPriority.pre_emptionVulnerability;
- }
- }
- break;
-
- /* optional CommonNetworkInstance */
- case NGAP_ProtocolIE_ID_id_CommonNetworkInstance:
- break;
-
- default:
- NGAP_ERROR("could not found protocolIEs id %ld\n", pdusessionTransfer_ies->id);
- return -1;
- }
- }/* for j... */
- } /* for i... */
- itti_send_msg_to_task(TASK_RRC_GNB, ue_desc_p->gNB_instance->instance, message_p);
- }else {/* ie == NULL */
- NGAP_ERROR("could not found NGAP_ProtocolIE_ID_id_PDUSessionResourceSetupListSUReq\n");
- return -1;
+ allocCopy(&msg->pdusession_setup_params[i].nas_pdu, *item_p->pDUSessionNAS_PDU);
+ allocCopy(&msg->pdusession_setup_params[i].pdusessionTransfer, item_p->pDUSessionResourceSetupRequestTransfer);
}
+ itti_send_msg_to_task(TASK_RRC_GNB, ue_desc_p->gNB_instance->instance, message_p);
+
return 0;
}
@@ -1507,64 +1025,47 @@ int ngap_gNB_handle_paging(uint32_t assoc_id,
MessageDef *message_p = itti_alloc_new_message(TASK_NGAP, 0, NGAP_PAGING_IND);
ngap_paging_ind_t * msg=&NGAP_PAGING_IND(message_p);
-
- /* convert NGAP_PagingIEs_t to ngap_paging_ind_t */
- /* id-UEIdentityIndexValue : convert UE Identity Index value */
- NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_PagingIEs_t, ie, container,
- NGAP_ProtocolIE_ID_id_UEPagingIdentity, true);
+ memset(msg, 0, sizeof(*msg));
- if (ie != NULL) { /* checked by macro but cppcheck doesn't see it */
- OCTET_STRING_TO_INT16(&ie->value.choice.UEPagingIdentity.choice.fiveG_S_TMSI->aMFSetID, msg->ue_paging_identity.s_tmsi.amf_set_id);
- OCTET_STRING_TO_INT8(&ie->value.choice.UEPagingIdentity.choice.fiveG_S_TMSI->aMFPointer, msg->ue_paging_identity.s_tmsi.amf_pointer);
- OCTET_STRING_TO_INT32(&ie->value.choice.UEPagingIdentity.choice.fiveG_S_TMSI->fiveG_TMSI, msg->ue_paging_identity.s_tmsi.m_tmsi);
+ /* convert NGAP_PagingIEs_t to ngap_paging_ind_t */
+ /* id-UEIdentityIndexValue : convert UE Identity Index value */
+ NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_PagingIEs_t, ie, container, NGAP_ProtocolIE_ID_id_UEPagingIdentity, true);
- NGAP_DEBUG("[SCTP %d] Received Paging Identity amf_set_id %d, amf_pointer %d, m_tmsi %d\n",
- assoc_id,
- msg->ue_paging_identity.s_tmsi.amf_set_id,
- msg->ue_paging_identity.s_tmsi.amf_pointer,
- msg->ue_paging_identity.s_tmsi.m_tmsi);
- } else {
- return -1;
- }
+ struct NGAP_FiveG_S_TMSI *fiveG_S_TMSI = ie->value.choice.UEPagingIdentity.choice.fiveG_S_TMSI;
+ OCTET_STRING_TO_INT16(&fiveG_S_TMSI->aMFSetID, msg->ue_paging_identity.s_tmsi.amf_set_id);
+ OCTET_STRING_TO_INT8(&fiveG_S_TMSI->aMFPointer, msg->ue_paging_identity.s_tmsi.amf_pointer);
+ OCTET_STRING_TO_INT32(&fiveG_S_TMSI->fiveG_TMSI, msg->ue_paging_identity.s_tmsi.m_tmsi);
+ NGAP_DEBUG("[SCTP %d] Received Paging Identity amf_set_id %d, amf_pointer %d, m_tmsi %d\n",
+ assoc_id,
+ msg->ue_paging_identity.s_tmsi.amf_set_id,
+ msg->ue_paging_identity.s_tmsi.amf_pointer,
+ msg->ue_paging_identity.s_tmsi.m_tmsi);
- msg->paging_drx = NGAP_PAGING_DRX_256;
- /* id-pagingDRX */
- NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_PagingIEs_t, ie, container,
- NGAP_ProtocolIE_ID_id_PagingDRX, false);
+ msg->paging_drx = NGAP_PAGING_DRX_256;
+ /* id-pagingDRX */
+ NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_PagingIEs_t, ie, container, NGAP_ProtocolIE_ID_id_PagingDRX, false);
- /* optional */
- if (ie) {
- msg->paging_drx = ie->value.choice.PagingDRX;
- } else {
- msg->paging_drx = NGAP_PAGING_DRX_256;
- }
+ /* optional */
+ if (ie) {
+ msg->paging_drx = ie->value.choice.PagingDRX;
+ } else {
+ msg->paging_drx = NGAP_PAGING_DRX_256;
+ }
- memset (&msg->plmn_identity[0], 0, sizeof(plmn_identity_t)*256);
- memset (&msg->tac[0], 0, sizeof(int16_t)*256);
- msg->tai_size = 0;
/* id-TAIList */
NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_PagingIEs_t, ie, container,
NGAP_ProtocolIE_ID_id_TAIListForPaging, true);
- if (ie != NULL) { /* checked by macro but cppcheck doesn't see it */
- NGAP_INFO("[SCTP %d] Received Paging taiList For Paging: count %d\n", assoc_id, ie->value.choice.TAIListForPaging.list.count);
+ NGAP_INFO("[SCTP %d] Received Paging taiList For Paging: count %d\n", assoc_id, ie->value.choice.TAIListForPaging.list.count);
- for (int i = 0; i < ie->value.choice.TAIListForPaging.list.count; i++) {
- NGAP_TAIListForPagingItem_t *item_p;
- item_p = (NGAP_TAIListForPagingItem_t *)ie->value.choice.TAIListForPaging.list.array[i];
- TBCD_TO_MCC_MNC(&(item_p->tAI.pLMNIdentity), msg->plmn_identity[i].mcc,
- msg->plmn_identity[i].mnc,
- msg->plmn_identity[i].mnc_digit_length);
- OCTET_STRING_TO_INT16(&(item_p->tAI.tAC), msg->tac[i]);
- msg->tai_size++;
- NGAP_DEBUG("[SCTP %d] Received Paging: MCC %d, MNC %d, TAC %d\n", assoc_id,
- msg->plmn_identity[i].mcc,
- msg->plmn_identity[i].mnc,
- msg->tac[i]);
- }
- } else {
- return -1;
+ for (int i = 0; i < ie->value.choice.TAIListForPaging.list.count; i++) {
+ NGAP_TAIListForPagingItem_t *item_p;
+ item_p = (NGAP_TAIListForPagingItem_t *)ie->value.choice.TAIListForPaging.list.array[i];
+ TBCD_TO_MCC_MNC(&(item_p->tAI.pLMNIdentity), msg->plmn_identity[i].mcc, msg->plmn_identity[i].mnc, msg->plmn_identity[i].mnc_digit_length);
+ OCTET_STRING_TO_INT16(&(item_p->tAI.tAC), msg->tac[i]);
+ msg->tai_size++;
+ NGAP_DEBUG("[SCTP %d] Received Paging: MCC %d, MNC %d, TAC %d\n", assoc_id, msg->plmn_identity[i].mcc, msg->plmn_identity[i].mnc, msg->tac[i]);
}
//paging parameter values
@@ -1579,14 +1080,9 @@ int ngap_gNB_handle_paging(uint32_t assoc_id,
return 0;
}
-static
-int ngap_gNB_handle_pdusession_modify_request(uint32_t assoc_id,
- uint32_t stream,
- NGAP_NGAP_PDU_t *pdu) {
-
- int i, nb_of_pdusessions_failed;
- ngap_gNB_amf_data_t *amf_desc_p = NULL;
- ngap_gNB_ue_context_t *ue_desc_p = NULL;
+static int ngap_gNB_handle_pdusession_modify_request(uint32_t assoc_id, uint32_t stream, NGAP_NGAP_PDU_t *pdu)
+{
+ ngap_gNB_amf_data_t *amf_desc_p = NULL;
NGAP_PDUSessionResourceModifyRequest_t *container;
NGAP_PDUSessionResourceModifyRequestIEs_t *ie;
NGAP_RAN_UE_NGAP_ID_t gnb_ue_ngap_id;
@@ -1614,184 +1110,69 @@ int ngap_gNB_handle_pdusession_modify_request(uint32_t assoc_id,
NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_PDUSessionResourceModifyRequestIEs_t, ie, container,
NGAP_ProtocolIE_ID_id_RAN_UE_NGAP_ID, true);
- if (ie != NULL) { /* checked by macro but cppcheck doesn't see it */
gnb_ue_ngap_id = ie->value.choice.RAN_UE_NGAP_ID;
- } else {
- return -1;
- }
-
- if ((ue_desc_p = ngap_gNB_get_ue_context(amf_desc_p->ngap_gNB_instance,
- gnb_ue_ngap_id)) == NULL) {
- NGAP_ERROR("[SCTP %d] Received PDUSession Resource modify request for non "
- "existing UE context 0x%08lx\n", assoc_id,
- gnb_ue_ngap_id);
- return -1;
- }
+ ngap_gNB_ue_context_t *ue_desc_p = ngap_get_ue_context(gnb_ue_ngap_id);
+ if (!ue_desc_p) {
+ NGAP_ERROR(
+ "[SCTP %d] Received PDUSession Resource modify request for non "
+ "existing UE context 0x%08lx\n",
+ assoc_id,
+ gnb_ue_ngap_id);
+ return -1;
+ }
ue_desc_p->rx_stream = stream;
+ /* id-PDUSessionResourceModifyListModReq */
+ NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_PDUSessionResourceModifyRequestIEs_t, ie, container, NGAP_ProtocolIE_ID_id_PDUSessionResourceModifyListModReq, true);
if (ue_desc_p->amf_ue_ngap_id != amf_ue_ngap_id) {
NGAP_WARN("UE context amf_ue_ngap_id is different form that of the message (%ld != %ld)",
(uint64_t)ue_desc_p->amf_ue_ngap_id, amf_ue_ngap_id);
MessageDef *message_p = itti_alloc_new_message (TASK_RRC_GNB, 0, NGAP_PDUSESSION_MODIFY_RESP);
ngap_pdusession_modify_resp_t* msg=&NGAP_PDUSESSION_MODIFY_RESP(message_p);
+ memset(msg, 0, sizeof(*msg));
msg->gNB_ue_ngap_id = gnb_ue_ngap_id;
- NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_PDUSessionResourceModifyRequestIEs_t, ie, container,
- NGAP_ProtocolIE_ID_id_PDUSessionResourceModifyListModReq, true);
-
- if (ie != NULL) { /* checked by macro but cppcheck doesn't see it */
- for(nb_of_pdusessions_failed = 0; nb_of_pdusessions_failed < ie->value.choice.PDUSessionResourceModifyListModReq.list.count; nb_of_pdusessions_failed++) {
+ for (int nb_of_pdusessions_failed = 0; nb_of_pdusessions_failed < ie->value.choice.PDUSessionResourceModifyListModReq.list.count; nb_of_pdusessions_failed++) {
NGAP_PDUSessionResourceModifyItemModReq_t *item_p;
item_p = (NGAP_PDUSessionResourceModifyItemModReq_t *)ie->value.choice.PDUSessionResourceModifyListModReq.list.array[nb_of_pdusessions_failed];
-
- msg->pdusessions_failed[nb_of_pdusessions_failed].pdusession_id = item_p->pDUSessionID;
- msg->pdusessions_failed[nb_of_pdusessions_failed].cause = NGAP_CAUSE_RADIO_NETWORK;
- msg->pdusessions_failed[nb_of_pdusessions_failed].cause_value = NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID;
+ pdusession_failed_t *tmp = &msg->pdusessions_failed[nb_of_pdusessions_failed];
+ tmp->pdusession_id = item_p->pDUSessionID;
+ tmp->cause = NGAP_CAUSE_RADIO_NETWORK;
+ tmp->cause_value = NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID;
}
- } else {
- return -1;
- }
-
- msg->nb_of_pdusessions_failed = nb_of_pdusessions_failed;
+ msg->nb_of_pdusessions_failed = ie->value.choice.PDUSessionResourceModifyListModReq.list.count;
ngap_gNB_pdusession_modify_resp(amf_desc_p->ngap_gNB_instance->instance,msg);
- itti_free(TASK_RRC_GNB,message_p);
- message_p = NULL;
+ itti_free(TASK_RRC_GNB, message_p);
return -1;
}
MessageDef *message_p = itti_alloc_new_message(TASK_NGAP, 0, NGAP_PDUSESSION_MODIFY_REQ);
ngap_pdusession_modify_req_t * msg=&NGAP_PDUSESSION_MODIFY_REQ(message_p);
- msg->ue_initial_id = ue_desc_p->ue_initial_id;
+ memset(msg, 0, sizeof(*msg));
msg->amf_ue_ngap_id = amf_ue_ngap_id;
- msg->gNB_ue_ngap_id = gnb_ue_ngap_id;
- /* id-PDUSessionResourceModifyListModReq */
- NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_PDUSessionResourceModifyRequestIEs_t, ie, container,
- NGAP_ProtocolIE_ID_id_PDUSessionResourceModifyListModReq, true);
+ msg->gNB_ue_ngap_id = gnb_ue_ngap_id;
- if (ie != NULL) { /* checked by macro but cppcheck doesn't see it */
- msg->nb_pdusessions_tomodify =
- ie->value.choice.PDUSessionResourceModifyListModReq.list.count;
+ msg->nb_pdusessions_tomodify = ie->value.choice.PDUSessionResourceModifyListModReq.list.count;
- for (i = 0; i < ie->value.choice.PDUSessionResourceModifyListModReq.list.count; i++) {
- NGAP_PDUSessionResourceModifyItemModReq_t *item_p;
- asn_dec_rval_t dec_rval;
- NGAP_PDUSessionResourceModifyRequestTransfer_t *pdusessionTransfer_p = NULL;
- NGAP_PDUSessionResourceModifyRequestTransferIEs_t *pdusessionTransfer_ies = NULL;
-
- item_p = (NGAP_PDUSessionResourceModifyItemModReq_t *)ie->value.choice.PDUSessionResourceModifyListModReq.list.array[i];
-
- msg->pdusession_modify_params[i].pdusession_id = item_p->pDUSessionID;
+ for (int i = 0; i < ie->value.choice.PDUSessionResourceModifyListModReq.list.count; i++) {
+ NGAP_PDUSessionResourceModifyItemModReq_t *item_p = ie->value.choice.PDUSessionResourceModifyListModReq.list.array[i];
- // check for the NAS PDU
- if (item_p->nAS_PDU != NULL && item_p->nAS_PDU->size > 0 ) {
- msg->pdusession_modify_params[i].nas_pdu.length = item_p->nAS_PDU->size;
- msg->pdusession_modify_params[i].nas_pdu.buffer = malloc(sizeof(uint8_t) * item_p->nAS_PDU->size);
- memcpy(msg->pdusession_modify_params[i].nas_pdu.buffer,
- item_p->nAS_PDU->buf, item_p->nAS_PDU->size);
- } else {
- msg->pdusession_modify_params[i].nas_pdu.length = 0;
- msg->pdusession_modify_params[i].nas_pdu.buffer = NULL;
- continue;
- }
+ msg->pdusession_modify_params[i].pdusession_id = item_p->pDUSessionID;
- dec_rval = aper_decode(NULL,
- &asn_DEF_NGAP_PDUSessionResourceModifyRequestTransfer,
- (void **)&pdusessionTransfer_p,
- item_p->pDUSessionResourceModifyRequestTransfer.buf,
- item_p->pDUSessionResourceModifyRequestTransfer.size, 0, 0);
-
- if(dec_rval.code != RC_OK) {
- NGAP_ERROR("could not decode PDUSessionResourceModifyRequestTransfer\n");
- return -1;
- }
-
- for(int j=0; j< pdusessionTransfer_p->protocolIEs.list.count; j++) {
- pdusessionTransfer_ies = pdusessionTransfer_p->protocolIEs.list.array[j];
- switch(pdusessionTransfer_ies->id) {
- /* optional PDUSessionAggregateMaximumBitRate */
- case NGAP_ProtocolIE_ID_id_PDUSessionAggregateMaximumBitRate:
- // TODO
- NGAP_ERROR("Cant' handle NGAP_ProtocolIE_ID_id_PDUSessionAggregateMaximumBitRate\n");
- break;
-
- /* optional UL-NGU-UP-TNLModifyList */
- case NGAP_ProtocolIE_ID_id_UL_NGU_UP_TNLModifyList:
- // TODO
- NGAP_ERROR("Cant' handle NGAP_ProtocolIE_ID_id_UL_NGU_UP_TNLModifyList\n");
- break;
-
- /* optional NetworkInstance */
- case NGAP_ProtocolIE_ID_id_NetworkInstance:
- // TODO
- NGAP_ERROR("Cant' handle NGAP_ProtocolIE_ID_id_NetworkInstance\n");
- break;
-
- /* optional QosFlowAddOrModifyRequestList */
- case NGAP_ProtocolIE_ID_id_QosFlowAddOrModifyRequestList:
- {
- NGAP_QosFlowAddOrModifyRequestItem_t *qosFlowItem_p;
-
- NGAP_DEBUG("QosFlowAddOrModifyRequestList.list.count %d\n", pdusessionTransfer_ies->value.choice.QosFlowAddOrModifyRequestList.list.count);
- DevAssert(pdusessionTransfer_ies->value.choice.QosFlowAddOrModifyRequestList.list.count > 0);
- DevAssert(pdusessionTransfer_ies->value.choice.QosFlowAddOrModifyRequestList.list.count <= NGAP_maxnoofQosFlows);
-
- msg->pdusession_modify_params[i].nb_qos = pdusessionTransfer_ies->value.choice.QosFlowAddOrModifyRequestList.list.count;
-
- for(int qosIdx = 0; qosIdx < pdusessionTransfer_ies->value.choice.QosFlowAddOrModifyRequestList.list.count; qosIdx++) {
- qosFlowItem_p = pdusessionTransfer_ies->value.choice.QosFlowAddOrModifyRequestList.list.array[qosIdx];
-
- /* Set the QOS informations */
- msg->pdusession_modify_params[i].qos[qosIdx].qfi = (uint8_t)qosFlowItem_p->qosFlowIdentifier;
- if(qosFlowItem_p->qosFlowLevelQosParameters) {
- if (qosFlowItem_p->qosFlowLevelQosParameters->qosCharacteristics.present == NGAP_QosCharacteristics_PR_nonDynamic5QI) {
- msg->pdusession_modify_params[i].qos[qosIdx].fiveQI =
- qosFlowItem_p->qosFlowLevelQosParameters->qosCharacteristics.choice.nonDynamic5QI->fiveQI;
- } else if (qosFlowItem_p->qosFlowLevelQosParameters->qosCharacteristics.present == NGAP_QosCharacteristics_PR_dynamic5QI) {
- // TODO
- }
- msg->pdusession_modify_params[i].qos[qosIdx].allocation_retention_priority.priority_level =
- qosFlowItem_p->qosFlowLevelQosParameters->allocationAndRetentionPriority.priorityLevelARP;
- msg->pdusession_modify_params[i].qos[qosIdx].allocation_retention_priority.pre_emp_capability =
- qosFlowItem_p->qosFlowLevelQosParameters->allocationAndRetentionPriority.pre_emptionCapability;
- msg->pdusession_modify_params[i].qos[qosIdx].allocation_retention_priority.pre_emp_vulnerability =
- qosFlowItem_p->qosFlowLevelQosParameters->allocationAndRetentionPriority.pre_emptionVulnerability;
- }
- }
- }
- break;
-
- /* optional QosFlowToReleaseList */
- case NGAP_ProtocolIE_ID_id_QosFlowToReleaseList:
- // TODO
- NGAP_ERROR("Cant' handle NGAP_ProtocolIE_ID_id_QosFlowToReleaseList\n");
- break;
-
- /* optional AdditionalUL-NGU-UP-TNLInformation */
- case NGAP_ProtocolIE_ID_id_AdditionalUL_NGU_UP_TNLInformation:
- // TODO
- NGAP_ERROR("Cant' handle NGAP_ProtocolIE_ID_id_AdditionalUL_NGU_UP_TNLInformation\n");
- break;
-
- /* optional CommonNetworkInstance */
- case NGAP_ProtocolIE_ID_id_CommonNetworkInstance:
- // TODO
- NGAP_ERROR("Cant' handle NGAP_ProtocolIE_ID_id_CommonNetworkInstance\n");
- break;
-
- default:
- NGAP_ERROR("could not found protocolIEs id %ld\n", pdusessionTransfer_ies->id);
- return -1;
- }
- }
+ // check for the NAS PDU
+ if (item_p->nAS_PDU != NULL && item_p->nAS_PDU->size > 0) {
+ allocCopy(&msg->pdusession_modify_params[i].nas_pdu, *item_p->nAS_PDU);
+ allocCopy(&msg->pdusession_modify_params[i].pdusessionTransfer, item_p->pDUSessionResourceModifyRequestTransfer);
+ } else {
+ LOG_W(NGAP, "received pdu session modify with void content for UE %u, pdu session %lu\n", msg->gNB_ue_ngap_id, item_p->pDUSessionID);
+ continue;
}
-
- itti_send_msg_to_task(TASK_RRC_GNB, ue_desc_p->gNB_instance->instance, message_p);
- } else { /* of if (ie != NULL)*/
- return -1;
}
+ itti_send_msg_to_task(TASK_RRC_GNB, ue_desc_p->gNB_instance->instance, message_p);
return 0;
}
+
// handle pdu session release command and send it to rrc_end
static
int ngap_gNB_handle_pdusession_release_command(uint32_t assoc_id,
@@ -1799,8 +1180,7 @@ int ngap_gNB_handle_pdusession_release_command(uint32_t assoc_id,
NGAP_NGAP_PDU_t *pdu) {
int i;
- ngap_gNB_amf_data_t *amf_desc_p = NULL;
- ngap_gNB_ue_context_t *ue_desc_p = NULL;
+ ngap_gNB_amf_data_t *amf_desc_p = NULL;
NGAP_PDUSessionResourceReleaseCommand_t *container;
NGAP_PDUSessionResourceReleaseCommandIEs_t *ie;
NGAP_RAN_UE_NGAP_ID_t gnb_ue_ngap_id;
@@ -1834,20 +1214,13 @@ int ngap_gNB_handle_pdusession_release_command(uint32_t assoc_id,
return -1;
}
- if ((ue_desc_p = ngap_gNB_get_ue_context(amf_desc_p->ngap_gNB_instance,
- gnb_ue_ngap_id)) == NULL) {
+ ngap_gNB_ue_context_t *ue_desc_p = ngap_get_ue_context(gnb_ue_ngap_id);
+ if (!ue_desc_p) {
NGAP_ERROR("[SCTP %d] Received PDUSession Resource release command for non existing UE context 0x%08lx\n", assoc_id,
ie->value.choice.RAN_UE_NGAP_ID);
return -1;
}
- /* Initial context request = UE-related procedure -> stream != 0 */
- // if (stream == 0) {
- // NGAP_ERROR("[SCTP %d] Received UE-related procedure on stream (%d)\n",
- // assoc_id, stream);
- // return -1;
- // }
-
ue_desc_p->rx_stream = stream;
if (ue_desc_p->amf_ue_ngap_id != amf_ue_ngap_id) {
@@ -1859,6 +1232,7 @@ int ngap_gNB_handle_pdusession_release_command(uint32_t assoc_id,
assoc_id, gnb_ue_ngap_id, amf_ue_ngap_id);
MessageDef * message_p = itti_alloc_new_message(TASK_NGAP, 0, NGAP_PDUSESSION_RELEASE_COMMAND);
ngap_pdusession_release_command_t * msg=&NGAP_PDUSESSION_RELEASE_COMMAND(message_p);
+ memset(msg, 0, sizeof(*msg));
msg->gNB_ue_ngap_id = gnb_ue_ngap_id;
msg->amf_ue_ngap_id = amf_ue_ngap_id;
@@ -1866,44 +1240,20 @@ int ngap_gNB_handle_pdusession_release_command(uint32_t assoc_id,
NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_PDUSessionResourceReleaseCommandIEs_t, ie, container,
NGAP_ProtocolIE_ID_id_NAS_PDU, false);
- if(ie && ie->value.choice.NAS_PDU.size > 0) {
- msg->nas_pdu.length = ie->value.choice.NAS_PDU.size;
- msg->nas_pdu.buffer = malloc(sizeof(uint8_t) * ie->value.choice.NAS_PDU.size);
- memcpy(msg->nas_pdu.buffer,
- ie->value.choice.NAS_PDU.buf,
- ie->value.choice.NAS_PDU.size);
- } else {
- msg->nas_pdu.length = 0;
- msg->nas_pdu.buffer = NULL;
- }
+ if (ie)
+ allocCopy(&msg->nas_pdu, ie->value.choice.NAS_PDU);
/* id-PDUSessionResourceToReleaseListRelCmd */
NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_PDUSessionResourceReleaseCommandIEs_t, ie, container,
NGAP_ProtocolIE_ID_id_PDUSessionResourceToReleaseListRelCmd, true);
- if (ie != NULL) { /* checked by macro but cppcheck doesn't see it */
- msg->nb_pdusessions_torelease = ie->value.choice.PDUSessionResourceToReleaseListRelCmd.list.count;
+ msg->nb_pdusessions_torelease = ie->value.choice.PDUSessionResourceToReleaseListRelCmd.list.count;
- for (i = 0; i < ie->value.choice.PDUSessionResourceToReleaseListRelCmd.list.count; i++) {
- NGAP_PDUSessionResourceToReleaseItemRelCmd_t *item_p;
- item_p = (NGAP_PDUSessionResourceToReleaseItemRelCmd_t *)ie->value.choice.PDUSessionResourceToReleaseListRelCmd.list.array[i];
-
- msg->pdusession_release_params[i].pdusession_id = item_p->pDUSessionID;
- if(item_p->pDUSessionResourceReleaseCommandTransfer.size > 0) {
- msg->pdusession_release_params[i].transfer_length = item_p->pDUSessionResourceReleaseCommandTransfer.size;
- msg->pdusession_release_params[i].transfer_buffer = malloc(sizeof(uint8_t) * item_p->pDUSessionResourceReleaseCommandTransfer.size);
- memcpy(msg->pdusession_release_params[i].transfer_buffer,
- item_p->pDUSessionResourceReleaseCommandTransfer.buf,
- item_p->pDUSessionResourceReleaseCommandTransfer.size);
- }else {
- msg->pdusession_release_params[i].transfer_length = 0;
- msg->pdusession_release_params[i].transfer_buffer = NULL;
- NGAP_ERROR("[NGAP] Received pdu session release command for pDUSessionResourceReleaseCommandTransfer is NULL!\n");
- }
- NGAP_DEBUG("[NGAP] Received pdu session release command for pDUSessionID id %ld\n", item_p->pDUSessionID);
- }
- } else {
- return -1;
+ for (i = 0; i < ie->value.choice.PDUSessionResourceToReleaseListRelCmd.list.count; i++) {
+ NGAP_PDUSessionResourceToReleaseItemRelCmd_t *item_p;
+ item_p = ie->value.choice.PDUSessionResourceToReleaseListRelCmd.list.array[i];
+ msg->pdusession_release_params[i].pdusession_id = item_p->pDUSessionID;
+ allocCopy(&msg->pdusession_release_params[i].data, item_p->pDUSessionResourceReleaseCommandTransfer);
}
itti_send_msg_to_task(TASK_RRC_GNB, ue_desc_p->gNB_instance->instance, message_p);
@@ -1937,3 +1287,94 @@ int ngap_gNB_handle_ng_ENDC_pdusession_modification_confirm(uint32_t
return 0;
}
+/* Handlers matrix. Only gNB related procedure present here */
+ngap_message_decoded_callback ngap_messages_callback[][3] = {
+ {0, 0, 0}, /* AMFConfigurationUpdate */
+ {0, 0, 0}, /* AMFStatusIndication */
+ {0, 0, 0}, /* CellTrafficTrace */
+ {ngap_gNB_handle_deactivate_trace, 0, 0}, /* DeactivateTrace */
+ {ngap_gNB_handle_nas_downlink, 0, 0}, /* DownlinkNASTransport */
+ {0, 0, 0}, /* DownlinkNonUEAssociatedNRPPaTransport */
+ {0, 0, 0}, /* DownlinkRANConfigurationTransfer */
+ {0, 0, 0}, /* DownlinkRANStatusTransfer */
+ {0, 0, 0}, /* DownlinkUEAssociatedNRPPaTransport */
+ {ngap_gNB_handle_error_indication, 0, 0}, /* ErrorIndication */
+ {0, 0, 0}, /* HandoverCancel */
+ {0, 0, 0}, /* HandoverNotification */
+ {0, 0, 0}, /* HandoverPreparation */
+ {0, 0, 0}, /* HandoverResourceAllocation */
+ {ngap_gNB_handle_initial_context_request, 0, 0}, /* InitialContextSetup */
+ {0, 0, 0}, /* InitialUEMessage */
+ {0, 0, 0}, /* LocationReportingControl */
+ {0, 0, 0}, /* LocationReportingFailureIndication */
+ {0, 0, 0}, /* LocationReport */
+ {0, 0, 0}, /* NASNonDeliveryIndication */
+ {0, 0, 0}, /* NGReset */
+ {0, ngap_gNB_handle_ng_setup_response, ngap_gNB_handle_ng_setup_failure}, /* NGSetup */
+ {0, 0, 0}, /* OverloadStart */
+ {0, 0, 0}, /* OverloadStop */
+ {ngap_gNB_handle_paging, 0, 0}, /* Paging */
+ {0, ngap_gNB_handle_ng_path_switch_request_ack, ngap_gNB_handle_ng_path_switch_request_failure}, /* PathSwitchRequest */
+ {ngap_gNB_handle_pdusession_modify_request, 0, 0}, /* PDUSessionResourceModify */
+ {0, ngap_gNB_handle_ng_ENDC_pdusession_modification_confirm, 0}, /* PDUSessionResourceModifyIndication */
+ {ngap_gNB_handle_pdusession_release_command, 0, 0}, /* PDUSessionResourceRelease */
+ {ngap_gNB_handle_pdusession_setup_request, 0, 0}, /* PDUSessionResourceSetup */
+ {0, 0, 0}, /* PDUSessionResourceNotify */
+ {0, 0, 0}, /* PrivateMessage */
+ {0, 0, 0}, /* PWSCancel */
+ {0, 0, 0}, /* PWSFailureIndication */
+ {0, 0, 0}, /* PWSRestartIndication */
+ {0, 0, 0}, /* RANConfigurationUpdate */
+ {0, 0, 0}, /* RerouteNASRequest */
+ {0, 0, 0}, /* RRCInactiveTransitionReport */
+ {0, 0, 0}, /* TraceFailureIndication */
+ {ngap_gNB_handle_trace_start, 0, 0}, /* TraceStart */
+ {0, 0, 0}, /* UEContextModification */
+ {ngap_gNB_handle_ue_context_release_command, 0, 0}, /* UEContextRelease */
+ {0, 0, 0}, /* UEContextReleaseRequest */
+ {0, 0, 0}, /* UERadioCapabilityCheck */
+ {0, 0, 0}, /* UERadioCapabilityInfoIndication */
+ {0, 0, 0}, /* UETNLABindingRelease */
+ {0, 0, 0}, /* UplinkNASTransport */
+ {0, 0, 0}, /* UplinkNonUEAssociatedNRPPaTransport */
+ {0, 0, 0}, /* UplinkRANConfigurationTransfer */
+ {0, 0, 0}, /* UplinkRANStatusTransfer */
+ {0, 0, 0}, /* UplinkUEAssociatedNRPPaTransport */
+ {0, 0, 0}, /* WriteReplaceWarning */
+ {0, 0, 0}, /* SecondaryRATDataUsageReport */
+
+};
+
+int ngap_gNB_handle_message(uint32_t assoc_id, int32_t stream, const uint8_t *const data, const uint32_t data_length)
+{
+ NGAP_NGAP_PDU_t pdu;
+ int ret;
+ DevAssert(data != NULL);
+ memset(&pdu, 0, sizeof(pdu));
+
+ if (ngap_gNB_decode_pdu(&pdu, data, data_length) < 0) {
+ NGAP_ERROR("Failed to decode PDU\n");
+ return -1;
+ }
+
+ /* Checking procedure Code and direction of message */
+ if (pdu.choice.initiatingMessage->procedureCode >= sizeof(ngap_messages_callback) / (3 * sizeof(ngap_message_decoded_callback)) || (pdu.present > NGAP_NGAP_PDU_PR_unsuccessfulOutcome)) {
+ NGAP_ERROR("[SCTP %d] Either procedureCode %ld or direction %d exceed expected\n", assoc_id, pdu.choice.initiatingMessage->procedureCode, pdu.present);
+ ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_NGAP_NGAP_PDU, &pdu);
+ return -1;
+ }
+
+ /* No handler present.
+ * This can mean not implemented or no procedure for gNB (wrong direction).
+ */
+ if (ngap_messages_callback[pdu.choice.initiatingMessage->procedureCode][pdu.present - 1] == NULL) {
+ NGAP_ERROR("[SCTP %d] No handler for procedureCode %ld in %s\n", assoc_id, pdu.choice.initiatingMessage->procedureCode, ngap_direction2String(pdu.present - 1));
+ ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_NGAP_NGAP_PDU, &pdu);
+ return -1;
+ }
+
+ /* Calling the right handler */
+ ret = (*ngap_messages_callback[pdu.choice.initiatingMessage->procedureCode][pdu.present - 1])(assoc_id, stream, &pdu);
+ ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_NGAP_NGAP_PDU, &pdu);
+ return ret;
+}
diff --git a/openair3/NGAP/ngap_gNB_itti_messaging.c b/openair3/NGAP/ngap_gNB_itti_messaging.c
index ab10fa46e2..87b4ba4c73 100644
--- a/openair3/NGAP/ngap_gNB_itti_messaging.c
+++ b/openair3/NGAP/ngap_gNB_itti_messaging.c
@@ -44,16 +44,12 @@ void ngap_gNB_itti_send_sctp_data_req(instance_t instance, int32_t assoc_id, uin
sctp_data_req->assoc_id = assoc_id;
sctp_data_req->buffer = buffer;
sctp_data_req->buffer_length = buffer_length;
- sctp_data_req->stream = stream;
+ sctp_data_req->stream = stream;
itti_send_msg_to_task(TASK_SCTP, instance, message_p);
}
-void ngap_gNB_itti_send_nas_downlink_ind(instance_t instance,
- uint16_t ue_initial_id,
- uint32_t gNB_ue_ngap_id,
- uint8_t *nas_pdu,
- uint32_t nas_pdu_length)
+void ngap_gNB_itti_send_nas_downlink_ind(instance_t instance, uint32_t gNB_ue_ngap_id, uint8_t *nas_pdu, uint32_t nas_pdu_length)
{
MessageDef *message_p;
ngap_downlink_nas_t *ngap_downlink_nas;
@@ -62,7 +58,6 @@ void ngap_gNB_itti_send_nas_downlink_ind(instance_t instance,
ngap_downlink_nas = &message_p->ittiMsg.ngap_downlink_nas;
- ngap_downlink_nas->ue_initial_id = ue_initial_id;
ngap_downlink_nas->gNB_ue_ngap_id = gNB_ue_ngap_id;
ngap_downlink_nas->nas_pdu.buffer = malloc(sizeof(uint8_t) * nas_pdu_length);
memcpy(ngap_downlink_nas->nas_pdu.buffer, nas_pdu, nas_pdu_length);
diff --git a/openair3/NGAP/ngap_gNB_itti_messaging.h b/openair3/NGAP/ngap_gNB_itti_messaging.h
index 94d4058178..08224a27f5 100644
--- a/openair3/NGAP/ngap_gNB_itti_messaging.h
+++ b/openair3/NGAP/ngap_gNB_itti_messaging.h
@@ -33,11 +33,7 @@
void ngap_gNB_itti_send_sctp_data_req(instance_t instance, int32_t assoc_id, uint8_t *buffer,
uint32_t buffer_length, uint16_t stream);
-void ngap_gNB_itti_send_nas_downlink_ind(instance_t instance,
- uint16_t ue_initial_id,
- uint32_t gNB_ue_ngap_id,
- uint8_t *nas_pdu,
- uint32_t nas_pdu_length);
+void ngap_gNB_itti_send_nas_downlink_ind(instance_t instance, uint32_t gNB_ue_ngap_id, uint8_t *nas_pdu, uint32_t nas_pdu_length);
void ngap_gNB_itti_send_sctp_close_association(instance_t instance,
int32_t assoc_id);
diff --git a/openair3/NGAP/ngap_gNB_nas_procedures.c b/openair3/NGAP/ngap_gNB_nas_procedures.c
index 7c5fb453f2..fdbe6ce0f9 100644
--- a/openair3/NGAP/ngap_gNB_nas_procedures.c
+++ b/openair3/NGAP/ngap_gNB_nas_procedures.c
@@ -49,73 +49,80 @@
#include "ngap_gNB_nas_procedures.h"
#include "ngap_gNB_management_procedures.h"
+static void allocCopy(OCTET_STRING_t *out, ngap_pdu_t in)
+{
+ if (in.length) {
+ out->buf = malloc(in.length);
+ memcpy(out->buf, in.buffer, in.length);
+ }
+ out->size = in.length;
+}
+
+static void allocAddrCopy(BIT_STRING_t *out, ngap_transport_layer_addr_t in)
+{
+ if (in.length) {
+ out->buf = malloc(in.length);
+ memcpy(out->buf, in.buffer, in.length);
+ out->size = in.length;
+ out->bits_unused = 0;
+ }
+}
+
//------------------------------------------------------------------------------
-int ngap_gNB_handle_nas_first_req(
- instance_t instance, ngap_nas_first_req_t *ngap_nas_first_req_p)
+int ngap_gNB_handle_nas_first_req(instance_t instance, ngap_nas_first_req_t *UEfirstReq)
//------------------------------------------------------------------------------
{
ngap_gNB_instance_t *instance_p = NULL;
- struct ngap_gNB_amf_data_s *amf_desc_p = NULL;
- struct ngap_gNB_ue_context_s *ue_desc_p = NULL;
- NGAP_NGAP_PDU_t pdu;
- NGAP_InitialUEMessage_t *out;
- NGAP_InitialUEMessage_IEs_t *ie;
- NGAP_UserLocationInformationNR_t *userinfo_nr_p = NULL;
+ struct ngap_gNB_amf_data_s *amf_desc_p = NULL;
+ NGAP_NGAP_PDU_t pdu;
uint8_t *buffer = NULL;
uint32_t length = 0;
- DevAssert(ngap_nas_first_req_p != NULL);
+ DevAssert(UEfirstReq != NULL);
/* Retrieve the NGAP gNB instance associated with Mod_id */
instance_p = ngap_gNB_get_instance(instance);
DevAssert(instance_p != NULL);
memset(&pdu, 0, sizeof(pdu));
pdu.present = NGAP_NGAP_PDU_PR_initiatingMessage;
- pdu.choice.initiatingMessage = (NGAP_InitiatingMessage_t *)calloc(1,sizeof(NGAP_InitiatingMessage_t));
- pdu.choice.initiatingMessage->procedureCode = NGAP_ProcedureCode_id_InitialUEMessage;
- pdu.choice.initiatingMessage->criticality = NGAP_Criticality_ignore;
- pdu.choice.initiatingMessage->value.present = NGAP_InitiatingMessage__value_PR_InitialUEMessage;
- out = &pdu.choice.initiatingMessage->value.choice.InitialUEMessage;
+ asn1cCalloc(pdu.choice.initiatingMessage, head);
+ head->procedureCode = NGAP_ProcedureCode_id_InitialUEMessage;
+ head->criticality = NGAP_Criticality_ignore;
+ head->value.present = NGAP_InitiatingMessage__value_PR_InitialUEMessage;
+ NGAP_InitialUEMessage_t *out = &head->value.choice.InitialUEMessage;
/* Select the AMF corresponding to the provided GUAMI. */
//TODO have not be test. it's should be test
- if (ngap_nas_first_req_p->ue_identity.presenceMask & NGAP_UE_IDENTITIES_guami) {
- amf_desc_p = ngap_gNB_nnsf_select_amf_by_guami(
- instance_p,
- ngap_nas_first_req_p->establishment_cause,
- ngap_nas_first_req_p->ue_identity.guami);
+ if (UEfirstReq->ue_identity.presenceMask & NGAP_UE_IDENTITIES_guami) {
+ amf_desc_p = ngap_gNB_nnsf_select_amf_by_guami(instance_p, UEfirstReq->establishment_cause, UEfirstReq->ue_identity.guami);
if (amf_desc_p) {
- NGAP_INFO("[gNB %ld] Chose AMF '%s' (assoc_id %d) through GUAMI MCC %d MNC %d AMFRI %d AMFSI %d AMFPT %d\n",
- instance,
- amf_desc_p->amf_name,
- amf_desc_p->assoc_id,
- ngap_nas_first_req_p->ue_identity.guami.mcc,
- ngap_nas_first_req_p->ue_identity.guami.mnc,
- ngap_nas_first_req_p->ue_identity.guami.amf_region_id,
- ngap_nas_first_req_p->ue_identity.guami.amf_set_id,
- ngap_nas_first_req_p->ue_identity.guami.amf_pointer);
+ NGAP_INFO("[gNB %ld] Chose AMF '%s' (assoc_id %d) through GUAMI MCC %d MNC %d AMFRI %d AMFSI %d AMFPT %d\n",
+ instance,
+ amf_desc_p->amf_name,
+ amf_desc_p->assoc_id,
+ UEfirstReq->ue_identity.guami.mcc,
+ UEfirstReq->ue_identity.guami.mnc,
+ UEfirstReq->ue_identity.guami.amf_region_id,
+ UEfirstReq->ue_identity.guami.amf_set_id,
+ UEfirstReq->ue_identity.guami.amf_pointer);
}
}
if (amf_desc_p == NULL) {
/* Select the AMF corresponding to the provided s-TMSI. */
//TODO have not be test. it's should be test
- if (ngap_nas_first_req_p->ue_identity.presenceMask & NGAP_UE_IDENTITIES_FiveG_s_tmsi) {
- amf_desc_p = ngap_gNB_nnsf_select_amf_by_amf_setid(
- instance_p,
- ngap_nas_first_req_p->establishment_cause,
- ngap_nas_first_req_p->selected_plmn_identity,
- ngap_nas_first_req_p->ue_identity.s_tmsi.amf_set_id);
+ if (UEfirstReq->ue_identity.presenceMask & NGAP_UE_IDENTITIES_FiveG_s_tmsi) {
+ amf_desc_p = ngap_gNB_nnsf_select_amf_by_amf_setid(instance_p, UEfirstReq->establishment_cause, UEfirstReq->selected_plmn_identity, UEfirstReq->ue_identity.s_tmsi.amf_set_id);
- if (amf_desc_p) {
- NGAP_INFO("[gNB %ld] Chose AMF '%s' (assoc_id %d) through S-TMSI AMFSI %d and selected PLMN Identity index %d MCC %d MNC %d\n",
- instance,
- amf_desc_p->amf_name,
- amf_desc_p->assoc_id,
- ngap_nas_first_req_p->ue_identity.s_tmsi.amf_set_id,
- ngap_nas_first_req_p->selected_plmn_identity,
- instance_p->mcc[ngap_nas_first_req_p->selected_plmn_identity],
- instance_p->mnc[ngap_nas_first_req_p->selected_plmn_identity]);
- }
+ if (amf_desc_p) {
+ NGAP_INFO("[gNB %ld] Chose AMF '%s' (assoc_id %d) through S-TMSI AMFSI %d and selected PLMN Identity index %d MCC %d MNC %d\n",
+ instance,
+ amf_desc_p->amf_name,
+ amf_desc_p->assoc_id,
+ UEfirstReq->ue_identity.s_tmsi.amf_set_id,
+ UEfirstReq->selected_plmn_identity,
+ instance_p->mcc[UEfirstReq->selected_plmn_identity],
+ instance_p->mnc[UEfirstReq->selected_plmn_identity]);
+ }
}
}
@@ -123,19 +130,16 @@ int ngap_gNB_handle_nas_first_req(
/* Select AMF based on the selected PLMN identity, received through RRC
* Connection Setup Complete */
//TODO have not be test. it's should be test
- amf_desc_p = ngap_gNB_nnsf_select_amf_by_plmn_id(
- instance_p,
- ngap_nas_first_req_p->establishment_cause,
- ngap_nas_first_req_p->selected_plmn_identity);
+ amf_desc_p = ngap_gNB_nnsf_select_amf_by_plmn_id(instance_p, UEfirstReq->establishment_cause, UEfirstReq->selected_plmn_identity);
if (amf_desc_p) {
- NGAP_INFO("[gNB %ld] Chose AMF '%s' (assoc_id %d) through selected PLMN Identity index %d MCC %d MNC %d\n",
- instance,
- amf_desc_p->amf_name,
- amf_desc_p->assoc_id,
- ngap_nas_first_req_p->selected_plmn_identity,
- instance_p->mcc[ngap_nas_first_req_p->selected_plmn_identity],
- instance_p->mnc[ngap_nas_first_req_p->selected_plmn_identity]);
+ NGAP_INFO("[gNB %ld] Chose AMF '%s' (assoc_id %d) through selected PLMN Identity index %d MCC %d MNC %d\n",
+ instance,
+ amf_desc_p->amf_name,
+ amf_desc_p->assoc_id,
+ UEfirstReq->selected_plmn_identity,
+ instance_p->mcc[UEfirstReq->selected_plmn_identity],
+ instance_p->mnc[UEfirstReq->selected_plmn_identity]);
}
}
@@ -145,15 +149,10 @@ int ngap_gNB_handle_nas_first_req(
* identity, selects the AMF with the highest capacity.
*/
//TODO have not be test. it's should be test
- amf_desc_p = ngap_gNB_nnsf_select_amf(
- instance_p,
- ngap_nas_first_req_p->establishment_cause);
+ amf_desc_p = ngap_gNB_nnsf_select_amf(instance_p, UEfirstReq->establishment_cause);
if (amf_desc_p) {
- NGAP_INFO("[gNB %ld] Chose AMF '%s' (assoc_id %d) through highest relative capacity\n",
- instance,
- amf_desc_p->amf_name,
- amf_desc_p->assoc_id);
+ NGAP_INFO("[gNB %ld] Chose AMF '%s' (assoc_id %d) through highest relative capacity\n", instance, amf_desc_p->amf_name, amf_desc_p->assoc_id);
}
}
@@ -170,120 +169,94 @@ int ngap_gNB_handle_nas_first_req(
/* The gNB should allocate a unique gNB UE NGAP ID for this UE. The value
* will be used for the duration of the connectivity.
*/
- ue_desc_p = ngap_gNB_allocate_new_UE_context();
+ struct ngap_gNB_ue_context_s *ue_desc_p = calloc(1, sizeof(*ue_desc_p));
DevAssert(ue_desc_p != NULL);
/* Keep a reference to the selected AMF */
ue_desc_p->amf_ref = amf_desc_p;
- ue_desc_p->ue_initial_id = ngap_nas_first_req_p->ue_initial_id;
+ ue_desc_p->gNB_ue_ngap_id = UEfirstReq->gNB_ue_ngap_id;
ue_desc_p->gNB_instance = instance_p;
- ue_desc_p->selected_plmn_identity = ngap_nas_first_req_p->selected_plmn_identity;
+ ue_desc_p->selected_plmn_identity = UEfirstReq->selected_plmn_identity;
- do {
- struct ngap_gNB_ue_context_s *collision_p;
- /* Peek a random value for the gNB_ue_ngap_id */
- ue_desc_p->gNB_ue_ngap_id = (random() + random()) & 0xffffffff;
-
- if ((collision_p = RB_INSERT(ngap_ue_map, &instance_p->ngap_ue_head, ue_desc_p))
- == NULL) {
- NGAP_DEBUG("Found usable gNB_ue_ngap_id: 0x%08x %u(10)\n",
- ue_desc_p->gNB_ue_ngap_id,
- ue_desc_p->gNB_ue_ngap_id);
- /* Break the loop as the id is not already used by another UE */
- break;
- }
- } while(1);
+ // insert in master table
+ ngap_store_ue_context(ue_desc_p);
/* mandatory */
- ie = (NGAP_InitialUEMessage_IEs_t *)calloc(1, sizeof(NGAP_InitialUEMessage_IEs_t));
- ie->id = NGAP_ProtocolIE_ID_id_RAN_UE_NGAP_ID;
- ie->criticality = NGAP_Criticality_reject;
- ie->value.present = NGAP_InitialUEMessage_IEs__value_PR_RAN_UE_NGAP_ID;
- ie->value.choice.RAN_UE_NGAP_ID = ue_desc_p->gNB_ue_ngap_id;
- asn1cSeqAdd(&out->protocolIEs.list, ie);
+ {
+ asn1cSequenceAdd(out->protocolIEs.list, NGAP_InitialUEMessage_IEs_t, ie);
+ ie->id = NGAP_ProtocolIE_ID_id_RAN_UE_NGAP_ID;
+ ie->criticality = NGAP_Criticality_reject;
+ ie->value.present = NGAP_InitialUEMessage_IEs__value_PR_RAN_UE_NGAP_ID;
+ ie->value.choice.RAN_UE_NGAP_ID = ue_desc_p->gNB_ue_ngap_id;
+ }
/* mandatory */
- ie = (NGAP_InitialUEMessage_IEs_t *)calloc(1, sizeof(NGAP_InitialUEMessage_IEs_t));
- ie->id = NGAP_ProtocolIE_ID_id_NAS_PDU;
- ie->criticality = NGAP_Criticality_reject;
- ie->value.present = NGAP_InitialUEMessage_IEs__value_PR_NAS_PDU;
-#if 1
- ie->value.choice.NAS_PDU.buf = ngap_nas_first_req_p->nas_pdu.buffer;
-#else
- ie->value.choice.NAS_PDU.buf = malloc(ngap_nas_first_req_p->nas_pdu.length);
- memcpy(ie->value.choice.NAS_PDU.buf,
- ngap_nas_first_req_p->nas_pdu.buffer,
- ngap_nas_first_req_p->nas_pdu.length);
-#endif
- ie->value.choice.NAS_PDU.size = ngap_nas_first_req_p->nas_pdu.length;
- asn1cSeqAdd(&out->protocolIEs.list, ie);
-
+ {
+ asn1cSequenceAdd(out->protocolIEs.list, NGAP_InitialUEMessage_IEs_t, ie);
+ ie->id = NGAP_ProtocolIE_ID_id_NAS_PDU;
+ ie->criticality = NGAP_Criticality_reject;
+ ie->value.present = NGAP_InitialUEMessage_IEs__value_PR_NAS_PDU;
+ allocCopy(&ie->value.choice.NAS_PDU, UEfirstReq->nas_pdu);
+ }
+
/* mandatory */
- ie = (NGAP_InitialUEMessage_IEs_t *)calloc(1, sizeof(NGAP_InitialUEMessage_IEs_t));
- ie->id = NGAP_ProtocolIE_ID_id_UserLocationInformation;
- ie->criticality = NGAP_Criticality_reject;
- ie->value.present = NGAP_InitialUEMessage_IEs__value_PR_UserLocationInformation;
+ {
+ asn1cSequenceAdd(out->protocolIEs.list, NGAP_InitialUEMessage_IEs_t, ie);
+ ie->id = NGAP_ProtocolIE_ID_id_UserLocationInformation;
+ ie->criticality = NGAP_Criticality_reject;
+ ie->value.present = NGAP_InitialUEMessage_IEs__value_PR_UserLocationInformation;
- ie->value.choice.UserLocationInformation.present = NGAP_UserLocationInformation_PR_userLocationInformationNR;
+ ie->value.choice.UserLocationInformation.present = NGAP_UserLocationInformation_PR_userLocationInformationNR;
- ie->value.choice.UserLocationInformation.choice.userLocationInformationNR =
- CALLOC(1, sizeof(*ie->value.choice.UserLocationInformation.choice.userLocationInformationNR));
- userinfo_nr_p = ie->value.choice.UserLocationInformation.choice.userLocationInformationNR;
+ asn1cCalloc(ie->value.choice.UserLocationInformation.choice.userLocationInformationNR, userinfo_nr_p);
- /* Set nRCellIdentity. default userLocationInformationNR */
- MACRO_GNB_ID_TO_CELL_IDENTITY(instance_p->gNB_id,
- 0, // Cell ID
- &userinfo_nr_p->nR_CGI.nRCellIdentity);
- MCC_MNC_TO_TBCD(instance_p->mcc[ue_desc_p->selected_plmn_identity],
- instance_p->mnc[ue_desc_p->selected_plmn_identity],
- instance_p->mnc_digit_length[ue_desc_p->selected_plmn_identity],
- &userinfo_nr_p->nR_CGI.pLMNIdentity);
-
- /* Set TAI */
- INT24_TO_OCTET_STRING(instance_p->tac, &userinfo_nr_p->tAI.tAC);
- MCC_MNC_TO_PLMNID(instance_p->mcc[ue_desc_p->selected_plmn_identity],
+ /* Set nRCellIdentity. default userLocationInformationNR */
+ MACRO_GNB_ID_TO_CELL_IDENTITY(instance_p->gNB_id,
+ 0, // Cell ID
+ &userinfo_nr_p->nR_CGI.nRCellIdentity);
+ MCC_MNC_TO_TBCD(instance_p->mcc[ue_desc_p->selected_plmn_identity],
instance_p->mnc[ue_desc_p->selected_plmn_identity],
instance_p->mnc_digit_length[ue_desc_p->selected_plmn_identity],
- &userinfo_nr_p->tAI.pLMNIdentity);
-
- asn1cSeqAdd(&out->protocolIEs.list, ie);
+ &userinfo_nr_p->nR_CGI.pLMNIdentity);
+ /* Set TAI */
+ INT24_TO_OCTET_STRING(instance_p->tac, &userinfo_nr_p->tAI.tAC);
+ MCC_MNC_TO_PLMNID(instance_p->mcc[ue_desc_p->selected_plmn_identity],
+ instance_p->mnc[ue_desc_p->selected_plmn_identity],
+ instance_p->mnc_digit_length[ue_desc_p->selected_plmn_identity],
+ &userinfo_nr_p->tAI.pLMNIdentity);
+ }
/* Set the establishment cause according to those provided by RRC */
- DevCheck(ngap_nas_first_req_p->establishment_cause < NGAP_RRC_CAUSE_LAST,
- ngap_nas_first_req_p->establishment_cause, NGAP_RRC_CAUSE_LAST, 0);
-
+ DevCheck(UEfirstReq->establishment_cause < NGAP_RRC_CAUSE_LAST, UEfirstReq->establishment_cause, NGAP_RRC_CAUSE_LAST, 0);
+
/* mandatory */
- ie = (NGAP_InitialUEMessage_IEs_t *)calloc(1, sizeof(NGAP_InitialUEMessage_IEs_t));
- ie->id = NGAP_ProtocolIE_ID_id_RRCEstablishmentCause;
- ie->criticality = NGAP_Criticality_ignore;
- ie->value.present = NGAP_InitialUEMessage_IEs__value_PR_RRCEstablishmentCause;
- ie->value.choice.RRCEstablishmentCause = ngap_nas_first_req_p->establishment_cause;
- asn1cSeqAdd(&out->protocolIEs.list, ie);
+ {
+ asn1cSequenceAdd(out->protocolIEs.list, NGAP_InitialUEMessage_IEs_t, ie);
+ ie->id = NGAP_ProtocolIE_ID_id_RRCEstablishmentCause;
+ ie->criticality = NGAP_Criticality_ignore;
+ ie->value.present = NGAP_InitialUEMessage_IEs__value_PR_RRCEstablishmentCause;
+ ie->value.choice.RRCEstablishmentCause = UEfirstReq->establishment_cause;
+ }
/* optional */
- if (ngap_nas_first_req_p->ue_identity.presenceMask & NGAP_UE_IDENTITIES_FiveG_s_tmsi) {
+ if (UEfirstReq->ue_identity.presenceMask & NGAP_UE_IDENTITIES_FiveG_s_tmsi) {
NGAP_DEBUG("FIVEG_S_TMSI_PRESENT\n");
- ie = (NGAP_InitialUEMessage_IEs_t *)calloc(1, sizeof(NGAP_InitialUEMessage_IEs_t));
+ asn1cSequenceAdd(out->protocolIEs.list, NGAP_InitialUEMessage_IEs_t, ie);
ie->id = NGAP_ProtocolIE_ID_id_FiveG_S_TMSI;
ie->criticality = NGAP_Criticality_reject;
ie->value.present = NGAP_InitialUEMessage_IEs__value_PR_FiveG_S_TMSI;
- AMF_SETID_TO_BIT_STRING(ngap_nas_first_req_p->ue_identity.s_tmsi.amf_set_id,
- &ie->value.choice.FiveG_S_TMSI.aMFSetID);
- AMF_SETID_TO_BIT_STRING(ngap_nas_first_req_p->ue_identity.s_tmsi.amf_pointer,
- &ie->value.choice.FiveG_S_TMSI.aMFPointer);
- M_TMSI_TO_OCTET_STRING(ngap_nas_first_req_p->ue_identity.s_tmsi.m_tmsi,
- &ie->value.choice.FiveG_S_TMSI.fiveG_TMSI);
- asn1cSeqAdd(&out->protocolIEs.list, ie);
+ AMF_SETID_TO_BIT_STRING(UEfirstReq->ue_identity.s_tmsi.amf_set_id, &ie->value.choice.FiveG_S_TMSI.aMFSetID);
+ AMF_SETID_TO_BIT_STRING(UEfirstReq->ue_identity.s_tmsi.amf_pointer, &ie->value.choice.FiveG_S_TMSI.aMFPointer);
+ M_TMSI_TO_OCTET_STRING(UEfirstReq->ue_identity.s_tmsi.m_tmsi, &ie->value.choice.FiveG_S_TMSI.fiveG_TMSI);
}
-
/* optional */
- ie = (NGAP_InitialUEMessage_IEs_t *)calloc(1, sizeof(NGAP_InitialUEMessage_IEs_t));
- ie->id = NGAP_ProtocolIE_ID_id_UEContextRequest;
- ie->criticality = NGAP_Criticality_ignore;
- ie->value.present = NGAP_InitialUEMessage_IEs__value_PR_UEContextRequest;
- ie->value.choice.UEContextRequest = NGAP_UEContextRequest_requested;
- asn1cSeqAdd(&out->protocolIEs.list, ie);
-
+ {
+ asn1cSequenceAdd(out->protocolIEs.list, NGAP_InitialUEMessage_IEs_t, ie);
+ ie->id = NGAP_ProtocolIE_ID_id_UEContextRequest;
+ ie->criticality = NGAP_Criticality_ignore;
+ ie->value.present = NGAP_InitialUEMessage_IEs__value_PR_UEContextRequest;
+ ie->value.choice.UEContextRequest = NGAP_UEContextRequest_requested;
+ }
if (ngap_gNB_encode_pdu(&pdu, &buffer, &length) < 0) {
/* Failed to encode message */
@@ -342,9 +315,7 @@ int ngap_gNB_handle_nas_downlink(uint32_t assoc_id,
// }
if ((amf_desc_p = ngap_gNB_get_AMF(NULL, assoc_id, 0)) == NULL) {
- NGAP_ERROR(
- "[SCTP %d] Received NAS downlink message for non existing AMF context\n",
- assoc_id);
+ NGAP_ERROR("[SCTP %d] Received NAS downlink message for non existing AMF context\n", assoc_id);
return -1;
}
@@ -360,8 +331,7 @@ int ngap_gNB_handle_nas_downlink(uint32_t assoc_id,
NGAP_ProtocolIE_ID_id_RAN_UE_NGAP_ID, true);
gnb_ue_ngap_id = ie->value.choice.RAN_UE_NGAP_ID;
- if ((ue_desc_p = ngap_gNB_get_ue_context(ngap_gNB_instance,
- gnb_ue_ngap_id)) == NULL) {
+ if ((ue_desc_p = ngap_get_ue_context(gnb_ue_ngap_id)) == NULL) {
NGAP_ERROR("[SCTP %d] Received NAS downlink message for non existing UE context gNB_UE_NGAP_ID: 0x%lx\n",
assoc_id,
gnb_ue_ngap_id);
@@ -384,23 +354,15 @@ int ngap_gNB_handle_nas_downlink(uint32_t assoc_id,
} else {
/* We already have a amf ue ngap id check the received is the same */
if (ue_desc_p->amf_ue_ngap_id != amf_ue_ngap_id) {
- NGAP_ERROR("[SCTP %d] Mismatch in AMF UE NGAP ID (0x%lx != 0x%"PRIx64"\n",
- assoc_id,
- amf_ue_ngap_id,
- (uint64_t)ue_desc_p->amf_ue_ngap_id
- );
- return -1;
+ NGAP_ERROR("[SCTP %d] Mismatch in AMF UE NGAP ID (0x%lx != 0x%" PRIx64 "\n", assoc_id, amf_ue_ngap_id, (uint64_t)ue_desc_p->amf_ue_ngap_id);
+ return -1;
}
}
NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_DownlinkNASTransport_IEs_t, ie, container,
NGAP_ProtocolIE_ID_id_NAS_PDU, true);
/* Forward the NAS PDU to NR-RRC */
- ngap_gNB_itti_send_nas_downlink_ind(ngap_gNB_instance->instance,
- ue_desc_p->ue_initial_id,
- ue_desc_p->gNB_ue_ngap_id,
- ie->value.choice.NAS_PDU.buf,
- ie->value.choice.NAS_PDU.size);
+ ngap_gNB_itti_send_nas_downlink_ind(ngap_gNB_instance->instance, ue_desc_p->gNB_ue_ngap_id, ie->value.choice.NAS_PDU.buf, ie->value.choice.NAS_PDU.size);
return 0;
}
@@ -411,10 +373,7 @@ int ngap_gNB_nas_uplink(instance_t instance, ngap_uplink_nas_t *ngap_uplink_nas_
{
struct ngap_gNB_ue_context_s *ue_context_p;
ngap_gNB_instance_t *ngap_gNB_instance_p;
- NGAP_NGAP_PDU_t pdu;
- NGAP_UplinkNASTransport_t *out;
- NGAP_UplinkNASTransport_IEs_t *ie;
- NGAP_UserLocationInformationNR_t *userinfo_nr_p = NULL;
+ NGAP_NGAP_PDU_t pdu;
uint8_t *buffer;
uint32_t length;
DevAssert(ngap_uplink_nas_p != NULL);
@@ -422,7 +381,7 @@ int ngap_gNB_nas_uplink(instance_t instance, ngap_uplink_nas_t *ngap_uplink_nas_
ngap_gNB_instance_p = ngap_gNB_get_instance(instance);
DevAssert(ngap_gNB_instance_p != NULL);
- if ((ue_context_p = ngap_gNB_get_ue_context(ngap_gNB_instance_p, ngap_uplink_nas_p->gNB_ue_ngap_id)) == NULL) {
+ if ((ue_context_p = ngap_get_ue_context(ngap_uplink_nas_p->gNB_ue_ngap_id)) == NULL) {
/* The context for this gNB ue ngap id doesn't exist in the map of gNB UEs */
NGAP_WARN("Failed to find ue context associated with gNB ue ngap id: %08x\n",
ngap_uplink_nas_p->gNB_ue_ngap_id);
@@ -432,8 +391,7 @@ int ngap_gNB_nas_uplink(instance_t instance, ngap_uplink_nas_t *ngap_uplink_nas_
/* Uplink NAS transport can occur either during an ngap connected state
* or during initial attach (for example: NAS authentication).
*/
- if (!(ue_context_p->ue_state == NGAP_UE_CONNECTED ||
- ue_context_p->ue_state == NGAP_UE_WAITING_CSR)) {
+ if (!(ue_context_p->ue_state == NGAP_UE_CONNECTED || ue_context_p->ue_state == NGAP_UE_WAITING_CSR)) {
NGAP_WARN("You are attempting to send NAS data over non-connected "
"gNB ue ngap id: %u, current state: %d\n",
ngap_uplink_nas_p->gNB_ue_ngap_id, ue_context_p->ue_state);
@@ -443,63 +401,63 @@ int ngap_gNB_nas_uplink(instance_t instance, ngap_uplink_nas_t *ngap_uplink_nas_
/* Prepare the NGAP message to encode */
memset(&pdu, 0, sizeof(pdu));
pdu.present = NGAP_NGAP_PDU_PR_initiatingMessage;
- pdu.choice.initiatingMessage = (NGAP_InitiatingMessage_t *)calloc(1,sizeof(NGAP_InitiatingMessage_t));
- pdu.choice.initiatingMessage->procedureCode = NGAP_ProcedureCode_id_UplinkNASTransport;
- pdu.choice.initiatingMessage->criticality = NGAP_Criticality_ignore;
- pdu.choice.initiatingMessage->value.present = NGAP_InitiatingMessage__value_PR_UplinkNASTransport;
- out = &pdu.choice.initiatingMessage->value.choice.UplinkNASTransport;
+ asn1cCalloc(pdu.choice.initiatingMessage, head);
+ head->procedureCode = NGAP_ProcedureCode_id_UplinkNASTransport;
+ head->criticality = NGAP_Criticality_ignore;
+ head->value.present = NGAP_InitiatingMessage__value_PR_UplinkNASTransport;
+ NGAP_UplinkNASTransport_t *out = &head->value.choice.UplinkNASTransport;
/* mandatory */
- ie = (NGAP_UplinkNASTransport_IEs_t *)calloc(1, sizeof(NGAP_UplinkNASTransport_IEs_t));
- ie->id = NGAP_ProtocolIE_ID_id_AMF_UE_NGAP_ID;
- ie->criticality = NGAP_Criticality_reject;
- ie->value.present = NGAP_UplinkNASTransport_IEs__value_PR_AMF_UE_NGAP_ID;
- //ie->value.choice.AMF_UE_NGAP_ID = ue_context_p->amf_ue_ngap_id;
- asn_uint642INTEGER(&ie->value.choice.AMF_UE_NGAP_ID, ue_context_p->amf_ue_ngap_id);
- asn1cSeqAdd(&out->protocolIEs.list, ie);
+ {
+ asn1cSequenceAdd(out->protocolIEs.list, NGAP_UplinkNASTransport_IEs_t, ie);
+ ie->id = NGAP_ProtocolIE_ID_id_AMF_UE_NGAP_ID;
+ ie->criticality = NGAP_Criticality_reject;
+ ie->value.present = NGAP_UplinkNASTransport_IEs__value_PR_AMF_UE_NGAP_ID;
+ // ie->value.choice.AMF_UE_NGAP_ID = ue_context_p->amf_ue_ngap_id;
+ asn_uint642INTEGER(&ie->value.choice.AMF_UE_NGAP_ID, ue_context_p->amf_ue_ngap_id);
+ }
/* mandatory */
- ie = (NGAP_UplinkNASTransport_IEs_t *)calloc(1, sizeof(NGAP_UplinkNASTransport_IEs_t));
- ie->id = NGAP_ProtocolIE_ID_id_RAN_UE_NGAP_ID;
- ie->criticality = NGAP_Criticality_reject;
- ie->value.present = NGAP_UplinkNASTransport_IEs__value_PR_RAN_UE_NGAP_ID;
- ie->value.choice.RAN_UE_NGAP_ID = ue_context_p->gNB_ue_ngap_id;
- asn1cSeqAdd(&out->protocolIEs.list, ie);
+ {
+ asn1cSequenceAdd(out->protocolIEs.list, NGAP_UplinkNASTransport_IEs_t, ie);
+ ie->id = NGAP_ProtocolIE_ID_id_RAN_UE_NGAP_ID;
+ ie->criticality = NGAP_Criticality_reject;
+ ie->value.present = NGAP_UplinkNASTransport_IEs__value_PR_RAN_UE_NGAP_ID;
+ ie->value.choice.RAN_UE_NGAP_ID = ue_context_p->gNB_ue_ngap_id;
+ }
/* mandatory */
- ie = (NGAP_UplinkNASTransport_IEs_t *)calloc(1, sizeof(NGAP_UplinkNASTransport_IEs_t));
- ie->id = NGAP_ProtocolIE_ID_id_NAS_PDU;
- ie->criticality = NGAP_Criticality_reject;
- ie->value.present = NGAP_UplinkNASTransport_IEs__value_PR_NAS_PDU;
- ie->value.choice.NAS_PDU.buf = ngap_uplink_nas_p->nas_pdu.buffer;
- ie->value.choice.NAS_PDU.size = ngap_uplink_nas_p->nas_pdu.length;
- asn1cSeqAdd(&out->protocolIEs.list, ie);
+ {
+ asn1cSequenceAdd(out->protocolIEs.list, NGAP_UplinkNASTransport_IEs_t, ie);
+ ie->id = NGAP_ProtocolIE_ID_id_NAS_PDU;
+ ie->criticality = NGAP_Criticality_reject;
+ ie->value.present = NGAP_UplinkNASTransport_IEs__value_PR_NAS_PDU;
+ ie->value.choice.NAS_PDU.buf = ngap_uplink_nas_p->nas_pdu.buffer;
+ ie->value.choice.NAS_PDU.size = ngap_uplink_nas_p->nas_pdu.length;
+ }
/* mandatory */
- ie = (NGAP_UplinkNASTransport_IEs_t *)calloc(1, sizeof(NGAP_UplinkNASTransport_IEs_t));
- ie->id = NGAP_ProtocolIE_ID_id_UserLocationInformation;
- ie->criticality = NGAP_Criticality_ignore;
- ie->value.present = NGAP_UplinkNASTransport_IEs__value_PR_UserLocationInformation;
+ {
+ asn1cSequenceAdd(out->protocolIEs.list, NGAP_UplinkNASTransport_IEs_t, ie);
+ ie->id = NGAP_ProtocolIE_ID_id_UserLocationInformation;
+ ie->criticality = NGAP_Criticality_ignore;
+ ie->value.present = NGAP_UplinkNASTransport_IEs__value_PR_UserLocationInformation;
- ie->value.choice.UserLocationInformation.present = NGAP_UserLocationInformation_PR_userLocationInformationNR;
- ie->value.choice.UserLocationInformation.choice.userLocationInformationNR = CALLOC(1,sizeof(struct NGAP_UserLocationInformationNR));
- userinfo_nr_p = ie->value.choice.UserLocationInformation.choice.userLocationInformationNR;
+ ie->value.choice.UserLocationInformation.present = NGAP_UserLocationInformation_PR_userLocationInformationNR;
+ asn1cCalloc(ie->value.choice.UserLocationInformation.choice.userLocationInformationNR, userinfo_nr_p);
- /* Set nRCellIdentity. default userLocationInformationNR */
- MACRO_GNB_ID_TO_CELL_IDENTITY(ngap_gNB_instance_p->gNB_id,
- 0, // Cell ID
- &userinfo_nr_p->nR_CGI.nRCellIdentity);
- MCC_MNC_TO_TBCD(ngap_gNB_instance_p->mcc[ue_context_p->selected_plmn_identity],
- ngap_gNB_instance_p->mnc[ue_context_p->selected_plmn_identity],
- ngap_gNB_instance_p->mnc_digit_length[ue_context_p->selected_plmn_identity],
- &userinfo_nr_p->nR_CGI.pLMNIdentity);
-
- /* Set TAI */
- INT24_TO_OCTET_STRING(ngap_gNB_instance_p->tac, &userinfo_nr_p->tAI.tAC);
- MCC_MNC_TO_PLMNID(ngap_gNB_instance_p->mcc[ue_context_p->selected_plmn_identity],
+ /* Set nRCellIdentity. default userLocationInformationNR */
+ MACRO_GNB_ID_TO_CELL_IDENTITY(ngap_gNB_instance_p->gNB_id,
+ 0, // Cell ID
+ &userinfo_nr_p->nR_CGI.nRCellIdentity);
+ MCC_MNC_TO_TBCD(ngap_gNB_instance_p->mcc[ue_context_p->selected_plmn_identity],
ngap_gNB_instance_p->mnc[ue_context_p->selected_plmn_identity],
ngap_gNB_instance_p->mnc_digit_length[ue_context_p->selected_plmn_identity],
- &userinfo_nr_p->tAI.pLMNIdentity);
-
-
- asn1cSeqAdd(&out->protocolIEs.list, ie);
+ &userinfo_nr_p->nR_CGI.pLMNIdentity);
+ /* Set TAI */
+ INT24_TO_OCTET_STRING(ngap_gNB_instance_p->tac, &userinfo_nr_p->tAI.tAC);
+ MCC_MNC_TO_PLMNID(ngap_gNB_instance_p->mcc[ue_context_p->selected_plmn_identity],
+ ngap_gNB_instance_p->mnc[ue_context_p->selected_plmn_identity],
+ ngap_gNB_instance_p->mnc_digit_length[ue_context_p->selected_plmn_identity],
+ &userinfo_nr_p->tAI.pLMNIdentity);
+ }
if (ngap_gNB_encode_pdu(&pdu, &buffer, &length) < 0) {
NGAP_ERROR("Failed to encode uplink NAS transport\n");
/* Encode procedure has failed... */
@@ -522,9 +480,7 @@ int ngap_gNB_nas_non_delivery_ind(instance_t instance,
{
struct ngap_gNB_ue_context_s *ue_context_p;
ngap_gNB_instance_t *ngap_gNB_instance_p;
- NGAP_NGAP_PDU_t pdu;
- NGAP_NASNonDeliveryIndication_t *out;
- NGAP_NASNonDeliveryIndication_IEs_t *ie;
+ NGAP_NGAP_PDU_t pdu;
uint8_t *buffer;
uint32_t length;
DevAssert(ngap_nas_non_delivery_ind != NULL);
@@ -532,7 +488,7 @@ int ngap_gNB_nas_non_delivery_ind(instance_t instance,
ngap_gNB_instance_p = ngap_gNB_get_instance(instance);
DevAssert(ngap_gNB_instance_p != NULL);
- if ((ue_context_p = ngap_gNB_get_ue_context(ngap_gNB_instance_p, ngap_nas_non_delivery_ind->gNB_ue_ngap_id)) == NULL) {
+ if ((ue_context_p = ngap_get_ue_context(ngap_nas_non_delivery_ind->gNB_ue_ngap_id)) == NULL) {
/* The context for this gNB ue ngap id doesn't exist in the map of gNB UEs */
NGAP_WARN("Failed to find ue context associated with gNB ue ngap id: %08x\n",
ngap_nas_non_delivery_ind->gNB_ue_ngap_id);
@@ -542,42 +498,46 @@ int ngap_gNB_nas_non_delivery_ind(instance_t instance,
/* Prepare the NGAP message to encode */
memset(&pdu, 0, sizeof(pdu));
pdu.present = NGAP_NGAP_PDU_PR_initiatingMessage;
- pdu.choice.initiatingMessage = (NGAP_InitiatingMessage_t *)calloc(1,sizeof(NGAP_InitiatingMessage_t));
- pdu.choice.initiatingMessage->procedureCode = NGAP_ProcedureCode_id_NASNonDeliveryIndication;
- pdu.choice.initiatingMessage->criticality = NGAP_Criticality_ignore;
- pdu.choice.initiatingMessage->value.present = NGAP_InitiatingMessage__value_PR_NASNonDeliveryIndication;
- out = &pdu.choice.initiatingMessage->value.choice.NASNonDeliveryIndication;
+ asn1cCalloc(pdu.choice.initiatingMessage, head);
+ head->procedureCode = NGAP_ProcedureCode_id_NASNonDeliveryIndication;
+ head->criticality = NGAP_Criticality_ignore;
+ head->value.present = NGAP_InitiatingMessage__value_PR_NASNonDeliveryIndication;
+ NGAP_NASNonDeliveryIndication_t *out = &head->value.choice.NASNonDeliveryIndication;
/* mandatory */
- ie = (NGAP_NASNonDeliveryIndication_IEs_t *)calloc(1, sizeof(NGAP_NASNonDeliveryIndication_IEs_t));
- ie->id = NGAP_ProtocolIE_ID_id_AMF_UE_NGAP_ID;
- ie->criticality = NGAP_Criticality_reject;
- ie->value.present = NGAP_NASNonDeliveryIndication_IEs__value_PR_AMF_UE_NGAP_ID;
- asn_uint642INTEGER(&ie->value.choice.AMF_UE_NGAP_ID, ue_context_p->amf_ue_ngap_id);
- asn1cSeqAdd(&out->protocolIEs.list, ie);
+ {
+ asn1cSequenceAdd(out->protocolIEs.list, NGAP_NASNonDeliveryIndication_IEs_t, ie);
+ ie->id = NGAP_ProtocolIE_ID_id_AMF_UE_NGAP_ID;
+ ie->criticality = NGAP_Criticality_reject;
+ ie->value.present = NGAP_NASNonDeliveryIndication_IEs__value_PR_AMF_UE_NGAP_ID;
+ asn_uint642INTEGER(&ie->value.choice.AMF_UE_NGAP_ID, ue_context_p->amf_ue_ngap_id);
+ }
/* mandatory */
- ie = (NGAP_NASNonDeliveryIndication_IEs_t *)calloc(1, sizeof(NGAP_NASNonDeliveryIndication_IEs_t));
- ie->id = NGAP_ProtocolIE_ID_id_RAN_UE_NGAP_ID;
- ie->criticality = NGAP_Criticality_reject;
- ie->value.present = NGAP_NASNonDeliveryIndication_IEs__value_PR_RAN_UE_NGAP_ID;
- ie->value.choice.RAN_UE_NGAP_ID = ue_context_p->gNB_ue_ngap_id;
- asn1cSeqAdd(&out->protocolIEs.list, ie);
+ {
+ asn1cSequenceAdd(out->protocolIEs.list, NGAP_NASNonDeliveryIndication_IEs_t, ie);
+ ie->id = NGAP_ProtocolIE_ID_id_RAN_UE_NGAP_ID;
+ ie->criticality = NGAP_Criticality_reject;
+ ie->value.present = NGAP_NASNonDeliveryIndication_IEs__value_PR_RAN_UE_NGAP_ID;
+ ie->value.choice.RAN_UE_NGAP_ID = ue_context_p->gNB_ue_ngap_id;
+ }
/* mandatory */
- ie = (NGAP_NASNonDeliveryIndication_IEs_t *)calloc(1, sizeof(NGAP_NASNonDeliveryIndication_IEs_t));
- ie->id = NGAP_ProtocolIE_ID_id_NAS_PDU;
- ie->criticality = NGAP_Criticality_ignore;
- ie->value.present = NGAP_NASNonDeliveryIndication_IEs__value_PR_NAS_PDU;
- ie->value.choice.NAS_PDU.buf = ngap_nas_non_delivery_ind->nas_pdu.buffer;
- ie->value.choice.NAS_PDU.size = ngap_nas_non_delivery_ind->nas_pdu.length;
- asn1cSeqAdd(&out->protocolIEs.list, ie);
+ {
+ asn1cSequenceAdd(out->protocolIEs.list, NGAP_NASNonDeliveryIndication_IEs_t, ie);
+ ie->id = NGAP_ProtocolIE_ID_id_NAS_PDU;
+ ie->criticality = NGAP_Criticality_ignore;
+ ie->value.present = NGAP_NASNonDeliveryIndication_IEs__value_PR_NAS_PDU;
+ ie->value.choice.NAS_PDU.buf = ngap_nas_non_delivery_ind->nas_pdu.buffer;
+ ie->value.choice.NAS_PDU.size = ngap_nas_non_delivery_ind->nas_pdu.length;
+ }
/* mandatory */
- ie = (NGAP_NASNonDeliveryIndication_IEs_t *)calloc(1, sizeof(NGAP_NASNonDeliveryIndication_IEs_t));
- ie->id = NGAP_ProtocolIE_ID_id_Cause;
- ie->criticality = NGAP_Criticality_ignore;
- /* Send a dummy cause */
- ie->value.present = NGAP_NASNonDeliveryIndication_IEs__value_PR_Cause;
- ie->value.choice.Cause.present = NGAP_Cause_PR_radioNetwork;
- ie->value.choice.Cause.choice.radioNetwork = NGAP_CauseRadioNetwork_radio_connection_with_ue_lost;
- asn1cSeqAdd(&out->protocolIEs.list, ie);
+ {
+ asn1cSequenceAdd(out->protocolIEs.list, NGAP_NASNonDeliveryIndication_IEs_t, ie);
+ ie->id = NGAP_ProtocolIE_ID_id_Cause;
+ ie->criticality = NGAP_Criticality_ignore;
+ /* Send a dummy cause */
+ ie->value.present = NGAP_NASNonDeliveryIndication_IEs__value_PR_Cause;
+ ie->value.choice.Cause.present = NGAP_Cause_PR_radioNetwork;
+ ie->value.choice.Cause.choice.radioNetwork = NGAP_CauseRadioNetwork_radio_connection_with_ue_lost;
+ }
if (ngap_gNB_encode_pdu(&pdu, &buffer, &length) < 0) {
NGAP_ERROR("Failed to encode NAS NON delivery indication\n");
@@ -594,30 +554,23 @@ int ngap_gNB_nas_non_delivery_ind(instance_t instance,
}
//------------------------------------------------------------------------------
-int ngap_gNB_initial_ctxt_resp(
- instance_t instance, ngap_initial_context_setup_resp_t *initial_ctxt_resp_p)
+int ngap_gNB_initial_ctxt_resp(instance_t instance, ngap_initial_context_setup_resp_t *initial_ctxt_resp_p)
//------------------------------------------------------------------------------
{
ngap_gNB_instance_t *ngap_gNB_instance_p = NULL;
struct ngap_gNB_ue_context_s *ue_context_p = NULL;
- NGAP_NGAP_PDU_t pdu;
- NGAP_InitialContextSetupResponse_t *out;
- NGAP_InitialContextSetupResponseIEs_t *ie;
- uint8_t *buffer = NULL;
- uint8_t pdusessionTransfer_buffer[1000];
+ NGAP_NGAP_PDU_t pdu;
+ uint8_t *buffer = NULL;
uint32_t length;
- int i;
- asn_encode_to_new_buffer_result_t res = { NULL, {0, NULL, NULL} };
+ int i;
-
/* Retrieve the NGAP gNB instance associated with Mod_id */
ngap_gNB_instance_p = ngap_gNB_get_instance(instance);
DevAssert(initial_ctxt_resp_p != NULL);
DevAssert(ngap_gNB_instance_p != NULL);
- if ((ue_context_p = ngap_gNB_get_ue_context(ngap_gNB_instance_p,
- initial_ctxt_resp_p->gNB_ue_ngap_id)) == NULL) {
+ if ((ue_context_p = ngap_get_ue_context(initial_ctxt_resp_p->gNB_ue_ngap_id)) == NULL) {
/* The context for this gNB ue ngap id doesn't exist in the map of gNB UEs */
NGAP_WARN("Failed to find ue context associated with gNB ue ngap id: 0x%08x\n",
initial_ctxt_resp_p->gNB_ue_ngap_id);
@@ -627,8 +580,7 @@ int ngap_gNB_initial_ctxt_resp(
/* Uplink NAS transport can occur either during an ngap connected state
* or during initial attach (for example: NAS authentication).
*/
- if (!(ue_context_p->ue_state == NGAP_UE_CONNECTED ||
- ue_context_p->ue_state == NGAP_UE_WAITING_CSR)) {
+ if (!(ue_context_p->ue_state == NGAP_UE_CONNECTED || ue_context_p->ue_state == NGAP_UE_WAITING_CSR)) {
NGAP_WARN("You are attempting to send NAS data over non-connected "
"gNB ue ngap id: %08x, current state: %d\n",
initial_ctxt_resp_p->gNB_ue_ngap_id, ue_context_p->ue_state);
@@ -638,142 +590,101 @@ int ngap_gNB_initial_ctxt_resp(
/* Prepare the NGAP message to encode */
memset(&pdu, 0, sizeof(pdu));
pdu.present = NGAP_NGAP_PDU_PR_successfulOutcome;
- pdu.choice.successfulOutcome = (NGAP_SuccessfulOutcome_t *)calloc(1,sizeof(struct NGAP_SuccessfulOutcome));
- pdu.choice.successfulOutcome->procedureCode = NGAP_ProcedureCode_id_InitialContextSetup;
- pdu.choice.successfulOutcome->criticality = NGAP_Criticality_reject;
- pdu.choice.successfulOutcome->value.present = NGAP_SuccessfulOutcome__value_PR_InitialContextSetupResponse;
- out = &pdu.choice.successfulOutcome->value.choice.InitialContextSetupResponse;
+ asn1cCalloc(pdu.choice.successfulOutcome, head);
+ head->procedureCode = NGAP_ProcedureCode_id_InitialContextSetup;
+ head->criticality = NGAP_Criticality_reject;
+ head->value.present = NGAP_SuccessfulOutcome__value_PR_InitialContextSetupResponse;
+ NGAP_InitialContextSetupResponse_t *out = &head->value.choice.InitialContextSetupResponse;
/* mandatory */
- ie = (NGAP_InitialContextSetupResponseIEs_t *)calloc(1, sizeof(NGAP_InitialContextSetupResponseIEs_t));
- ie->id = NGAP_ProtocolIE_ID_id_AMF_UE_NGAP_ID;
- ie->criticality = NGAP_Criticality_ignore;
- ie->value.present = NGAP_InitialContextSetupResponseIEs__value_PR_AMF_UE_NGAP_ID;
- //ie->value.choice.AMF_UE_NGAP_ID = ue_context_p->amf_ue_ngap_id;
- asn_uint642INTEGER(&ie->value.choice.AMF_UE_NGAP_ID, ue_context_p->amf_ue_ngap_id);
- asn1cSeqAdd(&out->protocolIEs.list, ie);
+ {
+ asn1cSequenceAdd(out->protocolIEs.list, NGAP_InitialContextSetupResponseIEs_t, ie);
+ ie->id = NGAP_ProtocolIE_ID_id_AMF_UE_NGAP_ID;
+ ie->criticality = NGAP_Criticality_ignore;
+ ie->value.present = NGAP_InitialContextSetupResponseIEs__value_PR_AMF_UE_NGAP_ID;
+ // ie->value.choice.AMF_UE_NGAP_ID = ue_context_p->amf_ue_ngap_id;
+ asn_uint642INTEGER(&ie->value.choice.AMF_UE_NGAP_ID, ue_context_p->amf_ue_ngap_id);
+ }
/* mandatory */
- ie = (NGAP_InitialContextSetupResponseIEs_t *)calloc(1, sizeof(NGAP_InitialContextSetupResponseIEs_t));
- ie->id = NGAP_ProtocolIE_ID_id_RAN_UE_NGAP_ID;
- ie->criticality = NGAP_Criticality_ignore;
- ie->value.present = NGAP_InitialContextSetupResponseIEs__value_PR_RAN_UE_NGAP_ID;
- ie->value.choice.RAN_UE_NGAP_ID = initial_ctxt_resp_p->gNB_ue_ngap_id;
- asn1cSeqAdd(&out->protocolIEs.list, ie);
-
+ {
+ asn1cSequenceAdd(out->protocolIEs.list, NGAP_InitialContextSetupResponseIEs_t, ie);
+ ie->id = NGAP_ProtocolIE_ID_id_RAN_UE_NGAP_ID;
+ ie->criticality = NGAP_Criticality_ignore;
+ ie->value.present = NGAP_InitialContextSetupResponseIEs__value_PR_RAN_UE_NGAP_ID;
+ ie->value.choice.RAN_UE_NGAP_ID = initial_ctxt_resp_p->gNB_ue_ngap_id;
+ }
/* optional */
if (initial_ctxt_resp_p->nb_of_pdusessions){
- ie = (NGAP_InitialContextSetupResponseIEs_t *)calloc(1, sizeof(NGAP_InitialContextSetupResponseIEs_t));
+ asn1cSequenceAdd(out->protocolIEs.list, NGAP_InitialContextSetupResponseIEs_t, ie);
ie->id = NGAP_ProtocolIE_ID_id_PDUSessionResourceSetupListCxtRes;
ie->criticality = NGAP_Criticality_ignore;
ie->value.present = NGAP_InitialContextSetupResponseIEs__value_PR_PDUSessionResourceSetupListCxtRes;
for (i = 0; i < initial_ctxt_resp_p->nb_of_pdusessions; i++) {
- NGAP_PDUSessionResourceSetupItemCxtRes_t *item;
- NGAP_PDUSessionResourceSetupResponseTransfer_t *pdusessionTransfer_p = NULL;
-
- /* mandatory */
- item = (NGAP_PDUSessionResourceSetupItemCxtRes_t *)calloc(1, sizeof(NGAP_PDUSessionResourceSetupItemCxtRes_t));
-
+ asn1cSequenceAdd(ie->value.choice.PDUSessionResourceSetupListCxtRes.list, NGAP_PDUSessionResourceSetupItemCxtRes_t, item);
/* pDUSessionID */
item->pDUSessionID = initial_ctxt_resp_p->pdusessions[i].pdusession_id;
/* dLQosFlowPerTNLInformation */
- pdusessionTransfer_p = (NGAP_PDUSessionResourceSetupResponseTransfer_t *)calloc(1, sizeof(NGAP_PDUSessionResourceSetupResponseTransfer_t));
+ NGAP_PDUSessionResourceSetupResponseTransfer_t pdusessionTransfer = {0};
- pdusessionTransfer_p->dLQosFlowPerTNLInformation.uPTransportLayerInformation.present = NGAP_UPTransportLayerInformation_PR_gTPTunnel;
-
- pdusessionTransfer_p->dLQosFlowPerTNLInformation.uPTransportLayerInformation.choice.gTPTunnel = (NGAP_GTPTunnel_t *)calloc(1, sizeof(NGAP_GTPTunnel_t));
- struct NGAP_GTPTunnel *tmp=pdusessionTransfer_p->dLQosFlowPerTNLInformation.uPTransportLayerInformation.choice.gTPTunnel;
+ pdusessionTransfer.dLQosFlowPerTNLInformation.uPTransportLayerInformation.present = NGAP_UPTransportLayerInformation_PR_gTPTunnel;
+
+ asn1cCalloc(pdusessionTransfer.dLQosFlowPerTNLInformation.uPTransportLayerInformation.choice.gTPTunnel, tmp);
GTP_TEID_TO_ASN1(initial_ctxt_resp_p->pdusessions[i].gtp_teid, &tmp->gTP_TEID);
+ allocAddrCopy(&tmp->transportLayerAddress, initial_ctxt_resp_p->pdusessions[i].gNB_addr);
- tmp->transportLayerAddress.buf = malloc(initial_ctxt_resp_p->pdusessions[i].gNB_addr.length);
-
- memcpy(tmp->transportLayerAddress.buf,
- initial_ctxt_resp_p->pdusessions[i].gNB_addr.buffer,
- initial_ctxt_resp_p->pdusessions[i].gNB_addr.length);
- tmp->transportLayerAddress.size = initial_ctxt_resp_p->pdusessions[i].gNB_addr.length;
- tmp->transportLayerAddress.bits_unused = 0;
-
- NGAP_DEBUG("initial_ctxt_resp_p: pdusession ID %ld\n",
- item->pDUSessionID);
+ NGAP_DEBUG("initial_ctxt_resp_p: pdusession ID %ld\n", item->pDUSessionID);
/* associatedQosFlowList. number of 1? */
for(int j=0; j < initial_ctxt_resp_p->pdusessions[i].nb_of_qos_flow; j++) {
- NGAP_AssociatedQosFlowItem_t *ass_qos_item_p;
- ass_qos_item_p = (NGAP_AssociatedQosFlowItem_t *)calloc(1, sizeof(NGAP_AssociatedQosFlowItem_t));
-
+ asn1cSequenceAdd(pdusessionTransfer.dLQosFlowPerTNLInformation.associatedQosFlowList.list, NGAP_AssociatedQosFlowItem_t, ass_qos_item_p);
/* qosFlowIdentifier */
ass_qos_item_p->qosFlowIdentifier = initial_ctxt_resp_p->pdusessions[i].associated_qos_flows[j].qfi;
-
- /* qosFlowMappingIndication */
- //if(initial_ctxt_resp_p->pdusessions[i].associated_qos_flows[j].qos_flow_mapping_ind != QOSFLOW_MAPPING_INDICATION_NON) {
- // ass_qos_item_p->qosFlowMappingIndication = malloc(sizeof(*ass_qos_item_p->qosFlowMappingIndication));
- // *ass_qos_item_p->qosFlowMappingIndication = initial_ctxt_resp_p->pdusessions[i].associated_qos_flows[j].qos_flow_mapping_ind;
- // }
- asn1cSeqAdd(&pdusessionTransfer_p->dLQosFlowPerTNLInformation.associatedQosFlowList.list, ass_qos_item_p);
- }
-
- //res = asn_encode_to_new_buffer(NULL, ATS_ALIGNED_CANONICAL_PER, &asn_DEF_NGAP_PDUSessionResourceSetupResponseTransfer, pdusessionTransfer_p);
- //item->pDUSessionResourceSetupResponseTransfer.buf = res.buffer;
- //item->pDUSessionResourceSetupResponseTransfer.size = res.result.encoded;
-
- if (asn1_xer_print) {
- xer_fprint(stdout, &asn_DEF_NGAP_PDUSessionResourceSetupResponseTransfer, pdusessionTransfer_p);
}
- memset(pdusessionTransfer_buffer, 0, 1000);
- asn_enc_rval_t enc_rval = aper_encode_to_buffer(&asn_DEF_NGAP_PDUSessionResourceSetupResponseTransfer,
- NULL,
- pdusessionTransfer_p,
- pdusessionTransfer_buffer,1000);
- AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n", enc_rval.failed_type->name, enc_rval.encoded);
- item->pDUSessionResourceSetupResponseTransfer.buf = pdusessionTransfer_buffer;
- item->pDUSessionResourceSetupResponseTransfer.size = enc_rval.encoded;
+ void *pdusessionTransfer_buffer;
+ ssize_t encoded = aper_encode_to_new_buffer(&asn_DEF_NGAP_PDUSessionResourceSetupResponseTransfer, NULL, &pdusessionTransfer, &pdusessionTransfer_buffer);
+ AssertFatal(encoded > 0, "ASN1 message encoding failed !\n");
+ item->pDUSessionResourceSetupResponseTransfer.buf = pdusessionTransfer_buffer;
+ item->pDUSessionResourceSetupResponseTransfer.size = encoded;
- ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_NGAP_PDUSessionResourceSetupResponseTransfer, pdusessionTransfer_p);
-
- asn1cSeqAdd(&ie->value.choice.PDUSessionResourceSetupListCxtRes.list, item);
+ ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_NGAP_PDUSessionResourceSetupResponseTransfer, &pdusessionTransfer);
}
-
- asn1cSeqAdd(&out->protocolIEs.list, ie);
}
/* optional */
if (initial_ctxt_resp_p->nb_of_pdusessions_failed) {
- ie = (NGAP_InitialContextSetupResponseIEs_t *)calloc(1, sizeof(NGAP_InitialContextSetupResponseIEs_t));
+ asn1cSequenceAdd(out->protocolIEs.list, NGAP_InitialContextSetupResponseIEs_t, ie);
ie->id = NGAP_ProtocolIE_ID_id_PDUSessionResourceFailedToSetupListCxtRes;
ie->criticality = NGAP_Criticality_ignore;
ie->value.present = NGAP_InitialContextSetupResponseIEs__value_PR_PDUSessionResourceFailedToSetupListCxtRes;
for (i = 0; i < initial_ctxt_resp_p->nb_of_pdusessions_failed; i++) {
- NGAP_PDUSessionResourceFailedToSetupItemCxtRes_t *item = calloc(1, sizeof *item);
- NGAP_PDUSessionResourceSetupUnsuccessfulTransfer_t *pdusessionUnTransfer_p = calloc(1, sizeof *pdusessionUnTransfer_p);
+ asn1cSequenceAdd(ie->value.choice.PDUSessionResourceFailedToSetupListCxtRes.list, NGAP_PDUSessionResourceFailedToSetupItemCxtRes_t, item);
+ NGAP_PDUSessionResourceSetupUnsuccessfulTransfer_t pdusessionUnTransfer = {0};
/* pDUSessionID */
item->pDUSessionID = initial_ctxt_resp_p->pdusessions_failed[i].pdusession_id;
/* cause */
- switch(initial_ctxt_resp_p->pdusessions_failed[i].cause) {
+ pdusessionUnTransfer.cause.present = initial_ctxt_resp_p->pdusessions_failed[i].cause;
+ switch (pdusessionUnTransfer.cause.present) {
case NGAP_CAUSE_RADIO_NETWORK:
- pdusessionUnTransfer_p->cause.present = NGAP_Cause_PR_radioNetwork;
- pdusessionUnTransfer_p->cause.choice.radioNetwork = initial_ctxt_resp_p->pdusessions_failed[i].cause_value;
+ pdusessionUnTransfer.cause.choice.radioNetwork = initial_ctxt_resp_p->pdusessions_failed[i].cause_value;
break;
case NGAP_CAUSE_TRANSPORT:
- pdusessionUnTransfer_p->cause.present = NGAP_Cause_PR_transport;
- pdusessionUnTransfer_p->cause.choice.transport = initial_ctxt_resp_p->pdusessions_failed[i].cause_value;
+ pdusessionUnTransfer.cause.choice.transport = initial_ctxt_resp_p->pdusessions_failed[i].cause_value;
break;
case NGAP_CAUSE_NAS:
- pdusessionUnTransfer_p->cause.present = NGAP_Cause_PR_nas;
- pdusessionUnTransfer_p->cause.choice.nas = initial_ctxt_resp_p->pdusessions_failed[i].cause_value;
+ pdusessionUnTransfer.cause.choice.nas = initial_ctxt_resp_p->pdusessions_failed[i].cause_value;
break;
case NGAP_CAUSE_PROTOCOL:
- pdusessionUnTransfer_p->cause.present = NGAP_Cause_PR_protocol;
- pdusessionUnTransfer_p->cause.choice.protocol = initial_ctxt_resp_p->pdusessions_failed[i].cause_value;
+ pdusessionUnTransfer.cause.choice.protocol = initial_ctxt_resp_p->pdusessions_failed[i].cause_value;
break;
case NGAP_CAUSE_MISC:
- pdusessionUnTransfer_p->cause.present = NGAP_Cause_PR_misc;
- pdusessionUnTransfer_p->cause.choice.misc = initial_ctxt_resp_p->pdusessions_failed[i].cause_value;
+ pdusessionUnTransfer.cause.choice.misc = initial_ctxt_resp_p->pdusessions_failed[i].cause_value;
break;
case NGAP_CAUSE_NOTHING:
@@ -782,27 +693,22 @@ int ngap_gNB_initial_ctxt_resp(
}
NGAP_DEBUG("initial context setup response: failed pdusession ID %ld\n", item->pDUSessionID);
-
- memset(&res, 0, sizeof(res));
- res = asn_encode_to_new_buffer(NULL, ATS_ALIGNED_CANONICAL_PER, &asn_DEF_NGAP_PDUSessionResourceSetupUnsuccessfulTransfer, pdusessionUnTransfer_p);
+ asn_encode_to_new_buffer_result_t res = asn_encode_to_new_buffer(NULL, ATS_ALIGNED_CANONICAL_PER, &asn_DEF_NGAP_PDUSessionResourceSetupUnsuccessfulTransfer, &pdusessionUnTransfer);
+ AssertFatal(res.buffer, "ASN1 message encoding failed (%s, %lu)!\n", res.result.failed_type->name, res.result.encoded);
item->pDUSessionResourceSetupUnsuccessfulTransfer.buf = res.buffer;
item->pDUSessionResourceSetupUnsuccessfulTransfer.size = res.result.encoded;
- ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_NGAP_PDUSessionResourceSetupUnsuccessfulTransfer, pdusessionUnTransfer_p);
- asn1cSeqAdd(&ie->value.choice.PDUSessionResourceFailedToSetupListCxtRes.list, item);
+ ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_NGAP_PDUSessionResourceSetupUnsuccessfulTransfer, &pdusessionUnTransfer);
}
-
- asn1cSeqAdd(&out->protocolIEs.list, ie);
}
/* optional */
if (0) {
- ie = (NGAP_InitialContextSetupResponseIEs_t *)calloc(1, sizeof(NGAP_InitialContextSetupResponseIEs_t));
+ asn1cSequenceAdd(out->protocolIEs.list, NGAP_InitialContextSetupResponseIEs_t, ie);
ie->id = NGAP_ProtocolIE_ID_id_CriticalityDiagnostics;
ie->criticality = NGAP_Criticality_ignore;
ie->value.present = NGAP_InitialContextSetupResponseIEs__value_PR_CriticalityDiagnostics;
// ie->value.choice.CriticalityDiagnostics =;
- asn1cSeqAdd(&out->protocolIEs.list, ie);
}
if (asn1_xer_print) {
@@ -817,23 +723,17 @@ int ngap_gNB_initial_ctxt_resp(
/* UE associated signalling -> use the allocated stream */
LOG_I(NR_RRC,"Send message to sctp: NGAP_InitialContextSetupResponse\n");
- ngap_gNB_itti_send_sctp_data_req(ngap_gNB_instance_p->instance,
- ue_context_p->amf_ref->assoc_id, buffer,
- length, ue_context_p->tx_stream);
+ ngap_gNB_itti_send_sctp_data_req(ngap_gNB_instance_p->instance, ue_context_p->amf_ref->assoc_id, buffer, length, ue_context_p->tx_stream);
return 0;
}
//------------------------------------------------------------------------------
-int ngap_gNB_ue_capabilities(instance_t instance,
- ngap_ue_cap_info_ind_t *ue_cap_info_ind_p)
+int ngap_gNB_ue_capabilities(instance_t instance, ngap_ue_cap_info_ind_t *ue_cap_info_ind_p)
//------------------------------------------------------------------------------
{
ngap_gNB_instance_t *ngap_gNB_instance_p;
struct ngap_gNB_ue_context_s *ue_context_p;
- NGAP_NGAP_PDU_t pdu;
- NGAP_UERadioCapabilityInfoIndication_t *out;
- NGAP_UERadioCapabilityInfoIndicationIEs_t *ie;
uint8_t *buffer;
uint32_t length;
/* Retrieve the NGAP gNB instance associated with Mod_id */
@@ -841,56 +741,57 @@ int ngap_gNB_ue_capabilities(instance_t instance,
DevAssert(ue_cap_info_ind_p != NULL);
DevAssert(ngap_gNB_instance_p != NULL);
- if ((ue_context_p = ngap_gNB_get_ue_context(ngap_gNB_instance_p,
- ue_cap_info_ind_p->gNB_ue_ngap_id)) == NULL) {
+ if ((ue_context_p = ngap_get_ue_context(ue_cap_info_ind_p->gNB_ue_ngap_id)) == NULL) {
/* The context for this gNB ue ngap id doesn't exist in the map of gNB UEs */
- NGAP_WARN("Failed to find ue context associated with gNB ue ngap id: %u\n",
- ue_cap_info_ind_p->gNB_ue_ngap_id);
+ NGAP_WARN("Failed to find ue context associated with gNB ue ngap id: %u\n", ue_cap_info_ind_p->gNB_ue_ngap_id);
return -1;
}
/* UE radio capabilities message can occur either during an ngap connected state
* or during initial attach (for example: NAS authentication).
*/
- if (!(ue_context_p->ue_state == NGAP_UE_CONNECTED ||
- ue_context_p->ue_state == NGAP_UE_WAITING_CSR)) {
- NGAP_WARN("You are attempting to send NAS data over non-connected "
- "gNB ue ngap id: %u, current state: %d\n",
- ue_cap_info_ind_p->gNB_ue_ngap_id, ue_context_p->ue_state);
+ if (!(ue_context_p->ue_state == NGAP_UE_CONNECTED || ue_context_p->ue_state == NGAP_UE_WAITING_CSR)) {
+ NGAP_WARN(
+ "You are attempting to send NAS data over non-connected "
+ "gNB ue ngap id: %u, current state: %d\n",
+ ue_cap_info_ind_p->gNB_ue_ngap_id,
+ ue_context_p->ue_state);
return -1;
}
/* Prepare the NGAP message to encode */
- memset(&pdu, 0, sizeof(pdu));
+ NGAP_NGAP_PDU_t pdu = {0};
pdu.present = NGAP_NGAP_PDU_PR_initiatingMessage;
- pdu.choice.initiatingMessage = (NGAP_InitiatingMessage_t *)calloc(1,sizeof(NGAP_InitiatingMessage_t));
- pdu.choice.initiatingMessage->procedureCode = NGAP_ProcedureCode_id_UERadioCapabilityInfoIndication;
- pdu.choice.initiatingMessage->criticality = NGAP_Criticality_ignore;
- pdu.choice.initiatingMessage->value.present = NGAP_InitiatingMessage__value_PR_UERadioCapabilityInfoIndication;
- out = &pdu.choice.initiatingMessage->value.choice.UERadioCapabilityInfoIndication;
+ asn1cCalloc(pdu.choice.initiatingMessage, head);
+ head->procedureCode = NGAP_ProcedureCode_id_UERadioCapabilityInfoIndication;
+ head->criticality = NGAP_Criticality_ignore;
+ head->value.present = NGAP_InitiatingMessage__value_PR_UERadioCapabilityInfoIndication;
+ NGAP_UERadioCapabilityInfoIndication_t *out = &head->value.choice.UERadioCapabilityInfoIndication;
/* mandatory */
- ie = (NGAP_UERadioCapabilityInfoIndicationIEs_t *)calloc(1, sizeof(NGAP_UERadioCapabilityInfoIndicationIEs_t));
- ie->id = NGAP_ProtocolIE_ID_id_AMF_UE_NGAP_ID;
- ie->criticality = NGAP_Criticality_reject;
- ie->value.present = NGAP_UERadioCapabilityInfoIndicationIEs__value_PR_AMF_UE_NGAP_ID;
- //ie->value.choice.AMF_UE_NGAP_ID = ue_context_p->amf_ue_ngap_id;
- asn_uint642INTEGER(&ie->value.choice.AMF_UE_NGAP_ID, ue_context_p->amf_ue_ngap_id);
- asn1cSeqAdd(&out->protocolIEs.list, ie);
+ {
+ asn1cSequenceAdd(out->protocolIEs.list, NGAP_UERadioCapabilityInfoIndicationIEs_t, ie);
+ ie->id = NGAP_ProtocolIE_ID_id_AMF_UE_NGAP_ID;
+ ie->criticality = NGAP_Criticality_reject;
+ ie->value.present = NGAP_UERadioCapabilityInfoIndicationIEs__value_PR_AMF_UE_NGAP_ID;
+ asn_uint642INTEGER(&ie->value.choice.AMF_UE_NGAP_ID, ue_context_p->amf_ue_ngap_id);
+ }
/* mandatory */
- ie = (NGAP_UERadioCapabilityInfoIndicationIEs_t *)calloc(1, sizeof(NGAP_UERadioCapabilityInfoIndicationIEs_t));
- ie->id = NGAP_ProtocolIE_ID_id_RAN_UE_NGAP_ID;
- ie->criticality = NGAP_Criticality_reject;
- ie->value.present = NGAP_UERadioCapabilityInfoIndicationIEs__value_PR_RAN_UE_NGAP_ID;
- ie->value.choice.RAN_UE_NGAP_ID = ue_cap_info_ind_p->gNB_ue_ngap_id;
- asn1cSeqAdd(&out->protocolIEs.list, ie);
+ {
+ asn1cSequenceAdd(out->protocolIEs.list, NGAP_UERadioCapabilityInfoIndicationIEs_t, ie);
+ ie->id = NGAP_ProtocolIE_ID_id_RAN_UE_NGAP_ID;
+ ie->criticality = NGAP_Criticality_reject;
+ ie->value.present = NGAP_UERadioCapabilityInfoIndicationIEs__value_PR_RAN_UE_NGAP_ID;
+ ie->value.choice.RAN_UE_NGAP_ID = (int64_t)ue_cap_info_ind_p->gNB_ue_ngap_id;
+ }
/* mandatory */
- ie = (NGAP_UERadioCapabilityInfoIndicationIEs_t *)calloc(1, sizeof(NGAP_UERadioCapabilityInfoIndicationIEs_t));
- ie->id = NGAP_ProtocolIE_ID_id_UERadioCapability;
- ie->criticality = NGAP_Criticality_ignore;
- ie->value.present = NGAP_UERadioCapabilityInfoIndicationIEs__value_PR_UERadioCapability;
- ie->value.choice.UERadioCapability.buf = ue_cap_info_ind_p->ue_radio_cap.buffer;
- ie->value.choice.UERadioCapability.size = ue_cap_info_ind_p->ue_radio_cap.length;
- asn1cSeqAdd(&out->protocolIEs.list, ie);
+ {
+ asn1cSequenceAdd(out->protocolIEs.list, NGAP_UERadioCapabilityInfoIndicationIEs_t, ie);
+ ie->id = NGAP_ProtocolIE_ID_id_UERadioCapability;
+ ie->criticality = NGAP_Criticality_ignore;
+ ie->value.present = NGAP_UERadioCapabilityInfoIndicationIEs__value_PR_UERadioCapability;
+ ie->value.choice.UERadioCapability.buf = ue_cap_info_ind_p->ue_radio_cap.buffer;
+ ie->value.choice.UERadioCapability.size = ue_cap_info_ind_p->ue_radio_cap.length;
+ }
/* optional */
//NGAP_UERadioCapabilityForPaging TBD
if (ngap_gNB_encode_pdu(&pdu, &buffer, &length) < 0) {
@@ -900,22 +801,17 @@ int ngap_gNB_ue_capabilities(instance_t instance,
}
/* UE associated signalling -> use the allocated stream */
- ngap_gNB_itti_send_sctp_data_req(ngap_gNB_instance_p->instance,
- ue_context_p->amf_ref->assoc_id, buffer,
- length, ue_context_p->tx_stream);
+ ngap_gNB_itti_send_sctp_data_req(ngap_gNB_instance_p->instance, ue_context_p->amf_ref->assoc_id, buffer, length, ue_context_p->tx_stream);
return 0;
}
//------------------------------------------------------------------------------
-int ngap_gNB_pdusession_setup_resp(instance_t instance,
- ngap_pdusession_setup_resp_t *pdusession_setup_resp_p)
+int ngap_gNB_pdusession_setup_resp(instance_t instance, ngap_pdusession_setup_resp_t *pdusession_setup_resp_p)
//------------------------------------------------------------------------------
{
ngap_gNB_instance_t *ngap_gNB_instance_p = NULL;
struct ngap_gNB_ue_context_s *ue_context_p = NULL;
- NGAP_NGAP_PDU_t pdu;
- NGAP_PDUSessionResourceSetupResponse_t *out;
- NGAP_PDUSessionResourceSetupResponseIEs_t *ie;
+ NGAP_NGAP_PDU_t pdu = {0};
uint8_t *buffer = NULL;
uint32_t length;
@@ -924,155 +820,134 @@ int ngap_gNB_pdusession_setup_resp(instance_t instance,
DevAssert(pdusession_setup_resp_p != NULL);
DevAssert(ngap_gNB_instance_p != NULL);
- if ((ue_context_p = ngap_gNB_get_ue_context(ngap_gNB_instance_p,
- pdusession_setup_resp_p->gNB_ue_ngap_id)) == NULL) {
+ if ((ue_context_p = ngap_get_ue_context(pdusession_setup_resp_p->gNB_ue_ngap_id)) == NULL) {
/* The context for this gNB ue ngap id doesn't exist in the map of gNB UEs */
- NGAP_WARN("Failed to find ue context associated with gNB ue ngap id: 0x%08x\n",
- pdusession_setup_resp_p->gNB_ue_ngap_id);
+ NGAP_WARN("Failed to find ue context associated with gNB ue ngap id: 0x%08x\n", pdusession_setup_resp_p->gNB_ue_ngap_id);
return -1;
}
/* Uplink NAS transport can occur either during an ngap connected state
* or during initial attach (for example: NAS authentication).
*/
- if (!(ue_context_p->ue_state == NGAP_UE_CONNECTED ||
- ue_context_p->ue_state == NGAP_UE_WAITING_CSR)) {
- NGAP_WARN("You are attempting to send NAS data over non-connected "
- "gNB ue ngap id: %08x, current state: %d\n",
- pdusession_setup_resp_p->gNB_ue_ngap_id, ue_context_p->ue_state);
+ if (!(ue_context_p->ue_state == NGAP_UE_CONNECTED || ue_context_p->ue_state == NGAP_UE_WAITING_CSR)) {
+ NGAP_WARN(
+ "You are attempting to send NAS data over non-connected "
+ "gNB ue ngap id: %08x, current state: %d\n",
+ pdusession_setup_resp_p->gNB_ue_ngap_id,
+ ue_context_p->ue_state);
return -1;
}
/* Prepare the NGAP message to encode */
- memset(&pdu, 0, sizeof(pdu));
pdu.present = NGAP_NGAP_PDU_PR_successfulOutcome;
- pdu.choice.successfulOutcome = calloc(1,sizeof *pdu.choice.successfulOutcome);
- pdu.choice.successfulOutcome->procedureCode = NGAP_ProcedureCode_id_PDUSessionResourceSetup;
- pdu.choice.successfulOutcome->criticality = NGAP_Criticality_reject;
- pdu.choice.successfulOutcome->value.present = NGAP_SuccessfulOutcome__value_PR_PDUSessionResourceSetupResponse;
- out = &pdu.choice.successfulOutcome->value.choice.PDUSessionResourceSetupResponse;
+ asn1cCalloc(pdu.choice.successfulOutcome, successfulOutcome);
+ successfulOutcome->procedureCode = NGAP_ProcedureCode_id_PDUSessionResourceSetup;
+ successfulOutcome->criticality = NGAP_Criticality_reject;
+ successfulOutcome->value.present = NGAP_SuccessfulOutcome__value_PR_PDUSessionResourceSetupResponse;
+ NGAP_PDUSessionResourceSetupResponse_t *out = &successfulOutcome->value.choice.PDUSessionResourceSetupResponse;
/* mandatory */
- ie = calloc(1, sizeof *ie);
- ie->id = NGAP_ProtocolIE_ID_id_AMF_UE_NGAP_ID;
- ie->criticality = NGAP_Criticality_ignore;
- ie->value.present = NGAP_PDUSessionResourceSetupResponseIEs__value_PR_AMF_UE_NGAP_ID;
- asn_uint642INTEGER(&ie->value.choice.AMF_UE_NGAP_ID, ue_context_p->amf_ue_ngap_id);
- asn1cSeqAdd(&out->protocolIEs.list, ie);
+ {
+ asn1cSequenceAdd(out->protocolIEs.list, NGAP_PDUSessionResourceSetupResponseIEs_t, ie);
+ ie->id = NGAP_ProtocolIE_ID_id_AMF_UE_NGAP_ID;
+ ie->criticality = NGAP_Criticality_ignore;
+ ie->value.present = NGAP_PDUSessionResourceSetupResponseIEs__value_PR_AMF_UE_NGAP_ID;
+ asn_uint642INTEGER(&ie->value.choice.AMF_UE_NGAP_ID, ue_context_p->amf_ue_ngap_id);
+ }
/* mandatory */
- ie = calloc(1, sizeof *ie );
- ie->id = NGAP_ProtocolIE_ID_id_RAN_UE_NGAP_ID;
- ie->criticality = NGAP_Criticality_ignore;
- ie->value.present = NGAP_PDUSessionResourceSetupResponseIEs__value_PR_RAN_UE_NGAP_ID;
- ie->value.choice.RAN_UE_NGAP_ID = pdusession_setup_resp_p->gNB_ue_ngap_id;
- asn1cSeqAdd(&out->protocolIEs.list, ie);
+ {
+ asn1cSequenceAdd(out->protocolIEs.list, NGAP_PDUSessionResourceSetupResponseIEs_t, ie);
+ ie->id = NGAP_ProtocolIE_ID_id_RAN_UE_NGAP_ID;
+ ie->criticality = NGAP_Criticality_ignore;
+ ie->value.present = NGAP_PDUSessionResourceSetupResponseIEs__value_PR_RAN_UE_NGAP_ID;
+ ie->value.choice.RAN_UE_NGAP_ID = pdusession_setup_resp_p->gNB_ue_ngap_id;
+ }
/* optional */
if (pdusession_setup_resp_p->nb_of_pdusessions > 0) {
- ie = calloc(1, sizeof *ie );
- ie->id = NGAP_ProtocolIE_ID_id_PDUSessionResourceSetupListSURes;
- ie->criticality = NGAP_Criticality_ignore;
- ie->value.present = NGAP_PDUSessionResourceSetupResponseIEs__value_PR_PDUSessionResourceSetupListSURes;
+ asn1cSequenceAdd(out->protocolIEs.list, NGAP_PDUSessionResourceSetupResponseIEs_t, ie3);
+ ie3->id = NGAP_ProtocolIE_ID_id_PDUSessionResourceSetupListSURes;
+ ie3->criticality = NGAP_Criticality_ignore;
+ ie3->value.present = NGAP_PDUSessionResourceSetupResponseIEs__value_PR_PDUSessionResourceSetupListSURes;
for (int i = 0; i < pdusession_setup_resp_p->nb_of_pdusessions; i++) {
- NGAP_PDUSessionResourceSetupItemSURes_t *item=calloc(1, sizeof *item );
- NGAP_PDUSessionResourceSetupResponseTransfer_t *pdusessionTransfer_p = calloc(1, sizeof *pdusessionTransfer_p );
-
+ pdusession_setup_t *pdusession = pdusession_setup_resp_p->pdusessions + i;
+ asn1cSequenceAdd(ie3->value.choice.PDUSessionResourceSetupListSURes.list, NGAP_PDUSessionResourceSetupItemSURes_t, item);
/* pDUSessionID */
- item->pDUSessionID = pdusession_setup_resp_p->pdusessions[i].pdusession_id;
+ item->pDUSessionID = pdusession->pdusession_id;
/* dLQosFlowPerTNLInformation */
-
- pdusessionTransfer_p->dLQosFlowPerTNLInformation.uPTransportLayerInformation.present = NGAP_UPTransportLayerInformation_PR_gTPTunnel;
- pdusessionTransfer_p->dLQosFlowPerTNLInformation.uPTransportLayerInformation.choice.gTPTunnel =
- calloc(1, sizeof(struct NGAP_GTPTunnel));
- struct NGAP_GTPTunnel *tmp=pdusessionTransfer_p->dLQosFlowPerTNLInformation.uPTransportLayerInformation.choice.gTPTunnel;
- GTP_TEID_TO_ASN1(pdusession_setup_resp_p->pdusessions[i].gtp_teid, &tmp->gTP_TEID);
- if (pdusession_setup_resp_p->pdusessions[i].gNB_addr.length) {
- tmp->transportLayerAddress.buf = malloc(pdusession_setup_resp_p->pdusessions[i].gNB_addr.length);
-
- memcpy(tmp->transportLayerAddress.buf,
- pdusession_setup_resp_p->pdusessions[i].gNB_addr.buffer,
- pdusession_setup_resp_p->pdusessions[i].gNB_addr.length);
- tmp->transportLayerAddress.size = pdusession_setup_resp_p->pdusessions[i].gNB_addr.length;
- tmp->transportLayerAddress.bits_unused = 0;
-
- NGAP_DEBUG("pdusession_setup_resp_p: pdusession ID %ld, gnb_addr %d.%d.%d.%d, SIZE %ld \n",
- item->pDUSessionID,
- tmp->transportLayerAddress.buf[0],
- tmp->transportLayerAddress.buf[1],
- tmp->transportLayerAddress.buf[2],
- tmp->transportLayerAddress.buf[3],
- tmp->transportLayerAddress.size);
- }
-
+ NGAP_PDUSessionResourceSetupResponseTransfer_t pdusessionTransfer = {0};
+ pdusessionTransfer.dLQosFlowPerTNLInformation.uPTransportLayerInformation.present = NGAP_UPTransportLayerInformation_PR_gTPTunnel;
+ asn1cCalloc(pdusessionTransfer.dLQosFlowPerTNLInformation.uPTransportLayerInformation.choice.gTPTunnel, tmp);
+ GTP_TEID_TO_ASN1(pdusession->gtp_teid, &tmp->gTP_TEID);
+ allocAddrCopy(&tmp->transportLayerAddress, pdusession->gNB_addr);
+ NGAP_DEBUG("pdusession_setup_resp_p: pdusession ID %ld, gnb_addr %d.%d.%d.%d, SIZE %ld \n",
+ item->pDUSessionID,
+ tmp->transportLayerAddress.buf[0],
+ tmp->transportLayerAddress.buf[1],
+ tmp->transportLayerAddress.buf[2],
+ tmp->transportLayerAddress.buf[3],
+ tmp->transportLayerAddress.size);
/* associatedQosFlowList. number of 1? */
for(int j=0; j < pdusession_setup_resp_p->pdusessions[i].nb_of_qos_flow; j++) {
- NGAP_AssociatedQosFlowItem_t *ass_qos_item_p = calloc(1, sizeof *ass_qos_item_p);
+ asn1cSequenceAdd(pdusessionTransfer.dLQosFlowPerTNLInformation.associatedQosFlowList.list, NGAP_AssociatedQosFlowItem_t, ass_qos_item_p);
/* qosFlowIdentifier */
ass_qos_item_p->qosFlowIdentifier = pdusession_setup_resp_p->pdusessions[i].associated_qos_flows[j].qfi;
/* qosFlowMappingIndication */
- //if(pdusession_setup_resp_p->pdusessions[i].associated_qos_flows[j].qos_flow_mapping_ind != QOSFLOW_MAPPING_INDICATION_NON) {
- // ass_qos_item_p->qosFlowMappingIndication = malloc(sizeof(*ass_qos_item_p->qosFlowMappingIndication));
- // *ass_qos_item_p->qosFlowMappingIndication = pdusession_setup_resp_p->pdusessions[i].associated_qos_flows[j].qos_flow_mapping_ind;
- //}
- asn1cSeqAdd(&pdusessionTransfer_p->dLQosFlowPerTNLInformation.associatedQosFlowList.list, ass_qos_item_p);
+ // if(pdusession_setup_resp_p->pdusessions[i].associated_qos_flows[j].qos_flow_mapping_ind != QOSFLOW_MAPPING_INDICATION_NON) {
+ // ass_qos_item_p->qosFlowMappingIndication = malloc(sizeof(*ass_qos_item_p->qosFlowMappingIndication));
+ // *ass_qos_item_p->qosFlowMappingIndication = pdusession_setup_resp_p->pdusessions[i].associated_qos_flows[j].qos_flow_mapping_ind;
+ // }
}
- asn_encode_to_new_buffer_result_t res = asn_encode_to_new_buffer(NULL, ATS_ALIGNED_CANONICAL_PER,
- &asn_DEF_NGAP_PDUSessionResourceSetupResponseTransfer, pdusessionTransfer_p);
+ asn_encode_to_new_buffer_result_t res = asn_encode_to_new_buffer(NULL, ATS_ALIGNED_CANONICAL_PER, &asn_DEF_NGAP_PDUSessionResourceSetupResponseTransfer, &pdusessionTransfer);
AssertFatal (res.buffer, "ASN1 message encoding failed (%s, %lu)!\n", res.result.failed_type->name, res.result.encoded);
item->pDUSessionResourceSetupResponseTransfer.buf = res.buffer;
item->pDUSessionResourceSetupResponseTransfer.size = res.result.encoded;
- ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_NGAP_PDUSessionResourceSetupResponseTransfer, pdusessionTransfer_p);
-
- asn1cSeqAdd(&ie->value.choice.PDUSessionResourceSetupListSURes.list, item);
+ ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_NGAP_PDUSessionResourceSetupResponseTransfer, &pdusessionTransfer);
}
- asn1cSeqAdd(&out->protocolIEs.list, ie);
}
/* optional */
if (pdusession_setup_resp_p->nb_of_pdusessions_failed > 0) {
- ie = calloc(1, sizeof *ie);
+ asn1cSequenceAdd(out->protocolIEs.list, NGAP_PDUSessionResourceSetupResponseIEs_t, ie);
ie->id = NGAP_ProtocolIE_ID_id_PDUSessionResourceFailedToSetupListSURes;
ie->criticality = NGAP_Criticality_ignore;
ie->value.present = NGAP_PDUSessionResourceSetupResponseIEs__value_PR_PDUSessionResourceFailedToSetupListSURes;
for (int i = 0; i < pdusession_setup_resp_p->nb_of_pdusessions_failed; i++) {
LOG_W(NGAP,"add a failed session\n");
- NGAP_PDUSessionResourceFailedToSetupItemSURes_t *item=calloc(1, sizeof *item);
- NGAP_PDUSessionResourceSetupUnsuccessfulTransfer_t *pdusessionUnTransfer_p = calloc(1, sizeof *pdusessionUnTransfer_p);
+ pdusession_failed_t *pdusession_failed = pdusession_setup_resp_p->pdusessions_failed + i;
+ asn1cSequenceAdd(ie->value.choice.PDUSessionResourceFailedToSetupListSURes.list, NGAP_PDUSessionResourceFailedToSetupItemSURes_t, item);
+ NGAP_PDUSessionResourceSetupUnsuccessfulTransfer_t pdusessionUnTransfer_p = {0};
/* pDUSessionID */
- item->pDUSessionID = pdusession_setup_resp_p->pdusessions_failed[i].pdusession_id;
+ item->pDUSessionID = pdusession_failed->pdusession_id;
/* cause */
- switch(pdusession_setup_resp_p->pdusessions_failed[i].cause) {
+ pdusessionUnTransfer_p.cause.present = pdusession_failed->cause;
+ switch (pdusessionUnTransfer_p.cause.present) {
case NGAP_CAUSE_RADIO_NETWORK:
- pdusessionUnTransfer_p->cause.present = NGAP_Cause_PR_radioNetwork;
- pdusessionUnTransfer_p->cause.choice.radioNetwork = pdusession_setup_resp_p->pdusessions_failed[i].cause_value;
+ pdusessionUnTransfer_p.cause.choice.radioNetwork = pdusession_failed->cause_value;
break;
case NGAP_CAUSE_TRANSPORT:
- pdusessionUnTransfer_p->cause.present = NGAP_Cause_PR_transport;
- pdusessionUnTransfer_p->cause.choice.transport = pdusession_setup_resp_p->pdusessions_failed[i].cause_value;
+ pdusessionUnTransfer_p.cause.choice.transport = pdusession_failed->cause_value;
break;
case NGAP_CAUSE_NAS:
- pdusessionUnTransfer_p->cause.present = NGAP_Cause_PR_nas;
- pdusessionUnTransfer_p->cause.choice.nas = pdusession_setup_resp_p->pdusessions_failed[i].cause_value;
+ pdusessionUnTransfer_p.cause.choice.nas = pdusession_failed->cause_value;
break;
case NGAP_CAUSE_PROTOCOL:
- pdusessionUnTransfer_p->cause.present = NGAP_Cause_PR_protocol;
- pdusessionUnTransfer_p->cause.choice.protocol = pdusession_setup_resp_p->pdusessions_failed[i].cause_value;
+ pdusessionUnTransfer_p.cause.choice.protocol = pdusession_failed->cause_value;
break;
case NGAP_CAUSE_MISC:
- pdusessionUnTransfer_p->cause.present = NGAP_Cause_PR_misc;
- pdusessionUnTransfer_p->cause.choice.misc = pdusession_setup_resp_p->pdusessions_failed[i].cause_value;
+ pdusessionUnTransfer_p.cause.choice.misc = pdusession_failed->cause_value;
break;
case NGAP_CAUSE_NOTHING:
@@ -1082,31 +957,23 @@ int ngap_gNB_pdusession_setup_resp(instance_t instance,
NGAP_DEBUG("pdusession setup response: failed pdusession ID %ld\n", item->pDUSessionID);
- asn_encode_to_new_buffer_result_t res =
- asn_encode_to_new_buffer(NULL, ATS_ALIGNED_CANONICAL_PER,
- &asn_DEF_NGAP_PDUSessionResourceSetupUnsuccessfulTransfer, pdusessionUnTransfer_p);
+ asn_encode_to_new_buffer_result_t res = asn_encode_to_new_buffer(NULL, ATS_ALIGNED_CANONICAL_PER, &asn_DEF_NGAP_PDUSessionResourceSetupUnsuccessfulTransfer, &pdusessionUnTransfer_p);
item->pDUSessionResourceSetupUnsuccessfulTransfer.buf = res.buffer;
item->pDUSessionResourceSetupUnsuccessfulTransfer.size = res.result.encoded;
- ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_NGAP_PDUSessionResourceSetupUnsuccessfulTransfer, pdusessionUnTransfer_p);
-
- asn1cSeqAdd(&ie->value.choice.PDUSessionResourceFailedToSetupListSURes.list, item);
+ ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_NGAP_PDUSessionResourceSetupUnsuccessfulTransfer, &pdusessionUnTransfer_p);
}
-
- asn1cSeqAdd(&out->protocolIEs.list, ie);
}
/* optional */
if (0) {
- ie = calloc(1, sizeof *ie);
- ie->id = NGAP_ProtocolIE_ID_id_CriticalityDiagnostics;
- ie->criticality = NGAP_Criticality_ignore;
- ie->value.present = NGAP_PDUSessionResourceSetupResponseIEs__value_PR_CriticalityDiagnostics;
- // ie->value.choice.CriticalityDiagnostics = ;
- asn1cSeqAdd(&out->protocolIEs.list, ie);
+ asn1cSequenceAdd(out->protocolIEs.list, NGAP_PDUSessionResourceSetupResponseIEs_t, ie);
+ ie->id = NGAP_ProtocolIE_ID_id_CriticalityDiagnostics;
+ ie->criticality = NGAP_Criticality_ignore;
+ ie->value.present = NGAP_PDUSessionResourceSetupResponseIEs__value_PR_CriticalityDiagnostics;
+ // ie->value.choice.CriticalityDiagnostics = ;
}
-
if (ngap_gNB_encode_pdu(&pdu, &buffer, &length) < 0) {
NGAP_ERROR("Failed to encode uplink transport\n");
/* Encode procedure has failed... */
@@ -1114,100 +981,90 @@ int ngap_gNB_pdusession_setup_resp(instance_t instance,
}
/* UE associated signalling -> use the allocated stream */
- ngap_gNB_itti_send_sctp_data_req(ngap_gNB_instance_p->instance,
- ue_context_p->amf_ref->assoc_id, buffer,
- length, ue_context_p->tx_stream);
+ ngap_gNB_itti_send_sctp_data_req(ngap_gNB_instance_p->instance, ue_context_p->amf_ref->assoc_id, buffer, length, ue_context_p->tx_stream);
return 0;
}
//------------------------------------------------------------------------------
-int ngap_gNB_pdusession_modify_resp(instance_t instance,
- ngap_pdusession_modify_resp_t *pdusession_modify_resp_p)
+int ngap_gNB_pdusession_modify_resp(instance_t instance, ngap_pdusession_modify_resp_t *pdusession_modify_resp_p)
//------------------------------------------------------------------------------
{
ngap_gNB_instance_t *ngap_gNB_instance_p = NULL;
struct ngap_gNB_ue_context_s *ue_context_p = NULL;
- NGAP_NGAP_PDU_t pdu;
- NGAP_PDUSessionResourceModifyResponse_t *out;
- NGAP_PDUSessionResourceModifyResponseIEs_t *ie;
+ NGAP_NGAP_PDU_t pdu;
uint8_t *buffer = NULL;
uint32_t length;
- int i;
- asn_encode_to_new_buffer_result_t res = { NULL, {0, NULL, NULL} };
-
+
/* Retrieve the NGAP gNB instance associated with Mod_id */
ngap_gNB_instance_p = ngap_gNB_get_instance(instance);
DevAssert(pdusession_modify_resp_p != NULL);
DevAssert(ngap_gNB_instance_p != NULL);
- if ((ue_context_p = ngap_gNB_get_ue_context(ngap_gNB_instance_p,
- pdusession_modify_resp_p->gNB_ue_ngap_id)) == NULL) {
+ if ((ue_context_p = ngap_get_ue_context(pdusession_modify_resp_p->gNB_ue_ngap_id)) == NULL) {
/* The context for this gNB ue ngap id doesn't exist in the map of gNB UEs */
- NGAP_WARN("Failed to find ue context associated with gNB ue ngap id: 0x%08x\n",
- pdusession_modify_resp_p->gNB_ue_ngap_id);
+ NGAP_WARN("Failed to find ue context associated with gNB ue ngap id: 0x%08x\n", pdusession_modify_resp_p->gNB_ue_ngap_id);
return -1;
}
/* Uplink NAS transport can occur either during an ngap connected state
* or during initial attach (for example: NAS authentication).
*/
- if (!(ue_context_p->ue_state == NGAP_UE_CONNECTED ||
- ue_context_p->ue_state == NGAP_UE_WAITING_CSR)) {
- NGAP_WARN("You are attempting to send NAS data over non-connected "
- "gNB ue ngap id: %08x, current state: %d\n",
- pdusession_modify_resp_p->gNB_ue_ngap_id, ue_context_p->ue_state);
+ if (!(ue_context_p->ue_state == NGAP_UE_CONNECTED || ue_context_p->ue_state == NGAP_UE_WAITING_CSR)) {
+ NGAP_WARN(
+ "You are attempting to send NAS data over non-connected "
+ "gNB ue ngap id: %08x, current state: %d\n",
+ pdusession_modify_resp_p->gNB_ue_ngap_id,
+ ue_context_p->ue_state);
return -1;
}
/* Prepare the NGAP message to encode */
memset(&pdu, 0, sizeof(pdu));
pdu.present = NGAP_NGAP_PDU_PR_successfulOutcome;
- pdu.choice.successfulOutcome = (NGAP_SuccessfulOutcome_t *)calloc(1,sizeof(struct NGAP_SuccessfulOutcome));
- pdu.choice.successfulOutcome->procedureCode = NGAP_ProcedureCode_id_PDUSessionResourceModify;
- pdu.choice.successfulOutcome->criticality = NGAP_Criticality_reject;
- pdu.choice.successfulOutcome->value.present = NGAP_SuccessfulOutcome__value_PR_PDUSessionResourceModifyResponse;
- out = &pdu.choice.successfulOutcome->value.choice.PDUSessionResourceModifyResponse;
+ asn1cCalloc(pdu.choice.successfulOutcome, head);
+ head->procedureCode = NGAP_ProcedureCode_id_PDUSessionResourceModify;
+ head->criticality = NGAP_Criticality_reject;
+ head->value.present = NGAP_SuccessfulOutcome__value_PR_PDUSessionResourceModifyResponse;
+ NGAP_PDUSessionResourceModifyResponse_t *out = &head->value.choice.PDUSessionResourceModifyResponse;
/* mandatory */
- ie = (NGAP_PDUSessionResourceModifyResponseIEs_t *)calloc(1, sizeof(NGAP_PDUSessionResourceModifyResponseIEs_t));
- ie->id = NGAP_ProtocolIE_ID_id_AMF_UE_NGAP_ID;
- ie->criticality = NGAP_Criticality_ignore;
- ie->value.present = NGAP_PDUSessionResourceModifyResponseIEs__value_PR_AMF_UE_NGAP_ID;
- asn_uint642INTEGER(&ie->value.choice.AMF_UE_NGAP_ID, ue_context_p->amf_ue_ngap_id);
- asn1cSeqAdd(&out->protocolIEs.list, ie);
+ {
+ asn1cSequenceAdd(out->protocolIEs.list, NGAP_PDUSessionResourceModifyResponseIEs_t, ie);
+ ie = (NGAP_PDUSessionResourceModifyResponseIEs_t *)calloc(1, sizeof(NGAP_PDUSessionResourceModifyResponseIEs_t));
+ ie->id = NGAP_ProtocolIE_ID_id_AMF_UE_NGAP_ID;
+ ie->criticality = NGAP_Criticality_ignore;
+ ie->value.present = NGAP_PDUSessionResourceModifyResponseIEs__value_PR_AMF_UE_NGAP_ID;
+ asn_uint642INTEGER(&ie->value.choice.AMF_UE_NGAP_ID, ue_context_p->amf_ue_ngap_id);
+ asn1cSeqAdd(&out->protocolIEs.list, ie);
+ }
/* mandatory */
- ie = (NGAP_PDUSessionResourceModifyResponseIEs_t *)calloc(1, sizeof(NGAP_PDUSessionResourceModifyResponseIEs_t));
- ie->id = NGAP_ProtocolIE_ID_id_RAN_UE_NGAP_ID;
- ie->criticality = NGAP_Criticality_ignore;
- ie->value.present = NGAP_PDUSessionResourceModifyResponseIEs__value_PR_RAN_UE_NGAP_ID;
- ie->value.choice.RAN_UE_NGAP_ID = pdusession_modify_resp_p->gNB_ue_ngap_id;
- asn1cSeqAdd(&out->protocolIEs.list, ie);
+ {
+ asn1cSequenceAdd(out->protocolIEs.list, NGAP_PDUSessionResourceModifyResponseIEs_t, ie);
+ ie->id = NGAP_ProtocolIE_ID_id_RAN_UE_NGAP_ID;
+ ie->criticality = NGAP_Criticality_ignore;
+ ie->value.present = NGAP_PDUSessionResourceModifyResponseIEs__value_PR_RAN_UE_NGAP_ID;
+ ie->value.choice.RAN_UE_NGAP_ID = pdusession_modify_resp_p->gNB_ue_ngap_id;
+ }
/* PDUSessionResourceModifyListModRes optional */
if (pdusession_modify_resp_p->nb_of_pdusessions > 0) {
- ie = (NGAP_PDUSessionResourceModifyResponseIEs_t *)calloc(1, sizeof(NGAP_PDUSessionResourceModifyResponseIEs_t));
+ asn1cSequenceAdd(out->protocolIEs.list, NGAP_PDUSessionResourceModifyResponseIEs_t, ie);
ie->id = NGAP_ProtocolIE_ID_id_PDUSessionResourceModifyListModRes;
ie->criticality = NGAP_Criticality_ignore;
ie->value.present = NGAP_PDUSessionResourceModifyResponseIEs__value_PR_PDUSessionResourceModifyListModRes;
- for (i = 0; i < pdusession_modify_resp_p->nb_of_pdusessions; i++) {
- NGAP_PDUSessionResourceModifyItemModRes_t *item;
- NGAP_PDUSessionResourceModifyResponseTransfer_t *transfer_p = NULL;
-
- item = (NGAP_PDUSessionResourceModifyItemModRes_t *)calloc(1, sizeof(NGAP_PDUSessionResourceModifyItemModRes_t));
+ for (int i = 0; i < pdusession_modify_resp_p->nb_of_pdusessions; i++) {
+ asn1cSequenceAdd(ie->value.choice.PDUSessionResourceModifyListModRes.list, NGAP_PDUSessionResourceModifyItemModRes_t, item);
item->pDUSessionID = pdusession_modify_resp_p->pdusessions[i].pdusession_id;
- transfer_p = (NGAP_PDUSessionResourceModifyResponseTransfer_t *)calloc(1, sizeof(NGAP_PDUSessionResourceModifyResponseTransfer_t));
- transfer_p->qosFlowAddOrModifyResponseList = (NGAP_QosFlowAddOrModifyResponseList_t *)calloc(1, sizeof(NGAP_QosFlowAddOrModifyResponseList_t));
+ NGAP_PDUSessionResourceModifyResponseTransfer_t transfer = {0};
+ asn1cCalloc(transfer.qosFlowAddOrModifyResponseList, tmp);
- uint8_t qos_flow_index;
- for (qos_flow_index = 0; qos_flow_index < pdusession_modify_resp_p->pdusessions[i].nb_of_qos_flow; qos_flow_index++) {
- NGAP_QosFlowAddOrModifyResponseItem_t *qosFlowAddOrModifyResponseItem_p = calloc(1, sizeof(NGAP_QosFlowAddOrModifyResponseItem_t));
- qosFlowAddOrModifyResponseItem_p->qosFlowIdentifier =
- pdusession_modify_resp_p->pdusessions[i].qos[qos_flow_index].qfi;
- asn1cSeqAdd(&transfer_p->qosFlowAddOrModifyResponseList->list, qosFlowAddOrModifyResponseItem_p);
+ for (int qos_flow_index = 0; qos_flow_index < pdusession_modify_resp_p->pdusessions[i].nb_of_qos_flow; qos_flow_index++) {
+ asn1cSequenceAdd(tmp->list, NGAP_QosFlowAddOrModifyResponseItem_t, qos);
+ qos->qosFlowIdentifier = pdusession_modify_resp_p->pdusessions[i].qos[qos_flow_index].qfi;
}
-
- memset(&res, 0, sizeof(res));
+ asn_encode_to_new_buffer_result_t res = {0};
+ NGAP_PDUSessionResourceModifyResponseTransfer_t *transfer_p = NULL;
res = asn_encode_to_new_buffer(NULL, ATS_ALIGNED_CANONICAL_PER, &asn_DEF_NGAP_PDUSessionResourceModifyResponseTransfer, transfer_p);
item->pDUSessionResourceModifyResponseTransfer.buf = res.buffer;
item->pDUSessionResourceModifyResponseTransfer.size = res.result.encoded;
@@ -1215,52 +1072,42 @@ int ngap_gNB_pdusession_modify_resp(instance_t instance,
ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_NGAP_PDUSessionResourceModifyResponseTransfer, transfer_p);
NGAP_DEBUG("pdusession_modify_resp: modified pdusession ID %ld\n", item->pDUSessionID);
- asn1cSeqAdd(&ie->value.choice.PDUSessionResourceModifyListModRes.list, item);
}
-
- asn1cSeqAdd(&out->protocolIEs.list, ie);
}
/* optional */
if (pdusession_modify_resp_p->nb_of_pdusessions_failed > 0) {
- ie = (NGAP_PDUSessionResourceModifyResponseIEs_t *)calloc(1, sizeof(NGAP_PDUSessionResourceModifyResponseIEs_t));
+ asn1cSequenceAdd(out->protocolIEs.list, NGAP_PDUSessionResourceModifyResponseIEs_t, ie);
ie->id = NGAP_ProtocolIE_ID_id_PDUSessionResourceFailedToModifyListModRes;
ie->criticality = NGAP_Criticality_ignore;
ie->value.present = NGAP_PDUSessionResourceModifyResponseIEs__value_PR_PDUSessionResourceFailedToModifyListModRes;
- for (i = 0; i < pdusession_modify_resp_p->nb_of_pdusessions_failed; i++) {
- NGAP_PDUSessionResourceFailedToModifyItemModRes_t *item;
- NGAP_PDUSessionResourceModifyUnsuccessfulTransfer_t *pdusessionTransfer_p = NULL;
-
- item = (NGAP_PDUSessionResourceFailedToModifyItemModRes_t *)calloc(1, sizeof(NGAP_PDUSessionResourceFailedToModifyItemModRes_t));
+ for (int i = 0; i < pdusession_modify_resp_p->nb_of_pdusessions_failed; i++) {
+ asn1cSequenceAdd(ie->value.choice.PDUSessionResourceFailedToModifyListModRes.list, NGAP_PDUSessionResourceFailedToModifyItemModRes_t, item);
item->pDUSessionID = pdusession_modify_resp_p->pdusessions_failed[i].pdusession_id;
- pdusessionTransfer_p = (NGAP_PDUSessionResourceModifyUnsuccessfulTransfer_t *)calloc(1, sizeof(NGAP_PDUSessionResourceModifyUnsuccessfulTransfer_t));
-
- switch(pdusession_modify_resp_p->pdusessions_failed[i].cause) {
+ NGAP_PDUSessionResourceModifyUnsuccessfulTransfer_t pdusessionTransfer = {0};
+ pdusessionTransfer.cause.present = pdusession_modify_resp_p->pdusessions_failed[i].cause;
+
+ switch (pdusessionTransfer.cause.present) {
case NGAP_CAUSE_RADIO_NETWORK:
- pdusessionTransfer_p->cause.present = NGAP_Cause_PR_radioNetwork;
- pdusessionTransfer_p->cause.choice.radioNetwork = pdusession_modify_resp_p->pdusessions_failed[i].cause_value;
+ pdusessionTransfer.cause.choice.radioNetwork = pdusession_modify_resp_p->pdusessions_failed[i].cause_value;
break;
case NGAP_CAUSE_TRANSPORT:
- pdusessionTransfer_p->cause.present = NGAP_Cause_PR_transport;
- pdusessionTransfer_p->cause.choice.transport = pdusession_modify_resp_p->pdusessions_failed[i].cause_value;
+ pdusessionTransfer.cause.choice.transport = pdusession_modify_resp_p->pdusessions_failed[i].cause_value;
break;
case NGAP_CAUSE_NAS:
- pdusessionTransfer_p->cause.present = NGAP_Cause_PR_nas;
- pdusessionTransfer_p->cause.choice.nas = pdusession_modify_resp_p->pdusessions_failed[i].cause_value;
+ pdusessionTransfer.cause.choice.nas = pdusession_modify_resp_p->pdusessions_failed[i].cause_value;
break;
case NGAP_CAUSE_PROTOCOL:
- pdusessionTransfer_p->cause.present = NGAP_Cause_PR_protocol;
- pdusessionTransfer_p->cause.choice.protocol = pdusession_modify_resp_p->pdusessions_failed[i].cause_value;
+ pdusessionTransfer.cause.choice.protocol = pdusession_modify_resp_p->pdusessions_failed[i].cause_value;
break;
case NGAP_CAUSE_MISC:
- pdusessionTransfer_p->cause.present = NGAP_Cause_PR_misc;
- pdusessionTransfer_p->cause.choice.misc = pdusession_modify_resp_p->pdusessions_failed[i].cause_value;
+ pdusessionTransfer.cause.choice.misc = pdusession_modify_resp_p->pdusessions_failed[i].cause_value;
break;
case NGAP_CAUSE_NOTHING:
@@ -1268,33 +1115,27 @@ int ngap_gNB_pdusession_modify_resp(instance_t instance,
break;
}
- memset(&res, 0, sizeof(res));
- res = asn_encode_to_new_buffer(NULL, ATS_ALIGNED_CANONICAL_PER, &asn_DEF_NGAP_PDUSessionResourceModifyUnsuccessfulTransfer, pdusessionTransfer_p);
+ asn_encode_to_new_buffer_result_t res = {0};
+ NGAP_PDUSessionResourceModifyUnsuccessfulTransfer_t *pdusessionTransfer_p = NULL;
+ res = asn_encode_to_new_buffer(NULL, ATS_ALIGNED_CANONICAL_PER, &asn_DEF_NGAP_PDUSessionResourceModifyUnsuccessfulTransfer, &pdusessionTransfer);
item->pDUSessionResourceModifyUnsuccessfulTransfer.buf = res.buffer;
item->pDUSessionResourceModifyUnsuccessfulTransfer.size = res.result.encoded;
ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_NGAP_PDUSessionResourceModifyUnsuccessfulTransfer, pdusessionTransfer_p);
-
NGAP_DEBUG("pdusession_modify_resp: failed pdusession ID %ld\n", item->pDUSessionID);
- asn1cSeqAdd(&ie->value.choice.PDUSessionResourceFailedToModifyListModRes.list, item);
}
-
- asn1cSeqAdd(&out->protocolIEs.list, ie);
}
/* optional */
if (0) {
- ie = (NGAP_PDUSessionResourceModifyResponseIEs_t *)calloc(1, sizeof(NGAP_PDUSessionResourceModifyResponseIEs_t));
+ asn1cSequenceAdd(out->protocolIEs.list, NGAP_PDUSessionResourceModifyResponseIEs_t, ie);
ie->id = NGAP_ProtocolIE_ID_id_CriticalityDiagnostics;
ie->criticality = NGAP_Criticality_ignore;
ie->value.present = NGAP_PDUSessionResourceModifyResponseIEs__value_PR_CriticalityDiagnostics;
// ie->value.choice.CriticalityDiagnostics = ;
- asn1cSeqAdd(&out->protocolIEs.list, ie);
}
- fprintf(stderr, "start encode\n");
-
if (ngap_gNB_encode_pdu(&pdu, &buffer, &length) < 0) {
NGAP_ERROR("Failed to encode uplink transport\n");
/* Encode procedure has failed... */
@@ -1302,22 +1143,17 @@ int ngap_gNB_pdusession_modify_resp(instance_t instance,
}
/* UE associated signalling -> use the allocated stream */
- ngap_gNB_itti_send_sctp_data_req(ngap_gNB_instance_p->instance,
- ue_context_p->amf_ref->assoc_id, buffer,
- length, ue_context_p->tx_stream);
+ ngap_gNB_itti_send_sctp_data_req(ngap_gNB_instance_p->instance, ue_context_p->amf_ref->assoc_id, buffer, length, ue_context_p->tx_stream);
return 0;
}
//------------------------------------------------------------------------------
-int ngap_gNB_pdusession_release_resp(instance_t instance,
- ngap_pdusession_release_resp_t *pdusession_release_resp_p)
+int ngap_gNB_pdusession_release_resp(instance_t instance, ngap_pdusession_release_resp_t *pdusession_release_resp_p)
//------------------------------------------------------------------------------
{
ngap_gNB_instance_t *ngap_gNB_instance_p = NULL;
struct ngap_gNB_ue_context_s *ue_context_p = NULL;
- NGAP_NGAP_PDU_t pdu;
- NGAP_PDUSessionResourceReleaseResponse_t *out;
- NGAP_PDUSessionResourceReleaseResponseIEs_t *ie;
+ NGAP_NGAP_PDU_t pdu;
uint8_t *buffer = NULL;
uint32_t length;
int i;
@@ -1326,68 +1162,52 @@ int ngap_gNB_pdusession_release_resp(instance_t instance,
DevAssert(pdusession_release_resp_p != NULL);
DevAssert(ngap_gNB_instance_p != NULL);
- if ((ue_context_p = ngap_gNB_get_ue_context(ngap_gNB_instance_p,
- pdusession_release_resp_p->gNB_ue_ngap_id)) == NULL) {
+ if ((ue_context_p = ngap_get_ue_context(pdusession_release_resp_p->gNB_ue_ngap_id)) == NULL) {
/* The context for this gNB ue ngap id doesn't exist in the map of gNB UEs */
- NGAP_WARN("Failed to find ue context associated with gNB ue ngap id: 0x%08x\n",
- pdusession_release_resp_p->gNB_ue_ngap_id);
+ NGAP_WARN("Failed to find ue context associated with gNB ue ngap id: 0x%08x\n", pdusession_release_resp_p->gNB_ue_ngap_id);
return -1;
}
/* Prepare the NGAP message to encode */
memset(&pdu, 0, sizeof(pdu));
pdu.present = NGAP_NGAP_PDU_PR_successfulOutcome;
- pdu.choice.successfulOutcome = (NGAP_SuccessfulOutcome_t *)calloc(1,sizeof(struct NGAP_SuccessfulOutcome));
- pdu.choice.successfulOutcome->procedureCode = NGAP_ProcedureCode_id_PDUSessionResourceRelease;
- pdu.choice.successfulOutcome->criticality = NGAP_Criticality_reject;
- pdu.choice.successfulOutcome->value.present = NGAP_SuccessfulOutcome__value_PR_PDUSessionResourceReleaseResponse;
- out = &pdu.choice.successfulOutcome->value.choice.PDUSessionResourceReleaseResponse;
+ asn1cCalloc(pdu.choice.successfulOutcome, head);
+ head->procedureCode = NGAP_ProcedureCode_id_PDUSessionResourceRelease;
+ head->criticality = NGAP_Criticality_reject;
+ head->value.present = NGAP_SuccessfulOutcome__value_PR_PDUSessionResourceReleaseResponse;
+ NGAP_PDUSessionResourceReleaseResponse_t *out = &head->value.choice.PDUSessionResourceReleaseResponse;
/* mandatory */
- ie = (NGAP_PDUSessionResourceReleaseResponseIEs_t *)calloc(1, sizeof(NGAP_PDUSessionResourceReleaseResponseIEs_t));
- ie->id = NGAP_ProtocolIE_ID_id_AMF_UE_NGAP_ID;
- ie->criticality = NGAP_Criticality_ignore;
- ie->value.present = NGAP_PDUSessionResourceReleaseResponseIEs__value_PR_AMF_UE_NGAP_ID;
- asn_uint642INTEGER(&ie->value.choice.AMF_UE_NGAP_ID, ue_context_p->amf_ue_ngap_id);
- asn1cSeqAdd(&out->protocolIEs.list, ie);
+ {
+ asn1cSequenceAdd(out->protocolIEs.list, NGAP_PDUSessionResourceReleaseResponseIEs_t, ie);
+ ie->id = NGAP_ProtocolIE_ID_id_AMF_UE_NGAP_ID;
+ ie->criticality = NGAP_Criticality_ignore;
+ ie->value.present = NGAP_PDUSessionResourceReleaseResponseIEs__value_PR_AMF_UE_NGAP_ID;
+ asn_uint642INTEGER(&ie->value.choice.AMF_UE_NGAP_ID, ue_context_p->amf_ue_ngap_id);
+ }
/* mandatory */
- ie = (NGAP_PDUSessionResourceReleaseResponseIEs_t *)calloc(1, sizeof(NGAP_PDUSessionResourceReleaseResponseIEs_t));
- ie->id = NGAP_ProtocolIE_ID_id_RAN_UE_NGAP_ID;
- ie->criticality = NGAP_Criticality_ignore;
- ie->value.present = NGAP_PDUSessionResourceReleaseResponseIEs__value_PR_RAN_UE_NGAP_ID;
- ie->value.choice.RAN_UE_NGAP_ID = pdusession_release_resp_p->gNB_ue_ngap_id;
- asn1cSeqAdd(&out->protocolIEs.list, ie);
-
- /* optional */
- if (pdusession_release_resp_p->nb_of_pdusessions_released > 0) {
- ie = (NGAP_PDUSessionResourceReleaseResponseIEs_t *)calloc(1, sizeof(NGAP_PDUSessionResourceReleaseResponseIEs_t));
- ie->id = NGAP_ProtocolIE_ID_id_PDUSessionResourceReleasedListRelRes;
- ie->criticality = NGAP_Criticality_ignore;
- ie->value.present = NGAP_PDUSessionResourceReleaseResponseIEs__value_PR_PDUSessionResourceReleasedListRelRes;
-
- for (i = 0; i < pdusession_release_resp_p->nb_of_pdusessions_released; i++) {
- NGAP_PDUSessionResourceReleasedItemRelRes_t *item;
- item = (NGAP_PDUSessionResourceReleasedItemRelRes_t *)calloc(1, sizeof(NGAP_PDUSessionResourceReleasedItemRelRes_t));
-
- item->pDUSessionID = pdusession_release_resp_p->pdusession_release[i].pdusession_id;
- if(pdusession_release_resp_p->pdusession_release[i].transfer_length > 0){
- item->pDUSessionResourceReleaseResponseTransfer.size = pdusession_release_resp_p->pdusession_release[i].transfer_length;
- item->pDUSessionResourceReleaseResponseTransfer.buf = malloc(sizeof(uint8_t) * pdusession_release_resp_p->pdusession_release[i].transfer_length);
- memcpy(item->pDUSessionResourceReleaseResponseTransfer.buf,
- pdusession_release_resp_p->pdusession_release[i].transfer_buffer,
- pdusession_release_resp_p->pdusession_release[i].transfer_length);
- }else {
- item->pDUSessionResourceReleaseResponseTransfer.size = 0;
- item->pDUSessionResourceReleaseResponseTransfer.buf = NULL;
- NGAP_DEBUG("pdusession_release_resp: transfer_buffer is NULL!\n");
- }
- NGAP_DEBUG("pdusession_release_resp: pdusession ID %ld\n", item->pDUSessionID);
- asn1cSeqAdd(&ie->value.choice.PDUSessionResourceReleasedListRelRes.list, item);
- }
-
- asn1cSeqAdd(&out->protocolIEs.list, ie);
+ {
+ asn1cSequenceAdd(out->protocolIEs.list, NGAP_PDUSessionResourceReleaseResponseIEs_t, ie);
+ ie->id = NGAP_ProtocolIE_ID_id_RAN_UE_NGAP_ID;
+ ie->criticality = NGAP_Criticality_ignore;
+ ie->value.present = NGAP_PDUSessionResourceReleaseResponseIEs__value_PR_RAN_UE_NGAP_ID;
+ ie->value.choice.RAN_UE_NGAP_ID = pdusession_release_resp_p->gNB_ue_ngap_id;
}
-
+ /* optional */
+ if (pdusession_release_resp_p->nb_of_pdusessions_released > 0) {
+ asn1cSequenceAdd(out->protocolIEs.list, NGAP_PDUSessionResourceReleaseResponseIEs_t, ie);
+ ie->id = NGAP_ProtocolIE_ID_id_PDUSessionResourceReleasedListRelRes;
+ ie->criticality = NGAP_Criticality_ignore;
+ ie->value.present = NGAP_PDUSessionResourceReleaseResponseIEs__value_PR_PDUSessionResourceReleasedListRelRes;
+
+ for (i = 0; i < pdusession_release_resp_p->nb_of_pdusessions_released; i++) {
+ asn1cSequenceAdd(ie->value.choice.PDUSessionResourceReleasedListRelRes.list, NGAP_PDUSessionResourceReleasedItemRelRes_t, item);
+ item->pDUSessionID = pdusession_release_resp_p->pdusession_release[i].pdusession_id;
+ allocCopy(&item->pDUSessionResourceReleaseResponseTransfer, pdusession_release_resp_p->pdusession_release[i].data);
+ NGAP_DEBUG("pdusession_release_resp: pdusession ID %ld\n", item->pDUSessionID);
+ }
+ }
+
if (ngap_gNB_encode_pdu(&pdu, &buffer, &length) < 0) {
NGAP_ERROR("Failed to encode release response\n");
/* Encode procedure has failed... */
@@ -1395,17 +1215,17 @@ int ngap_gNB_pdusession_release_resp(instance_t instance,
}
/* UE associated signalling -> use the allocated stream */
- ngap_gNB_itti_send_sctp_data_req(ngap_gNB_instance_p->instance,
- ue_context_p->amf_ref->assoc_id, buffer,
- length, ue_context_p->tx_stream);
+ ngap_gNB_itti_send_sctp_data_req(ngap_gNB_instance_p->instance, ue_context_p->amf_ref->assoc_id, buffer, length, ue_context_p->tx_stream);
NGAP_INFO("pdusession_release_response sended gNB_UE_NGAP_ID %u amf_ue_ngap_id %lu nb_of_pdusessions_released %d nb_of_pdusessions_failed %d\n",
- pdusession_release_resp_p->gNB_ue_ngap_id, (uint64_t)ue_context_p->amf_ue_ngap_id,pdusession_release_resp_p->nb_of_pdusessions_released,pdusession_release_resp_p->nb_of_pdusessions_failed);
+ pdusession_release_resp_p->gNB_ue_ngap_id,
+ (uint64_t)ue_context_p->amf_ue_ngap_id,
+ pdusession_release_resp_p->nb_of_pdusessions_released,
+ pdusession_release_resp_p->nb_of_pdusessions_failed);
return 0;
}
-int ngap_gNB_path_switch_req(instance_t instance,
- ngap_path_switch_req_t *path_switch_req_p)
+int ngap_gNB_path_switch_req(instance_t instance, ngap_path_switch_req_t *path_switch_req_p)
//------------------------------------------------------------------------------
{
//TODO
@@ -1413,13 +1233,9 @@ int ngap_gNB_path_switch_req(instance_t instance,
return 0;
}
-int ngap_gNB_generate_PDUSESSION_Modification_Indication(
- instance_t instance,
- ngap_pdusession_modification_ind_t *pdusession_modification_ind)
+int ngap_gNB_generate_PDUSESSION_Modification_Indication(instance_t instance, ngap_pdusession_modification_ind_t *pdusession_modification_ind)
//-----------------------------------------------------------------------------
{
//TODO
return 0;
}
-
-
diff --git a/openair3/NGAP/ngap_gNB_trace.h b/openair3/NGAP/ngap_gNB_trace.h
index 91ea07ae80..70863e3737 100644
--- a/openair3/NGAP/ngap_gNB_trace.h
+++ b/openair3/NGAP/ngap_gNB_trace.h
@@ -30,23 +30,10 @@
#ifndef NGAP_GNB_TRACE_H_
#define NGAP_GNB_TRACE_H_
-// int ngap_gNB_generate_trace_failure(sctp_data_t *sctp_data_p,
-// int32_t stream,
-// uint32_t gNB_ue_ngap_id,
-// uint32_t amf_ue_ngap_id,
-// E_UTRAN_Trace_ID_t *trace_id,
-// Cause_t *cause_p);
-
-// int ngap_gNB_handle_trace_start(gNB_amf_desc_t *gNB_desc_p,
-// sctp_queue_item_t *packet_p,
-// struct ngap_message_s *message_p);
int ngap_gNB_handle_trace_start(uint32_t assoc_id,
uint32_t stream,
NGAP_NGAP_PDU_t *pdu);
-// int ngap_gNB_handle_deactivate_trace(gNB_amf_desc_t *gNB_desc_p,
-// sctp_queue_item_t *packet_p,
-// struct ngap_message_s *message_p);
int ngap_gNB_handle_deactivate_trace(uint32_t assoc_id,
uint32_t stream,
NGAP_NGAP_PDU_t *pdu);
diff --git a/openair3/NGAP/ngap_gNB_ue_context.c b/openair3/NGAP/ngap_gNB_ue_context.c
index 8beb4d9485..0be4fc480e 100644
--- a/openair3/NGAP/ngap_gNB_ue_context.c
+++ b/openair3/NGAP/ngap_gNB_ue_context.c
@@ -40,8 +40,15 @@
#include "ngap_gNB_defs.h"
#include "ngap_gNB_ue_context.h"
-int ngap_gNB_compare_gNB_ue_ngap_id(
- struct ngap_gNB_ue_context_s *p1, struct ngap_gNB_ue_context_s *p2)
+/* Tree of UE ordered by gNB_ue_ngap_id's
+ * NO INSTANCE, the 32 bits id is large enough to handle all UEs, regardless the cell, gNB, ...
+ */
+static RB_HEAD(ngap_ue_map, ngap_gNB_ue_context_s) ngap_ue_head = RB_INITIALIZER(&ngap_ue_head);
+
+/* Generate the tree management functions prototypes */
+RB_PROTOTYPE(ngap_ue_map, ngap_gNB_ue_context_s, entries, ngap_gNB_compare_gNB_ue_ngap_id);
+
+static int ngap_gNB_compare_gNB_ue_ngap_id(struct ngap_gNB_ue_context_s *p1, struct ngap_gNB_ue_context_s *p2)
{
if (p1->gNB_ue_ngap_id > p2->gNB_ue_ngap_id) {
return 1;
@@ -58,46 +65,26 @@ int ngap_gNB_compare_gNB_ue_ngap_id(
RB_GENERATE(ngap_ue_map, ngap_gNB_ue_context_s, entries,
ngap_gNB_compare_gNB_ue_ngap_id);
-struct ngap_gNB_ue_context_s *ngap_gNB_allocate_new_UE_context(void)
+void ngap_store_ue_context(struct ngap_gNB_ue_context_s *ue_desc_p)
{
- struct ngap_gNB_ue_context_s *new_p;
+ if (RB_INSERT(ngap_ue_map, &ngap_ue_head, ue_desc_p))
+ LOG_E(NGAP, "Bug in UE uniq number allocation %u, we try to add a existing UE\n", ue_desc_p->gNB_ue_ngap_id);
+ return;
+}
- new_p = malloc(sizeof(struct ngap_gNB_ue_context_s));
+struct ngap_gNB_ue_context_s *ngap_get_ue_context(uint32_t gNB_ue_ngap_id)
+{
+ ngap_gNB_ue_context_t temp = {.gNB_ue_ngap_id = gNB_ue_ngap_id};
+ return RB_FIND(ngap_ue_map, &ngap_ue_head, &temp);
+}
- if (new_p == NULL) {
- NGAP_ERROR("Cannot allocate new ue context\n");
+struct ngap_gNB_ue_context_s *ngap_detach_ue_context(uint32_t gNB_ue_ngap_id)
+{
+ struct ngap_gNB_ue_context_s *tmp = ngap_get_ue_context(gNB_ue_ngap_id);
+ if (tmp == NULL) {
+ NGAP_ERROR("Trying to free a NULL UE context, %u\n", gNB_ue_ngap_id);
return NULL;
}
-
- memset(new_p, 0, sizeof(struct ngap_gNB_ue_context_s));
-
- return new_p;
-}
-
-struct ngap_gNB_ue_context_s *ngap_gNB_get_ue_context(
- ngap_gNB_instance_t *instance_p,
- uint32_t gNB_ue_ngap_id)
-{
- ngap_gNB_ue_context_t temp;
-
- memset(&temp, 0, sizeof(struct ngap_gNB_ue_context_s));
-
- /* gNB ue ngap id = 32 bits wide */
- temp.gNB_ue_ngap_id = gNB_ue_ngap_id & 0xFFFFFFFF;
-
- return RB_FIND(ngap_ue_map, &instance_p->ngap_ue_head, &temp);
-}
-
-void ngap_gNB_free_ue_context(struct ngap_gNB_ue_context_s *ue_context_p)
-{
- if (ue_context_p == NULL) {
- NGAP_ERROR("Trying to free a NULL context\n");
- return;
- }
-
- /* TODO: check that context is currently not in the tree of known
- * contexts.
- */
-
- free(ue_context_p);
+ RB_REMOVE(ngap_ue_map, &ngap_ue_head, tmp);
+ return tmp;
}
diff --git a/openair3/NGAP/ngap_gNB_ue_context.h b/openair3/NGAP/ngap_gNB_ue_context.h
index 4b300c6fea..8de03b63ba 100644
--- a/openair3/NGAP/ngap_gNB_ue_context.h
+++ b/openair3/NGAP/ngap_gNB_ue_context.h
@@ -37,7 +37,6 @@
// Forward declarations
struct ngap_gNB_amf_data_s;
-struct ngap_ue_map;
struct gNB_amf_desc_s;
typedef enum {
@@ -59,11 +58,7 @@ typedef struct ngap_gNB_ue_context_s {
*/
uint32_t gNB_ue_ngap_id;
- /* UE id for initial connection to NGAP */
- uint16_t ue_initial_id;
-
- /* Uniquely identifies the UE within AMF. Encoded on 32 bits. */
- uint64_t amf_ue_ngap_id:40;
+ uint64_t amf_ue_ngap_id;
/* Stream used for this particular UE */
int32_t tx_stream;
@@ -84,20 +79,9 @@ typedef struct ngap_gNB_ue_context_s {
ngap_gNB_instance_t *gNB_instance;
} ngap_gNB_ue_context_t;
-int ngap_gNB_compare_gNB_ue_ngap_id(
- struct ngap_gNB_ue_context_s *p1, struct ngap_gNB_ue_context_s *p2);
-
-/* Generate the tree management functions prototypes */
-RB_PROTOTYPE(ngap_ue_map, ngap_gNB_ue_context_s, entries,
- ngap_gNB_compare_gNB_ue_ngap_id);
-
-struct ngap_gNB_ue_context_s *ngap_gNB_allocate_new_UE_context(void);
-
-struct ngap_gNB_ue_context_s *ngap_gNB_get_ue_context(
- ngap_gNB_instance_t *instance_p,
- uint32_t gNB_ue_ngap_id);
-
-void ngap_gNB_free_ue_context(struct ngap_gNB_ue_context_s *ue_context_p);
+void ngap_store_ue_context(ngap_gNB_ue_context_t *ue_desc_p);
+ngap_gNB_ue_context_t *ngap_get_ue_context(uint32_t gNB_ue_ngap_id);
+ngap_gNB_ue_context_t *ngap_detach_ue_context(uint32_t gNB_ue_ngap_id);
#endif /* NGAP_GNB_UE_CONTEXT_H_ */
diff --git a/openair3/SCTP/sctp_eNB_task.c b/openair3/SCTP/sctp_eNB_task.c
index 14128dd53e..7706137b2e 100644
--- a/openair3/SCTP/sctp_eNB_task.c
+++ b/openair3/SCTP/sctp_eNB_task.c
@@ -650,7 +650,7 @@ static void sctp_send_data(sctp_data_req_t *sctp_data_req_p)
/* TODO: notify upper layer */
return;
}
-
+ free(sctp_data_req_p->buffer); // assuming it has been malloced
SCTP_DEBUG("Successfully sent %u bytes on stream %d for assoc_id %u\n",
sctp_data_req_p->buffer_length, sctp_data_req_p->stream,
sctp_cnx->assoc_id);