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);