Commit e9ce528e authored by WEI-TAI CHEN's avatar WEI-TAI CHEN

Modified and fixed common config

parent 3b7960d8
...@@ -272,15 +272,16 @@ endif (${ENABLE_ITTI}) ...@@ -272,15 +272,16 @@ endif (${ENABLE_ITTI})
# New C code source file, cmake must be re-run (instead of re-running make only) # New C code source file, cmake must be re-run (instead of re-running make only)
############# #############
set(asn1c_call "${OPENAIR_CMAKE}/tools/generate_asn1") set(asn1c_call "${OPENAIR_CMAKE}/tools/generate_asn1")
set(asn1c_call_NR "${OPENAIR_CMAKE}/tools/generate_asn1_NR")
set(fix_asn1c_call "${OPENAIR_CMAKE}/tools/fix_asn1") set(fix_asn1c_call "${OPENAIR_CMAKE}/tools/fix_asn1")
set(asn1_generated_dir ${OPENAIR_BIN_DIR}) set(asn1_generated_dir ${OPENAIR_BIN_DIR})
set(protoc_call "${OPENAIR_CMAKE}/tools/generate_protobuf") set(protoc_call "${OPENAIR_CMAKE}/tools/generate_protobuf")
set(protobuf_generated_dir ${OPENAIR_BIN_DIR}) set(protobuf_generated_dir ${OPENAIR_BIN_DIR})
# RRC # RRC
###### ######
add_list2_option(RRC_ASN1_VERSION "Rel10" "ASN.1 version of RRC interface" "Rel8" "Rel10" "CBA")
add_list2_option(RRC_ASN1_VERSION "Rel14" "ASN.1 version of RRC interface" "Rel8" "Rel10" "Rel14" "CBA")
if (${RRC_ASN1_VERSION} STREQUAL "Rel8") if (${RRC_ASN1_VERSION} STREQUAL "Rel8")
set (RRC_GRAMMAR ${OPENAIR2_DIR}/RRC/LITE/MESSAGES/asn1c/ASN1_files/EUTRA-RRC-Definitions-86.asn) set (RRC_GRAMMAR ${OPENAIR2_DIR}/RRC/LITE/MESSAGES/asn1c/ASN1_files/EUTRA-RRC-Definitions-86.asn)
...@@ -330,32 +331,45 @@ add_custom_command ( ...@@ -330,32 +331,45 @@ add_custom_command (
#NR RRC #NR RRC
add_list2_option(NR_RRC_ASN1_VERSION "Rel15" "ASN.1 version of NR_RRC interface") add_list2_option(NR_RRC_ASN1_VERSION "NR_Rel15" "ASN.1 version of NR_RRC interface")
if (${NR_RRC_ASN1_VERSION} STREQUAL "Rel15") if (${NR_RRC_ASN1_VERSION} STREQUAL "NR_Rel15")
set (RRC_GRAMMAR ${OPENAIR2_DIR}/RRC/NR/MESSAGES/asn1c/ASN1_files/NR-RRC-Definitions.asn) set (NR_RRC_GRAMMAR ${OPENAIR2_DIR}/RRC/NR/MESSAGES/asn1c/ASN1_files/NR-RRC-Definitions.asn)
endif (${NR_RRC_ASN1_VERSION} STREQUAL "Rel15") endif (${NR_RRC_ASN1_VERSION} STREQUAL "NR_Rel15")
set (NR_RRC_FULL_DIR ${asn1_generated_dir}/${NR_RRC_ASN1_VERSION}) set (NR_RRC_FULL_DIR ${asn1_generated_dir}/${NR_RRC_ASN1_VERSION})
if(NOT EXISTS ${asn1c_call}) if(NOT EXISTS ${asn1c_call_NR})
message( FATAL_ERROR "The script ${asn1c_call} must be present" ) message( FATAL_ERROR "The script ${asn1c_call_NR} must be present" )
endif(NOT EXISTS ${asn1c_call}) endif(NOT EXISTS ${asn1c_call_NR})
#message("calling ASN1C_PREFIX=NR_ asn1c -fcompound-names -fno-include-deps -gen-PER -no-gen-OER -no-gen-example -D ${RRC_FULL_DIR} ${RRC_GRAMMAR}")
#set (asn1_install_log ${OPENAIR_CMAKE}/log/NR_asn1c_install_log.txt)
#execute_process(COMMAND mkdir -p ${NR_RRC_FULL_DIR}
# COMMAND env "ASN1C_PREFIX=NR_" asn1c -pdu=all -fcompound-names -fno-include-deps -gen-PER -no-gen-OER -no-gen-example -D ${NR_RRC_FULL_DIR} ${NR_RRC_GRAMMAR}
# RESULT_VARIABLE ret
# )
execute_process(COMMAND ${asn1c_call}
execute_process(COMMAND ${asn1c_call_NR}
${NR_RRC_FULL_DIR} ${NR_RRC_FULL_DIR}
${RRC_GRAMMAR} ${NR_RRC_GRAMMAR}
${NR_RRC_ASN1_VERSION}
RESULT_VARIABLE ret) RESULT_VARIABLE ret)
if (NOT ${ret} STREQUAL 0) if (NOT ${ret} STREQUAL 0)
message(FATAL_ERROR "${asn1c_call}: error") message(FATAL_ERROR "${asn1c_call_NR}: error")
endif (NOT ${ret} STREQUAL 0) endif (NOT ${ret} STREQUAL 0)
if(NOT EXISTS ${fix_asn1c_call}) if(NOT EXISTS ${fix_asn1c_call})
message( FATAL_ERROR "The script ${fix_asn1c_call} must be present" ) message( FATAL_ERROR "The script ${fix_asn1c_call} must be present" )
endif(NOT EXISTS ${fix_asn1c_call}) endif(NOT EXISTS ${fix_asn1c_call})
execute_process(COMMAND ${fix_asn1c_call} ${NR_RRC_FULL_DIR} NR_RRC ${NR_RRC_ASN1_VERSION} execute_process(COMMAND ${fix_asn1c_call}
${NR_RRC_FULL_DIR}
NR_RRC
${NR_RRC_ASN1_VERSION}
RESULT_VARIABLE ret) RESULT_VARIABLE ret)
if (NOT ${ret} STREQUAL 0) if (NOT ${ret} STREQUAL 0)
message(FATAL_ERROR "${fix_asn1c_call}: error") message(FATAL_ERROR "${fix_asn1c_call}: error")
endif (NOT ${ret} STREQUAL 0) endif (NOT ${ret} STREQUAL 0)
...@@ -364,18 +378,25 @@ file(GLOB nr_rrc_source ${NR_RRC_FULL_DIR}/*.c) ...@@ -364,18 +378,25 @@ file(GLOB nr_rrc_source ${NR_RRC_FULL_DIR}/*.c)
file(GLOB nr_rrc_h ${NR_RRC_FULL_DIR}/*.h) file(GLOB nr_rrc_h ${NR_RRC_FULL_DIR}/*.h)
set(nr_rrc_h ${nr_rrc_h} ${NR_RRC_FULL_DIR}/asn1_constants.h) set(nr_rrc_h ${nr_rrc_h} ${NR_RRC_FULL_DIR}/asn1_constants.h)
set_source_files_properties(${nr_rrc_source} PROPERTIES COMPILE_FLAGS -w) # suppress warnings from generated code set_source_files_properties(${nr_rrc_source} PROPERTIES COMPILE_FLAGS -w) # suppress warnings from generated code
#add_library(NR_RRC_LIB ${nr_rrc_h} ${nr_rrc_source} add_library(NR_RRC_LIB ${nr_rrc_h} ${nr_rrc_source}
# ${OPENAIR2_DIR}/RRC/NR/MESSAGES/asn1_msg.c) ${OPENAIR2_DIR}/RRC/NR/MESSAGES/asn1_msg.c)
#include_directories ("${NR_RRC_FULL_DIR}") include_directories ("${NR_RRC_FULL_DIR}")
# add the command to generate the source code # add the command to generate the source code
# Warning: if you modify ASN.1 source file to generate new C files, cmake should be re-run instead of make # Warning: if you modify ASN.1 source file to generate new C files, cmake should be re-run instead of make
add_custom_command ( add_custom_command (
OUTPUT ${NR_RRC_FULL_DIR}/asn1_constants.h OUTPUT ${NR_RRC_FULL_DIR}/asn1_constants.h
COMMAND ${asn1c_call} ${NR_RRC_FULL_DIR} ${RRC_GRAMMAR} COMMAND ${asn1c_call_NR} ${NR_RRC_FULL_DIR} ${NR_RRC_GRAMMAR}
COMMAND ${fix_asn1c_call} ${NR_RRC_FULL_DIR} RRC ${NR_RRC_ASN1_VERSION} COMMAND ${fix_asn1c_call} ${NR_RRC_FULL_DIR} RRC ${NR_RRC_ASN1_VERSION}
DEPENDS ${RRC_GRAMMAR} DEPENDS ${RRC_GRAMMAR}
) )
#add_custom_command (
# OUTPUT ${NR_RRC_FULL_DIR}/asn1_constants.h
# COMMAND mkdir -p ${NR_RRC_FULL_DIR}
# COMMAND env "ASN1C_PREFIX=NR_" asn1c -pdu=all -fcompound-names -fno-include-deps -gen-PER -no-gen-OER -no-gen-example -D ${NR_RRC_FULL_DIR} ${NR_RRC_GRAMMAR} 2>&1 | grep -v -- '->' | grep -v '^Compiled' |grep -v sample
# DEPENDS ${NR_RRC_GRAMMAR}
# )
# S1AP # S1AP
...@@ -419,7 +440,6 @@ if (NOT ${ret} STREQUAL 0) ...@@ -419,7 +440,6 @@ if (NOT ${ret} STREQUAL 0)
message(FATAL_ERROR "${fix_asn1c_call}: error") message(FATAL_ERROR "${fix_asn1c_call}: error")
endif (NOT ${ret} STREQUAL 0) endif (NOT ${ret} STREQUAL 0)
file(GLOB S1AP_source ${S1AP_C_DIR}/*.c) file(GLOB S1AP_source ${S1AP_C_DIR}/*.c)
set(S1AP_OAI_generated set(S1AP_OAI_generated
${S1AP_C_DIR}/s1ap_decoder.c ${S1AP_C_DIR}/s1ap_decoder.c
${S1AP_C_DIR}/s1ap_encoder.c ${S1AP_C_DIR}/s1ap_encoder.c
......
...@@ -48,7 +48,7 @@ DEADLINE_SCHEDULER_FLAG_USER="False" ...@@ -48,7 +48,7 @@ DEADLINE_SCHEDULER_FLAG_USER="False"
FORCE_DEADLINE_SCHEDULER_FLAG_USER="" FORCE_DEADLINE_SCHEDULER_FLAG_USER=""
CPU_AFFINITY_FLAG_USER="False" #Only valid when lowlatecy flag is set to False CPU_AFFINITY_FLAG_USER="False" #Only valid when lowlatecy flag is set to False
REL="Rel14" REL="Rel14"
NR_REL="Rel15" NR_REL="NR_Rel15"
HW="None" HW="None"
TP="None" TP="None"
NOS1=0 NOS1=0
......
...@@ -307,7 +307,7 @@ check_install_usrp_uhd_driver(){ ...@@ -307,7 +307,7 @@ check_install_usrp_uhd_driver(){
$SUDO apt-get -y --allow-unauthenticated install libuhd-dev libuhd003 uhd-host $SUDO apt-get -y --allow-unauthenticated install libuhd-dev libuhd003 uhd-host
elif [[ "$OS_BASEDISTRO" == "fedora" ]]; then elif [[ "$OS_BASEDISTRO" == "fedora" ]]; then
$SUDO $INSTALLER -y install python boost libusb-devel libusbx-devel boost-devel python-mako python-docutils cmake $SUDO $INSTALLER -y install python boost libusb-devel libusbx-devel boost-devel python-mako python-docutils cmake
$SUDO pip install requests $SUDO -H pip install requests
if [[ "$OS_DISTRO" == "rhel" ]] || [[ "$OS_DISTRO" == "centos" ]]; then if [[ "$OS_DISTRO" == "rhel" ]] || [[ "$OS_DISTRO" == "centos" ]]; then
# until EPEL repo hasn't bumped UHD driver to >=3.10 in EPEL, build driver from source # until EPEL repo hasn't bumped UHD driver to >=3.10 in EPEL, build driver from source
$SUDO $INSTALLER -y remove uhd uhd-devel uhd-firmware $SUDO $INSTALLER -y remove uhd uhd-devel uhd-firmware
...@@ -490,8 +490,8 @@ check_install_additional_tools (){ ...@@ -490,8 +490,8 @@ check_install_additional_tools (){
#The packages below are already installed for Redhat distros (RHEL, CentOS, Fedora) #The packages below are already installed for Redhat distros (RHEL, CentOS, Fedora)
if [[ "$OS_DISTRO" == "ubuntu" ]]; then if [[ "$OS_DISTRO" == "ubuntu" ]]; then
$SUDO pip install paramiko $SUDO -H pip install paramiko
$SUDO pip install pyroute2 colorama $SUDO -H pip install pyroute2 colorama
log_netiface=$OPENAIR_DIR/cmake_targets/log/netiface_install_log.txt log_netiface=$OPENAIR_DIR/cmake_targets/log/netiface_install_log.txt
echo_info "Installing Netinterfaces package. The logfile for installation is in $log_netiface" echo_info "Installing Netinterfaces package. The logfile for installation is in $log_netiface"
( (
...@@ -689,8 +689,11 @@ install_asn1c_from_source(){ ...@@ -689,8 +689,11 @@ install_asn1c_from_source(){
echo_info "\nInstalling ASN1. The log file for ASN1 installation is here: $asn1_install_log " echo_info "\nInstalling ASN1. The log file for ASN1 installation is here: $asn1_install_log "
( (
$SUDO rm -rf /tmp/asn1c $SUDO rm -rf /tmp/asn1c
GIT_SSL_NO_VERIFY=true git clone https://gitlab.eurecom.fr/oai/asn1c.git /tmp/asn1c #GIT_SSL_NO_VERIFY=true git clone https://gitlab.eurecom.fr/oai/asn1c.git /tmp/asn1c
GIT_SSL_NO_VERIFY=true git clone https://github.com/velichkov/asn1c /tmp/asn1c
cd /tmp/asn1c cd /tmp/asn1c
git checkout s1ap
test -f configure || autoreconf -iv
./configure ./configure
make -j`nproc` make -j`nproc`
$SUDO make install $SUDO make install
......
...@@ -23,7 +23,6 @@ reset_color="$(tput sgr0)" ...@@ -23,7 +23,6 @@ reset_color="$(tput sgr0)"
function error() function error()
{ {
echo -e "$red_color"ERROR: "$@""$reset_color" echo -e "$red_color"ERROR: "$@""$reset_color"
exit 1
} }
function check_sha1() function check_sha1()
...@@ -115,7 +114,7 @@ function patch_nr_rrc() ...@@ -115,7 +114,7 @@ function patch_nr_rrc()
local version="$2" local version="$2"
case "$version" in case "$version" in
Rel15 ) NR_Rel15 )
echo "patching NR_RRC files release 15" echo "patching NR_RRC files release 15"
apply_patches "$directory" NR_RRC_Rel15 ${#NR_RRC_Rel15[*]} apply_patches "$directory" NR_RRC_Rel15 ${#NR_RRC_Rel15[*]}
;; ;;
...@@ -175,16 +174,16 @@ function main() ...@@ -175,16 +174,16 @@ function main()
case "$module" in case "$module" in
RRC ) RRC )
patch_rrc "$directory" "$version" #patch_rrc "$directory" "$version"
;; ;;
NR_RRC ) NR_RRC )
patch_nr_rrc "$directory" "$version" #patch_nr_rrc "$directory" "$version"
;; ;;
X2AP ) X2AP )
patch_x2ap "$directory" "$version" #patch_x2ap "$directory" "$version"
;; ;;
S1AP ) S1AP )
patch_s1ap "$directory" "$version" #patch_s1ap "$directory" "$version"
;; ;;
* ) * )
error unknown module "$module" error unknown module "$module"
......
...@@ -5,7 +5,6 @@ function main() ...@@ -5,7 +5,6 @@ function main()
mkdir -p $1 mkdir -p $1
cd $1 cd $1
shift shift
#if this script is called with only 2 arguments (so 1 here after the shift), it's for RRC #if this script is called with only 2 arguments (so 1 here after the shift), it's for RRC
#(there may be a better way...) #(there may be a better way...)
if [ $# -eq 1 ]; then if [ $# -eq 1 ]; then
...@@ -99,7 +98,7 @@ echo done with asnfix ...@@ -99,7 +98,7 @@ echo done with asnfix
echo running asn1c echo running asn1c
asn1c -gen-PER -fcompound-names fixed_grammar.asn 2>&1 | grep -v -- '->' | grep -v '^Compiled' |grep -v sample asn1c -gen-PER -fcompound-names -no-gen-example fixed_grammar.asn 2>&1 | grep -v -- '->' | grep -v '^Compiled' |grep -v sample
rm -f fixed_grammar.asn rm -f fixed_grammar.asn
...@@ -107,7 +106,7 @@ echo asn1c done ...@@ -107,7 +106,7 @@ echo asn1c done
else else
asn1c -gen-PER -fcompound-names $* 2>&1 | grep -v -- '->' | grep -v '^Compiled' |grep -v sample asn1c -fcompound-names -fno-include-deps -gen-PER -no-gen-OER -no-gen-example $* 2>&1 | grep -v -- '->' | grep -v '^Compiled' |grep -v sample
fi fi
......
...@@ -265,6 +265,7 @@ typedef struct NRRrcConfigurationReq_s { ...@@ -265,6 +265,7 @@ typedef struct NRRrcConfigurationReq_s {
///NR ///NR
//MIB //MIB
long MIB_subCarrierSpacingCommon[MAX_NUM_CCs]; long MIB_subCarrierSpacingCommon[MAX_NUM_CCs];
uint32_t MIB_ssb_SubcarrierOffset[MAX_NUM_CCs];
long MIB_dmrs_TypeA_Position[MAX_NUM_CCs]; long MIB_dmrs_TypeA_Position[MAX_NUM_CCs];
uint32_t pdcch_ConfigSIB1[MAX_NUM_CCs]; uint32_t pdcch_ConfigSIB1[MAX_NUM_CCs];
...@@ -292,7 +293,7 @@ typedef struct NRRrcConfigurationReq_s { ...@@ -292,7 +293,7 @@ typedef struct NRRrcConfigurationReq_s {
//NR FrequencyInfoUL //NR FrequencyInfoUL
long UL_FreqBandIndicatorNR[MAX_NUM_CCs]; long UL_FreqBandIndicatorNR[MAX_NUM_CCs];
long UL_absoluteFrequencyPointA[MAX_NUM_CCs]; long UL_absoluteFrequencyPointA[MAX_NUM_CCs];
lte_prefix_type_t UL_additionalSpectrumEmission[MAX_NUM_CCs] lte_prefix_type_t UL_additionalSpectrumEmission[MAX_NUM_CCs];
long UL_p_Max[MAX_NUM_CCs]; long UL_p_Max[MAX_NUM_CCs];
long ULfrequencyShift7p5khz[MAX_NUM_CCs]; long ULfrequencyShift7p5khz[MAX_NUM_CCs];
...@@ -430,7 +431,14 @@ typedef struct NRRrcConfigurationReq_s { ...@@ -430,7 +431,14 @@ typedef struct NRRrcConfigurationReq_s {
long Common_dci_Format2_3_nrofPDCCH_Candidates[MAX_NUM_CCs]; long Common_dci_Format2_3_nrofPDCCH_Candidates[MAX_NUM_CCs];
long ue_Specific__dci_Formats[MAX_NUM_CCs]; long ue_Specific__dci_Formats[MAX_NUM_CCs];
//RateMatchPatternLTE-CRS
uint32_t RateMatchPatternLTE_CRS_carrierFreqDL[MAX_NUM_CCs];
long RateMatchPatternLTE_CRS_carrierBandwidthDL[MAX_NUM_CCs];
long RateMatchPatternLTE_CRS_nrofCRS_Ports[MAX_NUM_CCs];
long RateMatchPatternLTE_CRS_v_Shift[MAX_NUM_CCs];
long RateMatchPatternLTE_CRS_radioframeAllocationPeriod[MAX_NUM_CCs];
uint32_t RateMatchPatternLTE_CRS_radioframeAllocationOffset[MAX_NUM_CCs];
long RateMatchPatternLTE_CRS_subframeAllocation_choice[MAX_NUM_CCs];
} gNB_RrcConfigurationReq; } gNB_RrcConfigurationReq;
......
...@@ -52,6 +52,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { ...@@ -52,6 +52,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
///NR ///NR
//MIB //MIB
int32_t MIB_subCarrierSpacingCommon = 0; int32_t MIB_subCarrierSpacingCommon = 0;
uint32_t MIB_ssb_SubcarrierOffset = 0;
int32_t MIB_dmrs_TypeA_Position = 0; int32_t MIB_dmrs_TypeA_Position = 0;
uint32_t pdcch_ConfigSIB1 = 0; uint32_t pdcch_ConfigSIB1 = 0;
...@@ -213,7 +214,14 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { ...@@ -213,7 +214,14 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
int32_t Common_dci_Format2_3_monitoringPeriodicity = 0; int32_t Common_dci_Format2_3_monitoringPeriodicity = 0;
int32_t Common_dci_Format2_3_nrofPDCCH_Candidates = 0; int32_t Common_dci_Format2_3_nrofPDCCH_Candidates = 0;
int32_t ue_Specific__dci_Formats = 0; int32_t ue_Specific__dci_Formats = 0;
//NR RateMatchPatternLTE-CRS
uint32_t RateMatchPatternLTE_CRS_carrierFreqDL = 0;
int32_t RateMatchPatternLTE_CRS_carrierBandwidthDL = 0;
int32_t RateMatchPatternLTE_CRS_nrofCRS_Ports = 0;
int32_t RateMatchPatternLTE_CRS_v_Shift = 0;
int32_t RateMatchPatternLTE_CRS_radioframeAllocationPeriod = 0;
uint32_t RateMatchPatternLTE_CRS_radioframeAllocationOffset = 0;
int32_t RateMatchPatternLTE_CRS_subframeAllocation_choice = 0;
int32_t my_int; int32_t my_int;
...@@ -419,6 +427,12 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { ...@@ -419,6 +427,12 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
RC.config_file_name, i, MIB_subCarrierSpacingCommon); RC.config_file_name, i, MIB_subCarrierSpacingCommon);
} }
NRRRC_CONFIGURATION_REQ (msg_p).MIB_ssb_SubcarrierOffset[j] = MIB_ssb_SubcarrierOffset;
if ((MIB_ssb_SubcarrierOffset <0) || (MIB_ssb_SubcarrierOffset > 15)){
AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for MIB_ssb_SubcarrierOffset choice: 1..23 !\n",
RC.config_file_name, i, MIB_ssb_SubcarrierOffset);
}
NRRRC_CONFIGURATION_REQ (msg_p).MIB_dmrs_TypeA_Position[j] = MIB_dmrs_TypeA_Position; NRRRC_CONFIGURATION_REQ (msg_p).MIB_dmrs_TypeA_Position[j] = MIB_dmrs_TypeA_Position;
if ((MIB_dmrs_TypeA_Position !=2) && (MIB_dmrs_TypeA_Position !=3)){ if ((MIB_dmrs_TypeA_Position !=2) && (MIB_dmrs_TypeA_Position !=3)){
AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for MIB_dmrs_TypeA_Position choice:2,3 !\n", AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for MIB_dmrs_TypeA_Position choice:2,3 !\n",
...@@ -2050,6 +2064,120 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { ...@@ -2050,6 +2064,120 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
RC.config_file_name, i, ue_Specific__dci_Formats); RC.config_file_name, i, ue_Specific__dci_Formats);
} }
//////////////////////////////////NR RateMatchPatternLTE-CRS///////////////////////////
switch(RateMatchPatternLTE_CRS_carrierBandwidthDL){
case 6:
NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_carrierBandwidthDL[j] = RateMatchPatternLTE_CRS__carrierBandwidthDL_n6;
break;
case 15:
NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_carrierBandwidthDL[j] = RateMatchPatternLTE_CRS__carrierBandwidthDL_n15;
break;
case 25:
NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_carrierBandwidthDL[j] = RateMatchPatternLTE_CRS__carrierBandwidthDL_n25;
break;
case 50:
NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_carrierBandwidthDL[j] = RateMatchPatternLTE_CRS__carrierBandwidthDL_n50;
break;
case 75:
NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_carrierBandwidthDL[j] = RateMatchPatternLTE_CRS__carrierBandwidthDL_n75;
break;
case 100:
NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_carrierBandwidthDL[j] = RateMatchPatternLTE_CRS__carrierBandwidthDL_n100;
break;
default:
AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for RateMatchPatternLTE_CRS_carrierBandwidthDL choice: 6,15,25,50,75,100 !\n",
RC.config_file_name, i, RateMatchPatternLTE_CRS_carrierBandwidthDL);
break;
}
NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_carrierBandwidthDL[j] = RateMatchPatternLTE_CRS_carrierBandwidthDL;
if ((RateMatchPatternLTE_CRS_carrierBandwidthDL <0) || (RateMatchPatternLTE_CRS_carrierBandwidthDL>16383)){
AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for RateMatchPatternLTE_CRS_carrierBandwidthDL choice: 0..16383 !\n",
RC.config_file_name, i, RateMatchPatternLTE_CRS_carrierBandwidthDL);
}
switch(RateMatchPatternLTE_CRS_nrofCRS_Ports){
case 1:
NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_nrofCRS_Ports[j] = RateMatchPatternLTE_CRS__nrofCRS_Ports_n1;
break;
case 2:
NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_nrofCRS_Ports[j] = RateMatchPatternLTE_CRS__nrofCRS_Ports_n2;
break;
case 4:
NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_nrofCRS_Ports[j] = RateMatchPatternLTE_CRS__nrofCRS_Ports_n4;
break;
default:
AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for RateMatchPatternLTE_CRS_nrofCRS_Ports choice: 1,2,4 !\n",
RC.config_file_name, i, RateMatchPatternLTE_CRS_nrofCRS_Ports);
break;
}
switch(RateMatchPatternLTE_CRS_v_Shift){
case 0:
NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_v_Shift[j] = RateMatchPatternLTE_CRS__v_Shift_n0;
break;
case 1:
NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_v_Shift[j] = RateMatchPatternLTE_CRS__v_Shift_n1;
break;
case 2:
NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_v_Shift[j] = RateMatchPatternLTE_CRS__v_Shift_n2;
break;
case 3:
NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_v_Shift[j] = RateMatchPatternLTE_CRS__v_Shift_n3;
break;
case 4:
NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_v_Shift[j] = RateMatchPatternLTE_CRS__v_Shift_n4;
break;
case 5:
NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_v_Shift[j] = RateMatchPatternLTE_CRS__v_Shift_n5;
break;
default:
AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for RateMatchPatternLTE_CRS_v_Shift choice: 0,1,2,3,4,5 !\n",
RC.config_file_name, i, RateMatchPatternLTE_CRS_v_Shift);
break;
}
switch(RateMatchPatternLTE_CRS_radioframeAllocationPeriod){
case 1:
NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_radioframeAllocationPeriod[j] = EUTRA_MBSFN_SubframeConfig__radioframeAllocationPeriod_n1;
break;
case 2:
NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_radioframeAllocationPeriod[j] = EUTRA_MBSFN_SubframeConfig__radioframeAllocationPeriod_n2;
break;
case 4:
NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_radioframeAllocationPeriod[j] = EUTRA_MBSFN_SubframeConfig__radioframeAllocationPeriod_n4;
break;
case 8:
NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_radioframeAllocationPeriod[j] = EUTRA_MBSFN_SubframeConfig__radioframeAllocationPeriod_n8;
break;
case 16:
NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_radioframeAllocationPeriod[j] = EUTRA_MBSFN_SubframeConfig__radioframeAllocationPeriod_n16;
break;
case 32:
NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_radioframeAllocationPeriod[j] = EUTRA_MBSFN_SubframeConfig__radioframeAllocationPeriod_n32;
break;
default:
AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for RateMatchPatternLTE_CRS_radioframeAllocationPeriod choice: 1,2,4,8,16,32 !\n",
RC.config_file_name, i, RateMatchPatternLTE_CRS_radioframeAllocationPeriod);
break;
}
NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_radioframeAllocationOffset[j] = RateMatchPatternLTE_CRS_radioframeAllocationOffset;
if ((RateMatchPatternLTE_CRS_radioframeAllocationOffset <0) || (RateMatchPatternLTE_CRS_radioframeAllocationOffset>7)){
AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for RateMatchPatternLTE_CRS_radioframeAllocationOffset choice: 0..7 !\n",
RC.config_file_name, i, RateMatchPatternLTE_CRS_radioframeAllocationOffset);
}
if (strcmp(RateMatchPatternLTE_CRS_subframeAllocation_choice , "oneFrame") == 0){
NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_subframeAllocation_choice[j] = EUTRA_MBSFN_SubframeConfig__subframeAllocation_PR_oneFrame;
}else if (strcmp(RateMatchPatternLTE_CRS_subframeAllocation_choice , "fourFrames") == 0){
NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_subframeAllocation_choice[j] = EUTRA_MBSFN_SubframeConfig__subframeAllocation_PR_fourFrames;
}else {
AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for RateMatchPatternLTE_CRS_subframeAllocation_choice !\n",
RC.config_file_name, i, RateMatchPatternLTE_CRS_subframeAllocation_choice);
}
}//End for (j = 0; j < CCsParamList.numelt ;j++) }//End for (j = 0; j < CCsParamList.numelt ;j++)
......
...@@ -229,6 +229,7 @@ typedef enum { ...@@ -229,6 +229,7 @@ typedef enum {
///NR ///NR
//MIB //MIB
#define GNB_CONFIG_STRING_MIB_SUBCARRIERSPACINGCOMMON "MIB_subCarrierSpacingCommon" #define GNB_CONFIG_STRING_MIB_SUBCARRIERSPACINGCOMMON "MIB_subCarrierSpacingCommon"
#define GNB_CONFIG_STRING_MIB_SSB_SUBCARRIEROFFSET "MIB_ssb_SubcarrierOffset"
#define GNB_CONFIG_STRING_MIB_DMRS_TYPEA_POSITION "MIB_dmrs_TypeA_Position" #define GNB_CONFIG_STRING_MIB_DMRS_TYPEA_POSITION "MIB_dmrs_TypeA_Position"
#define GNB_CONFIG_STRING_PDCCH_CONFIGSIB1 "pdcch_ConfigSIB1" #define GNB_CONFIG_STRING_PDCCH_CONFIGSIB1 "pdcch_ConfigSIB1"
...@@ -392,7 +393,13 @@ typedef enum { ...@@ -392,7 +393,13 @@ typedef enum {
#define GNB_CONFIG_STRING_COMMON_DCI_FORMAT2_3_MONITORINGPERIODICITY "Common_dci_Format2_3_monitoringPeriodicity" #define GNB_CONFIG_STRING_COMMON_DCI_FORMAT2_3_MONITORINGPERIODICITY "Common_dci_Format2_3_monitoringPeriodicity"
#define GNB_CONFIG_STRING_COMMON_DCI_FORMAT2_3_NROFPDCCH_CANDIDATES "Common_dci_Format2_3_nrofPDCCH_Candidates" #define GNB_CONFIG_STRING_COMMON_DCI_FORMAT2_3_NROFPDCCH_CANDIDATES "Common_dci_Format2_3_nrofPDCCH_Candidates"
#define GNB_CONFIG_STRING_UE_SPECIFIC__DCI_FORMATS "ue_Specific__dci_Formats" #define GNB_CONFIG_STRING_UE_SPECIFIC__DCI_FORMATS "ue_Specific__dci_Formats"
#define GNB_CONFIG_STRING_RATEMATCHPATTERNLTE_CRS_CARRIERFREQDL "RateMatchPatternLTE_CRS_carrierFreqDL"
#define GNB_CONFIG_STRING_RATEMATCHPATTERNLTE_CRS_CARRIERBANDWIDTHDL "RateMatchPatternLTE_CRS_carrierBandwidthDL"
#define GNB_CONFIG_STRING_RATEMATCHPATTERNLTE_CRS_NROFCRS_PORTS "RateMatchPatternLTE_CRS_nrofCRS_Ports"
#define GNB_CONFIG_STRING_RATEMATCHPATTERNLTE_CRS_V_SHIFT "RateMatchPatternLTE_CRS_v_Shift"
#define GNB_CONFIG_STRING_RATEMATCHPATTERNLTE_CRS_RADIOFRAMEALLOCATIONPERIOD "RateMatchPatternLTE_CRS_radioframeAllocationPeriod"
#define GNB_CONFIG_STRING_RATEMATCHPATTERNLTE_CRS_RADIOFRAMEALLOCATIONOFFSET "RateMatchPatternLTE_CRS_radioframeAllocationOffset"
#define GNB_CONFIG_STRING_RATEMATCHPATTERNLTE_CRS_SUBFRAMEALLOCATION_CHOICE "RateMatchPatternLTE_CRS_subframeAllocation_choice"
/*---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
/* component carriers configuration parameters */ /* component carriers configuration parameters */
...@@ -409,6 +416,7 @@ typedef enum { ...@@ -409,6 +416,7 @@ typedef enum {
{GNB_CONFIG_STRING_N_RB_DL, NULL, 0, iptr:&N_RB_DL, defintval:25, TYPE_UINT, 0}, \ {GNB_CONFIG_STRING_N_RB_DL, NULL, 0, iptr:&N_RB_DL, defintval:25, TYPE_UINT, 0}, \
{GNB_CONFIG_STRING_NB_ANT_PORTS, NULL, 0, iptr:&nb_antenna_ports, defintval:1, TYPE_UINT, 0}, \ {GNB_CONFIG_STRING_NB_ANT_PORTS, NULL, 0, iptr:&nb_antenna_ports, defintval:1, TYPE_UINT, 0}, \
{GNB_CONFIG_STRING_MIB_SUBCARRIERSPACINGCOMMON, NULL, 0, iptr:&MIB_subCarrierSpacingCommon, defintval:0, TYPE_UINT, 0}, \ {GNB_CONFIG_STRING_MIB_SUBCARRIERSPACINGCOMMON, NULL, 0, iptr:&MIB_subCarrierSpacingCommon, defintval:0, TYPE_UINT, 0}, \
{GNB_CONFIG_STRING_MIB_SSB_SUBCARRIEROFFSET, NULL, 0, iptr:&MIB_ssb_SubcarrierOffset, defintval:0, TYPE_UINT, 0}, \
{GNB_CONFIG_STRING_MIB_DMRS_TYPEA_POSITION, NULL, 0, iptr:&MIB_dmrs_TypeA_Position, defintval:0, TYPE_UINT, 0}, \ {GNB_CONFIG_STRING_MIB_DMRS_TYPEA_POSITION, NULL, 0, iptr:&MIB_dmrs_TypeA_Position, defintval:0, TYPE_UINT, 0}, \
{GNB_CONFIG_STRING_PDCCH_CONFIGSIB1, NULL, 0, iptr:&pdcch_ConfigSIB1, defintval:0, TYPE_UINT, 0}, \ {GNB_CONFIG_STRING_PDCCH_CONFIGSIB1, NULL, 0, iptr:&pdcch_ConfigSIB1, defintval:0, TYPE_UINT, 0}, \
{GNB_CONFIG_STRING_SIB1_FREQUENCYOFFSETSSB, NULL, 0, iptr:&SIB1_frequencyOffsetSSB, defintval:0, TYPE_UINT, 0}, \ {GNB_CONFIG_STRING_SIB1_FREQUENCYOFFSETSSB, NULL, 0, iptr:&SIB1_frequencyOffsetSSB, defintval:0, TYPE_UINT, 0}, \
...@@ -534,6 +542,13 @@ typedef enum { ...@@ -534,6 +542,13 @@ typedef enum {
{GNB_CONFIG_STRING_COMMON_DCI_FORMAT2_3_MONITORINGPERIODICITY, NULL, 0, iptr:&Common_dci_Format2_3_monitoringPeriodicity, defintval:0, TYPE_UINT, 0}, \ {GNB_CONFIG_STRING_COMMON_DCI_FORMAT2_3_MONITORINGPERIODICITY, NULL, 0, iptr:&Common_dci_Format2_3_monitoringPeriodicity, defintval:0, TYPE_UINT, 0}, \
{GNB_CONFIG_STRING_COMMON_DCI_FORMAT2_3_NROFPDCCH_CANDIDATES, NULL, 0, iptr:&Common_dci_Format2_3_nrofPDCCH_Candidates, defintval:0, TYPE_UINT, 0}, \ {GNB_CONFIG_STRING_COMMON_DCI_FORMAT2_3_NROFPDCCH_CANDIDATES, NULL, 0, iptr:&Common_dci_Format2_3_nrofPDCCH_Candidates, defintval:0, TYPE_UINT, 0}, \
{GNB_CONFIG_STRING_UE_SPECIFIC__DCI_FORMATS, NULL, 0, iptr:&ue_Specific__dci_Formats, defintval:0, TYPE_UINT, 0}, \ {GNB_CONFIG_STRING_UE_SPECIFIC__DCI_FORMATS, NULL, 0, iptr:&ue_Specific__dci_Formats, defintval:0, TYPE_UINT, 0}, \
{GNB_CONFIG_STRING_RATEMATCHPATTERNLTE_CRS_CARRIERFREQDL, NULL, 0, iptr:&RateMatchPatternLTE_CRS_carrierFreqDL, defintval:0, TYPE_UINT, 0}, \
{GNB_CONFIG_STRING_RATEMATCHPATTERNLTE_CRS_CARRIERBANDWIDTHDL, NULL, 0, iptr:&RateMatchPatternLTE_CRS_carrierBandwidthDL, defintval:0, TYPE_UINT, 0}, \
{GNB_CONFIG_STRING_RATEMATCHPATTERNLTE_CRS_NROFCRS_PORTS, NULL, 0, iptr:&RateMatchPatternLTE_CRS_nrofCRS_Ports, defintval:0, TYPE_UINT, 0}, \
{GNB_CONFIG_STRING_RATEMATCHPATTERNLTE_CRS_V_SHIFT, NULL, 0, iptr:&RateMatchPatternLTE_CRS_v_Shift, defintval:0, TYPE_UINT, 0}, \
{GNB_CONFIG_STRING_RATEMATCHPATTERNLTE_CRS_RADIOFRAMEALLOCATIONPERIOD, NULL, 0, iptr:&RateMatchPatternLTE_CRS_radioframeAllocationPeriod, defintval:0, TYPE_UINT, 0}, \
{GNB_CONFIG_STRING_RATEMATCHPATTERNLTE_CRS_RADIOFRAMEALLOCATIONOFFSET, NULL, 0, iptr:&RateMatchPatternLTE_CRS_radioframeAllocationOffset, defintval:0, TYPE_UINT, 0}, \
{GNB_CONFIG_STRING_RATEMATCHPATTERNLTE_CRS_SUBFRAMEALLOCATION_CHOICE, NULL, 0, iptr:&RateMatchPatternLTE_CRS_subframeAllocation_choice, defintval:0, TYPE_UINT, 0}, \
} }
...@@ -552,6 +567,7 @@ typedef enum { ...@@ -552,6 +567,7 @@ typedef enum {
#define GNB_CONFIG_TX_GAIN_IDX #define GNB_CONFIG_TX_GAIN_IDX
#define GNB_CONFIG_RX_GAIN_IDX #define GNB_CONFIG_RX_GAIN_IDX
#define GNB_CONFIG_MIB_SUBCARRIERSPACINGCOMMON_IDX #define GNB_CONFIG_MIB_SUBCARRIERSPACINGCOMMON_IDX
#define GNB_CONFIG_MIB_SSB_SUBCARRIEROFFSET_IDX
#define GNB_CONFIG_MIB_DMRS_TYPEA_POSITION_IDX #define GNB_CONFIG_MIB_DMRS_TYPEA_POSITION_IDX
#define GNB_CONFIG_PDCCH_CONFIGSIB1_IDX #define GNB_CONFIG_PDCCH_CONFIGSIB1_IDX
#define GNB_CONFIG_SIB1_FREQUENCYOFFSETSSB_IDX #define GNB_CONFIG_SIB1_FREQUENCYOFFSETSSB_IDX
...@@ -680,3 +696,10 @@ typedef enum { ...@@ -680,3 +696,10 @@ typedef enum {
#define GNB_CONFIG_COMMON_DCI_FORMAT2_3_MONITORINGPERIODICITY_IDX #define GNB_CONFIG_COMMON_DCI_FORMAT2_3_MONITORINGPERIODICITY_IDX
#define GNB_CONFIG_COMMON_DCI_FORMAT2_3_NROFPDCCH_CANDIDATES_IDX #define GNB_CONFIG_COMMON_DCI_FORMAT2_3_NROFPDCCH_CANDIDATES_IDX
#define GNB_CONFIG_UE_SPECIFIC__DCI_FORMATS_IDX #define GNB_CONFIG_UE_SPECIFIC__DCI_FORMATS_IDX
#define GNB_CONFIG_RATEMATCHPATTERNLTE_CRS_CARRIERFREQDL_IDX
#define GNB_CONFIG_RATEMATCHPATTERNLTE_CRS_CARRIERBANDWIDTHDL_IDX
#define GNB_CONFIG_RATEMATCHPATTERNLTE_CRS_NROFCRS_PORTS_IDX
#define GNB_CONFIG_RATEMATCHPATTERNLTE_CRS_V_SHIFT_IDX
#define GNB_CONFIG_RATEMATCHPATTERNLTE_CRS_RADIOFRAMEALLOCATIONPERIOD_IDX
#define GNB_CONFIG_RATEMATCHPATTERNLTE_CRS_RADIOFRAMEALLOCATIONOFFSET_IDX
#define GNB_CONFIG_RATEMATCHPATTERNLTE_CRS_SUBFRAMEALLOCATION_CHOICE_IDX
\ No newline at end of file
...@@ -205,7 +205,7 @@ uint8_t do_MIB_NR(rrc_gNB_carrier_data_t *carrier, ...@@ -205,7 +205,7 @@ uint8_t do_MIB_NR(rrc_gNB_carrier_data_t *carrier,
asn_enc_rval_t enc_rval; asn_enc_rval_t enc_rval;
BCCH_BCH_Message_t *mib=&carrier->mib_NR ; BCCH_BCH_Message_t *mib=&carrier->mib
memset(mib,0,sizeof(BCCH_BCH_Message_t)); memset(mib,0,sizeof(BCCH_BCH_Message_t));
mib->message.present = BCCH_BCH_MessageType_PR_mib; mib->message.present = BCCH_BCH_MessageType_PR_mib;
...@@ -270,7 +270,7 @@ uint8_t do_MIB_NR(rrc_gNB_carrier_data_t *carrier, ...@@ -270,7 +270,7 @@ uint8_t do_MIB_NR(rrc_gNB_carrier_data_t *carrier,
//encode MIB to data //encode MIB to data
enc_rval = uper_encode_to_buffer(&asn_DEF_BCCH_BCH_Message, enc_rval = uper_encode_to_buffer(&asn_DEF_BCCH_BCH_Message,
(void*)mib, (void*)mib,
carrier->MIB_NR, carrier->MIB,
24); 24);
AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n", AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n",
enc_rval.failed_type->name, enc_rval.encoded); enc_rval.failed_type->name, enc_rval.encoded);
...@@ -495,7 +495,7 @@ uint8_t do_SIB1_NR(rrc_gNB_carrier_data_t *carrier, ...@@ -495,7 +495,7 @@ uint8_t do_SIB1_NR(rrc_gNB_carrier_data_t *carrier,
return((enc_rval.encoded+7)/8); return((enc_rval.encoded+7)/8);
} }
uint8_t do_SERVINGCELLCONFIGCOMMON(uint8_t Mod_id, void do_SERVINGCELLCONFIGCOMMON(uint8_t Mod_id,
int CC_id int CC_id
#if defined(ENABLE_ITTI) #if defined(ENABLE_ITTI)
,gNB_RrcConfigurationReq *configuration ,gNB_RrcConfigurationReq *configuration
......
...@@ -252,29 +252,29 @@ BWP-UplinkCommon ::= SEQUENCE { ...@@ -252,29 +252,29 @@ BWP-UplinkCommon ::= SEQUENCE {
genericParameters BWP, genericParameters BWP,
-- Configuration of cell specific random access parameters which the UE uses for contention based and contention free random access -- Configuration of cell specific random access parameters which the UE uses for contention based and contention free random access
-- as well as for contention based beam failure recovery. -- as well as for contention based beam failure recovery.
rach-ConfigCommon SetupRelease { RACH-ConfigCommon } OPTIONAL, -- Need M rach-ConfigCommon RACH-ConfigCommon OPTIONAL, -- Need M
-- Cell specific parameters for the PUSCH -- Cell specific parameters for the PUSCH
pusch-ConfigCommon SetupRelease { PUSCH-ConfigCommon } OPTIONAL, -- Need M pusch-ConfigCommon PUSCH-ConfigCommon OPTIONAL, -- Need M
-- Cell specific parameters for the PUCCH -- Cell specific parameters for the PUCCH
pucch-ConfigCommon SetupRelease { PUCCH-ConfigCommon } OPTIONAL, -- Need M pucch-ConfigCommon PUCCH-ConfigCommon OPTIONAL, -- Need M
... ...
} }
BWP-UplinkDedicated ::= SEQUENCE { BWP-UplinkDedicated ::= SEQUENCE {
-- PUCCH configuration for one BWP of the regular UL or SUL of a serving cell. If the UE is configured with SUL, the network -- PUCCH configuration for one BWP of the regular UL or SUL of a serving cell. If the UE is configured with SUL, the network
-- configures PUCCH only on the BWPs of one of the uplinks (UL or SUL). -- configures PUCCH only on the BWPs of one of the uplinks (UL or SUL).
pucch-Config SetupRelease { PUCCH-Config } OPTIONAL, -- Need M pucch-Config PUCCH-Config OPTIONAL, -- Need M
-- PUSCH configuration for one BWP of the regular UL or SUL of a serving cell. If the UE is configured with SUL and -- PUSCH configuration for one BWP of the regular UL or SUL of a serving cell. If the UE is configured with SUL and
-- if it has a PUSCH-Config for both UL and SUL, a carrier indicator field in DCI indicates for which of the two to use an UL grant. -- if it has a PUSCH-Config for both UL and SUL, a carrier indicator field in DCI indicates for which of the two to use an UL grant.
-- See also L1 parameter 'dynamicPUSCHSUL' (see 38.213, section FFS_Section) -- See also L1 parameter 'dynamicPUSCHSUL' (see 38.213, section FFS_Section)
pusch-Config SetupRelease { PUSCH-Config } OPTIONAL, -- Need M pusch-Config PUSCH-Config OPTIONAL, -- Need M
-- A Configured-Grant of typ1 or type2. It may be configured for Ul or SUL but in case of type1 [FFS also type2] not for both at a time. -- A Configured-Grant of typ1 or type2. It may be configured for Ul or SUL but in case of type1 [FFS also type2] not for both at a time.
configuredGrantConfig SetupRelease { ConfiguredGrantConfig } OPTIONAL, -- Need M configuredGrantConfig ConfiguredGrantConfig OPTIONAL, -- Need M
-- Uplink sounding reference signal configuration -- Uplink sounding reference signal configuration
srs-Config SetupRelease { SRS-Config } OPTIONAL, -- Need M srs-Config SRS-Config OPTIONAL, -- Need M
-- Determines how the UE performs Beam Failure Recovery upon detection of a Beam Failure (see RadioLinkMonitoringConfig) -- Determines how the UE performs Beam Failure Recovery upon detection of a Beam Failure (see RadioLinkMonitoringConfig)
beamFailureRecoveryConfig SetupRelease { BeamFailureRecoveryConfig } OPTIONAL, -- Need M beamFailureRecoveryConfig BeamFailureRecoveryConfig OPTIONAL, -- Need M
... ...
} }
...@@ -296,16 +296,16 @@ BWP-Downlink ::= SEQUENCE { ...@@ -296,16 +296,16 @@ BWP-Downlink ::= SEQUENCE {
BWP-DownlinkCommon ::= SEQUENCE { BWP-DownlinkCommon ::= SEQUENCE {
genericParameters BWP, genericParameters BWP,
pdcch-ConfigCommon SetupRelease { PDCCH-ConfigCommon } OPTIONAL, -- Need M pdcch-ConfigCommon PDCCH-ConfigCommon OPTIONAL, -- Need M
pdsch-ConfigCommon SetupRelease { PDSCH-ConfigCommon } OPTIONAL, -- Need M pdsch-ConfigCommon PDSCH-ConfigCommon OPTIONAL, -- Need M
... ...
} }
BWP-DownlinkDedicated ::= SEQUENCE { BWP-DownlinkDedicated ::= SEQUENCE {
pdcch-Config SetupRelease { PDCCH-Config } OPTIONAL, -- Need M pdcch-Config PDCCH-Config OPTIONAL, -- Need M
pdsch-Config SetupRelease { PDSCH-Config } OPTIONAL, -- Need M pdsch-Config PDSCH-Config OPTIONAL, -- Need M
sps-Config SetupRelease { SPS-Config } OPTIONAL, -- Need M sps-Config SPS-Config OPTIONAL, -- Need M
radioLinkMonitoringConfig SetupRelease { RadioLinkMonitoringConfig } OPTIONAL, -- Need M radioLinkMonitoringConfig RadioLinkMonitoringConfig OPTIONAL, -- Need M
... ...
} }
...@@ -449,7 +449,7 @@ SpCellConfig ::= SEQUENCE { ...@@ -449,7 +449,7 @@ SpCellConfig ::= SEQUENCE {
servCellIndex ServCellIndex OPTIONAL, -- Cond SCG servCellIndex ServCellIndex OPTIONAL, -- Cond SCG
-- Parameters for the synchronous reconfiguration to the target SpCell: -- Parameters for the synchronous reconfiguration to the target SpCell:
reconfigurationWithSync ReconfigurationWithSync OPTIONAL, -- Cond ReconfWithSync reconfigurationWithSync ReconfigurationWithSync OPTIONAL, -- Cond ReconfWithSync
rlf-TimersAndConstants SetupRelease { RLF-TimersAndConstants } OPTIONAL, -- Need M rlf-TimersAndConstants RLF-TimersAndConstants OPTIONAL, -- Need M
rlmInSyncOutOfSyncThreshold INTEGER (0..1) OPTIONAL, -- Need M rlmInSyncOutOfSyncThreshold INTEGER (0..1) OPTIONAL, -- Need M
spCellConfigDedicated ServingCellConfig OPTIONAL, -- Need M spCellConfigDedicated ServingCellConfig OPTIONAL, -- Need M
... ...
...@@ -600,7 +600,7 @@ ConfiguredGrantConfig ::= SEQUENCE { ...@@ -600,7 +600,7 @@ ConfiguredGrantConfig ::= SEQUENCE {
mcs-TableTransformPrecoder ENUMERATED {qam256} OPTIONAL, -- Need S mcs-TableTransformPrecoder ENUMERATED {qam256} OPTIONAL, -- Need S
-- Selection between and configuration of dynamic and semi-static beta-offset, as agreed in RAN1-AH18776 -- Selection between and configuration of dynamic and semi-static beta-offset, as agreed in RAN1-AH18776
-- Note: For Type 1 UL data transmission without grant, "uci-on-PUSCH" should be set to semiStatic -- Note: For Type 1 UL data transmission without grant, "uci-on-PUSCH" should be set to semiStatic
uci-OnPUSCH SetupRelease { CG-UCI-OnPUSCH }, uci-OnPUSCH CG-UCI-OnPUSCH ,
-- Configuration of resource allocation type 0 and resource allocation type 1, as agreed in RAN1-AH18776 -- Configuration of resource allocation type 0 and resource allocation type 1, as agreed in RAN1-AH18776
-- Note: For Type 1 UL data transmission without grant, "resourceAllocation" should be resourceAllocationType0 or resourceAllocationType1 -- Note: For Type 1 UL data transmission without grant, "resourceAllocation" should be resourceAllocationType0 or resourceAllocationType1
resourceAllocation ENUMERATED { resourceAllocationType0, resourceAllocationType1, dynamicSwitch }, resourceAllocation ENUMERATED { resourceAllocationType0, resourceAllocationType1, dynamicSwitch },
...@@ -918,8 +918,8 @@ CSI-MeasConfig ::= SEQUENCE { ...@@ -918,8 +918,8 @@ CSI-MeasConfig ::= SEQUENCE {
-- Contains trigger states for dynamically selecting one or more aperiodic and semi-persistent reporting configurations -- Contains trigger states for dynamically selecting one or more aperiodic and semi-persistent reporting configurations
-- and/or triggering one or more aperiodic CSI-RS resource sets for channel and/or interference measurement. -- and/or triggering one or more aperiodic CSI-RS resource sets for channel and/or interference measurement.
-- FFS: How to address the MAC-CE configuration -- FFS: How to address the MAC-CE configuration
aperiodicTriggerStateList SetupRelease { CSI-AperiodicTriggerStateList } OPTIONAL, -- Need M aperiodicTriggerStateList CSI-AperiodicTriggerStateList OPTIONAL, -- Need M
semiPersistentOnPUSCH-TriggerStateList SetupRelease { CSI-SemiPersistentOnPUSCH-TriggerStateList } OPTIONAL, -- Need M semiPersistentOnPUSCH-TriggerStateList CSI-SemiPersistentOnPUSCH-TriggerStateList OPTIONAL, -- Need M
... ...
} }
...@@ -1292,7 +1292,7 @@ DMRS-DownlinkConfig ::= SEQUENCE { ...@@ -1292,7 +1292,7 @@ DMRS-DownlinkConfig ::= SEQUENCE {
scramblingID1 INTEGER (0..65535) OPTIONAL, -- Need S scramblingID1 INTEGER (0..65535) OPTIONAL, -- Need S
-- Configures downlink PTRS. If absent of released, the UE assumes that downlink PTRS are not present. See 38.214 section 5.1.6.3 -- Configures downlink PTRS. If absent of released, the UE assumes that downlink PTRS are not present. See 38.214 section 5.1.6.3
phaseTrackingRS SetupRelease { PTRS-DownlinkConfig } OPTIONAL, -- Need M phaseTrackingRS PTRS-DownlinkConfig OPTIONAL, -- Need M
... ...
} }
...@@ -1309,7 +1309,7 @@ DMRS-UplinkConfig ::= SEQUENCE { ...@@ -1309,7 +1309,7 @@ DMRS-UplinkConfig ::= SEQUENCE {
-- If the field is absent, the UE applies the value pos2. -- If the field is absent, the UE applies the value pos2.
dmrs-AdditionalPosition ENUMERATED {pos0, pos1, pos3} OPTIONAL, -- Need R dmrs-AdditionalPosition ENUMERATED {pos0, pos1, pos3} OPTIONAL, -- Need R
-- Configures uplink PTRS (see 38.211, section x.x.x.x) FFS_Ref -- Configures uplink PTRS (see 38.211, section x.x.x.x) FFS_Ref
phaseTrackingRS SetupRelease { PTRS-UplinkConfig } OPTIONAL, -- Need M phaseTrackingRS PTRS-UplinkConfig OPTIONAL, -- Need M
-- The maximum number of OFDM symbols for UL front loaded DMRS. 'len1' corresponds to value 1. 'len2 corresponds to value 2. -- The maximum number of OFDM symbols for UL front loaded DMRS. 'len1' corresponds to value 1. 'len2 corresponds to value 2.
-- If the field is absent, the UE applies value len1. -- If the field is absent, the UE applies value len1.
-- Corresponds to L1 parameter 'UL-DMRS-max-len' (see 38.214, section 6.4.1.1.2) -- Corresponds to L1 parameter 'UL-DMRS-max-len' (see 38.214, section 6.4.1.1.2)
...@@ -1508,16 +1508,16 @@ LogicalChannelConfig ::= SEQUENCE { ...@@ -1508,16 +1508,16 @@ LogicalChannelConfig ::= SEQUENCE {
-- TAG-MAC-CELL-GROUP-CONFIG-START -- TAG-MAC-CELL-GROUP-CONFIG-START
MAC-CellGroupConfig ::= SEQUENCE { MAC-CellGroupConfig ::= SEQUENCE {
drx-Config SetupRelease { DRX-Config } OPTIONAL, -- Need M drx-Config DRX-Config OPTIONAL, -- Need M
schedulingRequestConfig SchedulingRequestConfig OPTIONAL, -- Need M schedulingRequestConfig SchedulingRequestConfig OPTIONAL, -- Need M
bsr-Config BSR-Config OPTIONAL, -- Need M bsr-Config BSR-Config OPTIONAL, -- Need M
tag-Config TAG-Config OPTIONAL, -- Need M tag-Config TAG-Config OPTIONAL, -- Need M
phr-Config SetupRelease { PHR-Config } OPTIONAL, -- Need M phr-Config PHR-Config OPTIONAL, -- Need M
-- FFS : configurable per SCell? -- FFS : configurable per SCell?
skipUplinkTxDynamic BOOLEAN, skipUplinkTxDynamic BOOLEAN,
-- RNTI value for downlink SPS (see SPS-config) and uplink configured scheduling (see ConfiguredSchedulingConfig). -- RNTI value for downlink SPS (see SPS-config) and uplink configured scheduling (see ConfiguredSchedulingConfig).
cs-RNTI SetupRelease { RNTI-Value } OPTIONAL -- Need M cs-RNTI RNTI-Value OPTIONAL -- Need M
} }
DRX-Config ::= SEQUENCE { DRX-Config ::= SEQUENCE {
...@@ -1654,7 +1654,7 @@ ReportConfigToRemoveList ::= SEQUENCE (SIZE (1..maxReportConfigId)) OF ReportC ...@@ -1654,7 +1654,7 @@ ReportConfigToRemoveList ::= SEQUENCE (SIZE (1..maxReportConfigId)) OF ReportC
--TAG-MEAS-GAP-CONFIG-START --TAG-MEAS-GAP-CONFIG-START
MeasGapConfig ::= SEQUENCE { MeasGapConfig ::= SEQUENCE {
gapFR2 SetupRelease { GapConfig } OPTIONAL, gapFR2 GapConfig OPTIONAL,
... ...
} }
...@@ -1731,7 +1731,7 @@ ReferenceSignalConfig::= SEQUENCE { ...@@ -1731,7 +1731,7 @@ ReferenceSignalConfig::= SEQUENCE {
-- SSB configuration for mobility (nominal SSBs, timing configuration) -- SSB configuration for mobility (nominal SSBs, timing configuration)
ssb-ConfigMobility SSB-ConfigMobility OPTIONAL, -- Need M ssb-ConfigMobility SSB-ConfigMobility OPTIONAL, -- Need M
-- CSI-RS resources to be used for CSI-RS based RRM measurements -- CSI-RS resources to be used for CSI-RS based RRM measurements
csi-rs-ResourceConfigMobility SetupRelease { CSI-RS-ResourceConfigMobility } OPTIONAL-- Need M csi-rs-ResourceConfigMobility CSI-RS-ResourceConfigMobility OPTIONAL-- Need M
} }
...@@ -1743,7 +1743,7 @@ SSB-ConfigMobility::= SEQUENCE { ...@@ -1743,7 +1743,7 @@ SSB-ConfigMobility::= SEQUENCE {
-- Corresponds to L1 parameter 'SSB-measured' (see FFS_Spec, section FFS_Section) -- Corresponds to L1 parameter 'SSB-measured' (see FFS_Spec, section FFS_Section)
-- When the field is absent the UE measures on all SS-blocks -- When the field is absent the UE measures on all SS-blocks
-- FFS_CHECK: Is this IE placed correctly. -- FFS_CHECK: Is this IE placed correctly.
ssb-ToMeasure SetupRelease { SSB-ToMeasure } OPTIONAL, -- Need M ssb-ToMeasure SSB-ToMeasure OPTIONAL, -- Need M
-- Indicates whether the UE can utilize serving cell timing to derive the index of SS block transmitted by neighbour cell: -- Indicates whether the UE can utilize serving cell timing to derive the index of SS block transmitted by neighbour cell:
useServingCellTimingForSync BOOLEAN, useServingCellTimingForSync BOOLEAN,
...@@ -2137,17 +2137,17 @@ PDCCH-Config ::= SEQUENCE { ...@@ -2137,17 +2137,17 @@ PDCCH-Config ::= SEQUENCE {
-- Configuration of downlink preemtption indications to be monitored in this cell. -- Configuration of downlink preemtption indications to be monitored in this cell.
-- Corresponds to L1 parameter 'Preemp-DL' (see 38.214, section 11.2) -- Corresponds to L1 parameter 'Preemp-DL' (see 38.214, section 11.2)
-- FFS_RAN1: LS R1-1801281 indicates this is "Per Cell (but association with each configured BWP is needed)" => Unclear, keep on BWP for now. -- FFS_RAN1: LS R1-1801281 indicates this is "Per Cell (but association with each configured BWP is needed)" => Unclear, keep on BWP for now.
downlinkPreemption SetupRelease { DownlinkPreemption } OPTIONAL, -- Need M downlinkPreemption DownlinkPreemption OPTIONAL, -- Need M
-- Configuration of Slot-Format-Indicators to be monitored in this cell -- Configuration of Slot-Format-Indicators to be monitored in this cell
-- FFS_RAN1 discusses still whether this SFI payload configuration is BWP- or Cell-Specific. -- FFS_RAN1 discusses still whether this SFI payload configuration is BWP- or Cell-Specific.
slotFormatIndicator SetupRelease { SlotFormatIndicator } OPTIONAL, -- Need M slotFormatIndicator SlotFormatIndicator OPTIONAL, -- Need M
-- Enable and configure reception of group TPC commands for PUSCH -- Enable and configure reception of group TPC commands for PUSCH
tpc-PUSCH SetupRelease { PUSCH-TPC-CommandConfig } OPTIONAL, -- Need M tpc-PUSCH PUSCH-TPC-CommandConfig OPTIONAL, -- Need M
-- Enable and configure reception of group TPC commands fpr PUCCH -- Enable and configure reception of group TPC commands fpr PUCCH
tpc-PUCCH SetupRelease { PUCCH-TPC-CommandConfig } OPTIONAL, -- Cond PUCCH-CellOnly tpc-PUCCH PUCCH-TPC-CommandConfig OPTIONAL, -- Cond PUCCH-CellOnly
... ...
} }
...@@ -2264,9 +2264,9 @@ PDSCH-Config ::= SEQUENCE { ...@@ -2264,9 +2264,9 @@ PDSCH-Config ::= SEQUENCE {
dataScramblingIdentityPDSCH INTEGER (0..1007) OPTIONAL, dataScramblingIdentityPDSCH INTEGER (0..1007) OPTIONAL,
-- DMRS configuration for PDSCH transmissions using PDSCH mapping type A (chosen dynamically via PDSCH-TimeDomainResourceAllocation). -- DMRS configuration for PDSCH transmissions using PDSCH mapping type A (chosen dynamically via PDSCH-TimeDomainResourceAllocation).
dmrs-DownlinkForPDSCH-MappingTypeA SetupRelease { DMRS-DownlinkConfig } OPTIONAL, -- Need M dmrs-DownlinkForPDSCH-MappingTypeA DMRS-DownlinkConfig OPTIONAL, -- Need M
-- DMRS configuration for PDSCH transmissions using PDSCH mapping type B (chosen dynamically via PDSCH-TimeDomainResourceAllocation). -- DMRS configuration for PDSCH transmissions using PDSCH mapping type B (chosen dynamically via PDSCH-TimeDomainResourceAllocation).
dmrs-DownlinkForPDSCH-MappingTypeB SetupRelease { DMRS-DownlinkConfig } OPTIONAL, -- Need M dmrs-DownlinkForPDSCH-MappingTypeB DMRS-DownlinkConfig OPTIONAL, -- Need M
-- A list of Transmission Configuration Indicator (TCI) states for dynamically indicating (over DCI) a transmission configuration -- A list of Transmission Configuration Indicator (TCI) states for dynamically indicating (over DCI) a transmission configuration
...@@ -2371,7 +2371,7 @@ PDSCH-ConfigCommon ::= SEQUENCE { ...@@ -2371,7 +2371,7 @@ PDSCH-ConfigCommon ::= SEQUENCE {
PDSCH-ServingCellConfig ::= SEQUENCE { PDSCH-ServingCellConfig ::= SEQUENCE {
-- Enables and configures code-block-group (CBG) based transmission (see 38.213, section 9.1.1) -- Enables and configures code-block-group (CBG) based transmission (see 38.213, section 9.1.1)
codeBlockGroupTransmission SetupRelease { PDSCH-CodeBlockGroupTransmission } OPTIONAL, -- Need M codeBlockGroupTransmission PDSCH-CodeBlockGroupTransmission OPTIONAL, -- Need M
-- Accounts for overhead from CSI-RS, CORESET, etc. If the field is absent, the UE applies value xOh0. -- Accounts for overhead from CSI-RS, CORESET, etc. If the field is absent, the UE applies value xOh0.
-- Corresponds to L1 parameter 'Xoh-PDSCH' (see 38.214, section 5.1.3.2) -- Corresponds to L1 parameter 'Xoh-PDSCH' (see 38.214, section 5.1.3.2)
xOverhead ENUMERATED { xOh6, xOh12, xOh18 } OPTIONAL, -- Need S xOverhead ENUMERATED { xOh6, xOh12, xOh18 } OPTIONAL, -- Need S
...@@ -2496,13 +2496,13 @@ PUCCH-Config ::= SEQUENCE { ...@@ -2496,13 +2496,13 @@ PUCCH-Config ::= SEQUENCE {
resourceToReleaseList SEQUENCE (SIZE (1..maxNrofPUCCH-Resources)) OF PUCCH-ResourceId OPTIONAL, -- Need N resourceToReleaseList SEQUENCE (SIZE (1..maxNrofPUCCH-Resources)) OF PUCCH-ResourceId OPTIONAL, -- Need N
-- Parameters that are common for all PUCCH resources of format 1 -- Parameters that are common for all PUCCH resources of format 1
format1 SetupRelease { PUCCH-FormatConfig } OPTIONAL, -- Need M format1 PUCCH-FormatConfig OPTIONAL, -- Need M
-- Parameters that are common for all PUCCH resources of format 2 -- Parameters that are common for all PUCCH resources of format 2
format2 SetupRelease { PUCCH-FormatConfig } OPTIONAL, -- Need M format2 PUCCH-FormatConfig OPTIONAL, -- Need M
-- Parameters that are common for all PUCCH resources of format 3 -- Parameters that are common for all PUCCH resources of format 3
format3 SetupRelease { PUCCH-FormatConfig } OPTIONAL, -- Need M format3 PUCCH-FormatConfig OPTIONAL, -- Need M
-- Parameters that are common for all PUCCH resources of format 4 -- Parameters that are common for all PUCCH resources of format 4
format4 SetupRelease { PUCCH-FormatConfig } OPTIONAL, -- Need M format4 PUCCH-FormatConfig OPTIONAL, -- Need M
schedulingRequestResourceToAddModList SEQUENCE (SIZE (1..maxNrofSR-Resources)) OF SchedulingRequestResourceConfig OPTIONAL, -- Need M schedulingRequestResourceToAddModList SEQUENCE (SIZE (1..maxNrofSR-Resources)) OF SchedulingRequestResourceConfig OPTIONAL, -- Need M
schedulingRequestResourceToReleaseList SEQUENCE (SIZE (1..maxNrofSR-Resources)) OF SchedulingRequestResourceId OPTIONAL, -- Need M schedulingRequestResourceToReleaseList SEQUENCE (SIZE (1..maxNrofSR-Resources)) OF SchedulingRequestResourceId OPTIONAL, -- Need M
...@@ -2759,9 +2759,9 @@ PUSCH-Config ::= SEQUENCE { ...@@ -2759,9 +2759,9 @@ PUSCH-Config ::= SEQUENCE {
txConfig ENUMERATED {codebook, nonCodebook}, txConfig ENUMERATED {codebook, nonCodebook},
-- DMRS configuration for PUSCH transmissions using PUSCH mapping type A (chosen dynamically via PUSCH-TimeDomainResourceAllocation). -- DMRS configuration for PUSCH transmissions using PUSCH mapping type A (chosen dynamically via PUSCH-TimeDomainResourceAllocation).
dmrs-UplinkForPUSCH-MappingTypeA SetupRelease { DMRS-UplinkConfig } OPTIONAL, -- Need M dmrs-UplinkForPUSCH-MappingTypeA DMRS-UplinkConfig OPTIONAL, -- Need M
-- DMRS configuration for PUSCH transmissions using PUSCH mapping type B (chosen dynamically via PUSCH-TimeDomainResourceAllocation) -- DMRS configuration for PUSCH transmissions using PUSCH mapping type B (chosen dynamically via PUSCH-TimeDomainResourceAllocation)
dmrs-UplinkForPUSCH-MappingTypeB SetupRelease { DMRS-UplinkConfig } OPTIONAL, -- Need M dmrs-UplinkForPUSCH-MappingTypeB DMRS-UplinkConfig OPTIONAL, -- Need M
pusch-PowerControl PUSCH-PowerControl OPTIONAL, -- Need M pusch-PowerControl PUSCH-PowerControl OPTIONAL, -- Need M
-- Configured one of two supported frequency hopping mode. If not configured frequency hopping is not configured -- Configured one of two supported frequency hopping mode. If not configured frequency hopping is not configured
...@@ -2807,7 +2807,7 @@ PUSCH-Config ::= SEQUENCE { ...@@ -2807,7 +2807,7 @@ PUSCH-Config ::= SEQUENCE {
-- If the field is absent or released, the UE applies the value 'semiStatic' and the BetaOffsets according to -- If the field is absent or released, the UE applies the value 'semiStatic' and the BetaOffsets according to
-- FFS [BetaOffsets and/or section 9.x.x). -- FFS [BetaOffsets and/or section 9.x.x).
-- Corresponds to L1 parameter 'UCI-on-PUSCH' (see 38.213, section 9.3) -- Corresponds to L1 parameter 'UCI-on-PUSCH' (see 38.213, section 9.3)
uci-OnPUSCH SetupRelease { UCI-OnPUSCH} OPTIONAL, -- Need M uci-OnPUSCH UCI-OnPUSCH OPTIONAL, -- Need M
-- Interleaving unit configurable between 2 and 4 PRBs -- Interleaving unit configurable between 2 and 4 PRBs
-- Corresponds to L1 parameter 'VRB-to-PRB-interleaver' (see 38.211, section 6.3.1.6) -- Corresponds to L1 parameter 'VRB-to-PRB-interleaver' (see 38.211, section 6.3.1.6)
vrb-ToPRB-Interleaver ENUMERATED {n2, n4}, vrb-ToPRB-Interleaver ENUMERATED {n2, n4},
...@@ -2971,7 +2971,7 @@ BetaOffsets ::= SEQUENCE { ...@@ -2971,7 +2971,7 @@ BetaOffsets ::= SEQUENCE {
PUSCH-ServingCellConfig ::= SEQUENCE { PUSCH-ServingCellConfig ::= SEQUENCE {
-- Enables and configures code-block-group (CBG) based transmission (see 38.214, section FFS_Section) -- Enables and configures code-block-group (CBG) based transmission (see 38.214, section FFS_Section)
codeBlockGroupTransmission SetupRelease { PUSCH-CodeBlockGroupGransmission } OPTIONAL, -- Need M codeBlockGroupTransmission PUSCH-CodeBlockGroupGransmission OPTIONAL, -- Need M
-- Enables LBRM (Limited buffer rate-matching). When the field is absent the UE applies FBRM (Full buffer rate-matchingLBRM). -- Enables LBRM (Limited buffer rate-matching). When the field is absent the UE applies FBRM (Full buffer rate-matchingLBRM).
-- Corresponds to L1 parameter 'LBRM-FBRM-selection' (see 38.212, section 5.4.2) -- Corresponds to L1 parameter 'LBRM-FBRM-selection' (see 38.212, section 5.4.2)
rateMatching ENUMERATED {limitedBufferRM} OPTIONAL, -- Need S rateMatching ENUMERATED {limitedBufferRM} OPTIONAL, -- Need S
...@@ -3897,12 +3897,12 @@ ServingCellConfig ::= SEQUENCE { ...@@ -3897,12 +3897,12 @@ ServingCellConfig ::= SEQUENCE {
-- PDSCH releated parameters that are not BWP-specific. -- PDSCH releated parameters that are not BWP-specific.
pdsch-ServingCellConfig SetupRelease { PDSCH-ServingCellConfig } OPTIONAL, -- Need M pdsch-ServingCellConfig PDSCH-ServingCellConfig OPTIONAL, -- Need M
csi-MeasConfig SetupRelease { CSI-MeasConfig } OPTIONAL, -- Need M csi-MeasConfig CSI-MeasConfig OPTIONAL, -- Need M
-- Includes parameters for configuration of carrier based SRS switching -- Includes parameters for configuration of carrier based SRS switching
-- Corresponds to L1 parameter 'SRS-CarrierSwitching' (see 38,214, section FFS_Section) -- Corresponds to L1 parameter 'SRS-CarrierSwitching' (see 38,214, section FFS_Section)
carrierSwitching SetupRelease { SRS-CarrierSwitching } OPTIONAL, -- Need M carrierSwitching SRS-CarrierSwitching OPTIONAL, -- Need M
-- MAC parameters: -- MAC parameters:
sCellDeactivationTimer ENUMERATED {ms20, ms40, ms80, ms160, ms200, ms240, ms320, ms400, ms480, ms520, ms640, sCellDeactivationTimer ENUMERATED {ms20, ms40, ms80, ms160, ms200, ms240, ms320, ms400, ms480, ms520, ms640,
ms720, ms840, ms1280, spare2,spare1} OPTIONAL, -- Cond ServingCellWithoutPUCCH ms720, ms840, ms1280, spare2,spare1} OPTIONAL, -- Cond ServingCellWithoutPUCCH
...@@ -3944,7 +3944,7 @@ UplinkConfig ::= SEQUENCE { ...@@ -3944,7 +3944,7 @@ UplinkConfig ::= SEQUENCE {
-- Configuration that is common across the UL BWPs: -- Configuration that is common across the UL BWPs:
-- PUSCH related parameters that are not BWP-specific. -- PUSCH related parameters that are not BWP-specific.
pusch-ServingCellConfig SetupRelease { PUSCH-ServingCellConfig } OPTIONAL, -- Need M pusch-ServingCellConfig PUSCH-ServingCellConfig OPTIONAL, -- Need M
... ...
} }
...@@ -3980,7 +3980,7 @@ ServingCellConfigCommon ::= SEQUENCE { ...@@ -3980,7 +3980,7 @@ ServingCellConfigCommon ::= SEQUENCE {
dmrs-TypeA-Position ENUMERATED {pos2, pos3}, dmrs-TypeA-Position ENUMERATED {pos2, pos3},
-- Parameters to determine an LTE CRS pattern that the UE shall rate match around. -- Parameters to determine an LTE CRS pattern that the UE shall rate match around.
lte-CRS-ToMatchAround SetupRelease { RateMatchPatternLTE-CRS } OPTIONAL, -- Need M lte-CRS-ToMatchAround RateMatchPatternLTE-CRS OPTIONAL, -- Need M
-- Resources patterns which the UE should rate match PDSCH around. The UE rate matches around the union of all resources -- Resources patterns which the UE should rate match PDSCH around. The UE rate matches around the union of all resources
-- indicated in the nested bitmaps. Rate match patterns defined here on cell level apply only to PDSCH of the same numerology. -- indicated in the nested bitmaps. Rate match patterns defined here on cell level apply only to PDSCH of the same numerology.
......
File mode changed from 100755 to 100644
...@@ -41,27 +41,27 @@ ...@@ -41,27 +41,27 @@
#include "COMMON/platform_types.h" #include "COMMON/platform_types.h"
//#include "COMMON/mac_rrc_primitives.h" //#include "COMMON/mac_rrc_primitives.h"
#if defined(Rel15) #if defined(NR_Rel15)
#include "SIB1.h" #include "NR_SIB1.h"
//#include "SystemInformation.h" //#include "SystemInformation.h"
//#include "RRCConnectionReconfiguration.h" //#include "RRCConnectionReconfiguration.h"
#include "RRCReconfigurationComplete.h" #include "NR_RRCReconfigurationComplete.h"
#include "RRCReconfiguration" #include "NR_RRCReconfiguration.h"
//#include "RRCConnectionReconfigurationComplete.h" //#include "RRCConnectionReconfigurationComplete.h"
//#include "RRCConnectionSetup.h" //#include "RRCConnectionSetup.h"
//#include "RRCConnectionSetupComplete.h" //#include "RRCConnectionSetupComplete.h"
//#include "RRCConnectionRequest.h" //#include "RRCConnectionRequest.h"
//#include "RRCConnectionReestablishmentRequest.h" //#include "RRCConnectionReestablishmentRequest.h"
//#include "BCCH-DL-SCH-Message.h" //#include "BCCH-DL-SCH-Message.h"
#include "BCCH-BCH-Message.h" #include "NR_BCCH-BCH-Message.h"
//#include "MCCH-Message.h" //#include "MCCH-Message.h"
//#include "MBSFNAreaConfiguration-r9.h" //#include "MBSFNAreaConfiguration-r9.h"
//#include "SCellToAddMod-r10.h" //#include "SCellToAddMod-r10.h"
//#include "AS-Config.h" //#include "AS-Config.h"
//#include "AS-Context.h" //#include "AS-Context.h"
#include "UE-NR-Capability.h" #include "NR_UE-NR-Capability.h"
#include "MeasResults.h" #include "NR_MeasResults.h"
#include "ServingCellConfigCommon.h" #include "NR_ServingCellConfigCommon.h"
#endif #endif
//------------------- //-------------------
...@@ -90,7 +90,7 @@ ...@@ -90,7 +90,7 @@
/*I will change the name of the structure for compile purposes--> hope not to undo this process*/ /*I will change the name of the structure for compile purposes--> hope not to undo this process*/
typedef unsigned int uid_NR_t; typedef unsigned int uid_NR_t;
#define UID_LINEAR_ALLOCATOR_BITMAP_SIZE_NR (((NUMBER_OF_UE_MAX_NR/8)/sizeof(unsigned int)) + 1) #define UID_LINEAR_ALLOCATOR_BITMAP_SIZE_NR (((NUMBER_OF_NR_UE_MAX/8)/sizeof(unsigned int)) + 1)
typedef struct uid_linear_allocator_NR_s { typedef struct uid_linear_allocator_NR_s {
unsigned int bitmap[UID_LINEAR_ALLOCATOR_BITMAP_SIZE_NR]; unsigned int bitmap[UID_LINEAR_ALLOCATOR_BITMAP_SIZE_NR];
...@@ -108,29 +108,29 @@ typedef struct uid_linear_allocator_NR_s { ...@@ -108,29 +108,29 @@ typedef struct uid_linear_allocator_NR_s {
#define UE_INDEX_INVALID ((module_id_t) ~0) // FIXME attention! depends on type uint8_t!!! used to be -1 #define UE_INDEX_INVALID ((module_id_t) ~0) // FIXME attention! depends on type uint8_t!!! used to be -1
typedef enum { typedef enum {
RRC_OK=0, NR_RRC_OK=0,
RRC_ConnSetup_failed, NR_RRC_ConnSetup_failed,
RRC_PHY_RESYNCH, NR_RRC_PHY_RESYNCH,
RRC_Handover_failed, NR_RRC_Handover_failed,
RRC_HO_STARTED NR_RRC_HO_STARTED
} RRC_status_NR_t; } NR_RRC_status_t;
typedef enum UE_STATE_NR_e { typedef enum UE_STATE_NR_e {
RRC_INACTIVE=0, NR_RRC_INACTIVE=0,
RRC_IDLE, NR_RRC_IDLE,
RRC_SI_RECEIVED, NR_RRC_SI_RECEIVED,
RRC_CONNECTED, NR_RRC_CONNECTED,
RRC_RECONFIGURED, NR_RRC_RECONFIGURED,
RRC_HO_EXECUTION NR_RRC_HO_EXECUTION
} UE_STATE_NR_t; } NR_UE_STATE_t;
typedef enum HO_STATE_NR_e { typedef enum HO_STATE_NR_e {
HO_IDLE=0, NR_HO_IDLE=0,
HO_MEASURMENT, NR_HO_MEASURMENT,
HO_PREPARE, NR_HO_PREPARE,
HO_CMD, // initiated by the src eNB NR_HO_CMD, // initiated by the src eNB
HO_COMPLETE // initiated by the target eNB NR_HO_COMPLETE // initiated by the target eNB
} HO_STATE_NR_t; } NR_HO_STATE_t;
//#define NUMBER_OF_UE_MAX MAX_MOBILES_PER_RG //#define NUMBER_OF_UE_MAX MAX_MOBILES_PER_RG
#define RRM_FREE(p) if ( (p) != NULL) { free(p) ; p=NULL ; } #define RRM_FREE(p) if ( (p) != NULL) { free(p) ; p=NULL ; }
...@@ -161,7 +161,7 @@ typedef struct { ...@@ -161,7 +161,7 @@ typedef struct {
} __attribute__ ((__packed__)) LCHAN_DESC_NR; } __attribute__ ((__packed__)) LCHAN_DESC_NR;
typedef struct UE_RRC_INFO_NR_s { typedef struct UE_RRC_INFO_NR_s {
UE_STATE_NR_t State; NR_UE_STATE_t State;
uint8_t SIB1systemInfoValueTag; uint8_t SIB1systemInfoValueTag;
uint32_t SIStatus; uint32_t SIStatus;
uint32_t SIcnt; uint32_t SIcnt;
...@@ -318,8 +318,8 @@ typedef struct gNB_RRC_UE_s { ...@@ -318,8 +318,8 @@ typedef struct gNB_RRC_UE_s {
/* Used integrity/ciphering algorithms */ /* Used integrity/ciphering algorithms */
//Specs. TS 38.331 V15.1.0 pag 432 Change position of chipering enumerative w.r.t previous version //Specs. TS 38.331 V15.1.0 pag 432 Change position of chipering enumerative w.r.t previous version
e_CipheringAlgorithm ciphering_algorithm; e_NR_CipheringAlgorithm ciphering_algorithm;
e_IntegrityProtAlgorithm integrity_algorithm; e_NR_IntegrityProtAlgorithm integrity_algorithm;
uint8_t Status; uint8_t Status;
rnti_t rnti; rnti_t rnti;
...@@ -332,8 +332,8 @@ typedef struct gNB_RRC_UE_s { ...@@ -332,8 +332,8 @@ typedef struct gNB_RRC_UE_s {
/* NR not define at this moment /* NR not define at this moment
EstablishmentCause_t establishment_cause_NR; //different set for NB-IoT EstablishmentCause_t establishment_cause_NR; //different set for NB-IoT
*/
/* NR not define at this moment /* NR not define at this moment*/
/* Information from UE RRC ConnectionReestablishmentRequest */ /* Information from UE RRC ConnectionReestablishmentRequest */
//ReestablishmentCause_t reestablishment_cause_NR; //different set for NB_IoT //ReestablishmentCause_t reestablishment_cause_NR; //different set for NB_IoT
...@@ -398,10 +398,6 @@ typedef struct { ...@@ -398,10 +398,6 @@ typedef struct {
uint8_t *SIB1; uint8_t *SIB1;
uint8_t sizeof_SIB1; uint8_t sizeof_SIB1;
uint8_t *SERVINGCELLCONFIGCOMMON;
uint8_t sizeof_SERVINGCELLCONFIGCOMMON;
//implicit parameters needed //implicit parameters needed
int Ncp; //cyclic prefix for DL int Ncp; //cyclic prefix for DL
int Ncp_UL; //cyclic prefix for UL int Ncp_UL; //cyclic prefix for UL
...@@ -414,8 +410,8 @@ typedef struct { ...@@ -414,8 +410,8 @@ typedef struct {
//are the only static one (memory has been already allocated) //are the only static one (memory has been already allocated)
BCCH_BCH_Message_t mib; BCCH_BCH_Message_t mib;
SIB1_t *sib1; NR_SIB1_t *sib1;
ServingCellConfigCommon_t *servingcellconfigcommon; NR_ServingCellConfigCommon_t *servingcellconfigcommon;
SRB_INFO_NR SI; SRB_INFO_NR SI;
...@@ -472,7 +468,7 @@ typedef struct OAI_UECapability_NR_s { ...@@ -472,7 +468,7 @@ typedef struct OAI_UECapability_NR_s {
uint8_t sdu[MAX_UE_CAPABILITY_SIZE_NR]; uint8_t sdu[MAX_UE_CAPABILITY_SIZE_NR];
uint8_t sdu_size; uint8_t sdu_size;
////NR------ ////NR------
UE_NR_Capability_t UE_Capability_NR; //replace the UE_EUTRA_Capability of LTE NR_UE_NR_Capability_t UE_Capability_NR; //replace the UE_EUTRA_Capability of LTE
} OAI_UECapability_NR_t; } OAI_UECapability_NR_t;
...@@ -505,7 +501,6 @@ typedef struct UE_RRC_INST_NR_s { ...@@ -505,7 +501,6 @@ typedef struct UE_RRC_INST_NR_s {
SystemInformation_t *si[NB_CNX_UE]; //!< Temporary storage for an SI message. Decoding happens in decode_SI(). SystemInformation_t *si[NB_CNX_UE]; //!< Temporary storage for an SI message. Decoding happens in decode_SI().
SystemInformationBlockType2_t *sib2[NB_CNX_UE]; SystemInformationBlockType2_t *sib2[NB_CNX_UE];
/*
SystemInformationBlockType3_t *sib3[NB_CNX_UE]; SystemInformationBlockType3_t *sib3[NB_CNX_UE];
SystemInformationBlockType4_t *sib4[NB_CNX_UE]; SystemInformationBlockType4_t *sib4[NB_CNX_UE];
SystemInformationBlockType5_t *sib5[NB_CNX_UE]; SystemInformationBlockType5_t *sib5[NB_CNX_UE];
......
...@@ -164,10 +164,10 @@ init_NR_SI( ...@@ -164,10 +164,10 @@ init_NR_SI(
RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].MIB = (uint8_t*) malloc16(4); RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].MIB = (uint8_t*) malloc16(4);
RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_MIB = do_MIB_NR(&RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id],0, RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_MIB = do_MIB_NR(&RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id],0,
#ifdef ENABLE_ITTI #ifdef ENABLE_ITTI
configuration->ssb_SubcarrierOffset[CC_id], configuration->MIB_ssb_SubcarrierOffset[CC_id],
configuration->pdcch_ConfigSIB1[CC_id], configuration->pdcch_ConfigSIB1[CC_id],
configuration->subCarrierSpacingCommon[CC_id], configuration->MIB_subCarrierSpacingCommon[CC_id],
configuration->dmrs_TypeA_Position[CC_id] configuration->MIB_dmrs_TypeA_Position[CC_id]
#else #else
0,0,15,2 0,0,15,2
#endif #endif
...@@ -189,7 +189,7 @@ init_NR_SI( ...@@ -189,7 +189,7 @@ init_NR_SI(
AssertFatal(RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB1 != 255,"FATAL, RC.nrrrc[enb_mod_idP].carrier[CC_id].sizeof_SIB1 == 255"); AssertFatal(RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB1 != 255,"FATAL, RC.nrrrc[enb_mod_idP].carrier[CC_id].sizeof_SIB1 == 255");
RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SERVINGCELLCONFIGCOMMON = do_SERVINGCELLCONFIGCOMMON(ctxt_pP->module_id, do_SERVINGCELLCONFIGCOMMON(ctxt_pP->module_id,
CC_id CC_id
#if defined(ENABLE_ITTI) #if defined(ENABLE_ITTI)
,configuration ,configuration
......
...@@ -3,32 +3,74 @@ ...@@ -3,32 +3,74 @@
#if defined(CBMIMO1) || defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_LMSSDR) || defined(OAI_ADRV9371_ZC706) #if defined(CBMIMO1) || defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_LMSSDR) || defined(OAI_ADRV9371_ZC706)
# define NUMBER_OF_eNB_MAX 1 # define NUMBER_OF_eNB_MAX 1
# define NUMBER_OF_gNB_MAX 1
# define NUMBER_OF_RU_MAX 2 # define NUMBER_OF_RU_MAX 2
# define NUMBER_OF_NR_RU_MAX 2
# define NUMBER_OF_UE_MAX 16 # define NUMBER_OF_UE_MAX 16
# define NUMBER_OF_NR_UE_MAX 16
# define NUMBER_OF_CONNECTED_eNB_MAX 3 # define NUMBER_OF_CONNECTED_eNB_MAX 3
# define NUMBER_OF_CONNECTED_gNB_MAX 3
#else #else
# define NUMBER_OF_eNB_MAX 7 # define NUMBER_OF_eNB_MAX 7
# define NUMBER_OF_gNB_MAX 7
# define NUMBER_OF_RU_MAX 32 # define NUMBER_OF_RU_MAX 32
# define NUMBER_OF_NR_RU_MAX 32
# define NUMBER_OF_UE_MAX 20 # define NUMBER_OF_UE_MAX 20
# define NUMBER_OF_NR_UE_MAX 20
# define NUMBER_OF_CONNECTED_eNB_MAX 3 # define NUMBER_OF_CONNECTED_eNB_MAX 3
# define NUMBER_OF_CONNECTED_gNB_MAX 3
# if defined(STANDALONE) && STANDALONE==1 # if defined(STANDALONE) && STANDALONE==1
# undef NUMBER_OF_eNB_MAX # undef NUMBER_OF_eNB_MAX
# undef NUMBER_OF_gNB_MAX
# undef NUMBER_OF_UE_MAX # undef NUMBER_OF_UE_MAX
# undef NUMBER_OF_NR_UE_MAX
# undef NUMBER_OF_RU_MAX # undef NUMBER_OF_RU_MAX
# undef NUMBER_OF_NR_RU_MAX
# define NUMBER_OF_eNB_MAX 3 # define NUMBER_OF_eNB_MAX 3
# define NUMBER_OF_gNB_MAX 3
# define NUMBER_OF_UE_MAX 3 # define NUMBER_OF_UE_MAX 3
# define NUMBER_OF_NR_UE_MAX 3
# define NUMBER_OF_RU_MAX 3 # define NUMBER_OF_RU_MAX 3
# define NUMBER_OF_NR_RU_MAX 3
# endif # endif
# if defined(LARGE_SCALE) && LARGE_SCALE # if defined(LARGE_SCALE) && LARGE_SCALE
# undef NUMBER_OF_eNB_MAX # undef NUMBER_OF_eNB_MAX
# undef NUMBER_OF_gNB_MAX
# undef NUMBER_OF_UE_MAX # undef NUMBER_OF_UE_MAX
# undef NUMBER_OF_NR_UE_MAX
# undef NUMBER_OF_CONNECTED_eNB_MAX # undef NUMBER_OF_CONNECTED_eNB_MAX
# undef NUMBER_OF_CONNECTED_gNB_MAX
# undef NUMBER_OF_RU_MAX # undef NUMBER_OF_RU_MAX
# undef NUMBER_OF_NR_RU_MAX
# define NUMBER_OF_eNB_MAX 2 # define NUMBER_OF_eNB_MAX 2
# define NUMBER_OF_gNB_MAX 2
# define NUMBER_OF_UE_MAX 120 # define NUMBER_OF_UE_MAX 120
# define NUMBER_OF_NR_UE_MAX 120
# define NUMBER_OF_RU_MAX 16 # define NUMBER_OF_RU_MAX 16
# define NUMBER_OF_NR_RU_MAX 16
# define NUMBER_OF_CONNECTED_eNB_MAX 1 // to save some memory # define NUMBER_OF_CONNECTED_eNB_MAX 1 // to save some memory
# define NUMBER_OF_CONNECTED_gNB_MAX 1
# endif # endif
#endif #endif
......
...@@ -265,6 +265,7 @@ gNBs = ...@@ -265,6 +265,7 @@ gNBs =
tx_gain = 90; tx_gain = 90;
rx_gain = 125; rx_gain = 125;
MIB_subCarrierSpacingCommon = 0; MIB_subCarrierSpacingCommon = 0;
MIB_ssb_SubcarrierOffset = 0;
MIB_dmrs_TypeA_Position = 0; MIB_dmrs_TypeA_Position = 0;
pdcch_ConfigSIB1 = 0; pdcch_ConfigSIB1 = 0;
SIB1_frequencyOffsetSSB = 0; SIB1_frequencyOffsetSSB = 0;
...@@ -390,6 +391,13 @@ gNBs = ...@@ -390,6 +391,13 @@ gNBs =
Common_dci_Format2_3_monitoringPeriodicity = 0; Common_dci_Format2_3_monitoringPeriodicity = 0;
Common_dci_Format2_3_nrofPDCCH_Candidates = 0; Common_dci_Format2_3_nrofPDCCH_Candidates = 0;
ue_Specific__dci_Formats = 0; ue_Specific__dci_Formats = 0;
RateMatchPatternLTE_CRS_carrierFreqDL = 0;
RateMatchPatternLTE_CRS_carrierBandwidthDL = 0;
RateMatchPatternLTE_CRS_nrofCRS_Ports = 0;
RateMatchPatternLTE_CRS_v_Shift = 0;
RateMatchPatternLTE_CRS_radioframeAllocationPeriod = 0;
RateMatchPatternLTE_CRS_radioframeAllocationOffset = 0;
RateMatchPatternLTE_CRS_subframeAllocation_choice = 0;
} }
); );
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment