From 73cfa6bbb6017b1fdc73c620f4cfeeecc123dd22 Mon Sep 17 00:00:00 2001
From: WEI-TAI CHEN <kroempa@gmail.com>
Date: Thu, 14 Jun 2018 06:02:26 -0700
Subject: [PATCH] - Maintain The Configuration Module - Create task for GAB_APP
 and GAN_RRC - Create the NR FAPI for P5 interface - *It could be build, but
 still have a lot of warning need to maintain

---
 cmake_targets/CMakeLists.txt                  |   48 +-
 cmake_targets/tools/build_helper              |   11 +-
 cmake_targets/tools/generate_asn1             |   12 +-
 common/ran_context.h                          |   10 +-
 .../nfapi/public_inc/nfapi_nr_interface.h     |  273 ++
 .../nfapi/public_inc/nr_fapi_ue_interface.h   | 3886 ----------------
 .../nfapi/public_inc/nr_ue_fapi_interface.h   | 3887 ++++++++++++++++
 .../dlsch_llr_computation_avx2.c              | 4034 -----------------
 openair1/SIMULATION/ETH_TRANSPORT/extern.h    |    1 +
 openair2/COMMON/rrc_messages_def.h            |    1 +
 openair2/COMMON/rrc_messages_types.h          |    4 +-
 openair2/COMMON/tasks_def.h                   |    4 +
 .../NR_RRC_paramsvalues.h}                    |   32 +-
 openair2/{ENB_APP => GNB_APP}/gnb_app.c       |   30 +-
 openair2/{ENB_APP => GNB_APP}/gnb_app.h       |    0
 openair2/{ENB_APP => GNB_APP}/gnb_config.c    | 1140 +++--
 openair2/{ENB_APP => GNB_APP}/gnb_config.h    |   32 +-
 openair2/{ENB_APP => GNB_APP}/gnb_paramdef.h  |  664 ++-
 openair2/LAYER2/MAC/main.c                    |  154 +-
 openair2/LAYER2/NR_MAC_gNB/config.c           |  243 +
 openair2/LAYER2/NR_MAC_gNB/mac.h              |   96 +
 openair2/LAYER2/NR_MAC_gNB/mac_proto.h        |   22 +
 openair2/LAYER2/NR_MAC_gNB/main.c             |  124 +
 openair2/NR_PHY_INTERFACE/IF_Module.c         |  131 +
 openair2/NR_PHY_INTERFACE/IF_Module.h         |  139 +
 openair2/RRC/NR/MESSAGES/asn1_msg.c           |  894 ++--
 openair2/RRC/NR/MESSAGES/asn1_msg.h           |  196 +-
 .../{L2_interface_NR.c => NR_L2_interface.c}  |    0
 openair2/RRC/NR/defs_NR.h                     |  573 ---
 openair2/RRC/NR/nr_rrc_common.c               |   87 +
 openair2/RRC/NR/nr_rrc_defs.h                 |  333 ++
 .../RRC/NR/{extern_NR.h => nr_rrc_extern.h}   |    7 +-
 openair2/RRC/NR/nr_rrc_proto.h                |   45 +
 .../RRC/NR/{rrc_types_NR.h => nr_rrc_types.h} |    0
 openair2/RRC/NR/proto_NR.h                    |    0
 openair2/RRC/NR/rrc_gNB.c                     |  148 +-
 openair2/UTIL/LOG/log.h                       |    4 +
 targets/COMMON/create_nr_tasks.c              |  103 +
 targets/COMMON/create_nr_tasks.h              |   33 +
 targets/RT/USER/nr-softmodem.c                |    4 +-
 40 files changed, 7401 insertions(+), 10004 deletions(-)
 create mode 100644 nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface.h
 delete mode 100644 nfapi/open-nFAPI/nfapi/public_inc/nr_fapi_ue_interface.h
 create mode 100644 nfapi/open-nFAPI/nfapi/public_inc/nr_ue_fapi_interface.h
 delete mode 100644 openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation_avx2.c
 rename openair2/{ENB_APP/NRRRC_paramsvalues.h => GNB_APP/NR_RRC_paramsvalues.h} (83%)
 rename openair2/{ENB_APP => GNB_APP}/gnb_app.c (91%)
 rename openair2/{ENB_APP => GNB_APP}/gnb_app.h (100%)
 rename openair2/{ENB_APP => GNB_APP}/gnb_config.c (71%)
 rename openair2/{ENB_APP => GNB_APP}/gnb_config.h (83%)
 rename openair2/{ENB_APP => GNB_APP}/gnb_paramdef.h (71%)
 create mode 100644 openair2/LAYER2/NR_MAC_gNB/mac.h
 create mode 100644 openair2/LAYER2/NR_MAC_gNB/mac_proto.h
 create mode 100644 openair2/LAYER2/NR_MAC_gNB/main.c
 create mode 100644 openair2/NR_PHY_INTERFACE/IF_Module.c
 rename openair2/RRC/NR/{L2_interface_NR.c => NR_L2_interface.c} (100%)
 delete mode 100644 openair2/RRC/NR/defs_NR.h
 create mode 100644 openair2/RRC/NR/nr_rrc_common.c
 create mode 100644 openair2/RRC/NR/nr_rrc_defs.h
 rename openair2/RRC/NR/{extern_NR.h => nr_rrc_extern.h} (95%)
 create mode 100644 openair2/RRC/NR/nr_rrc_proto.h
 rename openair2/RRC/NR/{rrc_types_NR.h => nr_rrc_types.h} (100%)
 delete mode 100644 openair2/RRC/NR/proto_NR.h
 create mode 100644 targets/COMMON/create_nr_tasks.c
 create mode 100644 targets/COMMON/create_nr_tasks.h

diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt
index 99eacb373d..261b51e548 100644
--- a/cmake_targets/CMakeLists.txt
+++ b/cmake_targets/CMakeLists.txt
@@ -350,7 +350,7 @@ add_custom_command (
 add_list2_option(NR_RRC_ASN1_VERSION "NR_Rel15" "ASN.1 version of NR_RRC interface")
 
 if (${NR_RRC_ASN1_VERSION} STREQUAL "NR_Rel15")
-  set (NR_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-38331-f10.asn)
 endif  (${NR_RRC_ASN1_VERSION} STREQUAL "NR_Rel15")
 
 set (NR_RRC_FULL_DIR ${asn1_generated_dir}/${NR_RRC_ASN1_VERSION})
@@ -359,7 +359,7 @@ if(NOT EXISTS ${asn1c_call})
 message( FATAL_ERROR "The script ${asn1c_call} must be present" )
 endif(NOT EXISTS ${asn1c_call})
 
-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}")
+message("calling ASN1C_PREFIX=NR_ asn1c -findirect-choice -fcompound-names -fno-include-deps -gen-PER -no-gen-OER -no-gen-example -D ${RRC_FULL_DIR} ${RRC_GRAMMAR}")
 execute_process(COMMAND ${asn1c_call}  
 			${NR_RRC_FULL_DIR} 
 			${NR_RRC_GRAMMAR}
@@ -388,8 +388,10 @@ file(GLOB nr_rrc_source ${NR_RRC_FULL_DIR}/*.c)
 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_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}
-    ${OPENAIR2_DIR}/RRC/NR/MESSAGES/asn1_msg.c)
+add_library(NR_RRC_LIB 
+	    ${nr_rrc_h} 
+	    ${nr_rrc_source}
+            ${OPENAIR2_DIR}/RRC/NR/MESSAGES/asn1_msg.c)
 include_directories ("${NR_RRC_FULL_DIR}")
 
 # add the command to generate the source code
@@ -433,6 +435,7 @@ execute_process(COMMAND mkdir -p ${S1AP_C_DIR}
                 COMMAND env "ASN1C_PREFIX=S1AP_" asn1c -pdu=all -fcompound-names -fno-include-deps -gen-PER -no-gen-OER -no-gen-example -D ${S1AP_C_DIR} ${S1AP_ASN_DIR}/${S1AP_ASN_FILES}
                 RESULT_VARIABLE ret)
 
+
 if (NOT ${ret} STREQUAL 0)
   message(FATAL_ERROR "${ret}: error")
 endif (NOT ${ret} STREQUAL 0)
@@ -448,6 +451,7 @@ add_custom_command (
   DEPENDS ${S1AP_ASN_DIR}/${S1AP_ASN_FILES}
 )
 
+
 add_library(S1AP_LIB
   ${S1AP_source}
   ${S1AP_DIR}/s1ap_common.c
@@ -491,10 +495,19 @@ endif(${X2AP_VERSION} STREQUAL "R14")
 set(X2AP_ASN_DIR ${X2AP_DIR}/MESSAGES/ASN1/${ASN1RELDIR})
 
 set(X2AP_C_DIR ${asn1_generated_dir}/X2AP_${ASN1RELDIR})
+
 message("calling asn1c -fcompound-names -fno-include-deps -gen-PER -no-gen-OER -no-gen-example -D ${X2AP_C_DIR} ${X2AP_ASN_DIR}/${X2AP_ASN_FILES}")
+
 execute_process(COMMAND mkdir -p ${X2AP_C_DIR}
                 COMMAND env "ASN1C_PREFIX=X2AP_" asn1c -pdu=all -fcompound-names -fno-include-deps -gen-PER -no-gen-OER -no-gen-example -D ${X2AP_C_DIR} ${X2AP_ASN_DIR}/${X2AP_ASN_FILES}
                 RESULT_VARIABLE ret)
+
+#execute_process(COMMAND ${asn1c_call}  
+#			${X2AP_C_DIR} 
+#			${X2AP_ASN_DIR}/${X2AP_ASN_FILES}
+#			X2AP
+#                       RESULT_VARIABLE ret)
+
 if (NOT ${ret} STREQUAL 0)
   message(FATAL_ERROR "${asn1c_call}: error")
 endif (NOT ${ret} STREQUAL 0)
@@ -510,6 +523,13 @@ add_custom_command (
   DEPENDS ${X2AP_ASN_DIR}/${X2AP_ASN_FILES}
   )
 
+#add_custom_command (
+#  OUTPUT ${X2AP_C_DIR}/X2AP_asn_constant.h
+#  COMMAND ${asn1c_call} ${X2AP_C_DIR} ${X2AP_ASN_DIR}/${X2AP_ASN_FILES} X2AP
+#  COMMAND ${fix_asn1c_call} ${X2AP_C_DIR} X2AP ${X2AP_VERSION}
+#  DEPENDS ${X2AP_ASN_DIR}/${X2AP_ASN_FILES}
+#  )
+
 add_library(X2AP_LIB
   ${X2AP_source}
   ${X2AP_DIR}/x2ap_common.c
@@ -794,6 +814,7 @@ include_directories("${OPENAIR_DIR}/targets/ARCH/COMMON")
 include_directories("${OPENAIR_DIR}/targets/ARCH/EXMIMO/USERSPACE/LIB/")
 include_directories("${OPENAIR_DIR}/targets/ARCH/EXMIMO/DEFS")
 include_directories("${OPENAIR2_DIR}/ENB_APP")
+include_directories("${OPENAIR2_DIR}/GNB_APP")
 include_directories("${OPENAIR2_DIR}/ENB_APP/CONTROL_MODULES/MAC")
 include_directories("${OPENAIR2_DIR}/ENB_APP/CONTROL_MODULES/RRC")
 include_directories("${OPENAIR2_DIR}/ENB_APP/CONTROL_MODULES/PDCP")
@@ -1299,12 +1320,15 @@ add_library(PHY_RU ${PHY_SRC_RU})
 #Layer 2 library
 #####################
 set(MAC_DIR ${OPENAIR2_DIR}/LAYER2/MAC)
+set(NR_MAC_DIR ${OPENAIR2_DIR}/LAYER2/NR_MAC_gNB)
 set(PHY_INTERFACE_DIR ${OPENAIR2_DIR}/PHY_INTERFACE)
+set(NR_PHY_INTERFACE_DIR ${OPENAIR2_DIR}/NR_PHY_INTERFACE)
 set(RLC_DIR ${OPENAIR2_DIR}/LAYER2/RLC)
 set(RLC_UM_DIR ${OPENAIR2_DIR}/LAYER2/RLC/UM_v9.3.0)
 set(RLC_AM_DIR ${OPENAIR2_DIR}/LAYER2/RLC/AM_v9.3.0)
 set(RLC_TM_DIR ${OPENAIR2_DIR}/LAYER2/RLC/TM_v9.3.0)
 set(RRC_DIR ${OPENAIR2_DIR}/RRC/LTE)
+set(NR_RRC_DIR ${OPENAIR2_DIR}/RRC/NR)
 set(PDCP_DIR  ${OPENAIR2_DIR}/LAYER2/PDCP_v10.1.0)
 set(L2_SRC
   ${OPENAIR2_DIR}/LAYER2/openair2_proc.c
@@ -1350,6 +1374,8 @@ set(L2_SRC
   ${RRC_DIR}/L2_interface.c
   ${RRC_DIR}/L2_interface_common.c
   ${RRC_DIR}/L2_interface_ue.c
+  ${NR_RRC_DIR}/rrc_gNB.c
+  ${NR_RRC_DIR}/nr_rrc_common.c
   )
 
 set(L2_SRC_UE
@@ -1413,6 +1439,9 @@ set (MAC_SRC
   ${MAC_DIR}/pre_processor.c
   ${MAC_DIR}/config.c
   ${MAC_DIR}/config_ue.c
+  ${NR_PHY_INTERFACE_DIR}/IF_Module.c
+  ${NR_MAC_DIR}/main.c
+  ${NR_MAC_DIR}/config.c
  )
 
 set (MAC_SRC_UE
@@ -1430,10 +1459,16 @@ set (ENB_APP_SRC
   ${OPENAIR2_DIR}/ENB_APP/RRC_config_tools.c
   )
 
+set (GNB_APP_SRC
+  ${OPENAIR2_DIR}/GNB_APP/gnb_app.c
+  ${OPENAIR2_DIR}/GNB_APP/gnb_config.c
+  )
+
 add_library(L2
   ${L2_SRC}
   ${MAC_SRC}
-  ${ENB_APP_SRC})
+  ${ENB_APP_SRC}
+  ${GNB_APP_SRC})
 #  ${OPENAIR2_DIR}/RRC/L2_INTERFACE/openair_rrc_L2_interface.c)
 
 add_library(L2_UE
@@ -2124,6 +2159,7 @@ add_executable(nr-softmodem
   ${OPENAIR_TARGETS}/RT/USER/nr-softmodem.c
   ${OPENAIR1_DIR}/SIMULATION/TOOLS/taus.c
   ${OPENAIR_TARGETS}/COMMON/create_tasks.c
+  ${OPENAIR_TARGETS}/COMMON/create_nr_tasks.c
   ${OPENAIR_TARGETS}/ARCH/COMMON/common_lib.c
   ${OPENAIR2_DIR}/RRC/NAS/nas_config.c
   ${OPENAIR2_DIR}/RRC/NAS/rb_config.c
@@ -2142,7 +2178,7 @@ target_link_libraries (nr-softmodem
   -Wl,--start-group
   UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB SCHED_RU_LIB SCHED_NR_LIB PHY_NR PHY PHY_COMMON PHY_RU LFDS GTPV1U SECU_CN SECU_OSA
   ${ITTI_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${FLEXRAN_AGENT_LIB} LFDS7 ${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB}
-  RRC_LIB S1AP_LIB S1AP_ENB L2
+  RRC_LIB NR_RRC_LIB S1AP_LIB S1AP_ENB L2
   NFAPI_COMMON_LIB NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
   -Wl,--end-group z dl)
 
diff --git a/cmake_targets/tools/build_helper b/cmake_targets/tools/build_helper
index f0ae7e79c8..29687ca5e8 100755
--- a/cmake_targets/tools/build_helper
+++ b/cmake_targets/tools/build_helper
@@ -277,7 +277,7 @@ check_install_usrp_uhd_driver(){
         $SUDO apt-get -y --allow-unauthenticated install libuhd-dev libuhd003 uhd-host
     elif [[ "$OS_BASEDISTRO" == "fedora" ]]; then
         $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
             # 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
@@ -460,8 +460,8 @@ check_install_additional_tools (){
 
   #The packages below are already installed for Redhat distros (RHEL, CentOS, Fedora)
   if [[ "$OS_DISTRO" == "ubuntu" ]]; then
-    $SUDO pip install paramiko
-    $SUDO pip install pyroute2 colorama
+    $SUDO -H pip install paramiko
+    $SUDO -H pip install pyroute2 colorama
     log_netiface=$OPENAIR_DIR/cmake_targets/log/netiface_install_log.txt
     echo_info "Installing Netinterfaces package. The logfile for installation is in $log_netiface"
     (
@@ -659,10 +659,9 @@ install_asn1c_from_source(){
     echo_info "\nInstalling ASN1. The log file for ASN1 installation is here: $asn1_install_log "
     (
     $SUDO rm -rf /tmp/asn1c
-    # GIT_SSL_NO_VERIFY=true git clone https://gitlab.eurecom.fr/oai/asn1c.git /tmp/asn1c
-    git clone https://github.com/velichkov/asn1c /tmp/asn1c
+    git clone https://github.com/brchiu/asn1c /tmp/asn1c
     cd /tmp/asn1c
-    git checkout s1ap
+    git checkout velichkov_s1ap_plus_option_group
     test -f configure || autoreconf -iv
     ./configure
     make -j`nproc`
diff --git a/cmake_targets/tools/generate_asn1 b/cmake_targets/tools/generate_asn1
index fb38455a12..b53a14114b 100755
--- a/cmake_targets/tools/generate_asn1
+++ b/cmake_targets/tools/generate_asn1
@@ -107,12 +107,16 @@ case "$module" in
   ;;
   NR_RRC )
     	export ASN1C_PREFIX=NR_
-  	asn1c -gen-PER -fcompound-names -no-gen-example fixed_grammar.asn 2>&1 | grep -v -- '->' | grep -v '^Compiled' |grep -v sample	
+  	asn1c -gen-PER -fcompound-names -findirect-choice -no-gen-example fixed_grammar.asn 2>&1 | grep -v -- '->' | grep -v '^Compiled' |grep -v sample	
   ;;
   S1AP )
 	export ASN1C_PREFIX=S1AP_
   	asn1c -gen-PER -fcompound-names -no-gen-example fixed_grammar.asn 2>&1 | grep -v -- '->' | grep -v '^Compiled' |grep -v sample	
   ;;
+  X2AP )
+	export ASN1C_PREFIX=X2AP_
+  	asn1c -gen-PER -fcompound-names -no-gen-example fixed_grammar.asn 2>&1 | grep -v -- '->' | grep -v '^Compiled' |grep -v sample	
+  ;;
 esac
 
 
@@ -129,12 +133,16 @@ case "$module" in
   ;; 
   NR_RRC )
     	export ASN1C_PREFIX=NR_
-  	asn1c -fcompound-names -fno-include-deps -gen-PER -no-gen-OER -no-gen-example $* 2>&1 | grep -v -- '->' | grep -v '^Compiled' |grep -v sample	
+  	asn1c -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example $* 2>&1 | grep -v -- '->' | grep -v '^Compiled' |grep -v sample	
   ;;
   S1AP )
     	export ASN1C_PREFIX=S1AP_
     	asn1c -fcompound-names -fno-include-deps -gen-PER -no-gen-OER -no-gen-example $* 2>&1 | grep -v -- '->' | grep -v '^Compiled' |grep -v sample	
   ;;
+  X2AP )
+    	export ASN1C_PREFIX=X2AP_
+    	asn1c -fcompound-names -fno-include-deps -gen-PER -no-gen-OER -no-gen-example $* 2>&1 | grep -v -- '->' | grep -v '^Compiled' |grep -v sample	
+  ;;
 esac
 
 fi
diff --git a/common/ran_context.h b/common/ran_context.h
index a090ba1109..14db3056d3 100644
--- a/common/ran_context.h
+++ b/common/ran_context.h
@@ -50,7 +50,7 @@
 #include "PHY/defs_L1_NB_IoT.h"
 
 #include "RRC/LTE/defs_NB_IoT.h"
-#include "RRC/NR/defs_NR.h"
+#include "RRC/NR/nr_rrc_defs.h"
 
 typedef struct {
   /// RAN context config file name
@@ -69,14 +69,20 @@ typedef struct {
   int nb_macrlc_inst;
   /// Number of NB_IoT MACRLC instances in this node
   int nb_nb_iot_macrlc_inst;
+  /// Number of NR MACRLC instances in this node
+  int nb_nr_macrlc_inst;
   /// Number of component carriers per instance in this node
   int *nb_mac_CC;
   /// Number of L1 instances in this node
   int nb_L1_inst;
   /// Number of NB_IoT L1 instances in this node
   int nb_nb_iot_L1_inst;
+  /// Number of NR L1 instances in this node
+  int nb_nr_L1_inst;  
   /// Number of Component Carriers per instance in this node
   int *nb_L1_CC;
+  /// Number of NR Component Carriers per instance in this node
+  int *nb_nr_L1_CC;
   /// Number of RU instances in this node
   int nb_RU;
   /// FlexRAN context variables
@@ -97,6 +103,8 @@ typedef struct {
   struct eNB_MAC_INST_s **mac;
   /// NB_IoT MAC context variables
   struct eNB_MAC_INST_NB_IoT_s **nb_iot_mac;
+  /// NR MAC context variables
+  struct gNB_MAC_INST_s **nrmac;
   /// GTPu descriptor 
   gtpv1u_data_t *gtpv1u_data_g;
   /// RU descriptors. These describe what each radio unit is supposed to do and contain the necessary functions for fronthaul interfaces
diff --git a/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface.h b/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface.h
new file mode 100644
index 0000000000..fc35bc7619
--- /dev/null
+++ b/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface.h
@@ -0,0 +1,273 @@
+#ifndef _NFAPI_INTERFACE_NR_H_
+#define _NFAPI_INTERFACE_NR_H_
+
+#include "nfapi_interface.h"
+
+//These TLVs are used exclusively by nFAPI
+typedef struct
+{
+  // These TLVs are used to setup the transport connection between VNF and PNF
+  // nfapi_ipv4_address_t p7_vnf_address_ipv4;
+  // nfapi_ipv6_address_t p7_vnf_address_ipv6;
+  // nfapi_uint16_tlv_t p7_vnf_port;
+
+  // nfapi_ipv4_address_t p7_pnf_address_ipv4;
+  // nfapi_ipv6_address_t p7_pnf_address_ipv6;
+  // nfapi_uint16_tlv_t p7_pnf_port;
+  
+  // // These TLVs are used to setup the transport connection between VNF and PNF
+  // nfapi_uint8_tlv_t dl_ue_per_sf;
+  // nfapi_uint8_tlv_t ul_ue_per_sf;
+
+  // These TLVs are used by PNF to report its RF capabilities to the VNF software
+  nfapi_rf_bands_t rf_bands;
+
+  // These TLVs are used by the VNF to configure the synchronization with the PNF.
+  // nfapi_uint8_tlv_t timing_window;
+  // nfapi_uint8_tlv_t timing_info_mode;
+  // nfapi_uint8_tlv_t timing_info_period;
+
+  // 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_nmm_frequency_bands_t nmm_gsm_frequency_bands;
+  // nfapi_nmm_frequency_bands_t nmm_umts_frequency_bands;
+  // nfapi_nmm_frequency_bands_t nmm_lte_frequency_bands;
+  // nfapi_uint8_tlv_t nmm_uplink_rssi_supported;
+
+} nfapi_nr_nfapi_t;
+
+#define NFAPI_NR_NFAPI_P7_VNF_ADDRESS_IPV4_TAG 0x5100
+#define NFAPI_NR_NFAPI_P7_VNF_ADDRESS_IPV6_TAG 0x5101
+#define NFAPI_NR_NFAPI_P7_VNF_PORT_TAG 0x5102
+#define NFAPI_NR_NFAPI_P7_PNF_ADDRESS_IPV4_TAG 0x5103
+#define NFAPI_NR_NFAPI_P7_PNF_ADDRESS_IPV6_TAG 0x5104
+#define NFAPI_NR_NFAPI_P7_PNF_PORT_TAG 0x5105
+
+#define NFAPI_NR_NFAPI_DOWNLINK_UES_PER_SUBFRAME_TAG 0x510A
+#define NFAPI_NR_NFAPI_UPLINK_UES_PER_SUBFRAME_TAG 0x510B
+#define NFAPI_NR_NFAPI_RF_BANDS_TAG 0x5114
+#define NFAPI_NR_NFAPI_TIMING_WINDOW_TAG 0x511E
+#define NFAPI_NR_NFAPI_TIMING_INFO_MODE_TAG 0x511F
+#define NFAPI_NR_NFAPI_TIMING_INFO_PERIOD_TAG 0x5120
+#define NFAPI_NR_NFAPI_MAXIMUM_TRANSMIT_POWER_TAG 0x5128
+#define NFAPI_NR_NFAPI_EARFCN_TAG 0x5129
+#define NFAPI_NR_NFAPI_NMM_GSM_FREQUENCY_BANDS_TAG 0x5130
+#define NFAPI_NR_NFAPI_NMM_UMTS_FREQUENCY_BANDS_TAG 0x5131
+#define NFAPI_NR_NFAPI_NMM_LTE_FREQUENCY_BANDS_TAG 0x5132
+#define NFAPI_NR_NFAPI_NMM_UPLINK_RSSI_SUPPORTED_TAG 0x5133
+
+// P5 Message Structures
+typedef struct {
+  nfapi_uint16_tlv_t  numerology_index_mu;
+  nfapi_uint16_tlv_t  duplex_mode;
+} nfapi_nr_subframe_config_t;
+
+#define NFAPI_NR_SUBFRAME_CONFIG_DUPLEX_MODE_TAG 0x5001
+#define NFAPI_NR_SUBFRAME_CONFIG_PCFICH_POWER_OFFSET_TAG 0x5002
+#define NFAPI_NR_SUBFRAME_CONFIG_PB_TAG 0x5003
+#define NFAPI_NR_SUBFRAME_CONFIG_DL_CYCLIC_PREFIX_TYPE_TAG 0x5004
+#define NFAPI_NR_SUBFRAME_CONFIG_UL_CYCLIC_PREFIX_TYPE_TAG 0x5005
+#define NFAPI_NR_SUBFRAME_CONFIG_NUMEROLOGY_INDEX_MU_TAG 0x5006
+
+typedef struct {
+  nfapi_uint16_tlv_t  tx_antenna_ports;
+  nfapi_uint16_tlv_t  rx_antenna_ports;
+} nfapi_nr_rf_config_t;
+
+#define NFAPI_NR_RF_CONFIG_DL_CHANNEL_BANDWIDTH_TAG 0x500A
+#define NFAPI_NR_RF_CONFIG_UL_CHANNEL_BANDWIDTH_TAG 0x500B
+#define NFAPI_NR_RF_CONFIG_REFERENCE_SIGNAL_POWER_TAG 0x500C
+#define NFAPI_NR_RF_CONFIG_TX_ANTENNA_PORTS_TAG 0x500D
+#define NFAPI_NR_RF_CONFIG_RX_ANTENNA_PORTS_TAG 0x500E
+
+typedef struct {
+  nfapi_uint16_tlv_t  physical_cell_id;
+  nfapi_uint16_tlv_t  half_frame_index;
+  nfapi_uint16_tlv_t  ssb_subcarrier_offset;
+  nfapi_uint16_tlv_t  ssb_position_in_burst;
+  nfapi_uint16_tlv_t  ssb_periodicity;
+  nfapi_uint16_tlv_t  ss_pbch_block_power;
+  nfapi_uint16_tlv_t  n_ssb_crb;
+} nfapi_nr_sch_config_t;
+
+#define NFAPI_NR_SCH_CONFIG_PHYSICAL_CELL_ID_TAG 0x501E
+#define NFAPI_NR_SCH_CONFIG_HALF_FRAME_INDEX_TAG 0x501F
+#define NFAPI_NR_SCH_CONFIG_SSB_SUBCARRIER_OFFSET_TAG 0x5020
+#define NFAPI_NR_SCH_CONFIG_SSB_POSITION_IN_BURST 0x5021
+#define NFAPI_NR_SCH_CONFIG_SSB_PERIODICITY 0x5022
+#define NFAPI_NR_SCH_CONFIG_SS_PBCH_BLOCK_POWER 0x5023
+#define NFAPI_NR_SCH_CONFIG_N_SSB_CRB 0x5024
+
+
+typedef struct {
+  nfapi_uint16_tlv_t  prach_RootSequenceIndex;                                        ///// L1 parameter 'PRACHRootSequenceIndex'
+  nfapi_uint16_tlv_t  prach_msg1_SubcarrierSpacing;                                   ///// L1 parameter 'prach-Msg1SubcarrierSpacing'
+  nfapi_uint16_tlv_t  restrictedSetConfig;
+  nfapi_uint16_tlv_t  msg3_transformPrecoding;                                        ///// L1 parameter 'msg3-tp'
+  /////////////////--------------------NR RACH-ConfigGeneric--------------------/////////////////
+  nfapi_uint16_tlv_t  prach_ConfigurationIndex;                                       ///// L1 parameter 'PRACHConfigurationIndex'
+  nfapi_uint16_tlv_t  prach_msg1_FDM;                                                 ///// L1 parameter 'prach-FDM'
+  nfapi_uint16_tlv_t  prach_msg1_FrequencyStart;                                      ///// L1 parameter 'prach-frequency-start'
+  nfapi_uint16_tlv_t  zeroCorrelationZoneConfig;
+  nfapi_uint16_tlv_t  preambleReceivedTargetPower;
+} nfapi_nr_rach_config_t;
+
+typedef struct {
+  //NR FrequencyInfoDL
+  nfapi_uint16_tlv_t  absoluteFrequencySSB;
+  nfapi_uint16_tlv_t  ssb_SubcarrierOffset;                                           ///// L1 parameter 'kssb'
+  nfapi_uint16_tlv_t  DL_FreqBandIndicatorNR;
+  nfapi_uint16_tlv_t  DL_absoluteFrequencyPointA;                                     ///// L1 parameter 'offset-ref-low-scs-ref-PRB'
+  //NR DL SCS-SpecificCarrier  ///// L1 parameter 'offset-pointA-set'
+  nfapi_uint16_tlv_t  DL_offsetToCarrier;                                             ///// L1 parameter 'offset-pointA-low-scs '
+  nfapi_uint16_tlv_t  DL_SCS_SubcarrierSpacing;                                       ///// L1 parameter 'ref-scs'
+  nfapi_uint16_tlv_t  DL_SCS_SpecificCarrier_k0;                                      ///// L1 parameter 'k0'
+  nfapi_uint16_tlv_t  DL_carrierBandwidth;                                            ///// L1 parameter 'BW'
+} nfapi_nr_dl_frequencyinfo_t;
+
+typedef struct {
+  //NR BWP-DownlinkCommon
+  nfapi_uint16_tlv_t  DL_locationAndBandwidth;                                        ///// L1 parameter 'DL-BWP-loc'
+  nfapi_uint16_tlv_t  DL_BWP_SubcarrierSpacing;                                       ///// Corresponds to subcarrier spacing according to 38.211, Table 4.2-1
+  nfapi_uint16_tlv_t  DL_BWP_prefix_type;
+} nfapi_nr_bwp_dl_t;
+
+typedef struct {
+  //NR FrequencyInfoUL
+  nfapi_uint16_tlv_t  UL_FreqBandIndicatorNR;
+  nfapi_uint16_tlv_t  UL_absoluteFrequencyPointA;                                     ///// L1 parameter 'offset-ref-low-scs-ref-PRB'
+  nfapi_uint16_tlv_t  UL_additionalSpectrumEmission;
+  nfapi_uint16_tlv_t  UL_p_Max;
+  nfapi_uint16_tlv_t  UL_frequencyShift7p5khz;
+  //NR UL SCS-SpecificCarrier    ///// L1 parameter 'offset-pointA-set'
+  nfapi_uint16_tlv_t  UL_offsetToCarrier;                                             ///// L1 parameter 'offset-pointA-low-scs '
+  nfapi_uint16_tlv_t  UL_SCS_SubcarrierSpacing;                                       ///// L1 parameter 'ref-scs'
+  nfapi_uint16_tlv_t  UL_SCS_SpecificCarrier_k0;                                      ///// L1 parameter 'k0'
+  nfapi_uint16_tlv_t  UL_carrierBandwidth;                                            ///// L1 parameter 'BW'
+} nfapi_nr_ul_frequencyinfo_t;
+
+typedef struct {
+  //NR BWP-UplinkCommon          ///// L1 parameter 'initial-UL-BWP'
+  nfapi_uint16_tlv_t  UL_locationAndBandwidth;                                        ///// L1 parameter 'DL-BWP-loc'
+  nfapi_uint16_tlv_t  UL_BWP_SubcarrierSpacing;                                       ///// Corresponds to subcarrier spacing according to 38.211, Table 4.2-1
+  nfapi_uint16_tlv_t  UL_BWP_prefix_type;
+} nfapi_nr_bwp_ul_t;
+
+typedef struct {
+  nfapi_uint16_tlv_t  groupHoppingEnabledTransformPrecoding;                          ///// L1 parameter 'Group-hopping-enabled-Transform-precoding'
+  nfapi_uint16_tlv_t  msg3_DeltaPreamble;                                             ///// L1 parameter 'Delta-preamble-msg3' 
+  nfapi_uint16_tlv_t  p0_NominalWithGrant;                                            ///// L1 parameter 'p0-nominal-pusch-withgrant'
+  nfapi_uint16_tlv_t  TimeDomainResourceAllocation_k2;                                ///// L1 parameter 'K2' 
+  nfapi_uint16_tlv_t  TimeDomainResourceAllocation_mappingType;                       ///// L1 parameter 'Mapping-type'
+} nfapi_nr_pusch_config_t;
+
+typedef struct {
+  nfapi_uint16_tlv_t  pucch_GroupHopping;                                             ///// L1 parameter 'PUCCH-GroupHopping' 
+  nfapi_uint16_tlv_t  p0_nominal;                                                     ///// L1 parameter 'p0-nominal-pucch'
+} nfapi_nr_pucch_config_t;
+
+typedef struct {
+  nfapi_uint16_tlv_t  TimeDomainResourceAllocation_k0;                                ///// L1 parameter 'K0'
+  nfapi_uint16_tlv_t  TimeDomainResourceAllocation_mappingType;                       ///// L1 parameter 'Mapping-type'
+} nfapi_nr_pdsch_config_t;
+
+typedef struct {
+  nfapi_uint16_tlv_t  searchSpaceSIB1;                                                ///// L1 parameter 'rmsi-SearchSpace'
+  nfapi_uint16_tlv_t  searchSpaceOtherSystemInformation;                              ///// L1 parameter 'osi-SearchSpace'
+  nfapi_uint16_tlv_t  pagingSearchSpace;                                              ///// L1 parameter 'paging-SearchSpace'
+  nfapi_uint16_tlv_t  ra_SearchSpace;                                                 ///// L1 parameter 'ra-SearchSpace'
+  nfapi_uint16_tlv_t  rach_ra_ControlResourceSet;                                     ///// L1 parameter 'rach-coreset-configuration'
+  nfapi_uint16_tlv_t  common_controlResourceSetId;                                    ///// L1 parameter 'CORESET-ID
+  nfapi_uint16_tlv_t  common_ControlResourceSet_duration;                             ///// L1 parameter 'CORESET-time-duration'
+  nfapi_uint16_tlv_t  cce_REG_MappingType;                                            ///// L1 parameter 'CORESET-CCE-REG-mapping-type'
+  nfapi_uint16_tlv_t  reg_BundleSize;                                                 ///// L1 parameter 'CORESET-REG-bundle-size'
+  nfapi_uint16_tlv_t  interleaverSize;                                                ///// L1 parameter 'CORESET-interleaver-size'
+  nfapi_uint16_tlv_t  shiftIndex;                                                     ///// L1 parameter 'CORESET-shift-index'
+  nfapi_uint16_tlv_t  precoderGranularity;                                            ///// L1 parameter 'CORESET-precoder-granuality'
+  nfapi_uint16_tlv_t  TCI_StateId;                                                    ///// L1 parameter 'TCI-StatesPDCCH'
+  nfapi_uint16_tlv_t  tci_PresentInDCI;                                               ///// L1 parameter 'TCI-PresentInDCI'
+  nfapi_uint16_tlv_t  SearchSpaceId;
+  nfapi_uint16_tlv_t  commonSearchSpaces_controlResourceSetId;
+  nfapi_uint16_tlv_t  SearchSpace_monitoringSlotPeriodicityAndOffset;                 ///// L1 parameters 'Montoring-periodicity-PDCCH-slot'
+  nfapi_uint16_tlv_t  SearchSpace_nrofCandidates_aggregationLevel1;                   ///// L1 parameter 'Aggregation-level-1'
+  nfapi_uint16_tlv_t  SearchSpace_nrofCandidates_aggregationLevel2;                   ///// L1 parameter 'Aggregation-level-2'
+  nfapi_uint16_tlv_t  SearchSpace_nrofCandidates_aggregationLevel4;                   ///// L1 parameter 'Aggregation-level-4'
+  nfapi_uint16_tlv_t  SearchSpace_nrofCandidates_aggregationLevel8;                   ///// L1 parameter 'Aggregation-level-8'
+  nfapi_uint16_tlv_t  SearchSpace_nrofCandidates_aggregationLevel16;                  ///// L1 parameter 'Aggregation-level-16'
+  nfapi_uint16_tlv_t  Common_dci_Format2_0_nrofCandidates_SFI_And_aggregationLevel;   ///// L1 parameters 'SFI-Num-PDCCH-cand' and 'SFI-Aggregation-Level'
+  nfapi_uint16_tlv_t  Common_dci_Format2_3_monitoringPeriodicity;                     ///// L1 parameter 'SRS-monitoring-periodicity'
+  nfapi_uint16_tlv_t  Common_dci_Format2_3_nrofPDCCH_Candidates;                      ///// L1 parameter 'SRS-Num-PDCCH-cand'
+  nfapi_uint16_tlv_t  ue_Specific__dci_Formats;
+} nfapi_nr_pdcch_config_t;
+
+typedef struct {
+  nfapi_uint16_tlv_t  ssb_PositionsInBurst_PR;                                        ///// L1 parameter 'SSB-Transmitted
+  nfapi_uint16_tlv_t  ssb_periodicityServingCell;
+  nfapi_uint16_tlv_t  dmrs_TypeA_Position;                                            ///// Position of (first) DL DM-RS
+  nfapi_uint16_tlv_t  NIA_SubcarrierSpacing;                                          ///// Used only for non-initial access (e.g. SCells, PCell of SCG)   
+  nfapi_uint16_tlv_t  ss_PBCH_BlockPower;
+} nfapi_nr_servingcellconfigcommon_t;
+
+typedef struct {
+//NR TDD-UL-DL-ConfigCommon                ///// L1 parameter 'UL-DL-configuration-common'
+  nfapi_uint16_tlv_t  referenceSubcarrierSpacing;                                     ///// L1 parameter 'reference-SCS'
+  nfapi_uint16_tlv_t  dl_UL_TransmissionPeriodicity;                                  ///// L1 parameter 'DL-UL-transmission-periodicity'
+  nfapi_uint16_tlv_t  nrofDownlinkSlots;                                              ///// L1 parameter 'number-of-DL-slots'
+  nfapi_uint16_tlv_t  nrofDownlinkSymbols;                                            ///// L1 parameter 'number-of-DL-symbols-common'
+  nfapi_uint16_tlv_t  nrofUplinkSlots;                                                ///// L1 parameter 'number-of-UL-slots'
+  nfapi_uint16_tlv_t  nrofUplinkSymbols;                                              ///// L1 parameter 'number-of-UL-symbols-common'
+} nfapi_nr_tdd_ul_dl_config_t;
+
+
+typedef struct {
+ //RateMatchPattern  is used to configure one rate matching pattern for PDSCH    ///// L1 parameter 'Resource-set-cekk'             
+  nfapi_uint16_tlv_t  rateMatchPatternId;
+  nfapi_uint16_tlv_t  RateMatchPattern_patternType;
+  nfapi_uint16_tlv_t  symbolsInResourceBlock;                                          ///// L1 parameter 'rate-match-PDSCH-bitmap2
+  nfapi_uint16_tlv_t  periodicityAndPattern;                                           ///// L1 parameter 'rate-match-PDSCH-bitmap3'
+  nfapi_uint16_tlv_t  RateMatchPattern_controlResourceSet;
+  nfapi_uint16_tlv_t  RateMatchPattern_subcarrierSpacing;                              ///// L1 parameter 'resource-pattern-scs'
+  nfapi_uint16_tlv_t  RateMatchPattern_mode; 
+} nfapi_nr_ratematchpattern_t;
+
+typedef struct {
+  //NR  RateMatchPatternLTE-CRS
+  nfapi_uint16_tlv_t  RateMatchPatternLTE_CRS_carrierFreqDL;                           ///// L1 parameter 'center-subcarrier-location'
+  nfapi_uint16_tlv_t  RateMatchPatternLTE_CRS_carrierBandwidthDL;                      ///// L1 parameter 'BW'
+  nfapi_uint16_tlv_t  RateMatchPatternLTE_CRS_nrofCRS_Ports;                           ///// L1 parameter 'rate-match-resources-numb-LTE-CRS-antenna-port'
+  nfapi_uint16_tlv_t  RateMatchPatternLTE_CRS_v_Shift;                                 ///// L1 parameter 'rate-match-resources-LTE-CRS-v-shift'
+  nfapi_uint16_tlv_t  RateMatchPatternLTE_CRS_radioframeAllocationPeriod;
+  nfapi_uint16_tlv_t  RateMatchPatternLTE_CRS_radioframeAllocationOffset;
+  nfapi_uint16_tlv_t  RateMatchPatternLTE_CRS_subframeAllocation_choice;
+} nfapi_nr_ratematchpattern_lte_crs_t;
+
+
+
+
+typedef struct {
+  nfapi_p4_p5_message_header_t              header;
+  uint8_t num_tlv;
+  nfapi_nr_subframe_config_t                subframe_config;
+  nfapi_nr_rf_config_t                      rf_config;
+  nfapi_nr_sch_config_t                     sch_config;
+  nfapi_nr_rach_config_t                    rach_config;
+  nfapi_nr_dl_frequencyinfo_t               dl_frequencyinfo;
+  nfapi_nr_bwp_dl_t                         bwp_dl;
+  nfapi_nr_ul_frequencyinfo_t               ul_frequencyinfo;
+  nfapi_nr_bwp_ul_t                         bwp_ul;
+  nfapi_nr_pusch_config_t                   pusch_config;
+  nfapi_nr_pucch_config_t                   pucch_config;
+  nfapi_nr_pdsch_config_t                   pdsch_config;
+  nfapi_nr_pucch_config_t                   pdcch_config;
+  nfapi_nr_servingcellconfigcommon_t        servingcellconfigcommon;
+  nfapi_nr_tdd_ul_dl_config_t               tdd_ul_dl_config;
+  nfapi_nr_ratematchpattern_t               ratematchpattern;
+  nfapi_nr_ratematchpattern_lte_crs_t       ratematchpattern_lte_crs;
+  nfapi_nr_nfapi_t                          nfapi_config;
+
+  nfapi_vendor_extension_tlv_t              vendor_extension;
+} nfapi_nr_config_request_t;
+
+#endif
\ No newline at end of file
diff --git a/nfapi/open-nFAPI/nfapi/public_inc/nr_fapi_ue_interface.h b/nfapi/open-nFAPI/nfapi/public_inc/nr_fapi_ue_interface.h
deleted file mode 100644
index fcfb7e7b25..0000000000
--- a/nfapi/open-nFAPI/nfapi/public_inc/nr_fapi_ue_interface.h
+++ /dev/null
@@ -1,3886 +0,0 @@
-/*
- * Copyright 2017 Cisco Systems, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
- *
- * 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.
- */
-
-
-#ifndef _NFAPI_INTERFACE_NR_EXTENSION_H_
-#define _NFAPI_INTERFACE_NR_EXTENSION_H_
-#define _NFAPI_INTERFACE_H_
-
-#include "stddef.h"
-
-// Constants - update based on implementation
-#define NFAPI_MAX_PHY_RF_INSTANCES 2
-#define NFAPI_PNF_PARAM_GENERAL_LOCATION_LENGTH 16
-#define NFAPI_PNF_PARAM_GENERAL_OUI_LENGTH 3
-#define NFAPI_MAX_NUM_RF_BANDS 16
-
-// The following definition control the size of arrays used in the interface.
-// These may be changed if desired. They are used in the encoder to make sure 
-// that the user has not specified a 'count' larger than the max array, and also
-// used by the decoder when decode an array. If the 'count' received is larger
-// than the array it is to be stored in the decode fails.
-#define NFAPI_MAX_NUM_ANTENNAS 8
-#define NFAPI_MAX_NUM_SUBBANDS 13
-#define NFAPI_MAX_BF_VECTORS 8
-#define NFAPI_MAX_CC 1
-#define NFAPI_MAX_NUM_PHYSICAL_ANTENNAS 8
-#define NFAPI_MAX_RSSI 8
-#define NFAPI_MAX_PSC_LIST 32
-#define NFAPI_MAX_PCI_LIST 32
-#define NFAPI_MAX_CARRIER_LIST 32
-#define NFAPI_MAX_ARFCN_LIST 128
-#define NFAPI_MAX_LTE_CELLS_FOUND 8
-#define NFAPI_MAX_UTRAN_CELLS_FOUND 8
-#define NFAPI_MAX_GSM_CELLS_FOUND 8
-#define NFAPI_MAX_NB_IOT_CELLS_FOUND 8
-#define NFAPI_MAX_SI_PERIODICITY 8
-#define NFAPI_MAX_SI_INDEX 8
-#define NFAPI_MAX_MIB_LENGTH 32
-#define NFAPI_MAX_SIB_LENGTH 256
-#define NFAPI_MAX_SI_LENGTH 256
-#define NFAPI_MAX_OPAQUE_DATA 64
-#define NFAPI_MAX_NUM_SCHEDULED_UES 8 // Used in the TPM structure
-#define NFAPI_MAX_PNF_PHY 5
-#define NFAPI_MAX_PNF_PHY_RF_CONFIG 5
-#define NFAPI_MAX_PNF_RF  5
-#define NFAPI_MAX_NMM_FREQUENCY_BANDS 32
-#define NFAPI_MAX_RECEIVED_INTERFERENCE_POWER_RESULTS 100
-#define NFAPI_MAX_UL_DL_CONFIGURATIONS 5
-#define NFAPI_MAX_CSI_RS_RESOURCE_CONFIG 4
-#define NFAPI_MAX_ANTENNA_PORT_COUNT 8
-#define NFAPI_MAX_EPDCCH_PRB 8
-#define NFAPI_MAX_TX_PHYSICAL_ANTENNA_PORTS 8
-#define NFAPI_MAX_NUMBER_ACK_NACK_TDD 8
-#define NFAPI_MAX_RO_DL 8
-
-#define NFAPI_HEADER_LENGTH 8
-#define NFAPI_P7_HEADER_LENGTH 16
-
-#define NFAPI_VENDOR_EXTENSION_MIN_TAG_VALUE 0xF000
-#define NFAPI_VENDOR_EXTENSION_MAX_TAG_VALUE 0xFFFF
-
-#define NFAPI_VERSION_3_0_11	0x000
-#define NFAPI_VERSION_3_0_12    0x001
-
-// The IANA agreed port definition of the P5 SCTP VNF enpoint 
-// http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml?search=7701
-#define NFAPI_P5_SCTP_PORT		7701
-
-typedef unsigned int	uint32_t;
-typedef unsigned short	uint16_t;
-typedef unsigned char	uint8_t;
-typedef signed int		int32_t;
-typedef signed short	int16_t;
-typedef signed char		int8_t;
-
-typedef struct {
-	uint16_t phy_id;
-	uint16_t message_id;
-	uint16_t message_length;
-	uint16_t spare;
-} nfapi_p4_p5_message_header_t;
-
-typedef struct {
-	uint16_t phy_id;
-	uint16_t message_id;
-	uint16_t message_length;
-	uint16_t m_segment_sequence; /* This consists of 3 fields - namely, M, Segement & Sequence number*/
-	uint32_t checksum;
-	uint32_t transmit_timestamp;
-} nfapi_p7_message_header_t;
-
-#define NFAPI_PHY_ID_NA 0
-
-//#define NFAPI_P7_GET_MORE(_mss) ( ((_mss) & 0x80) >> 7 )
-//#define NFAPI_P7_GET_SEGMENT(_mss) ( ((_mss) & 0x70) >> 4 )
-#define NFAPI_P7_GET_MORE(_mss) ( ((_mss) & 0x8000) >> 15 )
-#define NFAPI_P7_GET_SEGMENT(_mss) ( ((_mss) & 0x7F00) >> 8 )
-#define NFAPI_P7_GET_SEQUENCE(_mss) ( (_mss) & 0x00FF )
-#define NFAPI_P7_SET_MSS(_more, _segm, _sequ) ( (((_more) & 0x1) << 7) | (((_segm) & 0x7) << 4) | ((_sequ) & 0xF) )
-
-typedef struct {
-	uint16_t tag;
-	uint16_t length;
-} nfapi_tl_t;
-#define NFAPI_TAG_LENGTH_PACKED_LEN 4
-
-// Convenience methods to convert between SFN/SFN formats
-#define NFAPI_SFNSF2DEC(_sfnsf) ((((_sfnsf) >> 4) * 10) + ((_sfnsf) & 0xF))
-#define NFAPI_SFNSFDEC2SFNSF(_sfnsf_dec) ((((_sfnsf_dec) / 10) << 4) | (((_sfnsf_dec) - (((_sfnsf_dec) / 10) * 10)) & 0xF))
-
-#define NFAPI_SFNSF2SFN(_sfnsf) ((_sfnsf) >> 4)
-#define NFAPI_SFNSF2SF(_sfnsf) ((_sfnsf) & 0xF)
-
-#define NFAPI_MAX_SFNSFDEC 10240
-
-typedef nfapi_tl_t* nfapi_vendor_extension_tlv_t;
-
-
-// nFAPI Message IDs
-typedef enum {
-	NFAPI_DL_CONFIG_REQUEST = 0x0080,
-	NFAPI_UL_CONFIG_REQUEST,
-	NFAPI_SUBFRAME_INDICATION,
-	NFAPI_HI_DCI0_REQUEST,
-	NFAPI_TX_REQUEST,
-	NFAPI_HARQ_INDICATION,
-	NFAPI_CRC_INDICATION,
-	NFAPI_RX_ULSCH_INDICATION,
-	NFAPI_RACH_INDICATION,
-	NFAPI_SRS_INDICATION,
-	NFAPI_RX_SR_INDICATION,
-	NFAPI_RX_CQI_INDICATION,
-	NFAPI_LBT_DL_CONFIG_REQUEST,
-	NFAPI_LBT_DL_INDICATION,
-	NFAPI_NB_HARQ_INDICATION,
-	NFAPI_NRACH_INDICATION,
-
-	NFAPI_PNF_PARAM_REQUEST = 0x0100,
-	NFAPI_PNF_PARAM_RESPONSE,
-	NFAPI_PNF_CONFIG_REQUEST,
-	NFAPI_PNF_CONFIG_RESPONSE,
-	NFAPI_PNF_START_REQUEST,
-	NFAPI_PNF_START_RESPONSE,
-	NFAPI_PNF_STOP_REQUEST,
-	NFAPI_PNF_STOP_RESPONSE,
-	NFAPI_PARAM_REQUEST,
-	NFAPI_PARAM_RESPONSE,
-	NFAPI_CONFIG_REQUEST,
-	NFAPI_CONFIG_RESPONSE,
-	NFAPI_START_REQUEST,
-	NFAPI_START_RESPONSE,
-	NFAPI_STOP_REQUEST,
-	NFAPI_STOP_RESPONSE,
-	NFAPI_MEASUREMENT_REQUEST,
-	NFAPI_MEASUREMENT_RESPONSE,
-
-	NFAPI_UL_NODE_SYNC = 0x0180,
-	NFAPI_DL_NODE_SYNC,
-	NFAPI_TIMING_INFO,
-
-
-	NFAPI_RSSI_REQUEST = 0x0200,
-	NFAPI_RSSI_RESPONSE,
-	NFAPI_RSSI_INDICATION,
-	NFAPI_CELL_SEARCH_REQUEST,
-	NFAPI_CELL_SEARCH_RESPONSE,
-	NFAPI_CELL_SEARCH_INDICATION,
-	NFAPI_BROADCAST_DETECT_REQUEST,
-	NFAPI_BROADCAST_DETECT_RESPONSE,
-	NFAPI_BROADCAST_DETECT_INDICATION,
-	NFAPI_SYSTEM_INFORMATION_SCHEDULE_REQUEST,
-	NFAPI_SYSTEM_INFORMATION_SCHEDULE_RESPONSE,
-	NFAPI_SYSTEM_INFORMATION_SCHEDULE_INDICATION,
-	NFAPI_SYSTEM_INFORMATION_REQUEST,
-	NFAPI_SYSTEM_INFORMATION_RESPONSE,
-	NFAPI_SYSTEM_INFORMATION_INDICATION,
-	NFAPI_NMM_STOP_REQUEST,
-	NFAPI_NMM_STOP_RESPONSE,
-
-	NFAPI_VENDOR_EXT_MSG_MIN = 0x0300,
-	NFAPI_VENDOR_EXT_MSG_MAX = 0x03FF,
-
-
-	NFAPI_MAX_MESSAGE_ID,
-} nfapi_message_id_e;
-
-// nFAPI Error Codes
-typedef enum {
-	NFAPI_MSG_OK = 0,
-	NFAPI_MSG_INVALID_STATE,
-	NFAPI_MSG_INVALID_CONFIG,
-	NFAPI_SFN_OUT_OF_SYNC,
-	NFAPI_MSG_SUBFRAME_ERR,
-	NFAPI_MSG_BCH_MISSING,
-	NFAPI_MSG_INVALID_SFN,
-	NFAPI_MSG_HI_ERR,
-	NFAPI_MSG_TX_ERR,
-	
-	NFAPI_LBT_NO_PDU_IN_DL_REQ,
-	NFAPI_LBT_NO_VALID_CONFIG_REQ_RECEIVED,
-	NFAPI_FAPI_E_LBT_SF_SFN_PASSED_END_SF_SFN,
-	NFAPI_FAPI_E_LBT_OVERLAP,
-	NFAPI_MSG_BCH_PRESENT,
-	
-	NFAPI_NBIOT_UNEXPECTED_REQ,
-
-	// This is special return code that indicates that a response has
-	// been send via P9
-	NFAPI_MSG_P9_RESPONSE = 0xAA
-} nfapi_error_code_e;
-
-
-typedef enum {
-	NFAPI_P4_MSG_OK = 100,
-	NFAPI_P4_MSG_INVALID_STATE = 101,
-	NFAPI_P4_MSG_INVALID_CONFIG = 102,
-	NFAPI_P4_MSG_RAT_NOT_SUPPORTED = 103,
-	NFAPI_P4_MSG_NMM_STOP_OK = 200,
-	NFAPI_P4_MSG_NMM_STOP_IGNOREDED = 201,
-	NFAPI_P4_MSG_NMM_STOP_INVALID_STATE = 202,
-	NFAPI_P4_MSG_PROCEDURE_COMPLETE = 300,
-	NFAPI_P4_MSG_PROCEDURE_STOPPED = 301,
-	NFAPI_P4_MSG_PARTIAL_RESULTS = 302,
-	NFAPI_P4_MSG_TIMEOUT = 303
-} nfapi_p4_error_code_e;
-
-// nFAPI enums
-typedef enum {
-	NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE = 0,
-	NFAPI_DL_CONFIG_BCH_PDU_TYPE,
-	NFAPI_DL_CONFIG_MCH_PDU_TYPE,
-	NFAPI_DL_CONFIG_DLSCH_PDU_TYPE,
-	NFAPI_DL_CONFIG_PCH_PDU_TYPE,
-	NFAPI_DL_CONFIG_PRS_PDU_TYPE,
-	NFAPI_DL_CONFIG_CSI_RS_PDU_TYPE,
-	NFAPI_DL_CONFIG_EPDCCH_DL_PDU_TYPE,
-	NFAPI_DL_CONFIG_MPDCCH_PDU_TYPE,
-	NFAPI_DL_CONFIG_NBCH_PDU_TYPE,
-	NFAPI_DL_CONFIG_NPDCCH_PDU_TYPE,
-	NFAPI_DL_CONFIG_NDLSCH_PDU_TYPE
-} nfapi_dl_config_pdu_type_e;
-
-typedef enum {
-	NFAPI_DL_DCI_FORMAT_1 = 0,
-	NFAPI_DL_DCI_FORMAT_1A,
-	NFAPI_DL_DCI_FORMAT_1B,
-	NFAPI_DL_DCI_FORMAT_1C,
-	NFAPI_DL_DCI_FORMAT_1D,
-	NFAPI_DL_DCI_FORMAT_2,
-	NFAPI_DL_DCI_FORMAT_2A,
-	NFAPI_DL_DCI_FORMAT_2B,
-	NFAPI_DL_DCI_FORMAT_2C
-} nfapi_dl_dci_format_e;
-
-typedef enum {
-	NFAPI_UL_DCI_FORMAT_0 = 0,
-	NFAPI_UL_DCI_FORMAT_3,
-	NFAPI_UL_DCI_FORMAT_3A,
-	NFAPI_UL_DCI_FORMAT_4
-} nfapi_ul_dci_format_e;
-
-typedef enum {
-	NFAPI_UL_CONFIG_ULSCH_PDU_TYPE = 0,
-	NFAPI_UL_CONFIG_ULSCH_CQI_RI_PDU_TYPE,
-	NFAPI_UL_CONFIG_ULSCH_HARQ_PDU_TYPE,
-	NFAPI_UL_CONFIG_ULSCH_CQI_HARQ_RI_PDU_TYPE,
-	NFAPI_UL_CONFIG_UCI_CQI_PDU_TYPE,
-	NFAPI_UL_CONFIG_UCI_SR_PDU_TYPE,
-	NFAPI_UL_CONFIG_UCI_HARQ_PDU_TYPE,
-	NFAPI_UL_CONFIG_UCI_SR_HARQ_PDU_TYPE,
-	NFAPI_UL_CONFIG_UCI_CQI_HARQ_PDU_TYPE,
-	NFAPI_UL_CONFIG_UCI_CQI_SR_PDU_TYPE,
-	NFAPI_UL_CONFIG_UCI_CQI_SR_HARQ_PDU_TYPE,
-	NFAPI_UL_CONFIG_SRS_PDU_TYPE,
-	NFAPI_UL_CONFIG_HARQ_BUFFER_PDU_TYPE,
-	NFAPI_UL_CONFIG_ULSCH_UCI_CSI_PDU_TYPE,
-	NFAPI_UL_CONFIG_ULSCH_UCI_HARQ_PDU_TYPE,
-	NFAPI_UL_CONFIG_ULSCH_CSI_UCI_HARQ_PDU_TYPE,
-	NFAPI_UL_CONFIG_NULSCH_PDU_TYPE,
-	NFAPI_UL_CONFIG_NRACH_PDU_TYPE,
-} nfapi_ul_config_pdu_type_e;
-
-typedef enum {
-	NFAPI_HI_DCI0_HI_PDU_TYPE = 0,
-	NFAPI_HI_DCI0_DCI_PDU_TYPE,
-	NFAPI_HI_DCI0_EPDCCH_DCI_PDU_TYPE,
-	NFAPI_HI_DCI0_MPDCCH_DCI_PDU_TYPE,
-	NFAPI_HI_DCI0_NPDCCH_DCI_PDU_TYPE,
-} nfapi_hi_dci0_pdu_type_e;
-
-typedef enum {
-	NFAPI_HARQ_ACK = 1,
-	NFAPI_HARQ_NACK,
-	NFAPI_HARQ_ACK_OR_NACK,
-	NFAPI_HARQ_DTX,
-	NFAPI_HARQ_ACK_OR_DTX,
-	NFAPI_HARQ_NACK_OR_DTX,
-	NFAPI_HARQ_ACK_OR_NACK_OR_DTX
-} nfapi_harq_type_e;
-
-typedef enum {
-	NFAPI_CSI_REPORT_TYPE_PERIODIC = 0,
-	NFAPI_CSI_REPORT_TYPE_APERIODIC
-} nfapi_csi_report_type_e;
-
-typedef enum {
-	NFAPI_DL_BW_SUPPORTED_6 = 1,
-	NFAPI_DL_BW_SUPPORTED_15 = 2,
-	NFAPI_DL_BW_SUPPORTED_25 = 4,
-	NFAPI_DL_BW_SUPPORTED_50 = 8,
-	NFAPI_DL_BW_SUPPORTED_75 = 16,
-	NFAPI_DL_BW_SUPPORTED_100 = 32
-} nfapi_dl_bandwith_supported_e;
-
-typedef enum {
-	NFAPI_UL_BW_SUPPORTED_6 = 1,
-	NFAPI_UL_BW_SUPPORTED_15 = 2,
-	NFAPI_UL_BW_SUPPORTED_25 = 4,
-	NFAPI_UL_BW_SUPPORTED_50 = 8,
-	NFAPI_UL_BW_SUPPORTED_75 = 16,
-	NFAPI_UL_BW_SUPPORTED_100 = 32
-} nfapi_ul_bandwith_supported_e;
-
-typedef enum {
-	NFAPI_3GPP_REL_SUPPORTED_8 = 0,
-	NFAPI_3GPP_REL_SUPPORTED_9 = 1,
-	NFAPI_3GPP_REL_SUPPORTED_10 = 2,
-	NFAPI_3GPP_REL_SUPPORTED_11 = 4,
-	NFAPI_3GPP_REL_SUPPORTED_12 = 8,
-  NFAPI_3GPP_REL_SUPPORTED_15 = 64
-} nfapi_3gpp_release_supported_e;
-
-
-typedef enum {
-	NFAPI_DUPLEXING_MODE_TDD = 0,
-	NFAPI_DUPLEXING_MODE_FDD = 1,
-	NFAPI_DUPLEXING_MODE_HD_FDD = 2,
-} nfapi_duplexing_mode_e;
-
-typedef enum {
-	NFAPI_CP_NORMAL = 0,
-	NFAPI_CP_EXTENDED = 1
-} nfapi_cyclic_prefix_type_e;
-
-typedef enum {
-	NFAPI_RAT_TYPE_LTE = 0,
-	NFAPI_RAT_TYPE_UTRAN = 1,
-	NFAPI_RAT_TYPE_GERAN = 2,
-	NFAPI_RAT_TYPE_NB_IOT = 3,
-  NFAPI_RAT_TYPE_NR = 4
-} nfapi_rat_type_e;
-
-typedef enum {
-	NFAPI_HARQ_INDICATION_TDD_HARQ_ACK_NACK_FORMAT_BUNDLING,
-	NFAPI_HARQ_INDICATION_TDD_HARQ_ACK_NACK_FORMAT_MULIPLEXING,
-	NFAPI_HARQ_INDICATION_TDD_HARQ_ACK_NACK_FORMAT_SPECIAL_BUNDLING,
-	NFAPI_HARQ_INDICATION_TDD_HARQ_ACK_NACK_FORMAT_CHANNEL_SELECTION,
-	NFAPI_HARQ_INDICATION_TDD_HARQ_ACK_NACK_FORMAT_FORMAT_3,
-	NFAPI_HARQ_INDICATION_TDD_HARQ_ACK_NACK_FORMAT_FORMAT_4,
-	NFAPI_HARQ_INDICATION_TDD_HARQ_ACK_NACK_FORMAT_FORMAT_5
-} nfapi_harq_indication_tdd_ack_nackformat_e;
-
-
-typedef enum {
-	NFAPI_LBT_DL_CONFIG_REQUEST_PDSCH_PDU_TYPE = 0,
-	NFAPI_LBT_DL_CONFIG_REQUEST_DRS_PDU_TYPE
-} nfapi_lbt_dl_config_pdu_type_e;
-
-typedef enum {
-	NFAPI_LBT_DL_RSP_PDSCH_PDU_TYPE = 0,
-	NFAPI_LBT_DL_RSP_DRS_PDU_TYPE
-} nfapi_lbt_dl_rsp_pdu_type_e;
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint32_t length;
-	uint8_t value[NFAPI_MAX_OPAQUE_DATA];
-} nfapi_opaqaue_data_t;
-
-// Utility functions to turn enums into char*
-const char* nfapi_error_code_to_str(nfapi_error_code_e value);
-
-
-// P5 Sub Structures
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t nfapi_sync_mode;
-	uint8_t location_mode;
-	uint16_t location_coordinates_length;
-	uint8_t location_coordinates[NFAPI_PNF_PARAM_GENERAL_LOCATION_LENGTH];
-	uint32_t dl_config_timing;
-	uint32_t tx_timing;
-	uint32_t ul_config_timing;
-	uint32_t hi_dci0_timing;
-	uint16_t maximum_number_phys;
-	uint16_t maximum_total_bandwidth;
-	uint8_t maximum_total_number_dl_layers;
-	uint8_t maximum_total_number_ul_layers;
-	uint8_t shared_bands;
-	uint8_t shared_pa;
-	int16_t maximum_total_power;
-	uint8_t oui[NFAPI_PNF_PARAM_GENERAL_OUI_LENGTH];
-} nfapi_pnf_param_general_t;
-#define NFAPI_PNF_PARAM_GENERAL_TAG 0x1000
-
-
-
-
-
-typedef struct {
-	uint16_t rf_config_index;
-} nfapi_rf_config_info_t;
-
-typedef struct {
-	uint16_t phy_config_index;
-	uint16_t number_of_rfs;
-	nfapi_rf_config_info_t rf_config[NFAPI_MAX_PNF_PHY_RF_CONFIG];
-	uint16_t number_of_rf_exclusions;
-	nfapi_rf_config_info_t excluded_rf_config[NFAPI_MAX_PNF_PHY_RF_CONFIG];
-	uint16_t downlink_channel_bandwidth_supported;
-	uint16_t uplink_channel_bandwidth_supported;
-	uint8_t number_of_dl_layers_supported;
-	uint8_t number_of_ul_layers_supported;
-	uint16_t maximum_3gpp_release_supported;
-	uint8_t nmm_modes_supported;
-} nfapi_pnf_phy_info_t;
-
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t number_of_phys;
-	nfapi_pnf_phy_info_t phy[NFAPI_MAX_PNF_PHY];
-} nfapi_pnf_phy_t;
-#define NFAPI_PNF_PHY_TAG 0x1001
-
-typedef struct {
-	uint16_t phy_config_index;
-	uint16_t transmission_mode_7_supported;
-	uint16_t transmission_mode_8_supported;
-	uint16_t two_antenna_ports_for_pucch;
-	uint16_t transmission_mode_9_supported;
-	uint16_t simultaneous_pucch_pusch;
-	uint16_t four_layer_tx_with_tm3_and_tm4;
-} nfapi_pnf_phy_rel10_info_t;
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t number_of_phys;
-	nfapi_pnf_phy_rel10_info_t phy[NFAPI_MAX_PNF_PHY];
-} nfapi_pnf_phy_rel10_t;
-#define NFAPI_PNF_PHY_REL10_TAG 0x100A
-
-typedef struct {
-	uint16_t phy_config_index;
-	uint16_t edpcch_supported;
-	uint16_t multi_ack_csi_reporting;
-	uint16_t pucch_tx_diversity;
-	uint16_t ul_comp_supported;
-	uint16_t transmission_mode_5_supported;
-} nfapi_pnf_phy_rel11_info_t;
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t number_of_phys;
-	nfapi_pnf_phy_rel11_info_t phy[NFAPI_MAX_PNF_PHY];
-} nfapi_pnf_phy_rel11_t;
-#define NFAPI_PNF_PHY_REL11_TAG 0x100B
-
-
-typedef struct {
-	uint16_t phy_config_index;
-	uint16_t csi_subframe_set;
-	uint16_t enhanced_4tx_codebook;
-	uint16_t drs_supported;
-	uint16_t ul_64qam_supported;
-	uint16_t transmission_mode_10_supported;
-	uint16_t alternative_bts_indices;
-} nfapi_pnf_phy_rel12_info_t;
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t number_of_phys;
-	nfapi_pnf_phy_rel12_info_t phy[NFAPI_MAX_PNF_PHY];
-} nfapi_pnf_phy_rel12_t;
-#define NFAPI_PNF_PHY_REL12_TAG 0x100C
-
-typedef struct {
-	uint16_t phy_config_index;
-	uint16_t pucch_format4_supported;
-	uint16_t pucch_format5_supported;
-	uint16_t more_than_5_ca_support;
-	uint16_t laa_supported;
-	uint16_t laa_ending_in_dwpts_supported;
-	uint16_t laa_starting_in_second_slot_supported;
-	uint16_t beamforming_supported;
-	uint16_t csi_rs_enhancement_supported;
-	uint16_t drms_enhancement_supported;
-	uint16_t srs_enhancement_supported;
-} nfapi_pnf_phy_rel13_info_t;
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t number_of_phys;
-	nfapi_pnf_phy_rel13_info_t phy[NFAPI_MAX_PNF_PHY];
-} nfapi_pnf_phy_rel13_t;
-#define NFAPI_PNF_PHY_REL13_TAG 0x100D
-
-typedef struct {
-	uint16_t phy_config_index;
-	uint16_t number_of_rfs;
-	nfapi_rf_config_info_t rf_config[NFAPI_MAX_PNF_PHY_RF_CONFIG];
-	uint16_t number_of_rf_exclusions;
-	nfapi_rf_config_info_t excluded_rf_config[NFAPI_MAX_PNF_PHY_RF_CONFIG];
-	uint8_t number_of_dl_layers_supported;
-	uint8_t number_of_ul_layers_supported;
-	uint16_t maximum_3gpp_release_supported;
-	uint8_t nmm_modes_supported;
-} nfapi_pnf_phy_rel13_nb_iot_info_t;
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t number_of_phys;
-	nfapi_pnf_phy_rel13_nb_iot_info_t phy[NFAPI_MAX_PNF_PHY];
-} nfapi_pnf_phy_rel13_nb_iot_t;
-#define NFAPI_PNF_PHY_REL13_NB_IOT_TAG 0x100E
-
-typedef struct {
-  uint16_t phy_config_index;
-} nfapi_pnf_phy_rel15_info_t;
-
-typedef struct {
-  nfapi_tl_t tl;
-  uint16_t number_of_phys;
-  nfapi_pnf_phy_rel15_info_t phy[NFAPI_MAX_PNF_PHY];
-} nfapi_pnf_phy_rel15_t;
-#define NFAPI_PNF_PHY_REL15_TAG 0x100H
-
-
-typedef struct {
-	uint16_t rf_config_index;
-	uint16_t band;
-	int16_t maximum_transmit_power; 
-	int16_t minimum_transmit_power;
-	uint8_t number_of_antennas_suppported;
-	uint32_t minimum_downlink_frequency;
-	uint32_t maximum_downlink_frequency;
-	uint32_t minimum_uplink_frequency;
-	uint32_t maximum_uplink_frequency;
-} nfapi_pnf_rf_info_t;
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t number_of_rfs;
-	nfapi_pnf_rf_info_t rf[NFAPI_MAX_PNF_RF];
-} nfapi_pnf_rf_t;
-#define NFAPI_PNF_RF_TAG 0x1002
-
-typedef struct {
-	uint16_t phy_id;
-	uint16_t phy_config_index;
-	uint16_t rf_config_index;
-} nfapi_phy_rf_config_info_t;
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t number_phy_rf_config_info;
-	nfapi_phy_rf_config_info_t phy_rf_config[NFAPI_MAX_PHY_RF_INSTANCES];
-} nfapi_pnf_phy_rf_config_t;
-#define NFAPI_PNF_PHY_RF_TAG 0x1003
-
-// Generic strucutre for single tlv value.
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t value;
-} nfapi_uint16_tlv_t;
-
-typedef struct {
-	nfapi_tl_t tl;
-	int16_t value;
-} nfapi_int16_tlv_t;
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t value;
-} nfapi_uint8_tlv_t;
-
-typedef struct {
-	nfapi_uint16_tlv_t phy_state;
-} nfapi_l1_status;
-
-#define NFAPI_L1_STATUS_PHY_STATE_TAG 0x00FA
-
-typedef struct {
-	nfapi_uint16_tlv_t dl_bandwidth_support;
-	nfapi_uint16_tlv_t ul_bandwidth_support;
-	nfapi_uint16_tlv_t dl_modulation_support;
-	nfapi_uint16_tlv_t ul_modulation_support;
-	nfapi_uint16_tlv_t phy_antenna_capability;
-	nfapi_uint16_tlv_t release_capability;
-	nfapi_uint16_tlv_t mbsfn_capability;
-} nfapi_phy_capabilities_t;
-
-#define NFAPI_PHY_CAPABILITIES_DL_BANDWIDTH_SUPPORT_TAG 0x00C8
-#define NFAPI_PHY_CAPABILITIES_UL_BANDWIDTH_SUPPORT_TAG 0x00C9
-#define NFAPI_PHY_CAPABILITIES_DL_MODULATION_SUPPORT_TAG 0x00CA
-#define NFAPI_PHY_CAPABILITIES_UL_MODULATION_SUPPORT_TAG 0x00CB
-#define NFAPI_PHY_CAPABILITIES_PHY_ANTENNA_CAPABILITY_TAG 0x00CC
-#define NFAPI_PHY_CAPABILITIES_RELEASE_CAPABILITY_TAG 0x00CD
-#define NFAPI_PHY_CAPABILITIES_MBSFN_CAPABILITY_TAG 0x00CE
-
-
-typedef struct {
-	nfapi_uint16_tlv_t data_report_mode;
-	nfapi_uint16_tlv_t sfnsf;
-} nfapi_l23_config_t;
-
-
-#define NFAPI_L23_CONFIG_DATA_REPORT_MODE_TAG 0x00F0
-#define NFAPI_L23_CONFIG_SFNSF_TAG 0x00F1
-
-typedef struct {
-  nfapi_uint16_tlv_t numerology_index_mu;
-	nfapi_uint16_tlv_t duplex_mode;
-	nfapi_uint16_tlv_t pcfich_power_offset;
-	nfapi_uint16_tlv_t pb;
-	nfapi_uint16_tlv_t dl_cyclic_prefix_type;
-	nfapi_uint16_tlv_t ul_cyclic_prefix_type;
-} nfapi_subframe_config_t;
-
-#define NFAPI_SUBFRAME_CONFIG_DUPLEX_MODE_TAG 0x0001
-#define NFAPI_SUBFRAME_CONFIG_PCFICH_POWER_OFFSET_TAG 0x0002
-#define NFAPI_SUBFRAME_CONFIG_PB_TAG 0x0003
-#define NFAPI_SUBFRAME_CONFIG_DL_CYCLIC_PREFIX_TYPE_TAG 0x0004
-#define NFAPI_SUBFRAME_CONFIG_UL_CYCLIC_PREFIX_TYPE_TAG 0x0005
-#define NFAPI_SUBFRAME_CONFIG_NUMEROLOGY_INDEX_MU_TAG 0x0006
-
-typedef struct {
-	nfapi_uint16_tlv_t dl_channel_bandwidth;
-	nfapi_uint16_tlv_t ul_channel_bandwidth;
-	nfapi_uint16_tlv_t reference_signal_power;
-	nfapi_uint16_tlv_t tx_antenna_ports;
-	nfapi_uint16_tlv_t rx_antenna_ports;
-} nfapi_rf_config_t;
-
-#define NFAPI_RF_CONFIG_DL_CHANNEL_BANDWIDTH_TAG 0x000A
-#define NFAPI_RF_CONFIG_UL_CHANNEL_BANDWIDTH_TAG 0x000B
-#define NFAPI_RF_CONFIG_REFERENCE_SIGNAL_POWER_TAG 0x000C
-#define NFAPI_RF_CONFIG_TX_ANTENNA_PORTS_TAG 0x000D
-#define NFAPI_RF_CONFIG_RX_ANTENNA_PORTS_TAG 0x000E
-
-typedef struct {
-	nfapi_uint16_tlv_t phich_resource;
-	nfapi_uint16_tlv_t phich_duration;
-	nfapi_uint16_tlv_t phich_power_offset;
-} nfapi_phich_config_t;
-
-#define NFAPI_PHICH_CONFIG_PHICH_RESOURCE_TAG 0x0014
-#define NFAPI_PHICH_CONFIG_PHICH_DURATION_TAG 0x0015
-#define NFAPI_PHICH_CONFIG_PHICH_POWER_OFFSET_TAG 0x0016
-
-typedef enum {
-  NFAPI_HALF_FRAME_INDEX_FIRST_HALF = 0,
-  NFAPI_HALF_FRAME_INDEX_SECOND_HALF = 1
-} nfapi_half_frame_index_e;
-
-typedef struct {
-	nfapi_uint16_tlv_t primary_synchronization_signal_epre_eprers;
-	nfapi_uint16_tlv_t secondary_synchronization_signal_epre_eprers;
-	nfapi_uint16_tlv_t physical_cell_id;
-  nfapi_half_frame_index_e half_frame_index;
-  nfapi_uint16_tlv_t ssb_subcarrier_offset;
-  nfapi_uint16_tlv_t ssb_position_in_burst;
-  nfapi_uint16_tlv_t ssb_periodicity;
-  nfapi_uint16_tlv_t ss_pbch_block_power;
-} nfapi_sch_config_t;
-
-#define NFAPI_SCH_CONFIG_PRIMARY_SYNCHRONIZATION_SIGNAL_EPRE_EPRERS_TAG 0x001E
-#define NFAPI_SCH_CONFIG_SECONDARY_SYNCHRONIZATION_SIGNAL_EPRE_EPRERS_TAG 0x001F
-#define NFAPI_SCH_CONFIG_PHYSICAL_CELL_ID_TAG 0x0020
-#define NFAPI_SCH_CONFIG_HALF_FRAME_INDEX_TAG 0x0021
-#define NFAPI_SCH_CONFIG_SSB_SUBCARRIER_OFFSET_TAG 0x0022
-#define NFAPI_SCH_CONFIG_SSB_POSITION_IN_BURST 0x0023
-#define NFAPI_SCH_CONFIG_SSB_PERIODICITY 0x0024
-#define NFAPI_SCH_CONFIG_SS_PBCH_BLOCK_POWER 0x0025
-
-typedef struct {
-	nfapi_uint16_tlv_t configuration_index;
-	nfapi_uint16_tlv_t root_sequence_index;
-	nfapi_uint16_tlv_t zero_correlation_zone_configuration;
-	nfapi_uint16_tlv_t high_speed_flag;
-	nfapi_uint16_tlv_t frequency_offset;
-} nfapi_prach_config_t;
-
-#define NFAPI_PRACH_CONFIG_CONFIGURATION_INDEX_TAG 0x0028
-#define NFAPI_PRACH_CONFIG_ROOT_SEQUENCE_INDEX_TAG 0x0029
-#define NFAPI_PRACH_CONFIG_ZERO_CORRELATION_ZONE_CONFIGURATION_TAG 0x002A
-#define NFAPI_PRACH_CONFIG_HIGH_SPEED_FLAG_TAG 0x002B
-#define NFAPI_PRACH_CONFIG_FREQUENCY_OFFSET_TAG 0x002C
-
-typedef struct {
-	nfapi_uint16_tlv_t hopping_mode;
-	nfapi_uint16_tlv_t hopping_offset;
-	nfapi_uint16_tlv_t number_of_subbands;
-} nfapi_pusch_config_t;
-
-#define NFAPI_PUSCH_CONFIG_HOPPING_MODE_TAG 0x0032
-#define NFAPI_PUSCH_CONFIG_HOPPING_OFFSET_TAG 0x0033
-#define NFAPI_PUSCH_CONFIG_NUMBER_OF_SUBBANDS_TAG 0x0034
-
-typedef struct {
-	nfapi_uint16_tlv_t delta_pucch_shift;
-	nfapi_uint16_tlv_t n_cqi_rb;
-	nfapi_uint16_tlv_t n_an_cs;
-	nfapi_uint16_tlv_t n1_pucch_an;
-} nfapi_pucch_config_t;
-
-#define NFAPI_PUCCH_CONFIG_DELTA_PUCCH_SHIFT_TAG 0x003C
-#define NFAPI_PUCCH_CONFIG_N_CQI_RB_TAG 0x003D
-#define NFAPI_PUCCH_CONFIG_N_AN_CS_TAG 0x003E
-#define NFAPI_PUCCH_CONFIG_N1_PUCCH_AN_TAG 0x003F
-
-typedef struct {
-	nfapi_uint16_tlv_t bandwidth_configuration;
-	nfapi_uint16_tlv_t max_up_pts;
-	nfapi_uint16_tlv_t srs_subframe_configuration;
-	nfapi_uint16_tlv_t srs_acknack_srs_simultaneous_transmission;
-} nfapi_srs_config_t;
-
-#define NFAPI_SRS_CONFIG_BANDWIDTH_CONFIGURATION_TAG 0x0046
-#define NFAPI_SRS_CONFIG_MAX_UP_PTS_TAG 0x0047
-#define NFAPI_SRS_CONFIG_SRS_SUBFRAME_CONFIGURATION_TAG 0x0048
-#define NFAPI_SRS_CONFIG_SRS_ACKNACK_SRS_SIMULTANEOUS_TRANSMISSION_TAG 0x0049
-
-typedef struct {
-	nfapi_uint16_tlv_t uplink_rs_hopping;
-	nfapi_uint16_tlv_t group_assignment;
-	nfapi_uint16_tlv_t cyclic_shift_1_for_drms;
-} nfapi_uplink_reference_signal_config_t;
-
-#define NFAPI_UPLINK_REFERENCE_SIGNAL_CONFIG_UPLINK_RS_HOPPING_TAG 0x0050
-#define NFAPI_UPLINK_REFERENCE_SIGNAL_CONFIG_GROUP_ASSIGNMENT_TAG 0x0051
-#define NFAPI_UPLINK_REFERENCE_SIGNAL_CONFIG_CYCLIC_SHIFT_1_FOR_DRMS_TAG 0x0052
-
-
-typedef struct {
-	nfapi_uint16_tlv_t ed_threshold_lbt_pdsch;
-	nfapi_uint16_tlv_t ed_threshold_lbt_drs;
-	nfapi_uint16_tlv_t pd_threshold;
-	nfapi_uint16_tlv_t multi_carrier_type;
-	nfapi_uint16_tlv_t multi_carrier_tx;
-	nfapi_uint16_tlv_t multi_carrier_freeze;
-	nfapi_uint16_tlv_t tx_antenna_ports_drs;
-	nfapi_uint16_tlv_t tx_power_drs;
-} nfapi_laa_config_t;
-
-#define NFAPI_LAA_CONFIG_ED_THRESHOLD_FOR_LBT_FOR_PDSCH_TAG 0x0064
-#define NFAPI_LAA_CONFIG_ED_THRESHOLD_FOR_LBT_FOR_DRS_TAG 0x0065
-#define NFAPI_LAA_CONFIG_PD_THRESHOLD_TAG 0x0066
-#define NFAPI_LAA_CONFIG_MULTI_CARRIER_TYPE_TAG 0x0067
-#define NFAPI_LAA_CONFIG_MULTI_CARRIER_TX_TAG 0x0068
-#define NFAPI_LAA_CONFIG_MULTI_CARRIER_FREEZE_TAG 0x0069
-#define NFAPI_LAA_CONFIG_TX_ANTENNA_PORTS_FOR_DRS_TAG 0x006A
-#define NFAPI_LAA_CONFIG_TRANSMISSION_POWER_FOR_DRS_TAG 0x006B
-
-typedef struct {
-
-	nfapi_uint16_tlv_t pbch_repetitions_enable_r13;
-	nfapi_uint16_tlv_t prach_catm_root_sequence_index;
-	nfapi_uint16_tlv_t prach_catm_zero_correlation_zone_configuration;
-	nfapi_uint16_tlv_t prach_catm_high_speed_flag;
-	nfapi_uint16_tlv_t prach_ce_level_0_enable;
-	nfapi_uint16_tlv_t prach_ce_level_0_configuration_index;
-	nfapi_uint16_tlv_t prach_ce_level_0_frequency_offset;
-	nfapi_uint16_tlv_t prach_ce_level_0_number_of_repetitions_per_attempt;
-	nfapi_uint16_tlv_t prach_ce_level_0_starting_subframe_periodicity;
-	nfapi_uint16_tlv_t prach_ce_level_0_hopping_enable;
-	nfapi_uint16_tlv_t prach_ce_level_0_hopping_offset;
-	nfapi_uint16_tlv_t prach_ce_level_1_enable;
-	nfapi_uint16_tlv_t prach_ce_level_1_configuration_index;
-	nfapi_uint16_tlv_t prach_ce_level_1_frequency_offset;
-	nfapi_uint16_tlv_t prach_ce_level_1_number_of_repetitions_per_attempt;
-	nfapi_uint16_tlv_t prach_ce_level_1_starting_subframe_periodicity;
-	nfapi_uint16_tlv_t prach_ce_level_1_hopping_enable;
-	nfapi_uint16_tlv_t prach_ce_level_1_hopping_offset;
-	nfapi_uint16_tlv_t prach_ce_level_2_enable;
-	nfapi_uint16_tlv_t prach_ce_level_2_configuration_index;
-	nfapi_uint16_tlv_t prach_ce_level_2_frequency_offset;
-	nfapi_uint16_tlv_t prach_ce_level_2_number_of_repetitions_per_attempt;
-	nfapi_uint16_tlv_t prach_ce_level_2_starting_subframe_periodicity;
-	nfapi_uint16_tlv_t prach_ce_level_2_hopping_enable;
-	nfapi_uint16_tlv_t prach_ce_level_2_hopping_offset;
-	nfapi_uint16_tlv_t prach_ce_level_3_enable;
-	nfapi_uint16_tlv_t prach_ce_level_3_configuration_index;
-	nfapi_uint16_tlv_t prach_ce_level_3_frequency_offset;
-	nfapi_uint16_tlv_t prach_ce_level_3_number_of_repetitions_per_attempt;
-	nfapi_uint16_tlv_t prach_ce_level_3_starting_subframe_periodicity;
-	nfapi_uint16_tlv_t prach_ce_level_3_hopping_enable;
-	nfapi_uint16_tlv_t prach_ce_level_3_hopping_offset;
-	nfapi_uint16_tlv_t pucch_interval_ulhoppingconfigcommonmodea;
-	nfapi_uint16_tlv_t pucch_interval_ulhoppingconfigcommonmodeb;
-} nfapi_emtc_config_t;
-
-#define NFAPI_EMTC_CONFIG_PBCH_REPETITIONS_ENABLE_R13_TAG 0x0078
-#define NFAPI_EMTC_CONFIG_PRACH_CATM_ROOT_SEQUENCE_INDEX_TAG 0x0079
-#define NFAPI_EMTC_CONFIG_PRACH_CATM_ZERO_CORRELATION_ZONE_CONFIGURATION_TAG 0x007A
-#define NFAPI_EMTC_CONFIG_PRACH_CATM_HIGH_SPEED_FLAG 0x007B
-#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_ENABLE_TAG 0x007C
-#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_CONFIGURATION_INDEX_TAG 0x007D
-#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_FREQUENCY_OFFSET_TAG 0x007E
-#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG 0x007F
-#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_STARTING_SUBFRAME_PERIODICITY_TAG 0x0080
-#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_HOPPING_ENABLE_TAG 0x0081
-#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_HOPPING_OFFSET_TAG 0x0082
-#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_ENABLE_TAG 0x0083
-#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_CONFIGURATION_INDEX_TAG 0x0084
-#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_FREQUENCY_OFFSET_TAG 0x0085
-#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG 0x0086
-#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_STARTING_SUBFRAME_PERIODICITY_TAG 0x0087
-#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_HOPPING_ENABLE_TAG 0x0088
-#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_HOPPING_OFFSET_TAG 0x0089
-#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_ENABLE_TAG 0x008A
-#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_CONFIGURATION_INDEX_TAG 0x008B
-#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_FREQUENCY_OFFSET_TAG 0x008C
-#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG 0x008D
-#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_STARTING_SUBFRAME_PERIODICITY_TAG 0x008E
-#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_HOPPING_ENABLE_TAG 0x008F
-#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_HOPPING_OFFSET_TAG 0x0090
-#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_ENABLE_TAG 0x0091
-#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_CONFIGURATION_INDEX_TAG 0x0092
-#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_FREQUENCY_OFFSET_TAG 0x0093
-#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG 0x0094
-#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_STARTING_SUBFRAME_PERIODICITY_TAG 0x0095
-#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_HOPPING_ENABLE_TAG 0x0096
-#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_HOPPING_OFFSET_TAG 0x0097
-#define NFAPI_EMTC_CONFIG_PUCCH_INTERVAL_ULHOPPINGCONFIGCOMMONMODEA_TAG 0x0098
-#define NFAPI_EMTC_CONFIG_PUCCH_INTERVAL_ULHOPPINGCONFIGCOMMONMODEB_TAG 0x0099
-
-typedef struct {
-	nfapi_uint16_tlv_t operating_mode;
-	nfapi_uint16_tlv_t anchor;
-	nfapi_uint16_tlv_t prb_index;
-	nfapi_uint16_tlv_t control_region_size;
-	nfapi_uint16_tlv_t assumed_crs_aps;
-	nfapi_uint16_tlv_t nprach_config_0_enabled;
-	nfapi_uint16_tlv_t nprach_config_0_sf_periodicity;
-	nfapi_uint16_tlv_t nprach_config_0_start_time;
-	nfapi_uint16_tlv_t nprach_config_0_subcarrier_offset;
-	nfapi_uint16_tlv_t nprach_config_0_number_of_subcarriers;
-	nfapi_uint16_tlv_t nprach_config_0_cp_length;
-	nfapi_uint16_tlv_t nprach_config_0_number_of_repetitions_per_attempt;
-	nfapi_uint16_tlv_t nprach_config_1_enabled;
-	nfapi_uint16_tlv_t nprach_config_1_sf_periodicity;
-	nfapi_uint16_tlv_t nprach_config_1_start_time;
-	nfapi_uint16_tlv_t nprach_config_1_subcarrier_offset;
-	nfapi_uint16_tlv_t nprach_config_1_number_of_subcarriers;
-	nfapi_uint16_tlv_t nprach_config_1_cp_length;
-	nfapi_uint16_tlv_t nprach_config_1_number_of_repetitions_per_attempt;
-	nfapi_uint16_tlv_t nprach_config_2_enabled;
-	nfapi_uint16_tlv_t nprach_config_2_sf_periodicity;
-	nfapi_uint16_tlv_t nprach_config_2_start_time;
-	nfapi_uint16_tlv_t nprach_config_2_subcarrier_offset;
-	nfapi_uint16_tlv_t nprach_config_2_number_of_subcarriers;
-	nfapi_uint16_tlv_t nprach_config_2_cp_length;
-	nfapi_uint16_tlv_t nprach_config_2_number_of_repetitions_per_attempt;
-	nfapi_uint16_tlv_t three_tone_base_sequence;
-	nfapi_uint16_tlv_t six_tone_base_sequence;
-	nfapi_uint16_tlv_t twelve_tone_base_sequence;
-	nfapi_uint16_tlv_t three_tone_cyclic_shift;
-	nfapi_uint16_tlv_t six_tone_cyclic_shift;
-	nfapi_uint16_tlv_t dl_gap_config_enable;
-	nfapi_uint16_tlv_t dl_gap_threshold;
-	nfapi_uint16_tlv_t dl_gap_periodicity;
-	nfapi_uint16_tlv_t dl_gap_duration_coefficient;
-} nfapi_nb_iot_config_t;
-
-#define NFAPI_NB_IOT_CONFIG_OPERATING_MODE_TAG 0x00A5
-#define NFAPI_NB_IOT_CONFIG_ANCHOR_TAG 0x00A6
-#define NFAPI_NB_IOT_CONFIG_PRB_INDEX_TAG 0x00A7
-#define NFAPI_NB_IOT_CONFIG_CONTROL_REGION_SIZE_TAG 0x00A8
-#define NFAPI_NB_IOT_CONFIG_ASSUMED_CRS_APS_TAG 0x00A9
-#define NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_0_ENABLED_TAG 0x00AA
-#define NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_0_SF_PERIODICITY_TAG 0x00AB
-#define NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_0_START_TIME_TAG 0x00AC
-#define NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_0_SUBCARRIER_OFFSET_TAG 0x00AD
-#define NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_0_NUMBER_OF_SUBCARRIERS_TAG 0x00AE
-#define NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_0_CP_LENGTH_TAG 0x00AF
-#define NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_0_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG 0x00B0
-#define NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_1_ENABLED_TAG 0x00B1
-#define NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_1_SF_PERIODICITY_TAG 0x00B2
-#define NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_1_START_TIME_TAG 0x00B3
-#define NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_1_SUBCARRIER_OFFSET_TAG 0x00B4
-#define NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_1_NUMBER_OF_SUBCARRIERS_TAG 0x00B5
-#define NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_1_CP_LENGTH_TAG 0x00B6
-#define NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_1_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG 0x00B7
-#define NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_2_ENABLED_TAG 0x00B8
-#define NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_2_SF_PERIODICITY_TAG 0x00B9
-#define NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_2_START_TIME_TAG 0x00BA
-#define NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_2_SUBCARRIER_OFFSET_TAG 0x00BB
-#define NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_2_NUMBER_OF_SUBCARRIERS_TAG 0x00BC
-#define NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_2_CP_LENGTH_TAG 0x00BD
-#define NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_2_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG 0x00BE
-#define NFAPI_NB_IOT_CONFIG_THREE_TONE_BASE_SEQUENCE_TAG 0x00BF
-#define NFAPI_NB_IOT_CONFIG_SIX_TONE_BASE_SEQUENCE_TAG 0x00C0
-#define NFAPI_NB_IOT_CONFIG_TWELVE_TONE_BASE_SEQUENCE_TAG 0x00C1
-#define NFAPI_NB_IOT_CONFIG_THREE_TONE_CYCLIC_SHIFT_TAG 0x00C2
-#define NFAPI_NB_IOT_CONFIG_SIX_TONE_CYCLIC_SHIFT_TAG 0x00C3
-#define NFAPI_NB_IOT_CONFIG_DL_GAP_CONFIG_ENABLE_TAG 0x00C4
-#define NFAPI_NB_IOT_CONFIG_DL_GAP_THRESHOLD_TAG 0x00C5
-#define NFAPI_NB_IOT_CONFIG_DL_GAP_PERIODICITY_TAG 0x00C6
-#define NFAPI_NB_IOT_CONFIG_DL_GAP_DURATION_COEFFICIENT_TAG 0x00C7
-
-typedef struct {
-	nfapi_uint16_tlv_t laa_support;
-	nfapi_uint16_tlv_t pd_sensing_lbt_support;
-	nfapi_uint16_tlv_t multi_carrier_lbt_support;
-	nfapi_uint16_tlv_t partial_sf_support;
-} nfapi_laa_capability_t;
-
-#define NFAPI_LAA_CAPABILITY_LAA_SUPPORT_TAG 0x00D1
-#define NFAPI_LAA_CAPABILITY_PD_SENSING_LBT_SUPPORT_TAG 0x00D2
-#define NFAPI_LAA_CAPABILITY_MULTI_CARRIER_LBT_SUPPORT_TAG 0x00D3
-#define NFAPI_LAA_CAPABILITY_PARTIAL_SF_SUPPORT_TAG 0x00D4
-
-typedef struct {
-	nfapi_uint16_tlv_t nb_iot_support;
-	nfapi_uint16_tlv_t nb_iot_operating_mode_capability;
-} nfapi_nb_iot_capability_t;
-
-#define NFAPI_LAA_CAPABILITY_NB_IOT_SUPPORT_TAG 0x00D5
-#define NFAPI_LAA_CAPABILITY_NB_IOT_OPERATING_MODE_CAPABILITY_TAG 0x00D6
-
-typedef struct {
-	nfapi_uint16_tlv_t subframe_assignment;
-	nfapi_uint16_tlv_t special_subframe_patterns;
-} nfapi_tdd_frame_structure_t;
-
-#define NFAPI_TDD_FRAME_STRUCTURE_SUBFRAME_ASSIGNMENT_TAG 0x005A
-#define NFAPI_TDD_FRAME_STRUCTURE_SPECIAL_SUBFRAME_PATTERNS_TAG 0x005B
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t number_rf_bands;
-	uint16_t rf_band[NFAPI_MAX_NUM_RF_BANDS];
-} nfapi_rf_bands_t;
-#define NFAPI_PHY_RF_BANDS_TAG 0x0114
-
-#define NFAPI_IPV4_ADDRESS_LENGTH 4
-#define NFAPI_IPV6_ADDRESS_LENGTH 16
-
-// Convience enum to allow the ip addres type to be distinguished
-typedef enum {
-	NFAPI_IP_ADDRESS_IPV4 = 0,
-	NFAPI_IP_ADDRESS_IPV6
-} nfapi_ip_address_type_e;
-
-// The type could be infered from the length, but it is clearer in 
-// code to have a type variable set
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t type;
-	union {
-		uint8_t ipv4_address[NFAPI_IPV4_ADDRESS_LENGTH];
-		uint8_t ipv6_address[NFAPI_IPV6_ADDRESS_LENGTH];
-	} u;
-} nfapi_ip_address_t;
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t address[NFAPI_IPV4_ADDRESS_LENGTH];
-} nfapi_ipv4_address_t;
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t address[NFAPI_IPV6_ADDRESS_LENGTH];
-} nfapi_ipv6_address_t;
-
-
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t number_of_rf_bands;
-	uint16_t bands[NFAPI_MAX_NMM_FREQUENCY_BANDS];
-} nfapi_nmm_frequency_bands_t;
-
-//These TLVs are used exclusively by nFAPI
-typedef struct
-{
-	// These TLVs are used to setup the transport connection between VNF and PNF
-	nfapi_ipv4_address_t p7_vnf_address_ipv4;
-	nfapi_ipv6_address_t p7_vnf_address_ipv6;
-	nfapi_uint16_tlv_t p7_vnf_port;
-
-	nfapi_ipv4_address_t p7_pnf_address_ipv4;
-	nfapi_ipv6_address_t p7_pnf_address_ipv6;
-	nfapi_uint16_tlv_t p7_pnf_port;
-	
-	// These TLVs are used to setup the transport connection between VNF and PNF
-	nfapi_uint8_tlv_t dl_ue_per_sf;
-	nfapi_uint8_tlv_t ul_ue_per_sf;
-
-	// These TLVs are used by PNF to report its RF capabilities to the VNF software
-	nfapi_rf_bands_t rf_bands;
-
-	// These TLVs are used by the VNF to configure the synchronization with the PNF.
-	nfapi_uint8_tlv_t timing_window;
-	nfapi_uint8_tlv_t timing_info_mode;
-	nfapi_uint8_tlv_t timing_info_period;
-
-	// 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_nmm_frequency_bands_t nmm_gsm_frequency_bands;
-	nfapi_nmm_frequency_bands_t nmm_umts_frequency_bands;
-	nfapi_nmm_frequency_bands_t nmm_lte_frequency_bands;
-	nfapi_uint8_tlv_t nmm_uplink_rssi_supported;
-
-} nfapi_nfapi_t;
-
-#define NFAPI_NFAPI_P7_VNF_ADDRESS_IPV4_TAG 0x0100
-#define NFAPI_NFAPI_P7_VNF_ADDRESS_IPV6_TAG 0x0101
-#define NFAPI_NFAPI_P7_VNF_PORT_TAG 0x0102
-#define NFAPI_NFAPI_P7_PNF_ADDRESS_IPV4_TAG 0x0103
-#define NFAPI_NFAPI_P7_PNF_ADDRESS_IPV6_TAG 0x0104
-#define NFAPI_NFAPI_P7_PNF_PORT_TAG 0x0105
-
-#define NFAPI_NFAPI_DOWNLINK_UES_PER_SUBFRAME_TAG 0x010A
-#define NFAPI_NFAPI_UPLINK_UES_PER_SUBFRAME_TAG 0x010B
-#define NFAPI_NFAPI_RF_BANDS_TAG 0x0114
-#define NFAPI_NFAPI_TIMING_WINDOW_TAG 0x011E
-#define NFAPI_NFAPI_TIMING_INFO_MODE_TAG 0x011F
-#define NFAPI_NFAPI_TIMING_INFO_PERIOD_TAG 0x0120
-#define NFAPI_NFAPI_MAXIMUM_TRANSMIT_POWER_TAG 0x0128
-#define NFAPI_NFAPI_EARFCN_TAG 0x0129
-#define NFAPI_NFAPI_NMM_GSM_FREQUENCY_BANDS_TAG 0x0130
-#define NFAPI_NFAPI_NMM_UMTS_FREQUENCY_BANDS_TAG 0x0131
-#define NFAPI_NFAPI_NMM_LTE_FREQUENCY_BANDS_TAG 0x0132
-#define NFAPI_NFAPI_NMM_UPLINK_RSSI_SUPPORTED_TAG 0x0133
-
-
-// P5 Message Structures
-typedef struct {
-	nfapi_p4_p5_message_header_t header;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_pnf_param_request_t;
-
-typedef struct {
-	nfapi_p4_p5_message_header_t header;
-	uint32_t error_code;
-	nfapi_pnf_param_general_t pnf_param_general;
-	nfapi_pnf_phy_t pnf_phy;
-	nfapi_pnf_rf_t pnf_rf;
-	nfapi_pnf_phy_rel10_t pnf_phy_rel10;
-	nfapi_pnf_phy_rel11_t pnf_phy_rel11;
-	nfapi_pnf_phy_rel12_t pnf_phy_rel12;
-	nfapi_pnf_phy_rel13_t pnf_phy_rel13;
-	nfapi_pnf_phy_rel13_nb_iot_t pnf_phy_rel13_nb_iot;
-  nfapi_pnf_phy_rel15_t pnf_phy_rel15;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_pnf_param_response_t;
-
-typedef struct {
-	nfapi_p4_p5_message_header_t header;
-	nfapi_pnf_phy_rf_config_t pnf_phy_rf_config;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_pnf_config_request_t;
-
-typedef struct {
-	nfapi_p4_p5_message_header_t header;
-	uint32_t error_code;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_pnf_config_response_t;
-
-typedef struct {
-	nfapi_p4_p5_message_header_t header;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_pnf_start_request_t;
-
-typedef struct {
-	nfapi_p4_p5_message_header_t header;
-	uint32_t error_code;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_pnf_start_response_t;
-
-typedef struct {
-	nfapi_p4_p5_message_header_t header;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_pnf_stop_request_t;
-
-typedef struct {
-	nfapi_p4_p5_message_header_t header;
-	uint32_t error_code;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_pnf_stop_response_t;
-
-typedef struct {
-	nfapi_p4_p5_message_header_t header;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_param_request_t;
-
-typedef struct {
-	nfapi_p4_p5_message_header_t header;
-	uint8_t error_code;
-	uint8_t num_tlv;
-	// fdd or tdd in idle or configured tlvs
-	nfapi_l1_status l1_status;
-	nfapi_phy_capabilities_t phy_capabilities;
-	nfapi_laa_capability_t laa_capability;
-	nfapi_nb_iot_capability_t nb_iot_capability;
-	
-	nfapi_subframe_config_t subframe_config;
-	nfapi_rf_config_t rf_config;
-	nfapi_phich_config_t phich_config;
-	nfapi_sch_config_t sch_config;
-	nfapi_prach_config_t prach_config;
-	nfapi_pusch_config_t pusch_config;
-	nfapi_pucch_config_t pucch_config;
-	nfapi_srs_config_t srs_config;
-	nfapi_uplink_reference_signal_config_t uplink_reference_signal_config;
-	nfapi_tdd_frame_structure_t tdd_frame_structure_config;
-	nfapi_l23_config_t l23_config;
-	nfapi_nb_iot_config_t nb_iot_config;
-
-	// addition nfapi tlvs as per table 2-16 in idle or configure
-	nfapi_nfapi_t nfapi_config;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_param_response_t;
-
-typedef struct {
-	nfapi_p4_p5_message_header_t header;
-	uint8_t num_tlv;
-	nfapi_subframe_config_t subframe_config;
-	nfapi_rf_config_t rf_config;
-	nfapi_phich_config_t phich_config;
-	nfapi_sch_config_t sch_config;
-	nfapi_prach_config_t prach_config;
-	nfapi_pusch_config_t pusch_config;
-	nfapi_pucch_config_t pucch_config;
-	nfapi_srs_config_t srs_config;
-	nfapi_uplink_reference_signal_config_t uplink_reference_signal_config;
-	nfapi_laa_config_t laa_config;
-	nfapi_emtc_config_t emtc_config;
-	nfapi_tdd_frame_structure_t tdd_frame_structure_config;
-	nfapi_l23_config_t l23_config;
-	nfapi_nb_iot_config_t nb_iot_config;
-	
-	// addition nfapi tlvs as per table 2-16 in idle or configure
-	nfapi_nfapi_t nfapi_config;
-
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_config_request_t;
-
-typedef struct {
-	nfapi_p4_p5_message_header_t header;
-	uint32_t error_code;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_config_response_t;
-
-typedef struct {
-	nfapi_p4_p5_message_header_t header;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_start_request_t;
-
-typedef struct {
-	nfapi_p4_p5_message_header_t header;
-	uint32_t error_code;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_start_response_t;
-
-typedef struct {
-	nfapi_p4_p5_message_header_t header;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_stop_request_t;
-
-typedef struct {
-	nfapi_p4_p5_message_header_t header;
-	uint32_t error_code;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_stop_response_t;
-
-typedef struct {
-	nfapi_p4_p5_message_header_t header;
-	nfapi_uint16_tlv_t dl_rs_tx_power;
-	nfapi_uint16_tlv_t received_interference_power;
-	nfapi_uint16_tlv_t thermal_noise_power;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_measurement_request_t;
-
-#define NFAPI_MEASUREMENT_REQUEST_DL_RS_XTX_POWER_TAG 0x1004
-#define NFAPI_MEASUREMENT_REQUEST_RECEIVED_INTERFERENCE_POWER_TAG 0x1005
-#define NFAPI_MEASUREMENT_REQUEST_THERMAL_NOISE_POWER_TAG 0x1006
-
-
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t number_of_resource_blocks;
-	int16_t received_interference_power[NFAPI_MAX_RECEIVED_INTERFERENCE_POWER_RESULTS];
-} nfapi_received_interference_power_measurement_t;
-
-typedef struct {
-	nfapi_p4_p5_message_header_t header;
-	uint32_t error_code;
-	nfapi_int16_tlv_t dl_rs_tx_power_measurement;
-	nfapi_received_interference_power_measurement_t received_interference_power_measurement;
-	nfapi_int16_tlv_t thermal_noise_power_measurement;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_measurement_response_t;
-
-#define NFAPI_MEASUREMENT_RESPONSE_DL_RS_POWER_MEASUREMENT_TAG 0x1007
-#define NFAPI_MEASUREMENT_RESPONSE_RECEIVED_INTERFERENCE_POWER_MEASUREMENT_TAG 0x1008
-#define NFAPI_MEASUREMENT_RESPONSE_THERMAL_NOISE_MEASUREMENT_TAG 0x1009
-
-// P7 Sub Structures
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t dci_format;
-	uint8_t cce_idx;
-	uint8_t aggregation_level;
-	uint16_t rnti;
-	uint8_t resource_allocation_type;
-	uint8_t virtual_resource_block_assignment_flag;
-	uint32_t resource_block_coding;
-	uint8_t mcs_1;
-	uint8_t redundancy_version_1;
-	uint8_t new_data_indicator_1;
-	uint8_t transport_block_to_codeword_swap_flag;
-	uint8_t mcs_2;
-	uint8_t redundancy_version_2;
-	uint8_t new_data_indicator_2;
-	uint8_t harq_process;
-	uint8_t tpmi;
-	uint8_t pmi;
-	uint8_t precoding_information;
-	uint8_t tpc;
-	uint8_t downlink_assignment_index;
-	uint8_t ngap;
-	uint8_t transport_block_size_index;
-	uint8_t downlink_power_offset;
-	uint8_t allocate_prach_flag;
-	uint8_t preamble_index;
-	uint8_t prach_mask_index;
-	uint8_t rnti_type;
-	uint16_t transmission_power;
-} nfapi_dl_config_dci_dl_pdu_rel8_t;
-#define NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL8_TAG 0x2001
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t mcch_flag;
-	uint8_t mcch_change_notification;
-	uint8_t scrambling_identity;
-} nfapi_dl_config_dci_dl_pdu_rel9_t;
-#define NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL9_TAG 0x2002
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t cross_carrier_scheduling_flag;
-	uint8_t carrier_indicator;
-	uint8_t srs_flag;
-	uint8_t srs_request;
-	uint8_t antenna_ports_scrambling_and_layers;
-	uint8_t total_dci_length_including_padding;
-	uint8_t n_dl_rb;
-} nfapi_dl_config_dci_dl_pdu_rel10_t;
-#define NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL10_TAG 0x2003
-
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t harq_ack_resource_offset;
-	uint8_t pdsch_re_mapping_quasi_co_location_indicator;
-} nfapi_dl_config_dci_dl_pdu_rel11_t;
-
-#define NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL11_TAG 0x2039
-
-
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t primary_cell_type;
-	uint8_t ul_dl_configuration_flag;
-	uint8_t number_ul_dl_configurations;
-	uint8_t ul_dl_configuration_indication[NFAPI_MAX_UL_DL_CONFIGURATIONS];
-} nfapi_dl_config_dci_dl_pdu_rel12_t;
-
-#define NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL12_TAG 0x203a
-
-
-
-typedef struct {
-	uint8_t subband_index;
-	uint8_t scheduled_ues;
-	uint16_t precoding_value[NFAPI_MAX_NUM_PHYSICAL_ANTENNAS][NFAPI_MAX_NUM_SCHEDULED_UES];
-} nfapi_dl_config_dci_dl_tpm_subband_info_t;
-
-typedef struct {
-	uint8_t num_prb_per_subband;
-	uint8_t number_of_subbands;
-	uint8_t num_antennas;
-	nfapi_dl_config_dci_dl_tpm_subband_info_t subband_info[NFAPI_MAX_NUM_SUBBANDS];
-} nfapi_dl_config_dci_dl_tpm_t;
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t laa_end_partial_sf_flag;
-	uint8_t laa_end_partial_sf_configuration;
-	uint8_t initial_lbt_sf;
-	uint8_t codebook_size_determination;
-	uint8_t drms_table_flag;
-	uint8_t tpm_struct_flag;
-	nfapi_dl_config_dci_dl_tpm_t tpm;
-} nfapi_dl_config_dci_dl_pdu_rel13_t;
-
-#define NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL13_TAG 0x203b
-
-typedef struct {
-	nfapi_dl_config_dci_dl_pdu_rel8_t dci_dl_pdu_rel8;
-	nfapi_dl_config_dci_dl_pdu_rel9_t dci_dl_pdu_rel9;
-	nfapi_dl_config_dci_dl_pdu_rel10_t dci_dl_pdu_rel10;
-	nfapi_dl_config_dci_dl_pdu_rel11_t dci_dl_pdu_rel11;
-	nfapi_dl_config_dci_dl_pdu_rel12_t dci_dl_pdu_rel12;
-	nfapi_dl_config_dci_dl_pdu_rel13_t dci_dl_pdu_rel13;
-} nfapi_dl_config_dci_dl_pdu;
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t length;
-	uint16_t pdu_index;
-	uint16_t transmission_power;
-} nfapi_dl_config_bch_pdu_rel8_t;
-#define NFAPI_DL_CONFIG_REQUEST_BCH_PDU_REL8_TAG 0x2004
-
-typedef struct {
-	nfapi_dl_config_bch_pdu_rel8_t bch_pdu_rel8;
-} nfapi_dl_config_bch_pdu;
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t length;
-	uint16_t pdu_index;
-	uint16_t rnti;
-	uint8_t resource_allocation_type;
-	uint32_t resource_block_coding;
-	uint8_t modulation;
-	uint16_t transmission_power;
-	uint16_t mbsfn_area_id;
-} nfapi_dl_config_mch_pdu_rel8_t;
-#define NFAPI_DL_CONFIG_REQUEST_MCH_PDU_REL8_TAG 0x2005
-
-typedef struct {
-	nfapi_dl_config_mch_pdu_rel8_t mch_pdu_rel8;
-} nfapi_dl_config_mch_pdu;
-
-
-typedef struct {
-	uint8_t subband_index;
-	uint8_t num_antennas;
-	uint16_t bf_value[NFAPI_MAX_NUM_ANTENNAS];
-} nfapi_bf_vector_t;
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t length;
-	uint16_t pdu_index;
-	uint16_t rnti;
-	uint8_t resource_allocation_type;
-	uint8_t virtual_resource_block_assignment_flag;
-	uint32_t resource_block_coding;
-	uint8_t modulation;
-	uint8_t redundancy_version;
-	uint8_t transport_blocks;
-	uint8_t transport_block_to_codeword_swap_flag;
-	uint8_t transmission_scheme;
-	uint8_t number_of_layers;
-	uint8_t number_of_subbands;
-	uint8_t codebook_index[NFAPI_MAX_NUM_SUBBANDS];
-	uint8_t ue_category_capacity;
-	uint8_t pa;
-	uint8_t delta_power_offset_index;
-	uint8_t ngap;
-	uint8_t nprb;
-	uint8_t transmission_mode;
-	uint8_t num_bf_prb_per_subband;
-	uint8_t num_bf_vector;
-	nfapi_bf_vector_t bf_vector[NFAPI_MAX_BF_VECTORS];
-} nfapi_dl_config_dlsch_pdu_rel8_t;
-#define NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL8_TAG 0x2006
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t nscid;
-} nfapi_dl_config_dlsch_pdu_rel9_t;
-#define NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL9_TAG 0x2007
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t csi_rs_flag;
-	uint8_t csi_rs_resource_config_r10;
-	uint16_t csi_rs_zero_tx_power_resource_config_bitmap_r10;
-	uint8_t csi_rs_number_nzp_configuration;
-	uint8_t csi_rs_resource_config[NFAPI_MAX_CSI_RS_RESOURCE_CONFIG];
-	uint8_t pdsch_start;
-} nfapi_dl_config_dlsch_pdu_rel10_t;
-#define NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL10_TAG 0x2008
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t drms_config_flag;
-	uint16_t drms_scrambling;
-	uint8_t csi_config_flag;
-	uint16_t csi_scrambling;
-	uint8_t pdsch_re_mapping_flag;
-	uint8_t pdsch_re_mapping_atenna_ports;
-	uint8_t pdsch_re_mapping_freq_shift;
-} nfapi_dl_config_dlsch_pdu_rel11_t;
-#define NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL11_TAG 0x203C
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t altcqi_table_r12;
-	uint8_t maxlayers;
-	uint8_t n_dl_harq;
-} nfapi_dl_config_dlsch_pdu_rel12_t;
-#define NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL12_TAG 0x203D
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t dwpts_symbols;
-	uint8_t initial_lbt_sf;
-	uint8_t ue_type;
-	uint8_t pdsch_payload_type;
-	uint16_t initial_transmission_sf_io;
-	uint8_t drms_table_flag;
-} nfapi_dl_config_dlsch_pdu_rel13_t;
-#define NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL13_TAG 0x203E
-
-typedef struct {
-	nfapi_dl_config_dlsch_pdu_rel8_t dlsch_pdu_rel8;
-	nfapi_dl_config_dlsch_pdu_rel9_t dlsch_pdu_rel9;
-	nfapi_dl_config_dlsch_pdu_rel10_t dlsch_pdu_rel10;
-	nfapi_dl_config_dlsch_pdu_rel11_t dlsch_pdu_rel11;
-	nfapi_dl_config_dlsch_pdu_rel12_t dlsch_pdu_rel12;
-	nfapi_dl_config_dlsch_pdu_rel13_t dlsch_pdu_rel13;
-} nfapi_dl_config_dlsch_pdu;
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t length;
-	uint16_t pdu_index;
-	uint16_t p_rnti;
-	uint8_t resource_allocation_type;
-	uint8_t virtual_resource_block_assignment_flag;
-	uint32_t resource_block_coding;
-	uint8_t mcs;
-	uint8_t redundancy_version;
-	uint8_t number_of_transport_blocks;
-	uint8_t transport_block_to_codeword_swap_flag;
-	uint8_t transmission_scheme;
-	uint8_t number_of_layers;
-	uint8_t codebook_index;
-	uint8_t ue_category_capacity;
-	uint8_t pa;
-	uint16_t transmission_power;
-	uint8_t nprb;
-	uint8_t ngap;
-} nfapi_dl_config_pch_pdu_rel8_t;
-#define NFAPI_DL_CONFIG_REQUEST_PCH_PDU_REL8_TAG 0x2009
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t ue_mode;
-	uint16_t initial_transmission_sf_io;
-} nfapi_dl_config_pch_pdu_rel13_t;
-#define NFAPI_DL_CONFIG_REQUEST_PCH_PDU_REL13_TAG 0x203F
-
-typedef struct {
-	nfapi_dl_config_pch_pdu_rel8_t pch_pdu_rel8;
-	nfapi_dl_config_pch_pdu_rel13_t pch_pdu_rel13;
-} nfapi_dl_config_pch_pdu;
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t transmission_power;
-	uint8_t prs_bandwidth;
-	uint8_t prs_cyclic_prefix_type;
-	uint8_t prs_muting;
-} nfapi_dl_config_prs_pdu_rel9_t;
-#define NFAPI_DL_CONFIG_REQUEST_PRS_PDU_REL9_TAG 0x200A
-
-typedef struct {
-	nfapi_dl_config_prs_pdu_rel9_t prs_pdu_rel9;
-} nfapi_dl_config_prs_pdu;
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t csi_rs_antenna_port_count_r10;
-	uint8_t csi_rs_resource_config_r10;
-	uint16_t transmission_power;
-	uint16_t csi_rs_zero_tx_power_resource_config_bitmap_r10;
-	uint8_t csi_rs_number_of_nzp_configuration;
-	uint8_t csi_rs_resource_config[NFAPI_MAX_CSI_RS_RESOURCE_CONFIG];
-} nfapi_dl_config_csi_rs_pdu_rel10_t;
-#define NFAPI_DL_CONFIG_REQUEST_CSI_RS_PDU_REL10_TAG 0x200B
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t csi_rs_class;
-	uint8_t cdm_type;
-	uint8_t num_bf_vector;
-	struct {
-		uint8_t csi_rs_resource_index;
-		uint16_t bf_value[NFAPI_MAX_ANTENNA_PORT_COUNT];
-	} bf_vector[NFAPI_MAX_BF_VECTORS];
-
-}nfapi_dl_config_csi_rs_pdu_rel13_t;
-#define NFAPI_DL_CONFIG_REQUEST_CSI_RS_PDU_REL13_TAG 0x2040
-
-typedef struct {
-	nfapi_dl_config_csi_rs_pdu_rel10_t csi_rs_pdu_rel10;
-	nfapi_dl_config_csi_rs_pdu_rel13_t csi_rs_pdu_rel13;
-} nfapi_dl_config_csi_rs_pdu;
-
-#define NFAPI_DL_CONFIG_REQUEST_EPDCCH_PDU_REL8_TAG 0x2001
-#define NFAPI_DL_CONFIG_REQUEST_EPDCCH_PDU_REL9_TAG 0x2002
-#define NFAPI_DL_CONFIG_REQUEST_EPDCCH_PDU_REL10_TAG 0x2003
-#define NFAPI_DL_CONFIG_REQUEST_EPDCCH_PDU_REL11_TAG 0x2039
-#define NFAPI_DL_CONFIG_REQUEST_EPDCCH_PDU_REL12_TAG 0x203a
-#define NFAPI_DL_CONFIG_REQUEST_EPDCCH_PDU_REL13_TAG 0x203b
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t epdcch_resource_assignment_flag;
-	uint16_t epdcch_id;
-	uint8_t epdcch_start_symbol;
-	uint8_t epdcch_num_prb;
-	uint8_t epdcch_prb_index[NFAPI_MAX_EPDCCH_PRB];
-	nfapi_bf_vector_t bf_vector;
-} nfapi_dl_config_epdcch_parameters_rel11_t;
-#define NFAPI_DL_CONFIG_REQUEST_EPDCCH_PARAM_REL11_TAG 0x2041
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t dwpts_symbols;
-	uint8_t initial_lbt_sf;
-} nfapi_dl_config_epdcch_parameters_rel13_t;
-#define NFAPI_DL_CONFIG_REQUEST_EPDCCH_PARAM_REL13_TAG 0x2042
-
-typedef struct {
-	nfapi_dl_config_dci_dl_pdu_rel8_t			epdcch_pdu_rel8;
-	nfapi_dl_config_dci_dl_pdu_rel9_t			epdcch_pdu_rel9;
-	nfapi_dl_config_dci_dl_pdu_rel10_t			epdcch_pdu_rel10;
-	nfapi_dl_config_dci_dl_pdu_rel11_t			epdcch_pdu_rel11;
-	nfapi_dl_config_dci_dl_pdu_rel12_t			epdcch_pdu_rel12;
-	nfapi_dl_config_dci_dl_pdu_rel13_t			epdcch_pdu_rel13;
-	nfapi_dl_config_epdcch_parameters_rel11_t	epdcch_params_rel11;
-	nfapi_dl_config_epdcch_parameters_rel13_t	epdcch_params_rel13;
-} nfapi_dl_config_epdcch_pdu;
-
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t mpdcch_narrow_band;
-	uint8_t number_of_prb_pairs;
-	uint8_t resource_block_assignment;
-	uint8_t mpdcch_tansmission_type;
-	uint8_t start_symbol;
-	uint8_t ecce_index;
-	uint8_t aggregation_level;
-	uint8_t rnti_type;
-	uint16_t rnti;
-	uint8_t ce_mode;
-	uint16_t drms_scrambling_init;
-	uint16_t initial_transmission_sf_io;
-	uint16_t transmission_power;
-	uint8_t dci_format;
-	uint16_t resource_block_coding;
-	uint8_t mcs;
-	uint8_t pdsch_reptition_levels;
-	uint8_t redundancy_version;
-	uint8_t new_data_indicator;
-	uint8_t harq_process;
-	uint8_t tpmi_length;
-	uint8_t tpmi;
-	uint8_t pmi_flag;
-	uint8_t pmi;
-	uint8_t harq_resource_offset;
-	uint8_t dci_subframe_repetition_number;
-	uint8_t tpc;
-	uint8_t downlink_assignment_index_length;
-	uint8_t downlink_assignment_index;
-	uint8_t allocate_prach_flag;
-	uint8_t preamble_index;
-	uint8_t prach_mask_index;
-	uint8_t starting_ce_level;
-	uint8_t srs_request;
-	uint8_t antenna_ports_and_scrambling_identity_flag;
-	uint8_t antenna_ports_and_scrambling_identity;
-	uint8_t frequency_hopping_enabled_flag;
-	uint8_t paging_direct_indication_differentiation_flag;
-	uint8_t direct_indication;
-	uint8_t total_dci_length_including_padding;
-	uint8_t number_of_tx_antenna_ports;
-	uint16_t precoding_value[NFAPI_MAX_TX_PHYSICAL_ANTENNA_PORTS];
-} nfapi_dl_config_mpdcch_pdu_rel13_t;
-#define NFAPI_DL_CONFIG_REQUEST_MPDCCH_PDU_REL13_TAG 0x205B
-
-
-typedef struct {
-	nfapi_dl_config_mpdcch_pdu_rel13_t mpdcch_pdu_rel13;
-} nfapi_dl_config_mpdcch_pdu;
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t length;
-	uint16_t pdu_index;
-	uint16_t transmission_power;
-	uint16_t hyper_sfn_2_lsbs;
-} nfapi_dl_config_nbch_pdu_rel13_t;
-
-#define NFAPI_DL_CONFIG_REQUEST_NBCH_PDU_REL13_TAG 0x205C
-
-typedef struct {
-	nfapi_dl_config_nbch_pdu_rel13_t nbch_pdu_rel13;
-} nfapi_dl_config_nbch_pdu;
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t length;
-	uint16_t pdu_index;
-	uint8_t ncce_index;
-	uint8_t aggregation_level;
-	uint8_t start_symbol;
-	uint8_t rnti_type;
-	uint16_t rnti;
-	uint8_t scrambling_reinitialization_batch_index;
-	uint8_t nrs_antenna_ports_assumed_by_the_ue;
-	uint8_t dci_format;
-	uint8_t scheduling_delay;
-	uint8_t resource_assignment;
-	uint8_t repetition_number;
-	uint8_t mcs;
-	uint8_t new_data_indicator;
-	uint8_t harq_ack_resource;
-	uint8_t npdcch_order_indication;
-	uint8_t starting_number_of_nprach_repetitions;
-	uint8_t subcarrier_indication_of_nprach;
-	uint8_t paging_direct_indication_differentation_flag;
-	uint8_t direct_indication;
-	uint8_t dci_subframe_repetition_number;
-	uint8_t total_dci_length_including_padding;
-} nfapi_dl_config_npdcch_pdu_rel13_t;
-
-#define NFAPI_DL_CONFIG_REQUEST_NPDCCH_PDU_REL13_TAG 0x205D
-
-typedef struct {
-	nfapi_dl_config_npdcch_pdu_rel13_t npdcch_pdu_rel13;
-} nfapi_dl_config_npdcch_pdu;
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t length;
-	uint16_t pdu_index;
-	uint8_t start_symbol;
-	uint8_t rnti_type;
-	uint16_t rnti;
-	uint16_t resource_assignment;
-	uint16_t repetition_number;
-	uint8_t modulation;
-	uint8_t number_of_subframes_for_resource_assignment;
-	uint8_t scrambling_sequence_initialization_cinit;
-	uint16_t sf_idx;
-	uint8_t nrs_antenna_ports_assumed_by_the_ue;
-} nfapi_dl_config_ndlsch_pdu_rel13_t;
-
-#define NFAPI_DL_CONFIG_REQUEST_NDLSCH_PDU_REL13_TAG 0x205E
-
-typedef struct {
-	nfapi_dl_config_ndlsch_pdu_rel13_t ndlsch_pdu_rel13;
-} nfapi_dl_config_ndlsch_pdu;
-
-
-typedef struct {
-	uint8_t pdu_type;
-	uint8_t pdu_size;
-	union {
-		nfapi_dl_config_dci_dl_pdu	dci_dl_pdu;
-		nfapi_dl_config_bch_pdu		bch_pdu;
-		nfapi_dl_config_mch_pdu		mch_pdu;
-		nfapi_dl_config_dlsch_pdu	dlsch_pdu;
-		nfapi_dl_config_pch_pdu		pch_pdu;
-		nfapi_dl_config_prs_pdu		prs_pdu;
-		nfapi_dl_config_csi_rs_pdu	csi_rs_pdu;
-		nfapi_dl_config_epdcch_pdu	epdcch_pdu;
-		nfapi_dl_config_mpdcch_pdu	mpdcch_pdu;
-		nfapi_dl_config_nbch_pdu	nbch_pdu;
-		nfapi_dl_config_npdcch_pdu	npdcch_pdu;
-		nfapi_dl_config_ndlsch_pdu	ndlsch_pdu;
-	};
-} nfapi_dl_config_request_pdu_t;
-
-#define NFAPI_DL_CONFIG_MAX_PDU 100
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t number_pdcch_ofdm_symbols;
-	uint8_t number_dci;
-	uint16_t number_pdu;
-	uint8_t number_pdsch_rnti;
-	uint16_t transmission_power_pcfich;
-	nfapi_dl_config_request_pdu_t* dl_config_pdu_list;
-} nfapi_dl_config_request_body_t;
-#define NFAPI_DL_CONFIG_REQUEST_BODY_TAG 0x2000
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint32_t handle;
-	uint16_t size;
-	uint16_t rnti;
-	uint8_t resource_block_start;
-	uint8_t number_of_resource_blocks;
-	uint8_t modulation_type;
-	uint8_t cyclic_shift_2_for_drms;
-	uint8_t frequency_hopping_enabled_flag;
-	uint8_t frequency_hopping_bits;
-	uint8_t new_data_indication;
-	uint8_t redundancy_version;
-	uint8_t harq_process_number;
-	uint8_t ul_tx_mode;
-	uint8_t current_tx_nb;
-	uint8_t n_srs;
-} nfapi_ul_config_ulsch_pdu_rel8_t;
-#define NFAPI_UL_CONFIG_REQUEST_ULSCH_PDU_REL8_TAG 0x200D
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t resource_allocation_type;
-	uint32_t resource_block_coding;
-	uint8_t transport_blocks;
-	uint8_t transmission_scheme;
-	uint8_t number_of_layers;
-	uint8_t codebook_index;
-	uint8_t disable_sequence_hopping_flag;
-} nfapi_ul_config_ulsch_pdu_rel10_t;
-#define NFAPI_UL_CONFIG_REQUEST_ULSCH_PDU_REL10_TAG 0x200E
-
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t virtual_cell_id_enabled_flag;
-	uint16_t npusch_identity;
-	uint8_t dmrs_config_flag;
-	uint16_t ndmrs_csh_identity;
-} nfapi_ul_config_ulsch_pdu_rel11_t;
-
-#define NFAPI_UL_CONFIG_REQUEST_ULSCH_PDU_REL11_TAG 0x2043
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t  ue_type;
-	uint16_t total_number_of_repetitions;
-	uint16_t repetition_number;
-	uint16_t initial_transmission_sf_io;
-	uint8_t  empty_symbols_due_to_re_tunning;
-} nfapi_ul_config_ulsch_pdu_rel13_t;
-#define NFAPI_UL_CONFIG_REQUEST_ULSCH_PDU_REL13_TAG 0x2044
-
-typedef struct {
-	nfapi_ul_config_ulsch_pdu_rel8_t ulsch_pdu_rel8;
-	nfapi_ul_config_ulsch_pdu_rel10_t ulsch_pdu_rel10;
-	nfapi_ul_config_ulsch_pdu_rel11_t ulsch_pdu_rel11;
-	nfapi_ul_config_ulsch_pdu_rel13_t ulsch_pdu_rel13;
-} nfapi_ul_config_ulsch_pdu;
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t dl_cqi_pmi_size_rank_1;
-	uint8_t dl_cqi_pmi_size_rank_greater_1;
-	uint8_t ri_size;
-	uint8_t delta_offset_cqi;
-	uint8_t delta_offset_ri;
-} nfapi_ul_config_cqi_ri_information_rel8_t;
-#define NFAPI_UL_CONFIG_REQUEST_CQI_RI_INFORMATION_REL8_TAG 0x2010
-
-typedef struct {
-	uint8_t dl_cqi_pmi_ri_size;
-	uint8_t control_type;
-} nfapi_ul_config_periodic_cqi_pmi_ri_report_t;
-
-typedef struct {
-	uint8_t number_of_cc;
-	struct {
-		uint8_t ri_size;
-		uint8_t dl_cqi_pmi_size[8];
-	} cc[NFAPI_MAX_CC];
-} nfapi_ul_config_aperiodic_cqi_pmi_ri_report_t;
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t report_type;
-	uint8_t delta_offset_cqi;
-	uint8_t delta_offset_ri;
-	union {
-		nfapi_ul_config_periodic_cqi_pmi_ri_report_t periodic_cqi_pmi_ri_report;
-		nfapi_ul_config_aperiodic_cqi_pmi_ri_report_t aperiodic_cqi_pmi_ri_report;
-	};
-} nfapi_ul_config_cqi_ri_information_rel9_t;
-#define NFAPI_UL_CONFIG_REQUEST_CQI_RI_INFORMATION_REL9_TAG 0x2011
-
-typedef struct {
-	uint16_t dl_cqi_pmi_ri_size_2;
-} nfapi_ul_config_periodic_cqi_pmi_ri_report_re13_t;
-
-typedef struct {
-} nfapi_ul_config_aperiodic_cqi_pmi_ri_report_re13_t;
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t report_type; // Convience parameter, not sent on the wire
-	union {
-		nfapi_ul_config_periodic_cqi_pmi_ri_report_re13_t periodic_cqi_pmi_ri_report;
-		nfapi_ul_config_aperiodic_cqi_pmi_ri_report_re13_t aperiodic_cqi_pmi_ri_report;
-	};
-} nfapi_ul_config_cqi_ri_information_rel13_t;
-#define NFAPI_UL_CONFIG_REQUEST_CQI_RI_INFORMATION_REL13_TAG 0x2045
-
-typedef struct {
-	nfapi_ul_config_cqi_ri_information_rel8_t cqi_ri_information_rel8;
-	nfapi_ul_config_cqi_ri_information_rel9_t cqi_ri_information_rel9;
-	nfapi_ul_config_cqi_ri_information_rel13_t cqi_ri_information_rel13;
-} nfapi_ul_config_cqi_ri_information;
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t harq_size;
-	uint8_t delta_offset_harq;
-	uint8_t ack_nack_mode;
-} nfapi_ul_config_ulsch_harq_information_rel10_t;
-#define NFAPI_UL_CONFIG_REQUEST_ULSCH_HARQ_INFORMATION_REL10_TAG 0x2012
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t harq_size_2;
-	uint8_t delta_offset_harq_2;
-} nfapi_ul_config_ulsch_harq_information_rel13_t;
-#define NFAPI_UL_CONFIG_REQUEST_ULSCH_HARQ_INFORMATION_REL13_TAG 0x2046
-
-typedef struct {
-	nfapi_ul_config_ulsch_harq_information_rel10_t harq_information_rel10;
-	nfapi_ul_config_ulsch_harq_information_rel13_t harq_information_rel13;
-} nfapi_ul_config_ulsch_harq_information;
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t n_srs_initial;
-	uint8_t initial_number_of_resource_blocks;
-} nfapi_ul_config_initial_transmission_parameters_rel8_t;
-#define NFAPI_UL_CONFIG_REQUEST_INITIAL_TRANSMISSION_PARAMETERS_REL8_TAG 0x200F
-
-typedef struct {
-	nfapi_ul_config_initial_transmission_parameters_rel8_t initial_transmission_parameters_rel8;
-} nfapi_ul_config_initial_transmission_parameters;
-
-typedef struct {
-	nfapi_ul_config_ulsch_pdu ulsch_pdu;
-	nfapi_ul_config_cqi_ri_information cqi_ri_information;
-	nfapi_ul_config_initial_transmission_parameters initial_transmission_parameters;
-} nfapi_ul_config_ulsch_cqi_ri_pdu;
-
-typedef struct {
-	nfapi_ul_config_ulsch_pdu ulsch_pdu;
-	nfapi_ul_config_ulsch_harq_information harq_information;
-	nfapi_ul_config_initial_transmission_parameters initial_transmission_parameters;
-} nfapi_ul_config_ulsch_harq_pdu;
-
-typedef struct {
-	nfapi_ul_config_ulsch_pdu ulsch_pdu;
-	nfapi_ul_config_cqi_ri_information cqi_ri_information;
-	nfapi_ul_config_ulsch_harq_information harq_information;
-	nfapi_ul_config_initial_transmission_parameters initial_transmission_parameters;
-} nfapi_ul_config_ulsch_cqi_harq_ri_pdu;
-
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint32_t handle;
-	uint16_t rnti;
-} nfapi_ul_config_ue_information_rel8_t;
-#define NFAPI_UL_CONFIG_REQUEST_UE_INFORMATION_REL8_TAG 0x2013
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t virtual_cell_id_enabled_flag;
-	uint16_t npusch_identity;
-} nfapi_ul_config_ue_information_rel11_t;
-
-#define NFAPI_UL_CONFIG_REQUEST_UE_INFORMATION_REL11_TAG 0x2047
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t  ue_type;
-	uint8_t  empty_symbols;
-	uint16_t total_number_of_repetitions;
-	uint16_t repetition_number;
-} nfapi_ul_config_ue_information_rel13_t;
-
-#define NFAPI_UL_CONFIG_REQUEST_UE_INFORMATION_REL13_TAG 0x2048
-
-typedef struct {
-	nfapi_ul_config_ue_information_rel8_t ue_information_rel8;
-	nfapi_ul_config_ue_information_rel11_t ue_information_rel11;
-	nfapi_ul_config_ue_information_rel13_t ue_information_rel13;
-} nfapi_ul_config_ue_information;
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t pucch_index;
-	uint8_t dl_cqi_pmi_size;
-} nfapi_ul_config_cqi_information_rel8_t;
-#define NFAPI_UL_CONFIG_REQUEST_CQI_INFORMATION_REL8_TAG 0x2014
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t number_of_pucch_resource;
-	uint16_t pucch_index_p1;
-} nfapi_ul_config_cqi_information_rel10_t;
-#define NFAPI_UL_CONFIG_REQUEST_CQI_INFORMATION_REL10_TAG 0x2015
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t csi_mode;
-	uint16_t dl_cqi_pmi_size_2;
-	uint8_t starting_prb;
-	uint8_t n_prb;
-	uint8_t cdm_index;
-	uint8_t n_srs;
-} nfapi_ul_config_cqi_information_rel13_t;
-#define NFAPI_UL_CONFIG_REQUEST_CQI_INFORMATION_REL13_TAG 0x2049
-
-typedef struct {
-	nfapi_ul_config_cqi_information_rel8_t cqi_information_rel8;
-	nfapi_ul_config_cqi_information_rel10_t cqi_information_rel10;
-	nfapi_ul_config_cqi_information_rel13_t cqi_information_rel13;
-} nfapi_ul_config_cqi_information;
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t pucch_index;
-} nfapi_ul_config_sr_information_rel8_t;
-#define NFAPI_UL_CONFIG_REQUEST_SR_INFORMATION_REL8_TAG 0x2016
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t number_of_pucch_resources;
-	uint16_t pucch_index_p1;
-} nfapi_ul_config_sr_information_rel10_t;
-#define NFAPI_UL_CONFIG_REQUEST_SR_INFORMATION_REL10_TAG 0x2017
-
-typedef struct { 
-	nfapi_ul_config_sr_information_rel8_t sr_information_rel8;
-	nfapi_ul_config_sr_information_rel10_t sr_information_rel10;
-} nfapi_ul_config_sr_information;
-
-typedef struct { 
-	nfapi_tl_t tl;
-	uint8_t harq_size;
-	uint8_t ack_nack_mode;
-	uint8_t number_of_pucch_resources;
-	uint16_t n_pucch_1_0;
-	uint16_t n_pucch_1_1;
-	uint16_t n_pucch_1_2;
-	uint16_t n_pucch_1_3;
-} nfapi_ul_config_harq_information_rel10_tdd_t;
-#define NFAPI_UL_CONFIG_REQUEST_HARQ_INFORMATION_REL10_TDD_TAG 0x2018
-
-
-typedef struct { 
-	nfapi_tl_t tl;
-	uint16_t n_pucch_1_0;
-	uint8_t harq_size;
-} nfapi_ul_config_harq_information_rel8_fdd_t;
-#define NFAPI_UL_CONFIG_REQUEST_HARQ_INFORMATION_REL8_FDD_TAG 0x2019
-
-typedef struct { 
-	nfapi_tl_t tl;
-	uint8_t harq_size;
-	uint8_t ack_nack_mode;
-	uint8_t number_of_pucch_resources;
-	uint16_t n_pucch_1_0;
-	uint16_t n_pucch_1_1;
-	uint16_t n_pucch_1_2;
-	uint16_t n_pucch_1_3;
-} nfapi_ul_config_harq_information_rel9_fdd_t;
-#define NFAPI_UL_CONFIG_REQUEST_HARQ_INFORMATION_REL9_FDD_TAG 0x201a
-
-typedef struct { 
-	nfapi_tl_t tl;
-	uint8_t  num_ant_ports;
-	uint16_t n_pucch_2_0;
-	uint16_t n_pucch_2_1;
-	uint16_t n_pucch_2_2;
-	uint16_t n_pucch_2_3;	
-} nfapi_ul_config_harq_information_rel11_t;
-#define NFAPI_UL_CONFIG_REQUEST_HARQ_INFORMATION_REL11_TAG 0x204A
-
-typedef struct { 
-	nfapi_tl_t tl;
-	uint16_t  harq_size_2;
-	uint8_t starting_prb;
-	uint8_t n_prb;
-	uint8_t cdm_index;
-	uint8_t n_srs;
-} nfapi_ul_config_harq_information_rel13_t;
-#define NFAPI_UL_CONFIG_REQUEST_HARQ_INFORMATION_REL13_TAG 0x204B
-
-typedef struct {
-	nfapi_ul_config_harq_information_rel10_tdd_t harq_information_rel10_tdd;
-	nfapi_ul_config_harq_information_rel8_fdd_t harq_information_rel8_fdd;
-	nfapi_ul_config_harq_information_rel9_fdd_t harq_information_rel9_fdd;
-	nfapi_ul_config_harq_information_rel11_t harq_information_rel11;
-	nfapi_ul_config_harq_information_rel13_t harq_information_rel13;
-} nfapi_ul_config_harq_information;
-
-typedef struct { 
-	nfapi_tl_t tl;
-	uint32_t handle;
-	uint16_t size;
-	uint16_t rnti;
-	uint8_t srs_bandwidth;
-	uint8_t frequency_domain_position;
-	uint8_t srs_hopping_bandwidth;
-	uint8_t transmission_comb;
-	uint16_t i_srs;
-	uint8_t sounding_reference_cyclic_shift;
-} nfapi_ul_config_srs_pdu_rel8_t;
-#define NFAPI_UL_CONFIG_REQUEST_SRS_PDU_REL8_TAG 0x201b
-
-typedef struct { 
-	nfapi_tl_t tl;
-	uint8_t antenna_port;
-} nfapi_ul_config_srs_pdu_rel10_t;
-#define NFAPI_UL_CONFIG_REQUEST_SRS_PDU_REL10_TAG 0x201c
-
-typedef struct { 
-	nfapi_tl_t tl;
-	uint8_t number_of_combs;
-} nfapi_ul_config_srs_pdu_rel13_t;
-#define NFAPI_UL_CONFIG_REQUEST_SRS_PDU_REL13_TAG 0x204c
-
-typedef struct {
-	nfapi_ul_config_srs_pdu_rel8_t srs_pdu_rel8;
-	nfapi_ul_config_srs_pdu_rel10_t srs_pdu_rel10;
-	nfapi_ul_config_srs_pdu_rel13_t srs_pdu_rel13;
-} nfapi_ul_config_srs_pdu;
-
-typedef struct {
-	nfapi_ul_config_ue_information ue_information;
-	nfapi_ul_config_cqi_information cqi_information;
-} nfapi_ul_config_uci_cqi_pdu;
-
-typedef struct {
-	nfapi_ul_config_ue_information ue_information;
-	nfapi_ul_config_sr_information sr_information;
-} nfapi_ul_config_uci_sr_pdu;
-
-typedef struct {
-	nfapi_ul_config_ue_information ue_information;
-	nfapi_ul_config_harq_information harq_information;
-} nfapi_ul_config_uci_harq_pdu;
-
-typedef struct {
-	nfapi_ul_config_ue_information ue_information;
-	nfapi_ul_config_sr_information sr_information;
-	nfapi_ul_config_harq_information harq_information;
-} nfapi_ul_config_uci_sr_harq_pdu;
-
-typedef struct {
-	nfapi_ul_config_ue_information ue_information;
-	nfapi_ul_config_cqi_information cqi_information;
-	nfapi_ul_config_harq_information harq_information;
-} nfapi_ul_config_uci_cqi_harq_pdu;
-
-typedef struct {
-	nfapi_ul_config_ue_information ue_information;
-	nfapi_ul_config_cqi_information cqi_information;
-	nfapi_ul_config_sr_information sr_information;
-} nfapi_ul_config_uci_cqi_sr_pdu;
-
-typedef struct {
-	nfapi_ul_config_ue_information ue_information;
-	nfapi_ul_config_cqi_information cqi_information;
-	nfapi_ul_config_sr_information sr_information;
-	nfapi_ul_config_harq_information harq_information;
-} nfapi_ul_config_uci_cqi_sr_harq_pdu;
-
-typedef struct {
-	nfapi_ul_config_ue_information ue_information;
-} nfapi_ul_config_harq_buffer_pdu;
-
-typedef struct {
-	nfapi_ul_config_ulsch_pdu ulsch_pdu;
-	nfapi_ul_config_cqi_information csi_information;
-} nfapi_ul_config_ulsch_uci_csi_pdu;
-
-typedef struct {
-	nfapi_ul_config_ulsch_pdu ulsch_pdu;
-	nfapi_ul_config_harq_information harq_information;
-} nfapi_ul_config_ulsch_uci_harq_pdu;
-
-typedef struct {
-	nfapi_ul_config_ulsch_pdu ulsch_pdu;
-	nfapi_ul_config_cqi_information csi_information;
-	nfapi_ul_config_harq_information harq_information;
-} nfapi_ul_config_ulsch_csi_uci_harq_pdu;
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t harq_ack_resource;
-} nfapi_ul_config_nb_harq_information_rel13_fdd_t;
-#define NFAPI_UL_CONFIG_REQUEST_NB_HARQ_INFORMATION_REL13_FDD_TAG 0x2061
-
-typedef struct {
-	nfapi_ul_config_nb_harq_information_rel13_fdd_t nb_harq_information_rel13_fdd;
-} nfapi_ul_config_nb_harq_information;
-
-typedef struct {
-	nfapi_tl_t tl;	
-	uint8_t nulsch_format;
-	uint32_t handle;
-	uint16_t size;
-	uint16_t rnti;
-	uint8_t subcarrier_indication;
-	uint8_t resource_assignment;
-	uint8_t mcs;
-	uint8_t redudancy_version;
-	uint8_t repetition_number;
-	uint8_t new_data_indication;
-	uint8_t n_srs;
-	uint16_t scrambling_sequence_initialization_cinit;
-	uint16_t sf_idx;
-	nfapi_ul_config_ue_information ue_information;
-	nfapi_ul_config_nb_harq_information nb_harq_information;
-} nfapi_ul_config_nulsch_pdu_rel13_t;
-#define NFAPI_UL_CONFIG_REQUEST_NULSCH_PDU_REL13_TAG 0x205F
-
-typedef struct {
-	nfapi_ul_config_nulsch_pdu_rel13_t nulsch_pdu_rel13;
-} nfapi_ul_config_nulsch_pdu;
-
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t nprach_config_0;
-	uint8_t nprach_config_1;
-	uint8_t nprach_config_2;
-} nfapi_ul_config_nrach_pdu_rel13_t;
-#define NFAPI_UL_CONFIG_REQUEST_NRACH_PDU_REL13_TAG 0x2067
-
-typedef struct {
-	nfapi_ul_config_nrach_pdu_rel13_t nrach_pdu_rel13;
-} nfapi_ul_config_nrach_pdu;
-
-typedef struct {
-	uint8_t pdu_type;
-	uint8_t pdu_size;
-	union {
-		nfapi_ul_config_ulsch_pdu				ulsch_pdu;
-		nfapi_ul_config_ulsch_cqi_ri_pdu		ulsch_cqi_ri_pdu;
-		nfapi_ul_config_ulsch_harq_pdu			ulsch_harq_pdu;
-		nfapi_ul_config_ulsch_cqi_harq_ri_pdu	ulsch_cqi_harq_ri_pdu;
-		nfapi_ul_config_uci_cqi_pdu				uci_cqi_pdu;
-		nfapi_ul_config_uci_sr_pdu				uci_sr_pdu;
-		nfapi_ul_config_uci_harq_pdu			uci_harq_pdu;
-		nfapi_ul_config_uci_sr_harq_pdu			uci_sr_harq_pdu;
-		nfapi_ul_config_uci_cqi_harq_pdu		uci_cqi_harq_pdu;
-		nfapi_ul_config_uci_cqi_sr_pdu			uci_cqi_sr_pdu;
-		nfapi_ul_config_uci_cqi_sr_harq_pdu		uci_cqi_sr_harq_pdu;
-		nfapi_ul_config_srs_pdu					srs_pdu;
-		nfapi_ul_config_harq_buffer_pdu			harq_buffer_pdu;
-		nfapi_ul_config_ulsch_uci_csi_pdu		ulsch_uci_csi_pdu;
-		nfapi_ul_config_ulsch_uci_harq_pdu		ulsch_uci_harq_pdu;
-		nfapi_ul_config_ulsch_csi_uci_harq_pdu	ulsch_csi_uci_harq_pdu;
-		nfapi_ul_config_nulsch_pdu				nulsch_pdu;
-		nfapi_ul_config_nrach_pdu				nrach_pdu;
-	};
-} nfapi_ul_config_request_pdu_t;
-
-#define NFAPI_UL_CONFIG_MAX_PDU 100
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t number_of_pdus;
-	uint8_t rach_prach_frequency_resources;
-	uint8_t srs_present;
-	nfapi_ul_config_request_pdu_t* ul_config_pdu_list;
-} nfapi_ul_config_request_body_t;
-#define NFAPI_UL_CONFIG_REQUEST_BODY_TAG 0x200C
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t resource_block_start;
-	uint8_t cyclic_shift_2_for_drms;
-	uint8_t hi_value;
-	uint8_t i_phich;
-	uint16_t transmission_power;
-} nfapi_hi_dci0_hi_pdu_rel8_t;
-#define NFAPI_HI_DCI0_REQUEST_HI_PDU_REL8_TAG 0x201e
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t flag_tb2;
-	uint8_t hi_value_2;
-} nfapi_hi_dci0_hi_pdu_rel10_t;
-#define NFAPI_HI_DCI0_REQUEST_HI_PDU_REL10_TAG 0x201f
-
-typedef struct {
-	nfapi_hi_dci0_hi_pdu_rel8_t		hi_pdu_rel8;
-	nfapi_hi_dci0_hi_pdu_rel10_t	hi_pdu_rel10;
-} nfapi_hi_dci0_hi_pdu;
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t dci_format;
-	uint8_t cce_index;
-	uint8_t aggregation_level;
-	uint16_t rnti;
-	uint8_t resource_block_start;
-	uint8_t number_of_resource_block;
-	uint8_t mcs_1;
-	uint8_t cyclic_shift_2_for_drms;
-	uint8_t frequency_hopping_enabled_flag;
-	uint8_t frequency_hopping_bits;
-	uint8_t new_data_indication_1;
-	uint8_t ue_tx_antenna_seleciton;
-	uint8_t tpc;
-	uint8_t cqi_csi_request;
-	uint8_t ul_index;
-	uint8_t dl_assignment_index;
-	uint32_t tpc_bitmap;
-	uint16_t transmission_power;
-} nfapi_hi_dci0_dci_pdu_rel8_t;
-#define NFAPI_HI_DCI0_REQUEST_DCI_PDU_REL8_TAG 0x2020
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t cross_carrier_scheduling_flag;
-	uint8_t carrier_indicator;
-	uint8_t size_of_cqi_csi_feild;
-	uint8_t srs_flag;
-	uint8_t srs_request;
-	uint8_t resource_allocation_flag;
-	uint8_t resource_allocation_type;
-	uint32_t resource_block_coding;
-	uint8_t mcs_2;
-	uint8_t new_data_indication_2;
-	uint8_t number_of_antenna_ports;
-	uint8_t tpmi;
-	uint8_t total_dci_length_including_padding;
-	uint8_t n_ul_rb;
-} nfapi_hi_dci0_dci_pdu_rel10_t;
-#define NFAPI_HI_DCI0_REQUEST_DCI_PDU_REL10_TAG 0x2021
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t pscch_resource;
-	uint8_t time_resource_pattern;
-} nfapi_hi_dci0_dci_pdu_rel12_t;
-
-#define NFAPI_HI_DCI0_REQUEST_DCI_PDU_REL12_TAG 0x204D
-
-typedef struct {
-	nfapi_hi_dci0_dci_pdu_rel8_t	dci_pdu_rel8;
-	nfapi_hi_dci0_dci_pdu_rel10_t	dci_pdu_rel10;
-	nfapi_hi_dci0_dci_pdu_rel12_t	dci_pdu_rel12;
-} nfapi_hi_dci0_dci_pdu;
-
-typedef nfapi_hi_dci0_dci_pdu_rel8_t nfapi_hi_dci0_epdcch_dci_pdu_rel8_t;
-#define NFAPI_HI_DCI0_REQUEST_EPDCCH_DCI_PDU_REL8_TAG 0x2020
-
-typedef nfapi_hi_dci0_dci_pdu_rel10_t nfapi_hi_dci0_epdcch_dci_pdu_rel10_t;
-#define NFAPI_HI_DCI0_REQUEST_EPDCCH_DCI_PDU_REL10_TAG 0x2021
-
-typedef nfapi_dl_config_epdcch_parameters_rel11_t nfapi_hi_dci0_epdcch_parameters_rel11_t;
-#define NFAPI_HI_DCI0_REQUEST_EPDCCH_PARAMETERS_REL11_TAG 0x2041
-
-typedef struct {
-	nfapi_hi_dci0_epdcch_dci_pdu_rel8_t		epdcch_dci_pdu_rel8;
-	nfapi_hi_dci0_epdcch_dci_pdu_rel10_t	epdcch_dci_pdu_rel10;
-	nfapi_hi_dci0_epdcch_parameters_rel11_t	epdcch_parameters_rel11;
-} nfapi_hi_dci0_epdcch_dci_pdu;
-
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t mpdcch_narrowband;
-	uint8_t number_of_prb_pairs;
-	uint8_t resource_block_assignment;
-	uint8_t mpdcch_transmission_type;
-	uint8_t start_symbol;
-	uint8_t ecce_index;
-	uint8_t aggreagation_level;
-	uint8_t rnti_type;
-	uint16_t rnti;
-	uint8_t ce_mode;
-	uint16_t drms_scrambling_init;
-	uint16_t initial_transmission_sf_io;
-	uint16_t transmission_power;
-	uint8_t dci_format;
-	uint8_t resource_block_start;
-	uint8_t number_of_resource_blocks;
-	uint8_t mcs;
-	uint8_t pusch_repetition_levels;
-	uint8_t frequency_hopping_flag;
-	uint8_t new_data_indication;
-	uint8_t harq_process;
-	uint8_t redudency_version;
-	uint8_t tpc;
-	uint8_t csi_request;
-	uint8_t ul_inex;
-	uint8_t dai_presence_flag;
-	uint8_t dl_assignment_index;
-	uint8_t srs_request;
-	uint8_t dci_subframe_repetition_number;
-	uint32_t tcp_bitmap;
-	uint8_t total_dci_length_include_padding;
-	uint8_t number_of_tx_antenna_ports;
-	uint16_t precoding_value[NFAPI_MAX_ANTENNA_PORT_COUNT];
-} nfapi_hi_dci0_mpdcch_dci_pdu_rel13_t;
-#define NFAPI_HI_DCI0_REQUEST_MPDCCH_DCI_PDU_REL13_TAG 0x204E
-
-typedef struct {
-	nfapi_hi_dci0_mpdcch_dci_pdu_rel13_t	mpdcch_dci_pdu_rel13;
-} nfapi_hi_dci0_mpdcch_dci_pdu;
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t ncce_index;
-	uint8_t aggregation_level;
-	uint8_t start_symbol;
-	uint16_t rnti;
-	uint8_t scrambling_reinitialization_batch_index;
-	uint8_t nrs_antenna_ports_assumed_by_the_ue;
-	uint8_t subcarrier_indication;
-	uint8_t resource_assignment;
-	uint8_t scheduling_delay;
-	uint8_t mcs;
-	uint8_t redudancy_version;
-	uint8_t repetition_number;
-	uint8_t new_data_indicator;
-	uint8_t dci_subframe_repetition_number;
-} nfapi_hi_dci0_npdcch_dci_pdu_rel13_t;
-
-#define NFAPI_HI_DCI0_REQUEST_NPDCCH_DCI_PDU_REL13_TAG 0x2062
-
-typedef struct {
-	nfapi_hi_dci0_npdcch_dci_pdu_rel13_t	npdcch_dci_pdu_rel13;
-} nfapi_hi_dci0_npdcch_dci_pdu;
-
-typedef struct {
-	uint8_t pdu_type;
-	uint8_t pdu_size;
-	union {
-		nfapi_hi_dci0_hi_pdu			hi_pdu;
-		nfapi_hi_dci0_dci_pdu			dci_pdu;
-		nfapi_hi_dci0_epdcch_dci_pdu	epdcch_dci_pdu;
-		nfapi_hi_dci0_mpdcch_dci_pdu	mpdcch_dci_pdu;
-		nfapi_hi_dci0_npdcch_dci_pdu	npdcch_dci_pdu;
-	};
-} nfapi_hi_dci0_request_pdu_t;
-
-#define NFAPI_HI_DCI0_MAX_PDU 100
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t sfnsf;
-	uint8_t number_of_dci;
-	uint8_t number_of_hi;
-	nfapi_hi_dci0_request_pdu_t* hi_dci0_pdu_list;
-} nfapi_hi_dci0_request_body_t;
-#define NFAPI_HI_DCI0_REQUEST_BODY_TAG 0x201D
-
-#define NFAPI_TX_MAX_SEGMENTS 32
-typedef struct {
-	uint16_t pdu_length;
-	uint16_t pdu_index;
-	uint8_t num_segments;
-	struct {
-		uint32_t segment_length;
-		uint8_t* segment_data;
-	} segments[NFAPI_TX_MAX_SEGMENTS];
-} nfapi_tx_request_pdu_t;
-
-#define NFAPI_TX_MAX_PDU 100
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t number_of_pdus;
-	nfapi_tx_request_pdu_t* tx_pdu_list;
-} nfapi_tx_request_body_t;
-#define NFAPI_TX_REQUEST_BODY_TAG 0x2022
-
-// P7 Message Structures
-typedef struct {
-	nfapi_p7_message_header_t header;
-	uint32_t t1;
-	int32_t delta_sfn_sf;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_dl_node_sync_t;
-
-typedef struct {
-	nfapi_p7_message_header_t header;
-	uint32_t t1;
-	uint32_t t2;
-	uint32_t t3;	
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_ul_node_sync_t;
-
-typedef struct {
-	nfapi_p7_message_header_t header;
-	uint32_t last_sfn_sf;
-	uint32_t time_since_last_timing_info;
-	uint32_t dl_config_jitter;
-	uint32_t tx_request_jitter;
-	uint32_t ul_config_jitter;
-	uint32_t hi_dci0_jitter;
-	int32_t dl_config_latest_delay;
-	int32_t tx_request_latest_delay;
-	int32_t ul_config_latest_delay;
-	int32_t hi_dci0_latest_delay;
-	int32_t dl_config_earliest_arrival;
-	int32_t tx_request_earliest_arrival;
-	int32_t ul_config_earliest_arrival;
-	int32_t hi_dci0_earliest_arrival;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_timing_info_t;
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint32_t handle;
-	uint16_t rnti;
-} nfapi_rx_ue_information;
-#define NFAPI_RX_UE_INFORMATION_TAG 0x2038
-
-typedef struct { 
-	uint8_t value_0;
-	uint8_t value_1;
-} nfapi_harq_indication_tdd_harq_data_bundling_t;
-
-typedef struct { 
-	uint8_t value_0;
-	uint8_t value_1;
-	uint8_t value_2;
-	uint8_t value_3;
-} nfapi_harq_indication_tdd_harq_data_multiplexing_t;
-
-typedef struct { 
-	uint8_t value_0;
-} nfapi_harq_indication_tdd_harq_data_special_bundling_t;
-
-typedef struct { 
-	uint8_t value_0;
-} nfapi_harq_indication_tdd_harq_data_t;
-
-typedef struct { 
-	nfapi_tl_t tl;
-	uint8_t mode;
-	uint8_t number_of_ack_nack;
-	union{
-		nfapi_harq_indication_tdd_harq_data_bundling_t			bundling;
-		nfapi_harq_indication_tdd_harq_data_multiplexing_t		multiplex;
-		nfapi_harq_indication_tdd_harq_data_special_bundling_t	special_bundling;
-	} harq_data;
-} nfapi_harq_indication_tdd_rel8_t;
-#define NFAPI_HARQ_INDICATION_TDD_REL8_TAG 0x2027
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t mode;
-	uint8_t number_of_ack_nack;
-	union{
-		nfapi_harq_indication_tdd_harq_data_t	bundling;
-		nfapi_harq_indication_tdd_harq_data_t	multiplex;
-		nfapi_harq_indication_tdd_harq_data_special_bundling_t	special_bundling;
-		nfapi_harq_indication_tdd_harq_data_t	channel_selection;
-		nfapi_harq_indication_tdd_harq_data_t	format_3;
-	} harq_data[NFAPI_MAX_NUMBER_ACK_NACK_TDD];
-} nfapi_harq_indication_tdd_rel9_t;
-#define NFAPI_HARQ_INDICATION_TDD_REL9_TAG 0x2028
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t mode;
-	uint16_t number_of_ack_nack;
-	union{
-		nfapi_harq_indication_tdd_harq_data_t					bundling;
-		nfapi_harq_indication_tdd_harq_data_t					multiplex;
-		nfapi_harq_indication_tdd_harq_data_special_bundling_t	special_bundling;
-		nfapi_harq_indication_tdd_harq_data_t					channel_selection;
-		nfapi_harq_indication_tdd_harq_data_t			format_3;
-		nfapi_harq_indication_tdd_harq_data_t			format_4;
-		nfapi_harq_indication_tdd_harq_data_t			format_5;
-	} harq_data[NFAPI_MAX_NUMBER_ACK_NACK_TDD];
-} nfapi_harq_indication_tdd_rel13_t;
-#define NFAPI_HARQ_INDICATION_TDD_REL13_TAG 0x204F
-
-typedef struct { 
-	nfapi_tl_t tl;
-	uint8_t harq_tb1;
-	uint8_t harq_tb2;
-} nfapi_harq_indication_fdd_rel8_t;
-#define NFAPI_HARQ_INDICATION_FDD_REL8_TAG 0x2029
-
-#define NFAPI_HARQ_ACK_NACK_REL9_MAX 10
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t mode;
-	uint8_t number_of_ack_nack;
-	uint8_t harq_tb_n[NFAPI_HARQ_ACK_NACK_REL9_MAX];
-} nfapi_harq_indication_fdd_rel9_t;
-#define NFAPI_HARQ_INDICATION_FDD_REL9_TAG 0x202a
-
-#define NFAPI_HARQ_ACK_NACK_REL13_MAX 22 // Need to check this max?
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t mode;
-	uint16_t number_of_ack_nack;
-	uint8_t harq_tb_n[NFAPI_HARQ_ACK_NACK_REL13_MAX];
-} nfapi_harq_indication_fdd_rel13_t;
-#define NFAPI_HARQ_INDICATION_FDD_REL13_TAG 0x2050
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t ul_cqi;
-	uint8_t channel;
-} nfapi_ul_cqi_information_t;
-#define NFAPI_UL_CQI_INFORMATION_TAG 0x2052
-
-// Only expect 1 harq_indication TLV.tag to be set
-// Would this be a better a an union, but not clear which combinations
-// are valid
-typedef struct {
-	uint16_t							instance_length;
-	nfapi_rx_ue_information				rx_ue_information;
-	nfapi_harq_indication_tdd_rel8_t	harq_indication_tdd_rel8;
-	nfapi_harq_indication_tdd_rel9_t	harq_indication_tdd_rel9;
-	nfapi_harq_indication_tdd_rel13_t	harq_indication_tdd_rel13;
-	nfapi_harq_indication_fdd_rel8_t	harq_indication_fdd_rel8;
-	nfapi_harq_indication_fdd_rel9_t	harq_indication_fdd_rel9;
-	nfapi_harq_indication_fdd_rel13_t	harq_indication_fdd_rel13;
-	nfapi_ul_cqi_information_t			ul_cqi_information;
-} nfapi_harq_indication_pdu_t;
-
-#define NFAPI_HARQ_IND_MAX_PDU 100
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t number_of_harqs;
-	nfapi_harq_indication_pdu_t* harq_pdu_list;
-} nfapi_harq_indication_body_t;
-#define NFAPI_HARQ_INDICATION_BODY_TAG 0x2026
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t crc_flag;
-} nfapi_crc_indication_rel8_t;
-#define NFAPI_CRC_INDICATION_REL8_TAG 0x202c
-
-typedef struct {
-	uint16_t					instance_length;
-	nfapi_rx_ue_information		rx_ue_information;
-	nfapi_crc_indication_rel8_t	crc_indication_rel8;
-} nfapi_crc_indication_pdu_t;
-
-#define NFAPI_CRC_IND_MAX_PDU 100
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t number_of_crcs;
-	nfapi_crc_indication_pdu_t* crc_pdu_list;
-} nfapi_crc_indication_body_t;
-#define NFAPI_CRC_INDICATION_BODY_TAG 0x202b
-
-typedef struct {
-	uint16_t					instance_length;
-	nfapi_rx_ue_information		rx_ue_information;
-	nfapi_ul_cqi_information_t	ul_cqi_information;
-} nfapi_sr_indication_pdu_t;
-
-#define NFAPI_SR_IND_MAX_PDU 100
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t number_of_srs;				// Question : should this be srs
-	nfapi_sr_indication_pdu_t* sr_pdu_list;
-} nfapi_sr_indication_body_t;
-#define NFAPI_SR_INDICATION_BODY_TAG 0x202d
-
-// The data offset should be set to 0 or 1 before encoding
-// If it is set to 1 the nfapi library will detemine the correct offset
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t length;
-	uint16_t data_offset;
-	uint8_t ul_cqi;
-	uint8_t ri;
-	uint16_t timing_advance;
-} nfapi_cqi_indication_rel8_t;
-#define NFAPI_CQI_INDICATION_REL8_TAG 0x202f
-
-#define NFAPI_CC_MAX 4
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t length;
-	uint16_t data_offset;
-	uint8_t ul_cqi;
-	uint8_t number_of_cc_reported;
-	uint8_t ri[NFAPI_CC_MAX];
-	uint16_t timing_advance;
-	uint16_t timing_advance_r9;
-} nfapi_cqi_indication_rel9_t;
-#define NFAPI_CQI_INDICATION_REL9_TAG 0x2030
-
-typedef struct {
-	uint16_t					instance_length;
-	nfapi_rx_ue_information		rx_ue_information;
-	nfapi_cqi_indication_rel8_t cqi_indication_rel8;
-	nfapi_cqi_indication_rel9_t cqi_indication_rel9;
-	nfapi_ul_cqi_information_t	ul_cqi_information;
-} nfapi_cqi_indication_pdu_t;
-
-#define NFAPI_CQI_RAW_MAX_LEN 12
-typedef struct {
-	uint8_t pdu[NFAPI_CQI_RAW_MAX_LEN];
-} nfapi_cqi_indication_raw_pdu_t;
-
-#define NFAPI_CQI_IND_MAX_PDU 100
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t number_of_cqis;
-	nfapi_cqi_indication_pdu_t*			cqi_pdu_list;
-	nfapi_cqi_indication_raw_pdu_t*		cqi_raw_pdu_list;
-} nfapi_cqi_indication_body_t;
-#define NFAPI_CQI_INDICATION_BODY_TAG 0x202e
-
-typedef struct { 
-	nfapi_tl_t tl;
-	uint16_t rnti;
-	uint8_t preamble;
-	uint16_t timing_advance;
-} nfapi_preamble_pdu_rel8_t;
-#define NFAPI_PREAMBLE_REL8_TAG 0x2032
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t timing_advance_r9;
-} nfapi_preamble_pdu_rel9_t;
-#define NFAPI_PREAMBLE_REL9_TAG 0x2033
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t rach_resource_type;
-} nfapi_preamble_pdu_rel13_t;
-#define NFAPI_PREAMBLE_REL13_TAG 0x2051
-
-typedef struct { 
-	uint16_t					instance_length;
-	nfapi_preamble_pdu_rel8_t	preamble_rel8;
-	nfapi_preamble_pdu_rel9_t	preamble_rel9;
-	nfapi_preamble_pdu_rel13_t	preamble_rel13;
-} nfapi_preamble_pdu_t;
-
-#define NFAPI_PREAMBLE_MAX_PDU 100
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t number_of_preambles;
-	nfapi_preamble_pdu_t*			preamble_list;
-} nfapi_rach_indication_body_t;
-#define NFAPI_RACH_INDICATION_BODY_TAG 0x2031
-
-#define NFAPI_NUM_RB_MAX 1000
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t doppler_estimation;
-	uint16_t timing_advance;
-	uint8_t number_of_resource_blocks;
-	uint8_t rb_start;
-	uint8_t snr[NFAPI_NUM_RB_MAX];
-} nfapi_srs_indication_fdd_rel8_t;
-#define NFAPI_SRS_INDICATION_FDD_REL8_TAG 0x2035
-
-typedef struct { 
-	nfapi_tl_t tl;
-	uint16_t timing_advance_r9;
-} nfapi_srs_indication_fdd_rel9_t;
-#define NFAPI_SRS_INDICATION_FDD_REL9_TAG 0x2036
-
-typedef struct { 
-	nfapi_tl_t tl;
-	uint8_t uppts_symbol;
-} nfapi_srs_indication_ttd_rel10_t;
-#define NFAPI_SRS_INDICATION_TDD_REL10_TAG 0x2037
-
-typedef struct { 
-	nfapi_tl_t tl;
-	uint16_t ul_rtoa;
-} nfapi_srs_indication_fdd_rel11_t;
-#define NFAPI_SRS_INDICATION_FDD_REL11_TAG 0x2053
-
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t num_prb_per_subband;
-	uint8_t number_of_subbands;
-	uint8_t num_atennas;
-	struct {
-		uint8_t subband_index;
-		uint16_t channel[NFAPI_MAX_NUM_PHYSICAL_ANTENNAS];
-	} subands[NFAPI_MAX_NUM_SUBBANDS];
-} nfapi_tdd_channel_measurement_t;
-#define NFAPI_TDD_CHANNEL_MEASUREMENT_TAG 0x2054
-
-typedef struct {
-	uint16_t							instance_length;
-	nfapi_rx_ue_information				rx_ue_information;
-	nfapi_srs_indication_fdd_rel8_t		srs_indication_fdd_rel8;
-	nfapi_srs_indication_fdd_rel9_t		srs_indication_fdd_rel9;
-	nfapi_srs_indication_ttd_rel10_t	srs_indication_tdd_rel10;
-	nfapi_srs_indication_fdd_rel11_t	srs_indication_fdd_rel11;
-	nfapi_tdd_channel_measurement_t		tdd_channel_measurement;
-} nfapi_srs_indication_pdu_t;
-
-#define NFAPI_SRS_IND_MAX_PDU 16
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t number_of_ues;
-	nfapi_srs_indication_pdu_t* srs_pdu_list;
-} nfapi_srs_indication_body_t;
-#define NFAPI_SRS_INDICATION_BODY_TAG 0x2034
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t length;
-	uint16_t offset;
-	uint8_t ul_cqi;
-	uint16_t timing_advance;
-} nfapi_rx_indication_rel8_t;
-#define NFAPI_RX_INDICATION_REL8_TAG 0x2024
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t timing_advance_r9;
- } nfapi_rx_indication_rel9_t;
-#define NFAPI_RX_INDICATION_REL9_TAG 0x2025
-
-typedef struct {
-	nfapi_rx_ue_information rx_ue_information;
-	nfapi_rx_indication_rel8_t rx_indication_rel8;
-	nfapi_rx_indication_rel9_t rx_indication_rel9;
-	uint8_t* data;
-} nfapi_rx_indication_pdu_t;
-
-#define NFAPI_RX_IND_MAX_PDU 100
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t number_of_pdus;
-	nfapi_rx_indication_pdu_t* rx_pdu_list;
-} nfapi_rx_indication_body_t;
-#define NFAPI_RX_INDICATION_BODY_TAG 0x2023
-
-typedef struct {
-	nfapi_tl_t tl;	
-	uint8_t harq_tb1;
-} nfapi_nb_harq_indication_fdd_rel13_t;
-#define NFAPI_NB_HARQ_INDICATION_FDD_REL13_TAG 0x2064
-
-typedef struct {
-	uint16_t								instance_length;
-	nfapi_rx_ue_information					rx_ue_information;
-	nfapi_nb_harq_indication_fdd_rel13_t	nb_harq_indication_fdd_rel13;
-	nfapi_ul_cqi_information_t				ul_cqi_information;
-} nfapi_nb_harq_indication_pdu_t;
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t number_of_harqs;
-	nfapi_nb_harq_indication_pdu_t* nb_harq_pdu_list;
-} nfapi_nb_harq_indication_body_t;
-#define NFAPI_NB_HARQ_INDICATION_BODY_TAG 0x2063
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t rnti;
-	uint8_t initial_sc;
-	uint16_t timing_advance;
-	uint8_t nrach_ce_level;
-} nfapi_nrach_indication_pdu_rel13_t;
-#define NFAPI_NRACH_INDICATION_REL13_TAG 0x2066
-
-typedef struct {
-	nfapi_nrach_indication_pdu_rel13_t		nrach_indication_rel13;
-} nfapi_nrach_indication_pdu_t;
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t number_of_initial_scs_detected;
-	nfapi_nrach_indication_pdu_t* nrach_pdu_list;
-} nfapi_nrach_indication_body_t;
-#define NFAPI_NRACH_INDICATION_BODY_TAG 0x2065
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint32_t handle;
-	uint32_t mp_cca;
-	uint32_t n_cca;
-	uint32_t offset;
-	uint32_t lte_txop_sf;
-	uint16_t txop_sfn_sf_end;
-	uint32_t lbt_mode;
-} nfapi_lbt_pdsch_req_pdu_rel13_t;
-#define NFAPI_LBT_PDSCH_REQ_PDU_REL13_TAG 0x2056
-
-typedef struct {
-	nfapi_lbt_pdsch_req_pdu_rel13_t lbt_pdsch_req_pdu_rel13;
-} nfapi_lbt_pdsch_req_pdu;
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint32_t handle;
-	uint32_t offset;
-	uint16_t sfn_sf_end;
-	uint32_t lbt_mode;
-} nfapi_lbt_drs_req_pdu_rel13_t;
-#define NFAPI_LBT_DRS_REQ_PDU_REL13_TAG 0x2057
-
-typedef struct {
-	nfapi_lbt_drs_req_pdu_rel13_t lbt_drs_req_pdu_rel13;
-} nfapi_lbt_drs_req_pdu;
-
-typedef struct {
-	uint8_t pdu_type;
-	uint8_t pdu_size;
-	union {
-		nfapi_lbt_pdsch_req_pdu		lbt_pdsch_req_pdu;
-		nfapi_lbt_drs_req_pdu		lbt_drs_req_pdu;
-	};
-} nfapi_lbt_dl_config_request_pdu_t;
-
-#define NFAPI_LBT_DL_CONFIG_REQ_MAX_PDU 16
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t number_of_pdus;
-	nfapi_lbt_dl_config_request_pdu_t*		lbt_dl_config_req_pdu_list;
-} nfapi_lbt_dl_config_request_body_t;
-#define NFAPI_LBT_DL_CONFIG_REQUEST_BODY_TAG 0x2055
-
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint32_t handle;
-	uint32_t result;
-	uint32_t lte_txop_symbols;
-	uint32_t initial_partial_sf;
-} nfapi_lbt_pdsch_rsp_pdu_rel13_t;
-#define NFAPI_LBT_PDSCH_RSP_PDU_REL13_TAG 0x2059
-
-typedef struct {
-	nfapi_lbt_pdsch_rsp_pdu_rel13_t lbt_pdsch_rsp_pdu_rel13;
-} nfapi_lbt_pdsch_rsp_pdu;
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint32_t handle;
-	uint32_t result;
-} nfapi_lbt_drs_rsp_pdu_rel13_t;
-#define NFAPI_LBT_DRS_RSP_PDU_REL13_TAG 0x205A
-
-typedef struct {
-	nfapi_lbt_drs_rsp_pdu_rel13_t lbt_drs_rsp_pdu_rel13;
-} nfapi_lbt_drs_rsp_pdu;
-
-
-typedef struct {
-	uint8_t pdu_type;
-	uint8_t pdu_size;
-	union {
-		nfapi_lbt_pdsch_rsp_pdu		lbt_pdsch_rsp_pdu;
-		nfapi_lbt_drs_rsp_pdu		lbt_drs_rsp_pdu;
-	};
-} nfapi_lbt_dl_indication_pdu_t;
-
-#define NFAPI_LBT_IND_MAX_PDU 16
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t number_of_pdus;
-	nfapi_lbt_dl_indication_pdu_t* lbt_indication_pdu_list;
-} nfapi_lbt_dl_indication_body_t;
-#define NFAPI_LBT_DL_INDICATION_BODY_TAG 0x2058
-
-typedef struct {
-} nfapi_error_indication_msg_invalid_state;
-
-typedef struct {
-} nfapi_error_indication_msg_bch_missing;
-
-typedef struct {
-	uint16_t recieved_sfn_sf;
-	uint16_t expected_sfn_sf;
-} nfapi_error_indication_sfn_out_of_sync;
-
-typedef struct {
-	uint8_t sub_error_code;
-	uint8_t direction;
-	uint16_t rnti;
-	uint8_t pdu_type;
-} nfapi_error_indication_msg_pdu_err;
-
-typedef struct {
-	uint16_t recieved_sfn_sf;
-	uint16_t expected_sfn_sf;
-} nfapi_error_indication_msg_invalid_sfn;
-
-typedef struct {
-	uint8_t sub_error_code;
-	uint8_t phich_lowest_ul_rb_index;
-} nfapi_error_indication_msg_hi_err;
-
-typedef struct {
-	uint8_t sub_error_code;
-	uint16_t pdu_index;
-} nfapi_error_indication_msg_tx_err;
-
-// 
-// P4 Message Structures
-//
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t frequency_band_indicator;
-	uint16_t measurement_period;
-	uint8_t bandwidth;
-	uint32_t timeout;
-	uint8_t number_of_earfcns;
-	uint16_t earfcn[NFAPI_MAX_CARRIER_LIST];
-} nfapi_lte_rssi_request_t;
-
-#define NFAPI_LTE_RSSI_REQUEST_TAG 0x3000
-
-#define NFAPI_P4_START_TAG NFAPI_LTE_RSSI_REQUEST_TAG
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t frequency_band_indicator;
-	uint16_t measurement_period;
-	uint32_t timeout;
-	uint8_t number_of_uarfcns;
-	uint16_t uarfcn[NFAPI_MAX_CARRIER_LIST];
-} nfapi_utran_rssi_request_t;
-
-#define NFAPI_UTRAN_RSSI_REQUEST_TAG 0x3001
-
-typedef struct {
-	uint16_t arfcn;
-	uint8_t direction;
-} nfapi_arfcn_t;
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t frequency_band_indicator;
-	uint16_t measurement_period;
-	uint32_t timeout;
-	uint8_t number_of_arfcns;
-	nfapi_arfcn_t arfcn[NFAPI_MAX_CARRIER_LIST];
-} nfapi_geran_rssi_request_t;
-
-#define NFAPI_GERAN_RSSI_REQUEST_TAG 0x3002
-
-
-
-typedef struct {
-	uint16_t earfcn;
-	uint8_t number_of_ro_dl;
-	uint8_t ro_dl[NFAPI_MAX_RO_DL];
-} nfapi_earfcn_t;
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t frequency_band_indicator;
-	uint16_t measurement_period;
-	uint32_t timeout;
-	uint8_t number_of_earfcns;
-	nfapi_earfcn_t earfcn[NFAPI_MAX_CARRIER_LIST];
-} nfapi_nb_iot_rssi_request_t;
-
-#define NFAPI_NB_IOT_RSSI_REQUEST_TAG 0x3020
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t number_of_rssi;
-	int16_t rssi[NFAPI_MAX_RSSI];
-} nfapi_rssi_indication_body_t;
-
-#define NFAPI_RSSI_INDICATION_TAG 0x3003
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t earfcn;
-	uint8_t measurement_bandwidth;
-	uint8_t exhaustive_search;
-	uint32_t timeout;
-	uint8_t number_of_pci;
-	uint16_t pci[NFAPI_MAX_PCI_LIST];
-} nfapi_lte_cell_search_request_t;
-
-#define NFAPI_LTE_CELL_SEARCH_REQUEST_TAG 0x3004
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t uarfcn;
-	uint8_t exhaustive_search;
-	uint32_t timeout;
-	uint8_t number_of_psc;
-	uint16_t psc[NFAPI_MAX_PSC_LIST];
-} nfapi_utran_cell_search_request_t;
-
-#define NFAPI_UTRAN_CELL_SEARCH_REQUEST_TAG 0x3005
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint32_t timeout;
-	uint8_t number_of_arfcn;
-	uint16_t arfcn[NFAPI_MAX_ARFCN_LIST];
-} nfapi_geran_cell_search_request_t;
-
-#define NFAPI_GERAN_CELL_SEARCH_REQUEST_TAG 0x3006
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t earfcn;
-	uint8_t ro_dl;
-	uint8_t exhaustive_search;
-	uint32_t timeout;
-	uint8_t number_of_pci;
-	uint16_t pci[NFAPI_MAX_PCI_LIST];
-} nfapi_nb_iot_cell_search_request_t;
-
-#define NFAPI_NB_IOT_CELL_SEARCH_REQUEST_TAG 0x3021
-
-typedef struct {
-	uint16_t pci;
-	uint8_t rsrp;
-	uint8_t rsrq;
-	int16_t frequency_offset;
-} nfapi_lte_found_cell_t;
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t number_of_lte_cells_found;
-	nfapi_lte_found_cell_t lte_found_cells[NFAPI_MAX_LTE_CELLS_FOUND];
-} nfapi_lte_cell_search_indication_t;
-
-#define NFAPI_LTE_CELL_SEARCH_INDICATION_TAG 0x3007
-
-typedef struct {
-	uint16_t psc;
-	uint8_t rscp;
-	uint8_t ecno;
-	int16_t frequency_offset;
-} nfapi_utran_found_cell_t;
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t number_of_utran_cells_found;
-	nfapi_utran_found_cell_t utran_found_cells[NFAPI_MAX_UTRAN_CELLS_FOUND];
-} nfapi_utran_cell_search_indication_t;
-
-#define NFAPI_UTRAN_CELL_SEARCH_INDICATION_TAG 0x3008
-
-typedef struct {
-	uint16_t arfcn;
-	uint8_t bsic;
-	uint8_t rxlev;
-	uint8_t rxqual;
-	int16_t frequency_offset;
-	uint32_t sfn_offset;
-} nfapi_gsm_found_cell_t;
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t number_of_gsm_cells_found;
-	nfapi_gsm_found_cell_t gsm_found_cells[NFAPI_MAX_GSM_CELLS_FOUND];
-} nfapi_geran_cell_search_indication_t;
-
-#define NFAPI_GERAN_CELL_SEARCH_INDICATION_TAG 0x3009
-
-typedef struct {
-	uint16_t pci;
-	uint8_t rsrp;
-	uint8_t rsrq;
-	int16_t frequency_offset;
-} nfapi_nb_iot_found_cell_t;
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t number_of_nb_iot_cells_found;
-	nfapi_nb_iot_found_cell_t nb_iot_found_cells[NFAPI_MAX_NB_IOT_CELLS_FOUND];
-} nfapi_nb_iot_cell_search_indication_t;
-
-#define NFAPI_NB_IOT_CELL_SEARCH_INDICATION_TAG 0x3022
-
-typedef nfapi_opaqaue_data_t nfapi_pnf_cell_search_state_t;
-
-#define NFAPI_PNF_CELL_SEARCH_STATE_TAG 0x300A
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t earfcn;
-	uint16_t pci;
-	uint32_t timeout;
-} nfapi_lte_broadcast_detect_request_t;
-
-#define NFAPI_LTE_BROADCAST_DETECT_REQUEST_TAG 0x300B
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t uarfcn;
-	uint16_t psc;
-	uint32_t timeout;
-} nfapi_utran_broadcast_detect_request_t;
-
-#define NFAPI_UTRAN_BROADCAST_DETECT_REQUEST_TAG 0x300C
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t earfcn;
-	uint8_t ro_dl;
-	uint16_t pci;
-	uint32_t timeout;
-} nfapi_nb_iot_broadcast_detect_request_t;
-
-#define NFAPI_NB_IOT_BROADCAST_DETECT_REQUEST_TAG 0x3023
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t number_of_tx_antenna;
-	uint16_t mib_length;
-	uint8_t mib[NFAPI_MAX_MIB_LENGTH];
-	uint32_t sfn_offset;
-} nfapi_lte_broadcast_detect_indication_t;
-
-#define NFAPI_LTE_BROADCAST_DETECT_INDICATION_TAG 0x300E
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t mib_length;
-	uint8_t mib[NFAPI_MAX_MIB_LENGTH];
-	uint32_t sfn_offset;
-} nfapi_utran_broadcast_detect_indication_t;
-
-#define NFAPI_UTRAN_BROADCAST_DETECT_INDICATION_TAG 0x300F
-
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t number_of_tx_antenna;
-	uint16_t mib_length;
-	uint8_t mib[NFAPI_MAX_MIB_LENGTH];
-	uint32_t sfn_offset;
-} nfapi_nb_iot_broadcast_detect_indication_t;
-
-#define NFAPI_NB_IOT_BROADCAST_DETECT_INDICATION_TAG 0x3024
-
-#define NFAPI_PNF_CELL_BROADCAST_STATE_TAG 0x3010
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t earfcn;
-	uint16_t pci;
-	uint16_t downlink_channel_bandwidth;
-	uint8_t phich_configuration;
-	uint8_t number_of_tx_antenna;
-	uint8_t retry_count;
-	uint32_t timeout;
-} nfapi_lte_system_information_schedule_request_t;
-
-#define NFAPI_LTE_SYSTEM_INFORMATION_SCHEDULE_REQUEST_TAG 0x3011
-
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t earfcn;
-	uint8_t ro_dl;
-	uint16_t pci;
-	uint8_t scheduling_info_sib1_nb;
-	uint32_t timeout;
-} nfapi_nb_iot_system_information_schedule_request_t;
-
-#define NFAPI_NB_IOT_SYSTEM_INFORMATION_SCHEDULE_REQUEST_TAG 0x3025
-
-typedef nfapi_opaqaue_data_t nfapi_pnf_cell_broadcast_state_t;
-
-typedef struct {
-	uint8_t si_periodicity;
-	uint8_t si_index;
-} nfapi_lte_system_information_si_periodicity_t;
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t earfcn;
-	uint16_t pci;
-	uint16_t downlink_channel_bandwidth;
-	uint8_t phich_configuration;
-	uint8_t number_of_tx_antenna;
-	uint8_t number_of_si_periodicity;
-	nfapi_lte_system_information_si_periodicity_t si_periodicity[NFAPI_MAX_SI_PERIODICITY];
-	uint8_t si_window_length;
-	uint32_t timeout;
-} nfapi_lte_system_information_request_t;
-
-#define NFAPI_LTE_SYSTEM_INFORMATION_REQUEST_TAG 0x3014
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t uarfcn;
-	uint16_t psc;
-	uint32_t timeout;
-} nfapi_utran_system_information_request_t;
-
-#define NFAPI_UTRAN_SYSTEM_INFORMATION_REQUEST_TAG 0x3015
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t arfcn;
-	uint8_t bsic;
-	uint32_t timeout;
-} nfapi_geran_system_information_request_t;
-
-#define NFAPI_GERAN_SYSTEM_INFORMATION_REQUEST_TAG 0x3016
-
-typedef struct {
-	uint8_t si_periodicity;
-	uint8_t si_repetition_pattern;
-	uint8_t si_tb_size;
-	uint8_t number_of_si_index;
-	uint8_t si_index[NFAPI_MAX_SI_INDEX];
-} nfapi_nb_iot_system_information_si_periodicity_t;
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t earfcn;
-	uint8_t ro_dl;
-	uint16_t pci;
-	uint8_t number_of_si_periodicity;
-	nfapi_nb_iot_system_information_si_periodicity_t si_periodicity[NFAPI_MAX_SI_PERIODICITY];
-	uint8_t si_window_length;
-	uint32_t timeout;
-} nfapi_nb_iot_system_information_request_t;
-
-#define NFAPI_NB_IOT_SYSTEM_INFORMATION_REQUEST_TAG 0x3027
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t sib_type;
-	uint16_t sib_length;
-	uint8_t sib[NFAPI_MAX_SIB_LENGTH];
-} nfapi_lte_system_information_indication_t;
-
-#define NFAPI_LTE_SYSTEM_INFORMATION_INDICATION_TAG 0x3018
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t sib_length;
-	uint8_t sib[NFAPI_MAX_SIB_LENGTH];
-} nfapi_utran_system_information_indication_t;
-
-#define NFAPI_UTRAN_SYSTEM_INFORMATION_INDICATION_TAG 0x3019
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint16_t si_length;
-	uint8_t si[NFAPI_MAX_SI_LENGTH];
-} nfapi_geran_system_information_indication_t;
-
-#define NFAPI_GERAN_SYSTEM_INFORMATION_INDICATION_TAG 0x301a
-
-typedef struct {
-	nfapi_tl_t tl;
-	uint8_t sib_type;
-	uint16_t sib_length;
-	uint8_t sib[NFAPI_MAX_SIB_LENGTH];
-} nfapi_nb_iot_system_information_indication_t;
-
-#define NFAPI_NB_IOT_SYSTEM_INFORMATION_INDICATION_TAG 0x3026
-
-
-//
-// Top level NFAP messages
-//
-
-//
-// P7
-//
-
-typedef struct {
-	nfapi_p7_message_header_t header;
-	uint16_t sfn_sf;
-	nfapi_dl_config_request_body_t dl_config_request_body;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_dl_config_request_t;
-
-typedef struct {
-	nfapi_p7_message_header_t header;
-	uint16_t sfn_sf;
-	nfapi_ul_config_request_body_t ul_config_request_body;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_ul_config_request_t;
-
-typedef struct {
-	nfapi_p7_message_header_t header;
-	uint16_t sfn_sf;
-	nfapi_hi_dci0_request_body_t hi_dci0_request_body;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_hi_dci0_request_t;
-
-typedef struct {
-	nfapi_p7_message_header_t header;
-	uint16_t sfn_sf;
-	nfapi_tx_request_body_t tx_request_body;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_tx_request_t;
-
-typedef struct {
-	nfapi_p7_message_header_t header;
-	uint16_t sfn_sf;
-} nfapi_subframe_indication_t;
-
-typedef struct {
-	nfapi_p7_message_header_t header;
-	uint16_t sfn_sf;
-	nfapi_harq_indication_body_t harq_indication_body;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_harq_indication_t;
-
-typedef struct {
-	nfapi_p7_message_header_t header;
-	uint16_t sfn_sf;
-	nfapi_crc_indication_body_t crc_indication_body;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_crc_indication_t;
-
-typedef struct {
-	nfapi_p7_message_header_t header;
-	uint16_t sfn_sf;
-	nfapi_sr_indication_body_t sr_indication_body;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_sr_indication_t;
-
-typedef struct {
-	nfapi_p7_message_header_t header;
-	uint16_t sfn_sf;
-	nfapi_cqi_indication_body_t cqi_indication_body;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_cqi_indication_t;
-
-typedef struct {
-	nfapi_p7_message_header_t header;
-	uint16_t sfn_sf;
-	nfapi_rach_indication_body_t rach_indication_body;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_rach_indication_t;
-
-typedef struct {
-	nfapi_p7_message_header_t header;
-	uint16_t sfn_sf;
-	nfapi_srs_indication_body_t srs_indication_body;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_srs_indication_t;
-
-typedef struct {
-	nfapi_p7_message_header_t header;
-	uint16_t sfn_sf;
-	nfapi_rx_indication_body_t rx_indication_body;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_rx_indication_t;
-
-typedef struct {
-	nfapi_p7_message_header_t header;
-	uint16_t sfn_sf;
-	nfapi_nb_harq_indication_body_t nb_harq_indication_body;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_nb_harq_indication_t;
-
-typedef struct {
-	nfapi_p7_message_header_t header;
-	uint16_t sfn_sf;
-	nfapi_nrach_indication_body_t nrach_indication_body;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_nrach_indication_t;
-
-typedef struct {
-	nfapi_p7_message_header_t header;
-	uint16_t sfn_sf;
-	nfapi_lbt_dl_config_request_body_t lbt_dl_config_request_body;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_lbt_dl_config_request_t;
-
-typedef struct {
-	nfapi_p7_message_header_t header;
-	uint16_t sfn_sf;
-	nfapi_lbt_dl_indication_body_t lbt_dl_indication_body;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_lbt_dl_indication_t;
-
-
-typedef struct {
-	nfapi_p7_message_header_t header;
-	uint8_t message_id;
-	uint8_t error_code;
-	union {
-		nfapi_error_indication_msg_invalid_state	msg_invalid_state;
-		nfapi_error_indication_msg_bch_missing		msg_bch_missing;
-		nfapi_error_indication_sfn_out_of_sync		sfn_out_of_sync;
-		nfapi_error_indication_msg_pdu_err			msg_pdu_err;
-		nfapi_error_indication_msg_invalid_sfn		msg_invalid_sfn;
-		nfapi_error_indication_msg_hi_err			msg_hi_err;
-		nfapi_error_indication_msg_tx_err			msg_tx_err;
-	};
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_error_indication_t;
-
-// 
-// P4 Messages
-// 
-
-typedef struct {
-	nfapi_p4_p5_message_header_t header;
-	uint8_t rat_type;
-	union {
-		nfapi_lte_rssi_request_t					lte_rssi_request;
-		nfapi_utran_rssi_request_t					utran_rssi_request;
-		nfapi_geran_rssi_request_t					geran_rssi_request;
-		nfapi_nb_iot_rssi_request_t					nb_iot_rssi_request;
-	};
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_rssi_request_t;
-
-typedef struct {
-	nfapi_p4_p5_message_header_t header;
-	uint32_t error_code;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_rssi_response_t;
-
-typedef struct {
-	nfapi_p4_p5_message_header_t header;
-	uint32_t error_code;
-	nfapi_rssi_indication_body_t rssi_indication_body;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_rssi_indication_t;
-
-typedef struct {
-	nfapi_p4_p5_message_header_t header;
-	uint8_t rat_type;
-	union {
-		nfapi_lte_cell_search_request_t				lte_cell_search_request;
-		nfapi_utran_cell_search_request_t			utran_cell_search_request;
-		nfapi_geran_cell_search_request_t			geran_cell_search_request;
-		nfapi_nb_iot_cell_search_request_t			nb_iot_cell_search_request;
-	};
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_cell_search_request_t;
-
-typedef struct {
-	nfapi_p4_p5_message_header_t header;
-	uint32_t error_code;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_cell_search_response_t;
-
-typedef struct {
-	nfapi_p4_p5_message_header_t header;
-	uint32_t error_code;
-	nfapi_lte_cell_search_indication_t lte_cell_search_indication;
-	nfapi_utran_cell_search_indication_t utran_cell_search_indication;
-	nfapi_geran_cell_search_indication_t geran_cell_search_indication;
-	nfapi_pnf_cell_search_state_t pnf_cell_search_state;
-	nfapi_nb_iot_cell_search_indication_t nb_iot_cell_search_indication;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_cell_search_indication_t;
-
-
-typedef struct {
-	nfapi_p4_p5_message_header_t header;
-	uint8_t rat_type;
-	union {
-		nfapi_lte_broadcast_detect_request_t		lte_broadcast_detect_request;
-		nfapi_utran_broadcast_detect_request_t		utran_broadcast_detect_request;
-		nfapi_nb_iot_broadcast_detect_request_t		nb_iot_broadcast_detect_request;
-	};
-	nfapi_pnf_cell_search_state_t pnf_cell_search_state;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_broadcast_detect_request_t;
-
-typedef struct {
-	nfapi_p4_p5_message_header_t header;
-	uint32_t error_code;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_broadcast_detect_response_t;
-
-typedef struct {
-	nfapi_p4_p5_message_header_t header;
-	uint32_t error_code;
-	nfapi_lte_broadcast_detect_indication_t lte_broadcast_detect_indication;
-	nfapi_utran_broadcast_detect_indication_t utran_broadcast_detect_indication;
-	nfapi_nb_iot_broadcast_detect_indication_t nb_iot_broadcast_detect_indication;
-	nfapi_pnf_cell_broadcast_state_t pnf_cell_broadcast_state;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_broadcast_detect_indication_t;
-
-typedef struct {
-	nfapi_p4_p5_message_header_t header;
-	uint8_t rat_type;
-	union {
-		nfapi_lte_system_information_schedule_request_t lte_system_information_schedule_request;
-		nfapi_nb_iot_system_information_schedule_request_t nb_iot_system_information_schedule_request;
-	};
-	nfapi_pnf_cell_broadcast_state_t pnf_cell_broadcast_state;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_system_information_schedule_request_t;
-
-typedef struct {
-	nfapi_p4_p5_message_header_t header;
-	uint32_t error_code;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_system_information_schedule_response_t;
-
-typedef struct { 
-	nfapi_p4_p5_message_header_t header;
-	uint32_t error_code;
-	nfapi_lte_system_information_indication_t lte_system_information_indication;
-	nfapi_nb_iot_system_information_indication_t nb_iot_system_information_indication;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_system_information_schedule_indication_t;
-
-typedef struct {
-	nfapi_p4_p5_message_header_t header;
-	uint8_t rat_type;
-	union {
-		nfapi_lte_system_information_request_t lte_system_information_request;
-		nfapi_utran_system_information_request_t utran_system_information_request;
-		nfapi_geran_system_information_request_t geran_system_information_request;
-		nfapi_nb_iot_system_information_request_t nb_iot_system_information_request;
-	};
-	nfapi_pnf_cell_broadcast_state_t pnf_cell_broadcast_state;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_system_information_request_t;
-
-typedef struct {
-	nfapi_p4_p5_message_header_t header;
-	uint32_t error_code;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_system_information_response_t;
-
-typedef struct {
-	nfapi_p4_p5_message_header_t header;
-	uint32_t error_code;
-	nfapi_lte_system_information_indication_t lte_system_information_indication;
-	nfapi_utran_system_information_indication_t utran_system_information_indication;
-	nfapi_geran_system_information_indication_t geran_system_information_indication;
-	nfapi_nb_iot_system_information_indication_t nb_iot_system_information_indication;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_system_information_indication_t;
-
-typedef struct {
-	nfapi_p4_p5_message_header_t header;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_nmm_stop_request_t;
-
-typedef struct {
-	nfapi_p4_p5_message_header_t header;
-	uint32_t error_code;
-	nfapi_vendor_extension_tlv_t vendor_extension;
-} nfapi_nmm_stop_response_t;
-
-//
-// Configuration options for the encode decode functions
-//
-
-/*! Configuration options for the p7 pack unpack functions
- *
- */
-typedef struct nfapi_p7_codec_config {
-
-	/*! Optional call back to allow the user to define the memory allocator. 
-	 *  \param size The size of the memory to allocate
-	 *  \return a pointer to a valid memory block or 0 if it has failed.
-	 *
-	 * If not set the nfapi unpack functions will use malloc
-	 */
-	void* (*allocate)(size_t size);
-
-	/*! Optional call back to allow the user to define the memory deallocator. 
-	 *  \param ptr A poiner to a memory block allocated by the allocate callback
-	 * 
-	 *	If not set the client should use free
-	 */
-	void (*deallocate)(void* ptr);
-
-	/*! Optional call back function to handle unpacking vendor extension tlv.
-	 *  \param tl A pointer to a decoded tag length structure
-	 *  \param ppReadPackedMsg A handle to the read buffer. 
-	 *  \param end The end of the read buffer
-	 *  \param ve A handle to a vendor extention structure that the call back should allocate if the structure can be decoded
-	 *  \param config A pointer to the p7 codec configuration
-	 *  \return return 0 if packed successfully, -1 if failed.
-	 *
-	 *  If not set the tlv will be skipped
-	 *
-	 *  Client should use the help methods in nfapi.h to decode the vendor extention.
-	 * 
-	 *  \todo Add code example
-	 */
-	int (*unpack_vendor_extension_tlv)(nfapi_tl_t* tl, uint8_t **ppReadPackedMsg, uint8_t *end, void** ve, struct nfapi_p7_codec_config* config);
-
-	/*! Optional call back function to handle packing vendor extension tlv. 
-	 *  \param ve A pointer to a vendor extention structure.
-	 *  \param ppWritePackedMsg A handle to the write buffer
-	 *  \param end The end of the write buffer. The callee should make sure not to write beyond the end
-	 *  \param config A pointer to the p7 codec configuration
-	 *  \return return 0 if packed successfully, -1 if failed.
-	 * 
-	 *  If not set the the tlv will be skipped
-	 * 
-	 *  Client should use the help methods in nfapi.h to encode the vendor extention
-	 * 
-	 *  \todo Add code example
-	 */
-	int (*pack_vendor_extension_tlv)(void* ve, uint8_t **ppWritePackedMsg, uint8_t *end, struct nfapi_p7_codec_config* config);
-
-	/*! Optional call back function to handle unpacking vendor extension messages. 
-	 *  \param header A pointer to a decode P7 message header for the vendor extention message
-	 *  \param ppReadPackedMsg A handle to the encoded data buffer
-	 *  \param end A pointer to the end of the encoded data buffer
-	 *  \param config  A pointer to the p7 codec configuration
-	 *  \return 0 if unpacked successfully, -1 if failed
-	 *
-	 *  If not set the message will be ignored
-	 *
-	 *  If the message if is unknown the function should return -1
-	 */
-	int (*unpack_p7_vendor_extension)(nfapi_p7_message_header_t* header, uint8_t **ppReadPackedMsg, uint8_t *end, struct nfapi_p7_codec_config* config);
-
-	/*! Optional call back function to handle packing vendor extension messages. 
-	 *  \param header A poiner to a P7 message structure for the venfor extention message
-	 *  \param ppWritePackedmsg A handle to the buffer to write the encoded message into
-	 *  \param end A pointer to the end of the buffer
-	 *  \param cofig A pointer to the p7 codec configuration
-	 *  \return 0 if packed successfully, -1 if failed
-	 * 
-	 * If not set the the message will be ingored
-	 *	 
-	 *  If the message if is unknown the function should return -1
-	 */
-	int (*pack_p7_vendor_extension)(nfapi_p7_message_header_t* header, uint8_t **ppWritePackedmsg, uint8_t *end, struct nfapi_p7_codec_config* config);
-
-	/*! Optional user data that will be passed back with callbacks
-	 */
-	void* user_data;
-
-} nfapi_p7_codec_config_t;
-
-/*! Configuration options for the p4 & p5 pack unpack functions
- *
- */
-typedef struct nfapi_p4_p5_codec_config {
-
-	/*! Optional call back to allow the user to define the memory allocator.
-     *  \param size The size of the memory to allocate
-	 *  \return a pointer to a valid memory block or 0 if it has failed.
-	 *
-	 *  If not set the nfapi unpack functions will use malloc
-	 */
-	void* (*allocate)(size_t size);
-
-	/*! Optional call back to allow the user to define the memory deallocator. 
-	 *  \param ptr A poiner to a memory block allocated by the allocate callback
-	 *
-	 *  If not set free will be used
-	 */
-	void (*deallocate)(void* ptr);
-
-	/*! Optional call back function to handle unpacking vendor extension tlv.
-	 *  \param tl A pointer to a decoded tag length structure
-	 *  \param ppReadPackedMsg A handle to the data buffer to decode
-	 *  \param end A pointer to the end of the buffer
-	 *  \param ve A handle to a vendor extention structure that will be allocated by this callback
-	 *  \param config A pointer to the P4/P5 codec configuration
-	 *  \return 0 if unpacked successfully, -1 if failed
-	 *  
-	 *  If not set the tlv will be skipped
-	 */
-	int (*unpack_vendor_extension_tlv)(nfapi_tl_t* tl, uint8_t **ppReadPackedMsg, uint8_t *end, void** ve, struct nfapi_p4_p5_codec_config* config);
-
-	/*! Optional call back function to handle packing vendor extension tlv. 
-	 *  \param ve
-	 *  \param ppWritePackedMsg A handle to the data buffer pack the tlv into
-	 *  \param end A pointer to the end of the buffer
-	 *  \param config A pointer to the P4/P5 codec configuration
-	 *  \return 0 if packed successfully, -1 if failed
-	 *
-	 *  If not set the the tlv will be skipped
-	 */
-	int (*pack_vendor_extension_tlv)(void* ve, uint8_t **ppWritePackedMsg, uint8_t *end, struct nfapi_p4_p5_codec_config* config);
-
-	/*! Optional call back function to handle unpacking vendor extension messages. 
-	 *  \param header A pointer to a decode P4/P5 message header
-	 *  \param ppReadPackgedMsg A handle to the data buffer to decode
-	 *  \param end A pointer to the end of the buffer
-	 *  \param config A pointer to the P4/P5 codec configuration
-	 *  \return 0 if packed successfully, -1 if failed
-	 *
-	 * If not set the message will be ignored
-	 */
-	int (*unpack_p4_p5_vendor_extension)(nfapi_p4_p5_message_header_t* header, uint8_t **ppReadPackedMsg, uint8_t *end, struct nfapi_p4_p5_codec_config* config);
-
-	/*! Optional call back function to handle packing vendor extension messages.
-	 *  \param header A pointer to the P4/P5 message header to be encoded
-	 *  \param ppWritePackedMsg A handle to the data buffer pack the message into
-	 *  \param end A pointer to the end of the buffer
-	 *  \param config A pointer to the P4/P5 codec configuration
-	 *  \return 0 if packed successfully, -1 if failed
-	 *  
-	 *  If not set the the message will be ingored
-	 */
-	int (*pack_p4_p5_vendor_extension)(nfapi_p4_p5_message_header_t* header, uint8_t **ppwritepackedmsg, uint8_t *end, struct nfapi_p4_p5_codec_config* config);
-
-	/*! Optional user data that will be passed back with callbacks
-	 */
-	void* user_data;
-
-} nfapi_p4_p5_codec_config_t;
-
-//
-// Functions
-// 
-
-/*! \brief Encodes an NFAPI P4 message to a buffer
- *  \param pMessageBuf A pointer to a nfapi p4 message structure
- *  \param messageBufLen The size of the p4 message structure
- *  \param pPackedBuf A pointer to the buffer that the p4 message will be packed into
- *  \param packedBufLen The size of the buffer 
- *  \param config A pointer to the nfapi configuration structure
- *  \return 0 means success, -1 means failure.
- *
- * The function will encode a nFAPI P4 message structure pointed to be pMessageBuf into a byte stream pointed to by pPackedBuf.
- * 
- */
-int nfapi_p4_message_pack(void *pMessageBuf, uint32_t messageBufLen, void *pPackedBuf, uint32_t packedBufLen, nfapi_p4_p5_codec_config_t* config);
-
-/*! \brief Decodes a NFAPI P4 message header
- *  \param pMessageBuf A pointer to an encoded P4 message header
- *  \param messageBufLen The size of the encoded P4 message header
- *  \param pUnpackedBuf A pointer to the nfapi_message_header
- *  \param unpackedBufLen The size of nfapi_message_header structure.
- *  \param config A pointer to the nfapi configuration structure
- *  \return 0 means success, -1 means failure.
- *
- * The function will decode a byte stream pointed to by pMessageBuf into a nfapi_p4_p5_message_header structure pointer to by pUnpackedBuf
- */
-int nfapi_p4_message_header_unpack(void *pMessageBuf, uint32_t messageBufLen, void *pUnpackedBuf, uint32_t unpackedBufLen, nfapi_p4_p5_codec_config_t* config);
-
-/*! \brief Decodes a NFAPI P4 message
- *  \param pMessageBuf A pointer to an encoded P4 message
- *  \param messageBufLen The size of the encoded P4 message
- *  \param pUnpackedBuf A pointer to the nfapi_message_header
- *  \param unpackedBufLen The size of nfapi_message_header structure.
- *  \param config A pointer to the nfapi configuration structure
- *  \return 0 means success, -1 means failure.
- *
- * The function will decode a byte stream pointed to by pMessageBuf into a nfapi p4 message structure pointer to by pUnpackedBuf 
- */
-int nfapi_p4_message_unpack(void *pMessageBuf, uint32_t messageBufLen, void *pUnpackedBuf, uint32_t unpackedBufLen, nfapi_p4_p5_codec_config_t* config);
-
-/*! \brief Encodes an NFAPI P5 message to a buffer
- *  \param pMessageBuf A pointer to a nfapi p5 message structure
- *  \param messageBufLen The size of the p5 message structure
- *  \param pPackedBuf A pointer to the buffer that the p5 message will be packed into
- *  \param packedBufLen The size of the buffer 
- *  \param config A pointer to the nfapi configuration structure
- *  \return 0 means success, -1 means failure.
- *
- * The function will encode a nFAPI P5 message structure pointed to be pMessageBuf into a byte stream pointed to by pPackedBuf.
- * 
- */
-int nfapi_p5_message_pack(void *pMessageBuf, uint32_t messageBufLen, void *pPackedBuf, uint32_t packedBufLen, nfapi_p4_p5_codec_config_t* config);
-
-/*! \brief Decodes an NFAPI P5 message header
- *  \param pMessageBuf A pointer to an encoded P5 message header
- *  \param messageBufLen The size of the encoded P5 message header
- *  \param pUnpackedBuf A pointer to the nfapi_message_header
- *  \param unpackedBufLen The size of nfapi_message_header structure.
- *  \param config A pointer to the nfapi configuration structure
- *  \return 0 means success, -1 means failure.
- *
- * The function will decode a byte stream pointed to by pMessageBuf into a nfapi_p4_p5_message_header structure pointer to by pUnpackedBuf
- */
-int nfapi_p5_message_header_unpack(void *pMessageBuf, uint32_t messageBufLen, void *pUnpackedBuf, uint32_t unpackedBufLen, nfapi_p4_p5_codec_config_t* config);
-
-/*! \brief Decodes a NFAPI P5 message
- *  \param pMessageBuf A pointer to an encoded P5 message
- *  \param messageBufLen The size of the encoded P5 message
- *  \param pUnpackedBuf A pointer to the nfapi_message_header
- *  \param unpackedBufLen The size of nfapi_message_header structure.
- *  \param config A pointer to the nfapi configuration structure
- *  \return 0 means success, -1 means failure.
- *
- * The function will decode a byte stream pointed to by pMessageBuf into a nfapi p5 message structure pointer to by pUnpackedBuf 
- */
-int nfapi_p5_message_unpack(void *pMessageBuf, uint32_t messageBufLen, void *pUnpackedBuf, uint32_t unpackedBufLen, nfapi_p4_p5_codec_config_t* config);
-
-/*! \brief Encodes an NFAPI P7 message to a buffer
- *  \param pMessageBuf A pointer to a nfapi p7 message structure
- *  \param pPackedBuf A pointer to the buffer that the p7 message will be packed into
- *  \param packedBufLen The size of the buffer 
- *  \param config A pointer to the nfapi configuration structure
- *  \return 0 means success, -1 means failure.
- *
- * The function will encode a nFAPI P7 message structure pointed to be pMessageBuf into a byte stream pointed to by pPackedBuf.
- * 
- */
-int nfapi_p7_message_pack(void *pMessageBuf, void *pPackedBuf, uint32_t packedBufLen, nfapi_p7_codec_config_t* config);
-
-/*! \brief Decodes an NFAPI P7 message header
- *  \param pMessageBuf A pointer to an encoded P7 message header
- *  \param messageBufLen The size of the encoded P7 message header
- *  \param pUnpackedBuf A pointer to the nfapi_message_header
- *  \param unpackedBufLen The size of nfapi_message_header structure.
- *  \param config A pointer to the nfapi configuration structure
- *  \return 0 means success, -1 means failure.
- *
- * The function will decode a byte stream pointed to by pMessageBuf into a nfapi_p7_message_header structure pointer to by pUnpackedBuf
-
- */
-int nfapi_p7_message_header_unpack(void *pMessageBuf, uint32_t messageBufLen, void *pUnpackedBuf, uint32_t unpackedBufLen, nfapi_p7_codec_config_t* config);
-
-/*! \brief Decodes a NFAPI P7 message
- *  \param pMessageBuf A pointer to an encoded P7 message
- *  \param messageBufLen The size of the encoded P7 message
- *  \param pUnpackedBuf A pointer to the nfapi_message_header
- *  \param unpackedBufLen The size of nfapi_message_header structure.
- *  \param config A pointer to the nfapi configuration structure
- *  \return 0 means success, -1 means failure.
- *
- * The function will decode a byte stream pointed to by pMessageBuf into a nfapi p7 message structure pointer to by pUnpackedBuf 
- */
-int nfapi_p7_message_unpack(void *pMessageBuf, uint32_t messageBufLen, void *pUnpackedBuf, uint32_t unpackedBufLen, nfapi_p7_codec_config_t* config);
-
-/*! \brief Calculates the checksum of a  message
- *
- *  \param buffer Pointer to the packed message
- *  \param len The length of the message
- *  \return The checksum. If there is an error the function with return -1
- */
-uint32_t nfapi_p7_calculate_checksum(uint8_t* buffer, uint32_t len);
-
-/*! \brief Calculates & updates the checksum in the message
- *
- *  \param buffer Pointer to the packed message
- *  \param len The length of the message
-  *  \return 0 means success, -1 means failure.
- */
-int nfapi_p7_update_checksum(uint8_t* buffer, uint32_t len);
-
-/*! \brief Updates the transmition time stamp in the p7 message header
- *
- *  \param buffer Pointer to the packed message
- *  \param timestamp The time stamp value
-  *  \return 0 means success, -1 means failure.
- */
-int nfapi_p7_update_transmit_timestamp(uint8_t* buffer, uint32_t timestamp);
-
-#endif /* _NFAPI_INTERFACE_H_ */
diff --git a/nfapi/open-nFAPI/nfapi/public_inc/nr_ue_fapi_interface.h b/nfapi/open-nFAPI/nfapi/public_inc/nr_ue_fapi_interface.h
new file mode 100644
index 0000000000..ecee7c02e3
--- /dev/null
+++ b/nfapi/open-nFAPI/nfapi/public_inc/nr_ue_fapi_interface.h
@@ -0,0 +1,3887 @@
+/*
+ * Copyright 2017 Cisco Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+
+#ifndef _NFAPI_INTERFACE_NR_EXTENSION_H_
+#define _NFAPI_INTERFACE_NR_EXTENSION_H_
+#define _NFAPI_INTERFACE_H_
+
+#include "stddef.h"
+
+// Constants - update based on implementation
+#define NR_NFAPI_MAX_PHY_RF_INSTANCES 2
+#define NR_NFAPI_PNF_PARAM_GENERAL_LOCATION_LENGTH 16
+#define NR_NFAPI_PNF_PARAM_GENERAL_OUI_LENGTH 3
+#define NR_NFAPI_MAX_NUM_RF_BANDS 16
+
+// The following definition control the size of arrays used in the interface.
+// These may be changed if desired. They are used in the encoder to make sure 
+// that the user has not specified a 'count' larger than the max array, and also
+// used by the decoder when decode an array. If the 'count' received is larger
+// than the array it is to be stored in the decode fails.
+#define NR_NFAPI_MAX_NUM_ANTENNAS 8
+#define NR_NFAPI_MAX_NUM_SUBBANDS 13
+#define NR_NFAPI_MAX_BF_VECTORS 8
+#define NR_NFAPI_MAX_CC 1
+#define NR_NFAPI_MAX_NUM_PHYSICAL_ANTENNAS 8
+#define NR_NFAPI_MAX_RSSI 8
+#define NR_NFAPI_MAX_PSC_LIST 32
+#define NR_NFAPI_MAX_PCI_LIST 32
+#define NR_NFAPI_MAX_CARRIER_LIST 32
+#define NR_NFAPI_MAX_ARFCN_LIST 128
+#define NR_NFAPI_MAX_LTE_CELLS_FOUND 8
+#define NR_NFAPI_MAX_UTRAN_CELLS_FOUND 8
+#define NR_NFAPI_MAX_GSM_CELLS_FOUND 8
+#define NR_NFAPI_MAX_NB_IOT_CELLS_FOUND 8
+#define NR_NFAPI_MAX_SI_PERIODICITY 8
+#define NR_NFAPI_MAX_SI_INDEX 8
+#define NR_NFAPI_MAX_MIB_LENGTH 32
+#define NR_NFAPI_MAX_SIB_LENGTH 256
+#define NR_NFAPI_MAX_SI_LENGTH 256
+#define NR_NFAPI_MAX_OPAQUE_DATA 64
+#define NR_NFAPI_MAX_NUM_SCHEDULED_UES 8 // Used in the TPM structure
+#define NR_NFAPI_MAX_PNF_PHY 5
+#define NR_NFAPI_MAX_PNF_PHY_RF_CONFIG 5
+#define NR_NFAPI_MAX_PNF_RF  5
+#define NR_NFAPI_MAX_NMM_FREQUENCY_BANDS 32
+#define NR_NFAPI_MAX_RECEIVED_INTERFERENCE_POWER_RESULTS 100
+#define NR_NFAPI_MAX_UL_DL_CONFIGURATIONS 5
+#define NR_NFAPI_MAX_CSI_RS_RESOURCE_CONFIG 4
+#define NR_NFAPI_MAX_ANTENNA_PORT_COUNT 8
+#define NR_NFAPI_MAX_EPDCCH_PRB 8
+#define NR_NFAPI_MAX_TX_PHYSICAL_ANTENNA_PORTS 8
+#define NR_NFAPI_MAX_NUMBER_ACK_NACK_TDD 8
+#define NR_NFAPI_MAX_RO_DL 8
+
+#define NR_NFAPI_HEADER_LENGTH 8
+#define NR_NFAPI_P7_HEADER_LENGTH 16
+
+#define NR_NFAPI_VENDOR_EXTENSION_MIN_TAG_VALUE 0xF000
+#define NR_NFAPI_VENDOR_EXTENSION_MAX_TAG_VALUE 0xFFFF
+
+#define NR_NFAPI_VERSION_3_0_11	0x000
+#define NR_NFAPI_VERSION_3_0_12    0x001
+
+#define NR_NFAPI_HALF_FRAME_INDEX_FIRST_HALF 0
+#define NR_NFAPI_HALF_FRAME_INDEX_SECOND_HALF 1
+
+// The IANA agreed port definition of the P5 SCTP VNF enpoint 
+// http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml?search=7701
+#define NR_NFAPI_P5_SCTP_PORT		7701
+
+typedef unsigned int	uint32_t;
+typedef unsigned short	uint16_t;
+typedef unsigned char	uint8_t;
+typedef signed int		int32_t;
+typedef signed short	int16_t;
+typedef signed char		int8_t;
+
+typedef struct {
+	uint16_t phy_id;
+	uint16_t message_id;
+	uint16_t message_length;
+	uint16_t spare;
+} nr_nfapi_p4_p5_message_header_t;
+
+typedef struct {
+	uint16_t phy_id;
+	uint16_t message_id;
+	uint16_t message_length;
+	uint16_t m_segment_sequence; /* This consists of 3 fields - namely, M, Segement & Sequence number*/
+	uint32_t checksum;
+	uint32_t transmit_timestamp;
+} nr_nfapi_p7_message_header_t;
+
+#define NR_NFAPI_PHY_ID_NA 0
+
+//#define NR_NFAPI_P7_GET_MORE(_mss) ( ((_mss) & 0x80) >> 7 )
+//#define NR_NFAPI_P7_GET_SEGMENT(_mss) ( ((_mss) & 0x70) >> 4 )
+#define NR_NFAPI_P7_GET_MORE(_mss) ( ((_mss) & 0x8000) >> 15 )
+#define NR_NFAPI_P7_GET_SEGMENT(_mss) ( ((_mss) & 0x7F00) >> 8 )
+#define NR_NFAPI_P7_GET_SEQUENCE(_mss) ( (_mss) & 0x00FF )
+#define NR_NFAPI_P7_SET_MSS(_more, _segm, _sequ) ( (((_more) & 0x1) << 7) | (((_segm) & 0x7) << 4) | ((_sequ) & 0xF) )
+
+typedef struct {
+	uint16_t tag;
+	uint16_t length;
+} nr_nfapi_tl_t;
+#define NR_NFAPI_TAG_LENGTH_PACKED_LEN 4
+
+// Convenience methods to convert between SFN/SFN formats
+#define NR_NFAPI_SFNSF2DEC(_sfnsf) ((((_sfnsf) >> 4) * 10) + ((_sfnsf) & 0xF))
+#define NR_NFAPI_SFNSFDEC2SFNSF(_sfnsf_dec) ((((_sfnsf_dec) / 10) << 4) | (((_sfnsf_dec) - (((_sfnsf_dec) / 10) * 10)) & 0xF))
+
+#define NR_NFAPI_SFNSF2SFN(_sfnsf) ((_sfnsf) >> 4)
+#define NR_NFAPI_SFNSF2SF(_sfnsf) ((_sfnsf) & 0xF)
+
+#define NR_NFAPI_MAX_SFNSFDEC 10240
+
+typedef nr_nfapi_tl_t* nr_nfapi_vendor_extension_tlv_t;
+
+
+// nFAPI Message IDs
+typedef enum {
+	NR_NFAPI_DL_CONFIG_REQUEST = 0x0080,
+	NR_NFAPI_UL_CONFIG_REQUEST,
+	NR_NFAPI_SUBFRAME_INDICATION,
+	NR_NFAPI_HI_DCI0_REQUEST,
+	NR_NFAPI_TX_REQUEST,
+	NR_NFAPI_HARQ_INDICATION,
+	NR_NFAPI_CRC_INDICATION,
+	NR_NFAPI_RX_ULSCH_INDICATION,
+	NR_NFAPI_RACH_INDICATION,
+	NR_NFAPI_SRS_INDICATION,
+	NR_NFAPI_RX_SR_INDICATION,
+	NR_NFAPI_RX_CQI_INDICATION,
+	NR_NFAPI_LBT_DL_CONFIG_REQUEST,
+	NR_NFAPI_LBT_DL_INDICATION,
+	NR_NFAPI_NB_HARQ_INDICATION,
+	NR_NFAPI_NRACH_INDICATION,
+
+	NR_NFAPI_PNF_PARAM_REQUEST = 0x0100,
+	NR_NFAPI_PNF_PARAM_RESPONSE,
+	NR_NFAPI_PNF_CONFIG_REQUEST,
+	NR_NFAPI_PNF_CONFIG_RESPONSE,
+	NR_NFAPI_PNF_START_REQUEST,
+	NR_NFAPI_PNF_START_RESPONSE,
+	NR_NFAPI_PNF_STOP_REQUEST,
+	NR_NFAPI_PNF_STOP_RESPONSE,
+	NR_NFAPI_PARAM_REQUEST,
+	NR_NFAPI_PARAM_RESPONSE,
+	NR_NFAPI_CONFIG_REQUEST,
+	NR_NFAPI_CONFIG_RESPONSE,
+	NR_NFAPI_START_REQUEST,
+	NR_NFAPI_START_RESPONSE,
+	NR_NFAPI_STOP_REQUEST,
+	NR_NFAPI_STOP_RESPONSE,
+	NR_NFAPI_MEASUREMENT_REQUEST,
+	NR_NFAPI_MEASUREMENT_RESPONSE,
+
+	NR_NFAPI_UL_NODE_SYNC = 0x0180,
+	NR_NFAPI_DL_NODE_SYNC,
+	NR_NFAPI_TIMING_INFO,
+
+
+	NR_NFAPI_RSSI_REQUEST = 0x0200,
+	NR_NFAPI_RSSI_RESPONSE,
+	NR_NFAPI_RSSI_INDICATION,
+	NR_NFAPI_CELL_SEARCH_REQUEST,
+	NR_NFAPI_CELL_SEARCH_RESPONSE,
+	NR_NFAPI_CELL_SEARCH_INDICATION,
+	NR_NFAPI_BROADCAST_DETECT_REQUEST,
+	NR_NFAPI_BROADCAST_DETECT_RESPONSE,
+	NR_NFAPI_BROADCAST_DETECT_INDICATION,
+	NR_NFAPI_SYSTEM_INFORMATION_SCHEDULE_REQUEST,
+	NR_NFAPI_SYSTEM_INFORMATION_SCHEDULE_RESPONSE,
+	NR_NFAPI_SYSTEM_INFORMATION_SCHEDULE_INDICATION,
+	NR_NFAPI_SYSTEM_INFORMATION_REQUEST,
+	NR_NFAPI_SYSTEM_INFORMATION_RESPONSE,
+	NR_NFAPI_SYSTEM_INFORMATION_INDICATION,
+	NR_NFAPI_NMM_STOP_REQUEST,
+	NR_NFAPI_NMM_STOP_RESPONSE,
+
+	NR_NFAPI_VENDOR_EXT_MSG_MIN = 0x0300,
+	NR_NFAPI_VENDOR_EXT_MSG_MAX = 0x03FF,
+
+
+	NR_NFAPI_MAX_MESSAGE_ID,
+} nr_nfapi_message_id_e;
+
+// nFAPI Error Codes
+typedef enum {
+	NR_NFAPI_MSG_OK = 0,
+	NR_NFAPI_MSG_INVALID_STATE,
+	NR_NFAPI_MSG_INVALID_CONFIG,
+	NR_NFAPI_SFN_OUT_OF_SYNC,
+	NR_NFAPI_MSG_SUBFRAME_ERR,
+	NR_NFAPI_MSG_BCH_MISSING,
+	NR_NFAPI_MSG_INVALID_SFN,
+	NR_NFAPI_MSG_HI_ERR,
+	NR_NFAPI_MSG_TX_ERR,
+	
+	NR_NFAPI_LBT_NO_PDU_IN_DL_REQ,
+	NR_NFAPI_LBT_NO_VALID_CONFIG_REQ_RECEIVED,
+	NR_NFAPI_FAPI_E_LBT_SF_SFN_PASSED_END_SF_SFN,
+	NR_NFAPI_FAPI_E_LBT_OVERLAP,
+	NR_NFAPI_MSG_BCH_PRESENT,
+	
+	NR_NFAPI_NBIOT_UNEXPECTED_REQ,
+
+	// This is special return code that indicates that a response has
+	// been send via P9
+	NR_NFAPI_MSG_P9_RESPONSE = 0xAA
+} nr_nfapi_error_code_e;
+
+
+typedef enum {
+	NR_NFAPI_P4_MSG_OK = 100,
+	NR_NFAPI_P4_MSG_INVALID_STATE = 101,
+	NR_NFAPI_P4_MSG_INVALID_CONFIG = 102,
+	NR_NFAPI_P4_MSG_RAT_NOT_SUPPORTED = 103,
+	NR_NFAPI_P4_MSG_NMM_STOP_OK = 200,
+	NR_NFAPI_P4_MSG_NMM_STOP_IGNOREDED = 201,
+	NR_NFAPI_P4_MSG_NMM_STOP_INVALID_STATE = 202,
+	NR_NFAPI_P4_MSG_PROCEDURE_COMPLETE = 300,
+	NR_NFAPI_P4_MSG_PROCEDURE_STOPPED = 301,
+	NR_NFAPI_P4_MSG_PARTIAL_RESULTS = 302,
+	NR_NFAPI_P4_MSG_TIMEOUT = 303
+} nr_nfapi_p4_error_code_e;
+
+// nFAPI enums
+typedef enum {
+	NR_NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE = 0,
+	NR_NFAPI_DL_CONFIG_BCH_PDU_TYPE,
+	NR_NFAPI_DL_CONFIG_MCH_PDU_TYPE,
+	NR_NFAPI_DL_CONFIG_DLSCH_PDU_TYPE,
+	NR_NFAPI_DL_CONFIG_PCH_PDU_TYPE,
+	NR_NFAPI_DL_CONFIG_PRS_PDU_TYPE,
+	NR_NFAPI_DL_CONFIG_CSI_RS_PDU_TYPE,
+	NR_NFAPI_DL_CONFIG_EPDCCH_DL_PDU_TYPE,
+	NR_NFAPI_DL_CONFIG_MPDCCH_PDU_TYPE,
+	NR_NFAPI_DL_CONFIG_NBCH_PDU_TYPE,
+	NR_NFAPI_DL_CONFIG_NPDCCH_PDU_TYPE,
+	NR_NFAPI_DL_CONFIG_NDLSCH_PDU_TYPE
+} nr_nfapi_dl_config_pdu_type_e;
+
+typedef enum {
+	NR_NFAPI_DL_DCI_FORMAT_1 = 0,
+	NR_NFAPI_DL_DCI_FORMAT_1A,
+	NR_NFAPI_DL_DCI_FORMAT_1B,
+	NR_NFAPI_DL_DCI_FORMAT_1C,
+	NR_NFAPI_DL_DCI_FORMAT_1D,
+	NR_NFAPI_DL_DCI_FORMAT_2,
+	NR_NFAPI_DL_DCI_FORMAT_2A,
+	NR_NFAPI_DL_DCI_FORMAT_2B,
+	NR_NFAPI_DL_DCI_FORMAT_2C
+} nr_nfapi_dl_dci_format_e;
+
+typedef enum {
+	NR_NFAPI_UL_DCI_FORMAT_0 = 0,
+	NR_NFAPI_UL_DCI_FORMAT_3,
+	NR_NFAPI_UL_DCI_FORMAT_3A,
+	NR_NFAPI_UL_DCI_FORMAT_4
+} nr_nfapi_ul_dci_format_e;
+
+typedef enum {
+	NR_NFAPI_UL_CONFIG_ULSCH_PDU_TYPE = 0,
+	NR_NFAPI_UL_CONFIG_ULSCH_CQI_RI_PDU_TYPE,
+	NR_NFAPI_UL_CONFIG_ULSCH_HARQ_PDU_TYPE,
+	NR_NFAPI_UL_CONFIG_ULSCH_CQI_HARQ_RI_PDU_TYPE,
+	NR_NFAPI_UL_CONFIG_UCI_CQI_PDU_TYPE,
+	NR_NFAPI_UL_CONFIG_UCI_SR_PDU_TYPE,
+	NR_NFAPI_UL_CONFIG_UCI_HARQ_PDU_TYPE,
+	NR_NFAPI_UL_CONFIG_UCI_SR_HARQ_PDU_TYPE,
+	NR_NFAPI_UL_CONFIG_UCI_CQI_HARQ_PDU_TYPE,
+	NR_NFAPI_UL_CONFIG_UCI_CQI_SR_PDU_TYPE,
+	NR_NFAPI_UL_CONFIG_UCI_CQI_SR_HARQ_PDU_TYPE,
+	NR_NFAPI_UL_CONFIG_SRS_PDU_TYPE,
+	NR_NFAPI_UL_CONFIG_HARQ_BUFFER_PDU_TYPE,
+	NR_NFAPI_UL_CONFIG_ULSCH_UCI_CSI_PDU_TYPE,
+	NR_NFAPI_UL_CONFIG_ULSCH_UCI_HARQ_PDU_TYPE,
+	NR_NFAPI_UL_CONFIG_ULSCH_CSI_UCI_HARQ_PDU_TYPE,
+	NR_NFAPI_UL_CONFIG_NULSCH_PDU_TYPE,
+	NR_NFAPI_UL_CONFIG_NRACH_PDU_TYPE,
+} nr_nfapi_ul_config_pdu_type_e;
+
+typedef enum {
+	NR_NFAPI_HI_DCI0_HI_PDU_TYPE = 0,
+	NR_NFAPI_HI_DCI0_DCI_PDU_TYPE,
+	NR_NFAPI_HI_DCI0_EPDCCH_DCI_PDU_TYPE,
+	NR_NFAPI_HI_DCI0_MPDCCH_DCI_PDU_TYPE,
+	NR_NFAPI_HI_DCI0_NPDCCH_DCI_PDU_TYPE,
+} nr_nfapi_hi_dci0_pdu_type_e;
+
+typedef enum {
+	NR_NFAPI_HARQ_ACK = 1,
+	NR_NFAPI_HARQ_NACK,
+	NR_NFAPI_HARQ_ACK_OR_NACK,
+	NR_NFAPI_HARQ_DTX,
+	NR_NFAPI_HARQ_ACK_OR_DTX,
+	NR_NFAPI_HARQ_NACK_OR_DTX,
+	NR_NFAPI_HARQ_ACK_OR_NACK_OR_DTX
+} nr_nfapi_harq_type_e;
+
+typedef enum {
+	NR_NFAPI_CSI_REPORT_TYPE_PERIODIC = 0,
+	NR_NFAPI_CSI_REPORT_TYPE_APERIODIC
+} nr_nfapi_csi_report_type_e;
+
+typedef enum {
+	NR_NFAPI_DL_BW_SUPPORTED_6 = 1,
+	NR_NFAPI_DL_BW_SUPPORTED_15 = 2,
+	NR_NFAPI_DL_BW_SUPPORTED_25 = 4,
+	NR_NFAPI_DL_BW_SUPPORTED_50 = 8,
+	NR_NFAPI_DL_BW_SUPPORTED_75 = 16,
+	NR_NFAPI_DL_BW_SUPPORTED_100 = 32
+} nr_nfapi_dl_bandwith_supported_e;
+
+typedef enum {
+	NR_NFAPI_UL_BW_SUPPORTED_6 = 1,
+	NR_NFAPI_UL_BW_SUPPORTED_15 = 2,
+	NR_NFAPI_UL_BW_SUPPORTED_25 = 4,
+	NR_NFAPI_UL_BW_SUPPORTED_50 = 8,
+	NR_NFAPI_UL_BW_SUPPORTED_75 = 16,
+	NR_NFAPI_UL_BW_SUPPORTED_100 = 32
+} nr_nfapi_ul_bandwith_supported_e;
+
+typedef enum {
+	NR_NFAPI_3GPP_REL_SUPPORTED_8 = 0,
+	NR_NFAPI_3GPP_REL_SUPPORTED_9 = 1,
+	NR_NFAPI_3GPP_REL_SUPPORTED_10 = 2,
+	NR_NFAPI_3GPP_REL_SUPPORTED_11 = 4,
+	NR_NFAPI_3GPP_REL_SUPPORTED_12 = 8,
+  NR_NFAPI_3GPP_REL_SUPPORTED_15 = 64
+} nr_nfapi_3gpp_release_supported_e;
+
+
+typedef enum {
+	NR_NFAPI_DUPLEXING_MODE_TDD = 0,
+	NR_NFAPI_DUPLEXING_MODE_FDD = 1,
+	NR_NFAPI_DUPLEXING_MODE_HD_FDD = 2,
+} nr_nfapi_duplexing_mode_e;
+
+typedef enum {
+	NR_NFAPI_CP_NORMAL = 0,
+	NR_NFAPI_CP_EXTENDED = 1
+} nr_nfapi_cyclic_prefix_type_e;
+
+typedef enum {
+	NR_NFAPI_RAT_TYPE_LTE = 0,
+	NR_NFAPI_RAT_TYPE_UTRAN = 1,
+	NR_NFAPI_RAT_TYPE_GERAN = 2,
+	NR_NFAPI_RAT_TYPE_NB_IOT = 3,
+  NR_NFAPI_RAT_TYPE_NR = 4
+} nr_nfapi_rat_type_e;
+
+typedef enum {
+	NR_NFAPI_HARQ_INDICATION_TDD_HARQ_ACK_NACK_FORMAT_BUNDLING,
+	NR_NFAPI_HARQ_INDICATION_TDD_HARQ_ACK_NACK_FORMAT_MULIPLEXING,
+	NR_NFAPI_HARQ_INDICATION_TDD_HARQ_ACK_NACK_FORMAT_SPECIAL_BUNDLING,
+	NR_NFAPI_HARQ_INDICATION_TDD_HARQ_ACK_NACK_FORMAT_CHANNEL_SELECTION,
+	NR_NFAPI_HARQ_INDICATION_TDD_HARQ_ACK_NACK_FORMAT_FORMAT_3,
+	NR_NFAPI_HARQ_INDICATION_TDD_HARQ_ACK_NACK_FORMAT_FORMAT_4,
+	NR_NFAPI_HARQ_INDICATION_TDD_HARQ_ACK_NACK_FORMAT_FORMAT_5
+} nr_nfapi_harq_indication_tdd_ack_nackformat_e;
+
+
+typedef enum {
+	NR_NFAPI_LBT_DL_CONFIG_REQUEST_PDSCH_PDU_TYPE = 0,
+	NR_NFAPI_LBT_DL_CONFIG_REQUEST_DRS_PDU_TYPE
+} nr_nfapi_lbt_dl_config_pdu_type_e;
+
+typedef enum {
+	NR_NFAPI_LBT_DL_RSP_PDSCH_PDU_TYPE = 0,
+	NR_NFAPI_LBT_DL_RSP_DRS_PDU_TYPE
+} nr_nfapi_lbt_dl_rsp_pdu_type_e;
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint32_t length;
+	uint8_t value[NR_NFAPI_MAX_OPAQUE_DATA];
+} nr_nfapi_opaqaue_data_t;
+
+// Utility functions to turn enums into char*
+const char* nr_nfapi_error_code_to_str(nr_nfapi_error_code_e value);
+
+
+// P5 Sub Structures
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t nr_nfapi_sync_mode;
+	uint8_t location_mode;
+	uint16_t location_coordinates_length;
+	uint8_t location_coordinates[NR_NFAPI_PNF_PARAM_GENERAL_LOCATION_LENGTH];
+	uint32_t dl_config_timing;
+	uint32_t tx_timing;
+	uint32_t ul_config_timing;
+	uint32_t hi_dci0_timing;
+	uint16_t maximum_number_phys;
+	uint16_t maximum_total_bandwidth;
+	uint8_t maximum_total_number_dl_layers;
+	uint8_t maximum_total_number_ul_layers;
+	uint8_t shared_bands;
+	uint8_t shared_pa;
+	int16_t maximum_total_power;
+	uint8_t oui[NR_NFAPI_PNF_PARAM_GENERAL_OUI_LENGTH];
+} nr_nfapi_pnf_param_general_t;
+#define NR_NFAPI_PNF_PARAM_GENERAL_TAG 0x1000
+
+
+
+
+
+typedef struct {
+	uint16_t rf_config_index;
+} nr_nfapi_rf_config_info_t;
+
+typedef struct {
+	uint16_t phy_config_index;
+	uint16_t number_of_rfs;
+	nr_nfapi_rf_config_info_t rf_config[NR_NFAPI_MAX_PNF_PHY_RF_CONFIG];
+	uint16_t number_of_rf_exclusions;
+	nr_nfapi_rf_config_info_t excluded_rf_config[NR_NFAPI_MAX_PNF_PHY_RF_CONFIG];
+	uint16_t downlink_channel_bandwidth_supported;
+	uint16_t uplink_channel_bandwidth_supported;
+	uint8_t number_of_dl_layers_supported;
+	uint8_t number_of_ul_layers_supported;
+	uint16_t maximum_3gpp_release_supported;
+	uint8_t nmm_modes_supported;
+} nr_nfapi_pnf_phy_info_t;
+
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t number_of_phys;
+	nr_nfapi_pnf_phy_info_t phy[NR_NFAPI_MAX_PNF_PHY];
+} nr_nfapi_pnf_phy_t;
+#define NR_NFAPI_PNF_PHY_TAG 0x1001
+
+typedef struct {
+	uint16_t phy_config_index;
+	uint16_t transmission_mode_7_supported;
+	uint16_t transmission_mode_8_supported;
+	uint16_t two_antenna_ports_for_pucch;
+	uint16_t transmission_mode_9_supported;
+	uint16_t simultaneous_pucch_pusch;
+	uint16_t four_layer_tx_with_tm3_and_tm4;
+} nr_nfapi_pnf_phy_rel10_info_t;
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t number_of_phys;
+	nr_nfapi_pnf_phy_rel10_info_t phy[NR_NFAPI_MAX_PNF_PHY];
+} nr_nfapi_pnf_phy_rel10_t;
+#define NR_NFAPI_PNF_PHY_REL10_TAG 0x100A
+
+typedef struct {
+	uint16_t phy_config_index;
+	uint16_t edpcch_supported;
+	uint16_t multi_ack_csi_reporting;
+	uint16_t pucch_tx_diversity;
+	uint16_t ul_comp_supported;
+	uint16_t transmission_mode_5_supported;
+} nr_nfapi_pnf_phy_rel11_info_t;
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t number_of_phys;
+	nr_nfapi_pnf_phy_rel11_info_t phy[NR_NFAPI_MAX_PNF_PHY];
+} nr_nfapi_pnf_phy_rel11_t;
+#define NR_NFAPI_PNF_PHY_REL11_TAG 0x100B
+
+
+typedef struct {
+	uint16_t phy_config_index;
+	uint16_t csi_subframe_set;
+	uint16_t enhanced_4tx_codebook;
+	uint16_t drs_supported;
+	uint16_t ul_64qam_supported;
+	uint16_t transmission_mode_10_supported;
+	uint16_t alternative_bts_indices;
+} nr_nfapi_pnf_phy_rel12_info_t;
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t number_of_phys;
+	nr_nfapi_pnf_phy_rel12_info_t phy[NR_NFAPI_MAX_PNF_PHY];
+} nr_nfapi_pnf_phy_rel12_t;
+#define NR_NFAPI_PNF_PHY_REL12_TAG 0x100C
+
+typedef struct {
+	uint16_t phy_config_index;
+	uint16_t pucch_format4_supported;
+	uint16_t pucch_format5_supported;
+	uint16_t more_than_5_ca_support;
+	uint16_t laa_supported;
+	uint16_t laa_ending_in_dwpts_supported;
+	uint16_t laa_starting_in_second_slot_supported;
+	uint16_t beamforming_supported;
+	uint16_t csi_rs_enhancement_supported;
+	uint16_t drms_enhancement_supported;
+	uint16_t srs_enhancement_supported;
+} nr_nfapi_pnf_phy_rel13_info_t;
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t number_of_phys;
+	nr_nfapi_pnf_phy_rel13_info_t phy[NR_NFAPI_MAX_PNF_PHY];
+} nr_nfapi_pnf_phy_rel13_t;
+#define NR_NFAPI_PNF_PHY_REL13_TAG 0x100D
+
+typedef struct {
+	uint16_t phy_config_index;
+	uint16_t number_of_rfs;
+	nr_nfapi_rf_config_info_t rf_config[NR_NFAPI_MAX_PNF_PHY_RF_CONFIG];
+	uint16_t number_of_rf_exclusions;
+	nr_nfapi_rf_config_info_t excluded_rf_config[NR_NFAPI_MAX_PNF_PHY_RF_CONFIG];
+	uint8_t number_of_dl_layers_supported;
+	uint8_t number_of_ul_layers_supported;
+	uint16_t maximum_3gpp_release_supported;
+	uint8_t nmm_modes_supported;
+} nr_nfapi_pnf_phy_rel13_nb_iot_info_t;
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t number_of_phys;
+	nr_nfapi_pnf_phy_rel13_nb_iot_info_t phy[NR_NFAPI_MAX_PNF_PHY];
+} nr_nfapi_pnf_phy_rel13_nb_iot_t;
+#define NR_NFAPI_PNF_PHY_REL13_NB_IOT_TAG 0x100E
+
+typedef struct {
+  uint16_t phy_config_index;
+} nr_nfapi_pnf_phy_rel15_info_t;
+
+typedef struct {
+  nr_nfapi_tl_t tl;
+  uint16_t number_of_phys;
+  nr_nfapi_pnf_phy_rel15_info_t phy[NR_NFAPI_MAX_PNF_PHY];
+} nr_nfapi_pnf_phy_rel15_t;
+#define NR_NFAPI_PNF_PHY_REL15_TAG 0x100H
+
+
+typedef struct {
+	uint16_t rf_config_index;
+	uint16_t band;
+	int16_t maximum_transmit_power; 
+	int16_t minimum_transmit_power;
+	uint8_t number_of_antennas_suppported;
+	uint32_t minimum_downlink_frequency;
+	uint32_t maximum_downlink_frequency;
+	uint32_t minimum_uplink_frequency;
+	uint32_t maximum_uplink_frequency;
+} nr_nfapi_pnf_rf_info_t;
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t number_of_rfs;
+	nr_nfapi_pnf_rf_info_t rf[NR_NFAPI_MAX_PNF_RF];
+} nr_nfapi_pnf_rf_t;
+#define NR_NFAPI_PNF_RF_TAG 0x1002
+
+typedef struct {
+	uint16_t phy_id;
+	uint16_t phy_config_index;
+	uint16_t rf_config_index;
+} nr_nfapi_phy_rf_config_info_t;
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t number_phy_rf_config_info;
+	nr_nfapi_phy_rf_config_info_t phy_rf_config[NR_NFAPI_MAX_PHY_RF_INSTANCES];
+} nr_nfapi_pnf_phy_rf_config_t;
+#define NR_NFAPI_PNF_PHY_RF_TAG 0x1003
+
+// Generic strucutre for single tlv value.
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t value;
+} nr_nfapi_uint16_tlv_t;
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	int16_t value;
+} nr_nfapi_int16_tlv_t;
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t value;
+} nr_nfapi_uint8_tlv_t;
+
+typedef struct {
+	nr_nfapi_uint16_tlv_t phy_state;
+} nr_nfapi_l1_status;
+
+#define NR_NFAPI_L1_STATUS_PHY_STATE_TAG 0x00FA
+
+typedef struct {
+	nr_nfapi_uint16_tlv_t dl_bandwidth_support;
+	nr_nfapi_uint16_tlv_t ul_bandwidth_support;
+	nr_nfapi_uint16_tlv_t dl_modulation_support;
+	nr_nfapi_uint16_tlv_t ul_modulation_support;
+	nr_nfapi_uint16_tlv_t phy_antenna_capability;
+	nr_nfapi_uint16_tlv_t release_capability;
+	nr_nfapi_uint16_tlv_t mbsfn_capability;
+} nr_nfapi_phy_capabilities_t;
+
+#define NR_NFAPI_PHY_CAPABILITIES_DL_BANDWIDTH_SUPPORT_TAG 0x00C8
+#define NR_NFAPI_PHY_CAPABILITIES_UL_BANDWIDTH_SUPPORT_TAG 0x00C9
+#define NR_NFAPI_PHY_CAPABILITIES_DL_MODULATION_SUPPORT_TAG 0x00CA
+#define NR_NFAPI_PHY_CAPABILITIES_UL_MODULATION_SUPPORT_TAG 0x00CB
+#define NR_NFAPI_PHY_CAPABILITIES_PHY_ANTENNA_CAPABILITY_TAG 0x00CC
+#define NR_NFAPI_PHY_CAPABILITIES_RELEASE_CAPABILITY_TAG 0x00CD
+#define NR_NFAPI_PHY_CAPABILITIES_MBSFN_CAPABILITY_TAG 0x00CE
+
+
+typedef struct {
+	nr_nfapi_uint16_tlv_t data_report_mode;
+	nr_nfapi_uint16_tlv_t sfnsf;
+} nr_nfapi_l23_config_t;
+
+
+#define NR_NFAPI_L23_CONFIG_DATA_REPORT_MODE_TAG 0x00F0
+#define NR_NFAPI_L23_CONFIG_SFNSF_TAG 0x00F1
+
+typedef struct {
+  nr_nfapi_uint16_tlv_t numerology_index_mu;
+	nr_nfapi_uint16_tlv_t duplex_mode;
+	nr_nfapi_uint16_tlv_t pcfich_power_offset;
+	nr_nfapi_uint16_tlv_t pb;
+	nr_nfapi_uint16_tlv_t dl_cyclic_prefix_type;
+	nr_nfapi_uint16_tlv_t ul_cyclic_prefix_type;
+} nr_nfapi_subframe_config_t;
+
+#define NR_NFAPI_SUBFRAME_CONFIG_DUPLEX_MODE_TAG 0x0001
+#define NR_NFAPI_SUBFRAME_CONFIG_PCFICH_POWER_OFFSET_TAG 0x0002
+#define NR_NFAPI_SUBFRAME_CONFIG_PB_TAG 0x0003
+#define NR_NFAPI_SUBFRAME_CONFIG_DL_CYCLIC_PREFIX_TYPE_TAG 0x0004
+#define NR_NFAPI_SUBFRAME_CONFIG_UL_CYCLIC_PREFIX_TYPE_TAG 0x0005
+#define NR_NFAPI_SUBFRAME_CONFIG_NUMEROLOGY_INDEX_MU_TAG 0x0006
+
+typedef struct {
+	nr_nfapi_uint16_tlv_t dl_channel_bandwidth;
+	nr_nfapi_uint16_tlv_t ul_channel_bandwidth;
+	nr_nfapi_uint16_tlv_t reference_signal_power;
+	nr_nfapi_uint16_tlv_t tx_antenna_ports;
+	nr_nfapi_uint16_tlv_t rx_antenna_ports;
+} nr_nfapi_rf_config_t;
+
+#define NR_NFAPI_RF_CONFIG_DL_CHANNEL_BANDWIDTH_TAG 0x000A
+#define NR_NFAPI_RF_CONFIG_UL_CHANNEL_BANDWIDTH_TAG 0x000B
+#define NR_NFAPI_RF_CONFIG_REFERENCE_SIGNAL_POWER_TAG 0x000C
+#define NR_NFAPI_RF_CONFIG_TX_ANTENNA_PORTS_TAG 0x000D
+#define NR_NFAPI_RF_CONFIG_RX_ANTENNA_PORTS_TAG 0x000E
+
+typedef struct {
+	nr_nfapi_uint16_tlv_t phich_resource;
+	nr_nfapi_uint16_tlv_t phich_duration;
+	nr_nfapi_uint16_tlv_t phich_power_offset;
+} nr_nfapi_phich_config_t;
+
+#define NR_NFAPI_PHICH_CONFIG_PHICH_RESOURCE_TAG 0x0014
+#define NR_NFAPI_PHICH_CONFIG_PHICH_DURATION_TAG 0x0015
+#define NR_NFAPI_PHICH_CONFIG_PHICH_POWER_OFFSET_TAG 0x0016
+
+
+typedef struct {
+	nr_nfapi_uint16_tlv_t primary_synchronization_signal_epre_eprers;
+	nr_nfapi_uint16_tlv_t secondary_synchronization_signal_epre_eprers;
+	nr_nfapi_uint16_tlv_t physical_cell_id;
+  nr_nfapi_uint16_tlv_t half_frame_index;
+  nr_nfapi_uint16_tlv_t ssb_subcarrier_offset;
+  nr_nfapi_uint16_tlv_t ssb_position_in_burst;
+  nr_nfapi_uint16_tlv_t ssb_periodicity;
+  nr_nfapi_uint16_tlv_t ss_pbch_block_power;
+  nr_nfapi_uint16_tlv_t n_ssb_crb;
+} nr_nfapi_sch_config_t;
+
+#define NR_NFAPI_SCH_CONFIG_PRIMARY_SYNCHRONIZATION_SIGNAL_EPRE_EPRERS_TAG 0x001E
+#define NR_NFAPI_SCH_CONFIG_SECONDARY_SYNCHRONIZATION_SIGNAL_EPRE_EPRERS_TAG 0x001F
+#define NR_NFAPI_SCH_CONFIG_PHYSICAL_CELL_ID_TAG 0x0020
+#define NR_NFAPI_SCH_CONFIG_HALF_FRAME_INDEX_TAG 0x0021
+#define NR_NFAPI_SCH_CONFIG_SSB_SUBCARRIER_OFFSET_TAG 0x0022
+#define NR_NFAPI_SCH_CONFIG_SSB_POSITION_IN_BURST 0x0023
+#define NR_NFAPI_SCH_CONFIG_SSB_PERIODICITY 0x0024
+#define NR_NFAPI_SCH_CONFIG_SS_PBCH_BLOCK_POWER 0x0025
+#define NR_NFAPI_SCH_CONFIG_N_SSB_CRB 0x0025
+
+typedef struct {
+	nr_nfapi_uint16_tlv_t configuration_index;
+	nr_nfapi_uint16_tlv_t root_sequence_index;
+	nr_nfapi_uint16_tlv_t zero_correlation_zone_configuration;
+	nr_nfapi_uint16_tlv_t high_speed_flag;
+	nr_nfapi_uint16_tlv_t frequency_offset;
+} nr_nfapi_prach_config_t;
+
+#define NR_NFAPI_PRACH_CONFIG_CONFIGURATION_INDEX_TAG 0x0028
+#define NR_NFAPI_PRACH_CONFIG_ROOT_SEQUENCE_INDEX_TAG 0x0029
+#define NR_NFAPI_PRACH_CONFIG_ZERO_CORRELATION_ZONE_CONFIGURATION_TAG 0x002A
+#define NR_NFAPI_PRACH_CONFIG_HIGH_SPEED_FLAG_TAG 0x002B
+#define NR_NFAPI_PRACH_CONFIG_FREQUENCY_OFFSET_TAG 0x002C
+
+typedef struct {
+	nr_nfapi_uint16_tlv_t hopping_mode;
+	nr_nfapi_uint16_tlv_t hopping_offset;
+	nr_nfapi_uint16_tlv_t number_of_subbands;
+} nr_nfapi_pusch_config_t;
+
+#define NR_NFAPI_PUSCH_CONFIG_HOPPING_MODE_TAG 0x0032
+#define NR_NFAPI_PUSCH_CONFIG_HOPPING_OFFSET_TAG 0x0033
+#define NR_NFAPI_PUSCH_CONFIG_NUMBER_OF_SUBBANDS_TAG 0x0034
+
+typedef struct {
+	nr_nfapi_uint16_tlv_t delta_pucch_shift;
+	nr_nfapi_uint16_tlv_t n_cqi_rb;
+	nr_nfapi_uint16_tlv_t n_an_cs;
+	nr_nfapi_uint16_tlv_t n1_pucch_an;
+} nr_nfapi_pucch_config_t;
+
+#define NR_NFAPI_PUCCH_CONFIG_DELTA_PUCCH_SHIFT_TAG 0x003C
+#define NR_NFAPI_PUCCH_CONFIG_N_CQI_RB_TAG 0x003D
+#define NR_NFAPI_PUCCH_CONFIG_N_AN_CS_TAG 0x003E
+#define NR_NFAPI_PUCCH_CONFIG_N1_PUCCH_AN_TAG 0x003F
+
+typedef struct {
+	nr_nfapi_uint16_tlv_t bandwidth_configuration;
+	nr_nfapi_uint16_tlv_t max_up_pts;
+	nr_nfapi_uint16_tlv_t srs_subframe_configuration;
+	nr_nfapi_uint16_tlv_t srs_acknack_srs_simultaneous_transmission;
+} nr_nfapi_srs_config_t;
+
+#define NR_NFAPI_SRS_CONFIG_BANDWIDTH_CONFIGURATION_TAG 0x0046
+#define NR_NFAPI_SRS_CONFIG_MAX_UP_PTS_TAG 0x0047
+#define NR_NFAPI_SRS_CONFIG_SRS_SUBFRAME_CONFIGURATION_TAG 0x0048
+#define NR_NFAPI_SRS_CONFIG_SRS_ACKNACK_SRS_SIMULTANEOUS_TRANSMISSION_TAG 0x0049
+
+typedef struct {
+	nr_nfapi_uint16_tlv_t uplink_rs_hopping;
+	nr_nfapi_uint16_tlv_t group_assignment;
+	nr_nfapi_uint16_tlv_t cyclic_shift_1_for_drms;
+} nr_nfapi_uplink_reference_signal_config_t;
+
+#define NR_NFAPI_UPLINK_REFERENCE_SIGNAL_CONFIG_UPLINK_RS_HOPPING_TAG 0x0050
+#define NR_NFAPI_UPLINK_REFERENCE_SIGNAL_CONFIG_GROUP_ASSIGNMENT_TAG 0x0051
+#define NR_NFAPI_UPLINK_REFERENCE_SIGNAL_CONFIG_CYCLIC_SHIFT_1_FOR_DRMS_TAG 0x0052
+
+
+typedef struct {
+	nr_nfapi_uint16_tlv_t ed_threshold_lbt_pdsch;
+	nr_nfapi_uint16_tlv_t ed_threshold_lbt_drs;
+	nr_nfapi_uint16_tlv_t pd_threshold;
+	nr_nfapi_uint16_tlv_t multi_carrier_type;
+	nr_nfapi_uint16_tlv_t multi_carrier_tx;
+	nr_nfapi_uint16_tlv_t multi_carrier_freeze;
+	nr_nfapi_uint16_tlv_t tx_antenna_ports_drs;
+	nr_nfapi_uint16_tlv_t tx_power_drs;
+} nr_nfapi_laa_config_t;
+
+#define NR_NFAPI_LAA_CONFIG_ED_THRESHOLD_FOR_LBT_FOR_PDSCH_TAG 0x0064
+#define NR_NFAPI_LAA_CONFIG_ED_THRESHOLD_FOR_LBT_FOR_DRS_TAG 0x0065
+#define NR_NFAPI_LAA_CONFIG_PD_THRESHOLD_TAG 0x0066
+#define NR_NFAPI_LAA_CONFIG_MULTI_CARRIER_TYPE_TAG 0x0067
+#define NR_NFAPI_LAA_CONFIG_MULTI_CARRIER_TX_TAG 0x0068
+#define NR_NFAPI_LAA_CONFIG_MULTI_CARRIER_FREEZE_TAG 0x0069
+#define NR_NFAPI_LAA_CONFIG_TX_ANTENNA_PORTS_FOR_DRS_TAG 0x006A
+#define NR_NFAPI_LAA_CONFIG_TRANSMISSION_POWER_FOR_DRS_TAG 0x006B
+
+typedef struct {
+
+	nr_nfapi_uint16_tlv_t pbch_repetitions_enable_r13;
+	nr_nfapi_uint16_tlv_t prach_catm_root_sequence_index;
+	nr_nfapi_uint16_tlv_t prach_catm_zero_correlation_zone_configuration;
+	nr_nfapi_uint16_tlv_t prach_catm_high_speed_flag;
+	nr_nfapi_uint16_tlv_t prach_ce_level_0_enable;
+	nr_nfapi_uint16_tlv_t prach_ce_level_0_configuration_index;
+	nr_nfapi_uint16_tlv_t prach_ce_level_0_frequency_offset;
+	nr_nfapi_uint16_tlv_t prach_ce_level_0_number_of_repetitions_per_attempt;
+	nr_nfapi_uint16_tlv_t prach_ce_level_0_starting_subframe_periodicity;
+	nr_nfapi_uint16_tlv_t prach_ce_level_0_hopping_enable;
+	nr_nfapi_uint16_tlv_t prach_ce_level_0_hopping_offset;
+	nr_nfapi_uint16_tlv_t prach_ce_level_1_enable;
+	nr_nfapi_uint16_tlv_t prach_ce_level_1_configuration_index;
+	nr_nfapi_uint16_tlv_t prach_ce_level_1_frequency_offset;
+	nr_nfapi_uint16_tlv_t prach_ce_level_1_number_of_repetitions_per_attempt;
+	nr_nfapi_uint16_tlv_t prach_ce_level_1_starting_subframe_periodicity;
+	nr_nfapi_uint16_tlv_t prach_ce_level_1_hopping_enable;
+	nr_nfapi_uint16_tlv_t prach_ce_level_1_hopping_offset;
+	nr_nfapi_uint16_tlv_t prach_ce_level_2_enable;
+	nr_nfapi_uint16_tlv_t prach_ce_level_2_configuration_index;
+	nr_nfapi_uint16_tlv_t prach_ce_level_2_frequency_offset;
+	nr_nfapi_uint16_tlv_t prach_ce_level_2_number_of_repetitions_per_attempt;
+	nr_nfapi_uint16_tlv_t prach_ce_level_2_starting_subframe_periodicity;
+	nr_nfapi_uint16_tlv_t prach_ce_level_2_hopping_enable;
+	nr_nfapi_uint16_tlv_t prach_ce_level_2_hopping_offset;
+	nr_nfapi_uint16_tlv_t prach_ce_level_3_enable;
+	nr_nfapi_uint16_tlv_t prach_ce_level_3_configuration_index;
+	nr_nfapi_uint16_tlv_t prach_ce_level_3_frequency_offset;
+	nr_nfapi_uint16_tlv_t prach_ce_level_3_number_of_repetitions_per_attempt;
+	nr_nfapi_uint16_tlv_t prach_ce_level_3_starting_subframe_periodicity;
+	nr_nfapi_uint16_tlv_t prach_ce_level_3_hopping_enable;
+	nr_nfapi_uint16_tlv_t prach_ce_level_3_hopping_offset;
+	nr_nfapi_uint16_tlv_t pucch_interval_ulhoppingconfigcommonmodea;
+	nr_nfapi_uint16_tlv_t pucch_interval_ulhoppingconfigcommonmodeb;
+} nr_nfapi_emtc_config_t;
+
+#define NR_NFAPI_EMTC_CONFIG_PBCH_REPETITIONS_ENABLE_R13_TAG 0x0078
+#define NR_NFAPI_EMTC_CONFIG_PRACH_CATM_ROOT_SEQUENCE_INDEX_TAG 0x0079
+#define NR_NFAPI_EMTC_CONFIG_PRACH_CATM_ZERO_CORRELATION_ZONE_CONFIGURATION_TAG 0x007A
+#define NR_NFAPI_EMTC_CONFIG_PRACH_CATM_HIGH_SPEED_FLAG 0x007B
+#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_ENABLE_TAG 0x007C
+#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_CONFIGURATION_INDEX_TAG 0x007D
+#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_FREQUENCY_OFFSET_TAG 0x007E
+#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG 0x007F
+#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_STARTING_SUBFRAME_PERIODICITY_TAG 0x0080
+#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_HOPPING_ENABLE_TAG 0x0081
+#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_HOPPING_OFFSET_TAG 0x0082
+#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_ENABLE_TAG 0x0083
+#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_CONFIGURATION_INDEX_TAG 0x0084
+#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_FREQUENCY_OFFSET_TAG 0x0085
+#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG 0x0086
+#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_STARTING_SUBFRAME_PERIODICITY_TAG 0x0087
+#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_HOPPING_ENABLE_TAG 0x0088
+#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_HOPPING_OFFSET_TAG 0x0089
+#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_ENABLE_TAG 0x008A
+#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_CONFIGURATION_INDEX_TAG 0x008B
+#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_FREQUENCY_OFFSET_TAG 0x008C
+#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG 0x008D
+#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_STARTING_SUBFRAME_PERIODICITY_TAG 0x008E
+#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_HOPPING_ENABLE_TAG 0x008F
+#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_HOPPING_OFFSET_TAG 0x0090
+#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_ENABLE_TAG 0x0091
+#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_CONFIGURATION_INDEX_TAG 0x0092
+#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_FREQUENCY_OFFSET_TAG 0x0093
+#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG 0x0094
+#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_STARTING_SUBFRAME_PERIODICITY_TAG 0x0095
+#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_HOPPING_ENABLE_TAG 0x0096
+#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_HOPPING_OFFSET_TAG 0x0097
+#define NR_NFAPI_EMTC_CONFIG_PUCCH_INTERVAL_ULHOPPINGCONFIGCOMMONMODEA_TAG 0x0098
+#define NR_NFAPI_EMTC_CONFIG_PUCCH_INTERVAL_ULHOPPINGCONFIGCOMMONMODEB_TAG 0x0099
+
+typedef struct {
+	nr_nfapi_uint16_tlv_t operating_mode;
+	nr_nfapi_uint16_tlv_t anchor;
+	nr_nfapi_uint16_tlv_t prb_index;
+	nr_nfapi_uint16_tlv_t control_region_size;
+	nr_nfapi_uint16_tlv_t assumed_crs_aps;
+	nr_nfapi_uint16_tlv_t nprach_config_0_enabled;
+	nr_nfapi_uint16_tlv_t nprach_config_0_sf_periodicity;
+	nr_nfapi_uint16_tlv_t nprach_config_0_start_time;
+	nr_nfapi_uint16_tlv_t nprach_config_0_subcarrier_offset;
+	nr_nfapi_uint16_tlv_t nprach_config_0_number_of_subcarriers;
+	nr_nfapi_uint16_tlv_t nprach_config_0_cp_length;
+	nr_nfapi_uint16_tlv_t nprach_config_0_number_of_repetitions_per_attempt;
+	nr_nfapi_uint16_tlv_t nprach_config_1_enabled;
+	nr_nfapi_uint16_tlv_t nprach_config_1_sf_periodicity;
+	nr_nfapi_uint16_tlv_t nprach_config_1_start_time;
+	nr_nfapi_uint16_tlv_t nprach_config_1_subcarrier_offset;
+	nr_nfapi_uint16_tlv_t nprach_config_1_number_of_subcarriers;
+	nr_nfapi_uint16_tlv_t nprach_config_1_cp_length;
+	nr_nfapi_uint16_tlv_t nprach_config_1_number_of_repetitions_per_attempt;
+	nr_nfapi_uint16_tlv_t nprach_config_2_enabled;
+	nr_nfapi_uint16_tlv_t nprach_config_2_sf_periodicity;
+	nr_nfapi_uint16_tlv_t nprach_config_2_start_time;
+	nr_nfapi_uint16_tlv_t nprach_config_2_subcarrier_offset;
+	nr_nfapi_uint16_tlv_t nprach_config_2_number_of_subcarriers;
+	nr_nfapi_uint16_tlv_t nprach_config_2_cp_length;
+	nr_nfapi_uint16_tlv_t nprach_config_2_number_of_repetitions_per_attempt;
+	nr_nfapi_uint16_tlv_t three_tone_base_sequence;
+	nr_nfapi_uint16_tlv_t six_tone_base_sequence;
+	nr_nfapi_uint16_tlv_t twelve_tone_base_sequence;
+	nr_nfapi_uint16_tlv_t three_tone_cyclic_shift;
+	nr_nfapi_uint16_tlv_t six_tone_cyclic_shift;
+	nr_nfapi_uint16_tlv_t dl_gap_config_enable;
+	nr_nfapi_uint16_tlv_t dl_gap_threshold;
+	nr_nfapi_uint16_tlv_t dl_gap_periodicity;
+	nr_nfapi_uint16_tlv_t dl_gap_duration_coefficient;
+} nr_nfapi_nb_iot_config_t;
+
+#define NR_NFAPI_NB_IOT_CONFIG_OPERATING_MODE_TAG 0x00A5
+#define NR_NFAPI_NB_IOT_CONFIG_ANCHOR_TAG 0x00A6
+#define NR_NFAPI_NB_IOT_CONFIG_PRB_INDEX_TAG 0x00A7
+#define NR_NFAPI_NB_IOT_CONFIG_CONTROL_REGION_SIZE_TAG 0x00A8
+#define NR_NFAPI_NB_IOT_CONFIG_ASSUMED_CRS_APS_TAG 0x00A9
+#define NR_NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_0_ENABLED_TAG 0x00AA
+#define NR_NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_0_SF_PERIODICITY_TAG 0x00AB
+#define NR_NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_0_START_TIME_TAG 0x00AC
+#define NR_NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_0_SUBCARRIER_OFFSET_TAG 0x00AD
+#define NR_NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_0_NUMBER_OF_SUBCARRIERS_TAG 0x00AE
+#define NR_NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_0_CP_LENGTH_TAG 0x00AF
+#define NR_NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_0_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG 0x00B0
+#define NR_NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_1_ENABLED_TAG 0x00B1
+#define NR_NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_1_SF_PERIODICITY_TAG 0x00B2
+#define NR_NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_1_START_TIME_TAG 0x00B3
+#define NR_NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_1_SUBCARRIER_OFFSET_TAG 0x00B4
+#define NR_NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_1_NUMBER_OF_SUBCARRIERS_TAG 0x00B5
+#define NR_NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_1_CP_LENGTH_TAG 0x00B6
+#define NR_NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_1_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG 0x00B7
+#define NR_NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_2_ENABLED_TAG 0x00B8
+#define NR_NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_2_SF_PERIODICITY_TAG 0x00B9
+#define NR_NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_2_START_TIME_TAG 0x00BA
+#define NR_NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_2_SUBCARRIER_OFFSET_TAG 0x00BB
+#define NR_NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_2_NUMBER_OF_SUBCARRIERS_TAG 0x00BC
+#define NR_NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_2_CP_LENGTH_TAG 0x00BD
+#define NR_NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_2_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG 0x00BE
+#define NR_NFAPI_NB_IOT_CONFIG_THREE_TONE_BASE_SEQUENCE_TAG 0x00BF
+#define NR_NFAPI_NB_IOT_CONFIG_SIX_TONE_BASE_SEQUENCE_TAG 0x00C0
+#define NR_NFAPI_NB_IOT_CONFIG_TWELVE_TONE_BASE_SEQUENCE_TAG 0x00C1
+#define NR_NFAPI_NB_IOT_CONFIG_THREE_TONE_CYCLIC_SHIFT_TAG 0x00C2
+#define NR_NFAPI_NB_IOT_CONFIG_SIX_TONE_CYCLIC_SHIFT_TAG 0x00C3
+#define NR_NFAPI_NB_IOT_CONFIG_DL_GAP_CONFIG_ENABLE_TAG 0x00C4
+#define NR_NFAPI_NB_IOT_CONFIG_DL_GAP_THRESHOLD_TAG 0x00C5
+#define NR_NFAPI_NB_IOT_CONFIG_DL_GAP_PERIODICITY_TAG 0x00C6
+#define NR_NFAPI_NB_IOT_CONFIG_DL_GAP_DURATION_COEFFICIENT_TAG 0x00C7
+
+typedef struct {
+	nr_nfapi_uint16_tlv_t laa_support;
+	nr_nfapi_uint16_tlv_t pd_sensing_lbt_support;
+	nr_nfapi_uint16_tlv_t multi_carrier_lbt_support;
+	nr_nfapi_uint16_tlv_t partial_sf_support;
+} nr_nfapi_laa_capability_t;
+
+#define NR_NFAPI_LAA_CAPABILITY_LAA_SUPPORT_TAG 0x00D1
+#define NR_NFAPI_LAA_CAPABILITY_PD_SENSING_LBT_SUPPORT_TAG 0x00D2
+#define NR_NFAPI_LAA_CAPABILITY_MULTI_CARRIER_LBT_SUPPORT_TAG 0x00D3
+#define NR_NFAPI_LAA_CAPABILITY_PARTIAL_SF_SUPPORT_TAG 0x00D4
+
+typedef struct {
+	nr_nfapi_uint16_tlv_t nb_iot_support;
+	nr_nfapi_uint16_tlv_t nb_iot_operating_mode_capability;
+} nr_nfapi_nb_iot_capability_t;
+
+#define NR_NFAPI_LAA_CAPABILITY_NB_IOT_SUPPORT_TAG 0x00D5
+#define NR_NFAPI_LAA_CAPABILITY_NB_IOT_OPERATING_MODE_CAPABILITY_TAG 0x00D6
+
+typedef struct {
+	nr_nfapi_uint16_tlv_t subframe_assignment;
+	nr_nfapi_uint16_tlv_t special_subframe_patterns;
+} nr_nfapi_tdd_frame_structure_t;
+
+#define NR_NFAPI_TDD_FRAME_STRUCTURE_SUBFRAME_ASSIGNMENT_TAG 0x005A
+#define NR_NFAPI_TDD_FRAME_STRUCTURE_SPECIAL_SUBFRAME_PATTERNS_TAG 0x005B
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t number_rf_bands;
+	uint16_t rf_band[NR_NFAPI_MAX_NUM_RF_BANDS];
+} nr_nfapi_rf_bands_t;
+#define NR_NFAPI_PHY_RF_BANDS_TAG 0x0114
+
+#define NR_NFAPI_IPV4_ADDRESS_LENGTH 4
+#define NR_NFAPI_IPV6_ADDRESS_LENGTH 16
+
+// Convience enum to allow the ip addres type to be distinguished
+typedef enum {
+	NR_NFAPI_IP_ADDRESS_IPV4 = 0,
+	NR_NFAPI_IP_ADDRESS_IPV6
+} nr_nfapi_ip_address_type_e;
+
+// The type could be infered from the length, but it is clearer in 
+// code to have a type variable set
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t type;
+	union {
+		uint8_t ipv4_address[NR_NFAPI_IPV4_ADDRESS_LENGTH];
+		uint8_t ipv6_address[NR_NFAPI_IPV6_ADDRESS_LENGTH];
+	} u;
+} nr_nfapi_ip_address_t;
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t address[NR_NFAPI_IPV4_ADDRESS_LENGTH];
+} nr_nfapi_ipv4_address_t;
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t address[NR_NFAPI_IPV6_ADDRESS_LENGTH];
+} nr_nfapi_ipv6_address_t;
+
+
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t number_of_rf_bands;
+	uint16_t bands[NR_NFAPI_MAX_NMM_FREQUENCY_BANDS];
+} nr_nfapi_nmm_frequency_bands_t;
+
+//These TLVs are used exclusively by nFAPI
+typedef struct
+{
+	// These TLVs are used to setup the transport connection between VNF and PNF
+	nr_nfapi_ipv4_address_t p7_vnf_address_ipv4;
+	nr_nfapi_ipv6_address_t p7_vnf_address_ipv6;
+	nr_nfapi_uint16_tlv_t p7_vnf_port;
+
+	nr_nfapi_ipv4_address_t p7_pnf_address_ipv4;
+	nr_nfapi_ipv6_address_t p7_pnf_address_ipv6;
+	nr_nfapi_uint16_tlv_t p7_pnf_port;
+	
+	// These TLVs are used to setup the transport connection between VNF and PNF
+	nr_nfapi_uint8_tlv_t dl_ue_per_sf;
+	nr_nfapi_uint8_tlv_t ul_ue_per_sf;
+
+	// These TLVs are used by PNF to report its RF capabilities to the VNF software
+	nr_nfapi_rf_bands_t rf_bands;
+
+	// These TLVs are used by the VNF to configure the synchronization with the PNF.
+	nr_nfapi_uint8_tlv_t timing_window;
+	nr_nfapi_uint8_tlv_t timing_info_mode;
+	nr_nfapi_uint8_tlv_t timing_info_period;
+
+	// These TLVs are used by the VNF to configure the RF in the PNF
+	nr_nfapi_uint16_tlv_t max_transmit_power;
+	nr_nfapi_uint16_tlv_t earfcn;
+
+	nr_nfapi_nmm_frequency_bands_t nmm_gsm_frequency_bands;
+	nr_nfapi_nmm_frequency_bands_t nmm_umts_frequency_bands;
+	nr_nfapi_nmm_frequency_bands_t nmm_lte_frequency_bands;
+	nr_nfapi_uint8_tlv_t nmm_uplink_rssi_supported;
+
+} nr_nfapi_nfapi_t;
+
+#define NR_NFAPI_NFAPI_P7_VNF_ADDRESS_IPV4_TAG 0x0100
+#define NR_NFAPI_NFAPI_P7_VNF_ADDRESS_IPV6_TAG 0x0101
+#define NR_NFAPI_NFAPI_P7_VNF_PORT_TAG 0x0102
+#define NR_NFAPI_NFAPI_P7_PNF_ADDRESS_IPV4_TAG 0x0103
+#define NR_NFAPI_NFAPI_P7_PNF_ADDRESS_IPV6_TAG 0x0104
+#define NR_NFAPI_NFAPI_P7_PNF_PORT_TAG 0x0105
+
+#define NR_NFAPI_NFAPI_DOWNLINK_UES_PER_SUBFRAME_TAG 0x010A
+#define NR_NFAPI_NFAPI_UPLINK_UES_PER_SUBFRAME_TAG 0x010B
+#define NR_NFAPI_NFAPI_RF_BANDS_TAG 0x0114
+#define NR_NFAPI_NFAPI_TIMING_WINDOW_TAG 0x011E
+#define NR_NFAPI_NFAPI_TIMING_INFO_MODE_TAG 0x011F
+#define NR_NFAPI_NFAPI_TIMING_INFO_PERIOD_TAG 0x0120
+#define NR_NFAPI_NFAPI_MAXIMUM_TRANSMIT_POWER_TAG 0x0128
+#define NR_NFAPI_NFAPI_EARFCN_TAG 0x0129
+#define NR_NFAPI_NFAPI_NMM_GSM_FREQUENCY_BANDS_TAG 0x0130
+#define NR_NFAPI_NFAPI_NMM_UMTS_FREQUENCY_BANDS_TAG 0x0131
+#define NR_NFAPI_NFAPI_NMM_LTE_FREQUENCY_BANDS_TAG 0x0132
+#define NR_NFAPI_NFAPI_NMM_UPLINK_RSSI_SUPPORTED_TAG 0x0133
+
+
+// P5 Message Structures
+typedef struct {
+	nr_nfapi_p4_p5_message_header_t header;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_pnf_param_request_t;
+
+typedef struct {
+	nr_nfapi_p4_p5_message_header_t header;
+	uint32_t error_code;
+	nr_nfapi_pnf_param_general_t pnf_param_general;
+	nr_nfapi_pnf_phy_t pnf_phy;
+	nr_nfapi_pnf_rf_t pnf_rf;
+	nr_nfapi_pnf_phy_rel10_t pnf_phy_rel10;
+	nr_nfapi_pnf_phy_rel11_t pnf_phy_rel11;
+	nr_nfapi_pnf_phy_rel12_t pnf_phy_rel12;
+	nr_nfapi_pnf_phy_rel13_t pnf_phy_rel13;
+	nr_nfapi_pnf_phy_rel13_nb_iot_t pnf_phy_rel13_nb_iot;
+  nr_nfapi_pnf_phy_rel15_t pnf_phy_rel15;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_pnf_param_response_t;
+
+typedef struct {
+	nr_nfapi_p4_p5_message_header_t header;
+	nr_nfapi_pnf_phy_rf_config_t pnf_phy_rf_config;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_pnf_config_request_t;
+
+typedef struct {
+	nr_nfapi_p4_p5_message_header_t header;
+	uint32_t error_code;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_pnf_config_response_t;
+
+typedef struct {
+	nr_nfapi_p4_p5_message_header_t header;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_pnf_start_request_t;
+
+typedef struct {
+	nr_nfapi_p4_p5_message_header_t header;
+	uint32_t error_code;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_pnf_start_response_t;
+
+typedef struct {
+	nr_nfapi_p4_p5_message_header_t header;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_pnf_stop_request_t;
+
+typedef struct {
+	nr_nfapi_p4_p5_message_header_t header;
+	uint32_t error_code;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_pnf_stop_response_t;
+
+typedef struct {
+	nr_nfapi_p4_p5_message_header_t header;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_param_request_t;
+
+typedef struct {
+	nr_nfapi_p4_p5_message_header_t header;
+	uint8_t error_code;
+	uint8_t num_tlv;
+	// fdd or tdd in idle or configured tlvs
+	nr_nfapi_l1_status l1_status;
+	nr_nfapi_phy_capabilities_t phy_capabilities;
+	nr_nfapi_laa_capability_t laa_capability;
+	nr_nfapi_nb_iot_capability_t nb_iot_capability;
+	
+	nr_nfapi_subframe_config_t subframe_config;
+	nr_nfapi_rf_config_t rf_config;
+	nr_nfapi_phich_config_t phich_config;
+	nr_nfapi_sch_config_t sch_config;
+	nr_nfapi_prach_config_t prach_config;
+	nr_nfapi_pusch_config_t pusch_config;
+	nr_nfapi_pucch_config_t pucch_config;
+	nr_nfapi_srs_config_t srs_config;
+	nr_nfapi_uplink_reference_signal_config_t uplink_reference_signal_config;
+	nr_nfapi_tdd_frame_structure_t tdd_frame_structure_config;
+	nr_nfapi_l23_config_t l23_config;
+	nr_nfapi_nb_iot_config_t nb_iot_config;
+
+	// addition nfapi tlvs as per table 2-16 in idle or configure
+	nr_nfapi_nfapi_t nr_nfapi_config;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_param_response_t;
+
+typedef struct {
+	nr_nfapi_p4_p5_message_header_t header;
+	uint8_t num_tlv;
+	nr_nfapi_subframe_config_t subframe_config;
+	nr_nfapi_rf_config_t rf_config;
+	nr_nfapi_phich_config_t phich_config;
+	nr_nfapi_sch_config_t sch_config;
+	nr_nfapi_prach_config_t prach_config;
+	nr_nfapi_pusch_config_t pusch_config;
+	nr_nfapi_pucch_config_t pucch_config;
+	nr_nfapi_srs_config_t srs_config;
+	nr_nfapi_uplink_reference_signal_config_t uplink_reference_signal_config;
+	nr_nfapi_laa_config_t laa_config;
+	nr_nfapi_emtc_config_t emtc_config;
+	nr_nfapi_tdd_frame_structure_t tdd_frame_structure_config;
+	nr_nfapi_l23_config_t l23_config;
+	nr_nfapi_nb_iot_config_t nb_iot_config;
+	
+	// addition nfapi tlvs as per table 2-16 in idle or configure
+	nr_nfapi_nfapi_t nr_nfapi_config;
+
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_config_request_t;
+
+typedef struct {
+	nr_nfapi_p4_p5_message_header_t header;
+	uint32_t error_code;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_config_response_t;
+
+typedef struct {
+	nr_nfapi_p4_p5_message_header_t header;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_start_request_t;
+
+typedef struct {
+	nr_nfapi_p4_p5_message_header_t header;
+	uint32_t error_code;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_start_response_t;
+
+typedef struct {
+	nr_nfapi_p4_p5_message_header_t header;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_stop_request_t;
+
+typedef struct {
+	nr_nfapi_p4_p5_message_header_t header;
+	uint32_t error_code;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_stop_response_t;
+
+typedef struct {
+	nr_nfapi_p4_p5_message_header_t header;
+	nr_nfapi_uint16_tlv_t dl_rs_tx_power;
+	nr_nfapi_uint16_tlv_t received_interference_power;
+	nr_nfapi_uint16_tlv_t thermal_noise_power;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_measurement_request_t;
+
+#define NR_NFAPI_MEASUREMENT_REQUEST_DL_RS_XTX_POWER_TAG 0x1004
+#define NR_NFAPI_MEASUREMENT_REQUEST_RECEIVED_INTERFERENCE_POWER_TAG 0x1005
+#define NR_NFAPI_MEASUREMENT_REQUEST_THERMAL_NOISE_POWER_TAG 0x1006
+
+
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t number_of_resource_blocks;
+	int16_t received_interference_power[NR_NFAPI_MAX_RECEIVED_INTERFERENCE_POWER_RESULTS];
+} nr_nfapi_received_interference_power_measurement_t;
+
+typedef struct {
+	nr_nfapi_p4_p5_message_header_t header;
+	uint32_t error_code;
+	nr_nfapi_int16_tlv_t dl_rs_tx_power_measurement;
+	nr_nfapi_received_interference_power_measurement_t received_interference_power_measurement;
+	nr_nfapi_int16_tlv_t thermal_noise_power_measurement;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_measurement_response_t;
+
+#define NR_NFAPI_MEASUREMENT_RESPONSE_DL_RS_POWER_MEASUREMENT_TAG 0x1007
+#define NR_NFAPI_MEASUREMENT_RESPONSE_RECEIVED_INTERFERENCE_POWER_MEASUREMENT_TAG 0x1008
+#define NR_NFAPI_MEASUREMENT_RESPONSE_THERMAL_NOISE_MEASUREMENT_TAG 0x1009
+
+// P7 Sub Structures
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t dci_format;
+	uint8_t cce_idx;
+	uint8_t aggregation_level;
+	uint16_t rnti;
+	uint8_t resource_allocation_type;
+	uint8_t virtual_resource_block_assignment_flag;
+	uint32_t resource_block_coding;
+	uint8_t mcs_1;
+	uint8_t redundancy_version_1;
+	uint8_t new_data_indicator_1;
+	uint8_t transport_block_to_codeword_swap_flag;
+	uint8_t mcs_2;
+	uint8_t redundancy_version_2;
+	uint8_t new_data_indicator_2;
+	uint8_t harq_process;
+	uint8_t tpmi;
+	uint8_t pmi;
+	uint8_t precoding_information;
+	uint8_t tpc;
+	uint8_t downlink_assignment_index;
+	uint8_t ngap;
+	uint8_t transport_block_size_index;
+	uint8_t downlink_power_offset;
+	uint8_t allocate_prach_flag;
+	uint8_t preamble_index;
+	uint8_t prach_mask_index;
+	uint8_t rnti_type;
+	uint16_t transmission_power;
+} nr_nfapi_dl_config_dci_dl_pdu_rel8_t;
+#define NR_NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL8_TAG 0x2001
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t mcch_flag;
+	uint8_t mcch_change_notification;
+	uint8_t scrambling_identity;
+} nr_nfapi_dl_config_dci_dl_pdu_rel9_t;
+#define NR_NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL9_TAG 0x2002
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t cross_carrier_scheduling_flag;
+	uint8_t carrier_indicator;
+	uint8_t srs_flag;
+	uint8_t srs_request;
+	uint8_t antenna_ports_scrambling_and_layers;
+	uint8_t total_dci_length_including_padding;
+	uint8_t n_dl_rb;
+} nr_nfapi_dl_config_dci_dl_pdu_rel10_t;
+#define NR_NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL10_TAG 0x2003
+
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t harq_ack_resource_offset;
+	uint8_t pdsch_re_mapping_quasi_co_location_indicator;
+} nr_nfapi_dl_config_dci_dl_pdu_rel11_t;
+
+#define NR_NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL11_TAG 0x2039
+
+
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t primary_cell_type;
+	uint8_t ul_dl_configuration_flag;
+	uint8_t number_ul_dl_configurations;
+	uint8_t ul_dl_configuration_indication[NR_NFAPI_MAX_UL_DL_CONFIGURATIONS];
+} nr_nfapi_dl_config_dci_dl_pdu_rel12_t;
+
+#define NR_NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL12_TAG 0x203a
+
+
+
+typedef struct {
+	uint8_t subband_index;
+	uint8_t scheduled_ues;
+	uint16_t precoding_value[NR_NFAPI_MAX_NUM_PHYSICAL_ANTENNAS][NR_NFAPI_MAX_NUM_SCHEDULED_UES];
+} nr_nfapi_dl_config_dci_dl_tpm_subband_info_t;
+
+typedef struct {
+	uint8_t num_prb_per_subband;
+	uint8_t number_of_subbands;
+	uint8_t num_antennas;
+	nr_nfapi_dl_config_dci_dl_tpm_subband_info_t subband_info[NR_NFAPI_MAX_NUM_SUBBANDS];
+} nr_nfapi_dl_config_dci_dl_tpm_t;
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t laa_end_partial_sf_flag;
+	uint8_t laa_end_partial_sf_configuration;
+	uint8_t initial_lbt_sf;
+	uint8_t codebook_size_determination;
+	uint8_t drms_table_flag;
+	uint8_t tpm_struct_flag;
+	nr_nfapi_dl_config_dci_dl_tpm_t tpm;
+} nr_nfapi_dl_config_dci_dl_pdu_rel13_t;
+
+#define NR_NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL13_TAG 0x203b
+
+typedef struct {
+	nr_nfapi_dl_config_dci_dl_pdu_rel8_t dci_dl_pdu_rel8;
+	nr_nfapi_dl_config_dci_dl_pdu_rel9_t dci_dl_pdu_rel9;
+	nr_nfapi_dl_config_dci_dl_pdu_rel10_t dci_dl_pdu_rel10;
+	nr_nfapi_dl_config_dci_dl_pdu_rel11_t dci_dl_pdu_rel11;
+	nr_nfapi_dl_config_dci_dl_pdu_rel12_t dci_dl_pdu_rel12;
+	nr_nfapi_dl_config_dci_dl_pdu_rel13_t dci_dl_pdu_rel13;
+} nr_nfapi_dl_config_dci_dl_pdu;
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t length;
+	uint16_t pdu_index;
+	uint16_t transmission_power;
+} nr_nfapi_dl_config_bch_pdu_rel8_t;
+#define NR_NFAPI_DL_CONFIG_REQUEST_BCH_PDU_REL8_TAG 0x2004
+
+typedef struct {
+	nr_nfapi_dl_config_bch_pdu_rel8_t bch_pdu_rel8;
+} nr_nfapi_dl_config_bch_pdu;
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t length;
+	uint16_t pdu_index;
+	uint16_t rnti;
+	uint8_t resource_allocation_type;
+	uint32_t resource_block_coding;
+	uint8_t modulation;
+	uint16_t transmission_power;
+	uint16_t mbsfn_area_id;
+} nr_nfapi_dl_config_mch_pdu_rel8_t;
+#define NR_NFAPI_DL_CONFIG_REQUEST_MCH_PDU_REL8_TAG 0x2005
+
+typedef struct {
+	nr_nfapi_dl_config_mch_pdu_rel8_t mch_pdu_rel8;
+} nr_nfapi_dl_config_mch_pdu;
+
+
+typedef struct {
+	uint8_t subband_index;
+	uint8_t num_antennas;
+	uint16_t bf_value[NR_NFAPI_MAX_NUM_ANTENNAS];
+} nr_nfapi_bf_vector_t;
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t length;
+	uint16_t pdu_index;
+	uint16_t rnti;
+	uint8_t resource_allocation_type;
+	uint8_t virtual_resource_block_assignment_flag;
+	uint32_t resource_block_coding;
+	uint8_t modulation;
+	uint8_t redundancy_version;
+	uint8_t transport_blocks;
+	uint8_t transport_block_to_codeword_swap_flag;
+	uint8_t transmission_scheme;
+	uint8_t number_of_layers;
+	uint8_t number_of_subbands;
+	uint8_t codebook_index[NR_NFAPI_MAX_NUM_SUBBANDS];
+	uint8_t ue_category_capacity;
+	uint8_t pa;
+	uint8_t delta_power_offset_index;
+	uint8_t ngap;
+	uint8_t nprb;
+	uint8_t transmission_mode;
+	uint8_t num_bf_prb_per_subband;
+	uint8_t num_bf_vector;
+	nr_nfapi_bf_vector_t bf_vector[NR_NFAPI_MAX_BF_VECTORS];
+} nr_nfapi_dl_config_dlsch_pdu_rel8_t;
+#define NR_NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL8_TAG 0x2006
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t nscid;
+} nr_nfapi_dl_config_dlsch_pdu_rel9_t;
+#define NR_NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL9_TAG 0x2007
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t csi_rs_flag;
+	uint8_t csi_rs_resource_config_r10;
+	uint16_t csi_rs_zero_tx_power_resource_config_bitmap_r10;
+	uint8_t csi_rs_number_nzp_configuration;
+	uint8_t csi_rs_resource_config[NR_NFAPI_MAX_CSI_RS_RESOURCE_CONFIG];
+	uint8_t pdsch_start;
+} nr_nfapi_dl_config_dlsch_pdu_rel10_t;
+#define NR_NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL10_TAG 0x2008
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t drms_config_flag;
+	uint16_t drms_scrambling;
+	uint8_t csi_config_flag;
+	uint16_t csi_scrambling;
+	uint8_t pdsch_re_mapping_flag;
+	uint8_t pdsch_re_mapping_atenna_ports;
+	uint8_t pdsch_re_mapping_freq_shift;
+} nr_nfapi_dl_config_dlsch_pdu_rel11_t;
+#define NR_NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL11_TAG 0x203C
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t altcqi_table_r12;
+	uint8_t maxlayers;
+	uint8_t n_dl_harq;
+} nr_nfapi_dl_config_dlsch_pdu_rel12_t;
+#define NR_NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL12_TAG 0x203D
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t dwpts_symbols;
+	uint8_t initial_lbt_sf;
+	uint8_t ue_type;
+	uint8_t pdsch_payload_type;
+	uint16_t initial_transmission_sf_io;
+	uint8_t drms_table_flag;
+} nr_nfapi_dl_config_dlsch_pdu_rel13_t;
+#define NR_NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL13_TAG 0x203E
+
+typedef struct {
+	nr_nfapi_dl_config_dlsch_pdu_rel8_t dlsch_pdu_rel8;
+	nr_nfapi_dl_config_dlsch_pdu_rel9_t dlsch_pdu_rel9;
+	nr_nfapi_dl_config_dlsch_pdu_rel10_t dlsch_pdu_rel10;
+	nr_nfapi_dl_config_dlsch_pdu_rel11_t dlsch_pdu_rel11;
+	nr_nfapi_dl_config_dlsch_pdu_rel12_t dlsch_pdu_rel12;
+	nr_nfapi_dl_config_dlsch_pdu_rel13_t dlsch_pdu_rel13;
+} nr_nfapi_dl_config_dlsch_pdu;
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t length;
+	uint16_t pdu_index;
+	uint16_t p_rnti;
+	uint8_t resource_allocation_type;
+	uint8_t virtual_resource_block_assignment_flag;
+	uint32_t resource_block_coding;
+	uint8_t mcs;
+	uint8_t redundancy_version;
+	uint8_t number_of_transport_blocks;
+	uint8_t transport_block_to_codeword_swap_flag;
+	uint8_t transmission_scheme;
+	uint8_t number_of_layers;
+	uint8_t codebook_index;
+	uint8_t ue_category_capacity;
+	uint8_t pa;
+	uint16_t transmission_power;
+	uint8_t nprb;
+	uint8_t ngap;
+} nr_nfapi_dl_config_pch_pdu_rel8_t;
+#define NR_NFAPI_DL_CONFIG_REQUEST_PCH_PDU_REL8_TAG 0x2009
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t ue_mode;
+	uint16_t initial_transmission_sf_io;
+} nr_nfapi_dl_config_pch_pdu_rel13_t;
+#define NR_NFAPI_DL_CONFIG_REQUEST_PCH_PDU_REL13_TAG 0x203F
+
+typedef struct {
+	nr_nfapi_dl_config_pch_pdu_rel8_t pch_pdu_rel8;
+	nr_nfapi_dl_config_pch_pdu_rel13_t pch_pdu_rel13;
+} nr_nfapi_dl_config_pch_pdu;
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t transmission_power;
+	uint8_t prs_bandwidth;
+	uint8_t prs_cyclic_prefix_type;
+	uint8_t prs_muting;
+} nr_nfapi_dl_config_prs_pdu_rel9_t;
+#define NR_NFAPI_DL_CONFIG_REQUEST_PRS_PDU_REL9_TAG 0x200A
+
+typedef struct {
+	nr_nfapi_dl_config_prs_pdu_rel9_t prs_pdu_rel9;
+} nr_nfapi_dl_config_prs_pdu;
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t csi_rs_antenna_port_count_r10;
+	uint8_t csi_rs_resource_config_r10;
+	uint16_t transmission_power;
+	uint16_t csi_rs_zero_tx_power_resource_config_bitmap_r10;
+	uint8_t csi_rs_number_of_nzp_configuration;
+	uint8_t csi_rs_resource_config[NR_NFAPI_MAX_CSI_RS_RESOURCE_CONFIG];
+} nr_nfapi_dl_config_csi_rs_pdu_rel10_t;
+#define NR_NFAPI_DL_CONFIG_REQUEST_CSI_RS_PDU_REL10_TAG 0x200B
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t csi_rs_class;
+	uint8_t cdm_type;
+	uint8_t num_bf_vector;
+	struct {
+		uint8_t csi_rs_resource_index;
+		uint16_t bf_value[NR_NFAPI_MAX_ANTENNA_PORT_COUNT];
+	} bf_vector[NR_NFAPI_MAX_BF_VECTORS];
+
+} nr_nfapi_dl_config_csi_rs_pdu_rel13_t;
+#define NR_NFAPI_DL_CONFIG_REQUEST_CSI_RS_PDU_REL13_TAG 0x2040
+
+typedef struct {
+	nr_nfapi_dl_config_csi_rs_pdu_rel10_t csi_rs_pdu_rel10;
+	nr_nfapi_dl_config_csi_rs_pdu_rel13_t csi_rs_pdu_rel13;
+} nr_nfapi_dl_config_csi_rs_pdu;
+
+#define NR_NFAPI_DL_CONFIG_REQUEST_EPDCCH_PDU_REL8_TAG 0x2001
+#define NR_NFAPI_DL_CONFIG_REQUEST_EPDCCH_PDU_REL9_TAG 0x2002
+#define NR_NFAPI_DL_CONFIG_REQUEST_EPDCCH_PDU_REL10_TAG 0x2003
+#define NR_NFAPI_DL_CONFIG_REQUEST_EPDCCH_PDU_REL11_TAG 0x2039
+#define NR_NFAPI_DL_CONFIG_REQUEST_EPDCCH_PDU_REL12_TAG 0x203a
+#define NR_NFAPI_DL_CONFIG_REQUEST_EPDCCH_PDU_REL13_TAG 0x203b
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t epdcch_resource_assignment_flag;
+	uint16_t epdcch_id;
+	uint8_t epdcch_start_symbol;
+	uint8_t epdcch_num_prb;
+	uint8_t epdcch_prb_index[NR_NFAPI_MAX_EPDCCH_PRB];
+	nr_nfapi_bf_vector_t bf_vector;
+} nr_nfapi_dl_config_epdcch_parameters_rel11_t;
+#define NR_NFAPI_DL_CONFIG_REQUEST_EPDCCH_PARAM_REL11_TAG 0x2041
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t dwpts_symbols;
+	uint8_t initial_lbt_sf;
+} nr_nfapi_dl_config_epdcch_parameters_rel13_t;
+#define NR_NFAPI_DL_CONFIG_REQUEST_EPDCCH_PARAM_REL13_TAG 0x2042
+
+typedef struct {
+	nr_nfapi_dl_config_dci_dl_pdu_rel8_t			epdcch_pdu_rel8;
+	nr_nfapi_dl_config_dci_dl_pdu_rel9_t			epdcch_pdu_rel9;
+	nr_nfapi_dl_config_dci_dl_pdu_rel10_t			epdcch_pdu_rel10;
+	nr_nfapi_dl_config_dci_dl_pdu_rel11_t			epdcch_pdu_rel11;
+	nr_nfapi_dl_config_dci_dl_pdu_rel12_t			epdcch_pdu_rel12;
+	nr_nfapi_dl_config_dci_dl_pdu_rel13_t			epdcch_pdu_rel13;
+	nr_nfapi_dl_config_epdcch_parameters_rel11_t	epdcch_params_rel11;
+	nr_nfapi_dl_config_epdcch_parameters_rel13_t	epdcch_params_rel13;
+} nr_nfapi_dl_config_epdcch_pdu;
+
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t mpdcch_narrow_band;
+	uint8_t number_of_prb_pairs;
+	uint8_t resource_block_assignment;
+	uint8_t mpdcch_tansmission_type;
+	uint8_t start_symbol;
+	uint8_t ecce_index;
+	uint8_t aggregation_level;
+	uint8_t rnti_type;
+	uint16_t rnti;
+	uint8_t ce_mode;
+	uint16_t drms_scrambling_init;
+	uint16_t initial_transmission_sf_io;
+	uint16_t transmission_power;
+	uint8_t dci_format;
+	uint16_t resource_block_coding;
+	uint8_t mcs;
+	uint8_t pdsch_reptition_levels;
+	uint8_t redundancy_version;
+	uint8_t new_data_indicator;
+	uint8_t harq_process;
+	uint8_t tpmi_length;
+	uint8_t tpmi;
+	uint8_t pmi_flag;
+	uint8_t pmi;
+	uint8_t harq_resource_offset;
+	uint8_t dci_subframe_repetition_number;
+	uint8_t tpc;
+	uint8_t downlink_assignment_index_length;
+	uint8_t downlink_assignment_index;
+	uint8_t allocate_prach_flag;
+	uint8_t preamble_index;
+	uint8_t prach_mask_index;
+	uint8_t starting_ce_level;
+	uint8_t srs_request;
+	uint8_t antenna_ports_and_scrambling_identity_flag;
+	uint8_t antenna_ports_and_scrambling_identity;
+	uint8_t frequency_hopping_enabled_flag;
+	uint8_t paging_direct_indication_differentiation_flag;
+	uint8_t direct_indication;
+	uint8_t total_dci_length_including_padding;
+	uint8_t number_of_tx_antenna_ports;
+	uint16_t precoding_value[NR_NFAPI_MAX_TX_PHYSICAL_ANTENNA_PORTS];
+} nr_nfapi_dl_config_mpdcch_pdu_rel13_t;
+#define NR_NFAPI_DL_CONFIG_REQUEST_MPDCCH_PDU_REL13_TAG 0x205B
+
+
+typedef struct {
+	nr_nfapi_dl_config_mpdcch_pdu_rel13_t mpdcch_pdu_rel13;
+} nr_nfapi_dl_config_mpdcch_pdu;
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t length;
+	uint16_t pdu_index;
+	uint16_t transmission_power;
+	uint16_t hyper_sfn_2_lsbs;
+} nr_nfapi_dl_config_nbch_pdu_rel13_t;
+
+#define NR_NFAPI_DL_CONFIG_REQUEST_NBCH_PDU_REL13_TAG 0x205C
+
+typedef struct {
+	nr_nfapi_dl_config_nbch_pdu_rel13_t nbch_pdu_rel13;
+} nr_nfapi_dl_config_nbch_pdu;
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t length;
+	uint16_t pdu_index;
+	uint8_t ncce_index;
+	uint8_t aggregation_level;
+	uint8_t start_symbol;
+	uint8_t rnti_type;
+	uint16_t rnti;
+	uint8_t scrambling_reinitialization_batch_index;
+	uint8_t nrs_antenna_ports_assumed_by_the_ue;
+	uint8_t dci_format;
+	uint8_t scheduling_delay;
+	uint8_t resource_assignment;
+	uint8_t repetition_number;
+	uint8_t mcs;
+	uint8_t new_data_indicator;
+	uint8_t harq_ack_resource;
+	uint8_t npdcch_order_indication;
+	uint8_t starting_number_of_nprach_repetitions;
+	uint8_t subcarrier_indication_of_nprach;
+	uint8_t paging_direct_indication_differentation_flag;
+	uint8_t direct_indication;
+	uint8_t dci_subframe_repetition_number;
+	uint8_t total_dci_length_including_padding;
+} nr_nfapi_dl_config_npdcch_pdu_rel13_t;
+
+#define NR_NFAPI_DL_CONFIG_REQUEST_NPDCCH_PDU_REL13_TAG 0x205D
+
+typedef struct {
+	nr_nfapi_dl_config_npdcch_pdu_rel13_t npdcch_pdu_rel13;
+} nr_nfapi_dl_config_npdcch_pdu;
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t length;
+	uint16_t pdu_index;
+	uint8_t start_symbol;
+	uint8_t rnti_type;
+	uint16_t rnti;
+	uint16_t resource_assignment;
+	uint16_t repetition_number;
+	uint8_t modulation;
+	uint8_t number_of_subframes_for_resource_assignment;
+	uint8_t scrambling_sequence_initialization_cinit;
+	uint16_t sf_idx;
+	uint8_t nrs_antenna_ports_assumed_by_the_ue;
+} nr_nfapi_dl_config_ndlsch_pdu_rel13_t;
+
+#define NR_NFAPI_DL_CONFIG_REQUEST_NDLSCH_PDU_REL13_TAG 0x205E
+
+typedef struct {
+	nr_nfapi_dl_config_ndlsch_pdu_rel13_t ndlsch_pdu_rel13;
+} nr_nfapi_dl_config_ndlsch_pdu;
+
+
+typedef struct {
+	uint8_t pdu_type;
+	uint8_t pdu_size;
+	union {
+		nr_nfapi_dl_config_dci_dl_pdu	dci_dl_pdu;
+		nr_nfapi_dl_config_bch_pdu		bch_pdu;
+		nr_nfapi_dl_config_mch_pdu		mch_pdu;
+		nr_nfapi_dl_config_dlsch_pdu	dlsch_pdu;
+		nr_nfapi_dl_config_pch_pdu		pch_pdu;
+		nr_nfapi_dl_config_prs_pdu		prs_pdu;
+		nr_nfapi_dl_config_csi_rs_pdu	csi_rs_pdu;
+		nr_nfapi_dl_config_epdcch_pdu	epdcch_pdu;
+		nr_nfapi_dl_config_mpdcch_pdu	mpdcch_pdu;
+		nr_nfapi_dl_config_nbch_pdu	nbch_pdu;
+		nr_nfapi_dl_config_npdcch_pdu	npdcch_pdu;
+		nr_nfapi_dl_config_ndlsch_pdu	ndlsch_pdu;
+	};
+} nr_nfapi_dl_config_request_pdu_t;
+
+#define NR_NFAPI_DL_CONFIG_MAX_PDU 100
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t number_pdcch_ofdm_symbols;
+	uint8_t number_dci;
+	uint16_t number_pdu;
+	uint8_t number_pdsch_rnti;
+	uint16_t transmission_power_pcfich;
+	nr_nfapi_dl_config_request_pdu_t* dl_config_pdu_list;
+} nr_nfapi_dl_config_request_body_t;
+#define NR_NFAPI_DL_CONFIG_REQUEST_BODY_TAG 0x2000
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint32_t handle;
+	uint16_t size;
+	uint16_t rnti;
+	uint8_t resource_block_start;
+	uint8_t number_of_resource_blocks;
+	uint8_t modulation_type;
+	uint8_t cyclic_shift_2_for_drms;
+	uint8_t frequency_hopping_enabled_flag;
+	uint8_t frequency_hopping_bits;
+	uint8_t new_data_indication;
+	uint8_t redundancy_version;
+	uint8_t harq_process_number;
+	uint8_t ul_tx_mode;
+	uint8_t current_tx_nb;
+	uint8_t n_srs;
+} nr_nfapi_ul_config_ulsch_pdu_rel8_t;
+#define NR_NFAPI_UL_CONFIG_REQUEST_ULSCH_PDU_REL8_TAG 0x200D
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t resource_allocation_type;
+	uint32_t resource_block_coding;
+	uint8_t transport_blocks;
+	uint8_t transmission_scheme;
+	uint8_t number_of_layers;
+	uint8_t codebook_index;
+	uint8_t disable_sequence_hopping_flag;
+} nr_nfapi_ul_config_ulsch_pdu_rel10_t;
+#define NR_NFAPI_UL_CONFIG_REQUEST_ULSCH_PDU_REL10_TAG 0x200E
+
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t virtual_cell_id_enabled_flag;
+	uint16_t npusch_identity;
+	uint8_t dmrs_config_flag;
+	uint16_t ndmrs_csh_identity;
+} nr_nfapi_ul_config_ulsch_pdu_rel11_t;
+
+#define NR_NFAPI_UL_CONFIG_REQUEST_ULSCH_PDU_REL11_TAG 0x2043
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t  ue_type;
+	uint16_t total_number_of_repetitions;
+	uint16_t repetition_number;
+	uint16_t initial_transmission_sf_io;
+	uint8_t  empty_symbols_due_to_re_tunning;
+} nr_nfapi_ul_config_ulsch_pdu_rel13_t;
+#define NR_NFAPI_UL_CONFIG_REQUEST_ULSCH_PDU_REL13_TAG 0x2044
+
+typedef struct {
+	nr_nfapi_ul_config_ulsch_pdu_rel8_t ulsch_pdu_rel8;
+	nr_nfapi_ul_config_ulsch_pdu_rel10_t ulsch_pdu_rel10;
+	nr_nfapi_ul_config_ulsch_pdu_rel11_t ulsch_pdu_rel11;
+	nr_nfapi_ul_config_ulsch_pdu_rel13_t ulsch_pdu_rel13;
+} nr_nfapi_ul_config_ulsch_pdu;
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t dl_cqi_pmi_size_rank_1;
+	uint8_t dl_cqi_pmi_size_rank_greater_1;
+	uint8_t ri_size;
+	uint8_t delta_offset_cqi;
+	uint8_t delta_offset_ri;
+} nr_nfapi_ul_config_cqi_ri_information_rel8_t;
+#define NR_NFAPI_UL_CONFIG_REQUEST_CQI_RI_INFORMATION_REL8_TAG 0x2010
+
+typedef struct {
+	uint8_t dl_cqi_pmi_ri_size;
+	uint8_t control_type;
+} nr_nfapi_ul_config_periodic_cqi_pmi_ri_report_t;
+
+typedef struct {
+	uint8_t number_of_cc;
+	struct {
+		uint8_t ri_size;
+		uint8_t dl_cqi_pmi_size[8];
+	} cc[NR_NFAPI_MAX_CC];
+} nr_nfapi_ul_config_aperiodic_cqi_pmi_ri_report_t;
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t report_type;
+	uint8_t delta_offset_cqi;
+	uint8_t delta_offset_ri;
+	union {
+		nr_nfapi_ul_config_periodic_cqi_pmi_ri_report_t periodic_cqi_pmi_ri_report;
+		nr_nfapi_ul_config_aperiodic_cqi_pmi_ri_report_t aperiodic_cqi_pmi_ri_report;
+	};
+} nr_nfapi_ul_config_cqi_ri_information_rel9_t;
+#define NR_NFAPI_UL_CONFIG_REQUEST_CQI_RI_INFORMATION_REL9_TAG 0x2011
+
+typedef struct {
+	uint16_t dl_cqi_pmi_ri_size_2;
+} nr_nfapi_ul_config_periodic_cqi_pmi_ri_report_re13_t;
+
+typedef struct {
+} nr_nfapi_ul_config_aperiodic_cqi_pmi_ri_report_re13_t;
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t report_type; // Convience parameter, not sent on the wire
+	union {
+		nr_nfapi_ul_config_periodic_cqi_pmi_ri_report_re13_t periodic_cqi_pmi_ri_report;
+		nr_nfapi_ul_config_aperiodic_cqi_pmi_ri_report_re13_t aperiodic_cqi_pmi_ri_report;
+	};
+} nr_nfapi_ul_config_cqi_ri_information_rel13_t;
+#define NR_NFAPI_UL_CONFIG_REQUEST_CQI_RI_INFORMATION_REL13_TAG 0x2045
+
+typedef struct {
+	nr_nfapi_ul_config_cqi_ri_information_rel8_t cqi_ri_information_rel8;
+	nr_nfapi_ul_config_cqi_ri_information_rel9_t cqi_ri_information_rel9;
+	nr_nfapi_ul_config_cqi_ri_information_rel13_t cqi_ri_information_rel13;
+} nr_nfapi_ul_config_cqi_ri_information;
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t harq_size;
+	uint8_t delta_offset_harq;
+	uint8_t ack_nack_mode;
+} nr_nfapi_ul_config_ulsch_harq_information_rel10_t;
+#define NR_NFAPI_UL_CONFIG_REQUEST_ULSCH_HARQ_INFORMATION_REL10_TAG 0x2012
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t harq_size_2;
+	uint8_t delta_offset_harq_2;
+} nr_nfapi_ul_config_ulsch_harq_information_rel13_t;
+#define NR_NFAPI_UL_CONFIG_REQUEST_ULSCH_HARQ_INFORMATION_REL13_TAG 0x2046
+
+typedef struct {
+	nr_nfapi_ul_config_ulsch_harq_information_rel10_t harq_information_rel10;
+	nr_nfapi_ul_config_ulsch_harq_information_rel13_t harq_information_rel13;
+} nr_nfapi_ul_config_ulsch_harq_information;
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t n_srs_initial;
+	uint8_t initial_number_of_resource_blocks;
+} nr_nfapi_ul_config_initial_transmission_parameters_rel8_t;
+#define NR_NFAPI_UL_CONFIG_REQUEST_INITIAL_TRANSMISSION_PARAMETERS_REL8_TAG 0x200F
+
+typedef struct {
+	nr_nfapi_ul_config_initial_transmission_parameters_rel8_t initial_transmission_parameters_rel8;
+} nr_nfapi_ul_config_initial_transmission_parameters;
+
+typedef struct {
+	nr_nfapi_ul_config_ulsch_pdu ulsch_pdu;
+	nr_nfapi_ul_config_cqi_ri_information cqi_ri_information;
+	nr_nfapi_ul_config_initial_transmission_parameters initial_transmission_parameters;
+} nr_nfapi_ul_config_ulsch_cqi_ri_pdu;
+
+typedef struct {
+	nr_nfapi_ul_config_ulsch_pdu ulsch_pdu;
+	nr_nfapi_ul_config_ulsch_harq_information harq_information;
+	nr_nfapi_ul_config_initial_transmission_parameters initial_transmission_parameters;
+} nr_nfapi_ul_config_ulsch_harq_pdu;
+
+typedef struct {
+	nr_nfapi_ul_config_ulsch_pdu ulsch_pdu;
+	nr_nfapi_ul_config_cqi_ri_information cqi_ri_information;
+	nr_nfapi_ul_config_ulsch_harq_information harq_information;
+	nr_nfapi_ul_config_initial_transmission_parameters initial_transmission_parameters;
+} nr_nfapi_ul_config_ulsch_cqi_harq_ri_pdu;
+
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint32_t handle;
+	uint16_t rnti;
+} nr_nfapi_ul_config_ue_information_rel8_t;
+#define NR_NFAPI_UL_CONFIG_REQUEST_UE_INFORMATION_REL8_TAG 0x2013
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t virtual_cell_id_enabled_flag;
+	uint16_t npusch_identity;
+} nr_nfapi_ul_config_ue_information_rel11_t;
+
+#define NR_NFAPI_UL_CONFIG_REQUEST_UE_INFORMATION_REL11_TAG 0x2047
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t  ue_type;
+	uint8_t  empty_symbols;
+	uint16_t total_number_of_repetitions;
+	uint16_t repetition_number;
+} nr_nfapi_ul_config_ue_information_rel13_t;
+
+#define NR_NFAPI_UL_CONFIG_REQUEST_UE_INFORMATION_REL13_TAG 0x2048
+
+typedef struct {
+	nr_nfapi_ul_config_ue_information_rel8_t ue_information_rel8;
+	nr_nfapi_ul_config_ue_information_rel11_t ue_information_rel11;
+	nr_nfapi_ul_config_ue_information_rel13_t ue_information_rel13;
+} nr_nfapi_ul_config_ue_information;
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t pucch_index;
+	uint8_t dl_cqi_pmi_size;
+} nr_nfapi_ul_config_cqi_information_rel8_t;
+#define NR_NFAPI_UL_CONFIG_REQUEST_CQI_INFORMATION_REL8_TAG 0x2014
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t number_of_pucch_resource;
+	uint16_t pucch_index_p1;
+} nr_nfapi_ul_config_cqi_information_rel10_t;
+#define NR_NFAPI_UL_CONFIG_REQUEST_CQI_INFORMATION_REL10_TAG 0x2015
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t csi_mode;
+	uint16_t dl_cqi_pmi_size_2;
+	uint8_t starting_prb;
+	uint8_t n_prb;
+	uint8_t cdm_index;
+	uint8_t n_srs;
+} nr_nfapi_ul_config_cqi_information_rel13_t;
+#define NR_NFAPI_UL_CONFIG_REQUEST_CQI_INFORMATION_REL13_TAG 0x2049
+
+typedef struct {
+	nr_nfapi_ul_config_cqi_information_rel8_t cqi_information_rel8;
+	nr_nfapi_ul_config_cqi_information_rel10_t cqi_information_rel10;
+	nr_nfapi_ul_config_cqi_information_rel13_t cqi_information_rel13;
+} nr_nfapi_ul_config_cqi_information;
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t pucch_index;
+} nr_nfapi_ul_config_sr_information_rel8_t;
+#define NR_NFAPI_UL_CONFIG_REQUEST_SR_INFORMATION_REL8_TAG 0x2016
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t number_of_pucch_resources;
+	uint16_t pucch_index_p1;
+} nr_nfapi_ul_config_sr_information_rel10_t;
+#define NR_NFAPI_UL_CONFIG_REQUEST_SR_INFORMATION_REL10_TAG 0x2017
+
+typedef struct { 
+	nr_nfapi_ul_config_sr_information_rel8_t sr_information_rel8;
+	nr_nfapi_ul_config_sr_information_rel10_t sr_information_rel10;
+} nr_nfapi_ul_config_sr_information;
+
+typedef struct { 
+	nr_nfapi_tl_t tl;
+	uint8_t harq_size;
+	uint8_t ack_nack_mode;
+	uint8_t number_of_pucch_resources;
+	uint16_t n_pucch_1_0;
+	uint16_t n_pucch_1_1;
+	uint16_t n_pucch_1_2;
+	uint16_t n_pucch_1_3;
+} nr_nfapi_ul_config_harq_information_rel10_tdd_t;
+#define NR_NFAPI_UL_CONFIG_REQUEST_HARQ_INFORMATION_REL10_TDD_TAG 0x2018
+
+
+typedef struct { 
+	nr_nfapi_tl_t tl;
+	uint16_t n_pucch_1_0;
+	uint8_t harq_size;
+} nr_nfapi_ul_config_harq_information_rel8_fdd_t;
+#define NR_NFAPI_UL_CONFIG_REQUEST_HARQ_INFORMATION_REL8_FDD_TAG 0x2019
+
+typedef struct { 
+	nr_nfapi_tl_t tl;
+	uint8_t harq_size;
+	uint8_t ack_nack_mode;
+	uint8_t number_of_pucch_resources;
+	uint16_t n_pucch_1_0;
+	uint16_t n_pucch_1_1;
+	uint16_t n_pucch_1_2;
+	uint16_t n_pucch_1_3;
+} nr_nfapi_ul_config_harq_information_rel9_fdd_t;
+#define NR_NFAPI_UL_CONFIG_REQUEST_HARQ_INFORMATION_REL9_FDD_TAG 0x201a
+
+typedef struct { 
+	nr_nfapi_tl_t tl;
+	uint8_t  num_ant_ports;
+	uint16_t n_pucch_2_0;
+	uint16_t n_pucch_2_1;
+	uint16_t n_pucch_2_2;
+	uint16_t n_pucch_2_3;	
+} nr_nfapi_ul_config_harq_information_rel11_t;
+#define NR_NFAPI_UL_CONFIG_REQUEST_HARQ_INFORMATION_REL11_TAG 0x204A
+
+typedef struct { 
+	nr_nfapi_tl_t tl;
+	uint16_t  harq_size_2;
+	uint8_t starting_prb;
+	uint8_t n_prb;
+	uint8_t cdm_index;
+	uint8_t n_srs;
+} nr_nfapi_ul_config_harq_information_rel13_t;
+#define NR_NFAPI_UL_CONFIG_REQUEST_HARQ_INFORMATION_REL13_TAG 0x204B
+
+typedef struct {
+	nr_nfapi_ul_config_harq_information_rel10_tdd_t harq_information_rel10_tdd;
+	nr_nfapi_ul_config_harq_information_rel8_fdd_t harq_information_rel8_fdd;
+	nr_nfapi_ul_config_harq_information_rel9_fdd_t harq_information_rel9_fdd;
+	nr_nfapi_ul_config_harq_information_rel11_t harq_information_rel11;
+	nr_nfapi_ul_config_harq_information_rel13_t harq_information_rel13;
+} nr_nfapi_ul_config_harq_information;
+
+typedef struct { 
+	nr_nfapi_tl_t tl;
+	uint32_t handle;
+	uint16_t size;
+	uint16_t rnti;
+	uint8_t srs_bandwidth;
+	uint8_t frequency_domain_position;
+	uint8_t srs_hopping_bandwidth;
+	uint8_t transmission_comb;
+	uint16_t i_srs;
+	uint8_t sounding_reference_cyclic_shift;
+} nr_nfapi_ul_config_srs_pdu_rel8_t;
+#define NR_NFAPI_UL_CONFIG_REQUEST_SRS_PDU_REL8_TAG 0x201b
+
+typedef struct { 
+	nr_nfapi_tl_t tl;
+	uint8_t antenna_port;
+} nr_nfapi_ul_config_srs_pdu_rel10_t;
+#define NR_NFAPI_UL_CONFIG_REQUEST_SRS_PDU_REL10_TAG 0x201c
+
+typedef struct { 
+	nr_nfapi_tl_t tl;
+	uint8_t number_of_combs;
+} nr_nfapi_ul_config_srs_pdu_rel13_t;
+#define NR_NFAPI_UL_CONFIG_REQUEST_SRS_PDU_REL13_TAG 0x204c
+
+typedef struct {
+	nr_nfapi_ul_config_srs_pdu_rel8_t srs_pdu_rel8;
+	nr_nfapi_ul_config_srs_pdu_rel10_t srs_pdu_rel10;
+	nr_nfapi_ul_config_srs_pdu_rel13_t srs_pdu_rel13;
+} nr_nfapi_ul_config_srs_pdu;
+
+typedef struct {
+	nr_nfapi_ul_config_ue_information ue_information;
+	nr_nfapi_ul_config_cqi_information cqi_information;
+} nr_nfapi_ul_config_uci_cqi_pdu;
+
+typedef struct {
+	nr_nfapi_ul_config_ue_information ue_information;
+	nr_nfapi_ul_config_sr_information sr_information;
+} nr_nfapi_ul_config_uci_sr_pdu;
+
+typedef struct {
+	nr_nfapi_ul_config_ue_information ue_information;
+	nr_nfapi_ul_config_harq_information harq_information;
+} nr_nfapi_ul_config_uci_harq_pdu;
+
+typedef struct {
+	nr_nfapi_ul_config_ue_information ue_information;
+	nr_nfapi_ul_config_sr_information sr_information;
+	nr_nfapi_ul_config_harq_information harq_information;
+} nr_nfapi_ul_config_uci_sr_harq_pdu;
+
+typedef struct {
+	nr_nfapi_ul_config_ue_information ue_information;
+	nr_nfapi_ul_config_cqi_information cqi_information;
+	nr_nfapi_ul_config_harq_information harq_information;
+} nr_nfapi_ul_config_uci_cqi_harq_pdu;
+
+typedef struct {
+	nr_nfapi_ul_config_ue_information ue_information;
+	nr_nfapi_ul_config_cqi_information cqi_information;
+	nr_nfapi_ul_config_sr_information sr_information;
+} nr_nfapi_ul_config_uci_cqi_sr_pdu;
+
+typedef struct {
+	nr_nfapi_ul_config_ue_information ue_information;
+	nr_nfapi_ul_config_cqi_information cqi_information;
+	nr_nfapi_ul_config_sr_information sr_information;
+	nr_nfapi_ul_config_harq_information harq_information;
+} nr_nfapi_ul_config_uci_cqi_sr_harq_pdu;
+
+typedef struct {
+	nr_nfapi_ul_config_ue_information ue_information;
+} nr_nfapi_ul_config_harq_buffer_pdu;
+
+typedef struct {
+	nr_nfapi_ul_config_ulsch_pdu ulsch_pdu;
+	nr_nfapi_ul_config_cqi_information csi_information;
+} nr_nfapi_ul_config_ulsch_uci_csi_pdu;
+
+typedef struct {
+	nr_nfapi_ul_config_ulsch_pdu ulsch_pdu;
+	nr_nfapi_ul_config_harq_information harq_information;
+} nr_nfapi_ul_config_ulsch_uci_harq_pdu;
+
+typedef struct {
+	nr_nfapi_ul_config_ulsch_pdu ulsch_pdu;
+	nr_nfapi_ul_config_cqi_information csi_information;
+	nr_nfapi_ul_config_harq_information harq_information;
+} nr_nfapi_ul_config_ulsch_csi_uci_harq_pdu;
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t harq_ack_resource;
+} nr_nfapi_ul_config_nb_harq_information_rel13_fdd_t;
+#define NR_NFAPI_UL_CONFIG_REQUEST_NB_HARQ_INFORMATION_REL13_FDD_TAG 0x2061
+
+typedef struct {
+	nr_nfapi_ul_config_nb_harq_information_rel13_fdd_t nb_harq_information_rel13_fdd;
+} nr_nfapi_ul_config_nb_harq_information;
+
+typedef struct {
+	nr_nfapi_tl_t tl;	
+	uint8_t nulsch_format;
+	uint32_t handle;
+	uint16_t size;
+	uint16_t rnti;
+	uint8_t subcarrier_indication;
+	uint8_t resource_assignment;
+	uint8_t mcs;
+	uint8_t redudancy_version;
+	uint8_t repetition_number;
+	uint8_t new_data_indication;
+	uint8_t n_srs;
+	uint16_t scrambling_sequence_initialization_cinit;
+	uint16_t sf_idx;
+	nr_nfapi_ul_config_ue_information ue_information;
+	nr_nfapi_ul_config_nb_harq_information nb_harq_information;
+} nr_nfapi_ul_config_nulsch_pdu_rel13_t;
+#define NR_NFAPI_UL_CONFIG_REQUEST_NULSCH_PDU_REL13_TAG 0x205F
+
+typedef struct {
+	nr_nfapi_ul_config_nulsch_pdu_rel13_t nulsch_pdu_rel13;
+} nr_nfapi_ul_config_nulsch_pdu;
+
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t nprach_config_0;
+	uint8_t nprach_config_1;
+	uint8_t nprach_config_2;
+} nr_nfapi_ul_config_nrach_pdu_rel13_t;
+#define NR_NFAPI_UL_CONFIG_REQUEST_NRACH_PDU_REL13_TAG 0x2067
+
+typedef struct {
+	nr_nfapi_ul_config_nrach_pdu_rel13_t nrach_pdu_rel13;
+} nr_nfapi_ul_config_nrach_pdu;
+
+typedef struct {
+	uint8_t pdu_type;
+	uint8_t pdu_size;
+	union {
+		nr_nfapi_ul_config_ulsch_pdu				ulsch_pdu;
+		nr_nfapi_ul_config_ulsch_cqi_ri_pdu		ulsch_cqi_ri_pdu;
+		nr_nfapi_ul_config_ulsch_harq_pdu			ulsch_harq_pdu;
+		nr_nfapi_ul_config_ulsch_cqi_harq_ri_pdu	ulsch_cqi_harq_ri_pdu;
+		nr_nfapi_ul_config_uci_cqi_pdu				uci_cqi_pdu;
+		nr_nfapi_ul_config_uci_sr_pdu				uci_sr_pdu;
+		nr_nfapi_ul_config_uci_harq_pdu			uci_harq_pdu;
+		nr_nfapi_ul_config_uci_sr_harq_pdu			uci_sr_harq_pdu;
+		nr_nfapi_ul_config_uci_cqi_harq_pdu		uci_cqi_harq_pdu;
+		nr_nfapi_ul_config_uci_cqi_sr_pdu			uci_cqi_sr_pdu;
+		nr_nfapi_ul_config_uci_cqi_sr_harq_pdu		uci_cqi_sr_harq_pdu;
+		nr_nfapi_ul_config_srs_pdu					srs_pdu;
+		nr_nfapi_ul_config_harq_buffer_pdu			harq_buffer_pdu;
+		nr_nfapi_ul_config_ulsch_uci_csi_pdu		ulsch_uci_csi_pdu;
+		nr_nfapi_ul_config_ulsch_uci_harq_pdu		ulsch_uci_harq_pdu;
+		nr_nfapi_ul_config_ulsch_csi_uci_harq_pdu	ulsch_csi_uci_harq_pdu;
+		nr_nfapi_ul_config_nulsch_pdu				nulsch_pdu;
+		nr_nfapi_ul_config_nrach_pdu				nrach_pdu;
+	};
+} nr_nfapi_ul_config_request_pdu_t;
+
+#define NR_NFAPI_UL_CONFIG_MAX_PDU 100
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t number_of_pdus;
+	uint8_t rach_prach_frequency_resources;
+	uint8_t srs_present;
+	nr_nfapi_ul_config_request_pdu_t* ul_config_pdu_list;
+} nr_nfapi_ul_config_request_body_t;
+#define NR_NFAPI_UL_CONFIG_REQUEST_BODY_TAG 0x200C
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t resource_block_start;
+	uint8_t cyclic_shift_2_for_drms;
+	uint8_t hi_value;
+	uint8_t i_phich;
+	uint16_t transmission_power;
+} nr_nfapi_hi_dci0_hi_pdu_rel8_t;
+#define NR_NFAPI_HI_DCI0_REQUEST_HI_PDU_REL8_TAG 0x201e
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t flag_tb2;
+	uint8_t hi_value_2;
+} nr_nfapi_hi_dci0_hi_pdu_rel10_t;
+#define NR_NFAPI_HI_DCI0_REQUEST_HI_PDU_REL10_TAG 0x201f
+
+typedef struct {
+	nr_nfapi_hi_dci0_hi_pdu_rel8_t		hi_pdu_rel8;
+	nr_nfapi_hi_dci0_hi_pdu_rel10_t	hi_pdu_rel10;
+} nr_nfapi_hi_dci0_hi_pdu;
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t dci_format;
+	uint8_t cce_index;
+	uint8_t aggregation_level;
+	uint16_t rnti;
+	uint8_t resource_block_start;
+	uint8_t number_of_resource_block;
+	uint8_t mcs_1;
+	uint8_t cyclic_shift_2_for_drms;
+	uint8_t frequency_hopping_enabled_flag;
+	uint8_t frequency_hopping_bits;
+	uint8_t new_data_indication_1;
+	uint8_t ue_tx_antenna_seleciton;
+	uint8_t tpc;
+	uint8_t cqi_csi_request;
+	uint8_t ul_index;
+	uint8_t dl_assignment_index;
+	uint32_t tpc_bitmap;
+	uint16_t transmission_power;
+} nr_nfapi_hi_dci0_dci_pdu_rel8_t;
+#define NR_NFAPI_HI_DCI0_REQUEST_DCI_PDU_REL8_TAG 0x2020
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t cross_carrier_scheduling_flag;
+	uint8_t carrier_indicator;
+	uint8_t size_of_cqi_csi_feild;
+	uint8_t srs_flag;
+	uint8_t srs_request;
+	uint8_t resource_allocation_flag;
+	uint8_t resource_allocation_type;
+	uint32_t resource_block_coding;
+	uint8_t mcs_2;
+	uint8_t new_data_indication_2;
+	uint8_t number_of_antenna_ports;
+	uint8_t tpmi;
+	uint8_t total_dci_length_including_padding;
+	uint8_t n_ul_rb;
+} nr_nfapi_hi_dci0_dci_pdu_rel10_t;
+#define NR_NFAPI_HI_DCI0_REQUEST_DCI_PDU_REL10_TAG 0x2021
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t pscch_resource;
+	uint8_t time_resource_pattern;
+} nr_nfapi_hi_dci0_dci_pdu_rel12_t;
+
+#define NR_NFAPI_HI_DCI0_REQUEST_DCI_PDU_REL12_TAG 0x204D
+
+typedef struct {
+	nr_nfapi_hi_dci0_dci_pdu_rel8_t	dci_pdu_rel8;
+	nr_nfapi_hi_dci0_dci_pdu_rel10_t	dci_pdu_rel10;
+	nr_nfapi_hi_dci0_dci_pdu_rel12_t	dci_pdu_rel12;
+} nr_nfapi_hi_dci0_dci_pdu;
+
+typedef nr_nfapi_hi_dci0_dci_pdu_rel8_t nr_nfapi_hi_dci0_epdcch_dci_pdu_rel8_t;
+#define NR_NFAPI_HI_DCI0_REQUEST_EPDCCH_DCI_PDU_REL8_TAG 0x2020
+
+typedef nr_nfapi_hi_dci0_dci_pdu_rel10_t nr_nfapi_hi_dci0_epdcch_dci_pdu_rel10_t;
+#define NR_NFAPI_HI_DCI0_REQUEST_EPDCCH_DCI_PDU_REL10_TAG 0x2021
+
+typedef nr_nfapi_dl_config_epdcch_parameters_rel11_t nr_nfapi_hi_dci0_epdcch_parameters_rel11_t;
+#define NR_NFAPI_HI_DCI0_REQUEST_EPDCCH_PARAMETERS_REL11_TAG 0x2041
+
+typedef struct {
+	nr_nfapi_hi_dci0_epdcch_dci_pdu_rel8_t		epdcch_dci_pdu_rel8;
+	nr_nfapi_hi_dci0_epdcch_dci_pdu_rel10_t	epdcch_dci_pdu_rel10;
+	nr_nfapi_hi_dci0_epdcch_parameters_rel11_t	epdcch_parameters_rel11;
+} nr_nfapi_hi_dci0_epdcch_dci_pdu;
+
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t mpdcch_narrowband;
+	uint8_t number_of_prb_pairs;
+	uint8_t resource_block_assignment;
+	uint8_t mpdcch_transmission_type;
+	uint8_t start_symbol;
+	uint8_t ecce_index;
+	uint8_t aggreagation_level;
+	uint8_t rnti_type;
+	uint16_t rnti;
+	uint8_t ce_mode;
+	uint16_t drms_scrambling_init;
+	uint16_t initial_transmission_sf_io;
+	uint16_t transmission_power;
+	uint8_t dci_format;
+	uint8_t resource_block_start;
+	uint8_t number_of_resource_blocks;
+	uint8_t mcs;
+	uint8_t pusch_repetition_levels;
+	uint8_t frequency_hopping_flag;
+	uint8_t new_data_indication;
+	uint8_t harq_process;
+	uint8_t redudency_version;
+	uint8_t tpc;
+	uint8_t csi_request;
+	uint8_t ul_inex;
+	uint8_t dai_presence_flag;
+	uint8_t dl_assignment_index;
+	uint8_t srs_request;
+	uint8_t dci_subframe_repetition_number;
+	uint32_t tcp_bitmap;
+	uint8_t total_dci_length_include_padding;
+	uint8_t number_of_tx_antenna_ports;
+	uint16_t precoding_value[NR_NFAPI_MAX_ANTENNA_PORT_COUNT];
+} nr_nfapi_hi_dci0_mpdcch_dci_pdu_rel13_t;
+#define NR_NFAPI_HI_DCI0_REQUEST_MPDCCH_DCI_PDU_REL13_TAG 0x204E
+
+typedef struct {
+	nr_nfapi_hi_dci0_mpdcch_dci_pdu_rel13_t	mpdcch_dci_pdu_rel13;
+} nr_nfapi_hi_dci0_mpdcch_dci_pdu;
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t ncce_index;
+	uint8_t aggregation_level;
+	uint8_t start_symbol;
+	uint16_t rnti;
+	uint8_t scrambling_reinitialization_batch_index;
+	uint8_t nrs_antenna_ports_assumed_by_the_ue;
+	uint8_t subcarrier_indication;
+	uint8_t resource_assignment;
+	uint8_t scheduling_delay;
+	uint8_t mcs;
+	uint8_t redudancy_version;
+	uint8_t repetition_number;
+	uint8_t new_data_indicator;
+	uint8_t dci_subframe_repetition_number;
+} nr_nfapi_hi_dci0_npdcch_dci_pdu_rel13_t;
+
+#define NR_NFAPI_HI_DCI0_REQUEST_NPDCCH_DCI_PDU_REL13_TAG 0x2062
+
+typedef struct {
+	nr_nfapi_hi_dci0_npdcch_dci_pdu_rel13_t	npdcch_dci_pdu_rel13;
+} nr_nfapi_hi_dci0_npdcch_dci_pdu;
+
+typedef struct {
+	uint8_t pdu_type;
+	uint8_t pdu_size;
+	union {
+		nr_nfapi_hi_dci0_hi_pdu			hi_pdu;
+		nr_nfapi_hi_dci0_dci_pdu			dci_pdu;
+		nr_nfapi_hi_dci0_epdcch_dci_pdu	epdcch_dci_pdu;
+		nr_nfapi_hi_dci0_mpdcch_dci_pdu	mpdcch_dci_pdu;
+		nr_nfapi_hi_dci0_npdcch_dci_pdu	npdcch_dci_pdu;
+	};
+} nr_nfapi_hi_dci0_request_pdu_t;
+
+#define NR_NFAPI_HI_DCI0_MAX_PDU 100
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t sfnsf;
+	uint8_t number_of_dci;
+	uint8_t number_of_hi;
+	nr_nfapi_hi_dci0_request_pdu_t* hi_dci0_pdu_list;
+} nr_nfapi_hi_dci0_request_body_t;
+#define NR_NFAPI_HI_DCI0_REQUEST_BODY_TAG 0x201D
+
+#define NR_NFAPI_TX_MAX_SEGMENTS 32
+typedef struct {
+	uint16_t pdu_length;
+	uint16_t pdu_index;
+	uint8_t num_segments;
+	struct {
+		uint32_t segment_length;
+		uint8_t* segment_data;
+	} segments[NR_NFAPI_TX_MAX_SEGMENTS];
+} nr_nfapi_tx_request_pdu_t;
+
+#define NR_NFAPI_TX_MAX_PDU 100
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t number_of_pdus;
+	nr_nfapi_tx_request_pdu_t* tx_pdu_list;
+} nr_nfapi_tx_request_body_t;
+#define NR_NFAPI_TX_REQUEST_BODY_TAG 0x2022
+
+// P7 Message Structures
+typedef struct {
+	nr_nfapi_p7_message_header_t header;
+	uint32_t t1;
+	int32_t delta_sfn_sf;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_dl_node_sync_t;
+
+typedef struct {
+	nr_nfapi_p7_message_header_t header;
+	uint32_t t1;
+	uint32_t t2;
+	uint32_t t3;	
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_ul_node_sync_t;
+
+typedef struct {
+	nr_nfapi_p7_message_header_t header;
+	uint32_t last_sfn_sf;
+	uint32_t time_since_last_timing_info;
+	uint32_t dl_config_jitter;
+	uint32_t tx_request_jitter;
+	uint32_t ul_config_jitter;
+	uint32_t hi_dci0_jitter;
+	int32_t dl_config_latest_delay;
+	int32_t tx_request_latest_delay;
+	int32_t ul_config_latest_delay;
+	int32_t hi_dci0_latest_delay;
+	int32_t dl_config_earliest_arrival;
+	int32_t tx_request_earliest_arrival;
+	int32_t ul_config_earliest_arrival;
+	int32_t hi_dci0_earliest_arrival;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_timing_info_t;
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint32_t handle;
+	uint16_t rnti;
+} nr_nfapi_rx_ue_information;
+#define NR_NFAPI_RX_UE_INFORMATION_TAG 0x2038
+
+typedef struct { 
+	uint8_t value_0;
+	uint8_t value_1;
+} nr_nfapi_harq_indication_tdd_harq_data_bundling_t;
+
+typedef struct { 
+	uint8_t value_0;
+	uint8_t value_1;
+	uint8_t value_2;
+	uint8_t value_3;
+} nr_nfapi_harq_indication_tdd_harq_data_multiplexing_t;
+
+typedef struct { 
+	uint8_t value_0;
+} nr_nfapi_harq_indication_tdd_harq_data_special_bundling_t;
+
+typedef struct { 
+	uint8_t value_0;
+} nr_nfapi_harq_indication_tdd_harq_data_t;
+
+typedef struct { 
+	nr_nfapi_tl_t tl;
+	uint8_t mode;
+	uint8_t number_of_ack_nack;
+	union{
+		nr_nfapi_harq_indication_tdd_harq_data_bundling_t			bundling;
+		nr_nfapi_harq_indication_tdd_harq_data_multiplexing_t		multiplex;
+		nr_nfapi_harq_indication_tdd_harq_data_special_bundling_t	special_bundling;
+	} harq_data;
+} nr_nfapi_harq_indication_tdd_rel8_t;
+#define NR_NFAPI_HARQ_INDICATION_TDD_REL8_TAG 0x2027
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t mode;
+	uint8_t number_of_ack_nack;
+	union{
+		nr_nfapi_harq_indication_tdd_harq_data_t	bundling;
+		nr_nfapi_harq_indication_tdd_harq_data_t	multiplex;
+		nr_nfapi_harq_indication_tdd_harq_data_special_bundling_t	special_bundling;
+		nr_nfapi_harq_indication_tdd_harq_data_t	channel_selection;
+		nr_nfapi_harq_indication_tdd_harq_data_t	format_3;
+	} harq_data[NR_NFAPI_MAX_NUMBER_ACK_NACK_TDD];
+} nr_nfapi_harq_indication_tdd_rel9_t;
+#define NR_NFAPI_HARQ_INDICATION_TDD_REL9_TAG 0x2028
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t mode;
+	uint16_t number_of_ack_nack;
+	union{
+		nr_nfapi_harq_indication_tdd_harq_data_t					bundling;
+		nr_nfapi_harq_indication_tdd_harq_data_t					multiplex;
+		nr_nfapi_harq_indication_tdd_harq_data_special_bundling_t	special_bundling;
+		nr_nfapi_harq_indication_tdd_harq_data_t					channel_selection;
+		nr_nfapi_harq_indication_tdd_harq_data_t			format_3;
+		nr_nfapi_harq_indication_tdd_harq_data_t			format_4;
+		nr_nfapi_harq_indication_tdd_harq_data_t			format_5;
+	} harq_data[NR_NFAPI_MAX_NUMBER_ACK_NACK_TDD];
+} nr_nfapi_harq_indication_tdd_rel13_t;
+#define NR_NFAPI_HARQ_INDICATION_TDD_REL13_TAG 0x204F
+
+typedef struct { 
+	nr_nfapi_tl_t tl;
+	uint8_t harq_tb1;
+	uint8_t harq_tb2;
+} nr_nfapi_harq_indication_fdd_rel8_t;
+#define NR_NFAPI_HARQ_INDICATION_FDD_REL8_TAG 0x2029
+
+#define NR_NFAPI_HARQ_ACK_NACK_REL9_MAX 10
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t mode;
+	uint8_t number_of_ack_nack;
+	uint8_t harq_tb_n[NR_NFAPI_HARQ_ACK_NACK_REL9_MAX];
+} nr_nfapi_harq_indication_fdd_rel9_t;
+#define NR_NFAPI_HARQ_INDICATION_FDD_REL9_TAG 0x202a
+
+#define NR_NFAPI_HARQ_ACK_NACK_REL13_MAX 22 // Need to check this max?
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t mode;
+	uint16_t number_of_ack_nack;
+	uint8_t harq_tb_n[NR_NFAPI_HARQ_ACK_NACK_REL13_MAX];
+} nr_nfapi_harq_indication_fdd_rel13_t;
+#define NR_NFAPI_HARQ_INDICATION_FDD_REL13_TAG 0x2050
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t ul_cqi;
+	uint8_t channel;
+} nr_nfapi_ul_cqi_information_t;
+#define NR_NFAPI_UL_CQI_INFORMATION_TAG 0x2052
+
+// Only expect 1 harq_indication TLV.tag to be set
+// Would this be a better a an union, but not clear which combinations
+// are valid
+typedef struct {
+	uint16_t							instance_length;
+	nr_nfapi_rx_ue_information				rx_ue_information;
+	nr_nfapi_harq_indication_tdd_rel8_t	harq_indication_tdd_rel8;
+	nr_nfapi_harq_indication_tdd_rel9_t	harq_indication_tdd_rel9;
+	nr_nfapi_harq_indication_tdd_rel13_t	harq_indication_tdd_rel13;
+	nr_nfapi_harq_indication_fdd_rel8_t	harq_indication_fdd_rel8;
+	nr_nfapi_harq_indication_fdd_rel9_t	harq_indication_fdd_rel9;
+	nr_nfapi_harq_indication_fdd_rel13_t	harq_indication_fdd_rel13;
+	nr_nfapi_ul_cqi_information_t			ul_cqi_information;
+} nr_nfapi_harq_indication_pdu_t;
+
+#define NR_NFAPI_HARQ_IND_MAX_PDU 100
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t number_of_harqs;
+	nr_nfapi_harq_indication_pdu_t* harq_pdu_list;
+} nr_nfapi_harq_indication_body_t;
+#define NR_NFAPI_HARQ_INDICATION_BODY_TAG 0x2026
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t crc_flag;
+} nr_nfapi_crc_indication_rel8_t;
+#define NR_NFAPI_CRC_INDICATION_REL8_TAG 0x202c
+
+typedef struct {
+	uint16_t					instance_length;
+	nr_nfapi_rx_ue_information		rx_ue_information;
+	nr_nfapi_crc_indication_rel8_t	crc_indication_rel8;
+} nr_nfapi_crc_indication_pdu_t;
+
+#define NR_NFAPI_CRC_IND_MAX_PDU 100
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t number_of_crcs;
+	nr_nfapi_crc_indication_pdu_t* crc_pdu_list;
+} nr_nfapi_crc_indication_body_t;
+#define NR_NFAPI_CRC_INDICATION_BODY_TAG 0x202b
+
+typedef struct {
+	uint16_t					instance_length;
+	nr_nfapi_rx_ue_information		rx_ue_information;
+	nr_nfapi_ul_cqi_information_t	ul_cqi_information;
+} nr_nfapi_sr_indication_pdu_t;
+
+#define NR_NFAPI_SR_IND_MAX_PDU 100
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t number_of_srs;				// Question : should this be srs
+	nr_nfapi_sr_indication_pdu_t* sr_pdu_list;
+} nr_nfapi_sr_indication_body_t;
+#define NR_NFAPI_SR_INDICATION_BODY_TAG 0x202d
+
+// The data offset should be set to 0 or 1 before encoding
+// If it is set to 1 the nfapi library will detemine the correct offset
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t length;
+	uint16_t data_offset;
+	uint8_t ul_cqi;
+	uint8_t ri;
+	uint16_t timing_advance;
+} nr_nfapi_cqi_indication_rel8_t;
+#define NR_NFAPI_CQI_INDICATION_REL8_TAG 0x202f
+
+#define NR_NFAPI_CC_MAX 4
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t length;
+	uint16_t data_offset;
+	uint8_t ul_cqi;
+	uint8_t number_of_cc_reported;
+	uint8_t ri[NR_NFAPI_CC_MAX];
+	uint16_t timing_advance;
+	uint16_t timing_advance_r9;
+} nr_nfapi_cqi_indication_rel9_t;
+#define NR_NFAPI_CQI_INDICATION_REL9_TAG 0x2030
+
+typedef struct {
+	uint16_t					instance_length;
+	nr_nfapi_rx_ue_information		rx_ue_information;
+	nr_nfapi_cqi_indication_rel8_t cqi_indication_rel8;
+	nr_nfapi_cqi_indication_rel9_t cqi_indication_rel9;
+	nr_nfapi_ul_cqi_information_t	ul_cqi_information;
+} nr_nfapi_cqi_indication_pdu_t;
+
+#define NR_NFAPI_CQI_RAW_MAX_LEN 12
+typedef struct {
+	uint8_t pdu[NR_NFAPI_CQI_RAW_MAX_LEN];
+} nr_nfapi_cqi_indication_raw_pdu_t;
+
+#define NR_NFAPI_CQI_IND_MAX_PDU 100
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t number_of_cqis;
+	nr_nfapi_cqi_indication_pdu_t*			cqi_pdu_list;
+	nr_nfapi_cqi_indication_raw_pdu_t*		cqi_raw_pdu_list;
+} nr_nfapi_cqi_indication_body_t;
+#define NR_NFAPI_CQI_INDICATION_BODY_TAG 0x202e
+
+typedef struct { 
+	nr_nfapi_tl_t tl;
+	uint16_t rnti;
+	uint8_t preamble;
+	uint16_t timing_advance;
+} nr_nfapi_preamble_pdu_rel8_t;
+#define NR_NFAPI_PREAMBLE_REL8_TAG 0x2032
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t timing_advance_r9;
+} nr_nfapi_preamble_pdu_rel9_t;
+#define NR_NFAPI_PREAMBLE_REL9_TAG 0x2033
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t rach_resource_type;
+} nr_nfapi_preamble_pdu_rel13_t;
+#define NR_NFAPI_PREAMBLE_REL13_TAG 0x2051
+
+typedef struct { 
+	uint16_t					instance_length;
+	nr_nfapi_preamble_pdu_rel8_t	preamble_rel8;
+	nr_nfapi_preamble_pdu_rel9_t	preamble_rel9;
+	nr_nfapi_preamble_pdu_rel13_t	preamble_rel13;
+} nr_nfapi_preamble_pdu_t;
+
+#define NR_NFAPI_PREAMBLE_MAX_PDU 100
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t number_of_preambles;
+	nr_nfapi_preamble_pdu_t*			preamble_list;
+} nr_nfapi_rach_indication_body_t;
+#define NR_NFAPI_RACH_INDICATION_BODY_TAG 0x2031
+
+#define NR_NFAPI_NUM_RB_MAX 1000
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t doppler_estimation;
+	uint16_t timing_advance;
+	uint8_t number_of_resource_blocks;
+	uint8_t rb_start;
+	uint8_t snr[NR_NFAPI_NUM_RB_MAX];
+} nr_nfapi_srs_indication_fdd_rel8_t;
+#define NR_NFAPI_SRS_INDICATION_FDD_REL8_TAG 0x2035
+
+typedef struct { 
+	nr_nfapi_tl_t tl;
+	uint16_t timing_advance_r9;
+} nr_nfapi_srs_indication_fdd_rel9_t;
+#define NR_NFAPI_SRS_INDICATION_FDD_REL9_TAG 0x2036
+
+typedef struct { 
+	nr_nfapi_tl_t tl;
+	uint8_t uppts_symbol;
+} nr_nfapi_srs_indication_ttd_rel10_t;
+#define NR_NFAPI_SRS_INDICATION_TDD_REL10_TAG 0x2037
+
+typedef struct { 
+	nr_nfapi_tl_t tl;
+	uint16_t ul_rtoa;
+} nr_nfapi_srs_indication_fdd_rel11_t;
+#define NR_NFAPI_SRS_INDICATION_FDD_REL11_TAG 0x2053
+
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t num_prb_per_subband;
+	uint8_t number_of_subbands;
+	uint8_t num_atennas;
+	struct {
+		uint8_t subband_index;
+		uint16_t channel[NR_NFAPI_MAX_NUM_PHYSICAL_ANTENNAS];
+	} subands[NR_NFAPI_MAX_NUM_SUBBANDS];
+} nr_nfapi_tdd_channel_measurement_t;
+#define NR_NFAPI_TDD_CHANNEL_MEASUREMENT_TAG 0x2054
+
+typedef struct {
+	uint16_t							instance_length;
+	nr_nfapi_rx_ue_information				rx_ue_information;
+	nr_nfapi_srs_indication_fdd_rel8_t		srs_indication_fdd_rel8;
+	nr_nfapi_srs_indication_fdd_rel9_t		srs_indication_fdd_rel9;
+	nr_nfapi_srs_indication_ttd_rel10_t	srs_indication_tdd_rel10;
+	nr_nfapi_srs_indication_fdd_rel11_t	srs_indication_fdd_rel11;
+	nr_nfapi_tdd_channel_measurement_t		tdd_channel_measurement;
+} nr_nfapi_srs_indication_pdu_t;
+
+#define NR_NFAPI_SRS_IND_MAX_PDU 16
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t number_of_ues;
+	nr_nfapi_srs_indication_pdu_t* srs_pdu_list;
+} nr_nfapi_srs_indication_body_t;
+#define NR_NFAPI_SRS_INDICATION_BODY_TAG 0x2034
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t length;
+	uint16_t offset;
+	uint8_t ul_cqi;
+	uint16_t timing_advance;
+} nr_nfapi_rx_indication_rel8_t;
+#define NR_NFAPI_RX_INDICATION_REL8_TAG 0x2024
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t timing_advance_r9;
+ } nr_nfapi_rx_indication_rel9_t;
+#define NR_NFAPI_RX_INDICATION_REL9_TAG 0x2025
+
+typedef struct {
+	nr_nfapi_rx_ue_information rx_ue_information;
+	nr_nfapi_rx_indication_rel8_t rx_indication_rel8;
+	nr_nfapi_rx_indication_rel9_t rx_indication_rel9;
+	uint8_t* data;
+} nr_nfapi_rx_indication_pdu_t;
+
+#define NR_NFAPI_RX_IND_MAX_PDU 100
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t number_of_pdus;
+	nr_nfapi_rx_indication_pdu_t* rx_pdu_list;
+} nr_nfapi_rx_indication_body_t;
+#define NR_NFAPI_RX_INDICATION_BODY_TAG 0x2023
+
+typedef struct {
+	nr_nfapi_tl_t tl;	
+	uint8_t harq_tb1;
+} nr_nfapi_nb_harq_indication_fdd_rel13_t;
+#define NR_NFAPI_NB_HARQ_INDICATION_FDD_REL13_TAG 0x2064
+
+typedef struct {
+	uint16_t								instance_length;
+	nr_nfapi_rx_ue_information					rx_ue_information;
+	nr_nfapi_nb_harq_indication_fdd_rel13_t	nb_harq_indication_fdd_rel13;
+	nr_nfapi_ul_cqi_information_t				ul_cqi_information;
+} nr_nfapi_nb_harq_indication_pdu_t;
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t number_of_harqs;
+	nr_nfapi_nb_harq_indication_pdu_t* nb_harq_pdu_list;
+} nr_nfapi_nb_harq_indication_body_t;
+#define NR_NFAPI_NB_HARQ_INDICATION_BODY_TAG 0x2063
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t rnti;
+	uint8_t initial_sc;
+	uint16_t timing_advance;
+	uint8_t nrach_ce_level;
+} nr_nfapi_nrach_indication_pdu_rel13_t;
+#define NR_NFAPI_NRACH_INDICATION_REL13_TAG 0x2066
+
+typedef struct {
+	nr_nfapi_nrach_indication_pdu_rel13_t		nrach_indication_rel13;
+} nr_nfapi_nrach_indication_pdu_t;
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t number_of_initial_scs_detected;
+	nr_nfapi_nrach_indication_pdu_t* nrach_pdu_list;
+} nr_nfapi_nrach_indication_body_t;
+#define NR_NFAPI_NRACH_INDICATION_BODY_TAG 0x2065
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint32_t handle;
+	uint32_t mp_cca;
+	uint32_t n_cca;
+	uint32_t offset;
+	uint32_t lte_txop_sf;
+	uint16_t txop_sfn_sf_end;
+	uint32_t lbt_mode;
+} nr_nfapi_lbt_pdsch_req_pdu_rel13_t;
+#define NR_NFAPI_LBT_PDSCH_REQ_PDU_REL13_TAG 0x2056
+
+typedef struct {
+	nr_nfapi_lbt_pdsch_req_pdu_rel13_t lbt_pdsch_req_pdu_rel13;
+} nr_nfapi_lbt_pdsch_req_pdu;
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint32_t handle;
+	uint32_t offset;
+	uint16_t sfn_sf_end;
+	uint32_t lbt_mode;
+} nr_nfapi_lbt_drs_req_pdu_rel13_t;
+#define NR_NFAPI_LBT_DRS_REQ_PDU_REL13_TAG 0x2057
+
+typedef struct {
+	nr_nfapi_lbt_drs_req_pdu_rel13_t lbt_drs_req_pdu_rel13;
+} nr_nfapi_lbt_drs_req_pdu;
+
+typedef struct {
+	uint8_t pdu_type;
+	uint8_t pdu_size;
+	union {
+		nr_nfapi_lbt_pdsch_req_pdu		lbt_pdsch_req_pdu;
+		nr_nfapi_lbt_drs_req_pdu		lbt_drs_req_pdu;
+	};
+} nr_nfapi_lbt_dl_config_request_pdu_t;
+
+#define NR_NFAPI_LBT_DL_CONFIG_REQ_MAX_PDU 16
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t number_of_pdus;
+	nr_nfapi_lbt_dl_config_request_pdu_t*		lbt_dl_config_req_pdu_list;
+} nr_nfapi_lbt_dl_config_request_body_t;
+#define NR_NFAPI_LBT_DL_CONFIG_REQUEST_BODY_TAG 0x2055
+
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint32_t handle;
+	uint32_t result;
+	uint32_t lte_txop_symbols;
+	uint32_t initial_partial_sf;
+} nr_nfapi_lbt_pdsch_rsp_pdu_rel13_t;
+#define NR_NFAPI_LBT_PDSCH_RSP_PDU_REL13_TAG 0x2059
+
+typedef struct {
+	nr_nfapi_lbt_pdsch_rsp_pdu_rel13_t lbt_pdsch_rsp_pdu_rel13;
+} nr_nfapi_lbt_pdsch_rsp_pdu;
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint32_t handle;
+	uint32_t result;
+} nr_nfapi_lbt_drs_rsp_pdu_rel13_t;
+#define NR_NFAPI_LBT_DRS_RSP_PDU_REL13_TAG 0x205A
+
+typedef struct {
+	nr_nfapi_lbt_drs_rsp_pdu_rel13_t lbt_drs_rsp_pdu_rel13;
+} nr_nfapi_lbt_drs_rsp_pdu;
+
+
+typedef struct {
+	uint8_t pdu_type;
+	uint8_t pdu_size;
+	union {
+		nr_nfapi_lbt_pdsch_rsp_pdu		lbt_pdsch_rsp_pdu;
+		nr_nfapi_lbt_drs_rsp_pdu		lbt_drs_rsp_pdu;
+	};
+} nr_nfapi_lbt_dl_indication_pdu_t;
+
+#define NR_NFAPI_LBT_IND_MAX_PDU 16
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t number_of_pdus;
+	nr_nfapi_lbt_dl_indication_pdu_t* lbt_indication_pdu_list;
+} nr_nfapi_lbt_dl_indication_body_t;
+#define NR_NFAPI_LBT_DL_INDICATION_BODY_TAG 0x2058
+
+typedef struct {
+} nr_nfapi_error_indication_msg_invalid_state;
+
+typedef struct {
+} nr_nfapi_error_indication_msg_bch_missing;
+
+typedef struct {
+	uint16_t recieved_sfn_sf;
+	uint16_t expected_sfn_sf;
+} nr_nfapi_error_indication_sfn_out_of_sync;
+
+typedef struct {
+	uint8_t sub_error_code;
+	uint8_t direction;
+	uint16_t rnti;
+	uint8_t pdu_type;
+} nr_nfapi_error_indication_msg_pdu_err;
+
+typedef struct {
+	uint16_t recieved_sfn_sf;
+	uint16_t expected_sfn_sf;
+} nr_nfapi_error_indication_msg_invalid_sfn;
+
+typedef struct {
+	uint8_t sub_error_code;
+	uint8_t phich_lowest_ul_rb_index;
+} nr_nfapi_error_indication_msg_hi_err;
+
+typedef struct {
+	uint8_t sub_error_code;
+	uint16_t pdu_index;
+} nr_nfapi_error_indication_msg_tx_err;
+
+// 
+// P4 Message Structures
+//
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t frequency_band_indicator;
+	uint16_t measurement_period;
+	uint8_t bandwidth;
+	uint32_t timeout;
+	uint8_t number_of_earfcns;
+	uint16_t earfcn[NR_NFAPI_MAX_CARRIER_LIST];
+} nr_nfapi_lte_rssi_request_t;
+
+#define NR_NFAPI_LTE_RSSI_REQUEST_TAG 0x3000
+
+#define NR_NFAPI_P4_START_TAG NR_NFAPI_LTE_RSSI_REQUEST_TAG
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t frequency_band_indicator;
+	uint16_t measurement_period;
+	uint32_t timeout;
+	uint8_t number_of_uarfcns;
+	uint16_t uarfcn[NR_NFAPI_MAX_CARRIER_LIST];
+} nr_nfapi_utran_rssi_request_t;
+
+#define NR_NFAPI_UTRAN_RSSI_REQUEST_TAG 0x3001
+
+typedef struct {
+	uint16_t arfcn;
+	uint8_t direction;
+} nr_nfapi_arfcn_t;
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t frequency_band_indicator;
+	uint16_t measurement_period;
+	uint32_t timeout;
+	uint8_t number_of_arfcns;
+	nr_nfapi_arfcn_t arfcn[NR_NFAPI_MAX_CARRIER_LIST];
+} nr_nfapi_geran_rssi_request_t;
+
+#define NR_NFAPI_GERAN_RSSI_REQUEST_TAG 0x3002
+
+
+
+typedef struct {
+	uint16_t earfcn;
+	uint8_t number_of_ro_dl;
+	uint8_t ro_dl[NR_NFAPI_MAX_RO_DL];
+} nr_nfapi_earfcn_t;
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t frequency_band_indicator;
+	uint16_t measurement_period;
+	uint32_t timeout;
+	uint8_t number_of_earfcns;
+	nr_nfapi_earfcn_t earfcn[NR_NFAPI_MAX_CARRIER_LIST];
+} nr_nfapi_nb_iot_rssi_request_t;
+
+#define NR_NFAPI_NB_IOT_RSSI_REQUEST_TAG 0x3020
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t number_of_rssi;
+	int16_t rssi[NR_NFAPI_MAX_RSSI];
+} nr_nfapi_rssi_indication_body_t;
+
+#define NR_NFAPI_RSSI_INDICATION_TAG 0x3003
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t earfcn;
+	uint8_t measurement_bandwidth;
+	uint8_t exhaustive_search;
+	uint32_t timeout;
+	uint8_t number_of_pci;
+	uint16_t pci[NR_NFAPI_MAX_PCI_LIST];
+} nr_nfapi_lte_cell_search_request_t;
+
+#define NR_NFAPI_LTE_CELL_SEARCH_REQUEST_TAG 0x3004
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t uarfcn;
+	uint8_t exhaustive_search;
+	uint32_t timeout;
+	uint8_t number_of_psc;
+	uint16_t psc[NR_NFAPI_MAX_PSC_LIST];
+} nr_nfapi_utran_cell_search_request_t;
+
+#define NR_NFAPI_UTRAN_CELL_SEARCH_REQUEST_TAG 0x3005
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint32_t timeout;
+	uint8_t number_of_arfcn;
+	uint16_t arfcn[NR_NFAPI_MAX_ARFCN_LIST];
+} nr_nfapi_geran_cell_search_request_t;
+
+#define NR_NFAPI_GERAN_CELL_SEARCH_REQUEST_TAG 0x3006
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t earfcn;
+	uint8_t ro_dl;
+	uint8_t exhaustive_search;
+	uint32_t timeout;
+	uint8_t number_of_pci;
+	uint16_t pci[NR_NFAPI_MAX_PCI_LIST];
+} nr_nfapi_nb_iot_cell_search_request_t;
+
+#define NR_NFAPI_NB_IOT_CELL_SEARCH_REQUEST_TAG 0x3021
+
+typedef struct {
+	uint16_t pci;
+	uint8_t rsrp;
+	uint8_t rsrq;
+	int16_t frequency_offset;
+} nr_nfapi_lte_found_cell_t;
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t number_of_lte_cells_found;
+	nr_nfapi_lte_found_cell_t lte_found_cells[NR_NFAPI_MAX_LTE_CELLS_FOUND];
+} nr_nfapi_lte_cell_search_indication_t;
+
+#define NR_NFAPI_LTE_CELL_SEARCH_INDICATION_TAG 0x3007
+
+typedef struct {
+	uint16_t psc;
+	uint8_t rscp;
+	uint8_t ecno;
+	int16_t frequency_offset;
+} nr_nfapi_utran_found_cell_t;
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t number_of_utran_cells_found;
+	nr_nfapi_utran_found_cell_t utran_found_cells[NR_NFAPI_MAX_UTRAN_CELLS_FOUND];
+} nr_nfapi_utran_cell_search_indication_t;
+
+#define NR_NFAPI_UTRAN_CELL_SEARCH_INDICATION_TAG 0x3008
+
+typedef struct {
+	uint16_t arfcn;
+	uint8_t bsic;
+	uint8_t rxlev;
+	uint8_t rxqual;
+	int16_t frequency_offset;
+	uint32_t sfn_offset;
+} nr_nfapi_gsm_found_cell_t;
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t number_of_gsm_cells_found;
+	nr_nfapi_gsm_found_cell_t gsm_found_cells[NR_NFAPI_MAX_GSM_CELLS_FOUND];
+} nr_nfapi_geran_cell_search_indication_t;
+
+#define NR_NFAPI_GERAN_CELL_SEARCH_INDICATION_TAG 0x3009
+
+typedef struct {
+	uint16_t pci;
+	uint8_t rsrp;
+	uint8_t rsrq;
+	int16_t frequency_offset;
+} nr_nfapi_nb_iot_found_cell_t;
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t number_of_nb_iot_cells_found;
+	nr_nfapi_nb_iot_found_cell_t nb_iot_found_cells[NR_NFAPI_MAX_NB_IOT_CELLS_FOUND];
+} nr_nfapi_nb_iot_cell_search_indication_t;
+
+#define NR_NFAPI_NB_IOT_CELL_SEARCH_INDICATION_TAG 0x3022
+
+typedef nr_nfapi_opaqaue_data_t nr_nfapi_pnf_cell_search_state_t;
+
+#define NR_NFAPI_PNF_CELL_SEARCH_STATE_TAG 0x300A
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t earfcn;
+	uint16_t pci;
+	uint32_t timeout;
+} nr_nfapi_lte_broadcast_detect_request_t;
+
+#define NR_NFAPI_LTE_BROADCAST_DETECT_REQUEST_TAG 0x300B
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t uarfcn;
+	uint16_t psc;
+	uint32_t timeout;
+} nr_nfapi_utran_broadcast_detect_request_t;
+
+#define NR_NFAPI_UTRAN_BROADCAST_DETECT_REQUEST_TAG 0x300C
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t earfcn;
+	uint8_t ro_dl;
+	uint16_t pci;
+	uint32_t timeout;
+} nr_nfapi_nb_iot_broadcast_detect_request_t;
+
+#define NR_NFAPI_NB_IOT_BROADCAST_DETECT_REQUEST_TAG 0x3023
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t number_of_tx_antenna;
+	uint16_t mib_length;
+	uint8_t mib[NR_NFAPI_MAX_MIB_LENGTH];
+	uint32_t sfn_offset;
+} nr_nfapi_lte_broadcast_detect_indication_t;
+
+#define NR_NFAPI_LTE_BROADCAST_DETECT_INDICATION_TAG 0x300E
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t mib_length;
+	uint8_t mib[NR_NFAPI_MAX_MIB_LENGTH];
+	uint32_t sfn_offset;
+} nr_nfapi_utran_broadcast_detect_indication_t;
+
+#define NR_NFAPI_UTRAN_BROADCAST_DETECT_INDICATION_TAG 0x300F
+
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t number_of_tx_antenna;
+	uint16_t mib_length;
+	uint8_t mib[NR_NFAPI_MAX_MIB_LENGTH];
+	uint32_t sfn_offset;
+} nr_nfapi_nb_iot_broadcast_detect_indication_t;
+
+#define NR_NFAPI_NB_IOT_BROADCAST_DETECT_INDICATION_TAG 0x3024
+
+#define NR_NFAPI_PNF_CELL_BROADCAST_STATE_TAG 0x3010
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t earfcn;
+	uint16_t pci;
+	uint16_t downlink_channel_bandwidth;
+	uint8_t phich_configuration;
+	uint8_t number_of_tx_antenna;
+	uint8_t retry_count;
+	uint32_t timeout;
+} nr_nfapi_lte_system_information_schedule_request_t;
+
+#define NR_NFAPI_LTE_SYSTEM_INFORMATION_SCHEDULE_REQUEST_TAG 0x3011
+
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t earfcn;
+	uint8_t ro_dl;
+	uint16_t pci;
+	uint8_t scheduling_info_sib1_nb;
+	uint32_t timeout;
+} nr_nfapi_nb_iot_system_information_schedule_request_t;
+
+#define NR_NFAPI_NB_IOT_SYSTEM_INFORMATION_SCHEDULE_REQUEST_TAG 0x3025
+
+typedef nr_nfapi_opaqaue_data_t nr_nfapi_pnf_cell_broadcast_state_t;
+
+typedef struct {
+	uint8_t si_periodicity;
+	uint8_t si_index;
+} nr_nfapi_lte_system_information_si_periodicity_t;
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t earfcn;
+	uint16_t pci;
+	uint16_t downlink_channel_bandwidth;
+	uint8_t phich_configuration;
+	uint8_t number_of_tx_antenna;
+	uint8_t number_of_si_periodicity;
+	nr_nfapi_lte_system_information_si_periodicity_t si_periodicity[NR_NFAPI_MAX_SI_PERIODICITY];
+	uint8_t si_window_length;
+	uint32_t timeout;
+} nr_nfapi_lte_system_information_request_t;
+
+#define NR_NFAPI_LTE_SYSTEM_INFORMATION_REQUEST_TAG 0x3014
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t uarfcn;
+	uint16_t psc;
+	uint32_t timeout;
+} nr_nfapi_utran_system_information_request_t;
+
+#define NR_NFAPI_UTRAN_SYSTEM_INFORMATION_REQUEST_TAG 0x3015
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t arfcn;
+	uint8_t bsic;
+	uint32_t timeout;
+} nr_nfapi_geran_system_information_request_t;
+
+#define NR_NFAPI_GERAN_SYSTEM_INFORMATION_REQUEST_TAG 0x3016
+
+typedef struct {
+	uint8_t si_periodicity;
+	uint8_t si_repetition_pattern;
+	uint8_t si_tb_size;
+	uint8_t number_of_si_index;
+	uint8_t si_index[NR_NFAPI_MAX_SI_INDEX];
+} nr_nfapi_nb_iot_system_information_si_periodicity_t;
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t earfcn;
+	uint8_t ro_dl;
+	uint16_t pci;
+	uint8_t number_of_si_periodicity;
+	nr_nfapi_nb_iot_system_information_si_periodicity_t si_periodicity[NR_NFAPI_MAX_SI_PERIODICITY];
+	uint8_t si_window_length;
+	uint32_t timeout;
+} nr_nfapi_nb_iot_system_information_request_t;
+
+#define NR_NFAPI_NB_IOT_SYSTEM_INFORMATION_REQUEST_TAG 0x3027
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t sib_type;
+	uint16_t sib_length;
+	uint8_t sib[NR_NFAPI_MAX_SIB_LENGTH];
+} nr_nfapi_lte_system_information_indication_t;
+
+#define NR_NFAPI_LTE_SYSTEM_INFORMATION_INDICATION_TAG 0x3018
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t sib_length;
+	uint8_t sib[NR_NFAPI_MAX_SIB_LENGTH];
+} nr_nfapi_utran_system_information_indication_t;
+
+#define NR_NFAPI_UTRAN_SYSTEM_INFORMATION_INDICATION_TAG 0x3019
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint16_t si_length;
+	uint8_t si[NR_NFAPI_MAX_SI_LENGTH];
+} nr_nfapi_geran_system_information_indication_t;
+
+#define NR_NFAPI_GERAN_SYSTEM_INFORMATION_INDICATION_TAG 0x301a
+
+typedef struct {
+	nr_nfapi_tl_t tl;
+	uint8_t sib_type;
+	uint16_t sib_length;
+	uint8_t sib[NR_NFAPI_MAX_SIB_LENGTH];
+} nr_nfapi_nb_iot_system_information_indication_t;
+
+#define NR_NFAPI_NB_IOT_SYSTEM_INFORMATION_INDICATION_TAG 0x3026
+
+
+//
+// Top level NFAP messages
+//
+
+//
+// P7
+//
+
+typedef struct {
+	nr_nfapi_p7_message_header_t header;
+	uint16_t sfn_sf;
+	nr_nfapi_dl_config_request_body_t dl_config_request_body;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_dl_config_request_t;
+
+typedef struct {
+	nr_nfapi_p7_message_header_t header;
+	uint16_t sfn_sf;
+	nr_nfapi_ul_config_request_body_t ul_config_request_body;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_ul_config_request_t;
+
+typedef struct {
+	nr_nfapi_p7_message_header_t header;
+	uint16_t sfn_sf;
+	nr_nfapi_hi_dci0_request_body_t hi_dci0_request_body;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_hi_dci0_request_t;
+
+typedef struct {
+	nr_nfapi_p7_message_header_t header;
+	uint16_t sfn_sf;
+	nr_nfapi_tx_request_body_t tx_request_body;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_tx_request_t;
+
+typedef struct {
+	nr_nfapi_p7_message_header_t header;
+	uint16_t sfn_sf;
+} nr_nfapi_subframe_indication_t;
+
+typedef struct {
+	nr_nfapi_p7_message_header_t header;
+	uint16_t sfn_sf;
+	nr_nfapi_harq_indication_body_t harq_indication_body;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_harq_indication_t;
+
+typedef struct {
+	nr_nfapi_p7_message_header_t header;
+	uint16_t sfn_sf;
+	nr_nfapi_crc_indication_body_t crc_indication_body;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_crc_indication_t;
+
+typedef struct {
+	nr_nfapi_p7_message_header_t header;
+	uint16_t sfn_sf;
+	nr_nfapi_sr_indication_body_t sr_indication_body;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_sr_indication_t;
+
+typedef struct {
+	nr_nfapi_p7_message_header_t header;
+	uint16_t sfn_sf;
+	nr_nfapi_cqi_indication_body_t cqi_indication_body;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_cqi_indication_t;
+
+typedef struct {
+	nr_nfapi_p7_message_header_t header;
+	uint16_t sfn_sf;
+	nr_nfapi_rach_indication_body_t rach_indication_body;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_rach_indication_t;
+
+typedef struct {
+	nr_nfapi_p7_message_header_t header;
+	uint16_t sfn_sf;
+	nr_nfapi_srs_indication_body_t srs_indication_body;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_srs_indication_t;
+
+typedef struct {
+	nr_nfapi_p7_message_header_t header;
+	uint16_t sfn_sf;
+	nr_nfapi_rx_indication_body_t rx_indication_body;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_rx_indication_t;
+
+typedef struct {
+	nr_nfapi_p7_message_header_t header;
+	uint16_t sfn_sf;
+	nr_nfapi_nb_harq_indication_body_t nb_harq_indication_body;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_nb_harq_indication_t;
+
+typedef struct {
+	nr_nfapi_p7_message_header_t header;
+	uint16_t sfn_sf;
+	nr_nfapi_nrach_indication_body_t nrach_indication_body;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_nrach_indication_t;
+
+typedef struct {
+	nr_nfapi_p7_message_header_t header;
+	uint16_t sfn_sf;
+	nr_nfapi_lbt_dl_config_request_body_t lbt_dl_config_request_body;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_lbt_dl_config_request_t;
+
+typedef struct {
+	nr_nfapi_p7_message_header_t header;
+	uint16_t sfn_sf;
+	nr_nfapi_lbt_dl_indication_body_t lbt_dl_indication_body;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_lbt_dl_indication_t;
+
+
+typedef struct {
+	nr_nfapi_p7_message_header_t header;
+	uint8_t message_id;
+	uint8_t error_code;
+	union {
+		nr_nfapi_error_indication_msg_invalid_state	msg_invalid_state;
+		nr_nfapi_error_indication_msg_bch_missing		msg_bch_missing;
+		nr_nfapi_error_indication_sfn_out_of_sync		sfn_out_of_sync;
+		nr_nfapi_error_indication_msg_pdu_err			msg_pdu_err;
+		nr_nfapi_error_indication_msg_invalid_sfn		msg_invalid_sfn;
+		nr_nfapi_error_indication_msg_hi_err			msg_hi_err;
+		nr_nfapi_error_indication_msg_tx_err			msg_tx_err;
+	};
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_error_indication_t;
+
+// 
+// P4 Messages
+// 
+
+typedef struct {
+	nr_nfapi_p4_p5_message_header_t header;
+	uint8_t rat_type;
+	union {
+		nr_nfapi_lte_rssi_request_t					lte_rssi_request;
+		nr_nfapi_utran_rssi_request_t					utran_rssi_request;
+		nr_nfapi_geran_rssi_request_t					geran_rssi_request;
+		nr_nfapi_nb_iot_rssi_request_t					nb_iot_rssi_request;
+	};
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_rssi_request_t;
+
+typedef struct {
+	nr_nfapi_p4_p5_message_header_t header;
+	uint32_t error_code;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_rssi_response_t;
+
+typedef struct {
+	nr_nfapi_p4_p5_message_header_t header;
+	uint32_t error_code;
+	nr_nfapi_rssi_indication_body_t rssi_indication_body;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_rssi_indication_t;
+
+typedef struct {
+	nr_nfapi_p4_p5_message_header_t header;
+	uint8_t rat_type;
+	union {
+		nr_nfapi_lte_cell_search_request_t				lte_cell_search_request;
+		nr_nfapi_utran_cell_search_request_t			utran_cell_search_request;
+		nr_nfapi_geran_cell_search_request_t			geran_cell_search_request;
+		nr_nfapi_nb_iot_cell_search_request_t			nb_iot_cell_search_request;
+	};
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_cell_search_request_t;
+
+typedef struct {
+	nr_nfapi_p4_p5_message_header_t header;
+	uint32_t error_code;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_cell_search_response_t;
+
+typedef struct {
+	nr_nfapi_p4_p5_message_header_t header;
+	uint32_t error_code;
+	nr_nfapi_lte_cell_search_indication_t lte_cell_search_indication;
+	nr_nfapi_utran_cell_search_indication_t utran_cell_search_indication;
+	nr_nfapi_geran_cell_search_indication_t geran_cell_search_indication;
+	nr_nfapi_pnf_cell_search_state_t pnf_cell_search_state;
+	nr_nfapi_nb_iot_cell_search_indication_t nb_iot_cell_search_indication;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_cell_search_indication_t;
+
+
+typedef struct {
+	nr_nfapi_p4_p5_message_header_t header;
+	uint8_t rat_type;
+	union {
+		nr_nfapi_lte_broadcast_detect_request_t		lte_broadcast_detect_request;
+		nr_nfapi_utran_broadcast_detect_request_t		utran_broadcast_detect_request;
+		nr_nfapi_nb_iot_broadcast_detect_request_t		nb_iot_broadcast_detect_request;
+	};
+	nr_nfapi_pnf_cell_search_state_t pnf_cell_search_state;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_broadcast_detect_request_t;
+
+typedef struct {
+	nr_nfapi_p4_p5_message_header_t header;
+	uint32_t error_code;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_broadcast_detect_response_t;
+
+typedef struct {
+	nr_nfapi_p4_p5_message_header_t header;
+	uint32_t error_code;
+	nr_nfapi_lte_broadcast_detect_indication_t lte_broadcast_detect_indication;
+	nr_nfapi_utran_broadcast_detect_indication_t utran_broadcast_detect_indication;
+	nr_nfapi_nb_iot_broadcast_detect_indication_t nb_iot_broadcast_detect_indication;
+	nr_nfapi_pnf_cell_broadcast_state_t pnf_cell_broadcast_state;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_broadcast_detect_indication_t;
+
+typedef struct {
+	nr_nfapi_p4_p5_message_header_t header;
+	uint8_t rat_type;
+	union {
+		nr_nfapi_lte_system_information_schedule_request_t lte_system_information_schedule_request;
+		nr_nfapi_nb_iot_system_information_schedule_request_t nb_iot_system_information_schedule_request;
+	};
+	nr_nfapi_pnf_cell_broadcast_state_t pnf_cell_broadcast_state;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_system_information_schedule_request_t;
+
+typedef struct {
+	nr_nfapi_p4_p5_message_header_t header;
+	uint32_t error_code;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_system_information_schedule_response_t;
+
+typedef struct { 
+	nr_nfapi_p4_p5_message_header_t header;
+	uint32_t error_code;
+	nr_nfapi_lte_system_information_indication_t lte_system_information_indication;
+	nr_nfapi_nb_iot_system_information_indication_t nb_iot_system_information_indication;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_system_information_schedule_indication_t;
+
+typedef struct {
+	nr_nfapi_p4_p5_message_header_t header;
+	uint8_t rat_type;
+	union {
+		nr_nfapi_lte_system_information_request_t lte_system_information_request;
+		nr_nfapi_utran_system_information_request_t utran_system_information_request;
+		nr_nfapi_geran_system_information_request_t geran_system_information_request;
+		nr_nfapi_nb_iot_system_information_request_t nb_iot_system_information_request;
+	};
+	nr_nfapi_pnf_cell_broadcast_state_t pnf_cell_broadcast_state;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_system_information_request_t;
+
+typedef struct {
+	nr_nfapi_p4_p5_message_header_t header;
+	uint32_t error_code;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_system_information_response_t;
+
+typedef struct {
+	nr_nfapi_p4_p5_message_header_t header;
+	uint32_t error_code;
+	nr_nfapi_lte_system_information_indication_t lte_system_information_indication;
+	nr_nfapi_utran_system_information_indication_t utran_system_information_indication;
+	nr_nfapi_geran_system_information_indication_t geran_system_information_indication;
+	nr_nfapi_nb_iot_system_information_indication_t nb_iot_system_information_indication;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_system_information_indication_t;
+
+typedef struct {
+	nr_nfapi_p4_p5_message_header_t header;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_nmm_stop_request_t;
+
+typedef struct {
+	nr_nfapi_p4_p5_message_header_t header;
+	uint32_t error_code;
+	nr_nfapi_vendor_extension_tlv_t vendor_extension;
+} nr_nfapi_nmm_stop_response_t;
+
+//
+// Configuration options for the encode decode functions
+//
+
+/*! Configuration options for the p7 pack unpack functions
+ *
+ */
+typedef struct nr_nfapi_p7_codec_config {
+
+	/*! Optional call back to allow the user to define the memory allocator. 
+	 *  \param size The size of the memory to allocate
+	 *  \return a pointer to a valid memory block or 0 if it has failed.
+	 *
+	 * If not set the nfapi unpack functions will use malloc
+	 */
+	void* (*allocate)(size_t size);
+
+	/*! Optional call back to allow the user to define the memory deallocator. 
+	 *  \param ptr A poiner to a memory block allocated by the allocate callback
+	 * 
+	 *	If not set the client should use free
+	 */
+	void (*deallocate)(void* ptr);
+
+	/*! Optional call back function to handle unpacking vendor extension tlv.
+	 *  \param tl A pointer to a decoded tag length structure
+	 *  \param ppReadPackedMsg A handle to the read buffer. 
+	 *  \param end The end of the read buffer
+	 *  \param ve A handle to a vendor extention structure that the call back should allocate if the structure can be decoded
+	 *  \param config A pointer to the p7 codec configuration
+	 *  \return return 0 if packed successfully, -1 if failed.
+	 *
+	 *  If not set the tlv will be skipped
+	 *
+	 *  Client should use the help methods in nfapi.h to decode the vendor extention.
+	 * 
+	 *  \todo Add code example
+	 */
+	int (*unpack_vendor_extension_tlv)(nr_nfapi_tl_t* tl, uint8_t **ppReadPackedMsg, uint8_t *end, void** ve, struct nr_nfapi_p7_codec_config* config);
+
+	/*! Optional call back function to handle packing vendor extension tlv. 
+	 *  \param ve A pointer to a vendor extention structure.
+	 *  \param ppWritePackedMsg A handle to the write buffer
+	 *  \param end The end of the write buffer. The callee should make sure not to write beyond the end
+	 *  \param config A pointer to the p7 codec configuration
+	 *  \return return 0 if packed successfully, -1 if failed.
+	 * 
+	 *  If not set the the tlv will be skipped
+	 * 
+	 *  Client should use the help methods in nfapi.h to encode the vendor extention
+	 * 
+	 *  \todo Add code example
+	 */
+	int (*pack_vendor_extension_tlv)(void* ve, uint8_t **ppWritePackedMsg, uint8_t *end, struct nr_nfapi_p7_codec_config* config);
+
+	/*! Optional call back function to handle unpacking vendor extension messages. 
+	 *  \param header A pointer to a decode P7 message header for the vendor extention message
+	 *  \param ppReadPackedMsg A handle to the encoded data buffer
+	 *  \param end A pointer to the end of the encoded data buffer
+	 *  \param config  A pointer to the p7 codec configuration
+	 *  \return 0 if unpacked successfully, -1 if failed
+	 *
+	 *  If not set the message will be ignored
+	 *
+	 *  If the message if is unknown the function should return -1
+	 */
+	int (*unpack_p7_vendor_extension)(nr_nfapi_p7_message_header_t* header, uint8_t **ppReadPackedMsg, uint8_t *end, struct nr_nfapi_p7_codec_config* config);
+
+	/*! Optional call back function to handle packing vendor extension messages. 
+	 *  \param header A poiner to a P7 message structure for the venfor extention message
+	 *  \param ppWritePackedmsg A handle to the buffer to write the encoded message into
+	 *  \param end A pointer to the end of the buffer
+	 *  \param cofig A pointer to the p7 codec configuration
+	 *  \return 0 if packed successfully, -1 if failed
+	 * 
+	 * If not set the the message will be ingored
+	 *	 
+	 *  If the message if is unknown the function should return -1
+	 */
+	int (*pack_p7_vendor_extension)(nr_nfapi_p7_message_header_t* header, uint8_t **ppWritePackedmsg, uint8_t *end, struct nr_nfapi_p7_codec_config* config);
+
+	/*! Optional user data that will be passed back with callbacks
+	 */
+	void* user_data;
+
+} nr_nfapi_p7_codec_config_t;
+
+/*! Configuration options for the p4 & p5 pack unpack functions
+ *
+ */
+typedef struct nr_nfapi_p4_p5_codec_config {
+
+	/*! Optional call back to allow the user to define the memory allocator.
+     *  \param size The size of the memory to allocate
+	 *  \return a pointer to a valid memory block or 0 if it has failed.
+	 *
+	 *  If not set the nfapi unpack functions will use malloc
+	 */
+	void* (*allocate)(size_t size);
+
+	/*! Optional call back to allow the user to define the memory deallocator. 
+	 *  \param ptr A poiner to a memory block allocated by the allocate callback
+	 *
+	 *  If not set free will be used
+	 */
+	void (*deallocate)(void* ptr);
+
+	/*! Optional call back function to handle unpacking vendor extension tlv.
+	 *  \param tl A pointer to a decoded tag length structure
+	 *  \param ppReadPackedMsg A handle to the data buffer to decode
+	 *  \param end A pointer to the end of the buffer
+	 *  \param ve A handle to a vendor extention structure that will be allocated by this callback
+	 *  \param config A pointer to the P4/P5 codec configuration
+	 *  \return 0 if unpacked successfully, -1 if failed
+	 *  
+	 *  If not set the tlv will be skipped
+	 */
+	int (*unpack_vendor_extension_tlv)(nr_nfapi_tl_t* tl, uint8_t **ppReadPackedMsg, uint8_t *end, void** ve, struct nr_nfapi_p4_p5_codec_config* config);
+
+	/*! Optional call back function to handle packing vendor extension tlv. 
+	 *  \param ve
+	 *  \param ppWritePackedMsg A handle to the data buffer pack the tlv into
+	 *  \param end A pointer to the end of the buffer
+	 *  \param config A pointer to the P4/P5 codec configuration
+	 *  \return 0 if packed successfully, -1 if failed
+	 *
+	 *  If not set the the tlv will be skipped
+	 */
+	int (*pack_vendor_extension_tlv)(void* ve, uint8_t **ppWritePackedMsg, uint8_t *end, struct nr_nfapi_p4_p5_codec_config* config);
+
+	/*! Optional call back function to handle unpacking vendor extension messages. 
+	 *  \param header A pointer to a decode P4/P5 message header
+	 *  \param ppReadPackgedMsg A handle to the data buffer to decode
+	 *  \param end A pointer to the end of the buffer
+	 *  \param config A pointer to the P4/P5 codec configuration
+	 *  \return 0 if packed successfully, -1 if failed
+	 *
+	 * If not set the message will be ignored
+	 */
+	int (*unpack_p4_p5_vendor_extension)(nr_nfapi_p4_p5_message_header_t* header, uint8_t **ppReadPackedMsg, uint8_t *end, struct nr_nfapi_p4_p5_codec_config* config);
+
+	/*! Optional call back function to handle packing vendor extension messages.
+	 *  \param header A pointer to the P4/P5 message header to be encoded
+	 *  \param ppWritePackedMsg A handle to the data buffer pack the message into
+	 *  \param end A pointer to the end of the buffer
+	 *  \param config A pointer to the P4/P5 codec configuration
+	 *  \return 0 if packed successfully, -1 if failed
+	 *  
+	 *  If not set the the message will be ingored
+	 */
+	int (*pack_p4_p5_vendor_extension)(nr_nfapi_p4_p5_message_header_t* header, uint8_t **ppwritepackedmsg, uint8_t *end, struct nr_nfapi_p4_p5_codec_config* config);
+
+	/*! Optional user data that will be passed back with callbacks
+	 */
+	void* user_data;
+
+} nr_nfapi_p4_p5_codec_config_t;
+
+//
+// Functions
+// 
+
+/*! \brief Encodes an NFAPI P4 message to a buffer
+ *  \param pMessageBuf A pointer to a nfapi p4 message structure
+ *  \param messageBufLen The size of the p4 message structure
+ *  \param pPackedBuf A pointer to the buffer that the p4 message will be packed into
+ *  \param packedBufLen The size of the buffer 
+ *  \param config A pointer to the nfapi configuration structure
+ *  \return 0 means success, -1 means failure.
+ *
+ * The function will encode a nFAPI P4 message structure pointed to be pMessageBuf into a byte stream pointed to by pPackedBuf.
+ * 
+ */
+int nr_nfapi_p4_message_pack(void *pMessageBuf, uint32_t messageBufLen, void *pPackedBuf, uint32_t packedBufLen, nr_nfapi_p4_p5_codec_config_t* config);
+
+/*! \brief Decodes a NFAPI P4 message header
+ *  \param pMessageBuf A pointer to an encoded P4 message header
+ *  \param messageBufLen The size of the encoded P4 message header
+ *  \param pUnpackedBuf A pointer to the nr_nfapi_message_header
+ *  \param unpackedBufLen The size of nr_nfapi_message_header structure.
+ *  \param config A pointer to the nfapi configuration structure
+ *  \return 0 means success, -1 means failure.
+ *
+ * The function will decode a byte stream pointed to by pMessageBuf into a nr_nfapi_p4_p5_message_header structure pointer to by pUnpackedBuf
+ */
+int nr_nfapi_p4_message_header_unpack(void *pMessageBuf, uint32_t messageBufLen, void *pUnpackedBuf, uint32_t unpackedBufLen, nr_nfapi_p4_p5_codec_config_t* config);
+
+/*! \brief Decodes a NFAPI P4 message
+ *  \param pMessageBuf A pointer to an encoded P4 message
+ *  \param messageBufLen The size of the encoded P4 message
+ *  \param pUnpackedBuf A pointer to the nr_nfapi_message_header
+ *  \param unpackedBufLen The size of nr_nfapi_message_header structure.
+ *  \param config A pointer to the nfapi configuration structure
+ *  \return 0 means success, -1 means failure.
+ *
+ * The function will decode a byte stream pointed to by pMessageBuf into a nfapi p4 message structure pointer to by pUnpackedBuf 
+ */
+int nr_nfapi_p4_message_unpack(void *pMessageBuf, uint32_t messageBufLen, void *pUnpackedBuf, uint32_t unpackedBufLen, nr_nfapi_p4_p5_codec_config_t* config);
+
+/*! \brief Encodes an NFAPI P5 message to a buffer
+ *  \param pMessageBuf A pointer to a nfapi p5 message structure
+ *  \param messageBufLen The size of the p5 message structure
+ *  \param pPackedBuf A pointer to the buffer that the p5 message will be packed into
+ *  \param packedBufLen The size of the buffer 
+ *  \param config A pointer to the nfapi configuration structure
+ *  \return 0 means success, -1 means failure.
+ *
+ * The function will encode a nFAPI P5 message structure pointed to be pMessageBuf into a byte stream pointed to by pPackedBuf.
+ * 
+ */
+int nr_nfapi_p5_message_pack(void *pMessageBuf, uint32_t messageBufLen, void *pPackedBuf, uint32_t packedBufLen, nr_nfapi_p4_p5_codec_config_t* config);
+
+/*! \brief Decodes an NFAPI P5 message header
+ *  \param pMessageBuf A pointer to an encoded P5 message header
+ *  \param messageBufLen The size of the encoded P5 message header
+ *  \param pUnpackedBuf A pointer to the nr_nfapi_message_header
+ *  \param unpackedBufLen The size of nr_nfapi_message_header structure.
+ *  \param config A pointer to the nfapi configuration structure
+ *  \return 0 means success, -1 means failure.
+ *
+ * The function will decode a byte stream pointed to by pMessageBuf into a nr_nfapi_p4_p5_message_header structure pointer to by pUnpackedBuf
+ */
+int nr_nfapi_p5_message_header_unpack(void *pMessageBuf, uint32_t messageBufLen, void *pUnpackedBuf, uint32_t unpackedBufLen, nr_nfapi_p4_p5_codec_config_t* config);
+
+/*! \brief Decodes a NFAPI P5 message
+ *  \param pMessageBuf A pointer to an encoded P5 message
+ *  \param messageBufLen The size of the encoded P5 message
+ *  \param pUnpackedBuf A pointer to the nr_nfapi_message_header
+ *  \param unpackedBufLen The size of nr_nfapi_message_header structure.
+ *  \param config A pointer to the nfapi configuration structure
+ *  \return 0 means success, -1 means failure.
+ *
+ * The function will decode a byte stream pointed to by pMessageBuf into a nfapi p5 message structure pointer to by pUnpackedBuf 
+ */
+int nr_nfapi_p5_message_unpack(void *pMessageBuf, uint32_t messageBufLen, void *pUnpackedBuf, uint32_t unpackedBufLen, nr_nfapi_p4_p5_codec_config_t* config);
+
+/*! \brief Encodes an NFAPI P7 message to a buffer
+ *  \param pMessageBuf A pointer to a nfapi p7 message structure
+ *  \param pPackedBuf A pointer to the buffer that the p7 message will be packed into
+ *  \param packedBufLen The size of the buffer 
+ *  \param config A pointer to the nfapi configuration structure
+ *  \return 0 means success, -1 means failure.
+ *
+ * The function will encode a nFAPI P7 message structure pointed to be pMessageBuf into a byte stream pointed to by pPackedBuf.
+ * 
+ */
+int nr_nfapi_p7_message_pack(void *pMessageBuf, void *pPackedBuf, uint32_t packedBufLen, nr_nfapi_p7_codec_config_t* config);
+
+/*! \brief Decodes an NFAPI P7 message header
+ *  \param pMessageBuf A pointer to an encoded P7 message header
+ *  \param messageBufLen The size of the encoded P7 message header
+ *  \param pUnpackedBuf A pointer to the nr_nfapi_message_header
+ *  \param unpackedBufLen The size of nr_nfapi_message_header structure.
+ *  \param config A pointer to the nfapi configuration structure
+ *  \return 0 means success, -1 means failure.
+ *
+ * The function will decode a byte stream pointed to by pMessageBuf into a nr_nfapi_p7_message_header structure pointer to by pUnpackedBuf
+
+ */
+int nr_nfapi_p7_message_header_unpack(void *pMessageBuf, uint32_t messageBufLen, void *pUnpackedBuf, uint32_t unpackedBufLen, nr_nfapi_p7_codec_config_t* config);
+
+/*! \brief Decodes a NFAPI P7 message
+ *  \param pMessageBuf A pointer to an encoded P7 message
+ *  \param messageBufLen The size of the encoded P7 message
+ *  \param pUnpackedBuf A pointer to the nr_nfapi_message_header
+ *  \param unpackedBufLen The size of nr_nfapi_message_header structure.
+ *  \param config A pointer to the nfapi configuration structure
+ *  \return 0 means success, -1 means failure.
+ *
+ * The function will decode a byte stream pointed to by pMessageBuf into a nfapi p7 message structure pointer to by pUnpackedBuf 
+ */
+int nr_nfapi_p7_message_unpack(void *pMessageBuf, uint32_t messageBufLen, void *pUnpackedBuf, uint32_t unpackedBufLen, nr_nfapi_p7_codec_config_t* config);
+
+/*! \brief Calculates the checksum of a  message
+ *
+ *  \param buffer Pointer to the packed message
+ *  \param len The length of the message
+ *  \return The checksum. If there is an error the function with return -1
+ */
+uint32_t nr_nfapi_p7_calculate_checksum(uint8_t* buffer, uint32_t len);
+
+/*! \brief Calculates & updates the checksum in the message
+ *
+ *  \param buffer Pointer to the packed message
+ *  \param len The length of the message
+  *  \return 0 means success, -1 means failure.
+ */
+int nr_nfapi_p7_update_checksum(uint8_t* buffer, uint32_t len);
+
+/*! \brief Updates the transmition time stamp in the p7 message header
+ *
+ *  \param buffer Pointer to the packed message
+ *  \param timestamp The time stamp value
+  *  \return 0 means success, -1 means failure.
+ */
+int nr_nfapi_p7_update_transmit_timestamp(uint8_t* buffer, uint32_t timestamp);
+
+#endif /* _NFAPI_INTERFACE_H_ */
diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation_avx2.c b/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation_avx2.c
deleted file mode 100644
index 588adfbc55..0000000000
--- a/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation_avx2.c
+++ /dev/null
@@ -1,4034 +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
- */
-
-/*! \file PHY/LTE_TRANSPORT/dlsch_llr_computation.c
- * \brief Top-level routines for LLR computation of the PDSCH physical channel from 36-211, V8.6 2009-03
- * \author R. Knopp, F. Kaltenberger,A. Bhamri, S. Aubert, S. Wagner, X Jiang
- * \date 2011
- * \version 0.1
- * \company Eurecom
- * \email: knopp@eurecom.fr,florian.kaltenberger@eurecom.fr,ankit.bhamri@eurecom.fr,sebastien.aubert@eurecom.fr, sebastian.wagner@eurecom.fr
- * \note
- * \warning
- */
-
-#include "PHY/defs.h"
-#include "PHY/TOOLS/defs.h"
-#include "PHY/extern.h"
-#include "defs.h"
-#include "extern.h"
-#include "PHY/sse_intrin.h"
-
-int16_t ones256[16] __attribute__ ((aligned(32))) = {0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff};
-
-static __m256i rho_rpi __attribute__ ((aligned(32)));
-static __m256i rho_rmi __attribute__ ((aligned(32)));
-static __m256i rho_rpi_1_1 __attribute__ ((aligned(32)));
-static __m256i rho_rpi_1_3 __attribute__ ((aligned(32)));
-static __m256i rho_rpi_1_5 __attribute__ ((aligned(32)));
-static __m256i rho_rpi_1_7 __attribute__ ((aligned(32)));
-static __m256i rho_rpi_3_1 __attribute__ ((aligned(32)));
-static __m256i rho_rpi_3_3 __attribute__ ((aligned(32)));
-static __m256i rho_rpi_3_5 __attribute__ ((aligned(32)));
-static __m256i rho_rpi_3_7 __attribute__ ((aligned(32)));
-static __m256i rho_rpi_5_1 __attribute__ ((aligned(32)));
-static __m256i rho_rpi_5_3 __attribute__ ((aligned(32)));
-static __m256i rho_rpi_5_5 __attribute__ ((aligned(32)));
-static __m256i rho_rpi_5_7 __attribute__ ((aligned(32)));
-static __m256i rho_rpi_7_1 __attribute__ ((aligned(32)));
-static __m256i rho_rpi_7_3 __attribute__ ((aligned(32)));
-static __m256i rho_rpi_7_5 __attribute__ ((aligned(32)));
-static __m256i rho_rpi_7_7 __attribute__ ((aligned(32)));
-static __m256i rho_rmi_1_1 __attribute__ ((aligned(32)));
-static __m256i rho_rmi_1_3 __attribute__ ((aligned(32)));
-static __m256i rho_rmi_1_5 __attribute__ ((aligned(32)));
-static __m256i rho_rmi_1_7 __attribute__ ((aligned(32)));
-static __m256i rho_rmi_3_1 __attribute__ ((aligned(32)));
-static __m256i rho_rmi_3_3 __attribute__ ((aligned(32)));
-static __m256i rho_rmi_3_5 __attribute__ ((aligned(32)));
-static __m256i rho_rmi_3_7 __attribute__ ((aligned(32)));
-static __m256i rho_rmi_5_1 __attribute__ ((aligned(32)));
-static __m256i rho_rmi_5_3 __attribute__ ((aligned(32)));
-static __m256i rho_rmi_5_5 __attribute__ ((aligned(32)));
-static __m256i rho_rmi_5_7 __attribute__ ((aligned(32)));
-static __m256i rho_rmi_7_1 __attribute__ ((aligned(32)));
-static __m256i rho_rmi_7_3 __attribute__ ((aligned(32)));
-static __m256i rho_rmi_7_5 __attribute__ ((aligned(32)));
-static __m256i rho_rmi_7_7 __attribute__ ((aligned(32)));
-
-static __m256i psi_r_m7_m7 __attribute__ ((aligned(32)));
-static __m256i psi_r_m7_m5 __attribute__ ((aligned(32)));
-static __m256i psi_r_m7_m3 __attribute__ ((aligned(32)));
-static __m256i psi_r_m7_m1 __attribute__ ((aligned(32)));
-static __m256i psi_r_m7_p1 __attribute__ ((aligned(32)));
-static __m256i psi_r_m7_p3 __attribute__ ((aligned(32)));
-static __m256i psi_r_m7_p5 __attribute__ ((aligned(32)));
-static __m256i psi_r_m7_p7 __attribute__ ((aligned(32)));
-static __m256i psi_r_m5_m7 __attribute__ ((aligned(32)));
-static __m256i psi_r_m5_m5 __attribute__ ((aligned(32)));
-static __m256i psi_r_m5_m3 __attribute__ ((aligned(32)));
-static __m256i psi_r_m5_m1 __attribute__ ((aligned(32)));
-static __m256i psi_r_m5_p1 __attribute__ ((aligned(32)));
-static __m256i psi_r_m5_p3 __attribute__ ((aligned(32)));
-static __m256i psi_r_m5_p5 __attribute__ ((aligned(32)));
-static __m256i psi_r_m5_p7 __attribute__ ((aligned(32)));
-static __m256i psi_r_m3_m7 __attribute__ ((aligned(32)));
-static __m256i psi_r_m3_m5 __attribute__ ((aligned(32)));
-static __m256i psi_r_m3_m3 __attribute__ ((aligned(32)));
-static __m256i psi_r_m3_m1 __attribute__ ((aligned(32)));
-static __m256i psi_r_m3_p1 __attribute__ ((aligned(32)));
-static __m256i psi_r_m3_p3 __attribute__ ((aligned(32)));
-static __m256i psi_r_m3_p5 __attribute__ ((aligned(32)));
-static __m256i psi_r_m3_p7 __attribute__ ((aligned(32)));
-static __m256i psi_r_m1_m7 __attribute__ ((aligned(32)));
-static __m256i psi_r_m1_m5 __attribute__ ((aligned(32)));
-static __m256i psi_r_m1_m3 __attribute__ ((aligned(32)));
-static __m256i psi_r_m1_m1 __attribute__ ((aligned(32)));
-static __m256i psi_r_m1_p1 __attribute__ ((aligned(32)));
-static __m256i psi_r_m1_p3 __attribute__ ((aligned(32)));
-static __m256i psi_r_m1_p5 __attribute__ ((aligned(32)));
-static __m256i psi_r_m1_p7 __attribute__ ((aligned(32)));
-static __m256i psi_r_p1_m7 __attribute__ ((aligned(32)));
-static __m256i psi_r_p1_m5 __attribute__ ((aligned(32)));
-static __m256i psi_r_p1_m3 __attribute__ ((aligned(32)));
-static __m256i psi_r_p1_m1 __attribute__ ((aligned(32)));
-static __m256i psi_r_p1_p1 __attribute__ ((aligned(32)));
-static __m256i psi_r_p1_p3 __attribute__ ((aligned(32)));
-static __m256i psi_r_p1_p5 __attribute__ ((aligned(32)));
-static __m256i psi_r_p1_p7 __attribute__ ((aligned(32)));
-static __m256i psi_r_p3_m7 __attribute__ ((aligned(32)));
-static __m256i psi_r_p3_m5 __attribute__ ((aligned(32)));
-static __m256i psi_r_p3_m3 __attribute__ ((aligned(32)));
-static __m256i psi_r_p3_m1 __attribute__ ((aligned(32)));
-static __m256i psi_r_p3_p1 __attribute__ ((aligned(32)));
-static __m256i psi_r_p3_p3 __attribute__ ((aligned(32)));
-static __m256i psi_r_p3_p5 __attribute__ ((aligned(32)));
-static __m256i psi_r_p3_p7 __attribute__ ((aligned(32)));
-static __m256i psi_r_p5_m7 __attribute__ ((aligned(32)));
-static __m256i psi_r_p5_m5 __attribute__ ((aligned(32)));
-static __m256i psi_r_p5_m3 __attribute__ ((aligned(32)));
-static __m256i psi_r_p5_m1 __attribute__ ((aligned(32)));
-static __m256i psi_r_p5_p1 __attribute__ ((aligned(32)));
-static __m256i psi_r_p5_p3 __attribute__ ((aligned(32)));
-static __m256i psi_r_p5_p5 __attribute__ ((aligned(32)));
-static __m256i psi_r_p5_p7 __attribute__ ((aligned(32)));
-static __m256i psi_r_p7_m7 __attribute__ ((aligned(32)));
-static __m256i psi_r_p7_m5 __attribute__ ((aligned(32)));
-static __m256i psi_r_p7_m3 __attribute__ ((aligned(32)));
-static __m256i psi_r_p7_m1 __attribute__ ((aligned(32)));
-static __m256i psi_r_p7_p1 __attribute__ ((aligned(32)));
-static __m256i psi_r_p7_p3 __attribute__ ((aligned(32)));
-static __m256i psi_r_p7_p5 __attribute__ ((aligned(32)));
-static __m256i psi_r_p7_p7 __attribute__ ((aligned(32)));
-
-static __m256i psi_i_m7_m7 __attribute__ ((aligned(32)));
-static __m256i psi_i_m7_m5 __attribute__ ((aligned(32)));
-static __m256i psi_i_m7_m3 __attribute__ ((aligned(32)));
-static __m256i psi_i_m7_m1 __attribute__ ((aligned(32)));
-static __m256i psi_i_m7_p1 __attribute__ ((aligned(32)));
-static __m256i psi_i_m7_p3 __attribute__ ((aligned(32)));
-static __m256i psi_i_m7_p5 __attribute__ ((aligned(32)));
-static __m256i psi_i_m7_p7 __attribute__ ((aligned(32)));
-static __m256i psi_i_m5_m7 __attribute__ ((aligned(32)));
-static __m256i psi_i_m5_m5 __attribute__ ((aligned(32)));
-static __m256i psi_i_m5_m3 __attribute__ ((aligned(32)));
-static __m256i psi_i_m5_m1 __attribute__ ((aligned(32)));
-static __m256i psi_i_m5_p1 __attribute__ ((aligned(32)));
-static __m256i psi_i_m5_p3 __attribute__ ((aligned(32)));
-static __m256i psi_i_m5_p5 __attribute__ ((aligned(32)));
-static __m256i psi_i_m5_p7 __attribute__ ((aligned(32)));
-static __m256i psi_i_m3_m7 __attribute__ ((aligned(32)));
-static __m256i psi_i_m3_m5 __attribute__ ((aligned(32)));
-static __m256i psi_i_m3_m3 __attribute__ ((aligned(32)));
-static __m256i psi_i_m3_m1 __attribute__ ((aligned(32)));
-static __m256i psi_i_m3_p1 __attribute__ ((aligned(32)));
-static __m256i psi_i_m3_p3 __attribute__ ((aligned(32)));
-static __m256i psi_i_m3_p5 __attribute__ ((aligned(32)));
-static __m256i psi_i_m3_p7 __attribute__ ((aligned(32)));
-static __m256i psi_i_m1_m7 __attribute__ ((aligned(32)));
-static __m256i psi_i_m1_m5 __attribute__ ((aligned(32)));
-static __m256i psi_i_m1_m3 __attribute__ ((aligned(32)));
-static __m256i psi_i_m1_m1 __attribute__ ((aligned(32)));
-static __m256i psi_i_m1_p1 __attribute__ ((aligned(32)));
-static __m256i psi_i_m1_p3 __attribute__ ((aligned(32)));
-static __m256i psi_i_m1_p5 __attribute__ ((aligned(32)));
-static __m256i psi_i_m1_p7 __attribute__ ((aligned(32)));
-static __m256i psi_i_p1_m7 __attribute__ ((aligned(32)));
-static __m256i psi_i_p1_m5 __attribute__ ((aligned(32)));
-static __m256i psi_i_p1_m3 __attribute__ ((aligned(32)));
-static __m256i psi_i_p1_m1 __attribute__ ((aligned(32)));
-static __m256i psi_i_p1_p1 __attribute__ ((aligned(32)));
-static __m256i psi_i_p1_p3 __attribute__ ((aligned(32)));
-static __m256i psi_i_p1_p5 __attribute__ ((aligned(32)));
-static __m256i psi_i_p1_p7 __attribute__ ((aligned(32)));
-static __m256i psi_i_p3_m7 __attribute__ ((aligned(32)));
-static __m256i psi_i_p3_m5 __attribute__ ((aligned(32)));
-static __m256i psi_i_p3_m3 __attribute__ ((aligned(32)));
-static __m256i psi_i_p3_m1 __attribute__ ((aligned(32)));
-static __m256i psi_i_p3_p1 __attribute__ ((aligned(32)));
-static __m256i psi_i_p3_p3 __attribute__ ((aligned(32)));
-static __m256i psi_i_p3_p5 __attribute__ ((aligned(32)));
-static __m256i psi_i_p3_p7 __attribute__ ((aligned(32)));
-static __m256i psi_i_p5_m7 __attribute__ ((aligned(32)));
-static __m256i psi_i_p5_m5 __attribute__ ((aligned(32)));
-static __m256i psi_i_p5_m3 __attribute__ ((aligned(32)));
-static __m256i psi_i_p5_m1 __attribute__ ((aligned(32)));
-static __m256i psi_i_p5_p1 __attribute__ ((aligned(32)));
-static __m256i psi_i_p5_p3 __attribute__ ((aligned(32)));
-static __m256i psi_i_p5_p5 __attribute__ ((aligned(32)));
-static __m256i psi_i_p5_p7 __attribute__ ((aligned(32)));
-static __m256i psi_i_p7_m7 __attribute__ ((aligned(32)));
-static __m256i psi_i_p7_m5 __attribute__ ((aligned(32)));
-static __m256i psi_i_p7_m3 __attribute__ ((aligned(32)));
-static __m256i psi_i_p7_m1 __attribute__ ((aligned(32)));
-static __m256i psi_i_p7_p1 __attribute__ ((aligned(32)));
-static __m256i psi_i_p7_p3 __attribute__ ((aligned(32)));
-static __m256i psi_i_p7_p5 __attribute__ ((aligned(32)));
-static __m256i psi_i_p7_p7 __attribute__ ((aligned(32)));
-
-static __m256i a_r_m7_m7 __attribute__ ((aligned(32)));
-static __m256i a_r_m7_m5 __attribute__ ((aligned(32)));
-static __m256i a_r_m7_m3 __attribute__ ((aligned(32)));
-static __m256i a_r_m7_m1 __attribute__ ((aligned(32)));
-static __m256i a_r_m7_p1 __attribute__ ((aligned(32)));
-static __m256i a_r_m7_p3 __attribute__ ((aligned(32)));
-static __m256i a_r_m7_p5 __attribute__ ((aligned(32)));
-static __m256i a_r_m7_p7 __attribute__ ((aligned(32)));
-static __m256i a_r_m5_m7 __attribute__ ((aligned(32)));
-static __m256i a_r_m5_m5 __attribute__ ((aligned(32)));
-static __m256i a_r_m5_m3 __attribute__ ((aligned(32)));
-static __m256i a_r_m5_m1 __attribute__ ((aligned(32)));
-static __m256i a_r_m5_p1 __attribute__ ((aligned(32)));
-static __m256i a_r_m5_p3 __attribute__ ((aligned(32)));
-static __m256i a_r_m5_p5 __attribute__ ((aligned(32)));
-static __m256i a_r_m5_p7 __attribute__ ((aligned(32)));
-static __m256i a_r_m3_m7 __attribute__ ((aligned(32)));
-static __m256i a_r_m3_m5 __attribute__ ((aligned(32)));
-static __m256i a_r_m3_m3 __attribute__ ((aligned(32)));
-static __m256i a_r_m3_m1 __attribute__ ((aligned(32)));
-static __m256i a_r_m3_p1 __attribute__ ((aligned(32)));
-static __m256i a_r_m3_p3 __attribute__ ((aligned(32)));
-static __m256i a_r_m3_p5 __attribute__ ((aligned(32)));
-static __m256i a_r_m3_p7 __attribute__ ((aligned(32)));
-static __m256i a_r_m1_m7 __attribute__ ((aligned(32)));
-static __m256i a_r_m1_m5 __attribute__ ((aligned(32)));
-static __m256i a_r_m1_m3 __attribute__ ((aligned(32)));
-static __m256i a_r_m1_m1 __attribute__ ((aligned(32)));
-static __m256i a_r_m1_p1 __attribute__ ((aligned(32)));
-static __m256i a_r_m1_p3 __attribute__ ((aligned(32)));
-static __m256i a_r_m1_p5 __attribute__ ((aligned(32)));
-static __m256i a_r_m1_p7 __attribute__ ((aligned(32)));
-static __m256i a_r_p1_m7 __attribute__ ((aligned(32)));
-static __m256i a_r_p1_m5 __attribute__ ((aligned(32)));
-static __m256i a_r_p1_m3 __attribute__ ((aligned(32)));
-static __m256i a_r_p1_m1 __attribute__ ((aligned(32)));
-static __m256i a_r_p1_p1 __attribute__ ((aligned(32)));
-static __m256i a_r_p1_p3 __attribute__ ((aligned(32)));
-static __m256i a_r_p1_p5 __attribute__ ((aligned(32)));
-static __m256i a_r_p1_p7 __attribute__ ((aligned(32)));
-static __m256i a_r_p3_m7 __attribute__ ((aligned(32)));
-static __m256i a_r_p3_m5 __attribute__ ((aligned(32)));
-static __m256i a_r_p3_m3 __attribute__ ((aligned(32)));
-static __m256i a_r_p3_m1 __attribute__ ((aligned(32)));
-static __m256i a_r_p3_p1 __attribute__ ((aligned(32)));
-static __m256i a_r_p3_p3 __attribute__ ((aligned(32)));
-static __m256i a_r_p3_p5 __attribute__ ((aligned(32)));
-static __m256i a_r_p3_p7 __attribute__ ((aligned(32)));
-static __m256i a_r_p5_m7 __attribute__ ((aligned(32)));
-static __m256i a_r_p5_m5 __attribute__ ((aligned(32)));
-static __m256i a_r_p5_m3 __attribute__ ((aligned(32)));
-static __m256i a_r_p5_m1 __attribute__ ((aligned(32)));
-static __m256i a_r_p5_p1 __attribute__ ((aligned(32)));
-static __m256i a_r_p5_p3 __attribute__ ((aligned(32)));
-static __m256i a_r_p5_p5 __attribute__ ((aligned(32)));
-static __m256i a_r_p5_p7 __attribute__ ((aligned(32)));
-static __m256i a_r_p7_m7 __attribute__ ((aligned(32)));
-static __m256i a_r_p7_m5 __attribute__ ((aligned(32)));
-static __m256i a_r_p7_m3 __attribute__ ((aligned(32)));
-static __m256i a_r_p7_m1 __attribute__ ((aligned(32)));
-static __m256i a_r_p7_p1 __attribute__ ((aligned(32)));
-static __m256i a_r_p7_p3 __attribute__ ((aligned(32)));
-static __m256i a_r_p7_p5 __attribute__ ((aligned(32)));
-static __m256i a_r_p7_p7 __attribute__ ((aligned(32)));
-
-static __m256i a_i_m7_m7 __attribute__ ((aligned(32)));
-static __m256i a_i_m7_m5 __attribute__ ((aligned(32)));
-static __m256i a_i_m7_m3 __attribute__ ((aligned(32)));
-static __m256i a_i_m7_m1 __attribute__ ((aligned(32)));
-static __m256i a_i_m7_p1 __attribute__ ((aligned(32)));
-static __m256i a_i_m7_p3 __attribute__ ((aligned(32)));
-static __m256i a_i_m7_p5 __attribute__ ((aligned(32)));
-static __m256i a_i_m7_p7 __attribute__ ((aligned(32)));
-static __m256i a_i_m5_m7 __attribute__ ((aligned(32)));
-static __m256i a_i_m5_m5 __attribute__ ((aligned(32)));
-static __m256i a_i_m5_m3 __attribute__ ((aligned(32)));
-static __m256i a_i_m5_m1 __attribute__ ((aligned(32)));
-static __m256i a_i_m5_p1 __attribute__ ((aligned(32)));
-static __m256i a_i_m5_p3 __attribute__ ((aligned(32)));
-static __m256i a_i_m5_p5 __attribute__ ((aligned(32)));
-static __m256i a_i_m5_p7 __attribute__ ((aligned(32)));
-static __m256i a_i_m3_m7 __attribute__ ((aligned(32)));
-static __m256i a_i_m3_m5 __attribute__ ((aligned(32)));
-static __m256i a_i_m3_m3 __attribute__ ((aligned(32)));
-static __m256i a_i_m3_m1 __attribute__ ((aligned(32)));
-static __m256i a_i_m3_p1 __attribute__ ((aligned(32)));
-static __m256i a_i_m3_p3 __attribute__ ((aligned(32)));
-static __m256i a_i_m3_p5 __attribute__ ((aligned(32)));
-static __m256i a_i_m3_p7 __attribute__ ((aligned(32)));
-static __m256i a_i_m1_m7 __attribute__ ((aligned(32)));
-static __m256i a_i_m1_m5 __attribute__ ((aligned(32)));
-static __m256i a_i_m1_m3 __attribute__ ((aligned(32)));
-static __m256i a_i_m1_m1 __attribute__ ((aligned(32)));
-static __m256i a_i_m1_p1 __attribute__ ((aligned(32)));
-static __m256i a_i_m1_p3 __attribute__ ((aligned(32)));
-static __m256i a_i_m1_p5 __attribute__ ((aligned(32)));
-static __m256i a_i_m1_p7 __attribute__ ((aligned(32)));
-static __m256i a_i_p1_m7 __attribute__ ((aligned(32)));
-static __m256i a_i_p1_m5 __attribute__ ((aligned(32)));
-static __m256i a_i_p1_m3 __attribute__ ((aligned(32)));
-static __m256i a_i_p1_m1 __attribute__ ((aligned(32)));
-static __m256i a_i_p1_p1 __attribute__ ((aligned(32)));
-static __m256i a_i_p1_p3 __attribute__ ((aligned(32)));
-static __m256i a_i_p1_p5 __attribute__ ((aligned(32)));
-static __m256i a_i_p1_p7 __attribute__ ((aligned(32)));
-static __m256i a_i_p3_m7 __attribute__ ((aligned(32)));
-static __m256i a_i_p3_m5 __attribute__ ((aligned(32)));
-static __m256i a_i_p3_m3 __attribute__ ((aligned(32)));
-static __m256i a_i_p3_m1 __attribute__ ((aligned(32)));
-static __m256i a_i_p3_p1 __attribute__ ((aligned(32)));
-static __m256i a_i_p3_p3 __attribute__ ((aligned(32)));
-static __m256i a_i_p3_p5 __attribute__ ((aligned(32)));
-static __m256i a_i_p3_p7 __attribute__ ((aligned(32)));
-static __m256i a_i_p5_m7 __attribute__ ((aligned(32)));
-static __m256i a_i_p5_m5 __attribute__ ((aligned(32)));
-static __m256i a_i_p5_m3 __attribute__ ((aligned(32)));
-static __m256i a_i_p5_m1 __attribute__ ((aligned(32)));
-static __m256i a_i_p5_p1 __attribute__ ((aligned(32)));
-static __m256i a_i_p5_p3 __attribute__ ((aligned(32)));
-static __m256i a_i_p5_p5 __attribute__ ((aligned(32)));
-static __m256i a_i_p5_p7 __attribute__ ((aligned(32)));
-static __m256i a_i_p7_m7 __attribute__ ((aligned(32)));
-static __m256i a_i_p7_m5 __attribute__ ((aligned(32)));
-static __m256i a_i_p7_m3 __attribute__ ((aligned(32)));
-static __m256i a_i_p7_m1 __attribute__ ((aligned(32)));
-static __m256i a_i_p7_p1 __attribute__ ((aligned(32)));
-static __m256i a_i_p7_p3 __attribute__ ((aligned(32)));
-static __m256i a_i_p7_p5 __attribute__ ((aligned(32)));
-static __m256i a_i_p7_p7 __attribute__ ((aligned(32)));
-
-static __m256i psi_a_m7_m7 __attribute__ ((aligned(32)));
-static __m256i psi_a_m7_m5 __attribute__ ((aligned(32)));
-static __m256i psi_a_m7_m3 __attribute__ ((aligned(32)));
-static __m256i psi_a_m7_m1 __attribute__ ((aligned(32)));
-static __m256i psi_a_m7_p1 __attribute__ ((aligned(32)));
-static __m256i psi_a_m7_p3 __attribute__ ((aligned(32)));
-static __m256i psi_a_m7_p5 __attribute__ ((aligned(32)));
-static __m256i psi_a_m7_p7 __attribute__ ((aligned(32)));
-static __m256i psi_a_m5_m7 __attribute__ ((aligned(32)));
-static __m256i psi_a_m5_m5 __attribute__ ((aligned(32)));
-static __m256i psi_a_m5_m3 __attribute__ ((aligned(32)));
-static __m256i psi_a_m5_m1 __attribute__ ((aligned(32)));
-static __m256i psi_a_m5_p1 __attribute__ ((aligned(32)));
-static __m256i psi_a_m5_p3 __attribute__ ((aligned(32)));
-static __m256i psi_a_m5_p5 __attribute__ ((aligned(32)));
-static __m256i psi_a_m5_p7 __attribute__ ((aligned(32)));
-static __m256i psi_a_m3_m7 __attribute__ ((aligned(32)));
-static __m256i psi_a_m3_m5 __attribute__ ((aligned(32)));
-static __m256i psi_a_m3_m3 __attribute__ ((aligned(32)));
-static __m256i psi_a_m3_m1 __attribute__ ((aligned(32)));
-static __m256i psi_a_m3_p1 __attribute__ ((aligned(32)));
-static __m256i psi_a_m3_p3 __attribute__ ((aligned(32)));
-static __m256i psi_a_m3_p5 __attribute__ ((aligned(32)));
-static __m256i psi_a_m3_p7 __attribute__ ((aligned(32)));
-static __m256i psi_a_m1_m7 __attribute__ ((aligned(32)));
-static __m256i psi_a_m1_m5 __attribute__ ((aligned(32)));
-static __m256i psi_a_m1_m3 __attribute__ ((aligned(32)));
-static __m256i psi_a_m1_m1 __attribute__ ((aligned(32)));
-static __m256i psi_a_m1_p1 __attribute__ ((aligned(32)));
-static __m256i psi_a_m1_p3 __attribute__ ((aligned(32)));
-static __m256i psi_a_m1_p5 __attribute__ ((aligned(32)));
-static __m256i psi_a_m1_p7 __attribute__ ((aligned(32)));
-static __m256i psi_a_p1_m7 __attribute__ ((aligned(32)));
-static __m256i psi_a_p1_m5 __attribute__ ((aligned(32)));
-static __m256i psi_a_p1_m3 __attribute__ ((aligned(32)));
-static __m256i psi_a_p1_m1 __attribute__ ((aligned(32)));
-static __m256i psi_a_p1_p1 __attribute__ ((aligned(32)));
-static __m256i psi_a_p1_p3 __attribute__ ((aligned(32)));
-static __m256i psi_a_p1_p5 __attribute__ ((aligned(32)));
-static __m256i psi_a_p1_p7 __attribute__ ((aligned(32)));
-static __m256i psi_a_p3_m7 __attribute__ ((aligned(32)));
-static __m256i psi_a_p3_m5 __attribute__ ((aligned(32)));
-static __m256i psi_a_p3_m3 __attribute__ ((aligned(32)));
-static __m256i psi_a_p3_m1 __attribute__ ((aligned(32)));
-static __m256i psi_a_p3_p1 __attribute__ ((aligned(32)));
-static __m256i psi_a_p3_p3 __attribute__ ((aligned(32)));
-static __m256i psi_a_p3_p5 __attribute__ ((aligned(32)));
-static __m256i psi_a_p3_p7 __attribute__ ((aligned(32)));
-static __m256i psi_a_p5_m7 __attribute__ ((aligned(32)));
-static __m256i psi_a_p5_m5 __attribute__ ((aligned(32)));
-static __m256i psi_a_p5_m3 __attribute__ ((aligned(32)));
-static __m256i psi_a_p5_m1 __attribute__ ((aligned(32)));
-static __m256i psi_a_p5_p1 __attribute__ ((aligned(32)));
-static __m256i psi_a_p5_p3 __attribute__ ((aligned(32)));
-static __m256i psi_a_p5_p5 __attribute__ ((aligned(32)));
-static __m256i psi_a_p5_p7 __attribute__ ((aligned(32)));
-static __m256i psi_a_p7_m7 __attribute__ ((aligned(32)));
-static __m256i psi_a_p7_m5 __attribute__ ((aligned(32)));
-static __m256i psi_a_p7_m3 __attribute__ ((aligned(32)));
-static __m256i psi_a_p7_m1 __attribute__ ((aligned(32)));
-static __m256i psi_a_p7_p1 __attribute__ ((aligned(32)));
-static __m256i psi_a_p7_p3 __attribute__ ((aligned(32)));
-static __m256i psi_a_p7_p5 __attribute__ ((aligned(32)));
-static __m256i psi_a_p7_p7 __attribute__ ((aligned(32)));
-
-static __m256i a_sq_m7_m7 __attribute__ ((aligned(32)));
-static __m256i a_sq_m7_m5 __attribute__ ((aligned(32)));
-static __m256i a_sq_m7_m3 __attribute__ ((aligned(32)));
-static __m256i a_sq_m7_m1 __attribute__ ((aligned(32)));
-static __m256i a_sq_m7_p1 __attribute__ ((aligned(32)));
-static __m256i a_sq_m7_p3 __attribute__ ((aligned(32)));
-static __m256i a_sq_m7_p5 __attribute__ ((aligned(32)));
-static __m256i a_sq_m7_p7 __attribute__ ((aligned(32)));
-static __m256i a_sq_m5_m7 __attribute__ ((aligned(32)));
-static __m256i a_sq_m5_m5 __attribute__ ((aligned(32)));
-static __m256i a_sq_m5_m3 __attribute__ ((aligned(32)));
-static __m256i a_sq_m5_m1 __attribute__ ((aligned(32)));
-static __m256i a_sq_m5_p1 __attribute__ ((aligned(32)));
-static __m256i a_sq_m5_p3 __attribute__ ((aligned(32)));
-static __m256i a_sq_m5_p5 __attribute__ ((aligned(32)));
-static __m256i a_sq_m5_p7 __attribute__ ((aligned(32)));
-static __m256i a_sq_m3_m7 __attribute__ ((aligned(32)));
-static __m256i a_sq_m3_m5 __attribute__ ((aligned(32)));
-static __m256i a_sq_m3_m3 __attribute__ ((aligned(32)));
-static __m256i a_sq_m3_m1 __attribute__ ((aligned(32)));
-static __m256i a_sq_m3_p1 __attribute__ ((aligned(32)));
-static __m256i a_sq_m3_p3 __attribute__ ((aligned(32)));
-static __m256i a_sq_m3_p5 __attribute__ ((aligned(32)));
-static __m256i a_sq_m3_p7 __attribute__ ((aligned(32)));
-static __m256i a_sq_m1_m7 __attribute__ ((aligned(32)));
-static __m256i a_sq_m1_m5 __attribute__ ((aligned(32)));
-static __m256i a_sq_m1_m3 __attribute__ ((aligned(32)));
-static __m256i a_sq_m1_m1 __attribute__ ((aligned(32)));
-static __m256i a_sq_m1_p1 __attribute__ ((aligned(32)));
-static __m256i a_sq_m1_p3 __attribute__ ((aligned(32)));
-static __m256i a_sq_m1_p5 __attribute__ ((aligned(32)));
-static __m256i a_sq_m1_p7 __attribute__ ((aligned(32)));
-static __m256i a_sq_p1_m7 __attribute__ ((aligned(32)));
-static __m256i a_sq_p1_m5 __attribute__ ((aligned(32)));
-static __m256i a_sq_p1_m3 __attribute__ ((aligned(32)));
-static __m256i a_sq_p1_m1 __attribute__ ((aligned(32)));
-static __m256i a_sq_p1_p1 __attribute__ ((aligned(32)));
-static __m256i a_sq_p1_p3 __attribute__ ((aligned(32)));
-static __m256i a_sq_p1_p5 __attribute__ ((aligned(32)));
-static __m256i a_sq_p1_p7 __attribute__ ((aligned(32)));
-static __m256i a_sq_p3_m7 __attribute__ ((aligned(32)));
-static __m256i a_sq_p3_m5 __attribute__ ((aligned(32)));
-static __m256i a_sq_p3_m3 __attribute__ ((aligned(32)));
-static __m256i a_sq_p3_m1 __attribute__ ((aligned(32)));
-static __m256i a_sq_p3_p1 __attribute__ ((aligned(32)));
-static __m256i a_sq_p3_p3 __attribute__ ((aligned(32)));
-static __m256i a_sq_p3_p5 __attribute__ ((aligned(32)));
-static __m256i a_sq_p3_p7 __attribute__ ((aligned(32)));
-static __m256i a_sq_p5_m7 __attribute__ ((aligned(32)));
-static __m256i a_sq_p5_m5 __attribute__ ((aligned(32)));
-static __m256i a_sq_p5_m3 __attribute__ ((aligned(32)));
-static __m256i a_sq_p5_m1 __attribute__ ((aligned(32)));
-static __m256i a_sq_p5_p1 __attribute__ ((aligned(32)));
-static __m256i a_sq_p5_p3 __attribute__ ((aligned(32)));
-static __m256i a_sq_p5_p5 __attribute__ ((aligned(32)));
-static __m256i a_sq_p5_p7 __attribute__ ((aligned(32)));
-static __m256i a_sq_p7_m7 __attribute__ ((aligned(32)));
-static __m256i a_sq_p7_m5 __attribute__ ((aligned(32)));
-static __m256i a_sq_p7_m3 __attribute__ ((aligned(32)));
-static __m256i a_sq_p7_m1 __attribute__ ((aligned(32)));
-static __m256i a_sq_p7_p1 __attribute__ ((aligned(32)));
-static __m256i a_sq_p7_p3 __attribute__ ((aligned(32)));
-static __m256i a_sq_p7_p5 __attribute__ ((aligned(32)));
-static __m256i a_sq_p7_p7 __attribute__ ((aligned(32)));
-
-static __m256i bit_met_m7_m7 __attribute__ ((aligned(32)));
-static __m256i bit_met_m7_m5 __attribute__ ((aligned(32)));
-static __m256i bit_met_m7_m3 __attribute__ ((aligned(32)));
-static __m256i bit_met_m7_m1 __attribute__ ((aligned(32)));
-static __m256i bit_met_m7_p1 __attribute__ ((aligned(32)));
-static __m256i bit_met_m7_p3 __attribute__ ((aligned(32)));
-static __m256i bit_met_m7_p5 __attribute__ ((aligned(32)));
-static __m256i bit_met_m7_p7 __attribute__ ((aligned(32)));
-static __m256i bit_met_m5_m7 __attribute__ ((aligned(32)));
-static __m256i bit_met_m5_m5 __attribute__ ((aligned(32)));
-static __m256i bit_met_m5_m3 __attribute__ ((aligned(32)));
-static __m256i bit_met_m5_m1 __attribute__ ((aligned(32)));
-static __m256i bit_met_m5_p1 __attribute__ ((aligned(32)));
-static __m256i bit_met_m5_p3 __attribute__ ((aligned(32)));
-static __m256i bit_met_m5_p5 __attribute__ ((aligned(32)));
-static __m256i bit_met_m5_p7 __attribute__ ((aligned(32)));
-static __m256i bit_met_m3_m7 __attribute__ ((aligned(32)));
-static __m256i bit_met_m3_m5 __attribute__ ((aligned(32)));
-static __m256i bit_met_m3_m3 __attribute__ ((aligned(32)));
-static __m256i bit_met_m3_m1 __attribute__ ((aligned(32)));
-static __m256i bit_met_m3_p1 __attribute__ ((aligned(32)));
-static __m256i bit_met_m3_p3 __attribute__ ((aligned(32)));
-static __m256i bit_met_m3_p5 __attribute__ ((aligned(32)));
-static __m256i bit_met_m3_p7 __attribute__ ((aligned(32)));
-static __m256i bit_met_m1_m7 __attribute__ ((aligned(32)));
-static __m256i bit_met_m1_m5 __attribute__ ((aligned(32)));
-static __m256i bit_met_m1_m3 __attribute__ ((aligned(32)));
-static __m256i bit_met_m1_m1 __attribute__ ((aligned(32)));
-static __m256i bit_met_m1_p1 __attribute__ ((aligned(32)));
-static __m256i bit_met_m1_p3 __attribute__ ((aligned(32)));
-static __m256i bit_met_m1_p5 __attribute__ ((aligned(32)));
-static __m256i bit_met_m1_p7 __attribute__ ((aligned(32)));
-static __m256i bit_met_p1_m7 __attribute__ ((aligned(32)));
-static __m256i bit_met_p1_m5 __attribute__ ((aligned(32)));
-static __m256i bit_met_p1_m3 __attribute__ ((aligned(32)));
-static __m256i bit_met_p1_m1 __attribute__ ((aligned(32)));
-static __m256i bit_met_p1_p1 __attribute__ ((aligned(32)));
-static __m256i bit_met_p1_p3 __attribute__ ((aligned(32)));
-static __m256i bit_met_p1_p5 __attribute__ ((aligned(32)));
-static __m256i bit_met_p1_p7 __attribute__ ((aligned(32)));
-static __m256i bit_met_p3_m7 __attribute__ ((aligned(32)));
-static __m256i bit_met_p3_m5 __attribute__ ((aligned(32)));
-static __m256i bit_met_p3_m3 __attribute__ ((aligned(32)));
-static __m256i bit_met_p3_m1 __attribute__ ((aligned(32)));
-static __m256i bit_met_p3_p1 __attribute__ ((aligned(32)));
-static __m256i bit_met_p3_p3 __attribute__ ((aligned(32)));
-static __m256i bit_met_p3_p5 __attribute__ ((aligned(32)));
-static __m256i bit_met_p3_p7 __attribute__ ((aligned(32)));
-static __m256i bit_met_p5_m7 __attribute__ ((aligned(32)));
-static __m256i bit_met_p5_m5 __attribute__ ((aligned(32)));
-static __m256i bit_met_p5_m3 __attribute__ ((aligned(32)));
-static __m256i bit_met_p5_m1 __attribute__ ((aligned(32)));
-static __m256i bit_met_p5_p1 __attribute__ ((aligned(32)));
-static __m256i bit_met_p5_p3 __attribute__ ((aligned(32)));
-static __m256i bit_met_p5_p5 __attribute__ ((aligned(32)));
-static __m256i bit_met_p5_p7 __attribute__ ((aligned(32)));
-static __m256i bit_met_p7_m7 __attribute__ ((aligned(32)));
-static __m256i bit_met_p7_m5 __attribute__ ((aligned(32)));
-static __m256i bit_met_p7_m3 __attribute__ ((aligned(32)));
-static __m256i bit_met_p7_m1 __attribute__ ((aligned(32)));
-static __m256i bit_met_p7_p1 __attribute__ ((aligned(32)));
-static __m256i bit_met_p7_p3 __attribute__ ((aligned(32)));
-static __m256i bit_met_p7_p5 __attribute__ ((aligned(32)));
-static __m256i bit_met_p7_p7 __attribute__ ((aligned(32)));
-
-static __m256i  y0_p_1_1 __attribute__ ((aligned(32)));
-static __m256i  y0_p_1_3 __attribute__ ((aligned(32)));
-static __m256i  y0_p_1_5 __attribute__ ((aligned(32)));
-static __m256i  y0_p_1_7 __attribute__ ((aligned(32)));
-static __m256i  y0_p_3_1 __attribute__ ((aligned(32)));
-static __m256i  y0_p_3_3 __attribute__ ((aligned(32)));
-static __m256i  y0_p_3_5 __attribute__ ((aligned(32)));
-static __m256i  y0_p_3_7 __attribute__ ((aligned(32)));
-static __m256i  y0_p_5_1 __attribute__ ((aligned(32)));
-static __m256i  y0_p_5_3 __attribute__ ((aligned(32)));
-static __m256i  y0_p_5_5 __attribute__ ((aligned(32)));
-static __m256i  y0_p_5_7 __attribute__ ((aligned(32)));
-static __m256i  y0_p_7_1 __attribute__ ((aligned(32)));
-static __m256i  y0_p_7_3 __attribute__ ((aligned(32)));
-static __m256i  y0_p_7_5 __attribute__ ((aligned(32)));
-static __m256i  y0_p_7_7 __attribute__ ((aligned(32)));
-static __m256i  y0_m_1_1 __attribute__ ((aligned(32)));
-static __m256i  y0_m_1_3 __attribute__ ((aligned(32)));
-static __m256i  y0_m_1_5 __attribute__ ((aligned(32)));
-static __m256i  y0_m_1_7 __attribute__ ((aligned(32)));
-static __m256i  y0_m_3_1 __attribute__ ((aligned(32)));
-static __m256i  y0_m_3_3 __attribute__ ((aligned(32)));
-static __m256i  y0_m_3_5 __attribute__ ((aligned(32)));
-static __m256i  y0_m_3_7 __attribute__ ((aligned(32)));
-static __m256i  y0_m_5_1 __attribute__ ((aligned(32)));
-static __m256i  y0_m_5_3 __attribute__ ((aligned(32)));
-static __m256i  y0_m_5_5 __attribute__ ((aligned(32)));
-static __m256i  y0_m_5_7 __attribute__ ((aligned(32)));
-static __m256i  y0_m_7_1 __attribute__ ((aligned(32)));
-static __m256i  y0_m_7_3 __attribute__ ((aligned(32)));
-static __m256i  y0_m_7_5 __attribute__ ((aligned(32)));
-static __m256i  y0_m_7_7 __attribute__ ((aligned(32)));
-
-static __m256i  xmm0 __attribute__ ((aligned(32)));
-static __m256i  xmm1 __attribute__ ((aligned(32)));
-static __m256i  xmm2 __attribute__ ((aligned(32)));
-static __m256i  xmm3 __attribute__ ((aligned(32)));
-static __m256i  xmm4 __attribute__ ((aligned(32)));
-static __m256i  xmm5 __attribute__ ((aligned(32)));
-static __m256i  xmm6 __attribute__ ((aligned(32)));
-static __m256i  xmm7 __attribute__ ((aligned(32)));
-static __m256i  xmm8 __attribute__ ((aligned(32)));
-
-static __m256i  y0r __attribute__ ((aligned(32)));
-static __m256i  y0i __attribute__ ((aligned(32)));
-static __m256i  y1r __attribute__ ((aligned(32)));
-static __m256i  y1i __attribute__ ((aligned(32)));
-static __m256i  y2r __attribute__ ((aligned(32)));
-static __m256i  y2i __attribute__ ((aligned(32)));
-
-static __m256i  logmax_num_re0 __attribute__ ((aligned(32)));
-static __m256i  logmax_den_re0 __attribute__ ((aligned(32)));
-
-static __m256i tmp_result  __attribute__ ((aligned(32)));
-static __m256i tmp_result2 __attribute__ ((aligned(32)));
-static __m256i tmp_result3 __attribute__ ((aligned(32)));
-static __m256i tmp_result4 __attribute__ ((aligned(32)));
-
-//==============================================================================================
-// Auxiliary Makros
-
-// calculate interference magnitude
-#define interference_abs_epi16(psi,int_ch_mag,int_mag,c1,c2) tmp_result = _mm256_cmpgt_epi16(int_ch_mag,psi); tmp_result2 = _mm256_xor_si256(tmp_result,(*(__m256i*)&ones256[0])); tmp_result = _mm256_and_si256(tmp_result,c1); tmp_result2 = _mm256_and_si256(tmp_result2,c2); int_mag = _mm256_or_si256(tmp_result,tmp_result2);
-
-// calculate interference magnitude
-// tmp_result = ones in shorts corr. to interval 2<=x<=4, tmp_result2 interval < 2, tmp_result3 interval 4<x<6 and tmp_result4 interval x>6
-#define interference_abs_64qam_epi16(psi,int_ch_mag,int_two_ch_mag,int_three_ch_mag,a,c1,c3,c5,c7) tmp_result = _mm256_cmpgt_epi16(int_two_ch_mag,psi); tmp_result3 = _mm256_xor_si256(tmp_result,(*(__m256i*)&ones256[0])); tmp_result2 = _mm256_cmpgt_epi16(int_ch_mag,psi); tmp_result = _mm256_xor_si256(tmp_result,tmp_result2); tmp_result4 = _mm256_cmpgt_epi16(psi,int_three_ch_mag); tmp_result3 = _mm256_xor_si256(tmp_result3,tmp_result4); tmp_result = _mm256_and_si256(tmp_result,c3); tmp_result2 = _mm256_and_si256(tmp_result2,c1); tmp_result3 = _mm256_and_si256(tmp_result3,c5); tmp_result4 = _mm256_and_si256(tmp_result4,c7); tmp_result = _mm256_or_si256(tmp_result,tmp_result2); tmp_result3 = _mm256_or_si256(tmp_result3,tmp_result4); a = _mm256_or_si256(tmp_result,tmp_result3);
-
-// calculates psi_a = psi_r*a_r + psi_i*a_i
-#define prodsum_psi_a_epi16(psi_r,a_r,psi_i,a_i,psi_a) tmp_result = _mm256_mulhi_epi16(psi_r,a_r); tmp_result = _mm256_slli_epi16(tmp_result,1); tmp_result2 = _mm256_mulhi_epi16(psi_i,a_i); tmp_result2 = _mm256_slli_epi16(tmp_result2,1); psi_a = _mm256_adds_epi16(tmp_result,tmp_result2);
-
-// calculates a_sq = int_ch_mag*(a_r^2 + a_i^2)*scale_factor
-#define square_a_epi16(a_r,a_i,int_ch_mag,scale_factor,a_sq) tmp_result = _mm256_mulhi_epi16(a_r,a_r); tmp_result = _mm256_slli_epi16(tmp_result,1); tmp_result = _mm256_mulhi_epi16(tmp_result,scale_factor); tmp_result = _mm256_slli_epi16(tmp_result,1); tmp_result = _mm256_mulhi_epi16(tmp_result,int_ch_mag); tmp_result = _mm256_slli_epi16(tmp_result,1); tmp_result2 = _mm256_mulhi_epi16(a_i,a_i); tmp_result2 = _mm256_slli_epi16(tmp_result2,1); tmp_result2 = _mm256_mulhi_epi16(tmp_result2,scale_factor); tmp_result2 = _mm256_slli_epi16(tmp_result2,1); tmp_result2 = _mm256_mulhi_epi16(tmp_result2,int_ch_mag); tmp_result2 = _mm256_slli_epi16(tmp_result2,1); a_sq = _mm256_adds_epi16(tmp_result,tmp_result2);
-
-// calculates a_sq = int_ch_mag*(a_r^2 + a_i^2)*scale_factor for 64-QAM
-#define square_a_64qam_epi16(a_r,a_i,int_ch_mag,scale_factor,a_sq)  tmp_result = _mm256_mulhi_epi16(a_r,a_r); tmp_result = _mm256_slli_epi16(tmp_result,1); tmp_result = _mm256_mulhi_epi16(tmp_result,scale_factor); tmp_result = _mm256_slli_epi16(tmp_result,3); tmp_result = _mm256_mulhi_epi16(tmp_result,int_ch_mag); tmp_result = _mm256_slli_epi16(tmp_result,1); tmp_result2 = _mm256_mulhi_epi16(a_i,a_i); tmp_result2 = _mm256_slli_epi16(tmp_result2,1); tmp_result2 = _mm256_mulhi_epi16(tmp_result2,scale_factor); tmp_result2 = _mm256_slli_epi16(tmp_result2,3); tmp_result2 = _mm256_mulhi_epi16(tmp_result2,int_ch_mag); tmp_result2 = _mm256_slli_epi16(tmp_result2,1); a_sq = _mm256_adds_epi16(tmp_result,tmp_result2);
-
-void seperate_real_imag_parts(__m256i *out_re,
-                              __m256i *out_im,
-                              __m256i in0,
-                              __m256i in1)
-{
-    __m256i tmp0;
-    __m256i tmp1;
-
-    in0 = _mm256_shufflelo_epi16(in0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    in0 = _mm256_shufflehi_epi16(in0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    in0 = _mm256_shuffle_epi32(in0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-
-    in1 = _mm256_shufflelo_epi16(in1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    in1 = _mm256_shufflehi_epi16(in1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    in1 = _mm256_shuffle_epi32(in1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-
-    //in0 = [Re(0,1,2,3)   Im(0,1,2,3)   Re(4,5,6,7)     Im(4,5,6,7)]
-    //in0 = [Re(8,9,10,11) Im(8,9,10,11) Re(12,13,14,15) Im(12,13,14,15)]
-
-    tmp0 = _mm256_unpacklo_epi64(in0, in1);
-    //axmm2 = [Re(0,1,2,3) Re(8,9,10,11) Re(4,5,6,7) Re(12,13,14,15)]
-    tmp0 = _mm256_permute4x64_epi64(tmp0,0xd8); // Re(rho)
-
-    tmp1 = _mm256_unpackhi_epi64(in0, in1);
-    //axmm3 = [Im(0,1,2,3) Im(8,9,10,11) Im(4,5,6,7) Im(12,13,14,15)]
-    tmp1 = _mm256_permute4x64_epi64(tmp1,0xd8); // Im(rho)
-
-    *out_re = tmp0;
-    *out_im = tmp1;
-}
-
-void qam64_qam16_avx2(short *stream0_in,
-                      short *stream1_in,
-                      short *ch_mag,
-                      short *ch_mag_i,
-                      short *stream0_out,
-                      short *rho01,
-                      int length
-    )
-{
-
-  /*
-    Author: S. Wagner
-    Date: 31-07-12
-
-    Input:
-    stream0_in:  MF filter for 1st stream, i.e., y0=h0'*y
-    stream1_in:  MF filter for 2nd stream, i.e., y1=h1'*y
-    ch_mag:      4*h0/sqrt(42), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc
-    ch_mag_i:    4*h1/sqrt(42), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc
-    rho01:       Channel cross correlation, i.e., h1'*h0
-
-    Output:
-    stream0_out: output LLRs for 1st stream
-  */
-
-#if defined(__x86_64__) || defined(__i386__)
-
-  __m256i *rho01_256i      = (__m256i *)rho01;
-  __m256i *stream0_256i_in = (__m256i *)stream0_in;
-  __m256i *stream1_256i_in = (__m256i *)stream1_in;
-  __m256i *ch_mag_256i     = (__m256i *)ch_mag;
-  __m256i *ch_mag_256i_i   = (__m256i *)ch_mag_i;
-
-  __m256i ONE_OVER_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(10112)); // round(1/sqrt(42)*2^16)
-  __m256i THREE_OVER_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(30337)); // round(3/sqrt(42)*2^16)
-  __m256i FIVE_OVER_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(25281)); // round(5/sqrt(42)*2^15)
-  __m256i SEVEN_OVER_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(17697)); // round(5/sqrt(42)*2^15)
-  __m256i FORTYNINE_OVER_FOUR_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(30969)); // round(49/(4*sqrt(42))*2^14), Q2.14
-  __m256i THIRTYSEVEN_OVER_FOUR_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(23385)); // round(37/(4*sqrt(42))*2^14), Q2.14
-  __m256i TWENTYFIVE_OVER_FOUR_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(31601)); // round(25/(4*sqrt(42))*2^15)
-  __m256i TWENTYNINE_OVER_FOUR_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(18329)); // round(29/(4*sqrt(42))*2^15), Q2.14
-  __m256i SEVENTEEN_OVER_FOUR_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(21489)); // round(17/(4*sqrt(42))*2^15)
-  __m256i NINE_OVER_FOUR_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(11376)); // round(9/(4*sqrt(42))*2^15)
-  __m256i THIRTEEN_OVER_FOUR_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(16433)); // round(13/(4*sqrt(42))*2^15)
-  __m256i FIVE_OVER_FOUR_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(6320)); // round(5/(4*sqrt(42))*2^15)
-  __m256i ONE_OVER_FOUR_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(1264)); // round(1/(4*sqrt(42))*2^15)
-  __m256i ONE_OVER_SQRT_10_Q15 = _mm256_broadcastw_epi16(_mm_set1_epi16(10362)); // round(1/sqrt(10)*2^15)
-  __m256i THREE_OVER_SQRT_10 = _mm256_broadcastw_epi16(_mm_set1_epi16(31086)); // round(3/sqrt(10)*2^15)
-  __m256i SQRT_10_OVER_FOUR = _mm256_broadcastw_epi16(_mm_set1_epi16(25905)); // round(sqrt(10)/4*2^15)
-
-
-  __m256i ch_mag_int;
-  __m256i ch_mag_des;
-  __m256i ch_mag_98_over_42_with_sigma2;
-  __m256i ch_mag_74_over_42_with_sigma2;
-  __m256i ch_mag_58_over_42_with_sigma2;
-  __m256i ch_mag_50_over_42_with_sigma2;
-  __m256i ch_mag_34_over_42_with_sigma2;
-  __m256i ch_mag_18_over_42_with_sigma2;
-  __m256i ch_mag_26_over_42_with_sigma2;
-  __m256i ch_mag_10_over_42_with_sigma2;
-  __m256i ch_mag_2_over_42_with_sigma2;
-  __m256i  y0r_one_over_sqrt_21;
-  __m256i  y0r_three_over_sqrt_21;
-  __m256i  y0r_five_over_sqrt_21;
-  __m256i  y0r_seven_over_sqrt_21;
-  __m256i  y0i_one_over_sqrt_21;
-  __m256i  y0i_three_over_sqrt_21;
-  __m256i  y0i_five_over_sqrt_21;
-  __m256i  y0i_seven_over_sqrt_21;
-
-#elif defined(__arm__)
-
-#endif
-  int i,j;
-  uint32_t len256 = (length)>>3;
-
-  for (i=0; i<len256; i+=2) {
-
-#if defined(__x86_64__) || defined(__i386__)
-    // Get rho
-      /*
-    xmm0 = rho01_128i[i];
-    xmm1 = rho01_128i[i+1];
-    xmm0 = _mm_shufflelo_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shufflehi_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shuffle_epi32(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflelo_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflehi_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shuffle_epi32(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    //xmm0 = [Re(0,1) Re(2,3) Im(0,1) Im(2,3)]
-    //xmm1 = [Re(4,5) Re(6,7) Im(4,5) Im(6,7)]
-    xmm2 = _mm_unpacklo_epi64(xmm0,xmm1); // Re(rho)
-    xmm3 = _mm_unpackhi_epi64(xmm0,xmm1); // Im(rho)
-      */
-    seperate_real_imag_parts(&xmm2, &xmm3, rho01_256i[i], rho01_256i[i+1]);
-
-    rho_rpi = _mm256_adds_epi16(xmm2,xmm3); // rho = Re(rho) + Im(rho)
-    rho_rmi = _mm256_subs_epi16(xmm2,xmm3); // rho* = Re(rho) - Im(rho)
-
-    // Compute the different rhos
-    rho_rpi_1_1 = _mm256_mulhi_epi16(rho_rpi, ONE_OVER_SQRT_42);
-    rho_rmi_1_1 = _mm256_mulhi_epi16(rho_rmi, ONE_OVER_SQRT_42);
-    rho_rpi_3_3 = _mm256_mulhi_epi16(rho_rpi, THREE_OVER_SQRT_42);
-    rho_rmi_3_3 = _mm256_mulhi_epi16(rho_rmi, THREE_OVER_SQRT_42);
-    rho_rpi_5_5 = _mm256_mulhi_epi16(rho_rpi, FIVE_OVER_SQRT_42);
-    rho_rmi_5_5 = _mm256_mulhi_epi16(rho_rmi, FIVE_OVER_SQRT_42);
-    rho_rpi_7_7 = _mm256_mulhi_epi16(rho_rpi, SEVEN_OVER_SQRT_42);
-    rho_rmi_7_7 = _mm256_mulhi_epi16(rho_rmi, SEVEN_OVER_SQRT_42);
-
-    rho_rpi_5_5 = _mm256_slli_epi16(rho_rpi_5_5, 1);
-    rho_rmi_5_5 = _mm256_slli_epi16(rho_rmi_5_5, 1);
-    rho_rpi_7_7 = _mm256_slli_epi16(rho_rpi_7_7, 2);
-    rho_rmi_7_7 = _mm256_slli_epi16(rho_rmi_7_7, 2);
-
-    xmm4 = _mm256_mulhi_epi16(xmm2, ONE_OVER_SQRT_42);
-    xmm5 = _mm256_mulhi_epi16(xmm3, ONE_OVER_SQRT_42);
-    xmm6 = _mm256_mulhi_epi16(xmm3, THREE_OVER_SQRT_42);
-    xmm7 = _mm256_mulhi_epi16(xmm3, FIVE_OVER_SQRT_42);
-    xmm8 = _mm256_mulhi_epi16(xmm3, SEVEN_OVER_SQRT_42);
-    xmm7 = _mm256_slli_epi16(xmm7, 1);
-    xmm8 = _mm256_slli_epi16(xmm8, 2);
-
-    rho_rpi_1_3 = _mm256_adds_epi16(xmm4, xmm6);
-    rho_rmi_1_3 = _mm256_subs_epi16(xmm4, xmm6);
-    rho_rpi_1_5 = _mm256_adds_epi16(xmm4, xmm7);
-    rho_rmi_1_5 = _mm256_subs_epi16(xmm4, xmm7);
-    rho_rpi_1_7 = _mm256_adds_epi16(xmm4, xmm8);
-    rho_rmi_1_7 = _mm256_subs_epi16(xmm4, xmm8);
-
-    xmm4 = _mm256_mulhi_epi16(xmm2, THREE_OVER_SQRT_42);
-    rho_rpi_3_1 = _mm256_adds_epi16(xmm4, xmm5);
-    rho_rmi_3_1 = _mm256_subs_epi16(xmm4, xmm5);
-    rho_rpi_3_5 = _mm256_adds_epi16(xmm4, xmm7);
-    rho_rmi_3_5 = _mm256_subs_epi16(xmm4, xmm7);
-    rho_rpi_3_7 = _mm256_adds_epi16(xmm4, xmm8);
-    rho_rmi_3_7 = _mm256_subs_epi16(xmm4, xmm8);
-
-    xmm4 = _mm256_mulhi_epi16(xmm2, FIVE_OVER_SQRT_42);
-    xmm4 = _mm256_slli_epi16(xmm4, 1);
-    rho_rpi_5_1 = _mm256_adds_epi16(xmm4, xmm5);
-    rho_rmi_5_1 = _mm256_subs_epi16(xmm4, xmm5);
-    rho_rpi_5_3 = _mm256_adds_epi16(xmm4, xmm6);
-    rho_rmi_5_3 = _mm256_subs_epi16(xmm4, xmm6);
-    rho_rpi_5_7 = _mm256_adds_epi16(xmm4, xmm8);
-    rho_rmi_5_7 = _mm256_subs_epi16(xmm4, xmm8);
-
-    xmm4 = _mm256_mulhi_epi16(xmm2, SEVEN_OVER_SQRT_42);
-    xmm4 = _mm256_slli_epi16(xmm4, 2);
-    rho_rpi_7_1 = _mm256_adds_epi16(xmm4, xmm5);
-    rho_rmi_7_1 = _mm256_subs_epi16(xmm4, xmm5);
-    rho_rpi_7_3 = _mm256_adds_epi16(xmm4, xmm6);
-    rho_rmi_7_3 = _mm256_subs_epi16(xmm4, xmm6);
-    rho_rpi_7_5 = _mm256_adds_epi16(xmm4, xmm7);
-    rho_rmi_7_5 = _mm256_subs_epi16(xmm4, xmm7);
-
-    // Rearrange interfering MF output
-    /*
-    xmm0 = stream1_128i_in[i];
-    xmm1 = stream1_128i_in[i+1];
-    xmm0 = _mm256_shufflelo_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm256_shufflehi_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm256_shuffle_epi32(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm256_shufflelo_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm256_shufflehi_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm256_shuffle_epi32(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    //xmm0 = [Re(0,1) Re(2,3) Im(0,1) Im(2,3)]
-    //xmm1 = [Re(4,5) Re(6,7) Im(4,5) Im(6,7)]
-    y1r = _mm256_unpacklo_epi64(xmm0,xmm1); //[y1r(1),y1r(2),y1r(3),y1r(4)]
-    y1i = _mm256_unpackhi_epi64(xmm0,xmm1); //[y1i(1),y1i(2),y1i(3),y1i(4)]
-    */
-
-    seperate_real_imag_parts(&y1r, &y1i, stream1_256i_in[i], stream1_256i_in[i+1]);
-
-    // Psi_r calculation from rho_rpi or rho_rmi
-    xmm0 = _mm256_broadcastw_epi16(_mm_set1_epi16(0));// ZERO for abs_pi16
-    xmm2 = _mm256_subs_epi16(rho_rpi_7_7, y1r);
-    psi_r_p7_p7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_7_5, y1r);
-    psi_r_p7_p5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_7_3, y1r);
-    psi_r_p7_p3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_7_1, y1r);
-    psi_r_p7_p1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_7_1, y1r);
-    psi_r_p7_m1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_7_3, y1r);
-    psi_r_p7_m3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_7_5, y1r);
-    psi_r_p7_m5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_7_7, y1r);
-    psi_r_p7_m7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_5_7, y1r);
-    psi_r_p5_p7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_5_5, y1r);
-    psi_r_p5_p5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_5_3, y1r);
-    psi_r_p5_p3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_5_1, y1r);
-    psi_r_p5_p1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_5_1, y1r);
-    psi_r_p5_m1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_5_3, y1r);
-    psi_r_p5_m3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_5_5, y1r);
-    psi_r_p5_m5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_5_7, y1r);
-    psi_r_p5_m7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_3_7, y1r);
-    psi_r_p3_p7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_3_5, y1r);
-    psi_r_p3_p5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_3_3, y1r);
-    psi_r_p3_p3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_3_1, y1r);
-    psi_r_p3_p1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_3_1, y1r);
-    psi_r_p3_m1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_3_3, y1r);
-    psi_r_p3_m3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_3_5, y1r);
-    psi_r_p3_m5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_3_7, y1r);
-    psi_r_p3_m7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_1_7, y1r);
-    psi_r_p1_p7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_1_5, y1r);
-    psi_r_p1_p5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_1_3, y1r);
-    psi_r_p1_p3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_1_1, y1r);
-    psi_r_p1_p1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_1_1, y1r);
-    psi_r_p1_m1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_1_3, y1r);
-    psi_r_p1_m3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_1_5, y1r);
-    psi_r_p1_m5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_1_7, y1r);
-    psi_r_p1_m7 = _mm256_abs_epi16(xmm2);
-
-    xmm2 = _mm256_adds_epi16(rho_rmi_1_7, y1r);
-    psi_r_m1_p7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_1_5, y1r);
-    psi_r_m1_p5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_1_3, y1r);
-    psi_r_m1_p3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_1_1, y1r);
-    psi_r_m1_p1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_1_1, y1r);
-    psi_r_m1_m1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_1_3, y1r);
-    psi_r_m1_m3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_1_5, y1r);
-    psi_r_m1_m5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_1_7, y1r);
-    psi_r_m1_m7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_3_7, y1r);
-    psi_r_m3_p7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_3_5, y1r);
-    psi_r_m3_p5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_3_3, y1r);
-    psi_r_m3_p3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_3_1, y1r);
-    psi_r_m3_p1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_3_1, y1r);
-    psi_r_m3_m1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_3_3, y1r);
-    psi_r_m3_m3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_3_5, y1r);
-    psi_r_m3_m5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_3_7, y1r);
-    psi_r_m3_m7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_5_7, y1r);
-    psi_r_m5_p7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_5_5, y1r);
-    psi_r_m5_p5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_5_3, y1r);
-    psi_r_m5_p3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_5_1, y1r);
-    psi_r_m5_p1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_5_1, y1r);
-    psi_r_m5_m1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_5_3, y1r);
-    psi_r_m5_m3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_5_5, y1r);
-    psi_r_m5_m5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_5_7, y1r);
-    psi_r_m5_m7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_7_7, y1r);
-    psi_r_m7_p7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_7_5, y1r);
-    psi_r_m7_p5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_7_3, y1r);
-    psi_r_m7_p3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_7_1, y1r);
-    psi_r_m7_p1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_7_1, y1r);
-    psi_r_m7_m1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_7_3, y1r);
-    psi_r_m7_m3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_7_5, y1r);
-    psi_r_m7_m5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_7_7, y1r);
-    psi_r_m7_m7 = _mm256_abs_epi16(xmm2);
-
-    // Psi_i calculation from rho_rpi or rho_rmi
-    xmm2 = _mm256_subs_epi16(rho_rmi_7_7, y1i);
-    psi_i_p7_p7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_5_7, y1i);
-    psi_i_p7_p5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_3_7, y1i);
-    psi_i_p7_p3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_1_7, y1i);
-    psi_i_p7_p1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_1_7, y1i);
-    psi_i_p7_m1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_3_7, y1i);
-    psi_i_p7_m3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_5_7, y1i);
-    psi_i_p7_m5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_7_7, y1i);
-    psi_i_p7_m7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_7_5, y1i);
-    psi_i_p5_p7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_5_5, y1i);
-    psi_i_p5_p5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_3_5, y1i);
-    psi_i_p5_p3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_1_5, y1i);
-    psi_i_p5_p1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_1_5, y1i);
-    psi_i_p5_m1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_3_5, y1i);
-    psi_i_p5_m3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_5_5, y1i);
-    psi_i_p5_m5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_7_5, y1i);
-    psi_i_p5_m7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_7_3, y1i);
-    psi_i_p3_p7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_5_3, y1i);
-    psi_i_p3_p5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_3_3, y1i);
-    psi_i_p3_p3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_1_3, y1i);
-    psi_i_p3_p1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_1_3, y1i);
-    psi_i_p3_m1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_3_3, y1i);
-    psi_i_p3_m3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_5_3, y1i);
-    psi_i_p3_m5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_7_3, y1i);
-    psi_i_p3_m7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_7_1, y1i);
-    psi_i_p1_p7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_5_1, y1i);
-    psi_i_p1_p5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_3_1, y1i);
-    psi_i_p1_p3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_1_1, y1i);
-    psi_i_p1_p1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_1_1, y1i);
-    psi_i_p1_m1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_3_1, y1i);
-    psi_i_p1_m3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_5_1, y1i);
-    psi_i_p1_m5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_7_1, y1i);
-    psi_i_p1_m7 = _mm256_abs_epi16(xmm2);
-
-    xmm2 = _mm256_subs_epi16(rho_rpi_7_1, y1i);
-    psi_i_m1_p7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_5_1, y1i);
-    psi_i_m1_p5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_3_1, y1i);
-    psi_i_m1_p3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_1_1, y1i);
-    psi_i_m1_p1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_1_1, y1i);
-    psi_i_m1_m1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_3_1, y1i);
-    psi_i_m1_m3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_5_1, y1i);
-    psi_i_m1_m5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_7_1, y1i);
-    psi_i_m1_m7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_7_3, y1i);
-    psi_i_m3_p7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_5_3, y1i);
-    psi_i_m3_p5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_3_3, y1i);
-    psi_i_m3_p3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_1_3, y1i);
-    psi_i_m3_p1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_1_3, y1i);
-    psi_i_m3_m1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_3_3, y1i);
-    psi_i_m3_m3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_5_3, y1i);
-    psi_i_m3_m5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_7_3, y1i);
-    psi_i_m3_m7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_7_5, y1i);
-    psi_i_m5_p7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_5_5, y1i);
-    psi_i_m5_p5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_3_5, y1i);
-    psi_i_m5_p3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_1_5, y1i);
-    psi_i_m5_p1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_1_5, y1i);
-    psi_i_m5_m1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_3_5, y1i);
-    psi_i_m5_m3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_5_5, y1i);
-    psi_i_m5_m5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_7_5, y1i);
-    psi_i_m5_m7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_7_7, y1i);
-    psi_i_m7_p7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_5_7, y1i);
-    psi_i_m7_p5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_3_7, y1i);
-    psi_i_m7_p3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_1_7, y1i);
-    psi_i_m7_p1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_1_7, y1i);
-    psi_i_m7_m1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_3_7, y1i);
-    psi_i_m7_m3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_5_7, y1i);
-    psi_i_m7_m5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_7_7, y1i);
-    psi_i_m7_m7 = _mm256_abs_epi16(xmm2);
-
-/*
-    // Rearrange desired MF output
-    xmm0 = stream0_128i_in[i];
-    xmm1 = stream0_128i_in[i+1];
-    xmm0 = _mm256_shufflelo_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm256_shufflehi_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm256_shuffle_epi32(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm256_shufflelo_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm256_shufflehi_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm256_shuffle_epi32(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    //xmm0 = [Re(0,1) Re(2,3) Im(0,1) Im(2,3)]
-    //xmm1 = [Re(4,5) Re(6,7) Im(4,5) Im(6,7)]
-    y0r = _mm256_unpacklo_epi64(xmm0,xmm1); // = [y0r(1),y0r(2),y0r(3),y0r(4)]
-    y0i = _mm256_unpackhi_epi64(xmm0,xmm1);
-*/
-    seperate_real_imag_parts(&y0r, &y0i, stream0_256i_in[i], stream0_256i_in[i+1]);
-
-    /*
-    // Rearrange desired channel magnitudes
-    xmm2 = ch_mag_128i[i]; // = [|h|^2(1),|h|^2(1),|h|^2(2),|h|^2(2)]*(2/sqrt(10))
-    xmm3 = ch_mag_128i[i+1]; // = [|h|^2(3),|h|^2(3),|h|^2(4),|h|^2(4)]*(2/sqrt(10))
-    xmm2 = _mm256_shufflelo_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm2 = _mm256_shufflehi_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm2 = _mm256_shuffle_epi32(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm256_shufflelo_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm256_shufflehi_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm256_shuffle_epi32(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    ch_mag_des = _mm256_unpacklo_epi64(xmm2,xmm3);
-    */
-
-    seperate_real_imag_parts(&ch_mag_des, &xmm2, ch_mag_256i[i], ch_mag_256i[i+1]);
-
-    // Rearrange interfering channel magnitudes
-    /*
-    xmm2 = ch_mag_128i_i[i];
-    xmm3 = ch_mag_128i_i[i+1];
-    xmm2 = _mm256_shufflelo_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm2 = _mm256_shufflehi_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm2 = _mm256_shuffle_epi32(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm256_shufflelo_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm256_shufflehi_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm256_shuffle_epi32(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    ch_mag_int  = _mm256_unpacklo_epi64(xmm2,xmm3);
-    */
-
-    seperate_real_imag_parts(&ch_mag_int, &xmm2, ch_mag_256i_i[i], ch_mag_256i_i[i+1]);
-
-    y0r_one_over_sqrt_21   = _mm256_mulhi_epi16(y0r, ONE_OVER_SQRT_42);
-    y0r_three_over_sqrt_21 = _mm256_mulhi_epi16(y0r, THREE_OVER_SQRT_42);
-    y0r_five_over_sqrt_21  = _mm256_mulhi_epi16(y0r, FIVE_OVER_SQRT_42);
-    y0r_five_over_sqrt_21  = _mm256_slli_epi16(y0r_five_over_sqrt_21, 1);
-    y0r_seven_over_sqrt_21 = _mm256_mulhi_epi16(y0r, SEVEN_OVER_SQRT_42);
-    y0r_seven_over_sqrt_21 = _mm256_slli_epi16(y0r_seven_over_sqrt_21, 2); // Q2.14
-
-    y0i_one_over_sqrt_21   = _mm256_mulhi_epi16(y0i, ONE_OVER_SQRT_42);
-    y0i_three_over_sqrt_21 = _mm256_mulhi_epi16(y0i, THREE_OVER_SQRT_42);
-    y0i_five_over_sqrt_21  = _mm256_mulhi_epi16(y0i, FIVE_OVER_SQRT_42);
-    y0i_five_over_sqrt_21  = _mm256_slli_epi16(y0i_five_over_sqrt_21, 1);
-    y0i_seven_over_sqrt_21 = _mm256_mulhi_epi16(y0i, SEVEN_OVER_SQRT_42);
-    y0i_seven_over_sqrt_21 = _mm256_slli_epi16(y0i_seven_over_sqrt_21, 2); // Q2.14
-
-    y0_p_7_1 = _mm256_adds_epi16(y0r_seven_over_sqrt_21, y0i_one_over_sqrt_21);
-    y0_p_7_3 = _mm256_adds_epi16(y0r_seven_over_sqrt_21, y0i_three_over_sqrt_21);
-    y0_p_7_5 = _mm256_adds_epi16(y0r_seven_over_sqrt_21, y0i_five_over_sqrt_21);
-    y0_p_7_7 = _mm256_adds_epi16(y0r_seven_over_sqrt_21, y0i_seven_over_sqrt_21);
-    y0_p_5_1 = _mm256_adds_epi16(y0r_five_over_sqrt_21, y0i_one_over_sqrt_21);
-    y0_p_5_3 = _mm256_adds_epi16(y0r_five_over_sqrt_21, y0i_three_over_sqrt_21);
-    y0_p_5_5 = _mm256_adds_epi16(y0r_five_over_sqrt_21, y0i_five_over_sqrt_21);
-    y0_p_5_7 = _mm256_adds_epi16(y0r_five_over_sqrt_21, y0i_seven_over_sqrt_21);
-    y0_p_3_1 = _mm256_adds_epi16(y0r_three_over_sqrt_21, y0i_one_over_sqrt_21);
-    y0_p_3_3 = _mm256_adds_epi16(y0r_three_over_sqrt_21, y0i_three_over_sqrt_21);
-    y0_p_3_5 = _mm256_adds_epi16(y0r_three_over_sqrt_21, y0i_five_over_sqrt_21);
-    y0_p_3_7 = _mm256_adds_epi16(y0r_three_over_sqrt_21, y0i_seven_over_sqrt_21);
-    y0_p_1_1 = _mm256_adds_epi16(y0r_one_over_sqrt_21, y0i_one_over_sqrt_21);
-    y0_p_1_3 = _mm256_adds_epi16(y0r_one_over_sqrt_21, y0i_three_over_sqrt_21);
-    y0_p_1_5 = _mm256_adds_epi16(y0r_one_over_sqrt_21, y0i_five_over_sqrt_21);
-    y0_p_1_7 = _mm256_adds_epi16(y0r_one_over_sqrt_21, y0i_seven_over_sqrt_21);
-
-    y0_m_1_1 = _mm256_subs_epi16(y0r_one_over_sqrt_21, y0i_one_over_sqrt_21);
-    y0_m_1_3 = _mm256_subs_epi16(y0r_one_over_sqrt_21, y0i_three_over_sqrt_21);
-    y0_m_1_5 = _mm256_subs_epi16(y0r_one_over_sqrt_21, y0i_five_over_sqrt_21);
-    y0_m_1_7 = _mm256_subs_epi16(y0r_one_over_sqrt_21, y0i_seven_over_sqrt_21);
-    y0_m_3_1 = _mm256_subs_epi16(y0r_three_over_sqrt_21, y0i_one_over_sqrt_21);
-    y0_m_3_3 = _mm256_subs_epi16(y0r_three_over_sqrt_21, y0i_three_over_sqrt_21);
-    y0_m_3_5 = _mm256_subs_epi16(y0r_three_over_sqrt_21, y0i_five_over_sqrt_21);
-    y0_m_3_7 = _mm256_subs_epi16(y0r_three_over_sqrt_21, y0i_seven_over_sqrt_21);
-    y0_m_5_1 = _mm256_subs_epi16(y0r_five_over_sqrt_21, y0i_one_over_sqrt_21);
-    y0_m_5_3 = _mm256_subs_epi16(y0r_five_over_sqrt_21, y0i_three_over_sqrt_21);
-    y0_m_5_5 = _mm256_subs_epi16(y0r_five_over_sqrt_21, y0i_five_over_sqrt_21);
-    y0_m_5_7 = _mm256_subs_epi16(y0r_five_over_sqrt_21, y0i_seven_over_sqrt_21);
-    y0_m_7_1 = _mm256_subs_epi16(y0r_seven_over_sqrt_21, y0i_one_over_sqrt_21);
-    y0_m_7_3 = _mm256_subs_epi16(y0r_seven_over_sqrt_21, y0i_three_over_sqrt_21);
-    y0_m_7_5 = _mm256_subs_epi16(y0r_seven_over_sqrt_21, y0i_five_over_sqrt_21);
-    y0_m_7_7 = _mm256_subs_epi16(y0r_seven_over_sqrt_21, y0i_seven_over_sqrt_21);
-
-    interference_abs_epi16(psi_r_p7_p7, ch_mag_int, a_r_p7_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p7_p5, ch_mag_int, a_r_p7_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p7_p3, ch_mag_int, a_r_p7_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p7_p1, ch_mag_int, a_r_p7_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p7_m1, ch_mag_int, a_r_p7_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p7_m3, ch_mag_int, a_r_p7_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p7_m5, ch_mag_int, a_r_p7_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p7_m7, ch_mag_int, a_r_p7_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p5_p7, ch_mag_int, a_r_p5_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p5_p5, ch_mag_int, a_r_p5_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p5_p3, ch_mag_int, a_r_p5_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p5_p1, ch_mag_int, a_r_p5_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p5_m1, ch_mag_int, a_r_p5_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p5_m3, ch_mag_int, a_r_p5_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p5_m5, ch_mag_int, a_r_p5_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p5_m7, ch_mag_int, a_r_p5_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p3_p7, ch_mag_int, a_r_p3_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p3_p5, ch_mag_int, a_r_p3_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p3_p3, ch_mag_int, a_r_p3_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p3_p1, ch_mag_int, a_r_p3_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p3_m1, ch_mag_int, a_r_p3_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p3_m3, ch_mag_int, a_r_p3_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p3_m5, ch_mag_int, a_r_p3_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p3_m7, ch_mag_int, a_r_p3_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p1_p7, ch_mag_int, a_r_p1_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p1_p5, ch_mag_int, a_r_p1_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p1_p3, ch_mag_int, a_r_p1_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p1_p1, ch_mag_int, a_r_p1_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p1_m1, ch_mag_int, a_r_p1_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p1_m3, ch_mag_int, a_r_p1_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p1_m5, ch_mag_int, a_r_p1_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p1_m7, ch_mag_int, a_r_p1_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m1_p7, ch_mag_int, a_r_m1_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m1_p5, ch_mag_int, a_r_m1_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m1_p3, ch_mag_int, a_r_m1_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m1_p1, ch_mag_int, a_r_m1_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m1_m1, ch_mag_int, a_r_m1_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m1_m3, ch_mag_int, a_r_m1_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m1_m5, ch_mag_int, a_r_m1_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m1_m7, ch_mag_int, a_r_m1_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m3_p7, ch_mag_int, a_r_m3_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m3_p5, ch_mag_int, a_r_m3_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m3_p3, ch_mag_int, a_r_m3_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m3_p1, ch_mag_int, a_r_m3_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m3_m1, ch_mag_int, a_r_m3_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m3_m3, ch_mag_int, a_r_m3_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m3_m5, ch_mag_int, a_r_m3_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m3_m7, ch_mag_int, a_r_m3_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m5_p7, ch_mag_int, a_r_m5_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m5_p5, ch_mag_int, a_r_m5_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m5_p3, ch_mag_int, a_r_m5_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m5_p1, ch_mag_int, a_r_m5_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m5_m1, ch_mag_int, a_r_m5_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m5_m3, ch_mag_int, a_r_m5_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m5_m5, ch_mag_int, a_r_m5_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m5_m7, ch_mag_int, a_r_m5_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m7_p7, ch_mag_int, a_r_m7_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m7_p5, ch_mag_int, a_r_m7_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m7_p3, ch_mag_int, a_r_m7_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m7_p1, ch_mag_int, a_r_m7_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m7_m1, ch_mag_int, a_r_m7_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m7_m3, ch_mag_int, a_r_m7_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m7_m5, ch_mag_int, a_r_m7_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m7_m7, ch_mag_int, a_r_m7_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-
-    interference_abs_epi16(psi_i_p7_p7, ch_mag_int, a_i_p7_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p7_p5, ch_mag_int, a_i_p7_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p7_p3, ch_mag_int, a_i_p7_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p7_p1, ch_mag_int, a_i_p7_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p7_m1, ch_mag_int, a_i_p7_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p7_m3, ch_mag_int, a_i_p7_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p7_m5, ch_mag_int, a_i_p7_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p7_m7, ch_mag_int, a_i_p7_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p5_p7, ch_mag_int, a_i_p5_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p5_p5, ch_mag_int, a_i_p5_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p5_p3, ch_mag_int, a_i_p5_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p5_p1, ch_mag_int, a_i_p5_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p5_m1, ch_mag_int, a_i_p5_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p5_m3, ch_mag_int, a_i_p5_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p5_m5, ch_mag_int, a_i_p5_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p5_m7, ch_mag_int, a_i_p5_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p3_p7, ch_mag_int, a_i_p3_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p3_p5, ch_mag_int, a_i_p3_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p3_p3, ch_mag_int, a_i_p3_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p3_p1, ch_mag_int, a_i_p3_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p3_m1, ch_mag_int, a_i_p3_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p3_m3, ch_mag_int, a_i_p3_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p3_m5, ch_mag_int, a_i_p3_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p3_m7, ch_mag_int, a_i_p3_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p1_p7, ch_mag_int, a_i_p1_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p1_p5, ch_mag_int, a_i_p1_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p1_p3, ch_mag_int, a_i_p1_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p1_p1, ch_mag_int, a_i_p1_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p1_m1, ch_mag_int, a_i_p1_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p1_m3, ch_mag_int, a_i_p1_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p1_m5, ch_mag_int, a_i_p1_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p1_m7, ch_mag_int, a_i_p1_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m1_p7, ch_mag_int, a_i_m1_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m1_p5, ch_mag_int, a_i_m1_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m1_p3, ch_mag_int, a_i_m1_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m1_p1, ch_mag_int, a_i_m1_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m1_m1, ch_mag_int, a_i_m1_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m1_m3, ch_mag_int, a_i_m1_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m1_m5, ch_mag_int, a_i_m1_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m1_m7, ch_mag_int, a_i_m1_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m3_p7, ch_mag_int, a_i_m3_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m3_p5, ch_mag_int, a_i_m3_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m3_p3, ch_mag_int, a_i_m3_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m3_p1, ch_mag_int, a_i_m3_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m3_m1, ch_mag_int, a_i_m3_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m3_m3, ch_mag_int, a_i_m3_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m3_m5, ch_mag_int, a_i_m3_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m3_m7, ch_mag_int, a_i_m3_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m5_p7, ch_mag_int, a_i_m5_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m5_p5, ch_mag_int, a_i_m5_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m5_p3, ch_mag_int, a_i_m5_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m5_p1, ch_mag_int, a_i_m5_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m5_m1, ch_mag_int, a_i_m5_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m5_m3, ch_mag_int, a_i_m5_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m5_m5, ch_mag_int, a_i_m5_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m5_m7, ch_mag_int, a_i_m5_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m7_p7, ch_mag_int, a_i_m7_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m7_p5, ch_mag_int, a_i_m7_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m7_p3, ch_mag_int, a_i_m7_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m7_p1, ch_mag_int, a_i_m7_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m7_m1, ch_mag_int, a_i_m7_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m7_m3, ch_mag_int, a_i_m7_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m7_m5, ch_mag_int, a_i_m7_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m7_m7, ch_mag_int, a_i_m7_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-
-    // Calculation of a group of two terms in the bit metric involving product of psi and interference
-    prodsum_psi_a_epi16(psi_r_p7_p7, a_r_p7_p7, psi_i_p7_p7, a_i_p7_p7, psi_a_p7_p7);
-    prodsum_psi_a_epi16(psi_r_p7_p5, a_r_p7_p5, psi_i_p7_p5, a_i_p7_p5, psi_a_p7_p5);
-    prodsum_psi_a_epi16(psi_r_p7_p3, a_r_p7_p3, psi_i_p7_p3, a_i_p7_p3, psi_a_p7_p3);
-    prodsum_psi_a_epi16(psi_r_p7_p1, a_r_p7_p1, psi_i_p7_p1, a_i_p7_p1, psi_a_p7_p1);
-    prodsum_psi_a_epi16(psi_r_p7_m1, a_r_p7_m1, psi_i_p7_m1, a_i_p7_m1, psi_a_p7_m1);
-    prodsum_psi_a_epi16(psi_r_p7_m3, a_r_p7_m3, psi_i_p7_m3, a_i_p7_m3, psi_a_p7_m3);
-    prodsum_psi_a_epi16(psi_r_p7_m5, a_r_p7_m5, psi_i_p7_m5, a_i_p7_m5, psi_a_p7_m5);
-    prodsum_psi_a_epi16(psi_r_p7_m7, a_r_p7_m7, psi_i_p7_m7, a_i_p7_m7, psi_a_p7_m7);
-    prodsum_psi_a_epi16(psi_r_p5_p7, a_r_p5_p7, psi_i_p5_p7, a_i_p5_p7, psi_a_p5_p7);
-    prodsum_psi_a_epi16(psi_r_p5_p5, a_r_p5_p5, psi_i_p5_p5, a_i_p5_p5, psi_a_p5_p5);
-    prodsum_psi_a_epi16(psi_r_p5_p3, a_r_p5_p3, psi_i_p5_p3, a_i_p5_p3, psi_a_p5_p3);
-    prodsum_psi_a_epi16(psi_r_p5_p1, a_r_p5_p1, psi_i_p5_p1, a_i_p5_p1, psi_a_p5_p1);
-    prodsum_psi_a_epi16(psi_r_p5_m1, a_r_p5_m1, psi_i_p5_m1, a_i_p5_m1, psi_a_p5_m1);
-    prodsum_psi_a_epi16(psi_r_p5_m3, a_r_p5_m3, psi_i_p5_m3, a_i_p5_m3, psi_a_p5_m3);
-    prodsum_psi_a_epi16(psi_r_p5_m5, a_r_p5_m5, psi_i_p5_m5, a_i_p5_m5, psi_a_p5_m5);
-    prodsum_psi_a_epi16(psi_r_p5_m7, a_r_p5_m7, psi_i_p5_m7, a_i_p5_m7, psi_a_p5_m7);
-    prodsum_psi_a_epi16(psi_r_p3_p7, a_r_p3_p7, psi_i_p3_p7, a_i_p3_p7, psi_a_p3_p7);
-    prodsum_psi_a_epi16(psi_r_p3_p5, a_r_p3_p5, psi_i_p3_p5, a_i_p3_p5, psi_a_p3_p5);
-    prodsum_psi_a_epi16(psi_r_p3_p3, a_r_p3_p3, psi_i_p3_p3, a_i_p3_p3, psi_a_p3_p3);
-    prodsum_psi_a_epi16(psi_r_p3_p1, a_r_p3_p1, psi_i_p3_p1, a_i_p3_p1, psi_a_p3_p1);
-    prodsum_psi_a_epi16(psi_r_p3_m1, a_r_p3_m1, psi_i_p3_m1, a_i_p3_m1, psi_a_p3_m1);
-    prodsum_psi_a_epi16(psi_r_p3_m3, a_r_p3_m3, psi_i_p3_m3, a_i_p3_m3, psi_a_p3_m3);
-    prodsum_psi_a_epi16(psi_r_p3_m5, a_r_p3_m5, psi_i_p3_m5, a_i_p3_m5, psi_a_p3_m5);
-    prodsum_psi_a_epi16(psi_r_p3_m7, a_r_p3_m7, psi_i_p3_m7, a_i_p3_m7, psi_a_p3_m7);
-    prodsum_psi_a_epi16(psi_r_p1_p7, a_r_p1_p7, psi_i_p1_p7, a_i_p1_p7, psi_a_p1_p7);
-    prodsum_psi_a_epi16(psi_r_p1_p5, a_r_p1_p5, psi_i_p1_p5, a_i_p1_p5, psi_a_p1_p5);
-    prodsum_psi_a_epi16(psi_r_p1_p3, a_r_p1_p3, psi_i_p1_p3, a_i_p1_p3, psi_a_p1_p3);
-    prodsum_psi_a_epi16(psi_r_p1_p1, a_r_p1_p1, psi_i_p1_p1, a_i_p1_p1, psi_a_p1_p1);
-    prodsum_psi_a_epi16(psi_r_p1_m1, a_r_p1_m1, psi_i_p1_m1, a_i_p1_m1, psi_a_p1_m1);
-    prodsum_psi_a_epi16(psi_r_p1_m3, a_r_p1_m3, psi_i_p1_m3, a_i_p1_m3, psi_a_p1_m3);
-    prodsum_psi_a_epi16(psi_r_p1_m5, a_r_p1_m5, psi_i_p1_m5, a_i_p1_m5, psi_a_p1_m5);
-    prodsum_psi_a_epi16(psi_r_p1_m7, a_r_p1_m7, psi_i_p1_m7, a_i_p1_m7, psi_a_p1_m7);
-    prodsum_psi_a_epi16(psi_r_m1_p7, a_r_m1_p7, psi_i_m1_p7, a_i_m1_p7, psi_a_m1_p7);
-    prodsum_psi_a_epi16(psi_r_m1_p5, a_r_m1_p5, psi_i_m1_p5, a_i_m1_p5, psi_a_m1_p5);
-    prodsum_psi_a_epi16(psi_r_m1_p3, a_r_m1_p3, psi_i_m1_p3, a_i_m1_p3, psi_a_m1_p3);
-    prodsum_psi_a_epi16(psi_r_m1_p1, a_r_m1_p1, psi_i_m1_p1, a_i_m1_p1, psi_a_m1_p1);
-    prodsum_psi_a_epi16(psi_r_m1_m1, a_r_m1_m1, psi_i_m1_m1, a_i_m1_m1, psi_a_m1_m1);
-    prodsum_psi_a_epi16(psi_r_m1_m3, a_r_m1_m3, psi_i_m1_m3, a_i_m1_m3, psi_a_m1_m3);
-    prodsum_psi_a_epi16(psi_r_m1_m5, a_r_m1_m5, psi_i_m1_m5, a_i_m1_m5, psi_a_m1_m5);
-    prodsum_psi_a_epi16(psi_r_m1_m7, a_r_m1_m7, psi_i_m1_m7, a_i_m1_m7, psi_a_m1_m7);
-    prodsum_psi_a_epi16(psi_r_m3_p7, a_r_m3_p7, psi_i_m3_p7, a_i_m3_p7, psi_a_m3_p7);
-    prodsum_psi_a_epi16(psi_r_m3_p5, a_r_m3_p5, psi_i_m3_p5, a_i_m3_p5, psi_a_m3_p5);
-    prodsum_psi_a_epi16(psi_r_m3_p3, a_r_m3_p3, psi_i_m3_p3, a_i_m3_p3, psi_a_m3_p3);
-    prodsum_psi_a_epi16(psi_r_m3_p1, a_r_m3_p1, psi_i_m3_p1, a_i_m3_p1, psi_a_m3_p1);
-    prodsum_psi_a_epi16(psi_r_m3_m1, a_r_m3_m1, psi_i_m3_m1, a_i_m3_m1, psi_a_m3_m1);
-    prodsum_psi_a_epi16(psi_r_m3_m3, a_r_m3_m3, psi_i_m3_m3, a_i_m3_m3, psi_a_m3_m3);
-    prodsum_psi_a_epi16(psi_r_m3_m5, a_r_m3_m5, psi_i_m3_m5, a_i_m3_m5, psi_a_m3_m5);
-    prodsum_psi_a_epi16(psi_r_m3_m7, a_r_m3_m7, psi_i_m3_m7, a_i_m3_m7, psi_a_m3_m7);
-    prodsum_psi_a_epi16(psi_r_m5_p7, a_r_m5_p7, psi_i_m5_p7, a_i_m5_p7, psi_a_m5_p7);
-    prodsum_psi_a_epi16(psi_r_m5_p5, a_r_m5_p5, psi_i_m5_p5, a_i_m5_p5, psi_a_m5_p5);
-    prodsum_psi_a_epi16(psi_r_m5_p3, a_r_m5_p3, psi_i_m5_p3, a_i_m5_p3, psi_a_m5_p3);
-    prodsum_psi_a_epi16(psi_r_m5_p1, a_r_m5_p1, psi_i_m5_p1, a_i_m5_p1, psi_a_m5_p1);
-    prodsum_psi_a_epi16(psi_r_m5_m1, a_r_m5_m1, psi_i_m5_m1, a_i_m5_m1, psi_a_m5_m1);
-    prodsum_psi_a_epi16(psi_r_m5_m3, a_r_m5_m3, psi_i_m5_m3, a_i_m5_m3, psi_a_m5_m3);
-    prodsum_psi_a_epi16(psi_r_m5_m5, a_r_m5_m5, psi_i_m5_m5, a_i_m5_m5, psi_a_m5_m5);
-    prodsum_psi_a_epi16(psi_r_m5_m7, a_r_m5_m7, psi_i_m5_m7, a_i_m5_m7, psi_a_m5_m7);
-    prodsum_psi_a_epi16(psi_r_m7_p7, a_r_m7_p7, psi_i_m7_p7, a_i_m7_p7, psi_a_m7_p7);
-    prodsum_psi_a_epi16(psi_r_m7_p5, a_r_m7_p5, psi_i_m7_p5, a_i_m7_p5, psi_a_m7_p5);
-    prodsum_psi_a_epi16(psi_r_m7_p3, a_r_m7_p3, psi_i_m7_p3, a_i_m7_p3, psi_a_m7_p3);
-    prodsum_psi_a_epi16(psi_r_m7_p1, a_r_m7_p1, psi_i_m7_p1, a_i_m7_p1, psi_a_m7_p1);
-    prodsum_psi_a_epi16(psi_r_m7_m1, a_r_m7_m1, psi_i_m7_m1, a_i_m7_m1, psi_a_m7_m1);
-    prodsum_psi_a_epi16(psi_r_m7_m3, a_r_m7_m3, psi_i_m7_m3, a_i_m7_m3, psi_a_m7_m3);
-    prodsum_psi_a_epi16(psi_r_m7_m5, a_r_m7_m5, psi_i_m7_m5, a_i_m7_m5, psi_a_m7_m5);
-    prodsum_psi_a_epi16(psi_r_m7_m7, a_r_m7_m7, psi_i_m7_m7, a_i_m7_m7, psi_a_m7_m7);
-
-    // Calculation of a group of two terms in the bit metric involving squares of interference
-    square_a_epi16(a_r_p7_p7, a_i_p7_p7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p7_p7);
-    square_a_epi16(a_r_p7_p5, a_i_p7_p5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p7_p5);
-    square_a_epi16(a_r_p7_p3, a_i_p7_p3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p7_p3);
-    square_a_epi16(a_r_p7_p1, a_i_p7_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p7_p1);
-    square_a_epi16(a_r_p7_m1, a_i_p7_m1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p7_m1);
-    square_a_epi16(a_r_p7_m3, a_i_p7_m3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p7_m3);
-    square_a_epi16(a_r_p7_m5, a_i_p7_m5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p7_m5);
-    square_a_epi16(a_r_p7_m7, a_i_p7_m7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p7_m7);
-    square_a_epi16(a_r_p5_p7, a_i_p5_p7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p5_p7);
-    square_a_epi16(a_r_p5_p5, a_i_p5_p5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p5_p5);
-    square_a_epi16(a_r_p5_p3, a_i_p5_p3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p5_p3);
-    square_a_epi16(a_r_p5_p1, a_i_p5_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p5_p1);
-    square_a_epi16(a_r_p5_m1, a_i_p5_m1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p5_m1);
-    square_a_epi16(a_r_p5_m3, a_i_p5_m3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p5_m3);
-    square_a_epi16(a_r_p5_m5, a_i_p5_m5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p5_m5);
-    square_a_epi16(a_r_p5_m7, a_i_p5_m7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p5_m7);
-    square_a_epi16(a_r_p3_p7, a_i_p3_p7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p3_p7);
-    square_a_epi16(a_r_p3_p5, a_i_p3_p5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p3_p5);
-    square_a_epi16(a_r_p3_p3, a_i_p3_p3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p3_p3);
-    square_a_epi16(a_r_p3_p1, a_i_p3_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p3_p1);
-    square_a_epi16(a_r_p3_m1, a_i_p3_m1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p3_m1);
-    square_a_epi16(a_r_p3_m3, a_i_p3_m3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p3_m3);
-    square_a_epi16(a_r_p3_m5, a_i_p3_m5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p3_m5);
-    square_a_epi16(a_r_p3_m7, a_i_p3_m7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p3_m7);
-    square_a_epi16(a_r_p1_p7, a_i_p1_p7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_p7);
-    square_a_epi16(a_r_p1_p5, a_i_p1_p5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_p5);
-    square_a_epi16(a_r_p1_p3, a_i_p1_p3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_p3);
-    square_a_epi16(a_r_p1_p1, a_i_p1_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_p1);
-    square_a_epi16(a_r_p1_m1, a_i_p1_m1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_m1);
-    square_a_epi16(a_r_p1_m3, a_i_p1_m3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_m3);
-    square_a_epi16(a_r_p1_m5, a_i_p1_m5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_m5);
-    square_a_epi16(a_r_p1_m7, a_i_p1_m7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_m7);
-    square_a_epi16(a_r_m1_p7, a_i_m1_p7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m1_p7);
-    square_a_epi16(a_r_m1_p5, a_i_m1_p5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m1_p5);
-    square_a_epi16(a_r_m1_p3, a_i_m1_p3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m1_p3);
-    square_a_epi16(a_r_m1_p1, a_i_m1_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m1_p1);
-    square_a_epi16(a_r_m1_m1, a_i_m1_m1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m1_m1);
-    square_a_epi16(a_r_m1_m3, a_i_m1_m3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m1_m3);
-    square_a_epi16(a_r_m1_m5, a_i_m1_m5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m1_m5);
-    square_a_epi16(a_r_m1_m7, a_i_m1_m7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m1_m7);
-    square_a_epi16(a_r_m3_p7, a_i_m3_p7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m3_p7);
-    square_a_epi16(a_r_m3_p5, a_i_m3_p5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m3_p5);
-    square_a_epi16(a_r_m3_p3, a_i_m3_p3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m3_p3);
-    square_a_epi16(a_r_m3_p1, a_i_m3_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m3_p1);
-    square_a_epi16(a_r_m3_m1, a_i_m3_m1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m3_m1);
-    square_a_epi16(a_r_m3_m3, a_i_m3_m3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m3_m3);
-    square_a_epi16(a_r_m3_m5, a_i_m3_m5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m3_m5);
-    square_a_epi16(a_r_m3_m7, a_i_m3_m7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m3_m7);
-    square_a_epi16(a_r_m5_p7, a_i_m5_p7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m5_p7);
-    square_a_epi16(a_r_m5_p5, a_i_m5_p5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m5_p5);
-    square_a_epi16(a_r_m5_p3, a_i_m5_p3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m5_p3);
-    square_a_epi16(a_r_m5_p1, a_i_m5_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m5_p1);
-    square_a_epi16(a_r_m5_m1, a_i_m5_m1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m5_m1);
-    square_a_epi16(a_r_m5_m3, a_i_m5_m3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m5_m3);
-    square_a_epi16(a_r_m5_m5, a_i_m5_m5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m5_m5);
-    square_a_epi16(a_r_m5_m7, a_i_m5_m7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m5_m7);
-    square_a_epi16(a_r_m7_p7, a_i_m7_p7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m7_p7);
-    square_a_epi16(a_r_m7_p5, a_i_m7_p5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m7_p5);
-    square_a_epi16(a_r_m7_p3, a_i_m7_p3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m7_p3);
-    square_a_epi16(a_r_m7_p1, a_i_m7_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m7_p1);
-    square_a_epi16(a_r_m7_m1, a_i_m7_m1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m7_m1);
-    square_a_epi16(a_r_m7_m3, a_i_m7_m3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m7_m3);
-    square_a_epi16(a_r_m7_m5, a_i_m7_m5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m7_m5);
-    square_a_epi16(a_r_m7_m7, a_i_m7_m7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m7_m7);
-
-    // Computing different multiples of ||h0||^2
-    // x=1, y=1
-    ch_mag_2_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,ONE_OVER_FOUR_SQRT_42);
-    ch_mag_2_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_2_over_42_with_sigma2,1);
-    // x=1, y=3
-    ch_mag_10_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,FIVE_OVER_FOUR_SQRT_42);
-    ch_mag_10_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_10_over_42_with_sigma2,1);
-    // x=1, x=5
-    ch_mag_26_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,THIRTEEN_OVER_FOUR_SQRT_42);
-    ch_mag_26_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_26_over_42_with_sigma2,1);
-    // x=1, y=7
-    ch_mag_50_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,TWENTYFIVE_OVER_FOUR_SQRT_42);
-    ch_mag_50_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_50_over_42_with_sigma2,1);
-    // x=3, y=3
-    ch_mag_18_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,NINE_OVER_FOUR_SQRT_42);
-    ch_mag_18_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_18_over_42_with_sigma2,1);
-    // x=3, y=5
-    ch_mag_34_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,SEVENTEEN_OVER_FOUR_SQRT_42);
-    ch_mag_34_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_34_over_42_with_sigma2,1);
-    // x=3, y=7
-    ch_mag_58_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,TWENTYNINE_OVER_FOUR_SQRT_42);
-    ch_mag_58_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_58_over_42_with_sigma2,2);
-    // x=5, y=5
-    ch_mag_50_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,TWENTYFIVE_OVER_FOUR_SQRT_42);
-    ch_mag_50_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_50_over_42_with_sigma2,1);
-    // x=5, y=7
-    ch_mag_74_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,THIRTYSEVEN_OVER_FOUR_SQRT_42);
-    ch_mag_74_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_74_over_42_with_sigma2,2);
-    // x=7, y=7
-    ch_mag_98_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,FORTYNINE_OVER_FOUR_SQRT_42);
-    ch_mag_98_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_98_over_42_with_sigma2,2);
-
-    // Computing Metrics
-    xmm0 = _mm256_subs_epi16(psi_a_p7_p7, a_sq_p7_p7);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_p_7_7);
-    bit_met_p7_p7 = _mm256_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p7_p5, a_sq_p7_p5);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_p_7_5);
-    bit_met_p7_p5 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p7_p3, a_sq_p7_p3);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_p_7_3);
-    bit_met_p7_p3 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p7_p1, a_sq_p7_p1);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_p_7_1);
-    bit_met_p7_p1 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p7_m1, a_sq_p7_m1);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_m_7_1);
-    bit_met_p7_m1 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p7_m3, a_sq_p7_m3);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_m_7_3);
-    bit_met_p7_m3 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p7_m5, a_sq_p7_m5);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_m_7_5);
-    bit_met_p7_m5 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p7_m7, a_sq_p7_m7);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_m_7_7);
-    bit_met_p7_m7 = _mm256_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p5_p7, a_sq_p5_p7);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_p_5_7);
-    bit_met_p5_p7 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p5_p5, a_sq_p5_p5);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_p_5_5);
-    bit_met_p5_p5 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p5_p3, a_sq_p5_p3);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_p_5_3);
-    bit_met_p5_p3 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p5_p1, a_sq_p5_p1);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_p_5_1);
-    bit_met_p5_p1 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p5_m1, a_sq_p5_m1);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_m_5_1);
-    bit_met_p5_m1 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p5_m3, a_sq_p5_m3);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_m_5_3);
-    bit_met_p5_m3 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p5_m5, a_sq_p5_m5);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_m_5_5);
-    bit_met_p5_m5 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p5_m7, a_sq_p5_m7);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_m_5_7);
-    bit_met_p5_m7 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p3_p7, a_sq_p3_p7);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_p_3_7);
-    bit_met_p3_p7 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p3_p5, a_sq_p3_p5);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_p_3_5);
-    bit_met_p3_p5 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p3_p3, a_sq_p3_p3);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_p_3_3);
-    bit_met_p3_p3 = _mm256_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p3_p1, a_sq_p3_p1);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_p_3_1);
-    bit_met_p3_p1 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p3_m1, a_sq_p3_m1);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_m_3_1);
-    bit_met_p3_m1 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p3_m3, a_sq_p3_m3);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_m_3_3);
-    bit_met_p3_m3 = _mm256_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p3_m5, a_sq_p3_m5);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_m_3_5);
-    bit_met_p3_m5 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p3_m7, a_sq_p3_m7);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_m_3_7);
-    bit_met_p3_m7 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p1_p7, a_sq_p1_p7);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_p_1_7);
-    bit_met_p1_p7 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p1_p5, a_sq_p1_p5);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_p_1_5);
-    bit_met_p1_p5 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p1_p3, a_sq_p1_p3);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_p_1_3);
-    bit_met_p1_p3 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p1_p1, a_sq_p1_p1);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_p_1_1);
-    bit_met_p1_p1 = _mm256_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p1_m1, a_sq_p1_m1);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_m_1_1);
-    bit_met_p1_m1 = _mm256_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p1_m3, a_sq_p1_m3);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_m_1_3);
-    bit_met_p1_m3 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p1_m5, a_sq_p1_m5);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_m_1_5);
-    bit_met_p1_m5 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p1_m7, a_sq_p1_m7);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_m_1_7);
-    bit_met_p1_m7 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-
-    xmm0 = _mm256_subs_epi16(psi_a_m1_p7, a_sq_m1_p7);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_m_1_7);
-    bit_met_m1_p7 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m1_p5, a_sq_m1_p5);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_m_1_5);
-    bit_met_m1_p5 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m1_p3, a_sq_m1_p3);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_m_1_3);
-    bit_met_m1_p3 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m1_p1, a_sq_m1_p1);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_m_1_1);
-    bit_met_m1_p1 = _mm256_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m1_m1, a_sq_m1_m1);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_p_1_1);
-    bit_met_m1_m1 = _mm256_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m1_m3, a_sq_m1_m3);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_p_1_3);
-    bit_met_m1_m3 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m1_m5, a_sq_m1_m5);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_p_1_5);
-    bit_met_m1_m5 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m1_m7, a_sq_m1_m7);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_p_1_7);
-    bit_met_m1_m7 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m3_p7, a_sq_m3_p7);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_m_3_7);
-    bit_met_m3_p7 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m3_p5, a_sq_m3_p5);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_m_3_5);
-    bit_met_m3_p5 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m3_p3, a_sq_m3_p3);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_m_3_3);
-    bit_met_m3_p3 = _mm256_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m3_p1, a_sq_m3_p1);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_m_3_1);
-    bit_met_m3_p1 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m3_m1, a_sq_m3_m1);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_p_3_1);
-    bit_met_m3_m1 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m3_m3, a_sq_m3_m3);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_p_3_3);
-    bit_met_m3_m3 = _mm256_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m3_m5, a_sq_m3_m5);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_p_3_5);
-    bit_met_m3_m5 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m3_m7, a_sq_m3_m7);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_p_3_7);
-    bit_met_m3_m7 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m5_p7, a_sq_m5_p7);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_m_5_7);
-    bit_met_m5_p7 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m5_p5, a_sq_m5_p5);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_m_5_5);
-    bit_met_m5_p5 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m5_p3, a_sq_m5_p3);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_m_5_3);
-    bit_met_m5_p3 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m5_p1, a_sq_m5_p1);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_m_5_1);
-    bit_met_m5_p1 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m5_m1, a_sq_m5_m1);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_p_5_1);
-    bit_met_m5_m1 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m5_m3, a_sq_m5_m3);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_p_5_3);
-    bit_met_m5_m3 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m5_m5, a_sq_m5_m5);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_p_5_5);
-    bit_met_m5_m5 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m5_m7, a_sq_m5_m7);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_p_5_7);
-    bit_met_m5_m7 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m7_p7, a_sq_m7_p7);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_m_7_7);
-    bit_met_m7_p7 = _mm256_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m7_p5, a_sq_m7_p5);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_m_7_5);
-    bit_met_m7_p5 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m7_p3, a_sq_m7_p3);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_m_7_3);
-    bit_met_m7_p3 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m7_p1, a_sq_m7_p1);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_m_7_1);
-    bit_met_m7_p1 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m7_m1, a_sq_m7_m1);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_p_7_1);
-    bit_met_m7_m1 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m7_m3, a_sq_m7_m3);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_p_7_3);
-    bit_met_m7_m3 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m7_m5, a_sq_m7_m5);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_p_7_5);
-    bit_met_m7_m5 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m7_m7, a_sq_m7_m7);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_p_7_7);
-    bit_met_m7_m7 = _mm256_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2);
-
-    // Detection for 1st bit (LTE mapping)
-    // bit = 1
-    xmm0 = _mm256_max_epi16(bit_met_m7_p7, bit_met_m7_p5);
-    xmm1 = _mm256_max_epi16(bit_met_m7_p3, bit_met_m7_p1);
-    xmm2 = _mm256_max_epi16(bit_met_m7_m1, bit_met_m7_m3);
-    xmm3 = _mm256_max_epi16(bit_met_m7_m5, bit_met_m7_m7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(xmm4, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_m5_p7, bit_met_m5_p5);
-    xmm1 = _mm256_max_epi16(bit_met_m5_p3, bit_met_m5_p1);
-    xmm2 = _mm256_max_epi16(bit_met_m5_m1, bit_met_m5_m3);
-    xmm3 = _mm256_max_epi16(bit_met_m5_m5, bit_met_m5_m7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_m3_p7, bit_met_m3_p5);
-    xmm1 = _mm256_max_epi16(bit_met_m3_p3, bit_met_m3_p1);
-    xmm2 = _mm256_max_epi16(bit_met_m3_m1, bit_met_m3_m3);
-    xmm3 = _mm256_max_epi16(bit_met_m3_m5, bit_met_m3_m7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_m1_p7, bit_met_m1_p5);
-    xmm1 = _mm256_max_epi16(bit_met_m1_p3, bit_met_m1_p1);
-    xmm2 = _mm256_max_epi16(bit_met_m1_m1, bit_met_m1_m3);
-    xmm3 = _mm256_max_epi16(bit_met_m1_m5, bit_met_m1_m7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
-
-    // bit = 0
-    xmm0 = _mm256_max_epi16(bit_met_p7_p7, bit_met_p7_p5);
-    xmm1 = _mm256_max_epi16(bit_met_p7_p3, bit_met_p7_p1);
-    xmm2 = _mm256_max_epi16(bit_met_p7_m1, bit_met_p7_m3);
-    xmm3 = _mm256_max_epi16(bit_met_p7_m5, bit_met_p7_m7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(xmm4, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p5_p7, bit_met_p5_p5);
-    xmm1 = _mm256_max_epi16(bit_met_p5_p3, bit_met_p5_p1);
-    xmm2 = _mm256_max_epi16(bit_met_p5_m1, bit_met_p5_m3);
-    xmm3 = _mm256_max_epi16(bit_met_p5_m5, bit_met_p5_m7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p3_p7, bit_met_p3_p5);
-    xmm1 = _mm256_max_epi16(bit_met_p3_p3, bit_met_p3_p1);
-    xmm2 = _mm256_max_epi16(bit_met_p3_m1, bit_met_p3_m3);
-    xmm3 = _mm256_max_epi16(bit_met_p3_m5, bit_met_p3_m7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p1_p7, bit_met_p1_p5);
-    xmm1 = _mm256_max_epi16(bit_met_p1_p3, bit_met_p1_p1);
-    xmm2 = _mm256_max_epi16(bit_met_p1_m1, bit_met_p1_m3);
-    xmm3 = _mm256_max_epi16(bit_met_p1_m5, bit_met_p1_m7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
-
-    y0r = _mm256_subs_epi16(logmax_num_re0, logmax_den_re0);
-
-    // Detection for 2nd bit (LTE mapping)
-    // bit = 1
-    xmm0 = _mm256_max_epi16(bit_met_p7_m1, bit_met_p5_m1);
-    xmm1 = _mm256_max_epi16(bit_met_p3_m1, bit_met_p1_m1);
-    xmm2 = _mm256_max_epi16(bit_met_m1_m1, bit_met_m3_m1);
-    xmm3 = _mm256_max_epi16(bit_met_m5_m1, bit_met_m7_m1);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(xmm4, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p7_m3, bit_met_p5_m3);
-    xmm1 = _mm256_max_epi16(bit_met_p3_m3, bit_met_p1_m3);
-    xmm2 = _mm256_max_epi16(bit_met_m1_m3, bit_met_m3_m3);
-    xmm3 = _mm256_max_epi16(bit_met_m5_m3, bit_met_m7_m3);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p7_m5, bit_met_p5_m5);
-    xmm1 = _mm256_max_epi16(bit_met_p3_m5, bit_met_p1_m5);
-    xmm2 = _mm256_max_epi16(bit_met_m1_m5, bit_met_m3_m5);
-    xmm3 = _mm256_max_epi16(bit_met_m5_m5, bit_met_m7_m5);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p7_m7, bit_met_p5_m7);
-    xmm1 = _mm256_max_epi16(bit_met_p3_m7, bit_met_p1_m7);
-    xmm2 = _mm256_max_epi16(bit_met_m1_m7, bit_met_m3_m7);
-    xmm3 = _mm256_max_epi16(bit_met_m5_m7, bit_met_m7_m7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
-
-    // bit = 0
-    xmm0 = _mm256_max_epi16(bit_met_p7_p1, bit_met_p5_p1);
-    xmm1 = _mm256_max_epi16(bit_met_p3_p1, bit_met_p1_p1);
-    xmm2 = _mm256_max_epi16(bit_met_m1_p1, bit_met_m3_p1);
-    xmm3 = _mm256_max_epi16(bit_met_m5_p1, bit_met_m7_p1);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(xmm4, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p7_p3, bit_met_p5_p3);
-    xmm1 = _mm256_max_epi16(bit_met_p3_p3, bit_met_p1_p3);
-    xmm2 = _mm256_max_epi16(bit_met_m1_p3, bit_met_m3_p3);
-    xmm3 = _mm256_max_epi16(bit_met_m5_p3, bit_met_m7_p3);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p7_p5, bit_met_p5_p5);
-    xmm1 = _mm256_max_epi16(bit_met_p3_p5, bit_met_p1_p5);
-    xmm2 = _mm256_max_epi16(bit_met_m1_p5, bit_met_m3_p5);
-    xmm3 = _mm256_max_epi16(bit_met_m5_p5, bit_met_m7_p5);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p7_p7, bit_met_p5_p7);
-    xmm1 = _mm256_max_epi16(bit_met_p3_p7, bit_met_p1_p7);
-    xmm2 = _mm256_max_epi16(bit_met_m1_p7, bit_met_m3_p7);
-    xmm3 = _mm256_max_epi16(bit_met_m5_p7, bit_met_m7_p7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
-
-    y1r = _mm256_subs_epi16(logmax_num_re0, logmax_den_re0);
-
-    // Detection for 3rd bit (LTE mapping)
-    xmm0 = _mm256_max_epi16(bit_met_m7_m7, bit_met_m7_m5);
-    xmm1 = _mm256_max_epi16(bit_met_m7_m3, bit_met_m7_m1);
-    xmm2 = _mm256_max_epi16(bit_met_m7_p1, bit_met_m7_p3);
-    xmm3 = _mm256_max_epi16(bit_met_m7_p5, bit_met_m7_p7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(xmm4, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_m5_m7, bit_met_m5_m5);
-    xmm1 = _mm256_max_epi16(bit_met_m5_m3, bit_met_m5_m1);
-    xmm2 = _mm256_max_epi16(bit_met_m5_p1, bit_met_m5_p3);
-    xmm3 = _mm256_max_epi16(bit_met_m5_p5, bit_met_m5_p7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p5_m7, bit_met_p5_m5);
-    xmm1 = _mm256_max_epi16(bit_met_p5_m3, bit_met_p5_m1);
-    xmm2 = _mm256_max_epi16(bit_met_p5_p1, bit_met_p5_p3);
-    xmm3 = _mm256_max_epi16(bit_met_p5_p5, bit_met_p5_p7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p7_m7, bit_met_p7_m5);
-    xmm1 = _mm256_max_epi16(bit_met_p7_m3, bit_met_p7_m1);
-    xmm2 = _mm256_max_epi16(bit_met_p7_p1, bit_met_p7_p3);
-    xmm3 = _mm256_max_epi16(bit_met_p7_p5, bit_met_p7_p7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
-
-    xmm0 = _mm256_max_epi16(bit_met_m3_m7, bit_met_m3_m5);
-    xmm1 = _mm256_max_epi16(bit_met_m3_m3, bit_met_m3_m1);
-    xmm2 = _mm256_max_epi16(bit_met_m3_p1, bit_met_m3_p3);
-    xmm3 = _mm256_max_epi16(bit_met_m3_p5, bit_met_m3_p7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(xmm4, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_m1_m7, bit_met_m1_m5);
-    xmm1 = _mm256_max_epi16(bit_met_m1_m3, bit_met_m1_m1);
-    xmm2 = _mm256_max_epi16(bit_met_m1_p1, bit_met_m1_p3);
-    xmm3 = _mm256_max_epi16(bit_met_m1_p5, bit_met_m1_p7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p1_m7, bit_met_p1_m5);
-    xmm1 = _mm256_max_epi16(bit_met_p1_m3, bit_met_p1_m1);
-    xmm2 = _mm256_max_epi16(bit_met_p1_p1, bit_met_p1_p3);
-    xmm3 = _mm256_max_epi16(bit_met_p1_p5, bit_met_p1_p7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p3_m7, bit_met_p3_m5);
-    xmm1 = _mm256_max_epi16(bit_met_p3_m3, bit_met_p3_m1);
-    xmm2 = _mm256_max_epi16(bit_met_p3_p1, bit_met_p3_p3);
-    xmm3 = _mm256_max_epi16(bit_met_p3_p5, bit_met_p3_p7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
-
-    y2r = _mm256_subs_epi16(logmax_num_re0, logmax_den_re0);
-
-    // Detection for 4th bit (LTE mapping)
-    xmm0 = _mm256_max_epi16(bit_met_p7_p7, bit_met_p5_p7);
-    xmm1 = _mm256_max_epi16(bit_met_p3_p7, bit_met_p1_p7);
-    xmm2 = _mm256_max_epi16(bit_met_m1_p7, bit_met_m3_p7);
-    xmm3 = _mm256_max_epi16(bit_met_m5_p7, bit_met_m7_p7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(xmm4, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p7_p5, bit_met_p5_p5);
-    xmm1 = _mm256_max_epi16(bit_met_p3_p5, bit_met_p1_p5);
-    xmm2 = _mm256_max_epi16(bit_met_m1_p5, bit_met_m3_p5);
-    xmm3 = _mm256_max_epi16(bit_met_m5_p5, bit_met_m5_p5);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p7_m5, bit_met_p5_m5);
-    xmm1 = _mm256_max_epi16(bit_met_p3_m5, bit_met_p1_m5);
-    xmm2 = _mm256_max_epi16(bit_met_m1_m5, bit_met_m3_m5);
-    xmm3 = _mm256_max_epi16(bit_met_m5_m5, bit_met_m7_m5);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p7_m7, bit_met_p5_m7);
-    xmm1 = _mm256_max_epi16(bit_met_p3_m7, bit_met_p1_m7);
-    xmm2 = _mm256_max_epi16(bit_met_m1_m7, bit_met_m3_m7);
-    xmm3 = _mm256_max_epi16(bit_met_m5_m7, bit_met_m7_m7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
-
-    xmm0 = _mm256_max_epi16(bit_met_p7_m1, bit_met_p5_m1);
-    xmm1 = _mm256_max_epi16(bit_met_p3_m1, bit_met_p1_m1);
-    xmm2 = _mm256_max_epi16(bit_met_m1_m1, bit_met_m3_m1);
-    xmm3 = _mm256_max_epi16(bit_met_m5_m1, bit_met_m7_m1);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(xmm4, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p7_m3, bit_met_p5_m3);
-    xmm1 = _mm256_max_epi16(bit_met_p3_m3, bit_met_p1_m3);
-    xmm2 = _mm256_max_epi16(bit_met_m1_m3, bit_met_m3_m3);
-    xmm3 = _mm256_max_epi16(bit_met_m5_m3, bit_met_m7_m3);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p7_p1, bit_met_p5_p1);
-    xmm1 = _mm256_max_epi16(bit_met_p3_p1, bit_met_p1_p1);
-    xmm2 = _mm256_max_epi16(bit_met_m1_p1, bit_met_m3_p1);
-    xmm3 = _mm256_max_epi16(bit_met_m5_p1, bit_met_m7_p1);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p7_p3, bit_met_p5_p3);
-    xmm1 = _mm256_max_epi16(bit_met_p3_p3, bit_met_p1_p3);
-    xmm2 = _mm256_max_epi16(bit_met_m1_p3, bit_met_m3_p3);
-    xmm3 = _mm256_max_epi16(bit_met_m5_p3, bit_met_m7_p3);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
-
-    y0i = _mm256_subs_epi16(logmax_num_re0, logmax_den_re0);
-
-
-    // Detection for 5th bit (LTE mapping)
-    xmm0 = _mm256_max_epi16(bit_met_m7_m7, bit_met_m7_m5);
-    xmm1 = _mm256_max_epi16(bit_met_m7_m3, bit_met_m7_m1);
-    xmm2 = _mm256_max_epi16(bit_met_m7_p1, bit_met_m7_p3);
-    xmm3 = _mm256_max_epi16(bit_met_m7_p5, bit_met_m7_p7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(xmm4, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_m1_m7, bit_met_m1_m5);
-    xmm1 = _mm256_max_epi16(bit_met_m1_m3, bit_met_m1_m1);
-    xmm2 = _mm256_max_epi16(bit_met_m1_p1, bit_met_m1_p3);
-    xmm3 = _mm256_max_epi16(bit_met_m1_p5, bit_met_m1_p7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p1_m7, bit_met_p1_m5);
-    xmm1 = _mm256_max_epi16(bit_met_p1_m3, bit_met_p1_m1);
-    xmm2 = _mm256_max_epi16(bit_met_p1_p1, bit_met_p1_p3);
-    xmm3 = _mm256_max_epi16(bit_met_p1_p5, bit_met_p1_p7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p7_m7, bit_met_p7_m5);
-    xmm1 = _mm256_max_epi16(bit_met_p7_m3, bit_met_p7_m1);
-    xmm2 = _mm256_max_epi16(bit_met_p7_p1, bit_met_p7_p3);
-    xmm3 = _mm256_max_epi16(bit_met_p7_p5, bit_met_p7_p7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
-
-    xmm0 = _mm256_max_epi16(bit_met_m5_m7, bit_met_m5_m5);
-    xmm1 = _mm256_max_epi16(bit_met_m5_m3, bit_met_m5_m1);
-    xmm2 = _mm256_max_epi16(bit_met_m5_p1, bit_met_m5_p3);
-    xmm3 = _mm256_max_epi16(bit_met_m5_p5, bit_met_m5_p7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(xmm4, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_m3_m7, bit_met_m3_m5);
-    xmm1 = _mm256_max_epi16(bit_met_m3_m3, bit_met_m3_m1);
-    xmm2 = _mm256_max_epi16(bit_met_m3_p1, bit_met_m3_p3);
-    xmm3 = _mm256_max_epi16(bit_met_m3_p5, bit_met_m3_p7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p3_m7, bit_met_p3_m5);
-    xmm1 = _mm256_max_epi16(bit_met_p3_m3, bit_met_p3_m1);
-    xmm2 = _mm256_max_epi16(bit_met_p3_p1, bit_met_p3_p3);
-    xmm3 = _mm256_max_epi16(bit_met_p3_p5, bit_met_p3_p7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p5_m7, bit_met_p5_m5);
-    xmm1 = _mm256_max_epi16(bit_met_p5_m3, bit_met_p5_m1);
-    xmm2 = _mm256_max_epi16(bit_met_p5_p1, bit_met_p5_p3);
-    xmm3 = _mm256_max_epi16(bit_met_p5_p5, bit_met_p5_p7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
-
-    y1i = _mm256_subs_epi16(logmax_num_re0, logmax_den_re0);
-
-    // Detection for 6th bit (LTE mapping)
-    xmm0 = _mm256_max_epi16(bit_met_p7_p7, bit_met_p5_p7);
-    xmm1 = _mm256_max_epi16(bit_met_p3_p7, bit_met_p1_p7);
-    xmm2 = _mm256_max_epi16(bit_met_m1_p7, bit_met_m3_p7);
-    xmm3 = _mm256_max_epi16(bit_met_m5_p7, bit_met_m7_p7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(xmm4, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p7_p1, bit_met_p5_p1);
-    xmm1 = _mm256_max_epi16(bit_met_p3_p1, bit_met_p1_p1);
-    xmm2 = _mm256_max_epi16(bit_met_m1_p1, bit_met_m3_p1);
-    xmm3 = _mm256_max_epi16(bit_met_m5_p1, bit_met_m5_p1);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p7_m1, bit_met_p5_m1);
-    xmm1 = _mm256_max_epi16(bit_met_p3_m1, bit_met_p1_m1);
-    xmm2 = _mm256_max_epi16(bit_met_m1_m1, bit_met_m3_m1);
-    xmm3 = _mm256_max_epi16(bit_met_m5_m1, bit_met_m7_m1);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p7_m7, bit_met_p5_m7);
-    xmm1 = _mm256_max_epi16(bit_met_p3_m7, bit_met_p1_m7);
-    xmm2 = _mm256_max_epi16(bit_met_m1_m7, bit_met_m3_m7);
-    xmm3 = _mm256_max_epi16(bit_met_m5_m7, bit_met_m7_m7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
-
-    xmm0 = _mm256_max_epi16(bit_met_p7_m5, bit_met_p5_m5);
-    xmm1 = _mm256_max_epi16(bit_met_p3_m5, bit_met_p1_m5);
-    xmm2 = _mm256_max_epi16(bit_met_m1_m5, bit_met_m3_m5);
-    xmm3 = _mm256_max_epi16(bit_met_m5_m5, bit_met_m7_m5);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(xmm4, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p7_m3, bit_met_p5_m3);
-    xmm1 = _mm256_max_epi16(bit_met_p3_m3, bit_met_p1_m3);
-    xmm2 = _mm256_max_epi16(bit_met_m1_m3, bit_met_m3_m3);
-    xmm3 = _mm256_max_epi16(bit_met_m5_m3, bit_met_m7_m3);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p7_p3, bit_met_p5_p3);
-    xmm1 = _mm256_max_epi16(bit_met_p3_p3, bit_met_p1_p3);
-    xmm2 = _mm256_max_epi16(bit_met_m1_p3, bit_met_m3_p3);
-    xmm3 = _mm256_max_epi16(bit_met_m5_p3, bit_met_m7_p3);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p7_p5, bit_met_p5_p5);
-    xmm1 = _mm256_max_epi16(bit_met_p3_p5, bit_met_p1_p5);
-    xmm2 = _mm256_max_epi16(bit_met_m1_p5, bit_met_m3_p5);
-    xmm3 = _mm256_max_epi16(bit_met_m5_p5, bit_met_m7_p5);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
-
-    y2i = _mm256_subs_epi16(logmax_num_re0, logmax_den_re0);
-
-    // map to output stream, difficult to do in SIMD since we have 6 16bit LLRs
-    // RE 1
-    j = 48*i;
-    stream0_out[j + 0] = ((short *)&y0r)[0];
-    stream0_out[j + 1] = ((short *)&y1r)[0];
-    stream0_out[j + 2] = ((short *)&y2r)[0];
-    stream0_out[j + 3] = ((short *)&y0i)[0];
-    stream0_out[j + 4] = ((short *)&y1i)[0];
-    stream0_out[j + 5] = ((short *)&y2i)[0];
-    // RE 2
-    stream0_out[j + 6] = ((short *)&y0r)[1];
-    stream0_out[j + 7] = ((short *)&y1r)[1];
-    stream0_out[j + 8] = ((short *)&y2r)[1];
-    stream0_out[j + 9] = ((short *)&y0i)[1];
-    stream0_out[j + 10] = ((short *)&y1i)[1];
-    stream0_out[j + 11] = ((short *)&y2i)[1];
-    // RE 3
-    stream0_out[j + 12] = ((short *)&y0r)[2];
-    stream0_out[j + 13] = ((short *)&y1r)[2];
-    stream0_out[j + 14] = ((short *)&y2r)[2];
-    stream0_out[j + 15] = ((short *)&y0i)[2];
-    stream0_out[j + 16] = ((short *)&y1i)[2];
-    stream0_out[j + 17] = ((short *)&y2i)[2];
-    // RE 4
-    stream0_out[j + 18] = ((short *)&y0r)[3];
-    stream0_out[j + 19] = ((short *)&y1r)[3];
-    stream0_out[j + 20] = ((short *)&y2r)[3];
-    stream0_out[j + 21] = ((short *)&y0i)[3];
-    stream0_out[j + 22] = ((short *)&y1i)[3];
-    stream0_out[j + 23] = ((short *)&y2i)[3];
-    // RE 5
-    stream0_out[j + 24] = ((short *)&y0r)[4];
-    stream0_out[j + 25] = ((short *)&y1r)[4];
-    stream0_out[j + 26] = ((short *)&y2r)[4];
-    stream0_out[j + 27] = ((short *)&y0i)[4];
-    stream0_out[j + 28] = ((short *)&y1i)[4];
-    stream0_out[j + 29] = ((short *)&y2i)[4];
-    // RE 6
-    stream0_out[j + 30] = ((short *)&y0r)[5];
-    stream0_out[j + 31] = ((short *)&y1r)[5];
-    stream0_out[j + 32] = ((short *)&y2r)[5];
-    stream0_out[j + 33] = ((short *)&y0i)[5];
-    stream0_out[j + 34] = ((short *)&y1i)[5];
-    stream0_out[j + 35] = ((short *)&y2i)[5];
-    // RE 7
-    stream0_out[j + 36] = ((short *)&y0r)[6];
-    stream0_out[j + 37] = ((short *)&y1r)[6];
-    stream0_out[j + 38] = ((short *)&y2r)[6];
-    stream0_out[j + 39] = ((short *)&y0i)[6];
-    stream0_out[j + 40] = ((short *)&y1i)[6];
-    stream0_out[j + 41] = ((short *)&y2i)[6];
-    // RE 8
-    stream0_out[j + 42] = ((short *)&y0r)[7];
-    stream0_out[j + 43] = ((short *)&y1r)[7];
-    stream0_out[j + 44] = ((short *)&y2r)[7];
-    stream0_out[j + 45] = ((short *)&y0i)[7];
-    stream0_out[j + 46] = ((short *)&y1i)[7];
-    stream0_out[j + 47] = ((short *)&y2i)[7];
-
-    // RE 9
-    stream0_out[j + 48] = ((short *)&y0r)[8];
-    stream0_out[j + 49] = ((short *)&y1r)[8];
-    stream0_out[j + 50] = ((short *)&y2r)[8];
-    stream0_out[j + 51] = ((short *)&y0i)[8];
-    stream0_out[j + 52] = ((short *)&y1i)[8];
-    stream0_out[j + 53] = ((short *)&y2i)[8];
-    // RE 10
-    stream0_out[j + 54] = ((short *)&y0r)[9];
-    stream0_out[j + 55] = ((short *)&y1r)[9];
-    stream0_out[j + 56] = ((short *)&y2r)[9];
-    stream0_out[j + 57] = ((short *)&y0i)[9];
-    stream0_out[j + 58] = ((short *)&y1i)[9];
-    stream0_out[j + 59] = ((short *)&y2i)[9];
-    // RE 11
-    stream0_out[j + 60] = ((short *)&y0r)[10];
-    stream0_out[j + 61] = ((short *)&y1r)[10];
-    stream0_out[j + 62] = ((short *)&y2r)[10];
-    stream0_out[j + 63] = ((short *)&y0i)[10];
-    stream0_out[j + 64] = ((short *)&y1i)[10];
-    stream0_out[j + 65] = ((short *)&y2i)[10];
-    // RE 12
-    stream0_out[j + 66] = ((short *)&y0r)[11];
-    stream0_out[j + 67] = ((short *)&y1r)[11];
-    stream0_out[j + 68] = ((short *)&y2r)[11];
-    stream0_out[j + 69] = ((short *)&y0i)[11];
-    stream0_out[j + 70] = ((short *)&y1i)[11];
-    stream0_out[j + 71] = ((short *)&y2i)[11];
-    // RE 13
-    stream0_out[j + 72] = ((short *)&y0r)[12];
-    stream0_out[j + 73] = ((short *)&y1r)[12];
-    stream0_out[j + 74] = ((short *)&y2r)[12];
-    stream0_out[j + 75] = ((short *)&y0i)[12];
-    stream0_out[j + 76] = ((short *)&y1i)[12];
-    stream0_out[j + 77] = ((short *)&y2i)[12];
-    // RE 14
-    stream0_out[j + 78] = ((short *)&y0r)[13];
-    stream0_out[j + 79] = ((short *)&y1r)[13];
-    stream0_out[j + 80] = ((short *)&y2r)[13];
-    stream0_out[j + 81] = ((short *)&y0i)[13];
-    stream0_out[j + 82] = ((short *)&y1i)[13];
-    stream0_out[j + 83] = ((short *)&y2i)[13];
-    // RE 15
-    stream0_out[j + 84] = ((short *)&y0r)[14];
-    stream0_out[j + 85] = ((short *)&y1r)[14];
-    stream0_out[j + 86] = ((short *)&y2r)[14];
-    stream0_out[j + 87] = ((short *)&y0i)[14];
-    stream0_out[j + 88] = ((short *)&y1i)[14];
-    stream0_out[j + 89] = ((short *)&y2i)[14];
-    // RE 16
-    stream0_out[j + 90] = ((short *)&y0r)[15];
-    stream0_out[j + 91] = ((short *)&y1r)[15];
-    stream0_out[j + 92] = ((short *)&y2r)[15];
-    stream0_out[j + 93] = ((short *)&y0i)[15];
-    stream0_out[j + 94] = ((short *)&y1i)[15];
-    stream0_out[j + 95] = ((short *)&y2i)[15];
-
-#elif defined(__arm__)
-
-#endif
-  }
-
-#if defined(__x86_64__) || defined(__i386__)
-  _mm_empty();
-  _m_empty();
-#endif
-
-}
-
-void qam64_qam64_avx2(int32_t *stream0_in,
-                      int32_t *stream1_in,
-                      int32_t *ch_mag,
-                      int32_t *ch_mag_i,
-                      int16_t *stream0_out,
-                      int32_t *rho01,
-                      int length
-    )
-{
-
-  /*
-    Author: S. Wagner
-    Date: 28-02-17
-
-    Input:
-    stream0_in:  MF filter for 1st stream, i.e., y0=h0'*y
-    stream1_in:  MF filter for 2nd stream, i.e., y1=h1'*y
-    ch_mag:      4*h0/sqrt(42), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc
-    ch_mag_i:    4*h1/sqrt(42), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc
-    rho01:       Channel cross correlation, i.e., h1'*h0
-
-    Output:
-    stream0_out: output LLRs for 1st stream
-  */
-
-#if defined(__x86_64__) || defined(__i386__)
-
-  __m256i *rho01_256i      = (__m256i *)rho01;
-  __m256i *stream0_256i_in = (__m256i *)stream0_in;
-  __m256i *stream1_256i_in = (__m256i *)stream1_in;
-  __m256i *ch_mag_256i     = (__m256i *)ch_mag;
-  __m256i *ch_mag_256i_i   = (__m256i *)ch_mag_i;
-
-  __m256i ONE_OVER_SQRT_42              = _mm256_broadcastw_epi16(_mm_set1_epi16(10112)); // round(1/sqrt(42)*2^16)
-  __m256i THREE_OVER_SQRT_42            = _mm256_broadcastw_epi16(_mm_set1_epi16(30337)); // round(3/sqrt(42)*2^16)
-  __m256i FIVE_OVER_SQRT_42             = _mm256_broadcastw_epi16(_mm_set1_epi16(25281)); // round(5/sqrt(42)*2^15)
-  __m256i SEVEN_OVER_SQRT_42            = _mm256_broadcastw_epi16(_mm_set1_epi16(17697)); // round(7/sqrt(42)*2^14) Q2.14
-  __m256i ONE_OVER_SQRT_2               = _mm256_broadcastw_epi16(_mm_set1_epi16(23170)); // round(1/sqrt(2)*2^15)
-  __m256i ONE_OVER_SQRT_2_42            = _mm256_broadcastw_epi16(_mm_set1_epi16(3575));  // round(1/sqrt(2*42)*2^15)
-  __m256i THREE_OVER_SQRT_2_42          = _mm256_broadcastw_epi16(_mm_set1_epi16(10726)); // round(3/sqrt(2*42)*2^15)
-  __m256i FIVE_OVER_SQRT_2_42           = _mm256_broadcastw_epi16(_mm_set1_epi16(17876)); // round(5/sqrt(2*42)*2^15)
-  __m256i SEVEN_OVER_SQRT_2_42          = _mm256_broadcastw_epi16(_mm_set1_epi16(25027)); // round(7/sqrt(2*42)*2^15)
-  __m256i FORTYNINE_OVER_FOUR_SQRT_42   = _mm256_broadcastw_epi16(_mm_set1_epi16(30969)); // round(49/(4*sqrt(42))*2^14), Q2.14
-  __m256i THIRTYSEVEN_OVER_FOUR_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(23385)); // round(37/(4*sqrt(42))*2^14), Q2.14
-  __m256i TWENTYFIVE_OVER_FOUR_SQRT_42  = _mm256_broadcastw_epi16(_mm_set1_epi16(31601)); // round(25/(4*sqrt(42))*2^15)
-  __m256i TWENTYNINE_OVER_FOUR_SQRT_42  = _mm256_broadcastw_epi16(_mm_set1_epi16(18329)); // round(29/(4*sqrt(42))*2^15), Q2.14
-  __m256i SEVENTEEN_OVER_FOUR_SQRT_42   = _mm256_broadcastw_epi16(_mm_set1_epi16(21489)); // round(17/(4*sqrt(42))*2^15)
-  __m256i NINE_OVER_FOUR_SQRT_42        = _mm256_broadcastw_epi16(_mm_set1_epi16(11376)); // round(9/(4*sqrt(42))*2^15)
-  __m256i THIRTEEN_OVER_FOUR_SQRT_42    = _mm256_broadcastw_epi16(_mm_set1_epi16(16433)); // round(13/(4*sqrt(42))*2^15)
-  __m256i FIVE_OVER_FOUR_SQRT_42        = _mm256_broadcastw_epi16(_mm_set1_epi16(6320));  // round(5/(4*sqrt(42))*2^15)
-  __m256i ONE_OVER_FOUR_SQRT_42         = _mm256_broadcastw_epi16(_mm_set1_epi16(1264));  // round(1/(4*sqrt(42))*2^15)
-  __m256i SQRT_42_OVER_FOUR             = _mm256_broadcastw_epi16(_mm_set1_epi16(13272)); // round(sqrt(42)/4*2^13), Q3.12
-
-  __m256i ch_mag_des;
-  __m256i ch_mag_int;
-  __m256i ch_mag_98_over_42_with_sigma2;
-  __m256i ch_mag_74_over_42_with_sigma2;
-  __m256i ch_mag_58_over_42_with_sigma2;
-  __m256i ch_mag_50_over_42_with_sigma2;
-  __m256i ch_mag_34_over_42_with_sigma2;
-  __m256i ch_mag_18_over_42_with_sigma2;
-  __m256i ch_mag_26_over_42_with_sigma2;
-  __m256i ch_mag_10_over_42_with_sigma2;
-  __m256i ch_mag_2_over_42_with_sigma2;
-  __m256i y0r_one_over_sqrt_21;
-  __m256i y0r_three_over_sqrt_21;
-  __m256i y0r_five_over_sqrt_21;
-  __m256i y0r_seven_over_sqrt_21;
-  __m256i y0i_one_over_sqrt_21;
-  __m256i y0i_three_over_sqrt_21;
-  __m256i y0i_five_over_sqrt_21;
-  __m256i y0i_seven_over_sqrt_21;
-  __m256i ch_mag_int_with_sigma2;
-  __m256i two_ch_mag_int_with_sigma2;
-  __m256i three_ch_mag_int_with_sigma2;
-#elif defined(__arm__)
-
-#endif
-
-  int i,j;
-  uint32_t len256 = (length)>>3;
-
-  for (i=0; i<len256; i+=2) {
-
-#if defined(__x86_64__) || defined(__i386__)
-
-    // Get rho
-      /*
-    xmm0 = rho01_256i[i];
-    xmm1 = rho01_256i[i+1];
-    xmm0 = _mm256_shufflelo_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm256_shufflehi_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm256_shuffle_epi32(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-
-    xmm1 = _mm256_shufflelo_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm256_shufflehi_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm256_shuffle_epi32(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-
-    //xmm0 = [Re(0,1,2,3)   Im(0,1,2,3)   Re(4,5,6,7)     Im(4,5,6,7)]
-    //xmm0 = [Re(8,9,10,11) Im(8,9,10,11) Re(12,13,14,15) Im(12,13,14,15)]
-
-    xmm2 = _mm256_unpacklo_epi64(xmm0, xmm1);
-    //xmm2 = [Re(0,1,2,3) Re(8,9,10,11) Re(4,5,6,7) Re(12,13,14,15)]
-    xmm2 = _mm256_permute4x64_epi64(xmm2,0xd8); // Re(rho)
-
-    xmm3 = _mm256_unpackhi_epi64(xmm0, xmm1);
-    //xmm3 = [Im(0,1,2,3) Im(8,9,10,11) Im(4,5,6,7) Im(12,13,14,15)]
-    xmm3 = _mm256_permute4x64_epi64(xmm3,0xd8); // Im(rho)
-      */
-
-    seperate_real_imag_parts(&xmm2, &xmm3, rho01_256i[i], rho01_256i[i+1]);
-
-    rho_rpi = _mm256_adds_epi16(xmm2,xmm3); // rho = Re(rho) + Im(rho)
-    rho_rmi = _mm256_subs_epi16(xmm2,xmm3); // rho* = Re(rho) - Im(rho)
-
-    // Compute the different rhos
-    rho_rpi_1_1 = _mm256_mulhi_epi16(rho_rpi, ONE_OVER_SQRT_42);
-    rho_rmi_1_1 = _mm256_mulhi_epi16(rho_rmi, ONE_OVER_SQRT_42);
-    rho_rpi_3_3 = _mm256_mulhi_epi16(rho_rpi, THREE_OVER_SQRT_42);
-    rho_rmi_3_3 = _mm256_mulhi_epi16(rho_rmi, THREE_OVER_SQRT_42);
-    rho_rpi_5_5 = _mm256_mulhi_epi16(rho_rpi, FIVE_OVER_SQRT_42);
-    rho_rmi_5_5 = _mm256_mulhi_epi16(rho_rmi, FIVE_OVER_SQRT_42);
-    rho_rpi_7_7 = _mm256_mulhi_epi16(rho_rpi, SEVEN_OVER_SQRT_42);
-    rho_rmi_7_7 = _mm256_mulhi_epi16(rho_rmi, SEVEN_OVER_SQRT_42);
-
-    rho_rpi_5_5 = _mm256_slli_epi16(rho_rpi_5_5, 1);
-    rho_rmi_5_5 = _mm256_slli_epi16(rho_rmi_5_5, 1);
-    rho_rpi_7_7 = _mm256_slli_epi16(rho_rpi_7_7, 2);
-    rho_rmi_7_7 = _mm256_slli_epi16(rho_rmi_7_7, 2);
-
-    xmm4 = _mm256_mulhi_epi16(xmm2, ONE_OVER_SQRT_42);
-    xmm5 = _mm256_mulhi_epi16(xmm3, ONE_OVER_SQRT_42);
-    xmm6 = _mm256_mulhi_epi16(xmm3, THREE_OVER_SQRT_42);
-    xmm7 = _mm256_mulhi_epi16(xmm3, FIVE_OVER_SQRT_42);
-    xmm8 = _mm256_mulhi_epi16(xmm3, SEVEN_OVER_SQRT_42);
-    xmm7 = _mm256_slli_epi16(xmm7, 1);
-    xmm8 = _mm256_slli_epi16(xmm8, 2);
-
-    rho_rpi_1_3 = _mm256_adds_epi16(xmm4, xmm6);
-    rho_rmi_1_3 = _mm256_subs_epi16(xmm4, xmm6);
-    rho_rpi_1_5 = _mm256_adds_epi16(xmm4, xmm7);
-    rho_rmi_1_5 = _mm256_subs_epi16(xmm4, xmm7);
-    rho_rpi_1_7 = _mm256_adds_epi16(xmm4, xmm8);
-    rho_rmi_1_7 = _mm256_subs_epi16(xmm4, xmm8);
-
-    xmm4 = _mm256_mulhi_epi16(xmm2, THREE_OVER_SQRT_42);
-    rho_rpi_3_1 = _mm256_adds_epi16(xmm4, xmm5);
-    rho_rmi_3_1 = _mm256_subs_epi16(xmm4, xmm5);
-    rho_rpi_3_5 = _mm256_adds_epi16(xmm4, xmm7);
-    rho_rmi_3_5 = _mm256_subs_epi16(xmm4, xmm7);
-    rho_rpi_3_7 = _mm256_adds_epi16(xmm4, xmm8);
-    rho_rmi_3_7 = _mm256_subs_epi16(xmm4, xmm8);
-
-    xmm4 = _mm256_mulhi_epi16(xmm2, FIVE_OVER_SQRT_42);
-    xmm4 = _mm256_slli_epi16(xmm4, 1);
-    rho_rpi_5_1 = _mm256_adds_epi16(xmm4, xmm5);
-    rho_rmi_5_1 = _mm256_subs_epi16(xmm4, xmm5);
-    rho_rpi_5_3 = _mm256_adds_epi16(xmm4, xmm6);
-    rho_rmi_5_3 = _mm256_subs_epi16(xmm4, xmm6);
-    rho_rpi_5_7 = _mm256_adds_epi16(xmm4, xmm8);
-    rho_rmi_5_7 = _mm256_subs_epi16(xmm4, xmm8);
-
-    xmm4 = _mm256_mulhi_epi16(xmm2, SEVEN_OVER_SQRT_42);
-    xmm4 = _mm256_slli_epi16(xmm4, 2);
-    rho_rpi_7_1 = _mm256_adds_epi16(xmm4, xmm5);
-    rho_rmi_7_1 = _mm256_subs_epi16(xmm4, xmm5);
-    rho_rpi_7_3 = _mm256_adds_epi16(xmm4, xmm6);
-    rho_rmi_7_3 = _mm256_subs_epi16(xmm4, xmm6);
-    rho_rpi_7_5 = _mm256_adds_epi16(xmm4, xmm7);
-    rho_rmi_7_5 = _mm256_subs_epi16(xmm4, xmm7);
-
-    // Rearrange interfering MF output
-    /*
-    xmm0 = stream1_256i_in[i];
-    xmm1 = stream1_256i_in[i+1];
-    xmm0 = _mm256_shufflelo_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm256_shufflehi_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm256_shuffle_epi32(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-
-    xmm1 = _mm256_shufflelo_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm256_shufflehi_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm256_shuffle_epi32(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-
-    y1r = _mm256_unpacklo_epi64(xmm0, xmm1);
-    y1r = _mm256_permute4x64_epi64(y1r,0xd8); // Re(y1)
-
-    y1i = _mm256_unpackhi_epi64(xmm0, xmm1);
-    y1i = _mm256_permute4x64_epi64(y1i,0xd8); // Im(y1)
-    */
-
-    seperate_real_imag_parts(&y1r, &y1i, stream1_256i_in[i], stream1_256i_in[i+1]);
-
-    // Psi_r calculation from rho_rpi or rho_rmi
-    xmm0 = _mm256_broadcastw_epi16(_mm_set1_epi16(0));// ZERO for abs_pi16
-    xmm2 = _mm256_subs_epi16(rho_rpi_7_7, y1r);
-
-    psi_r_p7_p7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_7_5, y1r);
-    psi_r_p7_p5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_7_3, y1r);
-    psi_r_p7_p3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_7_1, y1r);
-    psi_r_p7_p1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_7_1, y1r);
-    psi_r_p7_m1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_7_3, y1r);
-    psi_r_p7_m3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_7_5, y1r);
-    psi_r_p7_m5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_7_7, y1r);
-    psi_r_p7_m7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_5_7, y1r);
-    psi_r_p5_p7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_5_5, y1r);
-    psi_r_p5_p5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_5_3, y1r);
-    psi_r_p5_p3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_5_1, y1r);
-    psi_r_p5_p1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_5_1, y1r);
-    psi_r_p5_m1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_5_3, y1r);
-    psi_r_p5_m3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_5_5, y1r);
-    psi_r_p5_m5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_5_7, y1r);
-    psi_r_p5_m7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_3_7, y1r);
-    psi_r_p3_p7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_3_5, y1r);
-    psi_r_p3_p5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_3_3, y1r);
-    psi_r_p3_p3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_3_1, y1r);
-    psi_r_p3_p1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_3_1, y1r);
-    psi_r_p3_m1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_3_3, y1r);
-    psi_r_p3_m3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_3_5, y1r);
-    psi_r_p3_m5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_3_7, y1r);
-    psi_r_p3_m7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_1_7, y1r);
-    psi_r_p1_p7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_1_5, y1r);
-    psi_r_p1_p5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_1_3, y1r);
-    psi_r_p1_p3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_1_1, y1r);
-    psi_r_p1_p1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_1_1, y1r);
-    psi_r_p1_m1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_1_3, y1r);
-    psi_r_p1_m3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_1_5, y1r);
-    psi_r_p1_m5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_1_7, y1r);
-    psi_r_p1_m7 = _mm256_abs_epi16(xmm2);
-
-    xmm2 = _mm256_adds_epi16(rho_rmi_1_7, y1r);
-    psi_r_m1_p7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_1_5, y1r);
-    psi_r_m1_p5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_1_3, y1r);
-    psi_r_m1_p3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_1_1, y1r);
-    psi_r_m1_p1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_1_1, y1r);
-    psi_r_m1_m1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_1_3, y1r);
-    psi_r_m1_m3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_1_5, y1r);
-    psi_r_m1_m5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_1_7, y1r);
-    psi_r_m1_m7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_3_7, y1r);
-    psi_r_m3_p7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_3_5, y1r);
-    psi_r_m3_p5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_3_3, y1r);
-    psi_r_m3_p3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_3_1, y1r);
-    psi_r_m3_p1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_3_1, y1r);
-    psi_r_m3_m1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_3_3, y1r);
-    psi_r_m3_m3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_3_5, y1r);
-    psi_r_m3_m5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_3_7, y1r);
-    psi_r_m3_m7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_5_7, y1r);
-    psi_r_m5_p7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_5_5, y1r);
-    psi_r_m5_p5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_5_3, y1r);
-    psi_r_m5_p3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_5_1, y1r);
-    psi_r_m5_p1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_5_1, y1r);
-    psi_r_m5_m1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_5_3, y1r);
-    psi_r_m5_m3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_5_5, y1r);
-    psi_r_m5_m5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_5_7, y1r);
-    psi_r_m5_m7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_7_7, y1r);
-    psi_r_m7_p7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_7_5, y1r);
-    psi_r_m7_p5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_7_3, y1r);
-    psi_r_m7_p3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_7_1, y1r);
-    psi_r_m7_p1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_7_1, y1r);
-    psi_r_m7_m1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_7_3, y1r);
-    psi_r_m7_m3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_7_5, y1r);
-    psi_r_m7_m5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_7_7, y1r);
-    psi_r_m7_m7 = _mm256_abs_epi16(xmm2);
-
-    // Psi_i calculation from rho_rpi or rho_rmi
-    xmm2 = _mm256_subs_epi16(rho_rmi_7_7, y1i);
-    psi_i_p7_p7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_5_7, y1i);
-    psi_i_p7_p5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_3_7, y1i);
-    psi_i_p7_p3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_1_7, y1i);
-    psi_i_p7_p1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_1_7, y1i);
-    psi_i_p7_m1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_3_7, y1i);
-    psi_i_p7_m3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_5_7, y1i);
-    psi_i_p7_m5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_7_7, y1i);
-    psi_i_p7_m7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_7_5, y1i);
-    psi_i_p5_p7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_5_5, y1i);
-    psi_i_p5_p5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_3_5, y1i);
-    psi_i_p5_p3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_1_5, y1i);
-    psi_i_p5_p1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_1_5, y1i);
-    psi_i_p5_m1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_3_5, y1i);
-    psi_i_p5_m3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_5_5, y1i);
-    psi_i_p5_m5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_7_5, y1i);
-    psi_i_p5_m7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_7_3, y1i);
-    psi_i_p3_p7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_5_3, y1i);
-    psi_i_p3_p5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_3_3, y1i);
-    psi_i_p3_p3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_1_3, y1i);
-    psi_i_p3_p1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_1_3, y1i);
-    psi_i_p3_m1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_3_3, y1i);
-    psi_i_p3_m3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_5_3, y1i);
-    psi_i_p3_m5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_7_3, y1i);
-    psi_i_p3_m7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_7_1, y1i);
-    psi_i_p1_p7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_5_1, y1i);
-    psi_i_p1_p5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_3_1, y1i);
-    psi_i_p1_p3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rmi_1_1, y1i);
-    psi_i_p1_p1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_1_1, y1i);
-    psi_i_p1_m1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_3_1, y1i);
-    psi_i_p1_m3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_5_1, y1i);
-    psi_i_p1_m5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rpi_7_1, y1i);
-    psi_i_p1_m7 = _mm256_abs_epi16(xmm2);
-
-    xmm2 = _mm256_subs_epi16(rho_rpi_7_1, y1i);
-    psi_i_m1_p7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_5_1, y1i);
-    psi_i_m1_p5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_3_1, y1i);
-    psi_i_m1_p3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_1_1, y1i);
-    psi_i_m1_p1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_1_1, y1i);
-    psi_i_m1_m1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_3_1, y1i);
-    psi_i_m1_m3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_5_1, y1i);
-    psi_i_m1_m5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_7_1, y1i);
-    psi_i_m1_m7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_7_3, y1i);
-    psi_i_m3_p7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_5_3, y1i);
-    psi_i_m3_p5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_3_3, y1i);
-    psi_i_m3_p3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_1_3, y1i);
-    psi_i_m3_p1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_1_3, y1i);
-    psi_i_m3_m1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_3_3, y1i);
-    psi_i_m3_m3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_5_3, y1i);
-    psi_i_m3_m5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_7_3, y1i);
-    psi_i_m3_m7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_7_5, y1i);
-    psi_i_m5_p7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_5_5, y1i);
-    psi_i_m5_p5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_3_5, y1i);
-    psi_i_m5_p3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_1_5, y1i);
-    psi_i_m5_p1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_1_5, y1i);
-    psi_i_m5_m1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_3_5, y1i);
-    psi_i_m5_m3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_5_5, y1i);
-    psi_i_m5_m5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_7_5, y1i);
-    psi_i_m5_m7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_7_7, y1i);
-    psi_i_m7_p7 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_5_7, y1i);
-    psi_i_m7_p5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_3_7, y1i);
-    psi_i_m7_p3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_subs_epi16(rho_rpi_1_7, y1i);
-    psi_i_m7_p1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_1_7, y1i);
-    psi_i_m7_m1 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_3_7, y1i);
-    psi_i_m7_m3 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_5_7, y1i);
-    psi_i_m7_m5 = _mm256_abs_epi16(xmm2);
-    xmm2 = _mm256_adds_epi16(rho_rmi_7_7, y1i);
-    psi_i_m7_m7 = _mm256_abs_epi16(xmm2);
-
-    /*
-    // Rearrange desired MF output
-    xmm0 = stream0_256i_in[i];
-    xmm1 = stream0_256i_in[i+1];
-    xmm0 = _mm_shufflelo_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shufflehi_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shuffle_epi32(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflelo_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflehi_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shuffle_epi32(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    //xmm0 = [Re(0,1) Re(2,3) Im(0,1) Im(2,3)]
-    //xmm1 = [Re(4,5) Re(6,7) Im(4,5) Im(6,7)]
-    y0r = _mm_unpacklo_epi64(xmm0,xmm1); // = [y0r(1),y0r(2),y0r(3),y0r(4)]
-    y0i = _mm_unpackhi_epi64(xmm0,xmm1);
-    */
-    seperate_real_imag_parts(&y0r, &y0i, stream0_256i_in[i], stream0_256i_in[i+1]);
-
-    // Rearrange desired channel magnitudes
-    // [|h|^2(1),|h|^2(1),|h|^2(2),|h|^2(2),...,,|h|^2(7),|h|^2(7)]*(2/sqrt(10))
-    /*
-    xmm2 = ch_mag_256i[i];
-    xmm3 = ch_mag_256i[i+1];
-    xmm2 = _mm_shufflelo_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm2 = _mm_shufflehi_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm2 = _mm_shuffle_epi32(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm_shufflelo_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm_shufflehi_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm_shuffle_epi32(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    ch_mag_des = _mm_unpacklo_epi64(xmm2,xmm3);
-    */
-    // xmm2 is dummy variable that contains the same values as ch_mag_des
-    seperate_real_imag_parts(&ch_mag_des, &xmm2, ch_mag_256i[i], ch_mag_256i[i+1]);
-
-
-    // Rearrange interfering channel magnitudes
-    /*
-    xmm2 = ch_mag_256i_i[i];
-    xmm3 = ch_mag_256i_i[i+1];
-    xmm2 = _mm_shufflelo_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm2 = _mm_shufflehi_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm2 = _mm_shuffle_epi32(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm_shufflelo_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm_shufflehi_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm_shuffle_epi32(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    ch_mag_int  = _mm_unpacklo_epi64(xmm2,xmm3);
-    */
-    seperate_real_imag_parts(&ch_mag_int, &xmm2, ch_mag_256i_i[i], ch_mag_256i_i[i+1]);
-
-    y0r_one_over_sqrt_21   = _mm256_mulhi_epi16(y0r, ONE_OVER_SQRT_42);
-    y0r_three_over_sqrt_21 = _mm256_mulhi_epi16(y0r, THREE_OVER_SQRT_42);
-    y0r_five_over_sqrt_21  = _mm256_mulhi_epi16(y0r, FIVE_OVER_SQRT_42);
-    y0r_five_over_sqrt_21  = _mm256_slli_epi16(y0r_five_over_sqrt_21, 1);
-    y0r_seven_over_sqrt_21 = _mm256_mulhi_epi16(y0r, SEVEN_OVER_SQRT_42);
-    y0r_seven_over_sqrt_21 = _mm256_slli_epi16(y0r_seven_over_sqrt_21, 2); // Q2.14
-
-    y0i_one_over_sqrt_21   = _mm256_mulhi_epi16(y0i, ONE_OVER_SQRT_42);
-    y0i_three_over_sqrt_21 = _mm256_mulhi_epi16(y0i, THREE_OVER_SQRT_42);
-    y0i_five_over_sqrt_21  = _mm256_mulhi_epi16(y0i, FIVE_OVER_SQRT_42);
-    y0i_five_over_sqrt_21  = _mm256_slli_epi16(y0i_five_over_sqrt_21, 1);
-    y0i_seven_over_sqrt_21 = _mm256_mulhi_epi16(y0i, SEVEN_OVER_SQRT_42);
-    y0i_seven_over_sqrt_21 = _mm256_slli_epi16(y0i_seven_over_sqrt_21, 2); // Q2.14
-
-
-    y0_p_7_1 = _mm256_adds_epi16(y0r_seven_over_sqrt_21, y0i_one_over_sqrt_21);
-    y0_p_7_3 = _mm256_adds_epi16(y0r_seven_over_sqrt_21, y0i_three_over_sqrt_21);
-    y0_p_7_5 = _mm256_adds_epi16(y0r_seven_over_sqrt_21, y0i_five_over_sqrt_21);
-    y0_p_7_7 = _mm256_adds_epi16(y0r_seven_over_sqrt_21, y0i_seven_over_sqrt_21);
-    y0_p_5_1 = _mm256_adds_epi16(y0r_five_over_sqrt_21, y0i_one_over_sqrt_21);
-    y0_p_5_3 = _mm256_adds_epi16(y0r_five_over_sqrt_21, y0i_three_over_sqrt_21);
-    y0_p_5_5 = _mm256_adds_epi16(y0r_five_over_sqrt_21, y0i_five_over_sqrt_21);
-    y0_p_5_7 = _mm256_adds_epi16(y0r_five_over_sqrt_21, y0i_seven_over_sqrt_21);
-    y0_p_3_1 = _mm256_adds_epi16(y0r_three_over_sqrt_21, y0i_one_over_sqrt_21);
-    y0_p_3_3 = _mm256_adds_epi16(y0r_three_over_sqrt_21, y0i_three_over_sqrt_21);
-    y0_p_3_5 = _mm256_adds_epi16(y0r_three_over_sqrt_21, y0i_five_over_sqrt_21);
-    y0_p_3_7 = _mm256_adds_epi16(y0r_three_over_sqrt_21, y0i_seven_over_sqrt_21);
-    y0_p_1_1 = _mm256_adds_epi16(y0r_one_over_sqrt_21, y0i_one_over_sqrt_21);
-    y0_p_1_3 = _mm256_adds_epi16(y0r_one_over_sqrt_21, y0i_three_over_sqrt_21);
-    y0_p_1_5 = _mm256_adds_epi16(y0r_one_over_sqrt_21, y0i_five_over_sqrt_21);
-    y0_p_1_7 = _mm256_adds_epi16(y0r_one_over_sqrt_21, y0i_seven_over_sqrt_21);
-
-    y0_m_1_1 = _mm256_subs_epi16(y0r_one_over_sqrt_21, y0i_one_over_sqrt_21);
-    y0_m_1_3 = _mm256_subs_epi16(y0r_one_over_sqrt_21, y0i_three_over_sqrt_21);
-    y0_m_1_5 = _mm256_subs_epi16(y0r_one_over_sqrt_21, y0i_five_over_sqrt_21);
-    y0_m_1_7 = _mm256_subs_epi16(y0r_one_over_sqrt_21, y0i_seven_over_sqrt_21);
-    y0_m_3_1 = _mm256_subs_epi16(y0r_three_over_sqrt_21, y0i_one_over_sqrt_21);
-    y0_m_3_3 = _mm256_subs_epi16(y0r_three_over_sqrt_21, y0i_three_over_sqrt_21);
-    y0_m_3_5 = _mm256_subs_epi16(y0r_three_over_sqrt_21, y0i_five_over_sqrt_21);
-    y0_m_3_7 = _mm256_subs_epi16(y0r_three_over_sqrt_21, y0i_seven_over_sqrt_21);
-    y0_m_5_1 = _mm256_subs_epi16(y0r_five_over_sqrt_21, y0i_one_over_sqrt_21);
-    y0_m_5_3 = _mm256_subs_epi16(y0r_five_over_sqrt_21, y0i_three_over_sqrt_21);
-    y0_m_5_5 = _mm256_subs_epi16(y0r_five_over_sqrt_21, y0i_five_over_sqrt_21);
-    y0_m_5_7 = _mm256_subs_epi16(y0r_five_over_sqrt_21, y0i_seven_over_sqrt_21);
-    y0_m_7_1 = _mm256_subs_epi16(y0r_seven_over_sqrt_21, y0i_one_over_sqrt_21);
-    y0_m_7_3 = _mm256_subs_epi16(y0r_seven_over_sqrt_21, y0i_three_over_sqrt_21);
-    y0_m_7_5 = _mm256_subs_epi16(y0r_seven_over_sqrt_21, y0i_five_over_sqrt_21);
-    y0_m_7_7 = _mm256_subs_epi16(y0r_seven_over_sqrt_21, y0i_seven_over_sqrt_21);
-
-    // Detection of interference term
-    ch_mag_int_with_sigma2       = _mm256_srai_epi16(ch_mag_int, 1); // *2
-    two_ch_mag_int_with_sigma2   = ch_mag_int; // *4
-    three_ch_mag_int_with_sigma2 = _mm256_adds_epi16(ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2); // *6
-
-    interference_abs_64qam_epi16(psi_r_p7_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p7_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p7_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p7_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p7_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p7_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p7_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p7_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p7_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p7_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p7_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p7_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p7_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p7_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p7_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p7_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p5_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p5_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p5_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p5_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p5_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p5_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p5_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p5_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p5_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p5_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p5_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p5_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p5_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p5_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p5_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p5_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p3_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p3_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p3_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p3_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p3_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p3_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p3_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p3_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p3_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p3_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p3_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p3_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p3_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p3_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p3_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p3_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p1_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p1_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p1_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p1_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p1_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p1_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p1_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p1_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p1_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p1_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p1_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p1_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p1_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p1_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p1_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p1_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m1_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m1_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m1_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m1_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m1_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m1_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m1_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m1_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m1_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m1_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m1_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m1_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m1_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m1_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m1_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m1_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m3_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m3_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m3_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m3_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m3_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m3_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m3_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m3_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m3_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m3_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m3_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m3_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m3_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m3_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m3_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m3_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m5_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m5_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m5_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m5_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m5_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m5_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m5_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m5_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m5_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m5_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m5_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m5_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m5_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m5_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m5_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m5_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m7_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m7_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m7_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m7_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m7_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m7_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m7_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m7_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m7_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m7_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m7_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m7_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m7_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m7_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m7_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m7_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-
-    interference_abs_64qam_epi16(psi_i_p7_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p7_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p7_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p7_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p7_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p7_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p7_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p7_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p7_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p7_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p7_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p7_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p7_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p7_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p7_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p7_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p5_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p5_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p5_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p5_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p5_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p5_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p5_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p5_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p5_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p5_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p5_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p5_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p5_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p5_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p5_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p5_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p3_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p3_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p3_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p3_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p3_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p3_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p3_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p3_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p3_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p3_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p3_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p3_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p3_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p3_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p3_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p3_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p1_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p1_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p1_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p1_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p1_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p1_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p1_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p1_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p1_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p1_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p1_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p1_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p1_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p1_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p1_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p1_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m1_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m1_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m1_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m1_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m1_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m1_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m1_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m1_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m1_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m1_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m1_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m1_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m1_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m1_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m1_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m1_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m3_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m3_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m3_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m3_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m3_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m3_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m3_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m3_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m3_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m3_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m3_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m3_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m3_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m3_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m3_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m3_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m5_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m5_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m5_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m5_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m5_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m5_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m5_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m5_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m5_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m5_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m5_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m5_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m5_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m5_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m5_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m5_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m7_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m7_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m7_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m7_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m7_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m7_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m7_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m7_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m7_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m7_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m7_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m7_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m7_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m7_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m7_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m7_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-
-    // Calculation of a group of two terms in the bit metric involving product of psi and interference
-    prodsum_psi_a_epi16(psi_r_p7_p7, a_r_p7_p7, psi_i_p7_p7, a_i_p7_p7, psi_a_p7_p7);
-    prodsum_psi_a_epi16(psi_r_p7_p5, a_r_p7_p5, psi_i_p7_p5, a_i_p7_p5, psi_a_p7_p5);
-    prodsum_psi_a_epi16(psi_r_p7_p3, a_r_p7_p3, psi_i_p7_p3, a_i_p7_p3, psi_a_p7_p3);
-    prodsum_psi_a_epi16(psi_r_p7_p1, a_r_p7_p1, psi_i_p7_p1, a_i_p7_p1, psi_a_p7_p1);
-    prodsum_psi_a_epi16(psi_r_p7_m1, a_r_p7_m1, psi_i_p7_m1, a_i_p7_m1, psi_a_p7_m1);
-    prodsum_psi_a_epi16(psi_r_p7_m3, a_r_p7_m3, psi_i_p7_m3, a_i_p7_m3, psi_a_p7_m3);
-    prodsum_psi_a_epi16(psi_r_p7_m5, a_r_p7_m5, psi_i_p7_m5, a_i_p7_m5, psi_a_p7_m5);
-    prodsum_psi_a_epi16(psi_r_p7_m7, a_r_p7_m7, psi_i_p7_m7, a_i_p7_m7, psi_a_p7_m7);
-    prodsum_psi_a_epi16(psi_r_p5_p7, a_r_p5_p7, psi_i_p5_p7, a_i_p5_p7, psi_a_p5_p7);
-    prodsum_psi_a_epi16(psi_r_p5_p5, a_r_p5_p5, psi_i_p5_p5, a_i_p5_p5, psi_a_p5_p5);
-    prodsum_psi_a_epi16(psi_r_p5_p3, a_r_p5_p3, psi_i_p5_p3, a_i_p5_p3, psi_a_p5_p3);
-    prodsum_psi_a_epi16(psi_r_p5_p1, a_r_p5_p1, psi_i_p5_p1, a_i_p5_p1, psi_a_p5_p1);
-    prodsum_psi_a_epi16(psi_r_p5_m1, a_r_p5_m1, psi_i_p5_m1, a_i_p5_m1, psi_a_p5_m1);
-    prodsum_psi_a_epi16(psi_r_p5_m3, a_r_p5_m3, psi_i_p5_m3, a_i_p5_m3, psi_a_p5_m3);
-    prodsum_psi_a_epi16(psi_r_p5_m5, a_r_p5_m5, psi_i_p5_m5, a_i_p5_m5, psi_a_p5_m5);
-    prodsum_psi_a_epi16(psi_r_p5_m7, a_r_p5_m7, psi_i_p5_m7, a_i_p5_m7, psi_a_p5_m7);
-    prodsum_psi_a_epi16(psi_r_p3_p7, a_r_p3_p7, psi_i_p3_p7, a_i_p3_p7, psi_a_p3_p7);
-    prodsum_psi_a_epi16(psi_r_p3_p5, a_r_p3_p5, psi_i_p3_p5, a_i_p3_p5, psi_a_p3_p5);
-    prodsum_psi_a_epi16(psi_r_p3_p3, a_r_p3_p3, psi_i_p3_p3, a_i_p3_p3, psi_a_p3_p3);
-    prodsum_psi_a_epi16(psi_r_p3_p1, a_r_p3_p1, psi_i_p3_p1, a_i_p3_p1, psi_a_p3_p1);
-    prodsum_psi_a_epi16(psi_r_p3_m1, a_r_p3_m1, psi_i_p3_m1, a_i_p3_m1, psi_a_p3_m1);
-    prodsum_psi_a_epi16(psi_r_p3_m3, a_r_p3_m3, psi_i_p3_m3, a_i_p3_m3, psi_a_p3_m3);
-    prodsum_psi_a_epi16(psi_r_p3_m5, a_r_p3_m5, psi_i_p3_m5, a_i_p3_m5, psi_a_p3_m5);
-    prodsum_psi_a_epi16(psi_r_p3_m7, a_r_p3_m7, psi_i_p3_m7, a_i_p3_m7, psi_a_p3_m7);
-    prodsum_psi_a_epi16(psi_r_p1_p7, a_r_p1_p7, psi_i_p1_p7, a_i_p1_p7, psi_a_p1_p7);
-    prodsum_psi_a_epi16(psi_r_p1_p5, a_r_p1_p5, psi_i_p1_p5, a_i_p1_p5, psi_a_p1_p5);
-    prodsum_psi_a_epi16(psi_r_p1_p3, a_r_p1_p3, psi_i_p1_p3, a_i_p1_p3, psi_a_p1_p3);
-    prodsum_psi_a_epi16(psi_r_p1_p1, a_r_p1_p1, psi_i_p1_p1, a_i_p1_p1, psi_a_p1_p1);
-    prodsum_psi_a_epi16(psi_r_p1_m1, a_r_p1_m1, psi_i_p1_m1, a_i_p1_m1, psi_a_p1_m1);
-    prodsum_psi_a_epi16(psi_r_p1_m3, a_r_p1_m3, psi_i_p1_m3, a_i_p1_m3, psi_a_p1_m3);
-    prodsum_psi_a_epi16(psi_r_p1_m5, a_r_p1_m5, psi_i_p1_m5, a_i_p1_m5, psi_a_p1_m5);
-    prodsum_psi_a_epi16(psi_r_p1_m7, a_r_p1_m7, psi_i_p1_m7, a_i_p1_m7, psi_a_p1_m7);
-    prodsum_psi_a_epi16(psi_r_m1_p7, a_r_m1_p7, psi_i_m1_p7, a_i_m1_p7, psi_a_m1_p7);
-    prodsum_psi_a_epi16(psi_r_m1_p5, a_r_m1_p5, psi_i_m1_p5, a_i_m1_p5, psi_a_m1_p5);
-    prodsum_psi_a_epi16(psi_r_m1_p3, a_r_m1_p3, psi_i_m1_p3, a_i_m1_p3, psi_a_m1_p3);
-    prodsum_psi_a_epi16(psi_r_m1_p1, a_r_m1_p1, psi_i_m1_p1, a_i_m1_p1, psi_a_m1_p1);
-    prodsum_psi_a_epi16(psi_r_m1_m1, a_r_m1_m1, psi_i_m1_m1, a_i_m1_m1, psi_a_m1_m1);
-    prodsum_psi_a_epi16(psi_r_m1_m3, a_r_m1_m3, psi_i_m1_m3, a_i_m1_m3, psi_a_m1_m3);
-    prodsum_psi_a_epi16(psi_r_m1_m5, a_r_m1_m5, psi_i_m1_m5, a_i_m1_m5, psi_a_m1_m5);
-    prodsum_psi_a_epi16(psi_r_m1_m7, a_r_m1_m7, psi_i_m1_m7, a_i_m1_m7, psi_a_m1_m7);
-    prodsum_psi_a_epi16(psi_r_m3_p7, a_r_m3_p7, psi_i_m3_p7, a_i_m3_p7, psi_a_m3_p7);
-    prodsum_psi_a_epi16(psi_r_m3_p5, a_r_m3_p5, psi_i_m3_p5, a_i_m3_p5, psi_a_m3_p5);
-    prodsum_psi_a_epi16(psi_r_m3_p3, a_r_m3_p3, psi_i_m3_p3, a_i_m3_p3, psi_a_m3_p3);
-    prodsum_psi_a_epi16(psi_r_m3_p1, a_r_m3_p1, psi_i_m3_p1, a_i_m3_p1, psi_a_m3_p1);
-    prodsum_psi_a_epi16(psi_r_m3_m1, a_r_m3_m1, psi_i_m3_m1, a_i_m3_m1, psi_a_m3_m1);
-    prodsum_psi_a_epi16(psi_r_m3_m3, a_r_m3_m3, psi_i_m3_m3, a_i_m3_m3, psi_a_m3_m3);
-    prodsum_psi_a_epi16(psi_r_m3_m5, a_r_m3_m5, psi_i_m3_m5, a_i_m3_m5, psi_a_m3_m5);
-    prodsum_psi_a_epi16(psi_r_m3_m7, a_r_m3_m7, psi_i_m3_m7, a_i_m3_m7, psi_a_m3_m7);
-    prodsum_psi_a_epi16(psi_r_m5_p7, a_r_m5_p7, psi_i_m5_p7, a_i_m5_p7, psi_a_m5_p7);
-    prodsum_psi_a_epi16(psi_r_m5_p5, a_r_m5_p5, psi_i_m5_p5, a_i_m5_p5, psi_a_m5_p5);
-    prodsum_psi_a_epi16(psi_r_m5_p3, a_r_m5_p3, psi_i_m5_p3, a_i_m5_p3, psi_a_m5_p3);
-    prodsum_psi_a_epi16(psi_r_m5_p1, a_r_m5_p1, psi_i_m5_p1, a_i_m5_p1, psi_a_m5_p1);
-    prodsum_psi_a_epi16(psi_r_m5_m1, a_r_m5_m1, psi_i_m5_m1, a_i_m5_m1, psi_a_m5_m1);
-    prodsum_psi_a_epi16(psi_r_m5_m3, a_r_m5_m3, psi_i_m5_m3, a_i_m5_m3, psi_a_m5_m3);
-    prodsum_psi_a_epi16(psi_r_m5_m5, a_r_m5_m5, psi_i_m5_m5, a_i_m5_m5, psi_a_m5_m5);
-    prodsum_psi_a_epi16(psi_r_m5_m7, a_r_m5_m7, psi_i_m5_m7, a_i_m5_m7, psi_a_m5_m7);
-    prodsum_psi_a_epi16(psi_r_m7_p7, a_r_m7_p7, psi_i_m7_p7, a_i_m7_p7, psi_a_m7_p7);
-    prodsum_psi_a_epi16(psi_r_m7_p5, a_r_m7_p5, psi_i_m7_p5, a_i_m7_p5, psi_a_m7_p5);
-    prodsum_psi_a_epi16(psi_r_m7_p3, a_r_m7_p3, psi_i_m7_p3, a_i_m7_p3, psi_a_m7_p3);
-    prodsum_psi_a_epi16(psi_r_m7_p1, a_r_m7_p1, psi_i_m7_p1, a_i_m7_p1, psi_a_m7_p1);
-    prodsum_psi_a_epi16(psi_r_m7_m1, a_r_m7_m1, psi_i_m7_m1, a_i_m7_m1, psi_a_m7_m1);
-    prodsum_psi_a_epi16(psi_r_m7_m3, a_r_m7_m3, psi_i_m7_m3, a_i_m7_m3, psi_a_m7_m3);
-    prodsum_psi_a_epi16(psi_r_m7_m5, a_r_m7_m5, psi_i_m7_m5, a_i_m7_m5, psi_a_m7_m5);
-    prodsum_psi_a_epi16(psi_r_m7_m7, a_r_m7_m7, psi_i_m7_m7, a_i_m7_m7, psi_a_m7_m7);
-
-    // Multiply by sqrt(2)
-    psi_a_p7_p7 = _mm256_mulhi_epi16(psi_a_p7_p7, ONE_OVER_SQRT_2);
-    psi_a_p7_p7 = _mm256_slli_epi16(psi_a_p7_p7, 2);
-    psi_a_p7_p5 = _mm256_mulhi_epi16(psi_a_p7_p5, ONE_OVER_SQRT_2);
-    psi_a_p7_p5 = _mm256_slli_epi16(psi_a_p7_p5, 2);
-    psi_a_p7_p3 = _mm256_mulhi_epi16(psi_a_p7_p3, ONE_OVER_SQRT_2);
-    psi_a_p7_p3 = _mm256_slli_epi16(psi_a_p7_p3, 2);
-    psi_a_p7_p1 = _mm256_mulhi_epi16(psi_a_p7_p1, ONE_OVER_SQRT_2);
-    psi_a_p7_p1 = _mm256_slli_epi16(psi_a_p7_p1, 2);
-    psi_a_p7_m1 = _mm256_mulhi_epi16(psi_a_p7_m1, ONE_OVER_SQRT_2);
-    psi_a_p7_m1 = _mm256_slli_epi16(psi_a_p7_m1, 2);
-    psi_a_p7_m3 = _mm256_mulhi_epi16(psi_a_p7_m3, ONE_OVER_SQRT_2);
-    psi_a_p7_m3 = _mm256_slli_epi16(psi_a_p7_m3, 2);
-    psi_a_p7_m5 = _mm256_mulhi_epi16(psi_a_p7_m5, ONE_OVER_SQRT_2);
-    psi_a_p7_m5 = _mm256_slli_epi16(psi_a_p7_m5, 2);
-    psi_a_p7_m7 = _mm256_mulhi_epi16(psi_a_p7_m7, ONE_OVER_SQRT_2);
-    psi_a_p7_m7 = _mm256_slli_epi16(psi_a_p7_m7, 2);
-    psi_a_p5_p7 = _mm256_mulhi_epi16(psi_a_p5_p7, ONE_OVER_SQRT_2);
-    psi_a_p5_p7 = _mm256_slli_epi16(psi_a_p5_p7, 2);
-    psi_a_p5_p5 = _mm256_mulhi_epi16(psi_a_p5_p5, ONE_OVER_SQRT_2);
-    psi_a_p5_p5 = _mm256_slli_epi16(psi_a_p5_p5, 2);
-    psi_a_p5_p3 = _mm256_mulhi_epi16(psi_a_p5_p3, ONE_OVER_SQRT_2);
-    psi_a_p5_p3 = _mm256_slli_epi16(psi_a_p5_p3, 2);
-    psi_a_p5_p1 = _mm256_mulhi_epi16(psi_a_p5_p1, ONE_OVER_SQRT_2);
-    psi_a_p5_p1 = _mm256_slli_epi16(psi_a_p5_p1, 2);
-    psi_a_p5_m1 = _mm256_mulhi_epi16(psi_a_p5_m1, ONE_OVER_SQRT_2);
-    psi_a_p5_m1 = _mm256_slli_epi16(psi_a_p5_m1, 2);
-    psi_a_p5_m3 = _mm256_mulhi_epi16(psi_a_p5_m3, ONE_OVER_SQRT_2);
-    psi_a_p5_m3 = _mm256_slli_epi16(psi_a_p5_m3, 2);
-    psi_a_p5_m5 = _mm256_mulhi_epi16(psi_a_p5_m5, ONE_OVER_SQRT_2);
-    psi_a_p5_m5 = _mm256_slli_epi16(psi_a_p5_m5, 2);
-    psi_a_p5_m7 = _mm256_mulhi_epi16(psi_a_p5_m7, ONE_OVER_SQRT_2);
-    psi_a_p5_m7 = _mm256_slli_epi16(psi_a_p5_m7, 2);
-    psi_a_p3_p7 = _mm256_mulhi_epi16(psi_a_p3_p7, ONE_OVER_SQRT_2);
-    psi_a_p3_p7 = _mm256_slli_epi16(psi_a_p3_p7, 2);
-    psi_a_p3_p5 = _mm256_mulhi_epi16(psi_a_p3_p5, ONE_OVER_SQRT_2);
-    psi_a_p3_p5 = _mm256_slli_epi16(psi_a_p3_p5, 2);
-    psi_a_p3_p3 = _mm256_mulhi_epi16(psi_a_p3_p3, ONE_OVER_SQRT_2);
-    psi_a_p3_p3 = _mm256_slli_epi16(psi_a_p3_p3, 2);
-    psi_a_p3_p1 = _mm256_mulhi_epi16(psi_a_p3_p1, ONE_OVER_SQRT_2);
-    psi_a_p3_p1 = _mm256_slli_epi16(psi_a_p3_p1, 2);
-    psi_a_p3_m1 = _mm256_mulhi_epi16(psi_a_p3_m1, ONE_OVER_SQRT_2);
-    psi_a_p3_m1 = _mm256_slli_epi16(psi_a_p3_m1, 2);
-    psi_a_p3_m3 = _mm256_mulhi_epi16(psi_a_p3_m3, ONE_OVER_SQRT_2);
-    psi_a_p3_m3 = _mm256_slli_epi16(psi_a_p3_m3, 2);
-    psi_a_p3_m5 = _mm256_mulhi_epi16(psi_a_p3_m5, ONE_OVER_SQRT_2);
-    psi_a_p3_m5 = _mm256_slli_epi16(psi_a_p3_m5, 2);
-    psi_a_p3_m7 = _mm256_mulhi_epi16(psi_a_p3_m7, ONE_OVER_SQRT_2);
-    psi_a_p3_m7 = _mm256_slli_epi16(psi_a_p3_m7, 2);
-    psi_a_p1_p7 = _mm256_mulhi_epi16(psi_a_p1_p7, ONE_OVER_SQRT_2);
-    psi_a_p1_p7 = _mm256_slli_epi16(psi_a_p1_p7, 2);
-    psi_a_p1_p5 = _mm256_mulhi_epi16(psi_a_p1_p5, ONE_OVER_SQRT_2);
-    psi_a_p1_p5 = _mm256_slli_epi16(psi_a_p1_p5, 2);
-    psi_a_p1_p3 = _mm256_mulhi_epi16(psi_a_p1_p3, ONE_OVER_SQRT_2);
-    psi_a_p1_p3 = _mm256_slli_epi16(psi_a_p1_p3, 2);
-    psi_a_p1_p1 = _mm256_mulhi_epi16(psi_a_p1_p1, ONE_OVER_SQRT_2);
-    psi_a_p1_p1 = _mm256_slli_epi16(psi_a_p1_p1, 2);
-    psi_a_p1_m1 = _mm256_mulhi_epi16(psi_a_p1_m1, ONE_OVER_SQRT_2);
-    psi_a_p1_m1 = _mm256_slli_epi16(psi_a_p1_m1, 2);
-    psi_a_p1_m3 = _mm256_mulhi_epi16(psi_a_p1_m3, ONE_OVER_SQRT_2);
-    psi_a_p1_m3 = _mm256_slli_epi16(psi_a_p1_m3, 2);
-    psi_a_p1_m5 = _mm256_mulhi_epi16(psi_a_p1_m5, ONE_OVER_SQRT_2);
-    psi_a_p1_m5 = _mm256_slli_epi16(psi_a_p1_m5, 2);
-    psi_a_p1_m7 = _mm256_mulhi_epi16(psi_a_p1_m7, ONE_OVER_SQRT_2);
-    psi_a_p1_m7 = _mm256_slli_epi16(psi_a_p1_m7, 2);
-    psi_a_m1_p7 = _mm256_mulhi_epi16(psi_a_m1_p7, ONE_OVER_SQRT_2);
-    psi_a_m1_p7 = _mm256_slli_epi16(psi_a_m1_p7, 2);
-    psi_a_m1_p5 = _mm256_mulhi_epi16(psi_a_m1_p5, ONE_OVER_SQRT_2);
-    psi_a_m1_p5 = _mm256_slli_epi16(psi_a_m1_p5, 2);
-    psi_a_m1_p3 = _mm256_mulhi_epi16(psi_a_m1_p3, ONE_OVER_SQRT_2);
-    psi_a_m1_p3 = _mm256_slli_epi16(psi_a_m1_p3, 2);
-    psi_a_m1_p1 = _mm256_mulhi_epi16(psi_a_m1_p1, ONE_OVER_SQRT_2);
-    psi_a_m1_p1 = _mm256_slli_epi16(psi_a_m1_p1, 2);
-    psi_a_m1_m1 = _mm256_mulhi_epi16(psi_a_m1_m1, ONE_OVER_SQRT_2);
-    psi_a_m1_m1 = _mm256_slli_epi16(psi_a_m1_m1, 2);
-    psi_a_m1_m3 = _mm256_mulhi_epi16(psi_a_m1_m3, ONE_OVER_SQRT_2);
-    psi_a_m1_m3 = _mm256_slli_epi16(psi_a_m1_m3, 2);
-    psi_a_m1_m5 = _mm256_mulhi_epi16(psi_a_m1_m5, ONE_OVER_SQRT_2);
-    psi_a_m1_m5 = _mm256_slli_epi16(psi_a_m1_m5, 2);
-    psi_a_m1_m7 = _mm256_mulhi_epi16(psi_a_m1_m7, ONE_OVER_SQRT_2);
-    psi_a_m1_m7 = _mm256_slli_epi16(psi_a_m1_m7, 2);
-    psi_a_m3_p7 = _mm256_mulhi_epi16(psi_a_m3_p7, ONE_OVER_SQRT_2);
-    psi_a_m3_p7 = _mm256_slli_epi16(psi_a_m3_p7, 2);
-    psi_a_m3_p5 = _mm256_mulhi_epi16(psi_a_m3_p5, ONE_OVER_SQRT_2);
-    psi_a_m3_p5 = _mm256_slli_epi16(psi_a_m3_p5, 2);
-    psi_a_m3_p3 = _mm256_mulhi_epi16(psi_a_m3_p3, ONE_OVER_SQRT_2);
-    psi_a_m3_p3 = _mm256_slli_epi16(psi_a_m3_p3, 2);
-    psi_a_m3_p1 = _mm256_mulhi_epi16(psi_a_m3_p1, ONE_OVER_SQRT_2);
-    psi_a_m3_p1 = _mm256_slli_epi16(psi_a_m3_p1, 2);
-    psi_a_m3_m1 = _mm256_mulhi_epi16(psi_a_m3_m1, ONE_OVER_SQRT_2);
-    psi_a_m3_m1 = _mm256_slli_epi16(psi_a_m3_m1, 2);
-    psi_a_m3_m3 = _mm256_mulhi_epi16(psi_a_m3_m3, ONE_OVER_SQRT_2);
-    psi_a_m3_m3 = _mm256_slli_epi16(psi_a_m3_m3, 2);
-    psi_a_m3_m5 = _mm256_mulhi_epi16(psi_a_m3_m5, ONE_OVER_SQRT_2);
-    psi_a_m3_m5 = _mm256_slli_epi16(psi_a_m3_m5, 2);
-    psi_a_m3_m7 = _mm256_mulhi_epi16(psi_a_m3_m7, ONE_OVER_SQRT_2);
-    psi_a_m3_m7 = _mm256_slli_epi16(psi_a_m3_m7, 2);
-    psi_a_m5_p7 = _mm256_mulhi_epi16(psi_a_m5_p7, ONE_OVER_SQRT_2);
-    psi_a_m5_p7 = _mm256_slli_epi16(psi_a_m5_p7, 2);
-    psi_a_m5_p5 = _mm256_mulhi_epi16(psi_a_m5_p5, ONE_OVER_SQRT_2);
-    psi_a_m5_p5 = _mm256_slli_epi16(psi_a_m5_p5, 2);
-    psi_a_m5_p3 = _mm256_mulhi_epi16(psi_a_m5_p3, ONE_OVER_SQRT_2);
-    psi_a_m5_p3 = _mm256_slli_epi16(psi_a_m5_p3, 2);
-    psi_a_m5_p1 = _mm256_mulhi_epi16(psi_a_m5_p1, ONE_OVER_SQRT_2);
-    psi_a_m5_p1 = _mm256_slli_epi16(psi_a_m5_p1, 2);
-    psi_a_m5_m1 = _mm256_mulhi_epi16(psi_a_m5_m1, ONE_OVER_SQRT_2);
-    psi_a_m5_m1 = _mm256_slli_epi16(psi_a_m5_m1, 2);
-    psi_a_m5_m3 = _mm256_mulhi_epi16(psi_a_m5_m3, ONE_OVER_SQRT_2);
-    psi_a_m5_m3 = _mm256_slli_epi16(psi_a_m5_m3, 2);
-    psi_a_m5_m5 = _mm256_mulhi_epi16(psi_a_m5_m5, ONE_OVER_SQRT_2);
-    psi_a_m5_m5 = _mm256_slli_epi16(psi_a_m5_m5, 2);
-    psi_a_m5_m7 = _mm256_mulhi_epi16(psi_a_m5_m7, ONE_OVER_SQRT_2);
-    psi_a_m5_m7 = _mm256_slli_epi16(psi_a_m5_m7, 2);
-    psi_a_m7_p7 = _mm256_mulhi_epi16(psi_a_m7_p7, ONE_OVER_SQRT_2);
-    psi_a_m7_p7 = _mm256_slli_epi16(psi_a_m7_p7, 2);
-    psi_a_m7_p5 = _mm256_mulhi_epi16(psi_a_m7_p5, ONE_OVER_SQRT_2);
-    psi_a_m7_p5 = _mm256_slli_epi16(psi_a_m7_p5, 2);
-    psi_a_m7_p3 = _mm256_mulhi_epi16(psi_a_m7_p3, ONE_OVER_SQRT_2);
-    psi_a_m7_p3 = _mm256_slli_epi16(psi_a_m7_p3, 2);
-    psi_a_m7_p1 = _mm256_mulhi_epi16(psi_a_m7_p1, ONE_OVER_SQRT_2);
-    psi_a_m7_p1 = _mm256_slli_epi16(psi_a_m7_p1, 2);
-    psi_a_m7_m1 = _mm256_mulhi_epi16(psi_a_m7_m1, ONE_OVER_SQRT_2);
-    psi_a_m7_m1 = _mm256_slli_epi16(psi_a_m7_m1, 2);
-    psi_a_m7_m3 = _mm256_mulhi_epi16(psi_a_m7_m3, ONE_OVER_SQRT_2);
-    psi_a_m7_m3 = _mm256_slli_epi16(psi_a_m7_m3, 2);
-    psi_a_m7_m5 = _mm256_mulhi_epi16(psi_a_m7_m5, ONE_OVER_SQRT_2);
-    psi_a_m7_m5 = _mm256_slli_epi16(psi_a_m7_m5, 2);
-    psi_a_m7_m7 = _mm256_mulhi_epi16(psi_a_m7_m7, ONE_OVER_SQRT_2);
-    psi_a_m7_m7 = _mm256_slli_epi16(psi_a_m7_m7, 2);
-
-    // Calculation of a group of two terms in the bit metric involving squares of interference
-    square_a_64qam_epi16(a_r_p7_p7, a_i_p7_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_p7);
-    square_a_64qam_epi16(a_r_p7_p5, a_i_p7_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_p5);
-    square_a_64qam_epi16(a_r_p7_p3, a_i_p7_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_p3);
-    square_a_64qam_epi16(a_r_p7_p1, a_i_p7_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_p1);
-    square_a_64qam_epi16(a_r_p7_m1, a_i_p7_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_m1);
-    square_a_64qam_epi16(a_r_p7_m3, a_i_p7_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_m3);
-    square_a_64qam_epi16(a_r_p7_m5, a_i_p7_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_m5);
-    square_a_64qam_epi16(a_r_p7_m7, a_i_p7_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_m7);
-    square_a_64qam_epi16(a_r_p5_p7, a_i_p5_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_p7);
-    square_a_64qam_epi16(a_r_p5_p5, a_i_p5_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_p5);
-    square_a_64qam_epi16(a_r_p5_p3, a_i_p5_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_p3);
-    square_a_64qam_epi16(a_r_p5_p1, a_i_p5_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_p1);
-    square_a_64qam_epi16(a_r_p5_m1, a_i_p5_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_m1);
-    square_a_64qam_epi16(a_r_p5_m3, a_i_p5_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_m3);
-    square_a_64qam_epi16(a_r_p5_m5, a_i_p5_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_m5);
-    square_a_64qam_epi16(a_r_p5_m7, a_i_p5_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_m7);
-    square_a_64qam_epi16(a_r_p3_p7, a_i_p3_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_p7);
-    square_a_64qam_epi16(a_r_p3_p5, a_i_p3_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_p5);
-    square_a_64qam_epi16(a_r_p3_p3, a_i_p3_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_p3);
-    square_a_64qam_epi16(a_r_p3_p1, a_i_p3_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_p1);
-    square_a_64qam_epi16(a_r_p3_m1, a_i_p3_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_m1);
-    square_a_64qam_epi16(a_r_p3_m3, a_i_p3_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_m3);
-    square_a_64qam_epi16(a_r_p3_m5, a_i_p3_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_m5);
-    square_a_64qam_epi16(a_r_p3_m7, a_i_p3_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_m7);
-    square_a_64qam_epi16(a_r_p1_p7, a_i_p1_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_p7);
-    square_a_64qam_epi16(a_r_p1_p5, a_i_p1_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_p5);
-    square_a_64qam_epi16(a_r_p1_p3, a_i_p1_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_p3);
-    square_a_64qam_epi16(a_r_p1_p1, a_i_p1_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_p1);
-    square_a_64qam_epi16(a_r_p1_m1, a_i_p1_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_m1);
-    square_a_64qam_epi16(a_r_p1_m3, a_i_p1_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_m3);
-    square_a_64qam_epi16(a_r_p1_m5, a_i_p1_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_m5);
-    square_a_64qam_epi16(a_r_p1_m7, a_i_p1_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_m7);
-    square_a_64qam_epi16(a_r_m1_p7, a_i_m1_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_p7);
-    square_a_64qam_epi16(a_r_m1_p5, a_i_m1_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_p5);
-    square_a_64qam_epi16(a_r_m1_p3, a_i_m1_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_p3);
-    square_a_64qam_epi16(a_r_m1_p1, a_i_m1_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_p1);
-    square_a_64qam_epi16(a_r_m1_m1, a_i_m1_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_m1);
-    square_a_64qam_epi16(a_r_m1_m3, a_i_m1_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_m3);
-    square_a_64qam_epi16(a_r_m1_m5, a_i_m1_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_m5);
-    square_a_64qam_epi16(a_r_m1_m7, a_i_m1_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_m7);
-    square_a_64qam_epi16(a_r_m3_p7, a_i_m3_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_p7);
-    square_a_64qam_epi16(a_r_m3_p5, a_i_m3_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_p5);
-    square_a_64qam_epi16(a_r_m3_p3, a_i_m3_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_p3);
-    square_a_64qam_epi16(a_r_m3_p1, a_i_m3_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_p1);
-    square_a_64qam_epi16(a_r_m3_m1, a_i_m3_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_m1);
-    square_a_64qam_epi16(a_r_m3_m3, a_i_m3_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_m3);
-    square_a_64qam_epi16(a_r_m3_m5, a_i_m3_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_m5);
-    square_a_64qam_epi16(a_r_m3_m7, a_i_m3_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_m7);
-    square_a_64qam_epi16(a_r_m5_p7, a_i_m5_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_p7);
-    square_a_64qam_epi16(a_r_m5_p5, a_i_m5_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_p5);
-    square_a_64qam_epi16(a_r_m5_p3, a_i_m5_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_p3);
-    square_a_64qam_epi16(a_r_m5_p1, a_i_m5_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_p1);
-    square_a_64qam_epi16(a_r_m5_m1, a_i_m5_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_m1);
-    square_a_64qam_epi16(a_r_m5_m3, a_i_m5_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_m3);
-    square_a_64qam_epi16(a_r_m5_m5, a_i_m5_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_m5);
-    square_a_64qam_epi16(a_r_m5_m7, a_i_m5_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_m7);
-    square_a_64qam_epi16(a_r_m7_p7, a_i_m7_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_p7);
-    square_a_64qam_epi16(a_r_m7_p5, a_i_m7_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_p5);
-    square_a_64qam_epi16(a_r_m7_p3, a_i_m7_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_p3);
-    square_a_64qam_epi16(a_r_m7_p1, a_i_m7_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_p1);
-    square_a_64qam_epi16(a_r_m7_m1, a_i_m7_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_m1);
-    square_a_64qam_epi16(a_r_m7_m3, a_i_m7_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_m3);
-    square_a_64qam_epi16(a_r_m7_m5, a_i_m7_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_m5);
-    square_a_64qam_epi16(a_r_m7_m7, a_i_m7_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_m7);
-
-    // Computing different multiples of ||h0||^2
-    // x=1, y=1
-    ch_mag_2_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,ONE_OVER_FOUR_SQRT_42);
-    ch_mag_2_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_2_over_42_with_sigma2,1);
-    // x=1, y=3
-    ch_mag_10_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,FIVE_OVER_FOUR_SQRT_42);
-    ch_mag_10_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_10_over_42_with_sigma2,1);
-    // x=1, x=5
-    ch_mag_26_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,THIRTEEN_OVER_FOUR_SQRT_42);
-    ch_mag_26_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_26_over_42_with_sigma2,1);
-    // x=1, y=7
-    ch_mag_50_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,TWENTYFIVE_OVER_FOUR_SQRT_42);
-    ch_mag_50_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_50_over_42_with_sigma2,1);
-    // x=3, y=3
-    ch_mag_18_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,NINE_OVER_FOUR_SQRT_42);
-    ch_mag_18_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_18_over_42_with_sigma2,1);
-    // x=3, y=5
-    ch_mag_34_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,SEVENTEEN_OVER_FOUR_SQRT_42);
-    ch_mag_34_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_34_over_42_with_sigma2,1);
-    // x=3, y=7
-    ch_mag_58_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,TWENTYNINE_OVER_FOUR_SQRT_42);
-    ch_mag_58_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_58_over_42_with_sigma2,2);
-    // x=5, y=5
-    ch_mag_50_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,TWENTYFIVE_OVER_FOUR_SQRT_42);
-    ch_mag_50_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_50_over_42_with_sigma2,1);
-    // x=5, y=7
-    ch_mag_74_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,THIRTYSEVEN_OVER_FOUR_SQRT_42);
-    ch_mag_74_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_74_over_42_with_sigma2,2);
-    // x=7, y=7
-    ch_mag_98_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,FORTYNINE_OVER_FOUR_SQRT_42);
-    ch_mag_98_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_98_over_42_with_sigma2,2);
-
-    // Computing Metrics
-    xmm0 = _mm256_subs_epi16(psi_a_p7_p7, a_sq_p7_p7);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_p_7_7);
-    bit_met_p7_p7 = _mm256_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p7_p5, a_sq_p7_p5);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_p_7_5);
-    bit_met_p7_p5 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p7_p3, a_sq_p7_p3);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_p_7_3);
-    bit_met_p7_p3 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p7_p1, a_sq_p7_p1);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_p_7_1);
-    bit_met_p7_p1 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p7_m1, a_sq_p7_m1);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_m_7_1);
-    bit_met_p7_m1 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p7_m3, a_sq_p7_m3);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_m_7_3);
-    bit_met_p7_m3 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p7_m5, a_sq_p7_m5);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_m_7_5);
-    bit_met_p7_m5 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p7_m7, a_sq_p7_m7);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_m_7_7);
-    bit_met_p7_m7 = _mm256_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p5_p7, a_sq_p5_p7);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_p_5_7);
-    bit_met_p5_p7 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p5_p5, a_sq_p5_p5);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_p_5_5);
-    bit_met_p5_p5 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p5_p3, a_sq_p5_p3);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_p_5_3);
-    bit_met_p5_p3 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p5_p1, a_sq_p5_p1);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_p_5_1);
-    bit_met_p5_p1 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p5_m1, a_sq_p5_m1);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_m_5_1);
-    bit_met_p5_m1 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p5_m3, a_sq_p5_m3);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_m_5_3);
-    bit_met_p5_m3 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p5_m5, a_sq_p5_m5);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_m_5_5);
-    bit_met_p5_m5 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p5_m7, a_sq_p5_m7);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_m_5_7);
-    bit_met_p5_m7 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p3_p7, a_sq_p3_p7);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_p_3_7);
-    bit_met_p3_p7 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p3_p5, a_sq_p3_p5);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_p_3_5);
-    bit_met_p3_p5 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p3_p3, a_sq_p3_p3);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_p_3_3);
-    bit_met_p3_p3 = _mm256_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p3_p1, a_sq_p3_p1);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_p_3_1);
-    bit_met_p3_p1 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p3_m1, a_sq_p3_m1);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_m_3_1);
-    bit_met_p3_m1 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p3_m3, a_sq_p3_m3);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_m_3_3);
-    bit_met_p3_m3 = _mm256_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p3_m5, a_sq_p3_m5);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_m_3_5);
-    bit_met_p3_m5 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p3_m7, a_sq_p3_m7);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_m_3_7);
-    bit_met_p3_m7 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p1_p7, a_sq_p1_p7);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_p_1_7);
-    bit_met_p1_p7 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p1_p5, a_sq_p1_p5);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_p_1_5);
-    bit_met_p1_p5 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p1_p3, a_sq_p1_p3);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_p_1_3);
-    bit_met_p1_p3 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p1_p1, a_sq_p1_p1);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_p_1_1);
-    bit_met_p1_p1 = _mm256_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p1_m1, a_sq_p1_m1);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_m_1_1);
-    bit_met_p1_m1 = _mm256_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p1_m3, a_sq_p1_m3);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_m_1_3);
-    bit_met_p1_m3 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p1_m5, a_sq_p1_m5);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_m_1_5);
-    bit_met_p1_m5 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_p1_m7, a_sq_p1_m7);
-    xmm1 = _mm256_adds_epi16(xmm0, y0_m_1_7);
-    bit_met_p1_m7 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-
-    xmm0 = _mm256_subs_epi16(psi_a_m1_p7, a_sq_m1_p7);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_m_1_7);
-    bit_met_m1_p7 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m1_p5, a_sq_m1_p5);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_m_1_5);
-    bit_met_m1_p5 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m1_p3, a_sq_m1_p3);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_m_1_3);
-    bit_met_m1_p3 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m1_p1, a_sq_m1_p1);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_m_1_1);
-    bit_met_m1_p1 = _mm256_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m1_m1, a_sq_m1_m1);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_p_1_1);
-    bit_met_m1_m1 = _mm256_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m1_m3, a_sq_m1_m3);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_p_1_3);
-    bit_met_m1_m3 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m1_m5, a_sq_m1_m5);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_p_1_5);
-    bit_met_m1_m5 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m1_m7, a_sq_m1_m7);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_p_1_7);
-    bit_met_m1_m7 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m3_p7, a_sq_m3_p7);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_m_3_7);
-    bit_met_m3_p7 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m3_p5, a_sq_m3_p5);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_m_3_5);
-    bit_met_m3_p5 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m3_p3, a_sq_m3_p3);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_m_3_3);
-    bit_met_m3_p3 = _mm256_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m3_p1, a_sq_m3_p1);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_m_3_1);
-    bit_met_m3_p1 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m3_m1, a_sq_m3_m1);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_p_3_1);
-    bit_met_m3_m1 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m3_m3, a_sq_m3_m3);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_p_3_3);
-    bit_met_m3_m3 = _mm256_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m3_m5, a_sq_m3_m5);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_p_3_5);
-    bit_met_m3_m5 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m3_m7, a_sq_m3_m7);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_p_3_7);
-    bit_met_m3_m7 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m5_p7, a_sq_m5_p7);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_m_5_7);
-    bit_met_m5_p7 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m5_p5, a_sq_m5_p5);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_m_5_5);
-    bit_met_m5_p5 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m5_p3, a_sq_m5_p3);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_m_5_3);
-    bit_met_m5_p3 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m5_p1, a_sq_m5_p1);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_m_5_1);
-    bit_met_m5_p1 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m5_m1, a_sq_m5_m1);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_p_5_1);
-    bit_met_m5_m1 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m5_m3, a_sq_m5_m3);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_p_5_3);
-    bit_met_m5_m3 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m5_m5, a_sq_m5_m5);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_p_5_5);
-    bit_met_m5_m5 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m5_m7, a_sq_m5_m7);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_p_5_7);
-    bit_met_m5_m7 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m7_p7, a_sq_m7_p7);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_m_7_7);
-    bit_met_m7_p7 = _mm256_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m7_p5, a_sq_m7_p5);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_m_7_5);
-    bit_met_m7_p5 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m7_p3, a_sq_m7_p3);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_m_7_3);
-    bit_met_m7_p3 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m7_p1, a_sq_m7_p1);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_m_7_1);
-    bit_met_m7_p1 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m7_m1, a_sq_m7_m1);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_p_7_1);
-    bit_met_m7_m1 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m7_m3, a_sq_m7_m3);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_p_7_3);
-    bit_met_m7_m3 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m7_m5, a_sq_m7_m5);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_p_7_5);
-    bit_met_m7_m5 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
-    xmm0 = _mm256_subs_epi16(psi_a_m7_m7, a_sq_m7_m7);
-    xmm1 = _mm256_subs_epi16(xmm0, y0_p_7_7);
-    bit_met_m7_m7 = _mm256_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2);
-
-    // Detection for 1st bit (LTE mapping)
-    // bit = 1
-    xmm0 = _mm256_max_epi16(bit_met_m7_p7, bit_met_m7_p5);
-    xmm1 = _mm256_max_epi16(bit_met_m7_p3, bit_met_m7_p1);
-    xmm2 = _mm256_max_epi16(bit_met_m7_m1, bit_met_m7_m3);
-    xmm3 = _mm256_max_epi16(bit_met_m7_m5, bit_met_m7_m7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(xmm4, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_m5_p7, bit_met_m5_p5);
-    xmm1 = _mm256_max_epi16(bit_met_m5_p3, bit_met_m5_p1);
-    xmm2 = _mm256_max_epi16(bit_met_m5_m1, bit_met_m5_m3);
-    xmm3 = _mm256_max_epi16(bit_met_m5_m5, bit_met_m5_m7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_m3_p7, bit_met_m3_p5);
-    xmm1 = _mm256_max_epi16(bit_met_m3_p3, bit_met_m3_p1);
-    xmm2 = _mm256_max_epi16(bit_met_m3_m1, bit_met_m3_m3);
-    xmm3 = _mm256_max_epi16(bit_met_m3_m5, bit_met_m3_m7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_m1_p7, bit_met_m1_p5);
-    xmm1 = _mm256_max_epi16(bit_met_m1_p3, bit_met_m1_p1);
-    xmm2 = _mm256_max_epi16(bit_met_m1_m1, bit_met_m1_m3);
-    xmm3 = _mm256_max_epi16(bit_met_m1_m5, bit_met_m1_m7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
-
-    // bit = 0
-    xmm0 = _mm256_max_epi16(bit_met_p7_p7, bit_met_p7_p5);
-    xmm1 = _mm256_max_epi16(bit_met_p7_p3, bit_met_p7_p1);
-    xmm2 = _mm256_max_epi16(bit_met_p7_m1, bit_met_p7_m3);
-    xmm3 = _mm256_max_epi16(bit_met_p7_m5, bit_met_p7_m7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(xmm4, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p5_p7, bit_met_p5_p5);
-    xmm1 = _mm256_max_epi16(bit_met_p5_p3, bit_met_p5_p1);
-    xmm2 = _mm256_max_epi16(bit_met_p5_m1, bit_met_p5_m3);
-    xmm3 = _mm256_max_epi16(bit_met_p5_m5, bit_met_p5_m7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p3_p7, bit_met_p3_p5);
-    xmm1 = _mm256_max_epi16(bit_met_p3_p3, bit_met_p3_p1);
-    xmm2 = _mm256_max_epi16(bit_met_p3_m1, bit_met_p3_m3);
-    xmm3 = _mm256_max_epi16(bit_met_p3_m5, bit_met_p3_m7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p1_p7, bit_met_p1_p5);
-    xmm1 = _mm256_max_epi16(bit_met_p1_p3, bit_met_p1_p1);
-    xmm2 = _mm256_max_epi16(bit_met_p1_m1, bit_met_p1_m3);
-    xmm3 = _mm256_max_epi16(bit_met_p1_m5, bit_met_p1_m7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
-
-    y0r = _mm256_subs_epi16(logmax_num_re0, logmax_den_re0);
-
-    // Detection for 2nd bit (LTE mapping)
-    // bit = 1
-    xmm0 = _mm256_max_epi16(bit_met_p7_m1, bit_met_p5_m1);
-    xmm1 = _mm256_max_epi16(bit_met_p3_m1, bit_met_p1_m1);
-    xmm2 = _mm256_max_epi16(bit_met_m1_m1, bit_met_m3_m1);
-    xmm3 = _mm256_max_epi16(bit_met_m5_m1, bit_met_m7_m1);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(xmm4, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p7_m3, bit_met_p5_m3);
-    xmm1 = _mm256_max_epi16(bit_met_p3_m3, bit_met_p1_m3);
-    xmm2 = _mm256_max_epi16(bit_met_m1_m3, bit_met_m3_m3);
-    xmm3 = _mm256_max_epi16(bit_met_m5_m3, bit_met_m7_m3);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p7_m5, bit_met_p5_m5);
-    xmm1 = _mm256_max_epi16(bit_met_p3_m5, bit_met_p1_m5);
-    xmm2 = _mm256_max_epi16(bit_met_m1_m5, bit_met_m3_m5);
-    xmm3 = _mm256_max_epi16(bit_met_m5_m5, bit_met_m7_m5);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p7_m7, bit_met_p5_m7);
-    xmm1 = _mm256_max_epi16(bit_met_p3_m7, bit_met_p1_m7);
-    xmm2 = _mm256_max_epi16(bit_met_m1_m7, bit_met_m3_m7);
-    xmm3 = _mm256_max_epi16(bit_met_m5_m7, bit_met_m7_m7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
-
-    // bit = 0
-    xmm0 = _mm256_max_epi16(bit_met_p7_p1, bit_met_p5_p1);
-    xmm1 = _mm256_max_epi16(bit_met_p3_p1, bit_met_p1_p1);
-    xmm2 = _mm256_max_epi16(bit_met_m1_p1, bit_met_m3_p1);
-    xmm3 = _mm256_max_epi16(bit_met_m5_p1, bit_met_m7_p1);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(xmm4, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p7_p3, bit_met_p5_p3);
-    xmm1 = _mm256_max_epi16(bit_met_p3_p3, bit_met_p1_p3);
-    xmm2 = _mm256_max_epi16(bit_met_m1_p3, bit_met_m3_p3);
-    xmm3 = _mm256_max_epi16(bit_met_m5_p3, bit_met_m7_p3);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p7_p5, bit_met_p5_p5);
-    xmm1 = _mm256_max_epi16(bit_met_p3_p5, bit_met_p1_p5);
-    xmm2 = _mm256_max_epi16(bit_met_m1_p5, bit_met_m3_p5);
-    xmm3 = _mm256_max_epi16(bit_met_m5_p5, bit_met_m7_p5);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p7_p7, bit_met_p5_p7);
-    xmm1 = _mm256_max_epi16(bit_met_p3_p7, bit_met_p1_p7);
-    xmm2 = _mm256_max_epi16(bit_met_m1_p7, bit_met_m3_p7);
-    xmm3 = _mm256_max_epi16(bit_met_m5_p7, bit_met_m7_p7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
-
-    y1r = _mm256_subs_epi16(logmax_num_re0, logmax_den_re0);
-
-    // Detection for 3rd bit (LTE mapping)
-    xmm0 = _mm256_max_epi16(bit_met_m7_m7, bit_met_m7_m5);
-    xmm1 = _mm256_max_epi16(bit_met_m7_m3, bit_met_m7_m1);
-    xmm2 = _mm256_max_epi16(bit_met_m7_p1, bit_met_m7_p3);
-    xmm3 = _mm256_max_epi16(bit_met_m7_p5, bit_met_m7_p7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(xmm4, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_m5_m7, bit_met_m5_m5);
-    xmm1 = _mm256_max_epi16(bit_met_m5_m3, bit_met_m5_m1);
-    xmm2 = _mm256_max_epi16(bit_met_m5_p1, bit_met_m5_p3);
-    xmm3 = _mm256_max_epi16(bit_met_m5_p5, bit_met_m5_p7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p5_m7, bit_met_p5_m5);
-    xmm1 = _mm256_max_epi16(bit_met_p5_m3, bit_met_p5_m1);
-    xmm2 = _mm256_max_epi16(bit_met_p5_p1, bit_met_p5_p3);
-    xmm3 = _mm256_max_epi16(bit_met_p5_p5, bit_met_p5_p7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p7_m7, bit_met_p7_m5);
-    xmm1 = _mm256_max_epi16(bit_met_p7_m3, bit_met_p7_m1);
-    xmm2 = _mm256_max_epi16(bit_met_p7_p1, bit_met_p7_p3);
-    xmm3 = _mm256_max_epi16(bit_met_p7_p5, bit_met_p7_p7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
-
-    xmm0 = _mm256_max_epi16(bit_met_m3_m7, bit_met_m3_m5);
-    xmm1 = _mm256_max_epi16(bit_met_m3_m3, bit_met_m3_m1);
-    xmm2 = _mm256_max_epi16(bit_met_m3_p1, bit_met_m3_p3);
-    xmm3 = _mm256_max_epi16(bit_met_m3_p5, bit_met_m3_p7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(xmm4, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_m1_m7, bit_met_m1_m5);
-    xmm1 = _mm256_max_epi16(bit_met_m1_m3, bit_met_m1_m1);
-    xmm2 = _mm256_max_epi16(bit_met_m1_p1, bit_met_m1_p3);
-    xmm3 = _mm256_max_epi16(bit_met_m1_p5, bit_met_m1_p7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p1_m7, bit_met_p1_m5);
-    xmm1 = _mm256_max_epi16(bit_met_p1_m3, bit_met_p1_m1);
-    xmm2 = _mm256_max_epi16(bit_met_p1_p1, bit_met_p1_p3);
-    xmm3 = _mm256_max_epi16(bit_met_p1_p5, bit_met_p1_p7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p3_m7, bit_met_p3_m5);
-    xmm1 = _mm256_max_epi16(bit_met_p3_m3, bit_met_p3_m1);
-    xmm2 = _mm256_max_epi16(bit_met_p3_p1, bit_met_p3_p3);
-    xmm3 = _mm256_max_epi16(bit_met_p3_p5, bit_met_p3_p7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
-
-    y2r = _mm256_subs_epi16(logmax_num_re0, logmax_den_re0);
-
-    // Detection for 4th bit (LTE mapping)
-    xmm0 = _mm256_max_epi16(bit_met_p7_p7, bit_met_p5_p7);
-    xmm1 = _mm256_max_epi16(bit_met_p3_p7, bit_met_p1_p7);
-    xmm2 = _mm256_max_epi16(bit_met_m1_p7, bit_met_m3_p7);
-    xmm3 = _mm256_max_epi16(bit_met_m5_p7, bit_met_m7_p7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(xmm4, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p7_p5, bit_met_p5_p5);
-    xmm1 = _mm256_max_epi16(bit_met_p3_p5, bit_met_p1_p5);
-    xmm2 = _mm256_max_epi16(bit_met_m1_p5, bit_met_m3_p5);
-    xmm3 = _mm256_max_epi16(bit_met_m5_p5, bit_met_m5_p5);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p7_m5, bit_met_p5_m5);
-    xmm1 = _mm256_max_epi16(bit_met_p3_m5, bit_met_p1_m5);
-    xmm2 = _mm256_max_epi16(bit_met_m1_m5, bit_met_m3_m5);
-    xmm3 = _mm256_max_epi16(bit_met_m5_m5, bit_met_m7_m5);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p7_m7, bit_met_p5_m7);
-    xmm1 = _mm256_max_epi16(bit_met_p3_m7, bit_met_p1_m7);
-    xmm2 = _mm256_max_epi16(bit_met_m1_m7, bit_met_m3_m7);
-    xmm3 = _mm256_max_epi16(bit_met_m5_m7, bit_met_m7_m7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
-
-    xmm0 = _mm256_max_epi16(bit_met_p7_m1, bit_met_p5_m1);
-    xmm1 = _mm256_max_epi16(bit_met_p3_m1, bit_met_p1_m1);
-    xmm2 = _mm256_max_epi16(bit_met_m1_m1, bit_met_m3_m1);
-    xmm3 = _mm256_max_epi16(bit_met_m5_m1, bit_met_m7_m1);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(xmm4, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p7_m3, bit_met_p5_m3);
-    xmm1 = _mm256_max_epi16(bit_met_p3_m3, bit_met_p1_m3);
-    xmm2 = _mm256_max_epi16(bit_met_m1_m3, bit_met_m3_m3);
-    xmm3 = _mm256_max_epi16(bit_met_m5_m3, bit_met_m7_m3);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p7_p1, bit_met_p5_p1);
-    xmm1 = _mm256_max_epi16(bit_met_p3_p1, bit_met_p1_p1);
-    xmm2 = _mm256_max_epi16(bit_met_m1_p1, bit_met_m3_p1);
-    xmm3 = _mm256_max_epi16(bit_met_m5_p1, bit_met_m7_p1);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p7_p3, bit_met_p5_p3);
-    xmm1 = _mm256_max_epi16(bit_met_p3_p3, bit_met_p1_p3);
-    xmm2 = _mm256_max_epi16(bit_met_m1_p3, bit_met_m3_p3);
-    xmm3 = _mm256_max_epi16(bit_met_m5_p3, bit_met_m7_p3);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
-
-    y0i = _mm256_subs_epi16(logmax_num_re0, logmax_den_re0);
-
-
-    // Detection for 5th bit (LTE mapping)
-    xmm0 = _mm256_max_epi16(bit_met_m7_m7, bit_met_m7_m5);
-    xmm1 = _mm256_max_epi16(bit_met_m7_m3, bit_met_m7_m1);
-    xmm2 = _mm256_max_epi16(bit_met_m7_p1, bit_met_m7_p3);
-    xmm3 = _mm256_max_epi16(bit_met_m7_p5, bit_met_m7_p7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(xmm4, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_m1_m7, bit_met_m1_m5);
-    xmm1 = _mm256_max_epi16(bit_met_m1_m3, bit_met_m1_m1);
-    xmm2 = _mm256_max_epi16(bit_met_m1_p1, bit_met_m1_p3);
-    xmm3 = _mm256_max_epi16(bit_met_m1_p5, bit_met_m1_p7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p1_m7, bit_met_p1_m5);
-    xmm1 = _mm256_max_epi16(bit_met_p1_m3, bit_met_p1_m1);
-    xmm2 = _mm256_max_epi16(bit_met_p1_p1, bit_met_p1_p3);
-    xmm3 = _mm256_max_epi16(bit_met_p1_p5, bit_met_p1_p7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p7_m7, bit_met_p7_m5);
-    xmm1 = _mm256_max_epi16(bit_met_p7_m3, bit_met_p7_m1);
-    xmm2 = _mm256_max_epi16(bit_met_p7_p1, bit_met_p7_p3);
-    xmm3 = _mm256_max_epi16(bit_met_p7_p5, bit_met_p7_p7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
-
-    xmm0 = _mm256_max_epi16(bit_met_m5_m7, bit_met_m5_m5);
-    xmm1 = _mm256_max_epi16(bit_met_m5_m3, bit_met_m5_m1);
-    xmm2 = _mm256_max_epi16(bit_met_m5_p1, bit_met_m5_p3);
-    xmm3 = _mm256_max_epi16(bit_met_m5_p5, bit_met_m5_p7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(xmm4, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_m3_m7, bit_met_m3_m5);
-    xmm1 = _mm256_max_epi16(bit_met_m3_m3, bit_met_m3_m1);
-    xmm2 = _mm256_max_epi16(bit_met_m3_p1, bit_met_m3_p3);
-    xmm3 = _mm256_max_epi16(bit_met_m3_p5, bit_met_m3_p7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p3_m7, bit_met_p3_m5);
-    xmm1 = _mm256_max_epi16(bit_met_p3_m3, bit_met_p3_m1);
-    xmm2 = _mm256_max_epi16(bit_met_p3_p1, bit_met_p3_p3);
-    xmm3 = _mm256_max_epi16(bit_met_p3_p5, bit_met_p3_p7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p5_m7, bit_met_p5_m5);
-    xmm1 = _mm256_max_epi16(bit_met_p5_m3, bit_met_p5_m1);
-    xmm2 = _mm256_max_epi16(bit_met_p5_p1, bit_met_p5_p3);
-    xmm3 = _mm256_max_epi16(bit_met_p5_p5, bit_met_p5_p7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
-
-    y1i = _mm256_subs_epi16(logmax_num_re0, logmax_den_re0);
-
-    // Detection for 6th bit (LTE mapping)
-    xmm0 = _mm256_max_epi16(bit_met_p7_p7, bit_met_p5_p7);
-    xmm1 = _mm256_max_epi16(bit_met_p3_p7, bit_met_p1_p7);
-    xmm2 = _mm256_max_epi16(bit_met_m1_p7, bit_met_m3_p7);
-    xmm3 = _mm256_max_epi16(bit_met_m5_p7, bit_met_m7_p7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(xmm4, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p7_p1, bit_met_p5_p1);
-    xmm1 = _mm256_max_epi16(bit_met_p3_p1, bit_met_p1_p1);
-    xmm2 = _mm256_max_epi16(bit_met_m1_p1, bit_met_m3_p1);
-    xmm3 = _mm256_max_epi16(bit_met_m5_p1, bit_met_m5_p1);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p7_m1, bit_met_p5_m1);
-    xmm1 = _mm256_max_epi16(bit_met_p3_m1, bit_met_p1_m1);
-    xmm2 = _mm256_max_epi16(bit_met_m1_m1, bit_met_m3_m1);
-    xmm3 = _mm256_max_epi16(bit_met_m5_m1, bit_met_m7_m1);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p7_m7, bit_met_p5_m7);
-    xmm1 = _mm256_max_epi16(bit_met_p3_m7, bit_met_p1_m7);
-    xmm2 = _mm256_max_epi16(bit_met_m1_m7, bit_met_m3_m7);
-    xmm3 = _mm256_max_epi16(bit_met_m5_m7, bit_met_m7_m7);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
-
-    xmm0 = _mm256_max_epi16(bit_met_p7_m5, bit_met_p5_m5);
-    xmm1 = _mm256_max_epi16(bit_met_p3_m5, bit_met_p1_m5);
-    xmm2 = _mm256_max_epi16(bit_met_m1_m5, bit_met_m3_m5);
-    xmm3 = _mm256_max_epi16(bit_met_m5_m5, bit_met_m7_m5);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(xmm4, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p7_m3, bit_met_p5_m3);
-    xmm1 = _mm256_max_epi16(bit_met_p3_m3, bit_met_p1_m3);
-    xmm2 = _mm256_max_epi16(bit_met_m1_m3, bit_met_m3_m3);
-    xmm3 = _mm256_max_epi16(bit_met_m5_m3, bit_met_m7_m3);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p7_p3, bit_met_p5_p3);
-    xmm1 = _mm256_max_epi16(bit_met_p3_p3, bit_met_p1_p3);
-    xmm2 = _mm256_max_epi16(bit_met_m1_p3, bit_met_m3_p3);
-    xmm3 = _mm256_max_epi16(bit_met_m5_p3, bit_met_m7_p3);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm256_max_epi16(bit_met_p7_p5, bit_met_p5_p5);
-    xmm1 = _mm256_max_epi16(bit_met_p3_p5, bit_met_p1_p5);
-    xmm2 = _mm256_max_epi16(bit_met_m1_p5, bit_met_m3_p5);
-    xmm3 = _mm256_max_epi16(bit_met_m5_p5, bit_met_m7_p5);
-    xmm4 = _mm256_max_epi16(xmm0, xmm1);
-    xmm5 = _mm256_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
-
-    y2i = _mm256_subs_epi16(logmax_num_re0, logmax_den_re0);
-
-    // map to output stream, difficult to do in SIMD since we have 6 16bit LLRs
-    // RE 1
-    j = 48*i;
-    stream0_out[j + 0] = ((short *)&y0r)[0];
-    stream0_out[j + 1] = ((short *)&y1r)[0];
-    stream0_out[j + 2] = ((short *)&y2r)[0];
-    stream0_out[j + 3] = ((short *)&y0i)[0];
-    stream0_out[j + 4] = ((short *)&y1i)[0];
-    stream0_out[j + 5] = ((short *)&y2i)[0];
-    // RE 2
-    stream0_out[j + 6] = ((short *)&y0r)[1];
-    stream0_out[j + 7] = ((short *)&y1r)[1];
-    stream0_out[j + 8] = ((short *)&y2r)[1];
-    stream0_out[j + 9] = ((short *)&y0i)[1];
-    stream0_out[j + 10] = ((short *)&y1i)[1];
-    stream0_out[j + 11] = ((short *)&y2i)[1];
-    // RE 3
-    stream0_out[j + 12] = ((short *)&y0r)[2];
-    stream0_out[j + 13] = ((short *)&y1r)[2];
-    stream0_out[j + 14] = ((short *)&y2r)[2];
-    stream0_out[j + 15] = ((short *)&y0i)[2];
-    stream0_out[j + 16] = ((short *)&y1i)[2];
-    stream0_out[j + 17] = ((short *)&y2i)[2];
-    // RE 4
-    stream0_out[j + 18] = ((short *)&y0r)[3];
-    stream0_out[j + 19] = ((short *)&y1r)[3];
-    stream0_out[j + 20] = ((short *)&y2r)[3];
-    stream0_out[j + 21] = ((short *)&y0i)[3];
-    stream0_out[j + 22] = ((short *)&y1i)[3];
-    stream0_out[j + 23] = ((short *)&y2i)[3];
-    // RE 5
-    stream0_out[j + 24] = ((short *)&y0r)[4];
-    stream0_out[j + 25] = ((short *)&y1r)[4];
-    stream0_out[j + 26] = ((short *)&y2r)[4];
-    stream0_out[j + 27] = ((short *)&y0i)[4];
-    stream0_out[j + 28] = ((short *)&y1i)[4];
-    stream0_out[j + 29] = ((short *)&y2i)[4];
-    // RE 6
-    stream0_out[j + 30] = ((short *)&y0r)[5];
-    stream0_out[j + 31] = ((short *)&y1r)[5];
-    stream0_out[j + 32] = ((short *)&y2r)[5];
-    stream0_out[j + 33] = ((short *)&y0i)[5];
-    stream0_out[j + 34] = ((short *)&y1i)[5];
-    stream0_out[j + 35] = ((short *)&y2i)[5];
-    // RE 7
-    stream0_out[j + 36] = ((short *)&y0r)[6];
-    stream0_out[j + 37] = ((short *)&y1r)[6];
-    stream0_out[j + 38] = ((short *)&y2r)[6];
-    stream0_out[j + 39] = ((short *)&y0i)[6];
-    stream0_out[j + 40] = ((short *)&y1i)[6];
-    stream0_out[j + 41] = ((short *)&y2i)[6];
-    // RE 8
-    stream0_out[j + 42] = ((short *)&y0r)[7];
-    stream0_out[j + 43] = ((short *)&y1r)[7];
-    stream0_out[j + 44] = ((short *)&y2r)[7];
-    stream0_out[j + 45] = ((short *)&y0i)[7];
-    stream0_out[j + 46] = ((short *)&y1i)[7];
-    stream0_out[j + 47] = ((short *)&y2i)[7];
-
-    // RE 9
-    stream0_out[j + 48] = ((short *)&y0r)[8];
-    stream0_out[j + 49] = ((short *)&y1r)[8];
-    stream0_out[j + 50] = ((short *)&y2r)[8];
-    stream0_out[j + 51] = ((short *)&y0i)[8];
-    stream0_out[j + 52] = ((short *)&y1i)[8];
-    stream0_out[j + 53] = ((short *)&y2i)[8];
-    // RE 10
-    stream0_out[j + 54] = ((short *)&y0r)[9];
-    stream0_out[j + 55] = ((short *)&y1r)[9];
-    stream0_out[j + 56] = ((short *)&y2r)[9];
-    stream0_out[j + 57] = ((short *)&y0i)[9];
-    stream0_out[j + 58] = ((short *)&y1i)[9];
-    stream0_out[j + 59] = ((short *)&y2i)[9];
-    // RE 11
-    stream0_out[j + 60] = ((short *)&y0r)[10];
-    stream0_out[j + 61] = ((short *)&y1r)[10];
-    stream0_out[j + 62] = ((short *)&y2r)[10];
-    stream0_out[j + 63] = ((short *)&y0i)[10];
-    stream0_out[j + 64] = ((short *)&y1i)[10];
-    stream0_out[j + 65] = ((short *)&y2i)[10];
-    // RE 12
-    stream0_out[j + 66] = ((short *)&y0r)[11];
-    stream0_out[j + 67] = ((short *)&y1r)[11];
-    stream0_out[j + 68] = ((short *)&y2r)[11];
-    stream0_out[j + 69] = ((short *)&y0i)[11];
-    stream0_out[j + 70] = ((short *)&y1i)[11];
-    stream0_out[j + 71] = ((short *)&y2i)[11];
-    // RE 13
-    stream0_out[j + 72] = ((short *)&y0r)[12];
-    stream0_out[j + 73] = ((short *)&y1r)[12];
-    stream0_out[j + 74] = ((short *)&y2r)[12];
-    stream0_out[j + 75] = ((short *)&y0i)[12];
-    stream0_out[j + 76] = ((short *)&y1i)[12];
-    stream0_out[j + 77] = ((short *)&y2i)[12];
-    // RE 14
-    stream0_out[j + 78] = ((short *)&y0r)[13];
-    stream0_out[j + 79] = ((short *)&y1r)[13];
-    stream0_out[j + 80] = ((short *)&y2r)[13];
-    stream0_out[j + 81] = ((short *)&y0i)[13];
-    stream0_out[j + 82] = ((short *)&y1i)[13];
-    stream0_out[j + 83] = ((short *)&y2i)[13];
-    // RE 15
-    stream0_out[j + 84] = ((short *)&y0r)[14];
-    stream0_out[j + 85] = ((short *)&y1r)[14];
-    stream0_out[j + 86] = ((short *)&y2r)[14];
-    stream0_out[j + 87] = ((short *)&y0i)[14];
-    stream0_out[j + 88] = ((short *)&y1i)[14];
-    stream0_out[j + 89] = ((short *)&y2i)[14];
-    // RE 16
-    stream0_out[j + 90] = ((short *)&y0r)[15];
-    stream0_out[j + 91] = ((short *)&y1r)[15];
-    stream0_out[j + 92] = ((short *)&y2r)[15];
-    stream0_out[j + 93] = ((short *)&y0i)[15];
-    stream0_out[j + 94] = ((short *)&y1i)[15];
-    stream0_out[j + 95] = ((short *)&y2i)[15];
-
-#elif defined(__arm__)
-
-#endif
-
-  }
-
-#if defined(__x86_64__) || defined(__i386__)
-  _mm_empty();
-  _m_empty();
-#endif
-}
diff --git a/openair1/SIMULATION/ETH_TRANSPORT/extern.h b/openair1/SIMULATION/ETH_TRANSPORT/extern.h
index c01b5584e2..472a4545eb 100644
--- a/openair1/SIMULATION/ETH_TRANSPORT/extern.h
+++ b/openair1/SIMULATION/ETH_TRANSPORT/extern.h
@@ -33,6 +33,7 @@
 
 #include <pthread.h>
 
+
 extern unsigned char Emulation_status;
 extern unsigned char emu_tx_status;
 extern unsigned char emu_rx_status;
diff --git a/openair2/COMMON/rrc_messages_def.h b/openair2/COMMON/rrc_messages_def.h
index 08ea93f427..252b336c94 100644
--- a/openair2/COMMON/rrc_messages_def.h
+++ b/openair2/COMMON/rrc_messages_def.h
@@ -55,6 +55,7 @@ MESSAGE_DEF(RRC_STATE_IND,              MESSAGE_PRIORITY_MED,       RrcStateInd,
 // eNB: ENB_APP -> RRC messages
 MESSAGE_DEF(RRC_CONFIGURATION_REQ,      MESSAGE_PRIORITY_MED,       RrcConfigurationReq,        rrc_configuration_req)
 MESSAGE_DEF(NBIOTRRC_CONFIGURATION_REQ, MESSAGE_PRIORITY_MED,       NbIoTRrcConfigurationReq,   nbiotrrc_configuration_req)
+MESSAGE_DEF(NRRRC_CONFIGURATION_REQ,    MESSAGE_PRIORITY_MED,       gNB_RrcConfigurationReq,    nrrrc_configuration_req)
 
 // UE: NAS -> RRC messages
 MESSAGE_DEF(NAS_KENB_REFRESH_REQ,       MESSAGE_PRIORITY_MED,       NasKenbRefreshReq,          nas_kenb_refresh_req)
diff --git a/openair2/COMMON/rrc_messages_types.h b/openair2/COMMON/rrc_messages_types.h
index 93f1e4ea80..edf84fb73e 100644
--- a/openair2/COMMON/rrc_messages_types.h
+++ b/openair2/COMMON/rrc_messages_types.h
@@ -293,9 +293,9 @@ typedef struct NRRrcConfigurationReq_s {
   //NR FrequencyInfoUL
   long                    UL_FreqBandIndicatorNR[MAX_NUM_CCs];
   long                    UL_absoluteFrequencyPointA[MAX_NUM_CCs];
-  lte_prefix_type_t       UL_additionalSpectrumEmission[MAX_NUM_CCs];
+  long                    UL_additionalSpectrumEmission[MAX_NUM_CCs];
   long                    UL_p_Max[MAX_NUM_CCs];
-  long                    ULfrequencyShift7p5khz[MAX_NUM_CCs];
+  long                    UL_frequencyShift7p5khz[MAX_NUM_CCs];
 
   //NR UL SCS-SpecificCarrier
   uint32_t                UL_offsetToCarrier[MAX_NUM_CCs];
diff --git a/openair2/COMMON/tasks_def.h b/openair2/COMMON/tasks_def.h
index 92d1ff4128..00bbd5dcf0 100644
--- a/openair2/COMMON/tasks_def.h
+++ b/openair2/COMMON/tasks_def.h
@@ -44,6 +44,8 @@ TASK_DEF(TASK_RRC_ENB,  TASK_PRIORITY_MED,          200)
 // Define here for now
 TASK_DEF(TASK_RRC_ENB_NB_IoT,  TASK_PRIORITY_MED,          200)
 
+TASK_DEF(TASK_RRC_GNB,  TASK_PRIORITY_MED,          200)
+
 ///   S1ap task
 /// RAL task for ENB
 TASK_DEF(TASK_RAL_ENB, TASK_PRIORITY_MED, 200)
@@ -59,6 +61,8 @@ TASK_DEF(TASK_X2AP,     TASK_PRIORITY_MED,          200)
 TASK_DEF(TASK_SCTP,     TASK_PRIORITY_MED,          200)
 ///   eNB APP task
 TASK_DEF(TASK_ENB_APP,  TASK_PRIORITY_MED,          200)
+///   gNB APP task
+TASK_DEF(TASK_GNB_APP,  TASK_PRIORITY_MED,          200)
 ///   eNB Agent task
 TASK_DEF(TASK_FLEXRAN_AGENT,  TASK_PRIORITY_MED,          200)
 
diff --git a/openair2/ENB_APP/NRRRC_paramsvalues.h b/openair2/GNB_APP/NR_RRC_paramsvalues.h
similarity index 83%
rename from openair2/ENB_APP/NRRRC_paramsvalues.h
rename to openair2/GNB_APP/NR_RRC_paramsvalues.h
index aae1fc3300..306095838d 100644
--- a/openair2/ENB_APP/NRRRC_paramsvalues.h
+++ b/openair2/GNB_APP/NR_RRC_paramsvalues.h
@@ -29,23 +29,21 @@
  * \note
  * \warning
  */
-#ifndef __NRRRC_PARAMSVALUES__H__
-#define __NRRRC_PARAMSVALUES__H__
+#ifndef __NR_RRC_PARAMSVALUES__H__
+#define __NR_RRC_PARAMSVALUES__H__
 /*    cell configuration section name */
-#define GNB_CONFIG_STRING_GNB_LIST                    "gNBs"
-/* component carriers configuration section name */		
-#define GNB_CONFIG_STRING_COMPONENT_CARRIERS          "component_carriers"		 
-
-#define GNB_CONFIG_STRING_FRAME_TYPE                  "frame_type"
-#define GNB_CONFIG_STRING_DL_PREFIX_TYPE              "DL_prefix_type"
-#define GNB_CONFIG_STRING_UL_PREFIX_TYPE           	  "UL_prefix_type"
-#define GNB_CONFIG_STRING_EUTRA_BAND                  "eutra_band"
-#define GNB_CONFIG_STRING_DOWNLINK_FREQUENCY          "downlink_frequency"
-#define GNB_CONFIG_STRING_UPLINK_FREQUENCY_OFFSET     "uplink_frequency_offset"
-#define GNB_CONFIG_STRING_NID_CELL                    "Nid_cell"
-#define GNB_CONFIG_STRING_N_RB_DL                     "N_RB_DL"
-#define GNB_CONFIG_STRING_CELL_MBSFN                  "Nid_cell_mbsfn"
-
+#define GNB_CONFIG_STRING_GNB_LIST                              "gNBs"
+/* component carriers configuration section name */   
+#define GNB_CONFIG_STRING_COMPONENT_CARRIERS                    "component_carriers"     
+
+#define GNB_CONFIG_STRING_FRAME_TYPE                            "frame_type"
+#define GNB_CONFIG_STRING_DL_PREFIX_TYPE                        "DL_prefix_type"
+#define GNB_CONFIG_STRING_UL_PREFIX_TYPE                        "UL_prefix_type"
+#define GNB_CONFIG_STRING_EUTRA_BAND                            "eutra_band"
+#define GNB_CONFIG_STRING_DOWNLINK_FREQUENCY                    "downlink_frequency"
+#define GNB_CONFIG_STRING_UPLINK_FREQUENCY_OFFSET               "uplink_frequency_offset"
+#define GNB_CONFIG_STRING_NID_CELL                              "Nid_cell"
+#define GNB_CONFIG_STRING_N_RB_DL                               "N_RB_DL"
 
 #define FRAMETYPE_OKVALUES                                      {"FDD","TDD"}
 #define FRAMETYPE_MODVALUES                                     { FDD, TDD} 
@@ -66,7 +64,7 @@
 
 #define UETIMER_T300_OKVALUES                                   {100,200,300,400,600,1000,1500,2000}
 #define UETT300(A)                                              UE_TimersAndConstants__t300_ ## A
-#define UETIMER_T300_MODVALUES                                  { UETT300(ms100), UETT300(ms200),UETT300(ms300),UETT300(ms400),UETT300(ms600),UETT300(ms1000),UETT300(ms1500),UETT300(ms2000)}           		
+#define UETIMER_T300_MODVALUES                                  { UETT300(ms100), UETT300(ms200),UETT300(ms300),UETT300(ms400),UETT300(ms600),UETT300(ms1000),UETT300(ms1500),UETT300(ms2000)}              
 
 #define UETIMER_T301_OKVALUES                                   {100,200,300,400,600,1000,1500,2000}
 #define UETT301(A)                                              UE_TimersAndConstants__t301_ ## A
diff --git a/openair2/ENB_APP/gnb_app.c b/openair2/GNB_APP/gnb_app.c
similarity index 91%
rename from openair2/ENB_APP/gnb_app.c
rename to openair2/GNB_APP/gnb_app.c
index 15d5ef6fea..1261893631 100644
--- a/openair2/ENB_APP/gnb_app.c
+++ b/openair2/GNB_APP/gnb_app.c
@@ -84,14 +84,14 @@ static void configure_phy(module_id_t enb_id, const Enb_properties_array_t* enb_
 */
 
 /*------------------------------------------------------------------------------*/
-static void configure_nrrrc(uint32_t gnb_id)
+static void configure_nr_rrc(uint32_t gnb_id)
 {
   MessageDef *msg_p = NULL;
   //  int CC_id;
 
   msg_p = itti_alloc_new_message (TASK_GNB_APP, NRRRC_CONFIGURATION_REQ);
 
-  if (RC.nr_rrc[gnb_id]) {
+  if (RC.nrrrc[gnb_id]) {
     RCconfig_NRRRC(msg_p,gnb_id, RC.nrrrc[gnb_id]);
     
 
@@ -112,16 +112,16 @@ static uint32_t gNB_app_register(uint32_t gnb_id_start, uint32_t gnb_id_end)//,
 
   for (gnb_id = gnb_id_start; (gnb_id < gnb_id_end) ; gnb_id++) {
     {
-      s1ap_register_gnb_req_t *s1ap_register_gNB;
+      s1ap_register_enb_req_t *s1ap_register_gNB; //Type Temporarily reuse
 
       /* note:  there is an implicit relationship between the data structure and the message name */
-      msg_p = itti_alloc_new_message (TASK_GNB_APP, S1AP_REGISTER_GNB_REQ);
+      msg_p = itti_alloc_new_message (TASK_GNB_APP, S1AP_REGISTER_ENB_REQ); //Message Temporarily reuse
 
       RCconfig_S1(msg_p, gnb_id);
 
       if (gnb_id == 0) RCconfig_gtpu();
 
-      s1ap_register_gNB = &S1AP_REGISTER_GNB_REQ(msg_p);
+      s1ap_register_gNB = &S1AP_REGISTER_ENB_REQ(msg_p); //Message Temporarily reuse
       LOG_I(GNB_APP,"default drx %d\n",s1ap_register_gNB->default_drx);
 
       LOG_I(GNB_APP,"[gNB %d] gNB_app_register for instance %d\n", gnb_id, GNB_MODULE_ID_TO_INSTANCE(gnb_id));
@@ -150,8 +150,8 @@ void *gNB_app_task(void *args_p)
   long                            gnb_register_retry_timer_id;
 # endif
   uint32_t                        gnb_id;
-  MessageDef                     *msg_p           = NULL;
-  const char                     *msg_name        = NULL;
+  MessageDef                      *msg_p           = NULL;
+  const char                      *msg_name        = NULL;
   instance_t                      instance;
   int                             result;
   /* for no gcc warnings */
@@ -161,9 +161,9 @@ void *gNB_app_task(void *args_p)
 
   LOG_I(PHY, "%s() Task ready initialise structures\n", __FUNCTION__);
 
-  //RCconfig_L1();
+  RCconfig_NR_L1();
 
-  //RCconfig_macrlc();
+  RCconfig_nr_macrlc();
 
   LOG_I(PHY, "%s() RC.nb_L1_inst:%d\n", __FUNCTION__, RC.nb_L1_inst);
 
@@ -175,14 +175,14 @@ void *gNB_app_task(void *args_p)
 
   LOG_I(GNB_APP,"Allocating gNB_RRC_INST for %d instances\n",RC.nb_nr_inst);
 
-  RC.rrc = (gNB_RRC_INST **)malloc(RC.nb_nr_inst*sizeof(gNB_RRC_INST *));
-  LOG_I(PHY, "%s() RC.nb_nr_inst:%d RC.rrc:%p\n", __FUNCTION__, RC.nb_nr_inst, RC.rrc);
+  RC.nrrrc = (gNB_RRC_INST **)malloc(RC.nb_nr_inst*sizeof(gNB_RRC_INST *));
+  LOG_I(PHY, "%s() RC.nb_nr_inst:%d RC.nrrrc:%p\n", __FUNCTION__, RC.nb_nr_inst, RC.nrrrc);
 
   for (gnb_id = gnb_id_start; (gnb_id < gnb_id_end) ; gnb_id++) {
-    RC.rrc[gnb_id] = (gNB_RRC_INST*)malloc(sizeof(gNB_RRC_INST));
-    LOG_I(PHY, "%s() Creating RRC instance RC.rrc[%d]:%p (%d of %d)\n", __FUNCTION__, gnb_id, RC.rrc[gnb_id], gnb_id+1, gnb_id_end);
-    memset((void *)RC.rrc[gnb_id],0,sizeof(gNB_RRC_INST));
-    configure_nrrrc(gnb_id);
+    RC.nrrrc[gnb_id] = (gNB_RRC_INST*)malloc(sizeof(gNB_RRC_INST));
+    LOG_I(PHY, "%s() Creating RRC instance RC.nrrrc[%d]:%p (%d of %d)\n", __FUNCTION__, gnb_id, RC.nrrrc[gnb_id], gnb_id+1, gnb_id_end);
+    memset((void *)RC.nrrrc[gnb_id],0,sizeof(gNB_RRC_INST));
+    configure_nr_rrc(gnb_id);
   }
 
 # if defined(ENABLE_USE_MME)
diff --git a/openair2/ENB_APP/gnb_app.h b/openair2/GNB_APP/gnb_app.h
similarity index 100%
rename from openair2/ENB_APP/gnb_app.h
rename to openair2/GNB_APP/gnb_app.h
diff --git a/openair2/ENB_APP/gnb_config.c b/openair2/GNB_APP/gnb_config.c
similarity index 71%
rename from openair2/ENB_APP/gnb_config.c
rename to openair2/GNB_APP/gnb_config.c
index a52809b62c..f3b30a02b8 100644
--- a/openair2/ENB_APP/gnb_config.c
+++ b/openair2/GNB_APP/gnb_config.c
@@ -1,3 +1,32 @@
+/*
+ * 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
+ */
+
+/*
+  enb_config.c
+  -------------------
+  AUTHOR  : Lionel GAUTHIER, navid nikaein, Laurent Winckel
+  COMPANY : EURECOM
+  EMAIL   : Lionel.Gauthier@eurecom.fr, navid.nikaein@eurecom.fr
+*/
+
 #include <string.h>
 #include <inttypes.h>
 
@@ -18,7 +47,8 @@
 // #include "SystemInformationBlockType2.h"
 // #include "LAYER2/MAC/extern.h"
 // #include "LAYER2/MAC/proto.h"
-#include "PHY/extern.h"
+#include "PHY/phy_extern.h"
+#include "PHY/INIT/phy_init.h"
 #include "targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.h"
 #include "nfapi_vnf.h"
 #include "nfapi_pnf.h"
@@ -29,6 +59,170 @@
 #include "RRC_config_tools.h"
 #include "gnb_paramdef.h"
 
+extern uint16_t sf_ahead;
+
+void RCconfig_NR_L1(void) {
+  int               i,j;
+  paramdef_t L1_Params[] = L1PARAMS_DESC;
+  paramlist_def_t L1_ParamList = {CONFIG_STRING_L1_LIST,NULL,0};
+
+
+  if (RC.gNB == NULL) {
+    RC.gNB                       = (PHY_VARS_gNB ***)malloc((1+NUMBER_OF_gNB_MAX)*sizeof(PHY_VARS_gNB**));
+    LOG_I(NR_PHY,"RC.gNB = %p\n",RC.gNB);
+    memset(RC.gNB,0,(1+NUMBER_OF_gNB_MAX)*sizeof(PHY_VARS_gNB**));
+    RC.nb_nr_L1_CC = malloc((1+RC.nb_nr_L1_inst)*sizeof(int));
+  }
+
+  config_getlist( &L1_ParamList,L1_Params,sizeof(L1_Params)/sizeof(paramdef_t), NULL);
+
+  if (L1_ParamList.numelt > 0) {
+
+    for (j = 0; j < RC.nb_nr_L1_inst; j++) {
+      RC.nb_nr_L1_CC[j] = *(L1_ParamList.paramarray[j][L1_CC_IDX].uptr);
+
+      if (RC.gNB[j] == NULL) {
+        RC.gNB[j]                       = (PHY_VARS_gNB **)malloc((1+MAX_NUM_CCs)*sizeof(PHY_VARS_gNB*));
+        LOG_I(NR_PHY,"RC.eNB[%d] = %p\n",j,RC.eNB[j]);
+        memset(RC.gNB[j],0,(1+MAX_NUM_CCs)*sizeof(PHY_VARS_gNB*));
+      }
+
+      for (i=0;i<RC.nb_nr_L1_CC[j];i++) {
+        if (RC.gNB[j][i] == NULL) {
+          RC.gNB[j][i] = (PHY_VARS_gNB *)malloc(sizeof(PHY_VARS_gNB));
+          memset((void*)RC.gNB[j][i],0,sizeof(PHY_VARS_gNB));
+          LOG_I(PHY,"RC.eNB[%d][%d] = %p\n",j,i,RC.gNB[j][i]);
+          RC.gNB[j][i]->Mod_id  = j;
+          RC.gNB[j][i]->CC_id   = i;
+        }
+      }
+
+      if(strcmp(*(L1_ParamList.paramarray[j][L1_TRANSPORT_N_PREFERENCE_IDX].strptr), "local_mac") == 0) {
+        sf_ahead = 4; // Need 4 subframe gap between RX and TX
+      }else if (strcmp(*(L1_ParamList.paramarray[j][L1_TRANSPORT_N_PREFERENCE_IDX].strptr), "nfapi") == 0) {
+        RC.gNB[j][0]->eth_params_n.local_if_name            = strdup(*(L1_ParamList.paramarray[j][L1_LOCAL_N_IF_NAME_IDX].strptr));
+        RC.gNB[j][0]->eth_params_n.my_addr                  = strdup(*(L1_ParamList.paramarray[j][L1_LOCAL_N_ADDRESS_IDX].strptr));
+        RC.gNB[j][0]->eth_params_n.remote_addr              = strdup(*(L1_ParamList.paramarray[j][L1_REMOTE_N_ADDRESS_IDX].strptr));
+        RC.gNB[j][0]->eth_params_n.my_portc                 = *(L1_ParamList.paramarray[j][L1_LOCAL_N_PORTC_IDX].iptr);
+        RC.gNB[j][0]->eth_params_n.remote_portc             = *(L1_ParamList.paramarray[j][L1_REMOTE_N_PORTC_IDX].iptr);
+        RC.gNB[j][0]->eth_params_n.my_portd                 = *(L1_ParamList.paramarray[j][L1_LOCAL_N_PORTD_IDX].iptr);
+        RC.gNB[j][0]->eth_params_n.remote_portd             = *(L1_ParamList.paramarray[j][L1_REMOTE_N_PORTD_IDX].iptr);
+        RC.gNB[j][0]->eth_params_n.transp_preference        = ETH_UDP_MODE;
+
+        sf_ahead = 2; // Cannot cope with 4 subframes betweem RX and TX - set it to 2
+
+        RC.nb_nr_macrlc_inst = 1;  // This is used by mac_top_init_gNB()
+
+        // This is used by init_gNB_afterRU()
+        RC.nb_nr_CC = (int *)malloc((1+RC.nb_nr_inst)*sizeof(int));
+        RC.nb_nr_CC[0]=1;
+
+        RC.nb_nr_inst =1; // DJP - feptx_prec uses num_gNB but phy_init_RU uses nb_nr_inst
+
+        LOG_I(PHY,"%s() NFAPI PNF mode - RC.nb_nr_inst=1 this is because phy_init_RU() uses that to index and not RC.num_gNB - why the 2 similar variables?\n", __FUNCTION__);
+        LOG_I(PHY,"%s() NFAPI PNF mode - RC.nb_nr_CC[0]=%d for init_gNB_afterRU()\n", __FUNCTION__, RC.nb_nr_CC[0]);
+        LOG_I(PHY,"%s() NFAPI PNF mode - RC.nb_nr_macrlc_inst:%d because used by mac_top_init_gNB()\n", __FUNCTION__, RC.nb_nr_macrlc_inst);
+
+        mac_top_init_gNB();
+
+        configure_nfapi_pnf(RC.gNB[j][0]->eth_params_n.remote_addr, RC.gNB[j][0]->eth_params_n.remote_portc, RC.gNB[j][0]->eth_params_n.my_addr, RC.gNB[j][0]->eth_params_n.my_portd, RC.gNB[j][0]->eth_params_n     .remote_portd);
+      }else { // other midhaul
+      } 
+    }// for (j = 0; j < RC.nb_nr_L1_inst; j++)
+    printf("Initializing northbound interface for L1\n");
+    l1_north_init_gNB();
+  }else{
+    LOG_I(PHY,"No " CONFIG_STRING_L1_LIST " configuration found");    
+
+    // DJP need to create some structures for VNF
+
+    j = 0;
+
+    RC.nb_nr_L1_CC = malloc((1+RC.nb_nr_L1_inst)*sizeof(int)); // DJP - 1 lot then???
+
+    RC.nb_nr_L1_CC[j]=1; // DJP - hmmm
+
+    if (RC.gNB[j] == NULL) {
+      RC.gNB[j]                       = (PHY_VARS_gNB **)malloc((1+MAX_NUM_CCs)*sizeof(PHY_VARS_gNB**));
+      LOG_I(PHY,"RC.gNB[%d] = %p\n",j,RC.gNB[j]);
+      memset(RC.gNB[j],0,(1+MAX_NUM_CCs)*sizeof(PHY_VARS_gNB***));
+    }
+
+    for (i=0;i<RC.nb_nr_L1_CC[j];i++) {
+      if (RC.gNB[j][i] == NULL) {
+        RC.gNB[j][i] = (PHY_VARS_gNB *)malloc(sizeof(PHY_VARS_gNB));
+        memset((void*)RC.gNB[j][i],0,sizeof(PHY_VARS_gNB));
+        LOG_I(PHY,"RC.gNB[%d][%d] = %p\n",j,i,RC.gNB[j][i]);
+        RC.gNB[j][i]->Mod_id  = j;
+        RC.gNB[j][i]->CC_id   = i;
+      }
+    } // END for (i=0;i<RC.nb_nr_L1_CC[j];i++)
+  
+  }
+}
+
+void RCconfig_nr_macrlc() {
+  int               j;
+
+  paramdef_t MacRLC_Params[] = MACRLCPARAMS_DESC;
+  paramlist_def_t MacRLC_ParamList = {CONFIG_STRING_MACRLC_LIST,NULL,0};
+
+  config_getlist( &MacRLC_ParamList,MacRLC_Params,sizeof(MacRLC_Params)/sizeof(paramdef_t), NULL);    
+  
+  if ( MacRLC_ParamList.numelt > 0) {
+
+    RC.nb_macrlc_inst=MacRLC_ParamList.numelt; 
+    mac_top_init_eNB();   
+    RC.nb_mac_CC = (int*)malloc(RC.nb_macrlc_inst*sizeof(int));
+
+    for (j=0;j<RC.nb_macrlc_inst;j++) {
+      RC.nb_mac_CC[j] = *(MacRLC_ParamList.paramarray[j][MACRLC_CC_IDX].iptr);
+      //RC.mac[j]->phy_test = *(MacRLC_ParamList.paramarray[j][MACRLC_PHY_TEST_IDX].iptr);
+      //printf("PHY_TEST = %d,%d\n", RC.mac[j]->phy_test, j);
+
+      if (strcmp(*(MacRLC_ParamList.paramarray[j][MACRLC_TRANSPORT_N_PREFERENCE_IDX].strptr), "local_RRC") == 0) {
+  // check number of instances is same as RRC/PDCP
+  
+      } else if (strcmp(*(MacRLC_ParamList.paramarray[j][MACRLC_TRANSPORT_N_PREFERENCE_IDX].strptr), "cudu") == 0) {
+  RC.mac[j]->eth_params_n.local_if_name            = strdup(*(MacRLC_ParamList.paramarray[j][MACRLC_LOCAL_N_IF_NAME_IDX].strptr));
+  RC.mac[j]->eth_params_n.my_addr                  = strdup(*(MacRLC_ParamList.paramarray[j][MACRLC_LOCAL_N_ADDRESS_IDX].strptr));
+  RC.mac[j]->eth_params_n.remote_addr              = strdup(*(MacRLC_ParamList.paramarray[j][MACRLC_REMOTE_N_ADDRESS_IDX].strptr));
+  RC.mac[j]->eth_params_n.my_portc                 = *(MacRLC_ParamList.paramarray[j][MACRLC_LOCAL_N_PORTC_IDX].iptr);
+  RC.mac[j]->eth_params_n.remote_portc             = *(MacRLC_ParamList.paramarray[j][MACRLC_REMOTE_N_PORTC_IDX].iptr);
+  RC.mac[j]->eth_params_n.my_portd                 = *(MacRLC_ParamList.paramarray[j][MACRLC_LOCAL_N_PORTD_IDX].iptr);
+  RC.mac[j]->eth_params_n.remote_portd             = *(MacRLC_ParamList.paramarray[j][MACRLC_REMOTE_N_PORTD_IDX].iptr);;
+  RC.mac[j]->eth_params_n.transp_preference        = ETH_UDP_MODE;
+      } else { // other midhaul
+  AssertFatal(1==0,"MACRLC %d: %s unknown northbound midhaul\n",j, *(MacRLC_ParamList.paramarray[j][MACRLC_TRANSPORT_N_PREFERENCE_IDX].strptr));
+      } 
+
+      if (strcmp(*(MacRLC_ParamList.paramarray[j][MACRLC_TRANSPORT_S_PREFERENCE_IDX].strptr), "local_L1") == 0) {
+
+  
+      } else if (strcmp(*(MacRLC_ParamList.paramarray[j][MACRLC_TRANSPORT_S_PREFERENCE_IDX].strptr), "nfapi") == 0) {
+  RC.mac[j]->eth_params_s.local_if_name            = strdup(*(MacRLC_ParamList.paramarray[j][MACRLC_LOCAL_S_IF_NAME_IDX].strptr));
+  RC.mac[j]->eth_params_s.my_addr                  = strdup(*(MacRLC_ParamList.paramarray[j][MACRLC_LOCAL_S_ADDRESS_IDX].strptr));
+  RC.mac[j]->eth_params_s.remote_addr              = strdup(*(MacRLC_ParamList.paramarray[j][MACRLC_REMOTE_S_ADDRESS_IDX].strptr));
+  RC.mac[j]->eth_params_s.my_portc                 = *(MacRLC_ParamList.paramarray[j][MACRLC_LOCAL_S_PORTC_IDX].iptr);
+  RC.mac[j]->eth_params_s.remote_portc             = *(MacRLC_ParamList.paramarray[j][MACRLC_REMOTE_S_PORTC_IDX].iptr);
+  RC.mac[j]->eth_params_s.my_portd                 = *(MacRLC_ParamList.paramarray[j][MACRLC_LOCAL_S_PORTD_IDX].iptr);
+  RC.mac[j]->eth_params_s.remote_portd             = *(MacRLC_ParamList.paramarray[j][MACRLC_REMOTE_S_PORTD_IDX].iptr);
+  RC.mac[j]->eth_params_s.transp_preference        = ETH_UDP_MODE;
+
+        sf_ahead = 2; // Cannot cope with 4 subframes betweem RX and TX - set it to 2
+
+        printf("**************** vnf_port:%d\n", RC.mac[j]->eth_params_s.my_portc);
+        configure_nfapi_vnf(RC.mac[j]->eth_params_s.my_addr, RC.mac[j]->eth_params_s.my_portc);
+        printf("**************** RETURNED FROM configure_nfapi_vnf() vnf_port:%d\n", RC.mac[j]->eth_params_s.my_portc);
+      } else { // other midhaul
+  AssertFatal(1==0,"MACRLC %d: %s unknown southbound midhaul\n",j,*(MacRLC_ParamList.paramarray[j][MACRLC_TRANSPORT_S_PREFERENCE_IDX].strptr));
+      } 
+    }// j=0..num_inst
+  } else {// MacRLC_ParamList.numelt > 0
+    AssertFatal (0,
+           "No " CONFIG_STRING_MACRLC_LIST " configuration found");     
+  }
+}
 
 int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
 
@@ -186,6 +380,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
   int32_t                PDCCH_interleaverSize                                         = 0;
   int32_t                PDCCH_shiftIndex                                              = 0;  
   int32_t                PDCCH_precoderGranularity                                     = 0;
+  int32_t                PDCCH_TCI_StateId                                             = 0;
   char*                  tci_PresentInDCI                                              = NULL;
 
   //NR PDCCH-ConfigCommon commonSearchSpaces
@@ -223,6 +418,13 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
   uint32_t               RateMatchPatternLTE_CRS_radioframeAllocationOffset            = 0;
   int32_t                RateMatchPatternLTE_CRS_subframeAllocation_choice             = 0;
 
+  int32_t                srb1_timer_poll_retransmit    = 0;
+  int32_t                srb1_timer_reordering         = 0;
+  int32_t                srb1_timer_status_prohibit    = 0;
+  int32_t                srb1_poll_pdu                 = 0;
+  int32_t                srb1_poll_byte                = 0;
+  int32_t                srb1_max_retx_threshold       = 0;
+
   int32_t             my_int;
 
   paramdef_t GNBSParams[] = GNBSPARAMS_DESC;
@@ -230,8 +432,8 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
   paramdef_t GNBParams[]  = GNBPARAMS_DESC;
   paramlist_def_t GNBParamList = {GNB_CONFIG_STRING_GNB_LIST,NULL,0};
   ////////// Physical parameters
-  checkedparam_t config_check_CCparams[] = CCPARAMS_CHECK;
-  paramdef_t CCsParams[] = CCPARAMS_DESC;
+  checkedparam_t config_check_CCparams[] = NRCCPARAMS_CHECK;
+  paramdef_t CCsParams[] = NRCCPARAMS_DESC;
   paramlist_def_t CCsParamList = {GNB_CONFIG_STRING_COMPONENT_CARRIERS,NULL,0};
   
   paramdef_t SRB1Params[] = SRB1PARAMS_DESC;  
@@ -313,7 +515,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
         sprintf(gnbpath,"%s.[%i]",GNB_CONFIG_STRING_GNB_LIST,k),
         config_getlist( &CCsParamList,NULL,0,gnbpath); 
     
-        LOG_I(NRRRC,"num component carriers %d \n", num_component_carriers); 
+        LOG_I(NR_RRC,"num component carriers %d \n", num_component_carriers); 
 
         if ( CCsParamList.numelt> 0) {
           
@@ -386,16 +588,28 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
                            RC.config_file_name, i, frame_type);
             }
 
-            if (!prefix_type){
+            if (!DL_prefix_type){
+              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d define %s: NORMAL,EXTENDED!\n",
+                           RC.config_file_name, i, GNB_CONFIG_STRING_DL_PREFIX_TYPE);
+            }else if (strcmp(DL_prefix_type, "NORMAL") == 0) {
+              NRRRC_CONFIGURATION_REQ (msg_p).DL_prefix_type[j] = NORMAL;
+            }else  if (strcmp(DL_prefix_type, "EXTENDED") == 0) {
+              NRRRC_CONFIGURATION_REQ (msg_p).DL_prefix_type[j] = EXTENDED;
+            }else {
+              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for DL_prefix_type choice: NORMAL or EXTENDED !\n",
+                           RC.config_file_name, i, DL_prefix_type);
+            }
+
+            if (!UL_prefix_type){
               AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d define %s: NORMAL,EXTENDED!\n",
-                           RC.config_file_name, i, ENB_CONFIG_STRING_PREFIX_TYPE);
-            }else if (strcmp(prefix_type, "NORMAL") == 0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).prefix_type[j] = NORMAL;
-            }else  if (strcmp(prefix_type, "EXTENDED") == 0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).prefix_type[j] = EXTENDED;
+                           RC.config_file_name, i, GNB_CONFIG_STRING_UL_PREFIX_TYPE);
+            }else if (strcmp(UL_prefix_type, "NORMAL") == 0) {
+              NRRRC_CONFIGURATION_REQ (msg_p).UL_prefix_type[j] = NORMAL;
+            }else  if (strcmp(UL_prefix_type, "EXTENDED") == 0) {
+              NRRRC_CONFIGURATION_REQ (msg_p).UL_prefix_type[j] = EXTENDED;
             }else {
-              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for prefix_type choice: NORMAL or EXTENDED !\n",
-                           RC.config_file_name, i, prefix_type);
+              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for UL_prefix_type choice: NORMAL or EXTENDED !\n",
+                           RC.config_file_name, i, UL_prefix_type);
             }
 
             NRRRC_CONFIGURATION_REQ (msg_p).eutra_band[j] = eutra_band;
@@ -462,7 +676,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
                 (SIB1_ssb_PeriodicityServingCell !=20) && 
                 (SIB1_ssb_PeriodicityServingCell !=40) &&
                 (SIB1_ssb_PeriodicityServingCell !=80) &&
-                (SIB1_ssb_PeriodicityServingCell !=160)&&){
+                (SIB1_ssb_PeriodicityServingCell !=160)  ){
               AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SIB1_ssb_PeriodicityServingCell choice: 5,10,20,40,80,160 !\n",
                            RC.config_file_name, i, SIB1_ssb_PeriodicityServingCell);
             }            
@@ -507,15 +721,15 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
             }
 
             if (strcmp(DL_SCS_SubcarrierSpacing,"kHz15")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).DL_SCS_SubcarrierSpacing[j] = SubcarrierSpacing_kHz15;
+              NRRRC_CONFIGURATION_REQ (msg_p).DL_SCS_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz15;
             }else if (strcmp(DL_SCS_SubcarrierSpacing,"kHz30")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).DL_SCS_SubcarrierSpacing[j] = SubcarrierSpacing_kHz30;
+              NRRRC_CONFIGURATION_REQ (msg_p).DL_SCS_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz30;
             }else if (strcmp(DL_SCS_SubcarrierSpacing,"kHz60")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).DL_SCS_SubcarrierSpacing[j] = SubcarrierSpacing_kHz60;
+              NRRRC_CONFIGURATION_REQ (msg_p).DL_SCS_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz60;
             }else if (strcmp(DL_SCS_SubcarrierSpacing,"kHz120")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).DL_SCS_SubcarrierSpacing[j] = SubcarrierSpacing_kHz120;
+              NRRRC_CONFIGURATION_REQ (msg_p).DL_SCS_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz120;
             }else if (strcmp(DL_SCS_SubcarrierSpacing,"kHz240")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).DL_SCS_SubcarrierSpacing[j] = SubcarrierSpacing_kHz240;
+              NRRRC_CONFIGURATION_REQ (msg_p).DL_SCS_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz240;
             }else { 
               AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for DL_SCS_SubcarrierSpacing choice: minusinfinity,kHz15,kHz30,kHz60,kHz120,kHz240!\n",
                            RC.config_file_name, i, DL_SCS_SubcarrierSpacing);
@@ -523,15 +737,15 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
 
             switch (DL_SCS_SpecificCarrier_k0) {
               case -6:
-                NRRRC_CONFIGURATION_REQ (msg_p).DL_SCS_SpecificCarrier_k0[j] =  SCS_SpecificCarrier__k0_n_6;
+                NRRRC_CONFIGURATION_REQ (msg_p).DL_SCS_SpecificCarrier_k0[j] =  NR_SCS_SpecificCarrier__k0_n_6;
                 break;
 
               case 0:
-                NRRRC_CONFIGURATION_REQ (msg_p).DL_SCS_SpecificCarrier_k0[j] =  SCS_SpecificCarrier__k0_n0;
+                NRRRC_CONFIGURATION_REQ (msg_p).DL_SCS_SpecificCarrier_k0[j] =  NR_SCS_SpecificCarrier__k0_n0;
                 break;
 
               case 6:
-                NRRRC_CONFIGURATION_REQ (msg_p).DL_SCS_SpecificCarrier_k0[j] =  SCS_SpecificCarrier__k0_n6;
+                NRRRC_CONFIGURATION_REQ (msg_p).DL_SCS_SpecificCarrier_k0[j] =  NR_SCS_SpecificCarrier__k0_n6;
                 break;
 
                default:
@@ -554,15 +768,15 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
             }
 
             if (strcmp(DL_BWP_SubcarrierSpacing,"kHz15")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).DL_BWP_SubcarrierSpacing[j] = SubcarrierSpacing_kHz15;
+              NRRRC_CONFIGURATION_REQ (msg_p).DL_BWP_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz15;
             }else if (strcmp(DL_BWP_SubcarrierSpacing,"kHz30")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).DL_BWP_SubcarrierSpacing[j] = SubcarrierSpacing_kHz30;
+              NRRRC_CONFIGURATION_REQ (msg_p).DL_BWP_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz30;
             }else if (strcmp(DL_BWP_SubcarrierSpacing,"kHz60")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).DL_BWP_SubcarrierSpacing[j] = SubcarrierSpacing_kHz60;
+              NRRRC_CONFIGURATION_REQ (msg_p).DL_BWP_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz60;
             }else if (strcmp(DL_BWP_SubcarrierSpacing,"kHz120")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).DL_BWP_SubcarrierSpacing[j] = SubcarrierSpacing_kHz120;
+              NRRRC_CONFIGURATION_REQ (msg_p).DL_BWP_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz120;
             }else if (strcmp(DL_BWP_SubcarrierSpacing,"kHz240")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).DL_BWP_SubcarrierSpacing[j] = SubcarrierSpacing_kHz240;
+              NRRRC_CONFIGURATION_REQ (msg_p).DL_BWP_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz240;
             }else { 
               AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for DL_BWP_SubcarrierSpacing choice: minusinfinity,kHz15,kHz30,kHz60,kHz120,kHz240!\n",
                            RC.config_file_name, i, DL_BWP_SubcarrierSpacing);
@@ -605,10 +819,10 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
               RC.config_file_name, i, UL_p_Max);
             }
 
-            if (strcmp(UL_frequencyShift7p5khz, "TRUE") == 0) {
-              RRC_CONFIGURATION_REQ (msg_p).UL_frequencyShift7p5khz[j] = FrequencyInfoUL__frequencyShift7p5khz_true; //enum true = 0
-            }else if{
-              RRC_CONFIGURATION_REQ (msg_p).UL_frequencyShift7p5khz[j] = 1;//false               
+            if (strcmp(UL_frequencyShift7p5khz,"TRUE") == 0) {
+              NRRRC_CONFIGURATION_REQ (msg_p).UL_frequencyShift7p5khz[j] = NR_FrequencyInfoUL__frequencyShift7p5khz_true; //enum true = 0
+            }else{
+              NRRRC_CONFIGURATION_REQ (msg_p).UL_frequencyShift7p5khz[j] = 1;//false               
             } 
 
             /////////////////////////////////NR UL SCS-SpecificCarrier///////////////////////////
@@ -619,30 +833,30 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
             }
 
             if (strcmp(UL_SCS_SubcarrierSpacing,"kHz15")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).UL_SCS_SubcarrierSpacing[j] = SubcarrierSpacing_kHz15;
+              NRRRC_CONFIGURATION_REQ (msg_p).UL_SCS_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz15;
             }else if (strcmp(UL_SCS_SubcarrierSpacing,"kHz30")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).UL_SCS_SubcarrierSpacing[j] = SubcarrierSpacing_kHz30;
+              NRRRC_CONFIGURATION_REQ (msg_p).UL_SCS_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz30;
             }else if (strcmp(UL_SCS_SubcarrierSpacing,"kHz60")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).UL_SCS_SubcarrierSpacing[j] = SubcarrierSpacing_kHz60;
+              NRRRC_CONFIGURATION_REQ (msg_p).UL_SCS_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz60;
             }else if (strcmp(UL_SCS_SubcarrierSpacing,"kHz120")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).UL_SCS_SubcarrierSpacing[j] = SubcarrierSpacing_kHz120;
+              NRRRC_CONFIGURATION_REQ (msg_p).UL_SCS_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz120;
             }else if (strcmp(UL_SCS_SubcarrierSpacing,"kHz240")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).UL_SCS_SubcarrierSpacing[j] = SubcarrierSpacing_kHz240;
+              NRRRC_CONFIGURATION_REQ (msg_p).UL_SCS_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz240;
             }else { AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for UL_SCS_SubcarrierSpacing choice: minusinfinity,kHz15,kHz30,kHz60,kHz120,kHz240!\n",
               RC.config_file_name, i, UL_SCS_SubcarrierSpacing);
             }
 
             switch (UL_SCS_SpecificCarrier_k0) {
               case -6:
-                NRRRC_CONFIGURATION_REQ (msg_p).UL_SCS_SpecificCarrier_k0[j] =  SCS_SpecificCarrier__k0_n_6;
+                NRRRC_CONFIGURATION_REQ (msg_p).UL_SCS_SpecificCarrier_k0[j] =  NR_SCS_SpecificCarrier__k0_n_6;
                 break;
 
               case 0:
-                NRRRC_CONFIGURATION_REQ (msg_p).UL_SCS_SpecificCarrier_k0[j] =  SCS_SpecificCarrier__k0_n0;
+                NRRRC_CONFIGURATION_REQ (msg_p).UL_SCS_SpecificCarrier_k0[j] =  NR_SCS_SpecificCarrier__k0_n0;
                 break;
 
               case 6:
-                NRRRC_CONFIGURATION_REQ (msg_p).UL_SCS_SpecificCarrier_k0[j] =  SCS_SpecificCarrier__k0_n6;
+                NRRRC_CONFIGURATION_REQ (msg_p).UL_SCS_SpecificCarrier_k0[j] =  NR_SCS_SpecificCarrier__k0_n6;
                 break;
 
                default:
@@ -658,16 +872,6 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
             }
 
 
-
-            //Not Sure the value selection
-            NRRRC_CONFIGURATION_REQ (msg_p).absoluteFrequencyPointA[j] = absoluteFrequencyPointA;
-                        
-            NRRRC_CONFIGURATION_REQ (msg_p).ControlResourceSetId[j] = ControlResourceSetId;
-            if ((ControlResourceSetId <0) || (ControlResourceSetId > 11)){
-              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for ControlResourceSetId choice: 0..11 !\n",
-              RC.config_file_name, i, ControlResourceSetId);
-            }
-
             /////////////////////////////////NR BWP-UplinkCommon///////////////////////////
             NRRRC_CONFIGURATION_REQ (msg_p).UL_locationAndBandwidth[j] = UL_locationAndBandwidth;
             if ((UL_locationAndBandwidth <0) || (UL_locationAndBandwidth > 37949)){
@@ -676,15 +880,15 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
             }
 
             if (strcmp(UL_BWP_SubcarrierSpacing,"kHz15")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).UL_BWP_SubcarrierSpacing[j] = SubcarrierSpacing_kHz15;
+              NRRRC_CONFIGURATION_REQ (msg_p).UL_BWP_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz15;
             }else if (strcmp(UL_BWP_SubcarrierSpacing,"kHz30")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).UL_BWP_SubcarrierSpacing[j] = SubcarrierSpacing_kHz30;
+              NRRRC_CONFIGURATION_REQ (msg_p).UL_BWP_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz30;
             }else if (strcmp(UL_BWP_SubcarrierSpacing,"kHz60")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).UL_BWP_SubcarrierSpacing[j] = SubcarrierSpacing_kHz60;
+              NRRRC_CONFIGURATION_REQ (msg_p).UL_BWP_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz60;
             }else if (strcmp(UL_BWP_SubcarrierSpacing,"kHz120")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).UL_BWP_SubcarrierSpacing[j] = SubcarrierSpacing_kHz120;
+              NRRRC_CONFIGURATION_REQ (msg_p).UL_BWP_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz120;
             }else if (strcmp(UL_BWP_SubcarrierSpacing,"kHz240")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).UL_BWP_SubcarrierSpacing[j] = SubcarrierSpacing_kHz240;
+              NRRRC_CONFIGURATION_REQ (msg_p).UL_BWP_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz240;
             }else { 
               AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for UL_BWP_SubcarrierSpacing choice: minusinfinity,kHz15,kHz30,kHz60,kHz120,kHz240!\n",
                            RC.config_file_name, i, UL_BWP_SubcarrierSpacing);
@@ -703,13 +907,13 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
             }  
 
             if (strcmp(ServingCellConfigCommon_ssb_PositionsInBurst_PR,"shortBitmap")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_PositionsInBurst_PR[j] = ServingCellConfigCommon__ssb_PositionsInBurst_PR_shortBitmap;
+              NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_PositionsInBurst_PR[j] = NR_ServingCellConfigCommon__ssb_PositionsInBurst_PR_shortBitmap;
             }else if (strcmp(ServingCellConfigCommon_ssb_PositionsInBurst_PR,"mediumBitmap")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_PositionsInBurst_PR[j] = ServingCellConfigCommon__ssb_PositionsInBurst_PR_mediumBitmap;
+              NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_PositionsInBurst_PR[j] = NR_ServingCellConfigCommon__ssb_PositionsInBurst_PR_mediumBitmap;
             }else if (strcmp(ServingCellConfigCommon_ssb_PositionsInBurst_PR,"longBitmap")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_PositionsInBurst_PR[j] = ServingCellConfigCommon__ssb_PositionsInBurst_PR_longBitmap;
+              NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_PositionsInBurst_PR[j] = NR_ServingCellConfigCommon__ssb_PositionsInBurst_PR_longBitmap;
             }else if (strcmp(ServingCellConfigCommon_ssb_PositionsInBurst_PR,"NOTHING")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_PositionsInBurst_PR[j] = ServingCellConfigCommon__ssb_PositionsInBurst_PR_NOTHING;
+              NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_PositionsInBurst_PR[j] = NR_ServingCellConfigCommon__ssb_PositionsInBurst_PR_NOTHING;
             }else { 
               AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for ServingCellConfigCommon_ssb_PositionsInBurst_PR choice !\n",
                            RC.config_file_name, i, ServingCellConfigCommon_ssb_PositionsInBurst_PR);
@@ -718,27 +922,27 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
 
             switch (ServingCellConfigCommon_ssb_periodicityServingCell) {
               case 5:
-                NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_periodicityServingCell[j] =  ServingCellConfigCommon__ssb_periodicityServingCell_ms5;
+                NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_periodicityServingCell[j] =  NR_ServingCellConfigCommon__ssb_periodicityServingCell_ms5;
                 break;
 
               case 10:
-                NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_periodicityServingCell[j] =  ServingCellConfigCommon__ssb_periodicityServingCell_ms10;
+                NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_periodicityServingCell[j] =  NR_ServingCellConfigCommon__ssb_periodicityServingCell_ms10;
                 break;
 
               case 20:
-                NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_periodicityServingCell[j] =  ServingCellConfigCommon__ssb_periodicityServingCell_ms20;
+                NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_periodicityServingCell[j] =  NR_ServingCellConfigCommon__ssb_periodicityServingCell_ms20;
                 break;
               
               case 40:
-                NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_periodicityServingCell[j] =  ServingCellConfigCommon__ssb_periodicityServingCell_ms40;
+                NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_periodicityServingCell[j] =  NR_ServingCellConfigCommon__ssb_periodicityServingCell_ms40;
                 break;
                           
               case 80:
-                NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_periodicityServingCell[j] =  ServingCellConfigCommon__ssb_periodicityServingCell_ms80;
+                NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_periodicityServingCell[j] =  NR_ServingCellConfigCommon__ssb_periodicityServingCell_ms80;
                 break;
 
               case 160:
-                NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_periodicityServingCell[j] =  ServingCellConfigCommon__ssb_periodicityServingCell_ms160;
+                NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_periodicityServingCell[j] =  NR_ServingCellConfigCommon__ssb_periodicityServingCell_ms160;
                 break;
 
                default:
@@ -749,11 +953,11 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
 
             switch (ServingCellConfigCommon_dmrs_TypeA_Position) {
               case 2:
-                NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_dmrs_TypeA_Position[j] =  ServingCellConfigCommon__dmrs_TypeA_Position_pos2;
+                NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_dmrs_TypeA_Position[j] =  NR_ServingCellConfigCommon__dmrs_TypeA_Position_pos2;
                 break;
 
               case 3:
-                NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_dmrs_TypeA_Position[j] =  ServingCellConfigCommon__dmrs_TypeA_Position_pos3;
+                NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_dmrs_TypeA_Position[j] =  NR_ServingCellConfigCommon__dmrs_TypeA_Position_pos3;
                 break;
 
                default:
@@ -763,15 +967,15 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
             }
 
             if (strcmp(NIA_SubcarrierSpacing,"kHz15")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).NIA_SubcarrierSpacing[j] = SubcarrierSpacing_kHz15;
+              NRRRC_CONFIGURATION_REQ (msg_p).NIA_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz15;
             }else if (strcmp(NIA_SubcarrierSpacing,"kHz30")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).NIA_SubcarrierSpacing[j] = SubcarrierSpacing_kHz30;
+              NRRRC_CONFIGURATION_REQ (msg_p).NIA_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz30;
             }else if (strcmp(NIA_SubcarrierSpacing,"kHz60")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).NIA_SubcarrierSpacing[j] = SubcarrierSpacing_kHz60;
+              NRRRC_CONFIGURATION_REQ (msg_p).NIA_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz60;
             }else if (strcmp(NIA_SubcarrierSpacing,"kHz120")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).NIA_SubcarrierSpacing[j] = SubcarrierSpacing_kHz120;
+              NRRRC_CONFIGURATION_REQ (msg_p).NIA_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz120;
             }else if (strcmp(NIA_SubcarrierSpacing,"kHz240")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).NIA_SubcarrierSpacing[j] = SubcarrierSpacing_kHz240;
+              NRRRC_CONFIGURATION_REQ (msg_p).NIA_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz240;
             }else { AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for NIA_SubcarrierSpacing choice: minusinfinity,kHz15,kHz30,kHz60,kHz120,kHz240!\n",
               RC.config_file_name, i, NIA_SubcarrierSpacing);
             }
@@ -784,36 +988,36 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
 
             /////////////////////////////////NR TDD-UL-DL-ConfigCommon///////////////////////////
             if (strcmp(referenceSubcarrierSpacing,"kHz15")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).referenceSubcarrierSpacing[j] = SubcarrierSpacing_kHz15;
+              NRRRC_CONFIGURATION_REQ (msg_p).referenceSubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz15;
             }else if (strcmp(referenceSubcarrierSpacing,"kHz30")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).referenceSubcarrierSpacing[j] = SubcarrierSpacing_kHz30;
+              NRRRC_CONFIGURATION_REQ (msg_p).referenceSubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz30;
             }else if (strcmp(referenceSubcarrierSpacing,"kHz60")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).referenceSubcarrierSpacing[j] = SubcarrierSpacing_kHz60;
+              NRRRC_CONFIGURATION_REQ (msg_p).referenceSubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz60;
             }else if (strcmp(referenceSubcarrierSpacing,"kHz120")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).referenceSubcarrierSpacing[j] = SubcarrierSpacing_kHz120;
+              NRRRC_CONFIGURATION_REQ (msg_p).referenceSubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz120;
             }else if (strcmp(referenceSubcarrierSpacing,"kHz240")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).referenceSubcarrierSpacing[j] = SubcarrierSpacing_kHz240;
+              NRRRC_CONFIGURATION_REQ (msg_p).referenceSubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz240;
             }else { 
               AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for referenceSubcarrierSpacing choice: minusinfinity,kHz15,kHz30,kHz60,kHz120,kHz240!\n",
                   RC.config_file_name, i, referenceSubcarrierSpacing);
             }
 
             if (strcmp(dl_UL_TransmissionPeriodicity,"ms0p5")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = TDD_UL_DL_ConfigCommon__dl_UL_TransmissionPeriodicity_ms0p5;
+              NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = NR_TDD_UL_DL_ConfigCommon__dl_UL_TransmissionPeriodicity_ms0p5;
             }else if (strcmp(dl_UL_TransmissionPeriodicity,"ms0p625")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = TDD_UL_DL_ConfigCommon__dl_UL_TransmissionPeriodicity_ms0p625;
+              NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = NR_TDD_UL_DL_ConfigCommon__dl_UL_TransmissionPeriodicity_ms0p625;
             }else if (strcmp(dl_UL_TransmissionPeriodicity,"ms1")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = TDD_UL_DL_ConfigCommon__dl_UL_TransmissionPeriodicity_ms1;
+              NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = NR_TDD_UL_DL_ConfigCommon__dl_UL_TransmissionPeriodicity_ms1;
             }else if (strcmp(dl_UL_TransmissionPeriodicity,"ms1p25")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = TDD_UL_DL_ConfigCommon__dl_UL_TransmissionPeriodicity_ms1p25;
+              NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = NR_TDD_UL_DL_ConfigCommon__dl_UL_TransmissionPeriodicity_ms1p25;
             }else if (strcmp(dl_UL_TransmissionPeriodicity,"ms2")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = TDD_UL_DL_ConfigCommon__dl_UL_TransmissionPeriodicity_ms2;
+              NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = NR_TDD_UL_DL_ConfigCommon__dl_UL_TransmissionPeriodicity_ms2;
             }else if (strcmp(dl_UL_TransmissionPeriodicity,"ms2p5")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = TDD_UL_DL_ConfigCommon__dl_UL_TransmissionPeriodicity_ms2p5;
+              NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = NR_TDD_UL_DL_ConfigCommon__dl_UL_TransmissionPeriodicity_ms2p5;
             }else if (strcmp(dl_UL_TransmissionPeriodicity,"ms5")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = TDD_UL_DL_ConfigCommon__dl_UL_TransmissionPeriodicity_ms5;
+              NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = NR_TDD_UL_DL_ConfigCommon__dl_UL_TransmissionPeriodicity_ms5;
             }else if (strcmp(dl_UL_TransmissionPeriodicity,"ms10")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = TDD_UL_DL_ConfigCommon__dl_UL_TransmissionPeriodicity_ms10;    
+              NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = NR_TDD_UL_DL_ConfigCommon__dl_UL_TransmissionPeriodicity_ms10;    
             }else { 
               AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for dl_UL_TransmissionPeriodicity choice: minusinfinity,ms0p5,ms0p625,ms1,ms1p25,ms2,ms2p5,ms5,ms10 !\n",
                            RC.config_file_name, i, dl_UL_TransmissionPeriodicity);
@@ -853,55 +1057,55 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
 
             if (strcmp(rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice,"oneEighth")==0) {
               
-              NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneEighth;
+              NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneEighth;
               switch (rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth){
                 case 4:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n4;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n4;
                   break;
                 case 8:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n8;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n8;
                   break;
                 case 12:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n12;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n12;
                   break;
                 case 16:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n16;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n16;
                   break;
                 case 20:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n20;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n20;
                   break;
                 case 24:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n24;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n24;
                   break;
                 case 28:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n28;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n28;
                   break;
                 case 32:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n32;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n32;
                   break;
                 case 36:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n36;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n36;
                   break;
                 case 40:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n40;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n40;
                   break;
                 case 44:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n44;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n44;
                   break;
                 case 48:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n48;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n48;
                   break;
                 case 52:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n52;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n52;
                   break;
                 case 56:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n56;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n56;
                   break;
                 case 60:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n60;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n60;
                   break;
                 case 64:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n64;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n64;
                   break;
                 default:
                   AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth choice: 4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64!\n",
@@ -911,55 +1115,55 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
 
             }else if (strcmp(rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice,"oneFourth")==0) {
               
-              NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneFourth;
+              NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneFourth;
               switch (rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth){
                 case 4:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n4;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n4;
                   break;
                 case 8:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n8;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n8;
                   break;
                 case 12:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n12;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n12;
                   break;
                 case 16:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n16;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n16;
                   break;
                 case 20:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n20;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n20;
                   break;
                 case 24:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n24;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n24;
                   break;
                 case 28:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n28;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n28;
                   break;
                 case 32:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n32;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n32;
                   break;
                 case 36:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n36;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n36;
                   break;
                 case 40:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n40;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n40;
                   break;
                 case 44:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n44;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n44;
                   break;
                 case 48:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n48;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n48;
                   break;
                 case 52:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n52;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n52;
                   break;
                 case 56:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n56;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n56;
                   break;
                 case 60:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n60;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n60;
                   break;
                 case 64:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n64;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n64;
                   break;
                 default:
                   AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth choice: 4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64!\n",
@@ -969,55 +1173,55 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
 
             }else if (strcmp(rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice,"oneHalf")==0) {
               
-              NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneHalf;
+              NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneHalf;
               switch (rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf){
                 case 4:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n4;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n4;
                   break;
                 case 8:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n8;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n8;
                   break;
                 case 12:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n12;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n12;
                   break;
                 case 16:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n16;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n16;
                   break;
                 case 20:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n20;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n20;
                   break;
                 case 24:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n24;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n24;
                   break;
                 case 28:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n28;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n28;
                   break;
                 case 32:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n32;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n32;
                   break;
                 case 36:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n36;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n36;
                   break;
                 case 40:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n40;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n40;
                   break;
                 case 44:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n44;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n44;
                   break;
                 case 48:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n48;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n48;
                   break;
                 case 52:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n52;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n52;
                   break;
                 case 56:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n56;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n56;
                   break;
                 case 60:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n60;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n60;
                   break;
                 case 64:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n64;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n64;
                   break;
                 default:
                   AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf choice: 4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64!\n",
@@ -1027,55 +1231,55 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
 
             }else if (strcmp(rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice,"one")==0) {
               
-              NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_one;
+              NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_one;
               switch (rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one){
                 case 4:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n4;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n4;
                   break;
                 case 8:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n8;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n8;
                   break;
                 case 12:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n12;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n12;
                   break;
                 case 16:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n16;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n16;
                   break;
                 case 20:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n20;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n20;
                   break;
                 case 24:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n24;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n24;
                   break;
                 case 28:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n28;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n28;
                   break;
                 case 32:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n32;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n32;
                   break;
                 case 36:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n36;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n36;
                   break;
                 case 40:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n40;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n40;
                   break;
                 case 44:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n44;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n44;
                   break;
                 case 48:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n48;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n48;
                   break;
                 case 52:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n52;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n52;
                   break;
                 case 56:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n56;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n56;
                   break;
                 case 60:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n60;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n60;
                   break;
                 case 64:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n64;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n64;
                   break;
                 default:
                   AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one choice: 4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64!\n",
@@ -1085,31 +1289,31 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
 
             }else if (strcmp(rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice,"two")==0) {
               
-              NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_two;
+              NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_two;
               switch (rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one){
                 case 4:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n4;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n4;
                   break;
                 case 8:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n8;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n8;
                   break;
                 case 12:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n12;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n12;
                   break;
                 case 16:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n16;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n16;
                   break;
                 case 20:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n20;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n20;
                   break;
                 case 24:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n24;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n24;
                   break;
                 case 28:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n28;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n28;
                   break;
                 case 32:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n32;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n32;
                   break;
                 default:
                   AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two choice: 4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64!\n",
@@ -1119,7 +1323,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
 
             }else if (strcmp(rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice,"four")==0) {
               
-              NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_four;
+              NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_four;
               NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_four[j] = rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_four;
               if ((rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_four < 1) || (rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_four > 16)){
                 AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_four choice: 1..16 !\n",
@@ -1128,7 +1332,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
 
             }else if (strcmp(rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice,"eight")==0) {
               
-              NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_eight;
+              NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_eight;
               NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_eight[j] = rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_eight;
               if ((rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_eight < 1) || (rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_eight > 8)){
                 AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_eight choice: 1..8 !\n",
@@ -1137,7 +1341,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
 
             }else if (strcmp(rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice,"sixteen")==0) {
               
-              NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_sixteen;    
+              NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_sixteen;    
               NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_sixteen[j] = rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_sixteen;
               if ((rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_sixteen < 1) || (rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_sixteen > 4)){
                 AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_sixteen choice: 1..4 !\n",
@@ -1145,7 +1349,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
               }//End sixteen
 
             }else if (strcmp(rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice,"NOTHING")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_NOTHING;    
+              NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_NOTHING;    
             }else { 
               AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice: oneEighth,oneFourth,oneHalf,one,two,four,eight,sixteen !\n",
                            RC.config_file_name, i, rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice);
@@ -1156,31 +1360,31 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
 
               switch (rach_ra_Msg3SizeGroupA) {
                 case 56:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b56;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = NR_RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b56;
                   break;
                 case 144:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b144;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = NR_RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b144;
                   break;
                 case 208:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b208;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = NR_RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b208;
                   break;
                 case 256:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b256;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = NR_RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b256;
                   break;
                 case 282:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b282;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = NR_RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b282;
                   break;
                 case 480:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b480;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = NR_RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b480;
                   break;
                 case 640:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b640;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = NR_RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b640;
                   break;
                 case 800:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b800;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = NR_RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b800;
                   break;
                 case 1000:
-                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b1000;
+                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = NR_RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b1000;
                   break;
                 default:
                   AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rach_ra_Msg3SizeGroupA choice: 56,144,208,256,282,480,640,800,1000!\n",
@@ -1189,21 +1393,21 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
               }// End switch (rach_ra_Msg3SizeGroupA)
 
               if (strcmp(rach_messagePowerOffsetGroupB,"minusinfinity")==0) {
-                RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_minusinfinity;
+                RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = NR_RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_minusinfinity;
               }else if (strcmp(rach_messagePowerOffsetGroupB,"dB0")==0) {
-                RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_dB0;
+                RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = NR_RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_dB0;
               }else if (strcmp(rach_messagePowerOffsetGroupB,"dB5")==0) {
-                RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_dB5;
+                RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = NR_RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_dB5;
               }else if (strcmp(rach_messagePowerOffsetGroupB,"dB8")==0) {
-                RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_dB8;
+                RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = NR_RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_dB8;
               }else if (strcmp(rach_messagePowerOffsetGroupB,"dB10")==0) {
-                RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_dB10;
+                RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = NR_RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_dB10;
               }else if (strcmp(rach_messagePowerOffsetGroupB,"dB12")==0) {
-                RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_dB12;
+                RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = NR_RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_dB12;
               }else if (strcmp(rach_messagePowerOffsetGroupB,"dB15")==0) {
-                RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_dB15;
+                RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = NR_RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_dB15;
               }else if (strcmp(rach_messagePowerOffsetGroupB,"dB18")==0) {
-                RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_dB18;
+                RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = NR_RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_dB18;
               }else{
                 AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for rach_messagePowerOffsetGroupB choice: minusinfinity,dB0,dB5,dB8,dB10,dB12,dB15,dB18!\n",
                              RC.config_file_name, i, rach_messagePowerOffsetGroupB);
@@ -1219,28 +1423,28 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
 
             switch (rach_ra_ContentionResolutionTimer) {
               case 8:
-                NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = RACH_ConfigCommon__ra_ContentionResolutionTimer_sf8;
+                NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = NR_RACH_ConfigCommon__ra_ContentionResolutionTimer_sf8;
                 break;
               case 16:
-                NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = RACH_ConfigCommon__ra_ContentionResolutionTimer_sf16;
+                NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = NR_RACH_ConfigCommon__ra_ContentionResolutionTimer_sf16;
                 break;
               case 24:
-                NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = RACH_ConfigCommon__ra_ContentionResolutionTimer_sf24;
+                NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = NR_RACH_ConfigCommon__ra_ContentionResolutionTimer_sf24;
                 break;
               case 32:
-                NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = RACH_ConfigCommon__ra_ContentionResolutionTimer_sf32;
+                NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = NR_RACH_ConfigCommon__ra_ContentionResolutionTimer_sf32;
                 break;
               case 40:
-                NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = RACH_ConfigCommon__ra_ContentionResolutionTimer_sf40;
+                NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = NR_RACH_ConfigCommon__ra_ContentionResolutionTimer_sf40;
                 break;
               case 48:
-                NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = RACH_ConfigCommon__ra_ContentionResolutionTimer_sf48;
+                NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = NR_RACH_ConfigCommon__ra_ContentionResolutionTimer_sf48;
                 break;
               case 56:
-                NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = RACH_ConfigCommon__ra_ContentionResolutionTimer_sf56;
+                NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = NR_RACH_ConfigCommon__ra_ContentionResolutionTimer_sf56;
                 break;
               case 64:
-                NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = RACH_ConfigCommon__ra_ContentionResolutionTimer_sf64;
+                NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = NR_RACH_ConfigCommon__ra_ContentionResolutionTimer_sf64;
                 break;
               default:
                 AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rach_ra_ContentionResolutionTimer choice: 8,16,24,32,40,48,56,64!\n",
@@ -1262,37 +1466,37 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
             }
 
             if (strcmp(prach_RootSequenceIndex_choice , "l839") == 0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).prach_RootSequenceIndex_choice[j] = RACH_ConfigCommon__prach_RootSequenceIndex_PR_l839;
+              NRRRC_CONFIGURATION_REQ (msg_p).prach_RootSequenceIndex_choice[j] = NR_RACH_ConfigCommon__prach_RootSequenceIndex_PR_l839;
               NRRRC_CONFIGURATION_REQ (msg_p).prach_RootSequenceIndex_l839[j] = prach_RootSequenceIndex_l839;              
             }else if (strcmp(prach_RootSequenceIndex_choice , "l139") == 0){
-              NRRRC_CONFIGURATION_REQ (msg_p).prach_RootSequenceIndex_choice[j] = RACH_ConfigCommon__prach_RootSequenceIndex_PR_l139;
+              NRRRC_CONFIGURATION_REQ (msg_p).prach_RootSequenceIndex_choice[j] = NR_RACH_ConfigCommon__prach_RootSequenceIndex_PR_l139;
               NRRRC_CONFIGURATION_REQ (msg_p).prach_RootSequenceIndex_l139[j] = prach_RootSequenceIndex_l139;
             }else {
-              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for prach_RootSequenceIndex !\n",
-                           RC.config_file_name, i, prach_RootSequenceIndex);
+              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for prach_RootSequenceIndex_choice !\n",
+                           RC.config_file_name, i, prach_RootSequenceIndex_choice);
             }
 
             if (strcmp(prach_msg1_SubcarrierSpacing,"kHz15")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_SubcarrierSpacing[j] = SubcarrierSpacing_kHz15;
+              NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz15;
             }else if (strcmp(prach_msg1_SubcarrierSpacing,"kHz30")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_SubcarrierSpacing[j] = SubcarrierSpacing_kHz30;
+              NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz30;
             }else if (strcmp(prach_msg1_SubcarrierSpacing,"kHz60")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_SubcarrierSpacing[j] = SubcarrierSpacing_kHz60;
+              NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz60;
             }else if (strcmp(prach_msg1_SubcarrierSpacing,"kHz120")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_SubcarrierSpacing[j] = SubcarrierSpacing_kHz120;
+              NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz120;
             }else if (strcmp(prach_msg1_SubcarrierSpacing,"kHz240")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_SubcarrierSpacing[j] = SubcarrierSpacing_kHz240;
+              NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz240;
             }else { 
               AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for prach_msg1_SubcarrierSpacing choice: minusinfinity,kHz15,kHz30,kHz60,kHz120,kHz240!\n",
                            RC.config_file_name, i, prach_msg1_SubcarrierSpacing);
             }
 
             if (strcmp(restrictedSetConfig , "unrestrictedSet") == 0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).restrictedSetConfig[j] = RACH_ConfigCommon__restrictedSetConfig_unrestrictedSet;                    
+              NRRRC_CONFIGURATION_REQ (msg_p).restrictedSetConfig[j] = NR_RACH_ConfigCommon__restrictedSetConfig_unrestrictedSet;                    
             }else if (strcmp(restrictedSetConfig , "restrictedSetTypeA") == 0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).restrictedSetConfig[j] = RACH_ConfigCommon__restrictedSetConfig_restrictedSetTypeA;
+              NRRRC_CONFIGURATION_REQ (msg_p).restrictedSetConfig[j] = NR_RACH_ConfigCommon__restrictedSetConfig_restrictedSetTypeA;
             }else if (strcmp(restrictedSetConfig , "restrictedSetTypeB") == 0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).restrictedSetConfig[j] = RACH_ConfigCommon__restrictedSetConfig_restrictedSetTypeB;
+              NRRRC_CONFIGURATION_REQ (msg_p).restrictedSetConfig[j] = NR_RACH_ConfigCommon__restrictedSetConfig_restrictedSetTypeB;
             }else {
               AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for restrictedSetConfig !\n",
                            RC.config_file_name, i, restrictedSetConfig);
@@ -1310,13 +1514,13 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
             }
 
             if (strcmp(prach_msg1_FDM , "one") == 0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_FDM[j] = RACH_ConfigGeneric__msg1_FDM_one;                    
+              NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_FDM[j] = NR_RACH_ConfigGeneric__msg1_FDM_one;                    
             }else if (strcmp(prach_msg1_FDM , "two") == 0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_FDM[j] = RACH_ConfigGeneric__msg1_FDM_two;
+              NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_FDM[j] = NR_RACH_ConfigGeneric__msg1_FDM_two;
             }else if (strcmp(prach_msg1_FDM , "four") == 0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_FDM[j] = RACH_ConfigGeneric__msg1_FDM_four;
+              NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_FDM[j] = NR_RACH_ConfigGeneric__msg1_FDM_four;
             }else if (strcmp(prach_msg1_FDM , "eight") == 0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_FDM[j] = RACH_ConfigGeneric__msg1_FDM_eight;
+              NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_FDM[j] = NR_RACH_ConfigGeneric__msg1_FDM_eight;
             }else {
               AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for prach_msg1_FDM !\n",
                            RC.config_file_name, i, prach_msg1_FDM);
@@ -1342,37 +1546,37 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
 
             switch (preambleTransMax) {
               case 3:
-                NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] =  RACH_ConfigGeneric__preambleTransMax_n3;
+                NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] =  NR_RACH_ConfigGeneric__preambleTransMax_n3;
                 break;
               case 4:
-                NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] =  RACH_ConfigGeneric__preambleTransMax_n4;
+                NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] =  NR_RACH_ConfigGeneric__preambleTransMax_n4;
                 break;
               case 5:
-                NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] =  RACH_ConfigGeneric__preambleTransMax_n5;
+                NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] =  NR_RACH_ConfigGeneric__preambleTransMax_n5;
                 break;
               case 6:
-                NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] =  RACH_ConfigGeneric__preambleTransMax_n6;
+                NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] =  NR_RACH_ConfigGeneric__preambleTransMax_n6;
                 break;
               case 7:
-                NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] =  RACH_ConfigGeneric__preambleTransMax_n7;
+                NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] =  NR_RACH_ConfigGeneric__preambleTransMax_n7;
                 break;
               case 8:
-                NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] =  RACH_ConfigGeneric__preambleTransMax_n8;
+                NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] =  NR_RACH_ConfigGeneric__preambleTransMax_n8;
                 break;
               case 10:
-                NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] =  RACH_ConfigGeneric__preambleTransMax_n10;
+                NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] =  NR_RACH_ConfigGeneric__preambleTransMax_n10;
                 break;
               case 20:
-                NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] =  RACH_ConfigGeneric__preambleTransMax_n20;
+                NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] =  NR_RACH_ConfigGeneric__preambleTransMax_n20;
                 break;
               case 50:
-                NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] =  RACH_ConfigGeneric__preambleTransMax_n50;
+                NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] =  NR_RACH_ConfigGeneric__preambleTransMax_n50;
                 break;
               case 100:
-                NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] =  RACH_ConfigGeneric__preambleTransMax_n100;
+                NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] =  NR_RACH_ConfigGeneric__preambleTransMax_n100;
                 break;
               case 200:
-                NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] =  RACH_ConfigGeneric__preambleTransMax_n200;
+                NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] =  NR_RACH_ConfigGeneric__preambleTransMax_n200;
                 break;
                default:
                 AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for preambleTransMax choice: 3,4,5,6,7,8,10,20,50,100,200 !\n",
@@ -1381,13 +1585,13 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
             }            
 
             if (strcmp(powerRampingStep , "dB0") == 0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).powerRampingStep[j] = RACH_ConfigGeneric__powerRampingStep_dB0;                    
+              NRRRC_CONFIGURATION_REQ (msg_p).powerRampingStep[j] = NR_RACH_ConfigGeneric__powerRampingStep_dB0;                    
             }else if (strcmp(powerRampingStep , "dB2") == 0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).powerRampingStep[j] = RACH_ConfigGeneric__powerRampingStep_dB2;
+              NRRRC_CONFIGURATION_REQ (msg_p).powerRampingStep[j] = NR_RACH_ConfigGeneric__powerRampingStep_dB2;
             }else if (strcmp(powerRampingStep , "dB4") == 0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).powerRampingStep[j] = RACH_ConfigGeneric__powerRampingStep_dB4;
+              NRRRC_CONFIGURATION_REQ (msg_p).powerRampingStep[j] = NR_RACH_ConfigGeneric__powerRampingStep_dB4;
             }else if (strcmp(powerRampingStep , "dB6") == 0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).powerRampingStep[j] = RACH_ConfigGeneric__powerRampingStep_dB6;
+              NRRRC_CONFIGURATION_REQ (msg_p).powerRampingStep[j] = NR_RACH_ConfigGeneric__powerRampingStep_dB6;
             }else {
               AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for powerRampingStep !\n",
                            RC.config_file_name, i, powerRampingStep);
@@ -1395,28 +1599,28 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
 
             switch (ra_ResponseWindow) {
               case 1:
-                NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] =  RACH_ConfigGeneric__ra_ResponseWindow_sl1;
+                NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] =  NR_RACH_ConfigGeneric__ra_ResponseWindow_sl1;
                 break;
               case 2:
-                NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] =  RACH_ConfigGeneric__ra_ResponseWindow_sl2;
+                NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] =  NR_RACH_ConfigGeneric__ra_ResponseWindow_sl2;
                 break;
               case 4:
-                NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] =  RACH_ConfigGeneric__ra_ResponseWindow_sl4;
+                NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] =  NR_RACH_ConfigGeneric__ra_ResponseWindow_sl4;
                 break;
               case 8:
-                NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] =  RACH_ConfigGeneric__ra_ResponseWindow_sl8;
+                NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] =  NR_RACH_ConfigGeneric__ra_ResponseWindow_sl8;
                 break;
               case 10:
-                NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] =  RACH_ConfigGeneric__ra_ResponseWindow_sl10;
+                NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] =  NR_RACH_ConfigGeneric__ra_ResponseWindow_sl10;
                 break;
               case 20:
-                NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] =  RACH_ConfigGeneric__ra_ResponseWindow_sl20;
+                NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] =  NR_RACH_ConfigGeneric__ra_ResponseWindow_sl20;
                 break;
               case 40:
-                NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] =  RACH_ConfigGeneric__ra_ResponseWindow_sl40;
+                NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] =  NR_RACH_ConfigGeneric__ra_ResponseWindow_sl40;
                 break;
               case 80:
-                NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] =  RACH_ConfigGeneric__ra_ResponseWindow_sl80;
+                NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] =  NR_RACH_ConfigGeneric__ra_ResponseWindow_sl80;
                 break;
                default:
                 AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for ra_ResponseWindow choice: 1,2,4,8,10,20,40,80 !\n",
@@ -1449,9 +1653,9 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
             }
 
             if (strcmp(PUSCH_TimeDomainResourceAllocation_mappingType , "typeA") == 0){
-              NRRRC_CONFIGURATION_REQ (msg_p).PUSCH_TimeDomainResourceAllocation_mappingType[j] =  PUSCH_TimeDomainResourceAllocation__mappingType_typeA;
+              NRRRC_CONFIGURATION_REQ (msg_p).PUSCH_TimeDomainResourceAllocation_mappingType[j] =  NR_PUSCH_TimeDomainResourceAllocation__mappingType_typeA;
             }else if (strcmp(PUSCH_TimeDomainResourceAllocation_mappingType , "typeB") == 0){
-              NRRRC_CONFIGURATION_REQ (msg_p).PUSCH_TimeDomainResourceAllocation_mappingType[j] =  PUSCH_TimeDomainResourceAllocation__mappingType_typeB;
+              NRRRC_CONFIGURATION_REQ (msg_p).PUSCH_TimeDomainResourceAllocation_mappingType[j] =  NR_PUSCH_TimeDomainResourceAllocation__mappingType_typeB;
             }else {
               AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for PUSCH_TimeDomainResourceAllocation_mappingType !\n",
                            RC.config_file_name, i, PUSCH_TimeDomainResourceAllocation_mappingType);
@@ -1459,11 +1663,11 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
 
             /////////////////////////////////NR PUCCH-ConfigCommon///////////////////////////
             if (strcmp(pucch_GroupHopping , "neither") == 0){
-              NRRRC_CONFIGURATION_REQ (msg_p).pucch_GroupHopping[j] =  PUCCH_ConfigCommon__pucch_GroupHopping_neither;
+              NRRRC_CONFIGURATION_REQ (msg_p).pucch_GroupHopping[j] =  NR_PUCCH_ConfigCommon__pucch_GroupHopping_neither;
             }else if (strcmp(pucch_GroupHopping , "enable") == 0){
-              NRRRC_CONFIGURATION_REQ (msg_p).pucch_GroupHopping[j] =  PUCCH_ConfigCommon__pucch_GroupHopping_enable;
+              NRRRC_CONFIGURATION_REQ (msg_p).pucch_GroupHopping[j] =  NR_PUCCH_ConfigCommon__pucch_GroupHopping_enable;
             }else if (strcmp(pucch_GroupHopping , "disable") == 0){
-              NRRRC_CONFIGURATION_REQ (msg_p).pucch_GroupHopping[j] =  PUCCH_ConfigCommon__pucch_GroupHopping_disable;
+              NRRRC_CONFIGURATION_REQ (msg_p).pucch_GroupHopping[j] =  NR_PUCCH_ConfigCommon__pucch_GroupHopping_disable;
             }else {
               AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for pucch_GroupHopping !\n",
                            RC.config_file_name, i, pucch_GroupHopping);
@@ -1483,9 +1687,9 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
             }
 
             if (strcmp(PDSCH_TimeDomainResourceAllocation_mappingType , "typeA") == 0){
-              NRRRC_CONFIGURATION_REQ (msg_p).PDSCH_TimeDomainResourceAllocation_mappingType[j] =  PDSCH_TimeDomainResourceAllocation__mappingType_typeA;
+              NRRRC_CONFIGURATION_REQ (msg_p).PDSCH_TimeDomainResourceAllocation_mappingType[j] =  NR_PDSCH_TimeDomainResourceAllocation__mappingType_typeA;
             }else if (strcmp(PDSCH_TimeDomainResourceAllocation_mappingType , "typeB") == 0){
-              NRRRC_CONFIGURATION_REQ (msg_p).PDSCH_TimeDomainResourceAllocation_mappingType[j] =  PDSCH_TimeDomainResourceAllocation__mappingType_typeB;
+              NRRRC_CONFIGURATION_REQ (msg_p).PDSCH_TimeDomainResourceAllocation_mappingType[j] =  NR_PDSCH_TimeDomainResourceAllocation__mappingType_typeB;
             }else {
               AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for PDSCH_TimeDomainResourceAllocation_mappingType !\n",
                            RC.config_file_name, i, PDSCH_TimeDomainResourceAllocation_mappingType);
@@ -1499,22 +1703,22 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
             }
 
             if (strcmp(RateMatchPattern_patternType , "NOTHING") == 0){
-              NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_patternType[j] =  RateMatchPattern__patternType_PR_NOTHING;
+              NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_patternType[j] =  NR_RateMatchPattern__patternType_PR_NOTHING;
             }else if (strcmp(RateMatchPattern_patternType , "bitmaps") == 0){
-              NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_patternType[j] =  RateMatchPattern__patternType_PR_bitmaps;
+              NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_patternType[j] =  NR_RateMatchPattern__patternType_PR_bitmaps;
             }else if (strcmp(RateMatchPattern_patternType , "controlResourceSet") == 0){
-              NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_patternType[j] =  RateMatchPattern__patternType_PR_controlResourceSet;
+              NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_patternType[j] =  NR_RateMatchPattern__patternType_PR_controlResourceSet;
             }else {
               AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for RateMatchPattern_patternType !\n",
                            RC.config_file_name, i, RateMatchPattern_patternType);
             }
 
             if (strcmp(symbolsInResourceBlock , "NOTHING") == 0){
-              NRRRC_CONFIGURATION_REQ (msg_p).symbolsInResourceBlock[j] =  RateMatchPattern__patternType__bitmaps__symbolsInResourceBlock_PR_NOTHING;
+              NRRRC_CONFIGURATION_REQ (msg_p).symbolsInResourceBlock[j] =  NR_RateMatchPattern__patternType__bitmaps__symbolsInResourceBlock_PR_NOTHING;
             }else if (strcmp(symbolsInResourceBlock , "oneSlot") == 0){
-              NRRRC_CONFIGURATION_REQ (msg_p).symbolsInResourceBlock[j] =  RateMatchPattern__patternType__bitmaps__symbolsInResourceBlock_PR_oneSlot;
+              NRRRC_CONFIGURATION_REQ (msg_p).symbolsInResourceBlock[j] =  NR_RateMatchPattern__patternType__bitmaps__symbolsInResourceBlock_PR_oneSlot;
             }else if (strcmp(symbolsInResourceBlock , "twoSlots") == 0){
-              NRRRC_CONFIGURATION_REQ (msg_p).symbolsInResourceBlock[j] =  RateMatchPattern__patternType__bitmaps__symbolsInResourceBlock_PR_twoSlots;
+              NRRRC_CONFIGURATION_REQ (msg_p).symbolsInResourceBlock[j] =  NR_RateMatchPattern__patternType__bitmaps__symbolsInResourceBlock_PR_twoSlots;
             }else {
               AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for symbolsInResourceBlock !\n",
                            RC.config_file_name, i, symbolsInResourceBlock);
@@ -1522,25 +1726,25 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
 
             switch(periodicityAndPattern){
               case 2:
-                NRRRC_CONFIGURATION_REQ (msg_p).periodicityAndPattern[j] =  RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n2;
+                NRRRC_CONFIGURATION_REQ (msg_p).periodicityAndPattern[j] =  NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n2;
                 break;
               case 4:
-                NRRRC_CONFIGURATION_REQ (msg_p).periodicityAndPattern[j] =  RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n4;
+                NRRRC_CONFIGURATION_REQ (msg_p).periodicityAndPattern[j] =  NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n4;
                 break;
               case 5:
-                NRRRC_CONFIGURATION_REQ (msg_p).periodicityAndPattern[j] =  RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n5;
+                NRRRC_CONFIGURATION_REQ (msg_p).periodicityAndPattern[j] =  NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n5;
                 break;
               case 8:
-                NRRRC_CONFIGURATION_REQ (msg_p).periodicityAndPattern[j] =  RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n8;
+                NRRRC_CONFIGURATION_REQ (msg_p).periodicityAndPattern[j] =  NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n8;
                 break;
               case 10:
-                NRRRC_CONFIGURATION_REQ (msg_p).periodicityAndPattern[j] =  RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n10;
+                NRRRC_CONFIGURATION_REQ (msg_p).periodicityAndPattern[j] =  NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n10;
                 break;
               case 20:
-                NRRRC_CONFIGURATION_REQ (msg_p).periodicityAndPattern[j] =  RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n20;
+                NRRRC_CONFIGURATION_REQ (msg_p).periodicityAndPattern[j] =  NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n20;
                 break;
               case 40:
-                NRRRC_CONFIGURATION_REQ (msg_p).periodicityAndPattern[j] =  RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n40;
+                NRRRC_CONFIGURATION_REQ (msg_p).periodicityAndPattern[j] =  NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n40;
                 break;
               default:
                 AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for periodicityAndPattern choice: 2,4,5,8,10,20,40 !\n",
@@ -1555,24 +1759,24 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
             }
 
             if (strcmp(RateMatchPattern_subcarrierSpacing,"kHz15")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_subcarrierSpacing[j] = SubcarrierSpacing_kHz15;
+              NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_subcarrierSpacing[j] = NR_SubcarrierSpacing_kHz15;
             }else if (strcmp(RateMatchPattern_subcarrierSpacing,"kHz30")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_subcarrierSpacing[j] = SubcarrierSpacing_kHz30;
+              NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_subcarrierSpacing[j] = NR_SubcarrierSpacing_kHz30;
             }else if (strcmp(RateMatchPattern_subcarrierSpacing,"kHz60")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_subcarrierSpacing[j] = SubcarrierSpacing_kHz60;
+              NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_subcarrierSpacing[j] = NR_SubcarrierSpacing_kHz60;
             }else if (strcmp(RateMatchPattern_subcarrierSpacing,"kHz120")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_subcarrierSpacing[j] = SubcarrierSpacing_kHz120;
+              NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_subcarrierSpacing[j] = NR_SubcarrierSpacing_kHz120;
             }else if (strcmp(RateMatchPattern_subcarrierSpacing,"kHz240")==0) {
-              NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_subcarrierSpacing[j] = SubcarrierSpacing_kHz240;
+              NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_subcarrierSpacing[j] = NR_SubcarrierSpacing_kHz240;
             }else { 
               AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for RateMatchPattern_subcarrierSpacing choice: minusinfinity,kHz15,kHz30,kHz60,kHz120,kHz240!\n",
                            RC.config_file_name, i, RateMatchPattern_subcarrierSpacing);
             }            
             
             if (strcmp(RateMatchPattern_mode , "dynamic") == 0){
-              NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_mode[j] =  RateMatchPattern__mode_dynamic;
+              NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_mode[j] =  NR_RateMatchPattern__mode_dynamic;
             }else if (strcmp(RateMatchPattern_mode , "semiStatic") == 0){
-              NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_mode[j] =  RateMatchPattern__mode_semiStatic;
+              NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_mode[j] =  NR_RateMatchPattern__mode_semiStatic;
             }else {
               AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for RateMatchPattern_mode !\n",
                            RC.config_file_name, i, RateMatchPattern_mode);
@@ -1623,11 +1827,11 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
             }            
             
             if (strcmp(PDCCH_cce_REG_MappingType , "NOTHING") == 0){
-              NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_cce_REG_MappingType[j] =  ControlResourceSet__cce_REG_MappingType_PR_NOTHING;
+              NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_cce_REG_MappingType[j] =  NR_ControlResourceSet__cce_REG_MappingType_PR_NOTHING;
             }else if (strcmp(PDCCH_cce_REG_MappingType , "interleaved") == 0){
-              NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_cce_REG_MappingType[j] =  ControlResourceSet__cce_REG_MappingType_PR_interleaved;
+              NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_cce_REG_MappingType[j] =  NR_ControlResourceSet__cce_REG_MappingType_PR_interleaved;
             }else if (strcmp(PDCCH_cce_REG_MappingType , "nonInterleaved") == 0){
-              NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_cce_REG_MappingType[j] =  ControlResourceSet__cce_REG_MappingType_PR_nonInterleaved;
+              NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_cce_REG_MappingType[j] =  NR_ControlResourceSet__cce_REG_MappingType_PR_nonInterleaved;
             }else {
               AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for PDCCH_cce_REG_MappingType !\n",
                            RC.config_file_name, i, PDCCH_cce_REG_MappingType);
@@ -1635,13 +1839,13 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
 
             switch(PDCCH_reg_BundleSize){
               case 2:
-                NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_reg_BundleSize[j] =  ControlResourceSet__cce_REG_MappingType__interleaved__reg_BundleSize_n2;
+                NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_reg_BundleSize[j] =  NR_ControlResourceSet__cce_REG_MappingType__interleaved__reg_BundleSize_n2;
                 break;
               case 3:
-                NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_reg_BundleSize[j] =  ControlResourceSet__cce_REG_MappingType__interleaved__reg_BundleSize_n3;
+                NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_reg_BundleSize[j] =  NR_ControlResourceSet__cce_REG_MappingType__interleaved__reg_BundleSize_n3;
                 break;
               case 6:
-                NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_reg_BundleSize[j] =  ControlResourceSet__cce_REG_MappingType__interleaved__reg_BundleSize_n6;
+                NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_reg_BundleSize[j] =  NR_ControlResourceSet__cce_REG_MappingType__interleaved__reg_BundleSize_n6;
                 break;
               default:
                 AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for PDCCH_reg_BundleSize choice: 2,3,6 !\n",
@@ -1651,13 +1855,13 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
 
             switch(PDCCH_interleaverSize){
               case 2:
-                NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_interleaverSize[j] =  ControlResourceSet__cce_REG_MappingType__interleaved__reg_BundleSize_n2;
+                NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_interleaverSize[j] =  NR_ControlResourceSet__cce_REG_MappingType__interleaved__reg_BundleSize_n2;
                 break;
               case 3:
-                NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_interleaverSize[j] =  ControlResourceSet__cce_REG_MappingType__interleaved__reg_BundleSize_n3;
+                NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_interleaverSize[j] =  NR_ControlResourceSet__cce_REG_MappingType__interleaved__reg_BundleSize_n3;
                 break;
               case 6:
-                NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_interleaverSize[j] =  ControlResourceSet__cce_REG_MappingType__interleaved__reg_BundleSize_n6;
+                NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_interleaverSize[j] =  NR_ControlResourceSet__cce_REG_MappingType__interleaved__reg_BundleSize_n6;
                 break;
               default:
                 AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for PDCCH_interleaverSize choice: 2,3,6 !\n",
@@ -1672,9 +1876,9 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
             }
 
             if (strcmp(PDCCH_precoderGranularity , "sameAsREG-bundle") == 0){
-              NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_precoderGranularity[j] =  ControlResourceSet__precoderGranularity_sameAsREG_bundle;
+              NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_precoderGranularity[j] =  NR_ControlResourceSet__precoderGranularity_sameAsREG_bundle;
             }else if (strcmp(PDCCH_precoderGranularity , "allContiguousRBs") == 0){
-              NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_precoderGranularity[j] =  ControlResourceSet__precoderGranularity_allContiguousRBs;
+              NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_precoderGranularity[j] =  NR_ControlResourceSet__precoderGranularity_allContiguousRBs;
             }else {
               AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for PDCCH_precoderGranularity !\n",
                            RC.config_file_name, i, PDCCH_precoderGranularity);
@@ -1704,12 +1908,12 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
             }
 
             if (strcmp(SearchSpace_monitoringSlotPeriodicityAndOffset_choice , "sl1") == 0){
-              NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] =  SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl1;
+              NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] =  NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl1;
               
               NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_sl1[j] = NULL;                 
 
             }else if (strcmp(SearchSpace_monitoringSlotPeriodicityAndOffset_choice , "sl2") == 0){
-              NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] =  SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl2;
+              NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] =  NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl2;
               
               NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_sl2[j] = SearchSpace_monitoringSlotPeriodicityAndOffset_sl2;
               if ((SearchSpace_monitoringSlotPeriodicityAndOffset_sl2 <0) || (SearchSpace_monitoringSlotPeriodicityAndOffset_sl2>1)){
@@ -1718,7 +1922,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
               }   
 
             }else if (strcmp(SearchSpace_monitoringSlotPeriodicityAndOffset_choice , "sl4") == 0){
-              NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] =  SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl4;
+              NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] =  NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl4;
             
               NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_sl4[j] = SearchSpace_monitoringSlotPeriodicityAndOffset_sl4;
               if ((SearchSpace_monitoringSlotPeriodicityAndOffset_sl4 <0) || (SearchSpace_monitoringSlotPeriodicityAndOffset_sl4>3)){
@@ -1727,7 +1931,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
               }                 
 
             }else if (strcmp(SearchSpace_monitoringSlotPeriodicityAndOffset_choice , "sl5") == 0){
-              NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] =  SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl5;
+              NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] =  NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl5;
             
               NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_sl5[j] = SearchSpace_monitoringSlotPeriodicityAndOffset_sl5;
               if ((SearchSpace_monitoringSlotPeriodicityAndOffset_sl5 <0) || (SearchSpace_monitoringSlotPeriodicityAndOffset_sl5>4)){
@@ -1736,7 +1940,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
               }   
 
             }else if (strcmp(SearchSpace_monitoringSlotPeriodicityAndOffset_choice , "sl8") == 0){
-              NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] =  SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl8;
+              NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] =  NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl8;
             
               NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_sl8[j] = SearchSpace_monitoringSlotPeriodicityAndOffset_sl8;
               if ((SearchSpace_monitoringSlotPeriodicityAndOffset_sl8 <0) || (SearchSpace_monitoringSlotPeriodicityAndOffset_sl8>7)){
@@ -1745,7 +1949,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
               }   
 
             }else if (strcmp(SearchSpace_monitoringSlotPeriodicityAndOffset_choice , "sl10") == 0){
-              NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] =  SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl10;
+              NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] =  NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl10;
             
               NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_sl10[j] = SearchSpace_monitoringSlotPeriodicityAndOffset_sl10;
               if ((SearchSpace_monitoringSlotPeriodicityAndOffset_sl10 <0) || (SearchSpace_monitoringSlotPeriodicityAndOffset_sl10>9)){
@@ -1754,7 +1958,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
               } 
 
             }else if (strcmp(SearchSpace_monitoringSlotPeriodicityAndOffset_choice , "sl16") == 0){
-              NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] =  SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl16;
+              NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] =  NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl16;
             
               NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_sl16[j] = SearchSpace_monitoringSlotPeriodicityAndOffset_sl16;
               if ((SearchSpace_monitoringSlotPeriodicityAndOffset_sl16 <0) || (SearchSpace_monitoringSlotPeriodicityAndOffset_sl16>15)){
@@ -1763,7 +1967,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
               } 
 
             }else if (strcmp(SearchSpace_monitoringSlotPeriodicityAndOffset_choice , "sl20") == 0){
-              NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] =  SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl20;
+              NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] =  NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl20;
             
               NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_sl20[j] = SearchSpace_monitoringSlotPeriodicityAndOffset_sl20;
               if ((SearchSpace_monitoringSlotPeriodicityAndOffset_sl20 <0) || (SearchSpace_monitoringSlotPeriodicityAndOffset_sl20>19)){
@@ -1772,7 +1976,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
               } 
 
             }else if (strcmp(SearchSpace_monitoringSlotPeriodicityAndOffset_choice , "UNABLE") == 0){
-              NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] =  SearchSpace__monitoringSlotPeriodicityAndOffset_PR_NOTHING;
+              NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] =  NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_NOTHING;
             
             }else {
               AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SearchSpace_monitoringSlotPeriodicityAndOffset_choice !\n",
@@ -1782,28 +1986,28 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
             
             switch(SearchSpace_nrofCandidates_aggregationLevel1){
               case 0:
-                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] =  SearchSpace__nrofCandidates__aggregationLevel1_n0;
+                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel1_n0;
                 break;
               case 1:
-                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] =  SearchSpace__nrofCandidates__aggregationLevel1_n1;
+                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel1_n1;
                 break;
               case 2:
-                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] =  SearchSpace__nrofCandidates__aggregationLevel1_n2;
+                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel1_n2;
                 break;
               case 3:
-                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] =  SearchSpace__nrofCandidates__aggregationLevel1_n3;
+                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel1_n3;
                 break;
               case 4:
-                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] =  SearchSpace__nrofCandidates__aggregationLevel1_n4;
+                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel1_n4;
                 break;
               case 5:
-                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] =  SearchSpace__nrofCandidates__aggregationLevel1_n5;
+                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel1_n5;
                 break;
               case 6:
-                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] =  SearchSpace__nrofCandidates__aggregationLevel1_n6;
+                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel1_n6;
                 break;
               case 8:
-                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] =  SearchSpace__nrofCandidates__aggregationLevel1_n8;
+                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel1_n8;
                 break;
               default:
                 AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SearchSpace_nrofCandidates_aggregationLevel1 choice: 0,1,2,3,4,5,6,8 !\n",
@@ -1813,28 +2017,28 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
 
             switch(SearchSpace_nrofCandidates_aggregationLevel2){
               case 0:
-                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] =  SearchSpace__nrofCandidates__aggregationLevel2_n0;
+                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel2_n0;
                 break;
               case 1:
-                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] =  SearchSpace__nrofCandidates__aggregationLevel2_n1;
+                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel2_n1;
                 break;
               case 2:
-                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] =  SearchSpace__nrofCandidates__aggregationLevel2_n2;
+                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel2_n2;
                 break;
               case 3:
-                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] =  SearchSpace__nrofCandidates__aggregationLevel2_n3;
+                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel2_n3;
                 break;
               case 4:
-                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] =  SearchSpace__nrofCandidates__aggregationLevel2_n4;
+                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel2_n4;
                 break;
               case 5:
-                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] =  SearchSpace__nrofCandidates__aggregationLevel2_n5;
+                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel2_n5;
                 break;
               case 6:
-                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] =  SearchSpace__nrofCandidates__aggregationLevel2_n6;
+                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel2_n6;
                 break;
               case 8:
-                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] =  SearchSpace__nrofCandidates__aggregationLevel2_n8;
+                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel2_n8;
                 break;
               default:
                 AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SearchSpace_nrofCandidates_aggregationLevel2 choice: 0,1,2,3,4,5,6,8 !\n",
@@ -1844,28 +2048,28 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
 
             switch(SearchSpace_nrofCandidates_aggregationLevel4){
               case 0:
-                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] =  SearchSpace__nrofCandidates__aggregationLevel4_n0;
+                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel4_n0;
                 break;
               case 1:
-                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] =  SearchSpace__nrofCandidates__aggregationLevel4_n1;
+                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel4_n1;
                 break;
               case 2:
-                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] =  SearchSpace__nrofCandidates__aggregationLevel4_n2;
+                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel4_n2;
                 break;
               case 3:
-                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] =  SearchSpace__nrofCandidates__aggregationLevel4_n3;
+                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel4_n3;
                 break;
               case 4:
-                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] =  SearchSpace__nrofCandidates__aggregationLevel4_n4;
+                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel4_n4;
                 break;
               case 5:
-                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] =  SearchSpace__nrofCandidates__aggregationLevel4_n5;
+                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel4_n5;
                 break;
               case 6:
-                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] =  SearchSpace__nrofCandidates__aggregationLevel4_n6;
+                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel4_n6;
                 break;
               case 8:
-                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] =  SearchSpace__nrofCandidates__aggregationLevel4_n8;
+                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel4_n8;
                 break;
               default:
                 AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SearchSpace_nrofCandidates_aggregationLevel4 choice: 0,1,2,3,4,5,6,8 !\n",
@@ -1875,28 +2079,28 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
 
             switch(SearchSpace_nrofCandidates_aggregationLevel8){
               case 0:
-                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] =  SearchSpace__nrofCandidates__aggregationLevel8_n0;
+                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel8_n0;
                 break;
               case 1:
-                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] =  SearchSpace__nrofCandidates__aggregationLevel8_n1;
+                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel8_n1;
                 break;
               case 2:
-                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] =  SearchSpace__nrofCandidates__aggregationLevel8_n2;
+                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel8_n2;
                 break;
               case 3:
-                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] =  SearchSpace__nrofCandidates__aggregationLevel8_n3;
+                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel8_n3;
                 break;
               case 4:
-                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] =  SearchSpace__nrofCandidates__aggregationLevel8_n4;
+                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel8_n4;
                 break;
               case 5:
-                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] =  SearchSpace__nrofCandidates__aggregationLevel8_n5;
+                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel8_n5;
                 break;
               case 6:
-                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] =  SearchSpace__nrofCandidates__aggregationLevel8_n6;
+                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel8_n6;
                 break;
               case 8:
-                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] =  SearchSpace__nrofCandidates__aggregationLevel8_n8;
+                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel8_n8;
                 break;
               default:
                 AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SearchSpace_nrofCandidates_aggregationLevel8 choice: 0,1,2,3,4,5,6,8 !\n",
@@ -1906,28 +2110,28 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
 
             switch(SearchSpace_nrofCandidates_aggregationLevel16){
               case 0:
-                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] =  SearchSpace__nrofCandidates__aggregationLevel16_n0;
+                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel16_n0;
                 break;
               case 1:
-                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] =  SearchSpace__nrofCandidates__aggregationLevel16_n1;
+                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel16_n1;
                 break;
               case 2:
-                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] =  SearchSpace__nrofCandidates__aggregationLevel16_n2;
+                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel16_n2;
                 break;
               case 3:
-                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] =  SearchSpace__nrofCandidates__aggregationLevel16_n3;
+                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel16_n3;
                 break;
               case 4:
-                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] =  SearchSpace__nrofCandidates__aggregationLevel16_n4;
+                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel16_n4;
                 break;
               case 5:
-                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] =  SearchSpace__nrofCandidates__aggregationLevel16_n5;
+                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel16_n5;
                 break;
               case 6:
-                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] =  SearchSpace__nrofCandidates__aggregationLevel16_n6;
+                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel16_n6;
                 break;
               case 8:
-                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] =  SearchSpace__nrofCandidates__aggregationLevel16_n8;
+                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel16_n8;
                 break;
               default:
                 AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SearchSpace_nrofCandidates_aggregationLevel16 choice: 0,1,2,3,4,5,6,8 !\n",
@@ -1936,11 +2140,11 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
             }
 
             if (strcmp(SearchSpace_searchSpaceType , "NOTHING") == 0){
-              NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_searchSpaceType[j] =  SearchSpace__searchSpaceType_PR_NOTHING;
+              NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_searchSpaceType[j] =  NR_SearchSpace__searchSpaceType_PR_NOTHING;
             }else if (strcmp(SearchSpace_searchSpaceType , "common") == 0){
-              NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_searchSpaceType[j] =  SearchSpace__searchSpaceType_PR_common;
+              NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_searchSpaceType[j] =  NR_SearchSpace__searchSpaceType_PR_common;
             }else if (strcmp(SearchSpace_searchSpaceType , "ue_Specific") == 0){
-              NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_searchSpaceType[j] =  SearchSpace__searchSpaceType_PR_ue_Specific;
+              NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_searchSpaceType[j] =  NR_SearchSpace__searchSpaceType_PR_ue_Specific;
             }else {
               AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SearchSpace_searchSpaceType !\n",
                            RC.config_file_name, i, SearchSpace_searchSpaceType);
@@ -1948,10 +2152,10 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
 
             switch(Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel1){
               case 1:
-                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel1[j] =  SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel1_n1;
+                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel1[j] =  NR_SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel1_n1;
                 break;
               case 2:
-                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel1[j] =  SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel1_n2;
+                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel1[j] =  NR_SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel1_n2;
                 break;
               default:
                 AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel1 choice: 1,2 !\n",
@@ -1961,10 +2165,10 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
 
             switch(Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel2){
               case 1:
-                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel2[j] =  SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel2_n1;
+                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel2[j] =  NR_SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel2_n1;
                 break;
               case 2:
-                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel2[j] =  SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel2_n2;
+                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel2[j] =  NR_SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel2_n2;
                 break;
               default:
                 AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel2 choice: 1,2 !\n",
@@ -1974,10 +2178,10 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
 
             switch(Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel4){
               case 1:
-                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel4[j] =  SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel4_n1;
+                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel4[j] =  NR_SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel4_n1;
                 break;
               case 2:
-                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel4[j] =  SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel4_n2;
+                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel4[j] =  NR_SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel4_n2;
                 break;
               default:
                 AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel4 choice: 1,2 !\n",
@@ -1987,10 +2191,10 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
 
             switch(Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel8){
               case 1:
-                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel8[j] =  SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel8_n1;
+                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel8[j] =  NR_SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel8_n1;
                 break;
               case 2:
-                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel8[j] =  SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel8_n2;
+                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel8[j] =  NR_SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel8_n2;
                 break;
               default:
                 AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel8 choice: 1,2 !\n",
@@ -2000,10 +2204,10 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
 
             switch(Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel16){
               case 1:
-                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel16[j] =  SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel16_n1;
+                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel16[j] =  NR_SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel16_n1;
                 break;
               case 2:
-                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel16[j] =  SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel16_n2;
+                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel16[j] =  NR_SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel16_n2;
                 break;
               default:
                 AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel16 choice: 1,2 !\n",
@@ -2013,28 +2217,28 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
 
             switch(Common_dci_Format2_3_monitoringPeriodicity){
               case 1:
-                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] =  SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n1;
+                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] =  NR_SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n1;
                 break;
               case 2:
-                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] =  SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n2;
+                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] =  NR_SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n2;
                 break;
               case 4:
-                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] =  SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n4;
+                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] =  NR_SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n4;
                 break;
               case 5:
-                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] =  SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n5;
+                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] =  NR_SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n5;
                 break;
               case 8:
-                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] =  SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n8;
+                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] =  NR_SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n8;
                 break;
               case 10:
-                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] =  SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n10;
+                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] =  NR_SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n10;
                 break;
               case 16:
-                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] =  SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n16;
+                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] =  NR_SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n16;
                 break;
               case 20:
-                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] =  SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n20;
+                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] =  NR_SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n20;
                 break;
               default:
                 AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for Common_dci_Format2_3_monitoringPeriodicity choice: 1,2,4,5,8,10,16,20 !\n",
@@ -2044,10 +2248,10 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
 
             switch(Common_dci_Format2_3_nrofPDCCH_Candidates){
               case 1:
-                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_nrofPDCCH_Candidates[j] =  SearchSpace__searchSpaceType__common__dci_Format2_3__nrofPDCCH_Candidates_n1;
+                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_nrofPDCCH_Candidates[j] =  NR_SearchSpace__searchSpaceType__common__dci_Format2_3__nrofPDCCH_Candidates_n1;
                 break;
               case 2:
-                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_nrofPDCCH_Candidates[j] =  SearchSpace__searchSpaceType__common__dci_Format2_3__nrofPDCCH_Candidates_n2;
+                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_nrofPDCCH_Candidates[j] =  NR_SearchSpace__searchSpaceType__common__dci_Format2_3__nrofPDCCH_Candidates_n2;
                 break;
               default:
                 AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for Common_dci_Format2_3_nrofPDCCH_Candidates choice: 1,2 !\n",
@@ -2056,9 +2260,9 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
             }
 
             if (strcmp(ue_Specific__dci_Formats , "formats0-0-And-1-0") == 0){
-              NRRRC_CONFIGURATION_REQ (msg_p).ue_Specific__dci_Formats[j] =  SearchSpace__searchSpaceType__ue_Specific__dci_Formats_formats0_0_And_1_0;
+              NRRRC_CONFIGURATION_REQ (msg_p).ue_Specific__dci_Formats[j] =  NR_SearchSpace__searchSpaceType__ue_Specific__dci_Formats_formats0_0_And_1_0;
             }else if (strcmp(ue_Specific__dci_Formats , "formats0-1-And-1-1") == 0){
-              NRRRC_CONFIGURATION_REQ (msg_p).ue_Specific__dci_Formats[j] =  SearchSpace__searchSpaceType__ue_Specific__dci_Formats_formats0_1_And_1_1;
+              NRRRC_CONFIGURATION_REQ (msg_p).ue_Specific__dci_Formats[j] =  NR_SearchSpace__searchSpaceType__ue_Specific__dci_Formats_formats0_1_And_1_1;
             }else {
               AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for ue_Specific__dci_Formats !\n",
                            RC.config_file_name, i, ue_Specific__dci_Formats);
@@ -2068,22 +2272,22 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
 
             switch(RateMatchPatternLTE_CRS_carrierBandwidthDL){
               case 6:
-                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_carrierBandwidthDL[j] =  RateMatchPatternLTE_CRS__carrierBandwidthDL_n6;
+                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_carrierBandwidthDL[j] =  NR_RateMatchPatternLTE_CRS__carrierBandwidthDL_n6;
                 break;
               case 15:
-                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_carrierBandwidthDL[j] =  RateMatchPatternLTE_CRS__carrierBandwidthDL_n15;
+                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_carrierBandwidthDL[j] =  NR_RateMatchPatternLTE_CRS__carrierBandwidthDL_n15;
                 break;
               case 25:
-                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_carrierBandwidthDL[j] =  RateMatchPatternLTE_CRS__carrierBandwidthDL_n25;
+                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_carrierBandwidthDL[j] =  NR_RateMatchPatternLTE_CRS__carrierBandwidthDL_n25;
                 break;
               case 50:
-                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_carrierBandwidthDL[j] =  RateMatchPatternLTE_CRS__carrierBandwidthDL_n50;
+                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_carrierBandwidthDL[j] =  NR_RateMatchPatternLTE_CRS__carrierBandwidthDL_n50;
                 break;
               case 75:
-                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_carrierBandwidthDL[j] =  RateMatchPatternLTE_CRS__carrierBandwidthDL_n75;
+                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_carrierBandwidthDL[j] =  NR_RateMatchPatternLTE_CRS__carrierBandwidthDL_n75;
                 break;
               case 100:
-                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_carrierBandwidthDL[j] =  RateMatchPatternLTE_CRS__carrierBandwidthDL_n100;
+                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_carrierBandwidthDL[j] =  NR_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",
@@ -2091,21 +2295,15 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
                 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;
+                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_nrofCRS_Ports[j] =  NR_RateMatchPatternLTE_CRS__nrofCRS_Ports_n1;
                 break;
               case 2:
-                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_nrofCRS_Ports[j] =  RateMatchPatternLTE_CRS__nrofCRS_Ports_n2;
+                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_nrofCRS_Ports[j] =  NR_RateMatchPatternLTE_CRS__nrofCRS_Ports_n2;
                 break;
               case 4:
-                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_nrofCRS_Ports[j] =  RateMatchPatternLTE_CRS__nrofCRS_Ports_n4;
+                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_nrofCRS_Ports[j] =  NR_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",
@@ -2115,22 +2313,22 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
 
             switch(RateMatchPatternLTE_CRS_v_Shift){
               case 0:
-                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_v_Shift[j] =  RateMatchPatternLTE_CRS__v_Shift_n0;
+                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_v_Shift[j] =  NR_RateMatchPatternLTE_CRS__v_Shift_n0;
                 break;
               case 1:
-                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_v_Shift[j] =  RateMatchPatternLTE_CRS__v_Shift_n1;
+                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_v_Shift[j] =  NR_RateMatchPatternLTE_CRS__v_Shift_n1;
                 break;
               case 2:
-                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_v_Shift[j] =  RateMatchPatternLTE_CRS__v_Shift_n2;
+                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_v_Shift[j] =  NR_RateMatchPatternLTE_CRS__v_Shift_n2;
                 break;
               case 3:
-                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_v_Shift[j] =  RateMatchPatternLTE_CRS__v_Shift_n3;
+                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_v_Shift[j] =  NR_RateMatchPatternLTE_CRS__v_Shift_n3;
                 break;
               case 4:
-                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_v_Shift[j] =  RateMatchPatternLTE_CRS__v_Shift_n4;
+                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_v_Shift[j] =  NR_RateMatchPatternLTE_CRS__v_Shift_n4;
                 break;
               case 5:
-                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_v_Shift[j] =  RateMatchPatternLTE_CRS__v_Shift_n5;
+                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_v_Shift[j] =  NR_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",
@@ -2140,22 +2338,22 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
 
             switch(RateMatchPatternLTE_CRS_radioframeAllocationPeriod){
               case 1:
-                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_radioframeAllocationPeriod[j] =  EUTRA_MBSFN_SubframeConfig__radioframeAllocationPeriod_n1;
+                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_radioframeAllocationPeriod[j] =  NR_EUTRA_MBSFN_SubframeConfig__radioframeAllocationPeriod_n1;
                 break;
               case 2:
-                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_radioframeAllocationPeriod[j] =  EUTRA_MBSFN_SubframeConfig__radioframeAllocationPeriod_n2;
+                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_radioframeAllocationPeriod[j] =  NR_EUTRA_MBSFN_SubframeConfig__radioframeAllocationPeriod_n2;
                 break;
               case 4:
-                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_radioframeAllocationPeriod[j] =  EUTRA_MBSFN_SubframeConfig__radioframeAllocationPeriod_n4;
+                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_radioframeAllocationPeriod[j] =  NR_EUTRA_MBSFN_SubframeConfig__radioframeAllocationPeriod_n4;
                 break;
               case 8:
-                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_radioframeAllocationPeriod[j] =  EUTRA_MBSFN_SubframeConfig__radioframeAllocationPeriod_n8;
+                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_radioframeAllocationPeriod[j] =  NR_EUTRA_MBSFN_SubframeConfig__radioframeAllocationPeriod_n8;
                 break;
               case 16:
-                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_radioframeAllocationPeriod[j] =  EUTRA_MBSFN_SubframeConfig__radioframeAllocationPeriod_n16;
+                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_radioframeAllocationPeriod[j] =  NR_EUTRA_MBSFN_SubframeConfig__radioframeAllocationPeriod_n16;
                 break;
               case 32:
-                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_radioframeAllocationPeriod[j] =  EUTRA_MBSFN_SubframeConfig__radioframeAllocationPeriod_n32;
+                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_radioframeAllocationPeriod[j] =  NR_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",
@@ -2170,9 +2368,9 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
             }
 
             if (strcmp(RateMatchPatternLTE_CRS_subframeAllocation_choice , "oneFrame") == 0){
-              NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_subframeAllocation_choice[j] =  EUTRA_MBSFN_SubframeConfig__subframeAllocation_PR_oneFrame;
+              NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_subframeAllocation_choice[j] =  NR_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;
+              NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_subframeAllocation_choice[j] =  NR_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);
@@ -2193,13 +2391,199 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
 
 }//End RCconfig_NRRRC function
 
-void NRRCConfig(void) {
+int RCconfig_NR_S1(MessageDef *msg_p, uint32_t i) {
+
+  int               j,k = 0;
+  int               gnb_id;
+  int32_t           my_int;
+  const char*       active_gnb[MAX_GNB];
+  char             *address                       = NULL;
+  char             *cidr                          = NULL;
+
+  // for no gcc warnings 
+
+  (void)  my_int;
+
+  memset((char*)active_gnb,0,MAX_GNB* sizeof(char*));
 
-  // paramlist_def_t MACRLCParamList = {CONFIG_STRING_MACRLC_LIST,NULL,0};
-  // paramlist_def_t L1ParamList = {CONFIG_STRING_L1_LIST,NULL,0};
-  // paramlist_def_t RUParamList = {CONFIG_STRING_RU_LIST,NULL,0};
   paramdef_t GNBSParams[] = GNBSPARAMS_DESC;
-  paramlist_def_t CCsParamList = {GNB_CONFIG_STRING_COMPONENT_CARRIERS,NULL,0};
+  paramdef_t GNBParams[]  = GNBPARAMS_DESC;
+  paramlist_def_t GNBParamList = {GNB_CONFIG_STRING_GNB_LIST,NULL,0};
+
+/* get global parameters, defined outside any section in the config file */
+  
+  config_get( GNBSParams,sizeof(GNBSParams)/sizeof(paramdef_t),NULL); 
+
+#if defined(ENABLE_ITTI) && defined(ENABLE_USE_MME)
+    if (strcasecmp( *(GNBSParams[GNB_ASN1_VERBOSITY_IDX].strptr), GNB_CONFIG_STRING_ASN1_VERBOSITY_NONE) == 0) {
+      asn_debug      = 0;
+      asn1_xer_print = 0;
+    } else if (strcasecmp( *(GNBSParams[GNB_ASN1_VERBOSITY_IDX].strptr), GNB_CONFIG_STRING_ASN1_VERBOSITY_INFO) == 0) {
+      asn_debug      = 1;
+      asn1_xer_print = 1;
+    } else if (strcasecmp(*(GNBSParams[GNB_ASN1_VERBOSITY_IDX].strptr) , GNB_CONFIG_STRING_ASN1_VERBOSITY_ANNOYING) == 0) {
+      asn_debug      = 1;
+      asn1_xer_print = 2;
+    } else {
+      asn_debug      = 0;
+      asn1_xer_print = 0;
+    }
+
+#endif
+
+    AssertFatal (i<GNBSParams[GNB_ACTIVE_GNBS_IDX].numelt,
+     "Failed to parse config file %s, %uth attribute %s \n",
+     RC.config_file_name, i, GNB_CONFIG_STRING_ACTIVE_GNBS);
+    
+  
+  if (GNBSParams[GNB_ACTIVE_GNBS_IDX].numelt>0) {
+    // Output a list of all gNBs.
+       config_getlist( &GNBParamList,GNBParams,sizeof(GNBParams)/sizeof(paramdef_t),NULL); 
+    
+    
+      
+      
+    
+    if (GNBParamList.numelt > 0) {
+      for (k = 0; k < GNBParamList.numelt; k++) {
+  if (GNBParamList.paramarray[k][GNB_GNB_ID_IDX].uptr == NULL) {
+    // Calculate a default gNB ID
+
+# if defined(ENABLE_USE_MME)
+    uint32_t hash;
+    
+    hash = s1ap_generate_eNB_id ();
+    gnb_id = k + (hash & 0xFFFF8);
+# else
+    gnb_id = k;
+# endif
+  } else {
+          gnb_id = *(GNBParamList.paramarray[k][GNB_GNB_ID_IDX].uptr);
+        }
+  
+  
+  // search if in active list
+  for (j=0; j < GNBSParams[GNB_ACTIVE_GNBS_IDX].numelt; j++) {
+    if (strcmp(GNBSParams[GNB_ACTIVE_GNBS_IDX].strlistptr[j], *(GNBParamList.paramarray[k][GNB_GNB_NAME_IDX].strptr)) == 0) {
+             paramdef_t S1Params[]  = S1PARAMS_DESC;
+             paramlist_def_t S1ParamList = {GNB_CONFIG_STRING_MME_IP_ADDRESS,NULL,0};
+
+             paramdef_t SCTPParams[]  = SCTPPARAMS_DESC;
+             paramdef_t NETParams[]  =  NETPARAMS_DESC;
+             char aprefix[MAX_OPTNAME_SIZE*2 + 8];
+      
+      S1AP_REGISTER_ENB_REQ (msg_p).eNB_id = gnb_id;
+      
+      if (strcmp(*(GNBParamList.paramarray[k][GNB_CELL_TYPE_IDX].strptr), "CELL_MACRO_GNB") == 0) {
+        S1AP_REGISTER_ENB_REQ (msg_p).cell_type = CELL_MACRO_ENB;
+      } else  if (strcmp(*(GNBParamList.paramarray[k][GNB_CELL_TYPE_IDX].strptr), "CELL_HOME_GNB") == 0) {
+        S1AP_REGISTER_ENB_REQ (msg_p).cell_type = CELL_HOME_ENB;
+      } else {
+        AssertFatal (0,
+         "Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for cell_type choice: CELL_MACRO_GNB or CELL_HOME_GNB !\n",
+         RC.config_file_name, i, *(GNBParamList.paramarray[k][GNB_CELL_TYPE_IDX].strptr));
+      }
+      
+      S1AP_REGISTER_ENB_REQ (msg_p).eNB_name         = strdup(*(GNBParamList.paramarray[k][GNB_GNB_NAME_IDX].strptr));
+      S1AP_REGISTER_ENB_REQ (msg_p).tac              = (uint16_t)atoi(*(GNBParamList.paramarray[k][GNB_TRACKING_AREA_CODE_IDX].strptr));
+      S1AP_REGISTER_ENB_REQ (msg_p).mcc              = (uint16_t)atoi(*(GNBParamList.paramarray[k][GNB_MOBILE_COUNTRY_CODE_IDX].strptr));
+      S1AP_REGISTER_ENB_REQ (msg_p).mnc              = (uint16_t)atoi(*(GNBParamList.paramarray[k][GNB_MOBILE_NETWORK_CODE_IDX].strptr));
+      S1AP_REGISTER_ENB_REQ (msg_p).mnc_digit_length = strlen(*(GNBParamList.paramarray[k][GNB_MOBILE_NETWORK_CODE_IDX].strptr));
+      S1AP_REGISTER_ENB_REQ (msg_p).default_drx      = 0;
+      AssertFatal((S1AP_REGISTER_ENB_REQ (msg_p).mnc_digit_length == 2) ||
+      (S1AP_REGISTER_ENB_REQ (msg_p).mnc_digit_length == 3),
+      "BAD MNC DIGIT LENGTH %d",
+      S1AP_REGISTER_ENB_REQ (msg_p).mnc_digit_length);
+      
+      sprintf(aprefix,"%s.[%i]",GNB_CONFIG_STRING_GNB_LIST,k);
+            config_getlist( &S1ParamList,S1Params,sizeof(S1Params)/sizeof(paramdef_t),aprefix); 
+      
+      S1AP_REGISTER_ENB_REQ (msg_p).nb_mme = 0;
+
+      for (int l = 0; l < S1ParamList.numelt; l++) {
+
+        S1AP_REGISTER_ENB_REQ (msg_p).nb_mme += 1;
+
+        strcpy(S1AP_REGISTER_ENB_REQ (msg_p).mme_ip_address[l].ipv4_address,*(S1ParamList.paramarray[l][GNB_MME_IPV4_ADDRESS_IDX].strptr));
+        strcpy(S1AP_REGISTER_ENB_REQ (msg_p).mme_ip_address[l].ipv6_address,*(S1ParamList.paramarray[l][GNB_MME_IPV6_ADDRESS_IDX].strptr));
+
+        if (strcmp(*(S1ParamList.paramarray[l][GNB_MME_IP_ADDRESS_ACTIVE_IDX].strptr), "yes") == 0) {
+#if defined(ENABLE_USE_MME)
+    EPC_MODE_ENABLED = 1;
+#endif
+        } 
+        if (strcmp(*(S1ParamList.paramarray[l][GNB_MME_IP_ADDRESS_PREFERENCE_IDX].strptr), "ipv4") == 0) {
+    S1AP_REGISTER_ENB_REQ (msg_p).mme_ip_address[j].ipv4 = 1;
+        } else if (strcmp(*(S1ParamList.paramarray[l][GNB_MME_IP_ADDRESS_PREFERENCE_IDX].strptr), "ipv6") == 0) {
+    S1AP_REGISTER_ENB_REQ (msg_p).mme_ip_address[j].ipv6 = 1;
+        } else if (strcmp(*(S1ParamList.paramarray[l][GNB_MME_IP_ADDRESS_PREFERENCE_IDX].strptr), "no") == 0) {
+    S1AP_REGISTER_ENB_REQ (msg_p).mme_ip_address[j].ipv4 = 1;
+    S1AP_REGISTER_ENB_REQ (msg_p).mme_ip_address[j].ipv6 = 1;
+        }
+      }
+
+    
+      // SCTP SETTING
+      S1AP_REGISTER_ENB_REQ (msg_p).sctp_out_streams = SCTP_OUT_STREAMS;
+      S1AP_REGISTER_ENB_REQ (msg_p).sctp_in_streams  = SCTP_IN_STREAMS;
+# if defined(ENABLE_USE_MME)
+      sprintf(aprefix,"%s.[%i].%s",GNB_CONFIG_STRING_GNB_LIST,k,GNB_CONFIG_STRING_SCTP_CONFIG);
+            config_get( SCTPParams,sizeof(SCTPParams)/sizeof(paramdef_t),aprefix); 
+            S1AP_REGISTER_ENB_REQ (msg_p).sctp_in_streams = (uint16_t)*(SCTPParams[GNB_SCTP_INSTREAMS_IDX].uptr);
+            S1AP_REGISTER_ENB_REQ (msg_p).sctp_out_streams = (uint16_t)*(SCTPParams[GNB_SCTP_OUTSTREAMS_IDX].uptr);
+#endif
+
+            sprintf(aprefix,"%s.[%i].%s",GNB_CONFIG_STRING_GNB_LIST,k,GNB_CONFIG_STRING_NETWORK_INTERFACES_CONFIG);
+      // NETWORK_INTERFACES
+            config_get( NETParams,sizeof(NETParams)/sizeof(paramdef_t),aprefix); 
+
+    //    S1AP_REGISTER_ENB_REQ (msg_p).enb_interface_name_for_S1U = strdup(enb_interface_name_for_S1U);
+    cidr = *(NETParams[GNB_IPV4_ADDRESS_FOR_S1_MME_IDX].strptr);
+    address = strtok(cidr, "/");
+
+    S1AP_REGISTER_ENB_REQ (msg_p).enb_ip_address.ipv6 = 0;
+    S1AP_REGISTER_ENB_REQ (msg_p).enb_ip_address.ipv4 = 1;
+
+    strcpy(S1AP_REGISTER_ENB_REQ (msg_p).enb_ip_address.ipv4_address, address);
+
+    /*
+    in_addr_t  ipv4_address;
+
+        if (address) {
+      IPV4_STR_ADDR_TO_INT_NWBO ( address, ipv4_address, "BAD IP ADDRESS FORMAT FOR eNB S1_U !\n" );
+    }
+    strcpy(S1AP_REGISTER_ENB_REQ (msg_p).enb_ip_address.ipv4_address, inet_ntoa(ipv4_address));
+    //    S1AP_REGISTER_ENB_REQ (msg_p).enb_port_for_S1U = enb_port_for_S1U;
+
+
+    S1AP_REGISTER_ENB_REQ (msg_p).enb_interface_name_for_S1_MME = strdup(enb_interface_name_for_S1_MME);
+    cidr = enb_ipv4_address_for_S1_MME;
+    address = strtok(cidr, "/");
+    
+    if (address) {
+      IPV4_STR_ADDR_TO_INT_NWBO ( address, S1AP_REGISTER_ENB_REQ(msg_p).enb_ipv4_address_for_S1_MME, "BAD IP ADDRESS FORMAT FOR eNB S1_MME !\n" );
+    }
+*/
+    
+
+
+
+      break;
+    }
+  }
+      }
+    }
+  }
+return 0;
+}
+
+void NRRCConfig(void) {
+
+  paramlist_def_t MACRLCParamList = {CONFIG_STRING_MACRLC_LIST,NULL,0};
+  paramlist_def_t L1ParamList     = {CONFIG_STRING_L1_LIST,NULL,0};
+  paramlist_def_t RUParamList     = {CONFIG_STRING_RU_LIST,NULL,0};
+  paramdef_t GNBSParams[]         = GNBSPARAMS_DESC;
+  paramlist_def_t CCsParamList    = {GNB_CONFIG_STRING_COMPONENT_CARRIERS,NULL,0};
   
   char aprefix[MAX_OPTNAME_SIZE*2 + 8];  
   
@@ -2213,15 +2597,15 @@ void NRRCConfig(void) {
   RC.nb_nr_inst = GNBSParams[GNB_ACTIVE_GNBS_IDX].numelt;
  
   if (RC.nb_nr_inst > 0) {
-    RC.nb_CC = (int *)malloc((1+RC.nb_nr_inst)*sizeof(int));
+    RC.nb_nr_CC = (int *)malloc((1+RC.nb_nr_inst)*sizeof(int));
     for (int i=0;i<RC.nb_nr_inst;i++) {
       sprintf(aprefix,"%s.[%i]",GNB_CONFIG_STRING_GNB_LIST,i);
       config_getlist( &CCsParamList,NULL,0, aprefix);
-      RC.nb_CC[i]   = CCsParamList.numelt;
+      RC.nb_nr_CC[i]   = CCsParamList.numelt;
     }
   }
 
-/*    
+
 	// Get num MACRLC instances
     config_getlist( &MACRLCParamList,NULL,0, NULL);
     RC.nb_macrlc_inst  = MACRLCParamList.numelt;
@@ -2232,7 +2616,7 @@ void NRRCConfig(void) {
     // Get num RU instances
     config_getlist( &RUParamList,NULL,0, NULL);  
     RC.nb_RU     = RUParamList.numelt; 
- */
+ 
  
 
 }
diff --git a/openair2/ENB_APP/gnb_config.h b/openair2/GNB_APP/gnb_config.h
similarity index 83%
rename from openair2/ENB_APP/gnb_config.h
rename to openair2/GNB_APP/gnb_config.h
index 179f7ac03d..4d816a7b32 100644
--- a/openair2/ENB_APP/gnb_config.h
+++ b/openair2/GNB_APP/gnb_config.h
@@ -37,17 +37,15 @@
 #include "commonDef.h"
 #include "platform_types.h"
 #include "platform_constants.h"
-#include "PHY/impl_defs_lte.h"
-#include "PHY/defs.h"
+#include "PHY/defs_eNB.h"
 #include "s1ap_messages_types.h"
-//#ifdef CMAKER
-//#include "SystemInformationBlockType2.h"
-//#include "rrc_messages_types.h"
-//#else
-//#include "RRC/LITE/MESSAGES/SystemInformationBlockType2.h"
-//#endif
+
+#ifdef CMAKER
+#include "rrc_messages_types.h"
+#endif
+
 #include "intertask_interface_types.h"
-#include "RRC/NR/defs_NR.h"
+#include "RRC/NR/nr_rrc_defs.h"
 
 #define IPV4_STR_ADDR_TO_INT_NWBO(AdDr_StR,NwBo,MeSsAgE ) do {\
             struct in_addr inp;\
@@ -64,7 +62,7 @@
  */
 
 // Hard to find a defined value for max enb...
-#define MAX_ENB 16
+#define MAX_GNB 16
 
 /*
 typedef struct mme_ip_address_s {
@@ -93,18 +91,18 @@ typedef struct ru_config_s {
   uint8_t   if_compress;
 } ru_config_t;
 */
-//extern void RCconfig_RU(void);
-//extern void RCconfig_flexran(void);
-//extern void RCconfig_L1(void);
-//extern void RCconfig_macrlc(void);
-//extern int  RCconfig_gtpu(void );
+extern void RCconfig_RU(void);
+extern void RCconfig_flexran(void);
+extern void RCconfig_NR_L1(void);
+extern void RCconfig_nr_macrlc(void);
+extern int  RCconfig_gtpu(void );
 extern void NRRCConfig(void);
 
 //void                          enb_config_display(void);
 //void                          ru_config_display(void);
 
-int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc);
-//int RCconfig_S1(MessageDef *msg_p, uint32_t i);
+int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc);
+int RCconfig_S1(MessageDef *msg_p, uint32_t i);
 
 #endif /* GNB_CONFIG_H_ */
 /** @} */
diff --git a/openair2/ENB_APP/gnb_paramdef.h b/openair2/GNB_APP/gnb_paramdef.h
similarity index 71%
rename from openair2/ENB_APP/gnb_paramdef.h
rename to openair2/GNB_APP/gnb_paramdef.h
index 96a18fa2ea..45b45e744a 100644
--- a/openair2/ENB_APP/gnb_paramdef.h
+++ b/openair2/GNB_APP/gnb_paramdef.h
@@ -31,7 +31,7 @@
  */
 
 #include "common/config/config_paramdesc.h"
-#include "NRRRC_paramsvalues.h"
+#include "NR_RRC_paramsvalues.h"
 
 
 #define GNB_CONFIG_STRING_CC_NODE_FUNCTION        "node_function"
@@ -401,14 +401,170 @@ typedef enum {
 #define GNB_CONFIG_STRING_RATEMATCHPATTERNLTE_CRS_RADIOFRAMEALLOCATIONOFFSET           "RateMatchPatternLTE_CRS_radioframeAllocationOffset"
 #define GNB_CONFIG_STRING_RATEMATCHPATTERNLTE_CRS_SUBFRAMEALLOCATION_CHOICE            "RateMatchPatternLTE_CRS_subframeAllocation_choice"
 
+/* init for checkedparam_t structure */
+
+#define NRCCPARAMS_CHECK                 {                                     \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+             { .s5= {NULL }} ,                 \
+}
+
+
 /*---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
 /*                                                                             component carriers configuration parameters                                                                                                                           */
 /*   optname                                                                        helpstr   paramflags    XXXptr                                                                  defXXXval                    type         numelt  checked_param  */
 /*---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
 #define NRCCPARAMS_DESC { \
 {GNB_CONFIG_STRING_FRAME_TYPE,                                                       NULL,        0,        strptr:&frame_type,                                                     defstrval:"FDD",           TYPE_STRING,     0},  \
-{GNB_CONFIG_STRING_DL_prefix_type,                                                   NULL,        0,        strptr:&DL_prefix_type,                                                 defstrval:"NORMAL",        TYPE_STRING,     0},  \
-{GNB_CONFIG_STRING_UL_prefix_type,                                                   NULL,        0,        strptr:&UL_prefix_type,                                                 defstrval:"NORMAL",        TYPE_STRING,     0},  \
+{GNB_CONFIG_STRING_DL_PREFIX_TYPE,                                                   NULL,        0,        strptr:&DL_prefix_type,                                                 defstrval:"NORMAL",        TYPE_STRING,     0},  \
+{GNB_CONFIG_STRING_UL_PREFIX_TYPE,                                                   NULL,        0,        strptr:&UL_prefix_type,                                                 defstrval:"NORMAL",        TYPE_STRING,     0},  \
 {GNB_CONFIG_STRING_EUTRA_BAND,                                                       NULL,        0,        iptr:&eutra_band,                                                       defintval:7,               TYPE_UINT,       0},  \
 {GNB_CONFIG_STRING_DOWNLINK_FREQUENCY,                                               NULL,        0,        i64ptr:(int64_t *)&downlink_frequency,                                  defint64val:2680000000,    TYPE_UINT64,     0},  \
 {GNB_CONFIG_STRING_UPLINK_FREQUENCY_OFFSET,                                          NULL,        0,        iptr:&uplink_frequency_offset,                                          defintval:-120000000,      TYPE_INT,        0},  \
@@ -553,153 +709,355 @@ typedef enum {
 
 
 /* component carries configuration parameters name */
-#define ENB_CONFIG_FRAME_TYPE_IDX                             0             
-#define ENB_CONFIG_DL_PREFIX_TYPE_IDX                            1
-#define ENB_CONFIG_UL_PREFIX_TYPE_IDX                            1
-#define ENB_CONFIG_EUTRA_BAND_IDX                             2
-#define ENB_CONFIG_DOWNLINK_FREQUENCY_IDX                     3
-#define ENB_CONFIG_UPLINK_FREQUENCY_OFFSET_IDX                4
-#define ENB_CONFIG_NID_CELL_IDX                               5
-#define ENB_CONFIG_N_RB_DL_IDX                                6
-#define GNB_CONFIG_NB_ANT_PORTS_IDX                                                 
-#define GNB_CONFIG_NB_ANT_TX_IDX                                                    
-#define GNB_CONFIG_NB_ANT_RX_IDX                                                   
-#define GNB_CONFIG_TX_GAIN_IDX                                                      
-#define GNB_CONFIG_RX_GAIN_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_PDCCH_CONFIGSIB1_IDX
-#define GNB_CONFIG_SIB1_FREQUENCYOFFSETSSB_IDX
-#define GNB_CONFIG_SIB1_SSB_PERIODICITYSERVINGCELL_IDX
-#define GNB_CONFIG_SIB1_SS_PBCH_BLOCKPOWER_IDX                                                   
-#define GNB_CONFIG_ABSOLUTEFREQUENCYSSB_IDX                                         
-#define GNB_CONFIG_SSB_SUBCARRIEROFFSET_IDX                                         
-#define GNB_CONFIG_DL_FREQBANDINDICATORNR_IDX                                       
-#define GNB_CONFIG_DL_ABSOLUTEFREQUENCYPOINTA_IDX                                   
-#define GNB_CONFIG_DL_OFFSETTOCARRIER_IDX                                           
-#define GNB_CONFIG_DL_SUBCARRIERSPACING_IDX                                         
-#define GNB_CONFIG_DL_SCS_SPECIFICCARRIER_K0_IDX                                    
-#define GNB_CONFIG_DL_CARRIERBANDWIDTH_IDX                                          
-#define GNB_CONFIG_DL_LOCATIONANDBANDWIDTH_IDX
-#define GNB_CONFIG_DL_BWP_SUBCARRIERSPACING_IDX
-#define GNB_CONFIG_DL_BWP_PREFIX_TYPE_IDX                                      
-#define GNB_CONFIG_UL_FREQBANDINDICATORNR_IDX                                       
-#define GNB_CONFIG_UL_ABSOLUTEFREQUENCYPOINTA_IDX 
-#define GNB_CONFIG_UL_ADDITIONALSPECTRUMEMISSION_IDX;                                  
-#define GNB_CONFIG_UL_P_MAX_IDX                                        
-#define GNB_CONFIG_UL_FREQUENCYSHIFT7P5KHZ_IDX                                         
-#define GNB_CONFIG_UL_OFFSETTOCARRIER_IDX                                           
-#define GNB_CONFIG_UL_SCS_SUBCARRIERSPACING_IDX                                         
-#define GNB_CONFIG_UL_SCS_SPECIFICCARRIER_K0_IDX                                    
-#define GNB_CONFIG_UL_CARRIERBANDWIDTH_IDX                                          
-#define GNB_CONFIG_UL_LOCATIONANDBANDWIDTH_IDX
-#define GNB_CONFIG_UL_BWP_SUBCARRIERSPACING_IDX
-#define GNB_CONFIG_UL_BWP_PREFIX_TYPE_IDX
-#define GNB_CONFIG_SUBCARRIERSPACINGCOMMON_IDX
-#define GNB_CONFIG_PDCCH_CONFIGSIB1_IDX
-#define GNB_CONFIG_FREQUENCYOFFSETSSB_IDX
-#define GNB_CONFIG_SERVINGCELLCONFIGCOMMON_SSB_POSITIONSINBURST_PR_IDX                                      
-#define GNB_CONFIG_SERVINGCELLCONFIGCOMMON_SSB_PERIODICITYSERVINGCELL_IDX                                  
-#define GNB_CONFIG_SERVINGCELLCONFIGCOMMON_DMRS_TYPEA_POSITION_IDX                                          
-#define GNB_CONFIG_NIA_SUBCARRIERSPACING_IDX                                        
-#define GNB_CONFIG_SERVINGCELLCONFIGCOMMON_SS_PBCH_BLOCKPOWER_IDX                                           
-#define GNB_CONFIG_REFERENCESUBCARRIERSPACING_IDX                                   
-#define GNB_CONFIG_DL_UL_TRANSMISSIONPERIODICITY_IDX                                
-#define GNB_CONFIG_NROFDOWNLINKSLOTS_IDX                                            
-#define GNB_CONFIG_NROFDOWNLINKSYMBOLS_IDX                                          
-#define GNB_CONFIG_NROFUPLINKSLOTS_IDX                                              
-#define GNB_CONFIG_NROFUPLINKSYMBOLS_IDX                                            
-#define GNB_CONFIG_RACH_TOTALNUMBEROFRA_PREAMBLES_IDX                               
-#define GNB_CONFIG_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_CHOICE_IDX        
-#define GNB_CONFIG_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_ONEEIGHTH_IDX     
-#define GNB_CONFIG_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_ONEFOURTH_IDX     
-#define GNB_CONFIG_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_ONEHALF_IDX       
-#define GNB_CONFIG_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_ONE_IDX         
-#define GNB_CONFIG_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_TWO_IDX           
-#define GNB_CONFIG_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_FOUR_IDX          
-#define GNB_CONFIG_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_EIGHT_IDX         
-#define GNB_CONFIG_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_SIXTEEN_IDX       
-#define GNB_CONFIG_RACH_GROUPBCONFIGURED_IDX                                        
-#define GNB_CONFIG_RACH_RA_MSG3SIZEGROUPA_IDX                                       
-#define GNB_CONFIG_RACH_MESSAGEPOWEROFFSETGROUPB_IDX                                
-#define GNB_CONFIG_RACH_NUMBEROFRA_PREAMBLESGROUPA_IDX                              
-#define GNB_CONFIG_RACH_RA_CONTENTIONRESOLUTIONTIMER_IDX                           
-#define GNB_CONFIG_RSRP_THRESHOLDSSB_IDX                                            
-#define GNB_CONFIG_RSRP_THRESHOLDSSB_SUL_IDX                                        
-#define GNB_CONFIG_PRACH_ROOTSEQUENCEINDEX_CHOICE_IDX                               
-#define GNB_CONFIG_PRACH_ROOTSEQUENCEINDEX_L839_IDX                                
-#define GNB_CONFIG_PRACH_ROOTSEQUENCEINDEX_L139_IDX                                 
-#define GNB_CONFIG_PRACH_MSG1_SUBCARRIERSPACING_IDX                                
-#define GNB_CONFIG_RESTRICTEDSETCONFIG_IDX                                          
-#define GNB_CONFIG_MSG3_TRANSFORMPRECODING_IDX                                      
-#define GNB_CONFIG_PRACH_CONFIGURATIONINDEX_IDX                                    
-#define GNB_CONFIG_PRACH_MSG1_FDM_IDX                                              
-#define GNB_CONFIG_PRACH_MSG1_FREQUENCYSTART_IDX                                    
-#define GNB_CONFIG_ZEROCORRELATIONZONECONFIG_IDX                                    
-#define GNB_CONFIG_PREAMBLERECEIVEDTARGETPOWER_IDX                                  
-#define GNB_CONFIG_PREAMBLETRANSMAX_IDX                                            
-#define GNB_CONFIG_POWERRAMPINGSTEP_IDX                                             
-#define GNB_CONFIG_RA_RESPONSEWINDOW_IDX                                            
-#define GNB_CONFIG_GROUPHOPPINGENABLEDTRANSFORMPRECODING_IDX                        
-#define GNB_CONFIG_MSG3_DELTAPREAMBLE_IDX                                          
-#define GNB_CONFIG_P0_NOMINALWITHGRANT_IDX                                          
-#define GNB_CONFIG_PUSCH_TIMEDOMAINRESOURCEALLOCATION_K2_IDX                        
-#define GNB_CONFIG_PUSCH_TIMEDOMAINRESOURCEALLOCATION_MAPPINGTYPE_IDX               
-#define GNB_CONFIG_PUCCH_GROUPHOPPING_IDX                                           
-#define GNB_CONFIG_P0_NOMINAL_IDX                                                 
-#define GNB_CONFIG_PDSCH_TIMEDOMAINRESOURCEALLOCATION_K0_IDX                        
-#define GNB_CONFIG_PDSCH_TIMEDOMAINRESOURCEALLOCATION_MAPPINGTYPE_IDX               
-#define GNB_CONFIG_RATEMATCHPATTERNID_IDX                                           
-#define GNB_CONFIG_RATEMATCHPATTERN_PATTERNTYPE_IDX                                 
-#define GNB_CONFIG_SYMBOLSINRESOURCEBLOCK_IDX                                       
-#define GNB_CONFIG_PERIODICITYANDPATTERN_IDX                                        
-#define GNB_CONFIG_RATEMATCHPATTERN_CONTROLRESOURCESET_IDX                          
-#define GNB_CONFIG_RATEMATCHPATTERN_SUBCARRIERSPACING_IDX                           
-#define GNB_CONFIG_RATEMATCHPATTERN_MODE_IDX                                        
-#define GNB_CONFIG_SEARCHSPACESIB1_IDX                                              
-#define GNB_CONFIG_SEARCHSPACEOTHERSYSTEMINFORMATION_IDX                            
-#define GNB_CONFIG_PAGINGSEARCHSPACE_IDX                                            
-#define GNB_CONFIG_RA_SEARCHSPACE_IDX                                               
-#define GNB_CONFIG_RACH_RA_CONTROLRESOURCESET_IDX                                  
-#define GNB_CONFIG_PDCCH_COMMON_CONTROLRESOURCESETID_IDX                            
-#define GNB_CONFIG_PDCCH_COMMON_CONTROLRESOURCESET_DURATION_IDX                     
-#define GNB_CONFIG_PDCCH_CCE_REG_MAPPINGTYPE_IDX                                    
-#define GNB_CONFIG_PDCCH_REG_BUNDLESIZE_IDX                                        
-#define GNB_CONFIG_PDCCH_INTERLEAVERSIZE_IDX                                        
-#define GNB_CONFIG_PDCCH_SHIFTINDEX_IDX                                             
-#define GNB_CONFIG_PDCCH_PRECODERGRANULARITY_IDX
-#define GNB_CONFIG_PDCCH_TCI_STATEID_IDX
-#define GNB_CONFIG_TCI_PRESENTINDCI_IDX                                             
-#define GNB_CONFIG_SEARCHSPACEID_IDX                                                
-#define GNB_CONFIG_COMMONSEARCHSPACES_CONTROLRESOURCESETID_IDX                      
-#define GNB_CONFIG_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_CHOICE_IDX        
-#define GNB_CONFIG_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL1_IDX           
-#define GNB_CONFIG_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL2_IDX           
-#define GNB_CONFIG_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL4_IDX           
-#define GNB_CONFIG_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL5_IDX           
-#define GNB_CONFIG_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL8_IDX           
-#define GNB_CONFIG_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL10_IDX         
-#define GNB_CONFIG_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL16_IDX          
-#define GNB_CONFIG_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL20_IDX          
-#define GNB_CONFIG_SEARCHSPACE_NROFCANDIDATES_AGGREGATIONLEVEL1_IDX                 
-#define GNB_CONFIG_SEARCHSPACE_NROFCANDIDATES_AGGREGATIONLEVEL2_IDX                 
-#define GNB_CONFIG_SEARCHSPACE_NROFCANDIDATES_AGGREGATIONLEVEL4_IDX                 
-#define GNB_CONFIG_SEARCHSPACE_NROFCANDIDATES_AGGREGATIONLEVEL8_IDX                 
-#define GNB_CONFIG_SEARCHSPACE_NROFCANDIDATES_AGGREGATIONLEVEL16_IDX                
-#define GNB_CONFIG_SEARCHSPACE_SEARCHSPACETYPE_IDX                                  
-#define GNB_CONFIG_COMMON_DCI_FORMAT2_0_NROFCANDIDATES_SFI_AGGREGATIONLEVEL1_IDX   
-#define GNB_CONFIG_COMMON_DCI_FORMAT2_0_NROFCANDIDATES_SFI_AGGREGATIONLEVEL2_IDX   
-#define GNB_CONFIG_COMMON_DCI_FORMAT2_0_NROFCANDIDATES_SFI_AGGREGATIONLEVEL4_IDX    
-#define GNB_CONFIG_COMMON_DCI_FORMAT2_0_NROFCANDIDATES_SFI_AGGREGATIONLEVEL8_IDX    
-#define GNB_CONFIG_COMMON_DCI_FORMAT2_0_NROFCANDIDATES_SFI_AGGREGATIONLEVEL16_IDX   
-#define GNB_CONFIG_COMMON_DCI_FORMAT2_3_MONITORINGPERIODICITY_IDX                   
-#define GNB_CONFIG_COMMON_DCI_FORMAT2_3_NROFPDCCH_CANDIDATES_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
+#define GNB_CONFIG_FRAME_TYPE_IDX                                                   0
+#define GNB_CONFIG_DL_PREFIX_TYPE_IDX                                               1
+#define GNB_CONFIG_UL_PREFIX_TYPE_IDX                                               2
+#define GNB_CONFIG_EUTRA_BAND_IDX                                                   3
+#define GNB_CONFIG_DOWNLINK_FREQUENCY_IDX                                           4
+#define GNB_CONFIG_UPLINK_FREQUENCY_OFFSET_IDX                                      5
+#define GNB_CONFIG_NID_CELL_IDX                                                     6
+#define GNB_CONFIG_N_RB_DL_IDX                                                      7
+#define GNB_CONFIG_NB_ANT_PORTS_IDX                                                 8
+#define GNB_CONFIG_NB_ANT_TX_IDX                                                    9
+#define GNB_CONFIG_NB_ANT_RX_IDX                                                    10
+#define GNB_CONFIG_TX_GAIN_IDX                                                      11
+#define GNB_CONFIG_RX_GAIN_IDX                                                      12
+#define GNB_CONFIG_MIB_SUBCARRIERSPACINGCOMMON_IDX                                  13
+#define GNB_CONFIG_MIB_SSB_SUBCARRIEROFFSET_IDX                                     14
+#define GNB_CONFIG_MIB_DMRS_TYPEA_POSITION_IDX                                      15
+#define GNB_CONFIG_PDCCH_CONFIGSIB1_IDX                                             16
+#define GNB_CONFIG_SIB1_FREQUENCYOFFSETSSB_IDX                                      17
+#define GNB_CONFIG_SIB1_SSB_PERIODICITYSERVINGCELL_IDX                              18
+#define GNB_CONFIG_SIB1_SS_PBCH_BLOCKPOWER_IDX                                      19
+#define GNB_CONFIG_ABSOLUTEFREQUENCYSSB_IDX                                         20
+#define GNB_CONFIG_SSB_SUBCARRIEROFFSET_IDX                                         21
+#define GNB_CONFIG_DL_FREQBANDINDICATORNR_IDX                                       22
+#define GNB_CONFIG_DL_ABSOLUTEFREQUENCYPOINTA_IDX                                   23
+#define GNB_CONFIG_DL_OFFSETTOCARRIER_IDX                                           24
+#define GNB_CONFIG_DL_SUBCARRIERSPACING_IDX                                         25
+#define GNB_CONFIG_DL_SCS_SPECIFICCARRIER_K0_IDX                                    26
+#define GNB_CONFIG_DL_CARRIERBANDWIDTH_IDX                                          27
+#define GNB_CONFIG_DL_LOCATIONANDBANDWIDTH_IDX                                      28
+#define GNB_CONFIG_DL_BWP_SUBCARRIERSPACING_IDX                                     29
+#define GNB_CONFIG_DL_BWP_PREFIX_TYPE_IDX                                           30
+#define GNB_CONFIG_UL_FREQBANDINDICATORNR_IDX                                       31
+#define GNB_CONFIG_UL_ABSOLUTEFREQUENCYPOINTA_IDX                                   32
+#define GNB_CONFIG_UL_ADDITIONALSPECTRUMEMISSION_IDX;                               33
+#define GNB_CONFIG_UL_P_MAX_IDX                                                     34
+#define GNB_CONFIG_UL_FREQUENCYSHIFT7P5KHZ_IDX                                      35
+#define GNB_CONFIG_UL_OFFSETTOCARRIER_IDX                                           36
+#define GNB_CONFIG_UL_SCS_SUBCARRIERSPACING_IDX                                     37
+#define GNB_CONFIG_UL_SCS_SPECIFICCARRIER_K0_IDX                                    38
+#define GNB_CONFIG_UL_CARRIERBANDWIDTH_IDX                                          39
+#define GNB_CONFIG_UL_LOCATIONANDBANDWIDTH_IDX                                      41
+#define GNB_CONFIG_UL_BWP_SUBCARRIERSPACING_IDX                                     42
+#define GNB_CONFIG_UL_BWP_PREFIX_TYPE_IDX                                           43
+#define GNB_CONFIG_SUBCARRIERSPACINGCOMMON_IDX                                      44
+#define GNB_CONFIG_PDCCH_CONFIGSIB1_IDX                                             45
+#define GNB_CONFIG_FREQUENCYOFFSETSSB_IDX                                           46
+#define GNB_CONFIG_SERVINGCELLCONFIGCOMMON_SSB_POSITIONSINBURST_PR_IDX              47
+#define GNB_CONFIG_SERVINGCELLCONFIGCOMMON_SSB_PERIODICITYSERVINGCELL_IDX           48
+#define GNB_CONFIG_SERVINGCELLCONFIGCOMMON_DMRS_TYPEA_POSITION_IDX                  49
+#define GNB_CONFIG_NIA_SUBCARRIERSPACING_IDX                                        50
+#define GNB_CONFIG_SERVINGCELLCONFIGCOMMON_SS_PBCH_BLOCKPOWER_IDX                   51
+#define GNB_CONFIG_REFERENCESUBCARRIERSPACING_IDX                                   52
+#define GNB_CONFIG_DL_UL_TRANSMISSIONPERIODICITY_IDX                                53
+#define GNB_CONFIG_NROFDOWNLINKSLOTS_IDX                                            54
+#define GNB_CONFIG_NROFDOWNLINKSYMBOLS_IDX                                          55
+#define GNB_CONFIG_NROFUPLINKSLOTS_IDX                                              56
+#define GNB_CONFIG_NROFUPLINKSYMBOLS_IDX                                            57
+#define GNB_CONFIG_RACH_TOTALNUMBEROFRA_PREAMBLES_IDX                               58
+#define GNB_CONFIG_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_CHOICE_IDX        59
+#define GNB_CONFIG_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_ONEEIGHTH_IDX     60
+#define GNB_CONFIG_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_ONEFOURTH_IDX     61
+#define GNB_CONFIG_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_ONEHALF_IDX       62
+#define GNB_CONFIG_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_ONE_IDX           63
+#define GNB_CONFIG_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_TWO_IDX           64
+#define GNB_CONFIG_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_FOUR_IDX          65
+#define GNB_CONFIG_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_EIGHT_IDX         66
+#define GNB_CONFIG_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_SIXTEEN_IDX       67
+#define GNB_CONFIG_RACH_GROUPBCONFIGURED_IDX                                        68
+#define GNB_CONFIG_RACH_RA_MSG3SIZEGROUPA_IDX                                       69
+#define GNB_CONFIG_RACH_MESSAGEPOWEROFFSETGROUPB_IDX                                70
+#define GNB_CONFIG_RACH_NUMBEROFRA_PREAMBLESGROUPA_IDX                              71
+#define GNB_CONFIG_RACH_RA_CONTENTIONRESOLUTIONTIMER_IDX                            72
+#define GNB_CONFIG_RSRP_THRESHOLDSSB_IDX                                            73
+#define GNB_CONFIG_RSRP_THRESHOLDSSB_SUL_IDX                                        74
+#define GNB_CONFIG_PRACH_ROOTSEQUENCEINDEX_CHOICE_IDX                               75
+#define GNB_CONFIG_PRACH_ROOTSEQUENCEINDEX_L839_IDX                                 76
+#define GNB_CONFIG_PRACH_ROOTSEQUENCEINDEX_L139_IDX                                 77
+#define GNB_CONFIG_PRACH_MSG1_SUBCARRIERSPACING_IDX                                 78
+#define GNB_CONFIG_RESTRICTEDSETCONFIG_IDX                                          79
+#define GNB_CONFIG_MSG3_TRANSFORMPRECODING_IDX                                      80
+#define GNB_CONFIG_PRACH_CONFIGURATIONINDEX_IDX                                     81
+#define GNB_CONFIG_PRACH_MSG1_FDM_IDX                                               82
+#define GNB_CONFIG_PRACH_MSG1_FREQUENCYSTART_IDX                                    83
+#define GNB_CONFIG_ZEROCORRELATIONZONECONFIG_IDX                                    84
+#define GNB_CONFIG_PREAMBLERECEIVEDTARGETPOWER_IDX                                  85
+#define GNB_CONFIG_PREAMBLETRANSMAX_IDX                                             86
+#define GNB_CONFIG_POWERRAMPINGSTEP_IDX                                             87
+#define GNB_CONFIG_RA_RESPONSEWINDOW_IDX                                            88
+#define GNB_CONFIG_GROUPHOPPINGENABLEDTRANSFORMPRECODING_IDX                        89
+#define GNB_CONFIG_MSG3_DELTAPREAMBLE_IDX                                           90
+#define GNB_CONFIG_P0_NOMINALWITHGRANT_IDX                                          91
+#define GNB_CONFIG_PUSCH_TIMEDOMAINRESOURCEALLOCATION_K2_IDX                        92
+#define GNB_CONFIG_PUSCH_TIMEDOMAINRESOURCEALLOCATION_MAPPINGTYPE_IDX               93
+#define GNB_CONFIG_PUCCH_GROUPHOPPING_IDX                                           94
+#define GNB_CONFIG_P0_NOMINAL_IDX                                                   95
+#define GNB_CONFIG_PDSCH_TIMEDOMAINRESOURCEALLOCATION_K0_IDX                        96
+#define GNB_CONFIG_PDSCH_TIMEDOMAINRESOURCEALLOCATION_MAPPINGTYPE_IDX               97
+#define GNB_CONFIG_RATEMATCHPATTERNID_IDX                                           98
+#define GNB_CONFIG_RATEMATCHPATTERN_PATTERNTYPE_IDX                                 99
+#define GNB_CONFIG_SYMBOLSINRESOURCEBLOCK_IDX                                       100
+#define GNB_CONFIG_PERIODICITYANDPATTERN_IDX                                        101
+#define GNB_CONFIG_RATEMATCHPATTERN_CONTROLRESOURCESET_IDX                          102
+#define GNB_CONFIG_RATEMATCHPATTERN_SUBCARRIERSPACING_IDX                           103
+#define GNB_CONFIG_RATEMATCHPATTERN_MODE_IDX                                        104
+#define GNB_CONFIG_SEARCHSPACESIB1_IDX                                              105
+#define GNB_CONFIG_SEARCHSPACEOTHERSYSTEMINFORMATION_IDX                            106
+#define GNB_CONFIG_PAGINGSEARCHSPACE_IDX                                            107
+#define GNB_CONFIG_RA_SEARCHSPACE_IDX                                               108
+#define GNB_CONFIG_RACH_RA_CONTROLRESOURCESET_IDX                                   109
+#define GNB_CONFIG_PDCCH_COMMON_CONTROLRESOURCESETID_IDX                            110
+#define GNB_CONFIG_PDCCH_COMMON_CONTROLRESOURCESET_DURATION_IDX                     111
+#define GNB_CONFIG_PDCCH_CCE_REG_MAPPINGTYPE_IDX                                    112
+#define GNB_CONFIG_PDCCH_REG_BUNDLESIZE_IDX                                         113
+#define GNB_CONFIG_PDCCH_INTERLEAVERSIZE_IDX                                        114
+#define GNB_CONFIG_PDCCH_SHIFTINDEX_IDX                                             115
+#define GNB_CONFIG_PDCCH_PRECODERGRANULARITY_IDX                                    116
+#define GNB_CONFIG_PDCCH_TCI_STATEID_IDX                                            117
+#define GNB_CONFIG_TCI_PRESENTINDCI_IDX                                             118
+#define GNB_CONFIG_SEARCHSPACEID_IDX                                                119
+#define GNB_CONFIG_COMMONSEARCHSPACES_CONTROLRESOURCESETID_IDX                      120
+#define GNB_CONFIG_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_CHOICE_IDX        121
+#define GNB_CONFIG_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL1_IDX           122
+#define GNB_CONFIG_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL2_IDX           123
+#define GNB_CONFIG_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL4_IDX           124
+#define GNB_CONFIG_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL5_IDX           125
+#define GNB_CONFIG_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL8_IDX           126
+#define GNB_CONFIG_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL10_IDX          127
+#define GNB_CONFIG_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL16_IDX          128
+#define GNB_CONFIG_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL20_IDX          129
+#define GNB_CONFIG_SEARCHSPACE_NROFCANDIDATES_AGGREGATIONLEVEL1_IDX                 130
+#define GNB_CONFIG_SEARCHSPACE_NROFCANDIDATES_AGGREGATIONLEVEL2_IDX                 131
+#define GNB_CONFIG_SEARCHSPACE_NROFCANDIDATES_AGGREGATIONLEVEL4_IDX                 132
+#define GNB_CONFIG_SEARCHSPACE_NROFCANDIDATES_AGGREGATIONLEVEL8_IDX                 133
+#define GNB_CONFIG_SEARCHSPACE_NROFCANDIDATES_AGGREGATIONLEVEL16_IDX                134
+#define GNB_CONFIG_SEARCHSPACE_SEARCHSPACETYPE_IDX                                  135
+#define GNB_CONFIG_COMMON_DCI_FORMAT2_0_NROFCANDIDATES_SFI_AGGREGATIONLEVEL1_IDX    136
+#define GNB_CONFIG_COMMON_DCI_FORMAT2_0_NROFCANDIDATES_SFI_AGGREGATIONLEVEL2_IDX    137
+#define GNB_CONFIG_COMMON_DCI_FORMAT2_0_NROFCANDIDATES_SFI_AGGREGATIONLEVEL4_IDX    138
+#define GNB_CONFIG_COMMON_DCI_FORMAT2_0_NROFCANDIDATES_SFI_AGGREGATIONLEVEL8_IDX    139
+#define GNB_CONFIG_COMMON_DCI_FORMAT2_0_NROFCANDIDATES_SFI_AGGREGATIONLEVEL16_IDX   140
+#define GNB_CONFIG_COMMON_DCI_FORMAT2_3_MONITORINGPERIODICITY_IDX                   141
+#define GNB_CONFIG_COMMON_DCI_FORMAT2_3_NROFPDCCH_CANDIDATES_IDX                    142
+#define GNB_CONFIG_UE_SPECIFIC__DCI_FORMATS_IDX                                     143
+#define GNB_CONFIG_RATEMATCHPATTERNLTE_CRS_CARRIERFREQDL_IDX                        144
+#define GNB_CONFIG_RATEMATCHPATTERNLTE_CRS_CARRIERBANDWIDTHDL_IDX                   145
+#define GNB_CONFIG_RATEMATCHPATTERNLTE_CRS_NROFCRS_PORTS_IDX                        146
+#define GNB_CONFIG_RATEMATCHPATTERNLTE_CRS_V_SHIFT_IDX                              147
+#define GNB_CONFIG_RATEMATCHPATTERNLTE_CRS_RADIOFRAMEALLOCATIONPERIOD_IDX           148
+#define GNB_CONFIG_RATEMATCHPATTERNLTE_CRS_RADIOFRAMEALLOCATIONOFFSET_IDX           149
+#define GNB_CONFIG_RATEMATCHPATTERNLTE_CRS_SUBFRAMEALLOCATION_CHOICE_IDX            150
+
+
+/*------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
+/*------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
+/* SRB1 configuration parameters section name */
+#define GNB_CONFIG_STRING_SRB1                                          "srb1_parameters"
+
+/* SRB1 configuration parameters names   */
+#define GNB_CONFIG_STRING_SRB1_TIMER_POLL_RETRANSMIT                    "timer_poll_retransmit"
+#define GNB_CONFIG_STRING_SRB1_TIMER_REORDERING                         "timer_reordering"
+#define GNB_CONFIG_STRING_SRB1_TIMER_STATUS_PROHIBIT                    "timer_status_prohibit"
+#define GNB_CONFIG_STRING_SRB1_POLL_PDU                                 "poll_pdu"
+#define GNB_CONFIG_STRING_SRB1_POLL_BYTE                                "poll_byte"
+#define GNB_CONFIG_STRING_SRB1_MAX_RETX_THRESHOLD                       "max_retx_threshold"
+
+/*-----------------------------------------------------------------------------------------------------------------------------------------------------------*/
+/*                                            SRB1 configuration parameters                                                                                  */
+/*   optname                                          helpstr   paramflags    XXXptr                             defXXXval         type           numelt     */
+/*-----------------------------------------------------------------------------------------------------------------------------------------------------------*/
+#define SRB1PARAMS_DESC {                                                                                                \
+{GNB_CONFIG_STRING_SRB1_TIMER_POLL_RETRANSMIT,         NULL,   0,            iptr:&srb1_timer_poll_retransmit,   defintval:80,     TYPE_UINT,      0},       \
+{GNB_CONFIG_STRING_SRB1_TIMER_REORDERING,              NULL,   0,            iptr:&srb1_timer_reordering,        defintval:35,     TYPE_UINT,      0},       \
+{GNB_CONFIG_STRING_SRB1_TIMER_STATUS_PROHIBIT,         NULL,   0,            iptr:&srb1_timer_status_prohibit,   defintval:0,      TYPE_UINT,      0},       \
+{GNB_CONFIG_STRING_SRB1_POLL_PDU,                      NULL,   0,            iptr:&srb1_poll_pdu,                defintval:4,      TYPE_UINT,      0},       \
+{GNB_CONFIG_STRING_SRB1_POLL_BYTE,                     NULL,   0,            iptr:&srb1_poll_byte,               defintval:99999,  TYPE_UINT,      0},       \
+{GNB_CONFIG_STRING_SRB1_MAX_RETX_THRESHOLD,            NULL,   0,            iptr:&srb1_max_retx_threshold,      defintval:4,      TYPE_UINT,      0}        \
+}
+/*-----------------------------------------------------------------------------------------------------------------------------------------------------------*/
+
+/* MME configuration parameters section name */
+#define GNB_CONFIG_STRING_MME_IP_ADDRESS                "mme_ip_address"
+
+/* SRB1 configuration parameters names   */
+
+
+#define GNB_CONFIG_STRING_MME_IPV4_ADDRESS              "ipv4"
+#define GNB_CONFIG_STRING_MME_IPV6_ADDRESS              "ipv6"
+#define GNB_CONFIG_STRING_MME_IP_ADDRESS_ACTIVE         "active"
+#define GNB_CONFIG_STRING_MME_IP_ADDRESS_PREFERENCE     "preference"
+
+
+/*-------------------------------------------------------------------------------------------------------------------------------------*/
+/*                                            MME configuration parameters                                                             */
+/*   optname                                          helpstr   paramflags    XXXptr       defXXXval         type           numelt     */
+/*-------------------------------------------------------------------------------------------------------------------------------------*/
+#define S1PARAMS_DESC {  \
+{GNB_CONFIG_STRING_MME_IPV4_ADDRESS,                   NULL,      0,         uptr:NULL,   defstrval:NULL,   TYPE_STRING,   0},          \
+{GNB_CONFIG_STRING_MME_IPV6_ADDRESS,                   NULL,      0,         uptr:NULL,   defstrval:NULL,   TYPE_STRING,   0},          \
+{GNB_CONFIG_STRING_MME_IP_ADDRESS_ACTIVE,              NULL,      0,         uptr:NULL,   defstrval:NULL,   TYPE_STRING,   0},          \
+{GNB_CONFIG_STRING_MME_IP_ADDRESS_PREFERENCE,          NULL,      0,         uptr:NULL,   defstrval:NULL,   TYPE_STRING,   0},          \
+}
+
+#define GNB_MME_IPV4_ADDRESS_IDX          0
+#define GNB_MME_IPV6_ADDRESS_IDX          1
+#define GNB_MME_IP_ADDRESS_ACTIVE_IDX     2
+#define GNB_MME_IP_ADDRESS_PREFERENCE_IDX 3
+/*---------------------------------------------------------------------------------------------------------------------------------------*/
+/*---------------------------------------------------------------------------------------------------------------------------------------*/
+/* SCTP configuration parameters section name */
+#define GNB_CONFIG_STRING_SCTP_CONFIG                    "SCTP"
+
+/* SCTP configuration parameters names   */
+#define GNB_CONFIG_STRING_SCTP_INSTREAMS                 "SCTP_INSTREAMS"
+#define GNB_CONFIG_STRING_SCTP_OUTSTREAMS                "SCTP_OUTSTREAMS"
+
+
+
+/*-----------------------------------------------------------------------------------------------------------------------------------------------------------*/
+/*                                            SRB1 configuration parameters                                                                                  */
+/*   optname                                          helpstr   paramflags    XXXptr                             defXXXval         type           numelt     */
+/*-----------------------------------------------------------------------------------------------------------------------------------------------------------*/
+#define SCTPPARAMS_DESC {  \
+{GNB_CONFIG_STRING_SCTP_INSTREAMS,                       NULL,   0,   uptr:NULL,   defintval:-1,    TYPE_UINT,   0},       \
+{GNB_CONFIG_STRING_SCTP_OUTSTREAMS,                      NULL,   0,   uptr:NULL,   defintval:-1,    TYPE_UINT,   0}        \
+}
+
+#define GNB_SCTP_INSTREAMS_IDX          0
+#define GNB_SCTP_OUTSTREAMS_IDX         1
+/*-----------------------------------------------------------------------------------------------------------------------------------------------------------*/
+/*-----------------------------------------------------------------------------------------------------------------------------------------------------------*/
+/* S1 interface configuration parameters section name */
+#define GNB_CONFIG_STRING_NETWORK_INTERFACES_CONFIG     "NETWORK_INTERFACES"
+
+#define GNB_INTERFACE_NAME_FOR_S1_MME_IDX          0
+#define GNB_IPV4_ADDRESS_FOR_S1_MME_IDX            1
+#define GNB_INTERFACE_NAME_FOR_S1U_IDX             2
+#define GNB_IPV4_ADDR_FOR_S1U_IDX                  3
+#define GNB_PORT_FOR_S1U_IDX                       4
+
+/* S1 interface configuration parameters names   */
+#define GNB_CONFIG_STRING_GNB_INTERFACE_NAME_FOR_S1_MME "GNB_INTERFACE_NAME_FOR_S1_MME"
+#define GNB_CONFIG_STRING_GNB_IPV4_ADDRESS_FOR_S1_MME   "GNB_IPV4_ADDRESS_FOR_S1_MME"
+#define GNB_CONFIG_STRING_GNB_INTERFACE_NAME_FOR_S1U    "GNB_INTERFACE_NAME_FOR_S1U"
+#define GNB_CONFIG_STRING_GNB_IPV4_ADDR_FOR_S1U         "GNB_IPV4_ADDRESS_FOR_S1U"
+#define GNB_CONFIG_STRING_GNB_PORT_FOR_S1U              "GNB_PORT_FOR_S1U"
+
+/*--------------------------------------------------------------------------------------------------------------------------------------------------*/
+/*                                            S1 interface configuration parameters                                                                 */
+/*   optname                                            helpstr   paramflags    XXXptr              defXXXval             type           numelt     */
+/*--------------------------------------------------------------------------------------------------------------------------------------------------*/
+#define NETPARAMS_DESC {  \
+{GNB_CONFIG_STRING_GNB_INTERFACE_NAME_FOR_S1_MME,        NULL,      0,         strptr:NULL,         defstrval:NULL,      TYPE_STRING,      0},      \
+{GNB_CONFIG_STRING_GNB_IPV4_ADDRESS_FOR_S1_MME,          NULL,      0,         strptr:NULL,         defstrval:NULL,      TYPE_STRING,      0},      \
+{GNB_CONFIG_STRING_GNB_INTERFACE_NAME_FOR_S1U,           NULL,      0,         strptr:NULL,         defstrval:NULL,      TYPE_STRING,      0},      \
+{GNB_CONFIG_STRING_GNB_IPV4_ADDR_FOR_S1U,                NULL,      0,         strptr:NULL,         defstrval:NULL,      TYPE_STRING,      0},      \
+{GNB_CONFIG_STRING_GNB_PORT_FOR_S1U,                     NULL,      0,         uptr:NULL,           defintval:2152L,     TYPE_UINT,        0}       \
+}   
+
+
+
+/*--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
+/*                                            GTPU  configuration parameters                                                                                                      */
+/*   optname                                            helpstr   paramflags    XXXptr              defXXXval                                           type           numelt     */
+/*--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
+#define GTPUPARAMS_DESC { \
+{GNB_CONFIG_STRING_GNB_INTERFACE_NAME_FOR_S1U,           NULL,    0,            strptr:&enb_interface_name_for_S1U,      defstrval:"lo",                TYPE_STRING,   0},        \
+{GNB_CONFIG_STRING_GNB_IPV4_ADDR_FOR_S1U,                NULL,    0,            strptr:&enb_ipv4_address_for_S1U,        defstrval:"127.0.0.1",         TYPE_STRING,   0},        \
+{GNB_CONFIG_STRING_GNB_PORT_FOR_S1U,                     NULL,    0,            uptr:&enb_port_for_S1U,                  defintval:2152,                TYPE_UINT,     0}         \
+}
+/*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
+/*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
+
+/* L1 configuration section names   */
+#define CONFIG_STRING_L1_LIST                              "L1s"
+#define CONFIG_STRING_L1_CONFIG                            "l1_config"
+
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------------------------------------------------------------------------------*/
+#define CONFIG_STRING_NETWORK_CONTROLLER_CONFIG         "NETWORK_CONTROLLER"
+
+#define CONFIG_STRING_FLEXRAN_ENABLED                   "FLEXRAN_ENABLED"
+#define CONFIG_STRING_FLEXRAN_INTERFACE_NAME            "FLEXRAN_INTERFACE_NAME"
+#define CONFIG_STRING_FLEXRAN_IPV4_ADDRESS              "FLEXRAN_IPV4_ADDRESS"
+#define CONFIG_STRING_FLEXRAN_PORT                      "FLEXRAN_PORT"
+#define CONFIG_STRING_FLEXRAN_CACHE                     "FLEXRAN_CACHE"
+#define CONFIG_STRING_FLEXRAN_AWAIT_RECONF              "FLEXRAN_AWAIT_RECONF"
+
+#define FLEXRAN_ENABLED                               0
+#define FLEXRAN_INTERFACE_NAME_IDX                    1
+#define FLEXRAN_IPV4_ADDRESS_IDX                      2
+#define FLEXRAN_PORT_IDX                              3
+#define FLEXRAN_CACHE_IDX                             4
+#define FLEXRAN_AWAIT_RECONF_IDX                      5
+
+#define FLEXRANPARAMS_DESC { \
+{CONFIG_STRING_FLEXRAN_ENABLED,                NULL,   0,   strptr:NULL,   defstrval:"no",                    TYPE_STRING,   0},           \
+{CONFIG_STRING_FLEXRAN_INTERFACE_NAME,         NULL,   0,   strptr:NULL,   defstrval:"lo",                    TYPE_STRING,   0},           \
+{CONFIG_STRING_FLEXRAN_IPV4_ADDRESS,           NULL,   0,   strptr:NULL,   defstrval:"127.0.0.1",             TYPE_STRING,   0},           \
+{CONFIG_STRING_FLEXRAN_PORT,                   NULL,   0,   uptr:NULL,     defintval:2210,                    TYPE_UINT,     0},           \
+{CONFIG_STRING_FLEXRAN_CACHE,                  NULL,   0,   strptr:NULL,   defstrval:"/mnt/oai_agent_cache",  TYPE_STRING,   0},           \
+{CONFIG_STRING_FLEXRAN_AWAIT_RECONF,           NULL,   0,   strptr:NULL,   defstrval:"no",                    TYPE_STRING,   0}            \
+}
+
+/*----------------------------------------------------------------------------------------------------------------------------------------------------*/
+/*----------------------------------------------------------------------------------------------------------------------------------------------------*/
+/* MACRLC configuration section names   */
+#define CONFIG_STRING_MACRLC_LIST                          "MACRLCs"
+#define CONFIG_STRING_MACRLC_CONFIG                        "macrlc_config"
+
+
+/* MACRLC configuration parameters names   */
+#define CONFIG_STRING_MACRLC_CC                            "num_cc"
+#define CONFIG_STRING_MACRLC_TRANSPORT_N_PREFERENCE        "tr_n_preference"
+#define CONFIG_STRING_MACRLC_LOCAL_N_IF_NAME               "local_n_if_name"
+#define CONFIG_STRING_MACRLC_LOCAL_N_ADDRESS               "local_n_address"
+#define CONFIG_STRING_MACRLC_REMOTE_N_ADDRESS              "remote_n_address"
+#define CONFIG_STRING_MACRLC_LOCAL_N_PORTC                 "local_n_portc"
+#define CONFIG_STRING_MACRLC_REMOTE_N_PORTC                "remote_n_portc"
+#define CONFIG_STRING_MACRLC_LOCAL_N_PORTD                 "local_n_portd"
+#define CONFIG_STRING_MACRLC_REMOTE_N_PORTD                "remote_n_portd"
+#define CONFIG_STRING_MACRLC_TRANSPORT_S_PREFERENCE        "tr_s_preference"
+#define CONFIG_STRING_MACRLC_LOCAL_S_IF_NAME               "local_s_if_name"
+#define CONFIG_STRING_MACRLC_LOCAL_S_ADDRESS               "local_s_address"
+#define CONFIG_STRING_MACRLC_REMOTE_S_ADDRESS              "remote_s_address"
+#define CONFIG_STRING_MACRLC_LOCAL_S_PORTC                 "local_s_portc"
+#define CONFIG_STRING_MACRLC_REMOTE_S_PORTC                "remote_s_portc"
+#define CONFIG_STRING_MACRLC_LOCAL_S_PORTD                 "local_s_portd"
+#define CONFIG_STRING_MACRLC_REMOTE_S_PORTD                "remote_s_portd"
+#define CONFIG_STRING_MACRLC_PHY_TEST_MODE                 "phy_test_mode"
+
+
+#define MACRLC_CC_IDX                                          0
+#define MACRLC_TRANSPORT_N_PREFERENCE_IDX                      1
+#define MACRLC_LOCAL_N_IF_NAME_IDX                             2
+#define MACRLC_LOCAL_N_ADDRESS_IDX                             3
+#define MACRLC_REMOTE_N_ADDRESS_IDX                            4
+#define MACRLC_LOCAL_N_PORTC_IDX                               5
+#define MACRLC_REMOTE_N_PORTC_IDX                              6
+#define MACRLC_LOCAL_N_PORTD_IDX                               7
+#define MACRLC_REMOTE_N_PORTD_IDX                              8
+#define MACRLC_TRANSPORT_S_PREFERENCE_IDX                      9
+#define MACRLC_LOCAL_S_IF_NAME_IDX                             10
+#define MACRLC_LOCAL_S_ADDRESS_IDX                             11
+#define MACRLC_REMOTE_S_ADDRESS_IDX                            12
+#define MACRLC_LOCAL_S_PORTC_IDX                               13
+#define MACRLC_REMOTE_S_PORTC_IDX                              14
+#define MACRLC_LOCAL_S_PORTD_IDX                               15
+#define MACRLC_REMOTE_S_PORTD_IDX                              16
+#define MACRLC_PHY_TEST_IDX                                    17
\ No newline at end of file
diff --git a/openair2/LAYER2/MAC/main.c b/openair2/LAYER2/MAC/main.c
index 062ead2a20..5c9e5241b8 100644
--- a/openair2/LAYER2/MAC/main.c
+++ b/openair2/LAYER2/MAC/main.c
@@ -48,87 +48,85 @@ extern RAN_CONTEXT_t RC;
 
 void mac_top_init_eNB(void)
 {
-
-    module_id_t i, j;
-    int list_el;
-    UE_list_t *UE_list;
-    eNB_MAC_INST *mac;
-
-    LOG_I(MAC, "[MAIN] Init function start:nb_macrlc_inst=%d\n",
-	  RC.nb_macrlc_inst);
-
-    if (RC.nb_macrlc_inst > 0) {
-	RC.mac =
-	    (eNB_MAC_INST **) malloc16(RC.nb_macrlc_inst *
-				       sizeof(eNB_MAC_INST *));
-	AssertFatal(RC.mac != NULL,
-		    "can't ALLOCATE %zu Bytes for %d eNB_MAC_INST with size %zu \n",
-		    RC.nb_macrlc_inst * sizeof(eNB_MAC_INST *),
-		    RC.nb_macrlc_inst, sizeof(eNB_MAC_INST));
-	for (i = 0; i < RC.nb_macrlc_inst; i++) {
-	    RC.mac[i] = (eNB_MAC_INST *) malloc16(sizeof(eNB_MAC_INST));
-	    AssertFatal(RC.mac != NULL,
-			"can't ALLOCATE %zu Bytes for %d eNB_MAC_INST with size %zu \n",
-			RC.nb_macrlc_inst * sizeof(eNB_MAC_INST *),
-			RC.nb_macrlc_inst, sizeof(eNB_MAC_INST));
-	    LOG_D(MAC,
-		  "[MAIN] ALLOCATE %zu Bytes for %d eNB_MAC_INST @ %p\n",
-		  sizeof(eNB_MAC_INST), RC.nb_macrlc_inst, RC.mac);
-	    bzero(RC.mac[i], sizeof(eNB_MAC_INST));
-	    RC.mac[i]->Mod_id = i;
-	    for (j = 0; j < MAX_NUM_CCs; j++) {
-		RC.mac[i]->DL_req[j].dl_config_request_body.
-		    dl_config_pdu_list = RC.mac[i]->dl_config_pdu_list[j];
-		RC.mac[i]->UL_req[j].ul_config_request_body.
-		    ul_config_pdu_list = RC.mac[i]->ul_config_pdu_list[j];
-		for (int k = 0; k < 10; k++)
-		    RC.mac[i]->UL_req_tmp[j][k].
-			ul_config_request_body.ul_config_pdu_list =
-			RC.mac[i]->ul_config_pdu_list_tmp[j][k];
-		RC.mac[i]->HI_DCI0_req[j].
-		    hi_dci0_request_body.hi_dci0_pdu_list =
-		    RC.mac[i]->hi_dci0_pdu_list[j];
-		RC.mac[i]->TX_req[j].tx_request_body.tx_pdu_list =
-		    RC.mac[i]->tx_request_pdu[j];
-		RC.mac[i]->ul_handle = 0;
-	    }
-	}
-
-	AssertFatal(rlc_module_init() == 0,
-		    "Could not initialize RLC layer\n");
-
-	// These should be out of here later
-	pdcp_layer_init();
-
-	rrc_init_global_param();
-
-    } else {
-	RC.mac = NULL;
-    }
-
-    // Initialize Linked-List for Active UEs
+  module_id_t i, j;
+  int list_el;
+  UE_list_t *UE_list;
+  eNB_MAC_INST *mac;
+
+  LOG_I(MAC, "[MAIN] Init function start:nb_macrlc_inst=%d\n",
+  RC.nb_macrlc_inst);
+
+  if (RC.nb_macrlc_inst > 0) {
+    
+    RC.mac = (eNB_MAC_INST **) malloc16(RC.nb_macrlc_inst *sizeof(eNB_MAC_INST *));
+     
+    AssertFatal(RC.mac != NULL,"can't ALLOCATE %zu Bytes for %d eNB_MAC_INST with size %zu \n",
+                RC.nb_macrlc_inst * sizeof(eNB_MAC_INST *),
+                RC.nb_macrlc_inst, sizeof(eNB_MAC_INST));
+  
     for (i = 0; i < RC.nb_macrlc_inst; i++) {
-	mac = RC.mac[i];
-
-
-	mac->if_inst = IF_Module_init(i);
-
-	UE_list = &mac->UE_list;
-
-	UE_list->num_UEs = 0;
-	UE_list->head = -1;
-	UE_list->head_ul = -1;
-	UE_list->avail = 0;
-
-	for (list_el = 0; list_el < MAX_MOBILES_PER_ENB - 1; list_el++) {
-	    UE_list->next[list_el] = list_el + 1;
-	    UE_list->next_ul[list_el] = list_el + 1;
-	}
-
-	UE_list->next[list_el] = -1;
-	UE_list->next_ul[list_el] = -1;
+        RC.mac[i] = (eNB_MAC_INST *) malloc16(sizeof(eNB_MAC_INST));
+        
+        AssertFatal(RC.mac != NULL,"can't ALLOCATE %zu Bytes for %d eNB_MAC_INST with size %zu \n",
+                    RC.nb_macrlc_inst * sizeof(eNB_MAC_INST *),
+                    RC.nb_macrlc_inst, sizeof(eNB_MAC_INST));
+        
+        LOG_D(MAC,"[MAIN] ALLOCATE %zu Bytes for %d eNB_MAC_INST @ %p\n",sizeof(eNB_MAC_INST), RC.nb_macrlc_inst, RC.mac);
+       
+        bzero(RC.mac[i], sizeof(eNB_MAC_INST));
+        
+        RC.mac[i]->Mod_id = i;
+        
+        for (j = 0; j < MAX_NUM_CCs; j++) {
+          RC.mac[i]->DL_req[j].dl_config_request_body.
+          dl_config_pdu_list = RC.mac[i]->dl_config_pdu_list[j];
+          RC.mac[i]->UL_req[j].ul_config_request_body.
+          ul_config_pdu_list = RC.mac[i]->ul_config_pdu_list[j];
+          
+          for (int k = 0; k < 10; k++)
+            RC.mac[i]->UL_req_tmp[j][k].ul_config_request_body.ul_config_pdu_list =RC.mac[i]->ul_config_pdu_list_tmp[j][k];
+        
+        RC.mac[i]->HI_DCI0_req[j].hi_dci0_request_body.hi_dci0_pdu_list =RC.mac[i]->hi_dci0_pdu_list[j];
+        RC.mac[i]->TX_req[j].tx_request_body.tx_pdu_list =
+        RC.mac[i]->tx_request_pdu[j];
+        RC.mac[i]->ul_handle = 0;
+        
+        }
+    }//END for (i = 0; i < RC.nb_macrlc_inst; i++)
+
+  AssertFatal(rlc_module_init() == 0,
+  "Could not initialize RLC layer\n");
+
+  // These should be out of here later
+  pdcp_layer_init();
+
+  rrc_init_global_param();
+
+  }else {
+    RC.mac = NULL;
+  }
+
+  // Initialize Linked-List for Active UEs
+  for (i = 0; i < RC.nb_macrlc_inst; i++) {
+    
+    mac = RC.mac[i];
+    mac->if_inst = IF_Module_init(i);
+
+    UE_list = &mac->UE_list;
+    UE_list->num_UEs = 0;
+    UE_list->head = -1;
+    UE_list->head_ul = -1;
+    UE_list->avail = 0;
+
+    for (list_el = 0; list_el < MAX_MOBILES_PER_ENB - 1; list_el++) {
+      UE_list->next[list_el] = list_el + 1;
+      UE_list->next_ul[list_el] = list_el + 1;
     }
 
+    UE_list->next[list_el] = -1;
+    UE_list->next_ul[list_el] = -1;
+  }
+
 }
 
 void mac_init_cell_params(int Mod_idP, int CC_idP)
diff --git a/openair2/LAYER2/NR_MAC_gNB/config.c b/openair2/LAYER2/NR_MAC_gNB/config.c
index e69de29bb2..3a2e81874c 100644
--- a/openair2/LAYER2/NR_MAC_gNB/config.c
+++ b/openair2/LAYER2/NR_MAC_gNB/config.c
@@ -0,0 +1,243 @@
+#include "COMMON/platform_types.h"
+#include "COMMON/platform_constants.h"
+#include "common/ran_context.h"
+
+#include "UTIL/LOG/log.h"
+#include "UTIL/LOG/vcd_signal_dumper.h"
+
+#include "NR_BCCH-BCH-Message.h"
+#include "NR_ServingCellConfigCommon.h"
+
+#include "LAYER2/NR_MAC_gNB/mac_proto.h"
+
+extern RAN_CONTEXT_t RC;
+//extern int l2_init_gNB(void);
+extern void mac_top_init_gNB(void);
+extern uint8_t nfapi_mode;
+
+int32_t **rxdata;
+int32_t **txdata;
+
+typedef struct eutra_bandentry_s {
+  int16_t band;
+  uint32_t ul_min;
+  uint32_t ul_max;
+  uint32_t dl_min;
+  uint32_t dl_max;
+  uint32_t N_OFFs_DL;
+} eutra_bandentry_t;
+
+typedef struct band_info_s {
+  int nbands;
+  eutra_bandentry_t band_info[100];
+} band_info_t;
+
+static const eutra_bandentry_t eutra_bandtable[] = {
+  {1, 19200, 19800, 21100, 21700, 0},
+  {2, 18500, 19100, 19300, 19900, 6000},
+  {3, 17100, 17850, 18050, 18800, 12000},
+  {4, 17100, 17550, 21100, 21550, 19500},
+  {5, 8240, 8490, 8690, 8940, 24000},
+  {6, 8300, 8400, 8750, 8850, 26500},
+  {7, 25000, 25700, 26200, 26900, 27500},
+  {8, 8800, 9150, 9250, 9600, 34500},
+  {9, 17499, 17849, 18449, 18799, 38000},
+  {10, 17100, 17700, 21100, 21700, 41500},
+  {11, 14279, 14529, 14759, 15009, 47500},
+  {12, 6980, 7160, 7280, 7460, 50100},
+  {13, 7770, 7870, 7460, 7560, 51800},
+  {14, 7880, 7980, 7580, 7680, 52800},
+  {17, 7040, 7160, 7340, 7460, 57300},
+  {18, 8150, 9650, 8600, 10100, 58500},
+  {19, 8300, 8450, 8750, 8900, 60000},
+  {20, 8320, 8620, 7910, 8210, 61500},
+  {21, 14479, 14629, 14959, 15109, 64500},
+  {22, 34100, 34900, 35100, 35900, 66000},
+  {23, 20000, 20200, 21800, 22000, 75000},
+  {24, 16126, 16605, 15250, 15590, 77000},
+  {25, 18500, 19150, 19300, 19950, 80400},
+  {26, 8140, 8490, 8590, 8940, 86900},
+  {27, 8070, 8240, 8520, 8690, 90400},
+  {28, 7030, 7580, 7580, 8130, 92100},
+  {29, 0, 0, 7170, 7280, 96600},
+  {30, 23050, 23250, 23500, 23600, 97700},
+  {31, 45250, 34900, 46250, 35900, 98700},
+  {32, 0, 0, 14520, 14960, 99200},
+  {33, 19000, 19200, 19000, 19200, 36000},
+  {34, 20100, 20250, 20100, 20250, 36200},
+  {35, 18500, 19100, 18500, 19100, 36350},
+  {36, 19300, 19900, 19300, 19900, 36950},
+  {37, 19100, 19300, 19100, 19300, 37550},
+  {38, 25700, 26200, 25700, 26300, 37750},
+  {39, 18800, 19200, 18800, 19200, 38250},
+  {40, 23000, 24000, 23000, 24000, 38650},
+  {41, 24960, 26900, 24960, 26900, 39650},
+  {42, 34000, 36000, 34000, 36000, 41590},
+  {43, 36000, 38000, 36000, 38000, 43590},
+  {44, 7030, 8030, 7030, 8030, 45590},
+  {45, 14470, 14670, 14470, 14670, 46590},
+  {46, 51500, 59250, 51500, 59250, 46790},
+  {65, 19200, 20100, 21100, 22000, 65536},
+  {66, 17100, 18000, 21100, 22000, 66436},
+  {67, 0, 0, 7380, 7580, 67336},
+  {68, 6980, 7280, 7530, 7830, 67536}
+};
+
+
+uint32_t nr_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);
+  for (i = 0; i < 69 && eutra_bandtable[i].band != eutra_bandP; i++);
+
+  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,
+        eutra_bandtable[i].dl_min);
+  AssertFatal(dl_CarrierFreq_by_100k <=
+        (eutra_bandtable[i].dl_max - bw_by_100),
+        "Band %d, bw %u: DL carrier frequency %u Hz > %d\n",
+        eutra_bandP, bw, dl_CarrierFreq,
+        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));
+}
+
+
+void config_nr_mib(int Mod_idP, 
+                int CC_idP,
+                int p_gNBP,
+                int subCarrierSpacingCommon, 
+                uint32_t ssb_SubcarrierOffset,
+                int dmrs_TypeA_Position,
+                uint32_t pdcch_ConfigSIB1,
+                int cellBarred,
+                int intraFreqReselection
+                ){
+  nfapi_nr_config_request_t *cfg = &RC.nrmac[Mod_idP]->config[CC_idP];
+
+  cfg->num_tlv=0;
+  
+  cfg->rf_config.tx_antenna_ports.value            = p_gNBP;
+  cfg->rf_config.tx_antenna_ports.tl.tag = NFAPI_RF_CONFIG_TX_ANTENNA_PORTS_TAG;
+  cfg->num_tlv++;
+  
+  cfg->sch_config.ssb_subcarrier_offset.value = ssb_SubcarrierOffset;
+
+  
+}
+
+void config_common(int Mod_idP, 
+                   int CC_idP,
+                   int eutra_bandP,
+                   int dl_CarrierFreqP,
+                   int dl_BandwidthP
+                  ){
+
+  nfapi_nr_config_request_t *cfg = &RC.nrmac[Mod_idP]->config[CC_idP];
+
+  // FDD
+  cfg->subframe_config.duplex_mode.value                          = 1;
+  cfg->subframe_config.duplex_mode.tl.tag = NFAPI_SUBFRAME_CONFIG_DUPLEX_MODE_TAG;
+  cfg->num_tlv++;
+  
+  /// In NR DL and UL will be different band
+  cfg->nfapi_config.rf_bands.number_rf_bands       = 1;
+  cfg->nfapi_config.rf_bands.rf_band[0]            = eutra_bandP;  
+  cfg->nfapi_config.rf_bands.tl.tag = NFAPI_PHY_RF_BANDS_TAG;
+  cfg->num_tlv++;
+
+  cfg->nfapi_config.earfcn.value                   = nr_to_earfcn(eutra_bandP,dl_CarrierFreqP,dl_BandwidthP*180/100);
+  cfg->nfapi_config.earfcn.tl.tag = NFAPI_NFAPI_EARFCN_TAG;
+  cfg->num_tlv++;
+
+  cfg->subframe_config.numerology_index_mu.value = 1;
+  //cfg->subframe_config.tl.tag = 
+  //cfg->num_tlv++;
+
+  cfg->dl_frequencyinfo.DL_carrierBandwidth.value    = dl_BandwidthP;
+  cfg->dl_frequencyinfo.DL_carrierBandwidth.tl.tag = NFAPI_RF_CONFIG_DL_CHANNEL_BANDWIDTH_TAG; //temporary
+  cfg->num_tlv++;
+  LOG_E(PHY,"%s() dl_BandwidthP:%d\n", __FUNCTION__, dl_BandwidthP);
+
+  cfg->ul_frequencyinfo.UL_carrierBandwidth.value    = dl_BandwidthP;
+  cfg->ul_frequencyinfo.UL_carrierBandwidth.tl.tag = NFAPI_RF_CONFIG_UL_CHANNEL_BANDWIDTH_TAG;  //temporary
+  cfg->num_tlv++;
+
+  //cfg->sch_config.half_frame_index.value = 0; Fix in PHY
+  //cfg->sch_config.n_ssb_crb.value = 86;       Fix in PHY
+
+}
+
+/*void config_servingcellconfigcommon(){
+
+}*/
+
+int rrc_mac_config_req_gNB(module_id_t Mod_idP, 
+                           int CC_idP,
+                           int p_gNB,
+                           int eutra_bandP,
+                           int dl_CarrierFreqP,
+                           int dl_BandwidthP,
+                           NR_BCCH_BCH_Message_t *mib,
+                           NR_ServingCellConfigCommon_t *servingcellconfigcommon
+                           ){
+
+
+  if( mib != NULL ){
+    config_nr_mib(Mod_idP, 
+               CC_idP,
+               p_gNB, 
+               mib->message.choice.mib->subCarrierSpacingCommon,
+               mib->message.choice.mib->ssb_SubcarrierOffset,
+               mib->message.choice.mib->dmrs_TypeA_Position,
+               mib->message.choice.mib->pdcch_ConfigSIB1,
+               mib->message.choice.mib->cellBarred,
+               mib->message.choice.mib->intraFreqReselection
+               );
+  }// END if( mib != NULL )
+
+  if( servingcellconfigcommon != NULL ){
+    config_common(Mod_idP, 
+                  CC_idP,
+                  eutra_bandP,
+                  dl_CarrierFreqP,
+                  dl_BandwidthP
+                  );  
+  }//END if( servingcellconfigcommon != NULL )
+
+
+
+  LOG_E(MAC, "%s() %s:%d RC.nrmac[Mod_idP]->if_inst->PHY_config_req:%p\n", __FUNCTION__, __FILE__, __LINE__, RC.mac[Mod_idP]->if_inst->PHY_config_req);
+
+  // if in nFAPI mode 
+  if ( (nfapi_mode == 1 || nfapi_mode == 2) && (RC.nrmac[Mod_idP]->if_inst->PHY_config_req == NULL) ){
+    while(RC.nrmac[Mod_idP]->if_inst->PHY_config_req == NULL) {
+      // DJP AssertFatal(RC.nrmac[Mod_idP]->if_inst->PHY_config_req != NULL,"if_inst->phy_config_request is null\n");
+      usleep(100 * 1000);
+      printf("Waiting for PHY_config_req\n");
+    }
+  }
+
+  if (servingcellconfigcommon != NULL){
+    NR_PHY_Config_t phycfg;
+    phycfg.Mod_id = Mod_idP;
+    phycfg.CC_id  = CC_idP;
+    phycfg.cfg    = &RC.nrmac[Mod_idP]->config[CC_idP];
+      
+    if (RC.nrmac[Mod_idP]->if_inst->PHY_config_req) RC.nrmac[Mod_idP]->if_inst->PHY_config_req(&phycfg); 
+      
+    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_MAC_CONFIG, VCD_FUNCTION_OUT);
+  }
+    
+  return(0);
+
+}// END rrc_mac_config_req_gNB
+
diff --git a/openair2/LAYER2/NR_MAC_gNB/mac.h b/openair2/LAYER2/NR_MAC_gNB/mac.h
new file mode 100644
index 0000000000..3f686949be
--- /dev/null
+++ b/openair2/LAYER2/NR_MAC_gNB/mac.h
@@ -0,0 +1,96 @@
+/*
+ * 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
+ */
+
+/*! \file LAYER2/MAC/defs.h
+* \brief MAC data structures, constant, and function prototype
+* \author Navid Nikaein and Raymond Knopp
+* \date 2011
+* \version 0.5
+* \email navid.nikaein@eurecom.fr
+
+*/
+/** @defgroup _oai2  openair2 Reference Implementation
+ * @ingroup _ref_implementation_
+ * @{
+ */
+
+/*@}*/
+
+#ifndef __LAYER2_NR_MAC_DEFS_H__
+#define __LAYER2_NR_MAC_DEFS_H__
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "COMMON/platform_constants.h"
+
+#include "NR_BCCH-BCH-Message.h"
+#include "NR_ServingCellConfigCommon.h"
+
+#include "nfapi_nr_interface.h"
+
+#include "NR_PHY_INTERFACE/IF_Module.h"
+
+#include "PHY/TOOLS/time_meas.h"
+
+#include "PHY/defs_common.h" // for PRACH_RESOURCES_t
+
+#include "targets/ARCH/COMMON/common_lib.h"
+
+#include "LAYER2/MAC/mac.h" // temporary
+
+/*! \brief top level eNB MAC structure */
+typedef struct gNB_MAC_INST_s {
+  /// Ethernet parameters for northbound midhaul interface
+  eth_params_t                    eth_params_n;
+  /// Ethernet parameters for fronthaul interface
+  eth_params_t                    eth_params_s;
+  /// Module
+  module_id_t                     Mod_id;
+  /// frame counter
+  frame_t                         frame;
+  /// subframe counter
+  sub_frame_t                     subframe;  
+  /// Pointer to IF module instance for PHY
+  NR_IF_Module_t                  *if_inst;
+  /// NFAPI Config Request Structure
+  nfapi_nr_config_request_t       config[NFAPI_CC_MAX];
+  /// NFAPI DL Config Request Structure
+  nfapi_dl_config_request_t       DL_req[NFAPI_CC_MAX];
+  /// NFAPI UL Config Request Structure, send to L1 4 subframes before processing takes place
+  nfapi_ul_config_request_t       UL_req[NFAPI_CC_MAX];
+  /// Preallocated DL pdu list
+  nfapi_dl_config_request_pdu_t   dl_config_pdu_list[NFAPI_CC_MAX][MAX_NUM_DL_PDU];
+  /// Preallocated UL pdu list
+  nfapi_ul_config_request_pdu_t   ul_config_pdu_list[NFAPI_CC_MAX][MAX_NUM_UL_PDU];
+  /// NFAPI HI/DCI0 Config Request Structure
+  nfapi_hi_dci0_request_t HI_DCI0_req[NFAPI_CC_MAX];
+  /// NFAPI DL PDU structure
+  nfapi_tx_request_t TX_req[NFAPI_CC_MAX];
+  /// Common cell resources
+  COMMON_channels_t common_channels[NFAPI_CC_MAX];
+
+
+  UE_list_t UE_list;
+} gNB_MAC_INST;
+
+#endif /*__LAYER2_NR_MAC_DEFS_H__ */
diff --git a/openair2/LAYER2/NR_MAC_gNB/mac_proto.h b/openair2/LAYER2/NR_MAC_gNB/mac_proto.h
new file mode 100644
index 0000000000..6640882469
--- /dev/null
+++ b/openair2/LAYER2/NR_MAC_gNB/mac_proto.h
@@ -0,0 +1,22 @@
+
+#ifndef __LAYER2_NR_MAC_PROTO_H__
+#define __LAYER2_NR_MAC_PROTO_H__
+
+#include "mac.h"
+#include "PHY/defs_nr_common.h"
+
+
+
+void mac_top_init_gNB(void);
+
+int rrc_mac_config_req_gNB(module_id_t Mod_idP, 
+                           int CC_id,
+                           int p_gNB,
+                           int eutra_bandP,
+                           int dl_CarrierFreqP,
+                           int dl_BandwidthP,
+                           NR_BCCH_BCH_Message_t *mib,
+                           NR_ServingCellConfigCommon_t *servingcellconfigcommon
+                           );
+
+#endif /*__LAYER2_NR_MAC_PROTO_H__*/
\ No newline at end of file
diff --git a/openair2/LAYER2/NR_MAC_gNB/main.c b/openair2/LAYER2/NR_MAC_gNB/main.c
new file mode 100644
index 0000000000..ed59db279a
--- /dev/null
+++ b/openair2/LAYER2/NR_MAC_gNB/main.c
@@ -0,0 +1,124 @@
+/*
+ * 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
+ */
+
+/*! \file main.c
+ * \brief top init of Layer 2
+ * \author  Navid Nikaein and Raymond Knopp
+ * \date 2010 - 2014
+ * \version 1.0
+ * \email: navid.nikaein@eurecom.fr
+ * @ingroup _mac
+
+ */
+
+#include "mac_proto.h"
+#include "LAYER2/MAC/mac_extern.h" //temporary
+#include "assertions.h"
+
+#include "LAYER2/PDCP_v10.1.0/pdcp.h"
+#include "RRC/NR/nr_rrc_defs.h"
+#include "UTIL/LOG/log.h"
+//#include "RRC/L2_INTERFACE/openair_rrc_L2_interface.h"
+
+#include "common/ran_context.h"
+
+extern RAN_CONTEXT_t RC;
+
+
+void mac_top_init_gNB(void)
+{
+  module_id_t     i, j;
+  int             list_el;
+  UE_list_t       *UE_list;
+  gNB_MAC_INST    *nrmac;
+
+  LOG_I(MAC, "[MAIN] Init function start:nb_nr_macrlc_inst=%d\n",RC.nb_nr_macrlc_inst);
+
+  if (RC.nb_nr_macrlc_inst > 0) {
+    
+    RC.nrmac = (gNB_MAC_INST **) malloc16(RC.nb_nr_macrlc_inst *sizeof(gNB_MAC_INST *));
+     
+    AssertFatal(RC.nrmac != NULL,"can't ALLOCATE %zu Bytes for %d gNB_MAC_INST with size %zu \n",
+                RC.nb_nr_macrlc_inst * sizeof(gNB_MAC_INST *),
+                RC.nb_nr_macrlc_inst, sizeof(gNB_MAC_INST));
+  
+    for (i = 0; i < RC.nb_nr_macrlc_inst; i++) {
+        RC.nrmac[i] = (gNB_MAC_INST *) malloc16(sizeof(gNB_MAC_INST));
+        
+        AssertFatal(RC.nrmac != NULL,"can't ALLOCATE %zu Bytes for %d gNB_MAC_INST with size %zu \n",
+                    RC.nb_nr_macrlc_inst * sizeof(gNB_MAC_INST *),
+                    RC.nb_nr_macrlc_inst, sizeof(gNB_MAC_INST));
+        
+        LOG_D(MAC,"[MAIN] ALLOCATE %zu Bytes for %d gNB_MAC_INST @ %p\n",sizeof(gNB_MAC_INST), RC.nb_nr_macrlc_inst, RC.mac);
+       
+        bzero(RC.nrmac[i], sizeof(gNB_MAC_INST));
+        
+        RC.nrmac[i]->Mod_id = i;
+        
+        /*
+        for (j = 0; j < MAX_NUM_CCs; j++) {
+          RC.nrmac[i]->DL_req[j].dl_config_request_body.dl_config_pdu_list = RC.nrmac[i]->dl_config_pdu_list[j];
+          RC.nrmac[i]->UL_req[j].ul_config_request_body.ul_config_pdu_list = RC.nrmac[i]->ul_config_pdu_list[j];
+          
+          for (int k = 0; k < 10; k++)
+            RC.nrmac[i]->UL_req_tmp[j][k].ul_config_request_body.ul_config_pdu_list =RC.nrmac[i]->ul_config_pdu_list_tmp[j][k];
+        
+        RC.nrmac[i]->HI_DCI0_req[j].hi_dci0_request_body.hi_dci0_pdu_list = RC.nrmac[i]->hi_dci0_pdu_list[j];
+        RC.nrmac[i]->TX_req[j].tx_request_body.tx_pdu_list =                RC.nrmac[i]->tx_request_pdu[j];
+        RC.nrmac[i]->ul_handle = 0;     
+        }
+        */
+
+    }//END for (i = 0; i < RC.nb_nr_macrlc_inst; i++)
+
+  AssertFatal(rlc_module_init() == 0,"Could not initialize RLC layer\n");
+
+  // These should be out of here later
+  pdcp_layer_init();
+
+  rrc_init_global_param();
+
+  }else {
+    RC.nrmac = NULL;
+  }
+
+  // Initialize Linked-List for Active UEs
+  for (i = 0; i < RC.nb_nr_macrlc_inst; i++) {
+    
+    nrmac = RC.nrmac[i];
+    nrmac->if_inst = NR_IF_Module_init(i);
+
+    UE_list = &nrmac->UE_list;
+    UE_list->num_UEs = 0;
+    UE_list->head = -1;
+    UE_list->head_ul = -1;
+    UE_list->avail = 0;
+
+    for (list_el = 0; list_el < MAX_MOBILES_PER_ENB - 1; list_el++) {
+      UE_list->next[list_el] = list_el + 1;
+      UE_list->next_ul[list_el] = list_el + 1;
+    }
+
+    UE_list->next[list_el] = -1;
+    UE_list->next_ul[list_el] = -1;
+  }
+
+}
\ No newline at end of file
diff --git a/openair2/NR_PHY_INTERFACE/IF_Module.c b/openair2/NR_PHY_INTERFACE/IF_Module.c
new file mode 100644
index 0000000000..10a2958705
--- /dev/null
+++ b/openair2/NR_PHY_INTERFACE/IF_Module.c
@@ -0,0 +1,131 @@
+#include "openair1/PHY/defs_eNB.h"
+#include "openair2/NR_PHY_INTERFACE/IF_Module.h"
+#include "openair1/PHY/phy_extern.h"
+#include "LAYER2/MAC/mac_extern.h"
+#include "LAYER2/NR_MAC_gNB/mac_proto.h"
+#include "common/ran_context.h"
+
+#define MAX_IF_MODULES 100
+
+NR_IF_Module_t *if_inst[MAX_IF_MODULES];
+NR_Sched_Rsp_t Sched_INFO[MAX_IF_MODULES][MAX_NUM_CCs];
+
+extern int oai_nfapi_harq_indication(nfapi_harq_indication_t *harq_ind);
+extern int oai_nfapi_crc_indication(nfapi_crc_indication_t *crc_ind);
+extern int oai_nfapi_cqi_indication(nfapi_cqi_indication_t *cqi_ind);
+extern int oai_nfapi_sr_indication(nfapi_sr_indication_t *ind);
+extern int oai_nfapi_rx_ind(nfapi_rx_indication_t *ind);
+extern uint8_t nfapi_mode;
+extern uint16_t sf_ahead;
+
+void NR_UL_indication(NR_UL_IND_t *UL_info)
+{
+
+  AssertFatal(UL_info!=NULL,"UL_INFO is null\n");
+
+#ifdef DUMP_FAPI
+  dump_ul(UL_info);
+#endif
+
+  module_id_t  module_id   = UL_info->module_id;
+  int          CC_id       = UL_info->CC_id;
+  NR_Sched_Rsp_t  *sched_info = &Sched_INFO[module_id][CC_id];
+  NR_IF_Module_t  *ifi        = if_inst[module_id];
+  gNB_MAC_INST *mac        = RC.nrmac[module_id];
+
+  LOG_D(PHY,"SFN/SF:%d%d module_id:%d CC_id:%d UL_info[rx_ind:%d harqs:%d crcs:%d cqis:%d preambles:%d sr_ind:%d]\n",
+        UL_info->frame,UL_info->subframe,
+        module_id,CC_id,
+        UL_info->rx_ind.rx_indication_body.number_of_pdus, UL_info->harq_ind.harq_indication_body.number_of_harqs, UL_info->crc_ind.crc_indication_body.number_of_crcs, UL_info->cqi_ind.number_of_cqis, UL_info->rach_ind.rach_indication_body.number_of_preambles, UL_info->sr_ind.sr_indication_body.number_of_srs);
+
+  if (nfapi_mode != 1)
+  {
+    if (ifi->CC_mask==0) {
+      ifi->current_frame    = UL_info->frame;
+      ifi->current_subframe = UL_info->subframe;
+    }
+    else {
+      AssertFatal(UL_info->frame != ifi->current_frame,"CC_mask %x is not full and frame has changed\n",ifi->CC_mask);
+      AssertFatal(UL_info->subframe != ifi->current_subframe,"CC_mask %x is not full and subframe has changed\n",ifi->CC_mask);
+    }
+    ifi->CC_mask |= (1<<CC_id);
+  }
+
+
+  // clear DL/UL info for new scheduling round
+  clear_nfapi_information(RC.mac[module_id],CC_id,
+        UL_info->frame,UL_info->subframe);
+
+  handle_rach(UL_info);
+
+  handle_sr(UL_info);
+
+  handle_cqi(UL_info);
+
+  handle_harq(UL_info);
+
+  // clear HI prior to handling ULSCH
+  mac->HI_DCI0_req[CC_id].hi_dci0_request_body.number_of_hi                     = 0;
+  
+  handle_ulsch(UL_info);
+
+  if (nfapi_mode != 1)
+  {
+    if (ifi->CC_mask == ((1<<MAX_NUM_CCs)-1)) {
+
+      eNB_dlsch_ulsch_scheduler(module_id,
+          (UL_info->frame+((UL_info->subframe>(9-sf_ahead))?1:0)) % 1024,
+          (UL_info->subframe+sf_ahead)%10);
+
+      ifi->CC_mask            = 0;
+
+      sched_info->module_id   = module_id;
+      sched_info->CC_id       = CC_id;
+      sched_info->frame       = (UL_info->frame + ((UL_info->subframe>(9-sf_ahead)) ? 1 : 0)) % 1024;
+      sched_info->subframe    = (UL_info->subframe+sf_ahead)%10;
+      sched_info->DL_req      = &mac->DL_req[CC_id];
+      sched_info->HI_DCI0_req = &mac->HI_DCI0_req[CC_id];
+      if ((mac->common_channels[CC_id].tdd_Config==NULL) ||
+          (is_UL_sf(&mac->common_channels[CC_id],(sched_info->subframe+sf_ahead)%10)>0))
+        sched_info->UL_req      = &mac->UL_req[CC_id];
+      else
+        sched_info->UL_req      = NULL;
+
+      sched_info->TX_req      = &mac->TX_req[CC_id];
+
+#ifdef DUMP_FAPI
+      dump_dl(sched_info);
+#endif
+
+      if (ifi->schedule_response)
+      {
+        AssertFatal(ifi->schedule_response!=NULL,
+            "schedule_response is null (mod %d, cc %d)\n",
+            module_id,
+            CC_id);
+        ifi->schedule_response(sched_info);
+      }
+
+      LOG_D(PHY,"Schedule_response: SFN_SF:%d%d dl_pdus:%d\n",sched_info->frame,sched_info->subframe,sched_info->DL_req->dl_config_request_body.number_pdu);
+    }
+  }
+}
+
+NR_IF_Module_t *NR_IF_Module_init(int Mod_id){
+
+  AssertFatal(Mod_id<MAX_MODULES,"Asking for Module %d > %d\n",Mod_id,MAX_IF_MODULES);
+
+  LOG_D(PHY,"Installing callbacks for IF_Module - UL_indication\n");
+
+  if (if_inst[Mod_id]==NULL) {
+    if_inst[Mod_id] = (NR_IF_Module_t*)malloc(sizeof(NR_IF_Module_t));
+    memset((void*)if_inst[Mod_id],0,sizeof(NR_IF_Module_t));
+
+    if_inst[Mod_id]->CC_mask=0;
+    if_inst[Mod_id]->UL_indication = NR_UL_indication;
+
+    AssertFatal(pthread_mutex_init(&if_inst[Mod_id]->if_mutex,NULL)==0,
+        "allocation of if_inst[%d]->if_mutex fails\n",Mod_id);
+  }
+  return if_inst[Mod_id];
+}
\ No newline at end of file
diff --git a/openair2/NR_PHY_INTERFACE/IF_Module.h b/openair2/NR_PHY_INTERFACE/IF_Module.h
index e69de29bb2..664ef8930d 100644
--- a/openair2/NR_PHY_INTERFACE/IF_Module.h
+++ b/openair2/NR_PHY_INTERFACE/IF_Module.h
@@ -0,0 +1,139 @@
+/*
+ * 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
+ */
+
+/*! \file openair2/PHY_INTERFACE/IF_Module.h
+* \brief data structures for PHY/MAC interface modules
+* \author EURECOM/NTUST
+* \date 2017
+* \version 0.1
+* \company Eurecom
+* \email: raymond.knopp@eurecom.fr
+* \note
+* \warning
+*/
+#ifndef __NR_IF_MODULE__H__
+#define __NR_IF_MODULE__H__
+
+#include <stdint.h>
+#include "nfapi_nr_interface.h"
+#include "platform_constants.h"
+#include "platform_types.h"
+
+#define MAX_NUM_DL_PDU 100
+#define MAX_NUM_UL_PDU 100
+#define MAX_NUM_HI_DCI0_PDU 100
+#define MAX_NUM_TX_REQUEST_PDU 100
+
+#define MAX_NUM_HARQ_IND 100
+#define MAX_NUM_CRC_IND 100
+#define MAX_NUM_SR_IND 100
+#define MAX_NUM_CQI_IND 100
+#define MAX_NUM_RACH_IND 100
+#define MAX_NUM_SRS_IND 100
+
+typedef struct{
+  /// Module ID
+  module_id_t module_id;
+  /// CC ID
+  int CC_id;
+  /// frame 
+  frame_t frame;
+  /// subframe
+  sub_frame_t subframe;
+
+  /// harq indication list
+  nfapi_harq_indication_t harq_ind;
+
+  /// crc indication list
+  nfapi_crc_indication_t crc_ind;
+
+  /// SR indication list
+  nfapi_sr_indication_t sr_ind;
+
+  /// CQI indication list
+  nfapi_cqi_indication_body_t cqi_ind;
+
+  /// RACH indication list
+  nfapi_rach_indication_t rach_ind;
+
+#ifdef Rel14
+  /// RACH indication list for BR UEs
+  nfapi_rach_indication_t rach_ind_br;
+#endif
+
+  /// SRS indication list
+  nfapi_srs_indication_body_t srs_ind;
+
+  /// RX indication
+  nfapi_rx_indication_t rx_ind;
+
+} NR_UL_IND_t;
+
+// Downlink subframe P7
+
+
+typedef struct{
+  /// Module ID
+  module_id_t module_id; 
+  /// CC ID
+  uint8_t CC_id;
+  /// frame
+  frame_t frame;
+  /// subframe
+  sub_frame_t subframe;
+  /// nFAPI DL Config Request
+  nfapi_dl_config_request_t *DL_req;
+  /// nFAPI UL Config Request
+  nfapi_ul_config_request_t *UL_req;
+  /// nFAPI HI_DCI Request
+  nfapi_hi_dci0_request_t *HI_DCI0_req;
+  /// Pointers to DL SDUs
+  nfapi_tx_request_t *TX_req;
+} NR_Sched_Rsp_t;
+
+typedef struct {
+    uint8_t Mod_id;
+    int CC_id;
+    nfapi_nr_config_request_t *cfg;
+} NR_PHY_Config_t;
+
+typedef struct NR_IF_Module_s{
+//define the function pointer
+  void (*UL_indication)(NR_UL_IND_t *UL_INFO);
+  void (*schedule_response)(NR_Sched_Rsp_t *Sched_INFO);
+  void (*PHY_config_req)(NR_PHY_Config_t* config_INFO);
+  uint32_t CC_mask;
+  uint16_t current_frame;
+  uint8_t current_subframe;
+  pthread_mutex_t if_mutex;
+} NR_IF_Module_t;
+
+/*Initial */
+NR_IF_Module_t *NR_IF_Module_init(int Mod_id);
+
+void NR_IF_Module_kill(int Mod_id);
+
+void NR_UL_indication(NR_UL_IND_t *UL_INFO);
+
+/*Interface for Downlink, transmitting the DLSCH SDU, DCI SDU*/
+void NR_Schedule_Response(NR_Sched_Rsp_t *Sched_INFO);
+
+#endif /*_NFAPI_INTERFACE_NR_H_*/
\ No newline at end of file
diff --git a/openair2/RRC/NR/MESSAGES/asn1_msg.c b/openair2/RRC/NR/MESSAGES/asn1_msg.c
index 5844013462..f2481a4832 100644
--- a/openair2/RRC/NR/MESSAGES/asn1_msg.c
+++ b/openair2/RRC/NR/MESSAGES/asn1_msg.c
@@ -28,7 +28,6 @@
 * \email: raymond.knopp@eurecom.fr and  navid.nikaein@eurecom.fr
 */
 
-#ifdef USER_MODE
 #include <stdio.h>
 #include <sys/types.h>
 #include <stdlib.h> /* for atoi(3) */
@@ -36,52 +35,46 @@
 #include <string.h> /* for strerror(3) */
 #include <sysexits.h> /* for EX_* exit codes */
 #include <errno.h>  /* for errno */
-#else
-#include <linux/module.h>  /* Needed by all modules */
-#endif
-#ifdef USER_MODE
-//#include "RRC/LITE/defs.h"
-//#include "COMMON/mac_rrc_primitives.h"
 #include "UTIL/LOG/log.h"
-#endif
 #include <asn_application.h>
 #include <asn_internal.h> /* for _ASN_DEFAULT_STACK_MAX */
 #include <per_encoder.h>
 
-#include "RRC/NR/defs_NR.h"
-//#include "RRC/LITE/extern.h"
+#include "asn1_msg.h"
+#include "RRC/NR/nr_rrc_defs.h"
+#include "RRC/NR/nr_rrc_extern.h"
 
-#if defined(Rel15)
+#if defined(NR_Rel15)
 #include "assertions.h"
 //#include "RRCConnectionRequest.h"
 //#include "UL-CCCH-Message.h"
-#include "UL-DCCH-Message.h"
+#include "NR_UL-DCCH-Message.h"
 //#include "DL-CCCH-Message.h"
-#include "DL-DCCH-Message.h"
+#include "NR_DL-DCCH-Message.h"
 //#include "EstablishmentCause.h"
 //#include "RRCConnectionSetup.h"
-#include "SRB-ToAddModList.h"
-#include "DRB-ToAddModList.h"
+#include "NR_SRB-ToAddModList.h"
+#include "NR_DRB-ToAddModList.h"
 //#include "MCCH-Message.h"
 //#define MRB1 1
 
 //#include "RRCConnectionSetupComplete.h"
 //#include "RRCConnectionReconfigurationComplete.h"
 //#include "RRCConnectionReconfiguration.h"
-#include "MIB.h"
+#include "NR_MIB.h"
 //#include "SystemInformation.h"
 
-#include "SIB1.h"
-#include "ServingCellConfigCommon.h"
+#include "NR_SIB1.h"
+#include "NR_ServingCellConfigCommon.h"
 //#include "SIB-Type.h"
 
 //#include "BCCH-DL-SCH-Message.h"
 
 //#include "PHY/defs.h"
 
-#include "MeasObjectToAddModList.h"
-#include "ReportConfigToAddModList.h"
-#include "MeasIdToAddModList.h"
+#include "NR_MeasObjectToAddModList.h"
+#include "NR_ReportConfigToAddModList.h"
+#include "NR_MeasIdToAddModList.h"
 #include "gnb_config.h"
 #endif
 
@@ -92,7 +85,7 @@
 #include "common/ran_context.h"
 
 //#include "PHY/defs.h"
-#ifndef USER_MODE
+/*#ifndef USER_MODE
 #define msg printk
 #ifndef errno
 int errno;
@@ -101,7 +94,7 @@ int errno;
 # if !defined (msg)
 #   define msg printf
 # endif
-#endif
+#endif*/
 
 //#define XER_PRINT
 
@@ -118,8 +111,8 @@ extern uint8_t usim_test;
 
 extern RAN_CONTEXT_t RC;
 
-uint16_t two_tier_hexagonal_cellIds[7] = {0,1,2,4,5,7,8};
-uint16_t two_tier_hexagonal_adjacent_cellIds[7][6] = {{1,2,4,5,7,8},    // CellId 0
+uint16_t two_tier_hexagonal_nr_cellIds[7] = {0,1,2,4,5,7,8};
+uint16_t two_tier_hexagonal_adjacent_nr_cellIds[7][6] = {{1,2,4,5,7,8},    // CellId 0
   {11,18,2,0,8,15}, // CellId 1
   {18,13,3,4,0,1},  // CellId 2
   {2,3,14,6,5,0},   // CellId 4
@@ -132,7 +125,7 @@ uint16_t two_tier_hexagonal_adjacent_cellIds[7][6] = {{1,2,4,5,7,8},    // CellI
  * This is a helper function for xer_sprint, which directs all incoming data
  * into the provided string.
  */
-static int xer__print2s_NR (const void *buffer, size_t size, void *app_key)
+static int xer__nr_print2s (const void *buffer, size_t size, void *app_key)
 {
   xer_sprint_string_t *string_buffer = (xer_sprint_string_t *) app_key;
   size_t string_remaining = string_buffer->string_size - string_buffer->string_index;
@@ -149,7 +142,7 @@ static int xer__print2s_NR (const void *buffer, size_t size, void *app_key)
   return 0;
 }
 
-int xer_sprint_NR (char *string, size_t string_size, asn_TYPE_descriptor_t *td, void *sptr)
+int xer_nr_sprint (char *string, size_t string_size, asn_TYPE_descriptor_t *td, void *sptr)
 {
   asn_enc_rval_t er;
   xer_sprint_string_t string_buffer;
@@ -158,7 +151,7 @@ int xer_sprint_NR (char *string, size_t string_size, asn_TYPE_descriptor_t *td,
   string_buffer.string_size = string_size;
   string_buffer.string_index = 0;
 
-  er = xer_encode(td, sptr, XER_F_BASIC, xer__print2s, &string_buffer);
+  er = xer_encode(td, sptr, XER_F_BASIC, xer__nr_print2s, &string_buffer);
 
   if (er.encoded < 0) {
     LOG_E(RRC, "xer_sprint encoding error (%zd)!", er.encoded);
@@ -175,7 +168,7 @@ int xer_sprint_NR (char *string, size_t string_size, asn_TYPE_descriptor_t *td,
 
 uint16_t get_adjacent_cell_id_NR(uint8_t Mod_id,uint8_t index)
 {
-  return(two_tier_hexagonal_adjacent_cellIds[Mod_id][index]);
+  return(two_tier_hexagonal_adjacent_nr_cellIds[Mod_id][index]);
 }
 /* This only works for the hexagonal topology...need a more general function for other topologies */
 
@@ -184,7 +177,7 @@ uint8_t get_adjacent_cell_mod_id_NR(uint16_t phyCellId)
   uint8_t i;
 
   for(i=0; i<7; i++) {
-    if(two_tier_hexagonal_cellIds[i] == phyCellId) {
+    if(two_tier_hexagonal_nr_cellIds[i] == phyCellId) {
       return i;
     }
   }
@@ -205,41 +198,44 @@ uint8_t do_MIB_NR(rrc_gNB_carrier_data_t *carrier,
 
   asn_enc_rval_t enc_rval;
 
-  BCCH_BCH_Message_t *mib=&carrier->mib
-  memset(mib,0,sizeof(BCCH_BCH_Message_t));
-  mib->message.present = BCCH_BCH_MessageType_PR_mib;
+  NR_BCCH_BCH_Message_t *mib = &carrier->mib;
+  memset(mib,0,sizeof(NR_BCCH_BCH_Message_t));
+  mib->message.present = NR_BCCH_BCH_MessageType_PR_mib;
   
+  mib->message.choice.mib = CALLOC(1,sizeof(struct NR_MIB));
+  memset(&mib->message.choice.mib,0,sizeof(struct NR_MIB));
+
   //36.331 SFN BIT STRING (SIZE (8)  , 38.331 SFN BIT STRING (SIZE (6))
   uint8_t sfn = (uint8_t)((frame>>4)&0x3f);
-  mib->message.choice.mib.systemFrameNumber.buf = &sfn;
-  mib->message.choice.mib.systemFrameNumber.size = 1;
-  mib->message.choice.mib.systemFrameNumber.bits_unused=0;
+  mib->message.choice.mib->systemFrameNumber.buf = &sfn;
+  mib->message.choice.mib->systemFrameNumber.size = 1;
+  mib->message.choice.mib->systemFrameNumber.bits_unused=0;
 
   //38.331 spare BIT STRING (SIZE (1))
-  uint8_t *spare= calloc(1, sizeof(uint8_t));
+  uint16_t *spare= calloc(1, sizeof(uint16_t));
   if (spare == NULL) abort();
-  mib->message.choice.mib.spare.buf = (uint8_t *)spare;
-  mib->message.choice.mib.spare.size = 1;
-  mib->message.choice.mib.spare.bits_unused = 7;  // This makes a spare of 1 bits
+  mib->message.choice.mib->spare.buf = (uint8_t *)spare;
+  mib->message.choice.mib->spare.size = 1;
+  mib->message.choice.mib->spare.bits_unused = 7;  // This makes a spare of 1 bits
 
-  mib->message.choice.mib.ssb_SubcarrierOffset = ssb_SubcarrierOffset;
-  mib->message.choice.mib.pdcch_ConfigSIB1 = pdcch_ConfigSIB1;
+  mib->message.choice.mib->ssb_SubcarrierOffset = ssb_SubcarrierOffset;
+  mib->message.choice.mib->pdcch_ConfigSIB1 = pdcch_ConfigSIB1;
   
   switch (subCarrierSpacingCommon) {
     case 15:
-      mib->message.choice.mib.subCarrierSpacingCommon = MIB__subCarrierSpacingCommon_scs15or60;
+      mib->message.choice.mib->subCarrierSpacingCommon = NR_MIB__subCarrierSpacingCommon_scs15or60;
       break;
 
     case 30:
-      mib->message.choice.mib.subCarrierSpacingCommon = MIB__subCarrierSpacingCommon_scs30or120;
+      mib->message.choice.mib->subCarrierSpacingCommon = NR_MIB__subCarrierSpacingCommon_scs30or120;
       break;
 
     case 60:
-      mib->message.choice.mib.subCarrierSpacingCommon = MIB__subCarrierSpacingCommon_scs15or60;
+      mib->message.choice.mib->subCarrierSpacingCommon = NR_MIB__subCarrierSpacingCommon_scs15or60;
       break;
 
     case 120:
-      mib->message.choice.mib.subCarrierSpacingCommon = MIB__subCarrierSpacingCommon_scs30or120;
+      mib->message.choice.mib->subCarrierSpacingCommon = NR_MIB__subCarrierSpacingCommon_scs30or120;
       break;
 
     default:
@@ -248,11 +244,11 @@ uint8_t do_MIB_NR(rrc_gNB_carrier_data_t *carrier,
 
     switch (dmrs_TypeA_Position) {
     case 2:
-      mib->message.choice.mib.dmrs_TypeA_Position = MIB__dmrs_TypeA_Position_pos2;
+      mib->message.choice.mib->dmrs_TypeA_Position = NR_MIB__dmrs_TypeA_Position_pos2;
       break;
 
     case 3:
-      mib->message.choice.mib.dmrs_TypeA_Position = MIB__dmrs_TypeA_Position_pos3;
+      mib->message.choice.mib->dmrs_TypeA_Position = NR_MIB__dmrs_TypeA_Position_pos3;
       break;
 
     default:
@@ -261,14 +257,15 @@ uint8_t do_MIB_NR(rrc_gNB_carrier_data_t *carrier,
   }
 
   //  assign_enum
-  mib->message.choice.mib.cellBarred = MIB__cellBarred_notBarred;
+  mib->message.choice.mib->cellBarred = NR_MIB__cellBarred_notBarred;
   //  assign_enum
-  mib->message.choice.mib.intraFreqReselection = MIB__intraFreqReselection_notAllowed;
+  mib->message.choice.mib->intraFreqReselection = NR_MIB__intraFreqReselection_notAllowed;
 
   
 
   //encode MIB to data
-  enc_rval = uper_encode_to_buffer(&asn_DEF_BCCH_BCH_Message,
+  enc_rval = uper_encode_to_buffer(&asn_DEF_NR_BCCH_BCH_Message,
+                                   NULL,
                                    (void*)mib,
                                    carrier->MIB,
                                    24);
@@ -283,217 +280,6 @@ uint8_t do_MIB_NR(rrc_gNB_carrier_data_t *carrier,
   return((enc_rval.encoded+7)/8);
 }
 
-//------------------------------------------------------------------------------
-
-uint8_t do_SIB1_NR(rrc_gNB_carrier_data_t *carrier,
-		              int Mod_id,
-                  int CC_id
-                  #if defined(ENABLE_ITTI)
-                  , gNB_RrcConfigurationReq *configuration
-                  #endif
-                  )
-{
-
-  //  SystemInformation_t systemInformation;
-  PLMN_IdentityInfo_t PLMN_identity_info;
-  MCC_MNC_Digit_t dummy_mcc[3],dummy_mnc[3];
-  asn_enc_rval_t enc_rval;
-  SchedulingInfo_t schedulingInfo;
-  SIB_Type_t sib_type;
-
-  uint8_t *buffer                      = carrier->SIB1;
-  BCCH_DL_SCH_Message_t *bcch_message  = &carrier->siblock1;
-  SIB1_t **sib1 = &carrier->sib1;
-
-  
-  memset(bcch_message,0,sizeof(BCCH_DL_SCH_Message_t));
-  bcch_message->message.present = BCCH_DL_SCH_MessageType_PR_c1;
-  bcch_message->message.choice.c1.present = BCCH_DL_SCH_MessageType__c1_PR_systemInformationBlockType1;
-  //  memcpy(&bcch_message.message.choice.c1.choice.systemInformationBlockType1,sib1,sizeof(SystemInformationBlockType1_t));
-
-  *sib1 = &bcch_message->message.choice.c1.choice.systemInformationBlockType1;
-
-  memset(&PLMN_identity_info,0,sizeof(PLMN_IdentityInfo_t));
-  memset(&schedulingInfo,0,sizeof(SchedulingInfo_t));
-  memset(&sib_type,0,sizeof(SIB_Type_t));
-
-
-
-  PLMN_identity_info.plmn_Identity.mcc = CALLOC(1,sizeof(*PLMN_identity_info.plmn_Identity.mcc));
-  memset(PLMN_identity_info.plmn_Identity.mcc,0,sizeof(*PLMN_identity_info.plmn_Identity.mcc));
-
-  asn_set_empty(&PLMN_identity_info.plmn_Identity.mcc->list);//.size=0;
-
-#if defined(ENABLE_ITTI)
-  dummy_mcc[0] = (configuration->mcc / 100) % 10;
-  dummy_mcc[1] = (configuration->mcc / 10) % 10;
-  dummy_mcc[2] = (configuration->mcc / 1) % 10;
-#else
-  dummy_mcc[0] = 0;
-  dummy_mcc[1] = 0;
-  dummy_mcc[2] = 1;
-#endif
-  ASN_SEQUENCE_ADD(&PLMN_identity_info.plmn_Identity.mcc->list,&dummy_mcc[0]);
-  ASN_SEQUENCE_ADD(&PLMN_identity_info.plmn_Identity.mcc->list,&dummy_mcc[1]);
-  ASN_SEQUENCE_ADD(&PLMN_identity_info.plmn_Identity.mcc->list,&dummy_mcc[2]);
-
-  PLMN_identity_info.plmn_Identity.mnc.list.size=0;
-  PLMN_identity_info.plmn_Identity.mnc.list.count=0;
-#if defined(ENABLE_ITTI)
-
-  if (configuration->mnc >= 100) {
-    dummy_mnc[0] = (configuration->mnc / 100) % 10;
-    dummy_mnc[1] = (configuration->mnc / 10) % 10;
-    dummy_mnc[2] = (configuration->mnc / 1) % 10;
-  } else {
-    if (configuration->mnc_digit_length == 2) {
-      dummy_mnc[0] = (configuration->mnc / 10) % 10;
-      dummy_mnc[1] = (configuration->mnc / 1) % 10;
-      dummy_mnc[2] = 0xf;
-    } else {
-      dummy_mnc[0] = (configuration->mnc / 100) % 100;
-      dummy_mnc[1] = (configuration->mnc / 10) % 10;
-      dummy_mnc[2] = (configuration->mnc / 1) % 10;
-    }
-  }
-
-#else
-  dummy_mnc[0] = 0;
-  dummy_mnc[1] = 1;
-  dummy_mnc[2] = 0xf;
-#endif
-  ASN_SEQUENCE_ADD(&PLMN_identity_info.plmn_Identity.mnc.list,&dummy_mnc[0]);
-  ASN_SEQUENCE_ADD(&PLMN_identity_info.plmn_Identity.mnc.list,&dummy_mnc[1]);
-
-  if (dummy_mnc[2] != 0xf) {
-    ASN_SEQUENCE_ADD(&PLMN_identity_info.plmn_Identity.mnc.list,&dummy_mnc[2]);
-  }
-
-  //assign_enum(&PLMN_identity_info.cellReservedForOperatorUse,PLMN_IdentityInfo__cellReservedForOperatorUse_notReserved);
-  PLMN_identity_info.cellReservedForOperatorUse=PLMN_IdentityInfo__cellReservedForOperatorUse_notReserved;
-
-  ASN_SEQUENCE_ADD(&(*sib1)->cellAccessRelatedInfo.plmn_IdentityList.list,&PLMN_identity_info);
-
-
-  // 16 bits
-  (*sib1)->cellAccessRelatedInfo.trackingAreaCode.buf = MALLOC(2);
-#if defined(ENABLE_ITTI)
-  (*sib1)->cellAccessRelatedInfo.trackingAreaCode.buf[0] = (configuration->tac >> 8) & 0xff;
-  (*sib1)->cellAccessRelatedInfo.trackingAreaCode.buf[1] = (configuration->tac >> 0) & 0xff;
-#else
-  (*sib1)->cellAccessRelatedInfo.trackingAreaCode.buf[0] = 0x00;
-  (*sib1)->cellAccessRelatedInfo.trackingAreaCode.buf[1] = 0x01;
-#endif
-  (*sib1)->cellAccessRelatedInfo.trackingAreaCode.size=2;
-  (*sib1)->cellAccessRelatedInfo.trackingAreaCode.bits_unused=0;
-
-  // 28 bits
-  (*sib1)->cellAccessRelatedInfo.cellIdentity.buf = MALLOC(8);
-#if defined(ENABLE_ITTI)
-  (*sib1)->cellAccessRelatedInfo.cellIdentity.buf[0] = (configuration->cell_identity >> 20) & 0xff;
-  (*sib1)->cellAccessRelatedInfo.cellIdentity.buf[1] = (configuration->cell_identity >> 12) & 0xff;
-  (*sib1)->cellAccessRelatedInfo.cellIdentity.buf[2] = (configuration->cell_identity >>  4) & 0xff;
-  (*sib1)->cellAccessRelatedInfo.cellIdentity.buf[3] = (configuration->cell_identity <<  4) & 0xf0;
-#else
-  (*sib1)->cellAccessRelatedInfo.cellIdentity.buf[0] = 0x00;
-  (*sib1)->cellAccessRelatedInfo.cellIdentity.buf[1] = 0x00;
-  (*sib1)->cellAccessRelatedInfo.cellIdentity.buf[2] = 0x00;
-  (*sib1)->cellAccessRelatedInfo.cellIdentity.buf[3] = 0x10;
-#endif
-  (*sib1)->cellAccessRelatedInfo.cellIdentity.size=4;
-  (*sib1)->cellAccessRelatedInfo.cellIdentity.bits_unused=4;
-
-  //  assign_enum(&(*sib1)->cellAccessRelatedInfo.cellBarred,SystemInformationBlockType1__cellAccessRelatedInfo__cellBarred_notBarred);
-  (*sib1)->cellAccessRelatedInfo.cellBarred=SystemInformationBlockType1__cellAccessRelatedInfo__cellBarred_notBarred;
-
-  //  assign_enum(&(*sib1)->cellAccessRelatedInfo.intraFreqReselection,SystemInformationBlockType1__cellAccessRelatedInfo__intraFreqReselection_allowed);
-  (*sib1)->cellAccessRelatedInfo.intraFreqReselection=SystemInformationBlockType1__cellAccessRelatedInfo__intraFreqReselection_notAllowed;
-  (*sib1)->cellAccessRelatedInfo.csg_Indication=0;
-
-  (*sib1)->cellSelectionInfo.q_RxLevMin=-65;
-  (*sib1)->cellSelectionInfo.q_RxLevMinOffset=NULL;
-  //(*sib1)->p_Max = CALLOC(1, sizeof(P_Max_t));
-  //*((*sib1)->p_Max) = 23;
-  (*sib1)->freqBandIndicator =
-#if defined(ENABLE_ITTI)
-    configuration->eutra_band[CC_id];
-#else
-    7;
-#endif
-
-  schedulingInfo.si_Periodicity=SchedulingInfo__si_Periodicity_rf8;
-
-  // This is for SIB2/3
-  sib_type=SIB_Type_sibType3;
-  ASN_SEQUENCE_ADD(&schedulingInfo.sib_MappingInfo.list,&sib_type);
-  ASN_SEQUENCE_ADD(&(*sib1)->schedulingInfoList.list,&schedulingInfo);
-
-  //  ASN_SEQUENCE_ADD(&schedulingInfo.sib_MappingInfo.list,NULL);
-
-#if defined(ENABLE_ITTI)
-
-  if (configuration->frame_type[CC_id] == TDD)
-#endif
-  {
-    (*sib1)->tdd_Config =                             CALLOC(1,sizeof(struct TDD_Config));
-
-    (*sib1)->tdd_Config->subframeAssignment =
-#if defined(ENABLE_ITTI)
-      configuration->tdd_config[CC_id];
-#else
-      3;
-#endif
-
-    (*sib1)->tdd_Config->specialSubframePatterns =
-#if defined(ENABLE_ITTI)
-      configuration->tdd_config_s[CC_id];
-#else
-    0;
-#endif
-  }
-
-  (*sib1)->si_WindowLength=SystemInformationBlockType1__si_WindowLength_ms20;
-  (*sib1)->systemInfoValueTag=0;
-  //  (*sib1).nonCriticalExtension = calloc(1,sizeof(*(*sib1).nonCriticalExtension));
-
-#ifdef XER_PRINT
-  xer_fprint(stdout, &asn_DEF_BCCH_DL_SCH_Message, (void*)bcch_message);
-#endif
-  enc_rval = uper_encode_to_buffer(&asn_DEF_BCCH_DL_SCH_Message,
-                                   (void*)bcch_message,
-                                   buffer,
-                                   100);
-  AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n",
-               enc_rval.failed_type->name, enc_rval.encoded);
-
-#if defined(ENABLE_ITTI)
-# if !defined(DISABLE_XER_SPRINT)
-  {
-    char        message_string[10000];
-    size_t      message_string_size;
-
-    if ((message_string_size = xer_sprint(message_string, sizeof(message_string), &asn_DEF_BCCH_DL_SCH_Message, (void *)bcch_message)) > 0) {
-      MessageDef *msg_p;
-
-      msg_p = itti_alloc_new_message_sized (TASK_RRC_ENB, RRC_DL_BCCH, message_string_size + sizeof (IttiMsgText));
-      msg_p->ittiMsg.rrc_dl_bcch.size = message_string_size;
-      memcpy(&msg_p->ittiMsg.rrc_dl_bcch.text, message_string, message_string_size);
-      itti_send_msg_to_task(TASK_UNKNOWN, Mod_id, msg_p);
-    }
-  }
-# endif
-#endif
-
-#ifdef USER_MODE
-  LOG_D(RRC,"[eNB] SystemInformationBlockType1 Encoded %zd bits (%zd bytes)\n",enc_rval.encoded,(enc_rval.encoded+7)/8);
-#endif
-
-  if (enc_rval.encoded==-1) {
-    return(-1);
-  }
-
-  return((enc_rval.encoded+7)/8);
-}
 
 void do_SERVINGCELLCONFIGCOMMON(uint8_t Mod_id,
                                    int CC_id
@@ -503,50 +289,53 @@ void do_SERVINGCELLCONFIGCOMMON(uint8_t Mod_id,
                                   )
 { 
   // ServingCellConfigCommon //
-  struct FrequencyInfoDL    **frequencyinfordl           = &RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->frequencyInfoDL;
-  BWP_DownlinkCommon_t      **bwp_downlinkcommon         = &RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->initialDownlinkBWP;
-  UplinkConfigCommon_t      **uplinkconfigcommon         = &RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->uplinkConfigCommon;
-  UplinkConfigCommon_t      **supplementaryuplinkconfig  = &RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->supplementaryUplinkConfig; 
+  struct NR_FrequencyInfoDL    **frequencyinfordl           = &RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->frequencyInfoDL;
+  NR_BWP_DownlinkCommon_t      **bwp_downlinkcommon         = &RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->initialDownlinkBWP;
+  NR_UplinkConfigCommon_t      **uplinkconfigcommon         = &RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->uplinkConfigCommon;
+  NR_UplinkConfigCommon_t      **supplementaryuplinkconfig  = &RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->supplementaryUplinkConfig; 
   
+  struct NR_ServingCellConfigCommon__ssb_PositionsInBurst  **ssb_positionsinburst = &RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->ssb_PositionsInBurst;
   /////RateMatchPatternLTE_CRS_t   **lte_crs_tomatcharound = &RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->lte_CRS_ToMatchAround;
   
-  struct ServingCellConfigCommon__rateMatchPatternToAddModList **ratematchpatterntoaddmodlist = &RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->rateMatchPatternToAddModList;
-  struct RateMatchPattern *ratematchpattern; 
-  struct ServingCellConfigCommon__rateMatchPatternToReleaseList **ratematchpatterntoreleaselist = &RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->rateMatchPatternToReleaseList;
-  RateMatchPatternId_t *ratematchpatternid;
+  struct NR_ServingCellConfigCommon__rateMatchPatternToAddModList  **ratematchpatterntoaddmodlist = &RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->rateMatchPatternToAddModList;
+  struct NR_RateMatchPattern                                       *ratematchpattern; 
+  struct NR_ServingCellConfigCommon__rateMatchPatternToReleaseList **ratematchpatterntoreleaselist = &RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->rateMatchPatternToReleaseList;
+  NR_RateMatchPatternId_t                                          *ratematchpatternid;
 
-  struct TDD_UL_DL_ConfigCommon **tdd_ul_dl_configurationcommon;
-  struct TDD_UL_DL_ConfigCommon **tdd_ul_dl_configurationcommon2;
+  struct NR_TDD_UL_DL_ConfigCommon                                 **tdd_ul_dl_configurationcommon;
+  struct NR_TDD_UL_DL_ConfigCommon                                 **tdd_ul_dl_configurationcommon2;
 
   // FrequencyInfoDL //
-  FreqBandIndicatorNR_t                     *dl_frequencyBandList;
-  struct SCS_SpecificCarrier                *dl_scs_SpecificCarrierList;
+  NR_FreqBandIndicatorNR_t                        *dl_frequencyBandList;
+  struct NR_SCS_SpecificCarrier                   *dl_scs_SpecificCarrierList;
   // BWP_DownlinkCommon //
-  ControlResourceSet_t                      *bwp_dl_controlresourceset;
-  TCI_StateId_t                             *TCI_StateId;
-  SearchSpace_t                             *bwp_dl_searchspace;
-  struct PDSCH_TimeDomainResourceAllocation *bwp_dl_timedomainresourceallocation;
+  NR_ControlResourceSet_t                         *bwp_dl_controlresourceset;
+  NR_TCI_StateId_t                                *TCI_StateId;
+  NR_SearchSpace_t                                *bwp_dl_searchspace;
+  struct NR_PDSCH_TimeDomainResourceAllocation    *bwp_dl_timedomainresourceallocation;
   // UplinkConfigCommon //
-  FreqBandIndicatorNR_t                     *ul_frequencyBandList;
-  struct SCS_SpecificCarrier                *ul_scs_SpecificCarrierList;
+  NR_FreqBandIndicatorNR_t                        *ul_frequencyBandList;
+  struct NR_SCS_SpecificCarrier                   *ul_scs_SpecificCarrierList;
   // PUSCH_ConfigCommon //
-  struct PUSCH_TimeDomainResourceAllocation *pusch_configcommontimedomainresourceallocation;
+  struct NR_PUSCH_TimeDomainResourceAllocation    *pusch_configcommontimedomainresourceallocation;
   
   //------------------------------------Start Fill ServingCellConfigCommon------------------------------------//
-  RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->physCellId = configuration->Nid_cell[CC_id];
+  RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->physCellId = CALLOC(1,sizeof(NR_PhysCellId_t));
+  memset(&RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->physCellId,0,sizeof(NR_PhysCellId_t));
+  *(RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->physCellId) = configuration->Nid_cell[CC_id];
 
   (*ssb_positionsinburst)->present = configuration->ServingCellConfigCommon_ssb_PositionsInBurst_PR[CC_id];
-  if((*ssb_positionsinburst)->present == ServingCellConfigCommon__ssb_PositionsInBurst_PR_shortBitmap){
+  if((*ssb_positionsinburst)->present == NR_ServingCellConfigCommon__ssb_PositionsInBurst_PR_shortBitmap){
     (*ssb_positionsinburst)->choice.shortBitmap.buf = MALLOC(1);
     (*ssb_positionsinburst)->choice.shortBitmap.size = 1;
     (*ssb_positionsinburst)->choice.shortBitmap.bits_unused = 4;
     (*ssb_positionsinburst)->choice.shortBitmap.buf[0] = 0x0f;
-  }else if((*ssb_positionsinburst)->present == ServingCellConfigCommon__ssb_PositionsInBurst_PR_mediumBitmap){
+  }else if((*ssb_positionsinburst)->present == NR_ServingCellConfigCommon__ssb_PositionsInBurst_PR_mediumBitmap){
     (*ssb_positionsinburst)->choice.mediumBitmap.buf = MALLOC(1);
     (*ssb_positionsinburst)->choice.mediumBitmap.size = 1;
     (*ssb_positionsinburst)->choice.mediumBitmap.bits_unused = 0;
     (*ssb_positionsinburst)->choice.mediumBitmap.buf[0] = 0xff;
-  }else if((*ssb_positionsinburst)->present == ServingCellConfigCommon__ssb_PositionsInBurst_PR_longBitmap){
+  }else if((*ssb_positionsinburst)->present == NR_ServingCellConfigCommon__ssb_PositionsInBurst_PR_longBitmap){
     (*ssb_positionsinburst)->choice.longBitmap.buf = MALLOC(8);
     (*ssb_positionsinburst)->choice.longBitmap.size = 8;
     (*ssb_positionsinburst)->choice.longBitmap.bits_unused = 0;
@@ -560,118 +349,124 @@ void do_SERVINGCELLCONFIGCOMMON(uint8_t Mod_id,
     (*ssb_positionsinburst)->choice.longBitmap.buf[7] = 0xff;    
   }
 
-  RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->ssb_periodicityServingCell = configuration->ServingCellConfigCommon_ssb_periodicityServingCell[CC_id];
+  RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->ssb_periodicityServingCell = CALLOC(1,sizeof(long));
+  *(RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->ssb_periodicityServingCell) = configuration->ServingCellConfigCommon_ssb_periodicityServingCell[CC_id];
   RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->dmrs_TypeA_Position        = configuration->ServingCellConfigCommon_dmrs_TypeA_Position[CC_id];
   
-  ratematchpattern = CALLOC(1,sizeof(struct RateMatchPattern));
-  memset(&ratematchpattern,0,sizeof(struct RateMatchPattern));
+  ratematchpattern = CALLOC(1,sizeof(struct NR_RateMatchPattern));
+  memset(&ratematchpattern,0,sizeof(struct NR_RateMatchPattern));
   ratematchpattern->rateMatchPatternId = configuration->rateMatchPatternId[CC_id];
   ratematchpattern->patternType.present  = configuration->RateMatchPattern_patternType[CC_id];
-  if(ratematchpattern->patternType.present == RateMatchPattern__patternType_PR_bitmaps){
+  if(ratematchpattern->patternType.present == NR_RateMatchPattern__patternType_PR_bitmaps){
+
+    ratematchpattern->patternType.choice.bitmaps = CALLOC(1,sizeof(struct NR_RateMatchPattern__patternType__bitmaps));
+    memset(&ratematchpattern->patternType.choice.bitmaps,0,sizeof(struct NR_RateMatchPattern__patternType__bitmaps));
 
-    ratematchpattern->patternType.choice.bitmaps.resourceBlocks.buf = MALLOC(35);
-    ratematchpattern->patternType.choice.bitmaps.resourceBlocks.size = 35;
-    ratematchpattern->patternType.choice.bitmaps.resourceBlocks.bits_unused = 5;
-    ratematchpattern->patternType.choice.bitmaps.resourceBlocks.buf[0] = 0x07;
+    ratematchpattern->patternType.choice.bitmaps->resourceBlocks.buf = MALLOC(35);
+    ratematchpattern->patternType.choice.bitmaps->resourceBlocks.size = 35;
+    ratematchpattern->patternType.choice.bitmaps->resourceBlocks.bits_unused = 5;
+    ratematchpattern->patternType.choice.bitmaps->resourceBlocks.buf[0] = 0x07;
     for (int i =1;i<=34;i++ ){
-      ratematchpattern->patternType.choice.bitmaps.resourceBlocks.buf[i] =0xff;
+      ratematchpattern->patternType.choice.bitmaps->resourceBlocks.buf[i] =0xff;
     }
 
-    ratematchpattern->patternType.choice.bitmaps.symbolsInResourceBlock.present = configuration->symbolsInResourceBlock[CC_id];
-    if(ratematchpattern->patternType.choice.bitmaps.symbolsInResourceBlock.present == RateMatchPattern__patternType__bitmaps__symbolsInResourceBlock_PR_oneSlot){
-      ratematchpattern->patternType.choice.bitmaps.symbolsInResourceBlock.choice.oneSlot.buf=MALLOC(2);
-      ratematchpattern->patternType.choice.bitmaps.symbolsInResourceBlock.choice.oneSlot.size=2;
-      ratematchpattern->patternType.choice.bitmaps.symbolsInResourceBlock.choice.oneSlot.bits_unused=2;
-      ratematchpattern->patternType.choice.bitmaps.symbolsInResourceBlock.choice.oneSlot.buf[0]=0x3f;
-      ratematchpattern->patternType.choice.bitmaps.symbolsInResourceBlock.choice.oneSlot.buf[1]=0xff;      
-    }else if(ratematchpattern->patternType.choice.bitmaps.symbolsInResourceBlock.present == RateMatchPattern__patternType__bitmaps__symbolsInResourceBlock_PR_twoSlots){
-      ratematchpattern->patternType.choice.bitmaps.symbolsInResourceBlock.choice.twoSlots.buf=MALLOC(4);
-      ratematchpattern->patternType.choice.bitmaps.symbolsInResourceBlock.choice.twoSlots.size=4;
-      ratematchpattern->patternType.choice.bitmaps.symbolsInResourceBlock.choice.twoSlots.bits_unused=4;
-      ratematchpattern->patternType.choice.bitmaps.symbolsInResourceBlock.choice.twoSlots.buf[0]=0x0f;
-      ratematchpattern->patternType.choice.bitmaps.symbolsInResourceBlock.choice.twoSlots.buf[1]=0xff;
-      ratematchpattern->patternType.choice.bitmaps.symbolsInResourceBlock.choice.twoSlots.buf[2]=0xff;
-      ratematchpattern->patternType.choice.bitmaps.symbolsInResourceBlock.choice.twoSlots.buf[3]=0xff;      
+    ratematchpattern->patternType.choice.bitmaps->symbolsInResourceBlock.present = configuration->symbolsInResourceBlock[CC_id];
+    if(ratematchpattern->patternType.choice.bitmaps->symbolsInResourceBlock.present == NR_RateMatchPattern__patternType__bitmaps__symbolsInResourceBlock_PR_oneSlot){
+      ratematchpattern->patternType.choice.bitmaps->symbolsInResourceBlock.choice.oneSlot.buf=MALLOC(2);
+      ratematchpattern->patternType.choice.bitmaps->symbolsInResourceBlock.choice.oneSlot.size=2;
+      ratematchpattern->patternType.choice.bitmaps->symbolsInResourceBlock.choice.oneSlot.bits_unused=2;
+      ratematchpattern->patternType.choice.bitmaps->symbolsInResourceBlock.choice.oneSlot.buf[0]=0x3f;
+      ratematchpattern->patternType.choice.bitmaps->symbolsInResourceBlock.choice.oneSlot.buf[1]=0xff;      
+    }else if(ratematchpattern->patternType.choice.bitmaps->symbolsInResourceBlock.present == NR_RateMatchPattern__patternType__bitmaps__symbolsInResourceBlock_PR_twoSlots){
+      ratematchpattern->patternType.choice.bitmaps->symbolsInResourceBlock.choice.twoSlots.buf=MALLOC(4);
+      ratematchpattern->patternType.choice.bitmaps->symbolsInResourceBlock.choice.twoSlots.size=4;
+      ratematchpattern->patternType.choice.bitmaps->symbolsInResourceBlock.choice.twoSlots.bits_unused=4;
+      ratematchpattern->patternType.choice.bitmaps->symbolsInResourceBlock.choice.twoSlots.buf[0]=0x0f;
+      ratematchpattern->patternType.choice.bitmaps->symbolsInResourceBlock.choice.twoSlots.buf[1]=0xff;
+      ratematchpattern->patternType.choice.bitmaps->symbolsInResourceBlock.choice.twoSlots.buf[2]=0xff;
+      ratematchpattern->patternType.choice.bitmaps->symbolsInResourceBlock.choice.twoSlots.buf[3]=0xff;      
     }
 
-    ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern = CALLOC(1,sizeof(struct RateMatchPattern__patternType__bitmaps__periodicityAndPattern));
-    ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->present = configuration->periodicityAndPattern[CC_id];
-    if(ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->present == RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n2){
-      ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n2.buf = MALLOC(1);
-      ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n2.size = 1;
-      ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n2.bits_unused = 6;
-      ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n2.buf[0] =0x03;
-    }else if(ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->present == RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n4){
-      ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n4.buf = MALLOC(1);
-      ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n4.size = 1;
-      ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n4.bits_unused = 4;
-      ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n4.buf[0] = 0x0f;
-    }else if(ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->present == RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n5){
-      ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n5.buf = MALLOC(1);
-      ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n5.size = 1;
-      ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n5.bits_unused = 3;
-      ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n5.buf[0] = 0x1f;   
-    }else if(ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->present == RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n8){
-      ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n8.buf = MALLOC(1);
-      ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n8.size = 1;
-      ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n8.bits_unused = 0;
-      ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n8.buf[0] = 0xff;    
-    }else if(ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->present == RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n10){
-      ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n10.buf = MALLOC(2);
-      ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n10.size = 2;
-      ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n10.bits_unused = 6;
-      ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n10.buf[0] = 0x03;
-      ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n10.buf[1] = 0xff;    
-    }else if(ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->present == RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n20){
-      ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n20.buf = MALLOC(3);
-      ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n20.size = 3;
-      ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n20.bits_unused = 4;
-      ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n20.buf[0] = 0x0f;
-      ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n20.buf[1] = 0xff;
-      ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n20.buf[2] = 0xff;   
-    }else if(ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->present == RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n40){
-      ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n40.buf = MALLOC(5)
-      ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n40.size = 5;
-      ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n40.bits_unused = 0;
-      ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n40.buf[0] = 0xff;
-      ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n40.buf[1] = 0xff; 
-      ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n40.buf[2] = 0xff;
-      ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n40.buf[3] = 0xff;
-      ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n40.buf[4] = 0xff;     
+    ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern = CALLOC(1,sizeof(struct NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern));
+    ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->present = configuration->periodicityAndPattern[CC_id];
+    if(ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->present == NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n2){
+      ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n2.buf = MALLOC(1);
+      ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n2.size = 1;
+      ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n2.bits_unused = 6;
+      ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n2.buf[0] =0x03;
+    }else if(ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->present == NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n4){
+      ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n4.buf = MALLOC(1);
+      ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n4.size = 1;
+      ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n4.bits_unused = 4;
+      ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n4.buf[0] = 0x0f;
+    }else if(ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->present == NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n5){
+      ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n5.buf = MALLOC(1);
+      ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n5.size = 1;
+      ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n5.bits_unused = 3;
+      ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n5.buf[0] = 0x1f;   
+    }else if(ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->present == NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n8){
+      ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n8.buf = MALLOC(1);
+      ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n8.size = 1;
+      ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n8.bits_unused = 0;
+      ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n8.buf[0] = 0xff;    
+    }else if(ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->present == NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n10){
+      ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n10.buf = MALLOC(2);
+      ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n10.size = 2;
+      ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n10.bits_unused = 6;
+      ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n10.buf[0] = 0x03;
+      ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n10.buf[1] = 0xff;    
+    }else if(ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->present == NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n20){
+      ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n20.buf = MALLOC(3);
+      ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n20.size = 3;
+      ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n20.bits_unused = 4;
+      ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n20.buf[0] = 0x0f;
+      ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n20.buf[1] = 0xff;
+      ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n20.buf[2] = 0xff;   
+    }else if(ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->present == NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n40){
+      ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n40.buf = MALLOC(5);
+      ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n40.size = 5;
+      ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n40.bits_unused = 0;
+      ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n40.buf[0] = 0xff;
+      ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n40.buf[1] = 0xff; 
+      ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n40.buf[2] = 0xff;
+      ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n40.buf[3] = 0xff;
+      ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n40.buf[4] = 0xff;     
     }
 
-  }else if(ratematchpattern->patternType.present == RateMatchPattern__patternType_PR_controlResourceSet){
-    ratematchpattern->patternType.choice.controlResourceSet = RateMatchPattern_controlResourceSet[CC_id];
+  }else if(ratematchpattern->patternType.present == NR_RateMatchPattern__patternType_PR_controlResourceSet){
+    ratematchpattern->patternType.choice.controlResourceSet = configuration->RateMatchPattern_controlResourceSet[CC_id];
   }
 
-  ratematchpattern->subcarrierSpacing = CALLOC(1,sizeof(SubcarrierSpacing_t));
-  ratematchpattern->subcarrierSpacing = configuration->RateMatchPattern_subcarrierSpacing[CC_id];
+  ratematchpattern->subcarrierSpacing = CALLOC(1,sizeof(NR_SubcarrierSpacing_t));
+  *(ratematchpattern->subcarrierSpacing) = configuration->RateMatchPattern_subcarrierSpacing[CC_id];
   ratematchpattern->mode = configuration->RateMatchPattern_mode[CC_id];
 
   ASN_SEQUENCE_ADD(&(*ratematchpatterntoaddmodlist)->list,&ratematchpattern);
   
-  ratematchpatternid = CALLOC(1,sizeof(RateMatchPatternId_t));
-  memset(&ratematchpatternid,0,sizeof(RateMatchPatternId_t));
-  ratematchpatternid = configuration->rateMatchPatternId[CC_id];
+  ratematchpatternid = CALLOC(1,sizeof(NR_RateMatchPatternId_t));
+  memset(&ratematchpatternid,0,sizeof(NR_RateMatchPatternId_t));
+  *(ratematchpatternid) = configuration->rateMatchPatternId[CC_id];
   ASN_SEQUENCE_ADD(&(*ratematchpatterntoreleaselist)->list,&ratematchpatternid);
 
-  RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->subcarrierSpacing = configuration->NIA_SubcarrierSpacing[CC_id];
+  RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->subcarrierSpacing = CALLOC(1,sizeof(NR_SubcarrierSpacing_t));
+  *(RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->subcarrierSpacing) = configuration->NIA_SubcarrierSpacing[CC_id];
+
   RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->ss_PBCH_BlockPower = configuration->ServingCellConfigCommon_ss_PBCH_BlockPower[CC_id];
 
   //Fill  FrequencyInfoDL //
   (*frequencyinfordl)->absoluteFrequencySSB = configuration->absoluteFrequencySSB[CC_id];
   (*frequencyinfordl)->ssb_SubcarrierOffset = CALLOC(1,sizeof(long));
-  (*frequencyinfordl)->ssb_SubcarrierOffset = configuration->ssb_SubcarrierOffset[CC_id];  
+  *((*frequencyinfordl)->ssb_SubcarrierOffset) = configuration->ssb_SubcarrierOffset[CC_id];  
 
-  dl_frequencyBandList = CALLOC(1,sizeof(FreqBandIndicatorNR_t));
-  memset(&dl_frequencyBandList,0,sizeof(FreqBandIndicatorNR_t));
-  dl_frequencyBandList = configuration->DL_FreqBandIndicatorNR[CC_id];
+  dl_frequencyBandList = CALLOC(1,sizeof(NR_FreqBandIndicatorNR_t));
+  memset(&dl_frequencyBandList,0,sizeof(NR_FreqBandIndicatorNR_t));
+  *(dl_frequencyBandList) = configuration->DL_FreqBandIndicatorNR[CC_id];
   ASN_SEQUENCE_ADD(&(*frequencyinfordl)->frequencyBandList.list,&dl_frequencyBandList);
 
   (*frequencyinfordl)->absoluteFrequencyPointA = configuration->DL_absoluteFrequencyPointA[CC_id];
   
-  dl_scs_SpecificCarrierList = CALLOC(1,sizeof(struct SCS_SpecificCarrier));
-  memset(&dl_scs_SpecificCarrierList,0,sizeof(struct SCS_SpecificCarrier));
+  dl_scs_SpecificCarrierList = CALLOC(1,sizeof(struct NR_SCS_SpecificCarrier));
+  memset(&dl_scs_SpecificCarrierList,0,sizeof(struct NR_SCS_SpecificCarrier));
   dl_scs_SpecificCarrierList->offsetToCarrier    = configuration->DL_offsetToCarrier[CC_id];
   dl_scs_SpecificCarrierList->subcarrierSpacing  = configuration->DL_SCS_SubcarrierSpacing[CC_id];
   dl_scs_SpecificCarrierList->k0                 = configuration->DL_SCS_SpecificCarrier_k0[CC_id];
@@ -684,26 +479,29 @@ void do_SERVINGCELLCONFIGCOMMON(uint8_t Mod_id,
 
   if(configuration->DL_BWP_prefix_type[CC_id]){
     (*bwp_downlinkcommon)->genericParameters.cyclicPrefix = CALLOC(1,sizeof(long));
-    (*bwp_downlinkcommon)->genericParameters.cyclicPrefix = BWP__cyclicPrefix_extended;
+    (*bwp_downlinkcommon)->genericParameters.cyclicPrefix = NR_BWP__cyclicPrefix_extended;
   }
   //Fill  BWP_DownlinkCommon  ->  pdcch_ConfigCommon  //
-  (*bwp_downlinkcommon)->pdcch_ConfigCommon                                     = CALLOC(1,sizeof(struct PDCCH_ConfigCommon));
-  (*bwp_downlinkcommon)->pdcch_ConfigCommon->searchSpaceSIB1                    = CALLOC(1,sizeof(SearchSpaceId_t));
-  (*bwp_downlinkcommon)->pdcch_ConfigCommon->searchSpaceOtherSystemInformation  = CALLOC(1,sizeof(SearchSpaceId_t));
-  (*bwp_downlinkcommon)->pdcch_ConfigCommon->pagingSearchSpace                  = CALLOC(1,sizeof(SearchSpaceId_t));
-  (*bwp_downlinkcommon)->pdcch_ConfigCommon->ra_SearchSpace                     = CALLOC(1,sizeof(SearchSpaceId_t));
-  (*bwp_downlinkcommon)->pdcch_ConfigCommon->ra_ControlResourceSet              = CALLOC(1,sizeof(ControlResourceSetId_t));
-
-  (*bwp_downlinkcommon)->pdcch_ConfigCommon->searchSpaceSIB1                    = configuration->searchSpaceSIB1[CC_id];
-  (*bwp_downlinkcommon)->pdcch_ConfigCommon->searchSpaceOtherSystemInformation  = configuration->searchSpaceOtherSystemInformation[CC_id];
-  (*bwp_downlinkcommon)->pdcch_ConfigCommon->pagingSearchSpace                  = configuration->pagingSearchSpace[CC_id];
-  (*bwp_downlinkcommon)->pdcch_ConfigCommon->ra_SearchSpace                     = configuration->ra_SearchSpace[CC_id];
-  (*bwp_downlinkcommon)->pdcch_ConfigCommon->ra_ControlResourceSet              = configuration->rach_ra_ControlResourceSet[CC_id];
+  (*bwp_downlinkcommon)->pdcch_ConfigCommon                                     = CALLOC(1,sizeof(struct NR_SetupRelease_PDCCH_ConfigCommon));
+  (*bwp_downlinkcommon)->pdcch_ConfigCommon->present                            = NR_SetupRelease_PDCCH_ConfigCommon_PR_setup;
+  (*bwp_downlinkcommon)->pdcch_ConfigCommon->choice.setup                       = CALLOC(1,sizeof(struct NR_PDCCH_ConfigCommon));
+
+  (*bwp_downlinkcommon)->pdcch_ConfigCommon->choice.setup->searchSpaceSIB1                    = CALLOC(1,sizeof(NR_SearchSpaceId_t));
+  (*bwp_downlinkcommon)->pdcch_ConfigCommon->choice.setup->searchSpaceOtherSystemInformation  = CALLOC(1,sizeof(NR_SearchSpaceId_t));
+  (*bwp_downlinkcommon)->pdcch_ConfigCommon->choice.setup->pagingSearchSpace                  = CALLOC(1,sizeof(NR_SearchSpaceId_t));
+  (*bwp_downlinkcommon)->pdcch_ConfigCommon->choice.setup->ra_SearchSpace                     = CALLOC(1,sizeof(NR_SearchSpaceId_t));
+  (*bwp_downlinkcommon)->pdcch_ConfigCommon->choice.setup->ra_ControlResourceSet              = CALLOC(1,sizeof(NR_ControlResourceSetId_t));
+
+  *((*bwp_downlinkcommon)->pdcch_ConfigCommon->choice.setup->searchSpaceSIB1)                    = configuration->searchSpaceSIB1[CC_id];
+  *((*bwp_downlinkcommon)->pdcch_ConfigCommon->choice.setup->searchSpaceOtherSystemInformation)  = configuration->searchSpaceOtherSystemInformation[CC_id];
+  *((*bwp_downlinkcommon)->pdcch_ConfigCommon->choice.setup->pagingSearchSpace)                  = configuration->pagingSearchSpace[CC_id];
+  *((*bwp_downlinkcommon)->pdcch_ConfigCommon->choice.setup->ra_SearchSpace)                     = configuration->ra_SearchSpace[CC_id];
+  *((*bwp_downlinkcommon)->pdcch_ConfigCommon->choice.setup->ra_ControlResourceSet)              = configuration->rach_ra_ControlResourceSet[CC_id];
 
   //Fill  BWP_DownlinkCommon  ->  pdcch_ConfigCommon  ->  ControlResourceSet list //
-  (*bwp_downlinkcommon)->pdcch_ConfigCommon->commonControlResourcesSets = CALLOC(1,sizeof(struct PDCCH_ConfigCommon__commonControlResourcesSets));
-  bwp_dl_controlresourceset = CALLOC(1,sizeof(ControlResourceSet_t));
-  memset(&bwp_dl_controlresourceset,0,sizeof(ControlResourceSet_t));
+  (*bwp_downlinkcommon)->pdcch_ConfigCommon->choice.setup->commonControlResourcesSets = CALLOC(1,sizeof(struct NR_PDCCH_ConfigCommon__commonControlResourcesSets));
+  bwp_dl_controlresourceset = CALLOC(1,sizeof(NR_ControlResourceSet_t));
+  memset(&bwp_dl_controlresourceset,0,sizeof(NR_ControlResourceSet_t));
   bwp_dl_controlresourceset->controlResourceSetId      = configuration->PDCCH_common_controlResourceSetId[CC_id];
   //BIT STRING (SIZE (45))
   bwp_dl_controlresourceset->frequencyDomainResources.buf =MALLOC(6);
@@ -721,63 +519,64 @@ void do_SERVINGCELLCONFIGCOMMON(uint8_t Mod_id,
 
   bwp_dl_controlresourceset->cce_REG_MappingType.present = configuration->PDCCH_cce_REG_MappingType[CC_id];
 
-  if(bwp_dl_controlresourceset->cce_REG_MappingType == ControlResourceSet__cce_REG_MappingType_PR_interleaved ){
-    bwp_dl_controlresourceset->cce_REG_MappingType.choice.interleaved.reg_BundleSize    = configuration->PDCCH_reg_BundleSize[CC_id];
-    bwp_dl_controlresourceset->cce_REG_MappingType.choice.interleaved.interleaverSize   = configuration->PDCCH_interleaverSize[CC_id];
-    bwp_dl_controlresourceset->cce_REG_MappingType.choice.interleaved.shiftIndex        = configuration->PDCCH_shiftIndex[CC_id];
-  }else if(bwp_dl_controlresourceset->cce_REG_MappingType == ControlResourceSet__cce_REG_MappingType_PR_nonInterleaved){
-    bwp_dl_controlresourceset->cce_REG_MappingType.choice.nonInterleaved = NULL;
+  if(bwp_dl_controlresourceset->cce_REG_MappingType.present == NR_ControlResourceSet__cce_REG_MappingType_PR_interleaved ){
+    bwp_dl_controlresourceset->cce_REG_MappingType.choice.interleaved = CALLOC(1,sizeof(struct NR_ControlResourceSet__cce_REG_MappingType__interleaved));
+    bwp_dl_controlresourceset->cce_REG_MappingType.choice.interleaved->reg_BundleSize    = configuration->PDCCH_reg_BundleSize[CC_id];
+    bwp_dl_controlresourceset->cce_REG_MappingType.choice.interleaved->interleaverSize   = configuration->PDCCH_interleaverSize[CC_id];
+    bwp_dl_controlresourceset->cce_REG_MappingType.choice.interleaved->shiftIndex        = configuration->PDCCH_shiftIndex[CC_id];
+  }else if(bwp_dl_controlresourceset->cce_REG_MappingType.present == NR_ControlResourceSet__cce_REG_MappingType_PR_nonInterleaved){
+    bwp_dl_controlresourceset->cce_REG_MappingType.choice.nonInterleaved = 0;
   }
 
   bwp_dl_controlresourceset->precoderGranularity =  configuration->PDCCH_precoderGranularity[CC_id];
 
-  bwp_dl_controlresourceset->tci_StatesPDCCH = CALLOC(1,sizeof(struct ControlResourceSet__tci_StatesPDCCH));
-  TCI_StateId = CALLOC(1,sizeof(TCI_StateId_t));
-  memset(&TCI_StateId,0,sizeof(TCI_StateId_t));
-  TCI_StateId = configuration->PDCCH_TCI_StateId[CC_id];
+  bwp_dl_controlresourceset->tci_StatesPDCCH = CALLOC(1,sizeof(struct NR_ControlResourceSet__tci_StatesPDCCH));
+  TCI_StateId = CALLOC(1,sizeof(NR_TCI_StateId_t));
+  memset(&TCI_StateId,0,sizeof(NR_TCI_StateId_t));
+  *(TCI_StateId) = configuration->PDCCH_TCI_StateId[CC_id];
   ASN_SEQUENCE_ADD(&bwp_dl_controlresourceset->tci_StatesPDCCH->list,&TCI_StateId);
 
   if(configuration->tci_PresentInDCI[CC_id]){
     bwp_dl_controlresourceset->tci_PresentInDCI  = CALLOC(1,sizeof(long));
-    bwp_dl_controlresourceset->tci_PresentInDCI  = ControlResourceSet__tci_PresentInDCI_enabled;
+    bwp_dl_controlresourceset->tci_PresentInDCI  = NR_ControlResourceSet__tci_PresentInDCI_enabled;
   }
 
-  bwp_dl_controlresourceset->pdcch_DMRS_ScramblingID = CALLOC(1,sizeof(pdcch_DMRS_ScramblingID));
+  bwp_dl_controlresourceset->pdcch_DMRS_ScramblingID = CALLOC(1,sizeof(BIT_STRING_t));
   bwp_dl_controlresourceset->pdcch_DMRS_ScramblingID->buf  = MALLOC(2);
   bwp_dl_controlresourceset->pdcch_DMRS_ScramblingID->size = 2;
   bwp_dl_controlresourceset->pdcch_DMRS_ScramblingID->bits_unused = 0;
   bwp_dl_controlresourceset->pdcch_DMRS_ScramblingID->buf[0] = 0xff;
   bwp_dl_controlresourceset->pdcch_DMRS_ScramblingID->buf[1] = 0xff;
 
-  ASN_SEQUENCE_ADD(&(*bwp_downlinkcommon)->pdcch_ConfigCommon->commonControlResourcesSets->list,&bwp_dl_controlresourceset);
+  ASN_SEQUENCE_ADD(&(*bwp_downlinkcommon)->pdcch_ConfigCommon->choice.setup->commonControlResourcesSets->list,&bwp_dl_controlresourceset);
 
   //Fill  BWP_DownlinkCommon  ->  pdcch_ConfigCommon  ->  SearchSpace list //
-  (*bwp_downlinkcommon)->pdcch_ConfigCommon->commonSearchSpaces = CALLOC(1,sizeof(struct PDCCH_ConfigCommon__commonSearchSpaces));
+  (*bwp_downlinkcommon)->pdcch_ConfigCommon->choice.setup->commonSearchSpaces = CALLOC(1,sizeof(struct NR_PDCCH_ConfigCommon__commonSearchSpaces));
 
-  bwp_dl_searchspace = CALLOC(1,sizeof(SearchSpace_t));
-  memset(&bwp_dl_searchspace,0,sizeof(SearchSpace_t));
+  bwp_dl_searchspace = CALLOC(1,sizeof(NR_SearchSpace_t));
+  memset(&bwp_dl_searchspace,0,sizeof(NR_SearchSpace_t));
   bwp_dl_searchspace->searchSpaceId         = configuration->SearchSpaceId[CC_id];
-  bwp_dl_searchspace->controlResourceSetId  = CALLOC(1,sizeof(ControlResourceSetId_t));
-  bwp_dl_searchspace->controlResourceSetId  = configuration->commonSearchSpaces_controlResourceSetId[CC_id];
+  bwp_dl_searchspace->controlResourceSetId  = CALLOC(1,sizeof(NR_ControlResourceSetId_t));
+  *(bwp_dl_searchspace->controlResourceSetId)  = configuration->commonSearchSpaces_controlResourceSetId[CC_id];
 
-  bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset = CALLOC(1,sizeof(struct SearchSpace__monitoringSlotPeriodicityAndOffset));
+  bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset = CALLOC(1,sizeof(struct NR_SearchSpace__monitoringSlotPeriodicityAndOffset));
   bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->present = configuration->SearchSpace_monitoringSlotPeriodicityAndOffset_choice[CC_id];
   
-  if(bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->present == SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl1){
+  if(bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->present == NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl1){
     bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->choice.sl1 = configuration->SearchSpace_monitoringSlotPeriodicityAndOffset_sl1[CC_id];
-  }else if(bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->present == SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl2){
+  }else if(bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->present == NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl2){
     bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->choice.sl2 = configuration->SearchSpace_monitoringSlotPeriodicityAndOffset_sl2[CC_id];    
-  }else if(bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->present == SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl4){
+  }else if(bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->present == NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl4){
     bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->choice.sl4 = configuration->SearchSpace_monitoringSlotPeriodicityAndOffset_sl4[CC_id];    
-  }else if(bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->present == SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl5){
+  }else if(bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->present == NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl5){
     bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->choice.sl5 = configuration->SearchSpace_monitoringSlotPeriodicityAndOffset_sl5[CC_id];    
-  }else if(bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->present == SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl8){
+  }else if(bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->present == NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl8){
     bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->choice.sl8 = configuration->SearchSpace_monitoringSlotPeriodicityAndOffset_sl8[CC_id];    
-  }else if(bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->present == SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl10){
+  }else if(bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->present == NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl10){
     bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->choice.sl10 = configuration->SearchSpace_monitoringSlotPeriodicityAndOffset_sl10[CC_id];    
-  }else if(bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->present == SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl16){
+  }else if(bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->present == NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl16){
     bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->choice.sl16 = configuration->SearchSpace_monitoringSlotPeriodicityAndOffset_sl16[CC_id];    
-  }else if(bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->present == SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl20){
+  }else if(bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->present == NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl20){
     bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->choice.sl20 = configuration->SearchSpace_monitoringSlotPeriodicityAndOffset_sl20[CC_id];    
   }
   bwp_dl_searchspace->monitoringSymbolsWithinSlot = CALLOC(1,sizeof(BIT_STRING_t));
@@ -787,82 +586,89 @@ void do_SERVINGCELLCONFIGCOMMON(uint8_t Mod_id,
   bwp_dl_searchspace->monitoringSymbolsWithinSlot->buf[0]=0x3f;
   bwp_dl_searchspace->monitoringSymbolsWithinSlot->buf[1]=0xff;
 
-  bwp_dl_searchspace->nrofCandidates = CALLOC(1,sizeof(struct SearchSpace__nrofCandidates)); 
+  bwp_dl_searchspace->nrofCandidates = CALLOC(1,sizeof(struct NR_SearchSpace__nrofCandidates)); 
   bwp_dl_searchspace->nrofCandidates->aggregationLevel1 = configuration->SearchSpace_nrofCandidates_aggregationLevel1[CC_id];
   bwp_dl_searchspace->nrofCandidates->aggregationLevel2 = configuration->SearchSpace_nrofCandidates_aggregationLevel2[CC_id];
   bwp_dl_searchspace->nrofCandidates->aggregationLevel4 = configuration->SearchSpace_nrofCandidates_aggregationLevel4[CC_id];
   bwp_dl_searchspace->nrofCandidates->aggregationLevel8 = configuration->SearchSpace_nrofCandidates_aggregationLevel8[CC_id];
   bwp_dl_searchspace->nrofCandidates->aggregationLevel16 = configuration->SearchSpace_nrofCandidates_aggregationLevel16[CC_id];
 
-  bwp_dl_searchspace->searchSpaceType = CALLOC(1,sizeof(struct SearchSpace__searchSpaceType));
+  bwp_dl_searchspace->searchSpaceType = CALLOC(1,sizeof(struct NR_SearchSpace__searchSpaceType));
   bwp_dl_searchspace->searchSpaceType->present = configuration->SearchSpace_searchSpaceType[CC_id];
-  if(bwp_dl_searchspace->searchSpaceType->present == SearchSpace__searchSpaceType_PR_common){
-    bwp_dl_searchspace->searchSpaceType->choice.common.dci_Format2_0 = CALLOC(1,sizeof(struct SearchSpace__searchSpaceType__common__dci_Format2_0));
-    bwp_dl_searchspace->searchSpaceType->choice.common.dci_Format2_0->nrofCandidates_SFI.aggregationLevel1   = CALLOC(1,sizeof(long)); 
-    bwp_dl_searchspace->searchSpaceType->choice.common.dci_Format2_0->nrofCandidates_SFI.aggregationLevel2   = CALLOC(1,sizeof(long)); 
-    bwp_dl_searchspace->searchSpaceType->choice.common.dci_Format2_0->nrofCandidates_SFI.aggregationLevel4   = CALLOC(1,sizeof(long)); 
-    bwp_dl_searchspace->searchSpaceType->choice.common.dci_Format2_0->nrofCandidates_SFI.aggregationLevel8   = CALLOC(1,sizeof(long)); 
-    bwp_dl_searchspace->searchSpaceType->choice.common.dci_Format2_0->nrofCandidates_SFI.aggregationLevel16  = CALLOC(1,sizeof(long)); 
-
-    bwp_dl_searchspace->searchSpaceType->choice.common.dci_Format2_0->nrofCandidates_SFI.aggregationLevel1  = configuration->Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel1[CC_id];
-    bwp_dl_searchspace->searchSpaceType->choice.common.dci_Format2_0->nrofCandidates_SFI.aggregationLevel2  = configuration->Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel2[CC_id];
-    bwp_dl_searchspace->searchSpaceType->choice.common.dci_Format2_0->nrofCandidates_SFI.aggregationLevel4  = configuration->Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel4[CC_id];
-    bwp_dl_searchspace->searchSpaceType->choice.common.dci_Format2_0->nrofCandidates_SFI.aggregationLevel8  = configuration->Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel8[CC_id];
-    bwp_dl_searchspace->searchSpaceType->choice.common.dci_Format2_0->nrofCandidates_SFI.aggregationLevel16 = configuration->Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel16[CC_id];
+  if(bwp_dl_searchspace->searchSpaceType->present == NR_SearchSpace__searchSpaceType_PR_common){
+    bwp_dl_searchspace->searchSpaceType->choice.common = CALLOC(1,sizeof(struct NR_SearchSpace__searchSpaceType__common));
+    bwp_dl_searchspace->searchSpaceType->choice.common->dci_Format2_0 = CALLOC(1,sizeof(struct NR_SearchSpace__searchSpaceType__common__dci_Format2_0));
+    bwp_dl_searchspace->searchSpaceType->choice.common->dci_Format2_0->nrofCandidates_SFI.aggregationLevel1   = CALLOC(1,sizeof(long)); 
+    bwp_dl_searchspace->searchSpaceType->choice.common->dci_Format2_0->nrofCandidates_SFI.aggregationLevel2   = CALLOC(1,sizeof(long)); 
+    bwp_dl_searchspace->searchSpaceType->choice.common->dci_Format2_0->nrofCandidates_SFI.aggregationLevel4   = CALLOC(1,sizeof(long)); 
+    bwp_dl_searchspace->searchSpaceType->choice.common->dci_Format2_0->nrofCandidates_SFI.aggregationLevel8   = CALLOC(1,sizeof(long)); 
+    bwp_dl_searchspace->searchSpaceType->choice.common->dci_Format2_0->nrofCandidates_SFI.aggregationLevel16  = CALLOC(1,sizeof(long)); 
+
+    *(bwp_dl_searchspace->searchSpaceType->choice.common->dci_Format2_0->nrofCandidates_SFI.aggregationLevel1)  = configuration->Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel1[CC_id];
+    *(bwp_dl_searchspace->searchSpaceType->choice.common->dci_Format2_0->nrofCandidates_SFI.aggregationLevel2)  = configuration->Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel2[CC_id];
+    *(bwp_dl_searchspace->searchSpaceType->choice.common->dci_Format2_0->nrofCandidates_SFI.aggregationLevel4)  = configuration->Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel4[CC_id];
+    *(bwp_dl_searchspace->searchSpaceType->choice.common->dci_Format2_0->nrofCandidates_SFI.aggregationLevel8)  = configuration->Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel8[CC_id];
+    *(bwp_dl_searchspace->searchSpaceType->choice.common->dci_Format2_0->nrofCandidates_SFI.aggregationLevel16) = configuration->Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel16[CC_id];
     
-    bwp_dl_searchspace->searchSpaceType->choice.common.dci_Format2_3 = CALLOC(1,sizeof(struct struct SearchSpace__searchSpaceType__common__dci_Format2_3));
-    bwp_dl_searchspace->searchSpaceType->choice.common.dci_Format2_3->monitoringPeriodicity = CALLOC(1,sizeof(long));
-    bwp_dl_searchspace->searchSpaceType->choice.common.dci_Format2_3->monitoringPeriodicity = configuration->Common_dci_Format2_3_monitoringPeriodicity[CC_id];
-    bwp_dl_searchspace->searchSpaceType->choice.common.dci_Format2_3->nrofPDCCH_Candidates  = configuration->Common_dci_Format2_3_nrofPDCCH_Candidates[CC_id];
-
-  }else if (bwp_dl_searchspace->searchSpaceType->present == SearchSpace__searchSpaceType_PR_ue_Specific){
-    bwp_dl_searchspace->searchSpaceType->choice.ue_Specific.dci_Formats = configuration->dci_Formats[CC_id];
+    bwp_dl_searchspace->searchSpaceType->choice.common->dci_Format2_3 = CALLOC(1,sizeof(struct NR_SearchSpace__searchSpaceType__common__dci_Format2_3));
+    bwp_dl_searchspace->searchSpaceType->choice.common->dci_Format2_3->monitoringPeriodicity = CALLOC(1,sizeof(long));
+    *(bwp_dl_searchspace->searchSpaceType->choice.common->dci_Format2_3->monitoringPeriodicity) = configuration->Common_dci_Format2_3_monitoringPeriodicity[CC_id];
+    bwp_dl_searchspace->searchSpaceType->choice.common->dci_Format2_3->nrofPDCCH_Candidates  = configuration->Common_dci_Format2_3_nrofPDCCH_Candidates[CC_id];
+
+  }else if (bwp_dl_searchspace->searchSpaceType->present == NR_SearchSpace__searchSpaceType_PR_ue_Specific){
+    bwp_dl_searchspace->searchSpaceType->choice.ue_Specific = CALLOC(1,sizeof(struct NR_SearchSpace__searchSpaceType__ue_Specific));
+    bwp_dl_searchspace->searchSpaceType->choice.ue_Specific->dci_Formats = configuration->ue_Specific__dci_Formats[CC_id];
   }
 
-  ASN_SEQUENCE_ADD(&(*bwp_downlinkcommon)->pdcch_ConfigCommon->commonSearchSpaces->list,&bwp_dl_searchspace);
+  ASN_SEQUENCE_ADD(&(*bwp_downlinkcommon)->pdcch_ConfigCommon->choice.setup->commonSearchSpaces->list,&bwp_dl_searchspace);
 
   //Fill  BWP_DownlinkCommon  ->  pdsch_ConfigCommon  //
-  (*bwp_downlinkcommon)->pdsch_ConfigCommon = CALLOC(1,sizeof(struct PDSCH_ConfigCommon));
-  (*bwp_downlinkcommon)->pdsch_ConfigCommon->pdsch_AllocationList = CALLOC(1,sizeof(struct PDSCH_ConfigCommon__pdsch_AllocationList));
-  bwp_dl_timedomainresourceallocation->k0 = CALLOC(1,sizeof(long));
+  (*bwp_downlinkcommon)->pdsch_ConfigCommon                 = CALLOC(1,sizeof(struct NR_SetupRelease_PDSCH_ConfigCommon));
+  (*bwp_downlinkcommon)->pdsch_ConfigCommon->present        = NR_SetupRelease_PDSCH_ConfigCommon_PR_setup;
+  (*bwp_downlinkcommon)->pdsch_ConfigCommon->choice.setup   = CALLOC(1,sizeof(struct NR_PDSCH_ConfigCommon));
+
+  (*bwp_downlinkcommon)->pdsch_ConfigCommon->choice.setup->pdsch_AllocationList = CALLOC(1,sizeof(struct NR_PDSCH_ConfigCommon__pdsch_AllocationList));
   
-  bwp_dl_timedomainresourceallocation->k0                   = configuration->PDSCH_TimeDomainResourceAllocation_k0[CC_id];
+  bwp_dl_timedomainresourceallocation = CALLOC(1,sizeof(struct NR_PDSCH_TimeDomainResourceAllocation));
+  memset(&bwp_dl_timedomainresourceallocation,0,sizeof(struct NR_PDSCH_TimeDomainResourceAllocation));
+  bwp_dl_timedomainresourceallocation->k0 = CALLOC(1,sizeof(long));
+  *(bwp_dl_timedomainresourceallocation->k0)                   = configuration->PDSCH_TimeDomainResourceAllocation_k0[CC_id];
   bwp_dl_timedomainresourceallocation->mappingType          = configuration->PDSCH_TimeDomainResourceAllocation_mappingType[CC_id];
   bwp_dl_timedomainresourceallocation->startSymbolAndLength.buf=MALLOC(1);
   bwp_dl_timedomainresourceallocation->startSymbolAndLength.size=1;
   bwp_dl_timedomainresourceallocation->startSymbolAndLength.bits_unused=1;
   bwp_dl_timedomainresourceallocation->startSymbolAndLength.buf[0]=0x7f;
 
-  ASN_SEQUENCE_ADD(&(*bwp_downlinkcommon)->pdsch_ConfigCommon->pdsch_AllocationList->list,&bwp_dl_timedomainresourceallocation);
+  ASN_SEQUENCE_ADD(&(*bwp_downlinkcommon)->pdsch_ConfigCommon->choice.setup->pdsch_AllocationList->list,&bwp_dl_timedomainresourceallocation);
 
   //Fill  UplinkConfigCommon //
   //Fill  UplinkConfigCommon -> FrequencyInfoUL //
-  (*uplinkconfigcommon)->frequencyInfoUL = CALLOC(1,sizeof(struct FrequencyInfoUL));
-  (*uplinkconfigcommon)->frequencyInfoUL->frequencyBandList = CALLOC(1,sizeof(struct MultiFrequencyBandListNR));
+  (*uplinkconfigcommon)->frequencyInfoUL = CALLOC(1,sizeof(struct NR_FrequencyInfoUL));
+  (*uplinkconfigcommon)->frequencyInfoUL->frequencyBandList = CALLOC(1,sizeof(struct NR_MultiFrequencyBandListNR));
 
-  ul_frequencyBandList = CALLOC(1,sizeof(FreqBandIndicatorNR_t));
-  memset(&ul_frequencyBandList,0,sizeof(FreqBandIndicatorNR_t)); 
-  ul_frequencyBandList = configuration->UL_FreqBandIndicatorNR[CC_id];
+  ul_frequencyBandList = CALLOC(1,sizeof(NR_FreqBandIndicatorNR_t));
+  memset(&ul_frequencyBandList,0,sizeof(NR_FreqBandIndicatorNR_t)); 
+  *(ul_frequencyBandList) = configuration->UL_FreqBandIndicatorNR[CC_id];
   ASN_SEQUENCE_ADD(&(*uplinkconfigcommon)->frequencyInfoUL->frequencyBandList->list,&ul_frequencyBandList);
 
-  (*uplinkconfigcommon)->frequencyInfoUL->absoluteFrequencyPointA = CALLOC(1,sizeof(ARFCN_ValueNR_t));
-  (*uplinkconfigcommon)->frequencyInfoUL->absoluteFrequencyPointA = configuration->UL_absoluteFrequencyPointA[CC_id];
+  (*uplinkconfigcommon)->frequencyInfoUL->absoluteFrequencyPointA = CALLOC(1,sizeof(NR_ARFCN_ValueNR_t));
+  *((*uplinkconfigcommon)->frequencyInfoUL->absoluteFrequencyPointA) = configuration->UL_absoluteFrequencyPointA[CC_id];
 
-  ul_scs_SpecificCarrierList = CALLOC(1,sizeof(struct SCS_SpecificCarrier));
-  memset(&dl_scs_SpecificCarrierList,0,sizeof(struct SCS_SpecificCarrier));
+  ul_scs_SpecificCarrierList = CALLOC(1,sizeof(struct NR_SCS_SpecificCarrier));
+  memset(&dl_scs_SpecificCarrierList,0,sizeof(struct NR_SCS_SpecificCarrier));
   ul_scs_SpecificCarrierList->offsetToCarrier    = configuration->UL_offsetToCarrier[CC_id];
   ul_scs_SpecificCarrierList->subcarrierSpacing  = configuration->UL_SCS_SubcarrierSpacing[CC_id];
   ul_scs_SpecificCarrierList->k0                 = configuration->UL_SCS_SpecificCarrier_k0[CC_id];
   ul_scs_SpecificCarrierList->carrierBandwidth   = configuration->UL_carrierBandwidth[CC_id];
-  ASN_SEQUENCE_ADD(&(*uplinkconfigcommon)->frequencyInfoUL->scs_SpecificCarriers.list,&ul_scs_SpecificCarrierList);  
+  ASN_SEQUENCE_ADD(&(*uplinkconfigcommon)->frequencyInfoUL->scs_SpecificCarriers.list,&ul_scs_SpecificCarrierList);
 
-  (*uplinkconfigcommon)->frequencyInfoUL->additionalSpectrumEmission = CALLOC(1,sizeof(AdditionalSpectrumEmission_t));
-  (*uplinkconfigcommon)->frequencyInfoUL->p_Max                      = CALLOC(1,sizeof(P_Max_t));
+  (*uplinkconfigcommon)->frequencyInfoUL->additionalSpectrumEmission = CALLOC(1,sizeof(NR_AdditionalSpectrumEmission_t));
+  (*uplinkconfigcommon)->frequencyInfoUL->p_Max                      = CALLOC(1,sizeof(NR_P_Max_t));
   (*uplinkconfigcommon)->frequencyInfoUL->frequencyShift7p5khz       = CALLOC(1,sizeof(long));
 
-  (*uplinkconfigcommon)->frequencyInfoUL->additionalSpectrumEmission = configuration->UL_additionalSpectrumEmission[CC_id];  
-  (*uplinkconfigcommon)->frequencyInfoUL->p_Max                      = configuration->UL_p_Max[CC_id];
-  (*uplinkconfigcommon)->frequencyInfoUL->frequencyShift7p5khz       = configuration->UL_frequencyShift7p5khz[CC_id];   
+  *((*uplinkconfigcommon)->frequencyInfoUL->additionalSpectrumEmission) = configuration->UL_additionalSpectrumEmission[CC_id];
+  *((*uplinkconfigcommon)->frequencyInfoUL->p_Max)                      = configuration->UL_p_Max[CC_id];
+  *((*uplinkconfigcommon)->frequencyInfoUL->frequencyShift7p5khz)       = configuration->UL_frequencyShift7p5khz[CC_id];
 
   //Fill  UplinkConfigCommon -> BWP-UplinkCommon //
   //Fill  UplinkConfigCommon -> BWP-UplinkCommon -> genericParameters//
@@ -871,141 +677,149 @@ void do_SERVINGCELLCONFIGCOMMON(uint8_t Mod_id,
 
   if(configuration->UL_BWP_prefix_type[CC_id]){
     (*uplinkconfigcommon)->initialUplinkBWP->genericParameters.cyclicPrefix = CALLOC(1,sizeof(long));
-    (*uplinkconfigcommon)->initialUplinkBWP->genericParameters.cyclicPrefix = BWP__cyclicPrefix_extended;
+    (*uplinkconfigcommon)->initialUplinkBWP->genericParameters.cyclicPrefix = NR_BWP__cyclicPrefix_extended;
   } 
 
   //Fill  UplinkConfigCommon -> BWP-UplinkCommon -> RACH_ConfigCommon//
-  (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon = CALLOC(1,sizeof(RACH_ConfigCommon_t));
+  (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon                = CALLOC(1,sizeof(NR_SetupRelease_RACH_ConfigCommon_t));
+  (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->present       = NR_SetupRelease_RACH_ConfigCommon_PR_setup;
+  (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup  = CALLOC(1,sizeof(struct NR_RACH_ConfigCommon));
 
-  (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->totalNumberOfRA_Preambles = CALLOC(1,sizeof(long));
-  (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->totalNumberOfRA_Preambles = configuration->rach_totalNumberOfRA_Preambles[CC_id];
+  (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->totalNumberOfRA_Preambles = CALLOC(1,sizeof(long));
+  *((*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->totalNumberOfRA_Preambles) = configuration->rach_totalNumberOfRA_Preambles[CC_id];
   
-  (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB = CALLOC(1,sizeof(struct RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB));
-  (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->present = configuration->rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[CC_id];
+  (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->ssb_perRACH_OccasionAndCB_PreamblesPerSSB = CALLOC(1,sizeof(struct NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB));
+  (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->present = configuration->rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[CC_id];
   
-  if((*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->present       == RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneEighth){
-    (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.oneEighth = configuration->rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[CC_id];
-  }else if((*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->present == RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneFourth){
-    (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.oneFourth = configuration->rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[CC_id];
-  }else if((*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->present == RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneHalf){
-    (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.oneHalf   = configuration->rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[CC_id];
-  }else if((*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->present == RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_one){
-    (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.one       = configuration->rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[CC_id];
-  }else if((*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->present == RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_two){
-    (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.two       = configuration->rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[CC_id];
-  }else if((*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->present == RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_four){
-    (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.four      = configuration->rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_four[CC_id];
-  }else if((*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->present == RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_eight){
-    (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.eight     = configuration->rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_eight[CC_id];
-  }else if((*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->present == RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_sixteen){
-    (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.sixteen   = configuration->rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_sixteen[CC_id];
+  if((*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->present       == NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneEighth){
+    (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.oneEighth = configuration->rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[CC_id];
+  }else if((*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->present == NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneFourth){
+    (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.oneFourth = configuration->rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[CC_id];
+  }else if((*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->present == NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneHalf){
+    (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.oneHalf   = configuration->rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[CC_id];
+  }else if((*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->present == NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_one){
+    (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.one       = configuration->rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[CC_id];
+  }else if((*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->present == NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_two){
+    (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.two       = configuration->rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[CC_id];
+  }else if((*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->present == NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_four){
+    (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.four      = configuration->rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_four[CC_id];
+  }else if((*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->present == NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_eight){
+    (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.eight     = configuration->rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_eight[CC_id];
+  }else if((*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->present == NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_sixteen){
+    (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.sixteen   = configuration->rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_sixteen[CC_id];
   }      
 
   if(configuration->rach_groupBconfigured[CC_id]){
-    (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->groupBconfigured = CALLOC(1,sizeof(struct RACH_ConfigCommon__groupBconfigured));
-    (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->groupBconfigured->ra_Msg3SizeGroupA            = configuration->numberOfRA_PreamblesGroupA[CC_id];
-    (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->groupBconfigured->messagePowerOffsetGroupB     = configuration->rach_messagePowerOffsetGroupB[CC_id];
-    (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->groupBconfigured->numberOfRA_PreamblesGroupA   = configuration->rach_numberOfRA_PreamblesGroupA[CC_id];
+    (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->groupBconfigured = CALLOC(1,sizeof(struct NR_RACH_ConfigCommon__groupBconfigured));
+    (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->groupBconfigured->ra_Msg3SizeGroupA            = configuration->rach_ra_Msg3SizeGroupA[CC_id];
+    (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->groupBconfigured->messagePowerOffsetGroupB     = configuration->rach_messagePowerOffsetGroupB[CC_id];
+    (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->groupBconfigured->numberOfRA_PreamblesGroupA   = configuration->rach_numberOfRA_PreamblesGroupA[CC_id];
   }
 
-  (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->ra_ContentionResolutionTimer = configuration->rach_ra_ContentionResolutionTimer[CC_id];
+  (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->ra_ContentionResolutionTimer = configuration->rach_ra_ContentionResolutionTimer[CC_id];
   
-  (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->rsrp_ThresholdSSB            = CALLOC(1,sizeof(RSRP_Range_t));
-  (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->rsrp_ThresholdSSB_SUL        = CALLOC(1,sizeof(RSRP_Range_t));
-  (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->rsrp_ThresholdSSB            = configuration->rsrp_ThresholdSSB[CC_id];
-  (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->rsrp_ThresholdSSB_SUL        = configuration->rsrp_ThresholdSSB_SUL[CC_id];
-
-  (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->prach_RootSequenceIndex.present   = configuration->prach_RootSequenceIndex_choice[CC_id];  
-  if((*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->prach_RootSequenceIndex.present == RACH_ConfigCommon__prach_RootSequenceIndex_PR_l839){
-    (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->prach_RootSequenceIndex.choice.l839 = configuration->prach_RootSequenceIndex_l839[CC_id];
-  }else if ((*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->prach_RootSequenceIndex.present == RACH_ConfigCommon__prach_RootSequenceIndex_PR_l139){
-    (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->prach_RootSequenceIndex.choice.l139 = configuration->prach_RootSequenceIndex_l139[CC_id];
+  (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->rsrp_ThresholdSSB            = CALLOC(1,sizeof(NR_RSRP_Range_t));
+  (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->rsrp_ThresholdSSB_SUL        = CALLOC(1,sizeof(NR_RSRP_Range_t));
+  *((*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->rsrp_ThresholdSSB)            = configuration->rsrp_ThresholdSSB[CC_id];
+  *((*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->rsrp_ThresholdSSB_SUL)        = configuration->rsrp_ThresholdSSB_SUL[CC_id];
+
+  (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->prach_RootSequenceIndex.present   = configuration->prach_RootSequenceIndex_choice[CC_id];  
+  if((*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->prach_RootSequenceIndex.present == NR_RACH_ConfigCommon__prach_RootSequenceIndex_PR_l839){
+    (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->prach_RootSequenceIndex.choice.l839 = configuration->prach_RootSequenceIndex_l839[CC_id];
+  }else if ((*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->prach_RootSequenceIndex.present == NR_RACH_ConfigCommon__prach_RootSequenceIndex_PR_l139){
+    (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->prach_RootSequenceIndex.choice.l139 = configuration->prach_RootSequenceIndex_l139[CC_id];
   }
 
-  (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->msg1_SubcarrierSpacing       = configuration->prach_msg1_SubcarrierSpacing[CC_id]; 
-  (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->restrictedSetConfig          = configuration->restrictedSetConfig[CC_id];
+  (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->msg1_SubcarrierSpacing       = configuration->prach_msg1_SubcarrierSpacing[CC_id]; 
+  (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->restrictedSetConfig          = configuration->restrictedSetConfig[CC_id];
 
   if(configuration->msg3_transformPrecoding[CC_id]){
-    (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->msg3_transformPrecoding      = CALLOC(1,sizeof(long));    
-    (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->msg3_transformPrecoding      = RACH_ConfigCommon__msg3_transformPrecoding_enabled;
+    (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->msg3_transformPrecoding      = CALLOC(1,sizeof(long));    
+    (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->msg3_transformPrecoding      = NR_RACH_ConfigCommon__msg3_transformPrecoding_enabled;
   }
 
   //Fill  UplinkConfigCommon -> BWP-UplinkCommon -> RACH_ConfigCommon -> RACH_ConfigGeneric_t//  
-  (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->rach_ConfigGeneric.prach_ConfigurationIndex       = configuration->prach_ConfigurationIndex[CC_id];
-  (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->rach_ConfigGeneric.msg1_FDM                       = configuration->prach_msg1_FDM[CC_id];
-  (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->rach_ConfigGeneric.msg1_FrequencyStart            = configuration->prach_msg1_FrequencyStart[CC_id];
-  (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->rach_ConfigGeneric.zeroCorrelationZoneConfig      = configuration->zeroCorrelationZoneConfig[CC_id];
-  (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->rach_ConfigGeneric.preambleReceivedTargetPower    = configuration->preambleReceivedTargetPower[CC_id];
-  (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->rach_ConfigGeneric.preambleTransMax               = configuration->preambleTransMax[CC_id];
-  (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->rach_ConfigGeneric.powerRampingStep               = configuration->powerRampingStep[CC_id];
-  (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->rach_ConfigGeneric.ra_ResponseWindow              = configuration->ra_ResponseWindow[CC_id];
+  (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->rach_ConfigGeneric.prach_ConfigurationIndex       = configuration->prach_ConfigurationIndex[CC_id];
+  (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->rach_ConfigGeneric.msg1_FDM                       = configuration->prach_msg1_FDM[CC_id];
+  (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->rach_ConfigGeneric.msg1_FrequencyStart            = configuration->prach_msg1_FrequencyStart[CC_id];
+  (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->rach_ConfigGeneric.zeroCorrelationZoneConfig      = configuration->zeroCorrelationZoneConfig[CC_id];
+  (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->rach_ConfigGeneric.preambleReceivedTargetPower    = configuration->preambleReceivedTargetPower[CC_id];
+  (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->rach_ConfigGeneric.preambleTransMax               = configuration->preambleTransMax[CC_id];
+  (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->rach_ConfigGeneric.powerRampingStep               = configuration->powerRampingStep[CC_id];
+  (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->rach_ConfigGeneric.ra_ResponseWindow              = configuration->ra_ResponseWindow[CC_id];
 
   //Fill  UplinkConfigCommon -> BWP-UplinkCommon -> PUSCH_ConfigCommon//
-  (*uplinkconfigcommon)->initialUplinkBWP->pusch_ConfigCommon = CALLOC(1,sizeof(PUSCH_ConfigCommon_t));  
+  (*uplinkconfigcommon)->initialUplinkBWP->pusch_ConfigCommon                 = CALLOC(1,sizeof(NR_SetupRelease_PUSCH_ConfigCommon_t));  
+  (*uplinkconfigcommon)->initialUplinkBWP->pusch_ConfigCommon->present        = NR_SetupRelease_PUSCH_ConfigCommon_PR_setup;
+  (*uplinkconfigcommon)->initialUplinkBWP->pusch_ConfigCommon->choice.setup   = CALLOC(1,sizeof(struct NR_PUSCH_ConfigCommon));
+
 
   if(configuration->groupHoppingEnabledTransformPrecoding[CC_id]){
-    (*uplinkconfigcommon)->initialUplinkBWP->pusch_ConfigCommon->groupHoppingEnabledTransformPrecoding = CALLOC(1,sizeof(long));
-    (*uplinkconfigcommon)->initialUplinkBWP->pusch_ConfigCommon->groupHoppingEnabledTransformPrecoding = PUSCH_ConfigCommon__groupHoppingEnabledTransformPrecoding_enabled;
+    (*uplinkconfigcommon)->initialUplinkBWP->pusch_ConfigCommon->choice.setup->groupHoppingEnabledTransformPrecoding = CALLOC(1,sizeof(long));
+    (*uplinkconfigcommon)->initialUplinkBWP->pusch_ConfigCommon->choice.setup->groupHoppingEnabledTransformPrecoding = NR_PUSCH_ConfigCommon__groupHoppingEnabledTransformPrecoding_enabled;
   }
 
-  (*uplinkconfigcommon)->initialUplinkBWP->pusch_ConfigCommon->pusch_AllocationList = CALLOC(1,sizeof(struct PUSCH_ConfigCommon__pusch_AllocationList));
-  pusch_configcommontimedomainresourceallocation = CALLOC(1,sizeof(struct PUSCH_TimeDomainResourceAllocation));
-  memset(&pusch_configcommontimedomainresourceallocation,0,sizeof(struct PUSCH_TimeDomainResourceAllocation));
+  (*uplinkconfigcommon)->initialUplinkBWP->pusch_ConfigCommon->choice.setup->pusch_AllocationList = CALLOC(1,sizeof(struct NR_PUSCH_ConfigCommon__pusch_AllocationList));
+  pusch_configcommontimedomainresourceallocation = CALLOC(1,sizeof(struct NR_PUSCH_TimeDomainResourceAllocation));
+  memset(&pusch_configcommontimedomainresourceallocation,0,sizeof(struct NR_PUSCH_TimeDomainResourceAllocation));
   pusch_configcommontimedomainresourceallocation->k2 = CALLOC(1,sizeof(long));
 
-  pusch_configcommontimedomainresourceallocation->k2             = configuration->PUSCH_TimeDomainResourceAllocation_k2[CC_id];
+  *(pusch_configcommontimedomainresourceallocation->k2)             = configuration->PUSCH_TimeDomainResourceAllocation_k2[CC_id];
   pusch_configcommontimedomainresourceallocation->mappingType    = configuration->PUSCH_TimeDomainResourceAllocation_mappingType[CC_id];
   pusch_configcommontimedomainresourceallocation->startSymbolAndLength.buf  = MALLOC(1);
   pusch_configcommontimedomainresourceallocation->startSymbolAndLength.size = 1;
   pusch_configcommontimedomainresourceallocation->startSymbolAndLength.bits_unused = 1;
   pusch_configcommontimedomainresourceallocation->startSymbolAndLength.buf[0]  = 0x7f;
-  ASN_SEQUENCE_ADD(&(*uplinkconfigcommon)->initialUplinkBWP->pusch_ConfigCommon->pusch_AllocationList->list,&pusch_configcommontimedomainresourceallocation); 
+  ASN_SEQUENCE_ADD(&(*uplinkconfigcommon)->initialUplinkBWP->pusch_ConfigCommon->choice.setup->pusch_AllocationList->list,&pusch_configcommontimedomainresourceallocation); 
 
-  (*uplinkconfigcommon)->initialUplinkBWP->pusch_ConfigCommon->msg3_DeltaPreamble  = CALLOC(1,sizeof(long));
-  (*uplinkconfigcommon)->initialUplinkBWP->pusch_ConfigCommon->msg3_DeltaPreamble  = configuration->msg3_DeltaPreamble[CC_id];
-  (*uplinkconfigcommon)->initialUplinkBWP->pusch_ConfigCommon->p0_NominalWithGrant = CALLOC(1,sizeof(long));
-  (*uplinkconfigcommon)->initialUplinkBWP->pusch_ConfigCommon->p0_NominalWithGrant = configuration->p0_NominalWithGrant[CC_id];
+  (*uplinkconfigcommon)->initialUplinkBWP->pusch_ConfigCommon->choice.setup->msg3_DeltaPreamble  = CALLOC(1,sizeof(long));
+  *((*uplinkconfigcommon)->initialUplinkBWP->pusch_ConfigCommon->choice.setup->msg3_DeltaPreamble)  = configuration->msg3_DeltaPreamble[CC_id];
+  (*uplinkconfigcommon)->initialUplinkBWP->pusch_ConfigCommon->choice.setup->p0_NominalWithGrant = CALLOC(1,sizeof(long));
+  *((*uplinkconfigcommon)->initialUplinkBWP->pusch_ConfigCommon->choice.setup->p0_NominalWithGrant) = configuration->p0_NominalWithGrant[CC_id];
 
   //Fill  UplinkConfigCommon -> BWP-UplinkCommon -> PUCCH_ConfigCommon//
-  (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon = CALLOC(1,sizeof(PUCCH_ConfigCommon_t));  
-  (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->pucch_ResourceCommon = CALLOC(1,sizeof(BIT_STRING_t));
-  (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->hoppingId = CALLOC(1,sizeof(BIT_STRING_t));
-  (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->p0_nominal = CALLOC(1,sizeof(long));
+  (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon               = CALLOC(1,sizeof(struct NR_SetupRelease_PUCCH_ConfigCommon)); 
+  (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->present      = NR_SetupRelease_PUCCH_ConfigCommon_PR_setup;
+  (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->choice.setup = CALLOC(1,sizeof(struct NR_PUCCH_ConfigCommon));
 
-  (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->pucch_GroupHopping   = configuration->pucch_GroupHopping[CC_id];
-  (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->p0_nominal           = configuration->p0_nominal[CC_id];
+  (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->choice.setup->pucch_ResourceCommon = CALLOC(1,sizeof(BIT_STRING_t));
+  (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->choice.setup->hoppingId = CALLOC(1,sizeof(BIT_STRING_t));
+  (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->choice.setup->p0_nominal = CALLOC(1,sizeof(long));
 
-  (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->pucch_ResourceCommon->buf = MALLOC(1);
-  (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->pucch_ResourceCommon->size = 1;
-  (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->pucch_ResourceCommon->bits_unused = 4;  
-  (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->pucch_ResourceCommon->buf[0] = 0x0f;
+  (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->choice.setup->pucch_GroupHopping   = configuration->pucch_GroupHopping[CC_id];
+  *((*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->choice.setup->p0_nominal)           = configuration->p0_nominal[CC_id];
 
-  (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->hoppingId->buf = MALLOC(2);
-  (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->hoppingId->size = 2
-  (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->hoppingId->bits_unused = 6;
-  (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->hoppingId->buf[0] = 0x03;
-  (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->hoppingId->buf[1] = 0xff;
+  (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->choice.setup->pucch_ResourceCommon->buf = MALLOC(1);
+  (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->choice.setup->pucch_ResourceCommon->size = 1;
+  (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->choice.setup->pucch_ResourceCommon->bits_unused = 4;  
+  (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->choice.setup->pucch_ResourceCommon->buf[0] = 0x0f;
+
+  (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->choice.setup->hoppingId->buf = MALLOC(2);
+  (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->choice.setup->hoppingId->size = 2;
+  (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->choice.setup->hoppingId->bits_unused = 6;
+  (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->choice.setup->hoppingId->buf[0] = 0x03;
+  (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->choice.setup->hoppingId->buf[1] = 0xff;
 
 
    //Fill  supplementaryUplinkConfig //
-  memcpy(&(*uplinkconfigcommon), &(*supplementaryuplinkconfig), sizeof(UplinkConfigCommon_t));//The Same structre
+  memcpy(&(*uplinkconfigcommon), &(*supplementaryuplinkconfig), sizeof(NR_UplinkConfigCommon_t));//The Same structre
 
    //Fill  TDD_UL_DL_ConfigCommon //
-  (*tdd_ul_dl_configurationcommon)->referenceSubcarrierSpacing    = CALLOC(1,sizeof(SubcarrierSpacing_t));
+  (*tdd_ul_dl_configurationcommon)->referenceSubcarrierSpacing    = CALLOC(1,sizeof(NR_SubcarrierSpacing_t));
   (*tdd_ul_dl_configurationcommon)->dl_UL_TransmissionPeriodicity = CALLOC(1,sizeof(long));
   (*tdd_ul_dl_configurationcommon)->nrofDownlinkSlots             = CALLOC(1,sizeof(long));
   (*tdd_ul_dl_configurationcommon)->nrofDownlinkSymbols           = CALLOC(1,sizeof(long));
   (*tdd_ul_dl_configurationcommon)->nrofUplinkSlots               = CALLOC(1,sizeof(long));
   (*tdd_ul_dl_configurationcommon)->nrofUplinkSymbols             = CALLOC(1,sizeof(long));
 
-  (*tdd_ul_dl_configurationcommon)->referenceSubcarrierSpacing    = configuration->referenceSubcarrierSpacing[CC_id];
-  (*tdd_ul_dl_configurationcommon)->dl_UL_TransmissionPeriodicity = configuration->dl_UL_TransmissionPeriodicity[CC_id];
-  (*tdd_ul_dl_configurationcommon)->nrofDownlinkSlots             = configuration->nrofDownlinkSlots[CC_id];
-  (*tdd_ul_dl_configurationcommon)->nrofDownlinkSymbols           = configuration->nrofDownlinkSymbols[CC_id];
-  (*tdd_ul_dl_configurationcommon)->nrofUplinkSlots               = configuration->nrofUplinkSlots[CC_id];
-  (*tdd_ul_dl_configurationcommon)->nrofUplinkSymbols             = configuration->nrofUplinkSymbols[CC_id];
+  *((*tdd_ul_dl_configurationcommon)->referenceSubcarrierSpacing)    = configuration->referenceSubcarrierSpacing[CC_id];
+  *((*tdd_ul_dl_configurationcommon)->dl_UL_TransmissionPeriodicity) = configuration->dl_UL_TransmissionPeriodicity[CC_id];
+  *((*tdd_ul_dl_configurationcommon)->nrofDownlinkSlots)             = configuration->nrofDownlinkSlots[CC_id];
+  *((*tdd_ul_dl_configurationcommon)->nrofDownlinkSymbols)           = configuration->nrofDownlinkSymbols[CC_id];
+  *((*tdd_ul_dl_configurationcommon)->nrofUplinkSlots)               = configuration->nrofUplinkSlots[CC_id];
+  *((*tdd_ul_dl_configurationcommon)->nrofUplinkSymbols)             = configuration->nrofUplinkSymbols[CC_id];
 
-  memcpy(&(*tdd_ul_dl_configurationcommon), &(*tdd_ul_dl_configurationcommon2), sizeof(struct TDD_UL_DL_ConfigCommon));//The Same structre
+  memcpy(&(*tdd_ul_dl_configurationcommon), &(*tdd_ul_dl_configurationcommon2), sizeof(struct NR_TDD_UL_DL_ConfigCommon));//The Same structre
 
 
 }
@@ -3223,7 +3037,7 @@ OAI_UECapability_t *fill_ue_capability(char *UE_EUTRA_Capability_xer_fname)
         UECapability.sdu_size, enc_rval.encoded + 7);
   {
     char *sdu;
-    //sdu = malloc (3 * UECapability.sdu_size + 1 ); ///* For '\0' 
+    //sdu = malloc (3 * UECapability.sdu_size + 1 ); /// For '\0' 
 
     for (i = 0; i < UECapability.sdu_size; i++) {
       sprintf (&sdu[3 * i], "%02x.", UECapability.sdu[i]);
@@ -3235,4 +3049,4 @@ OAI_UECapability_t *fill_ue_capability(char *UE_EUTRA_Capability_xer_fname)
 
   return(&UECapability);
 }
-
+*/
diff --git a/openair2/RRC/NR/MESSAGES/asn1_msg.h b/openair2/RRC/NR/MESSAGES/asn1_msg.h
index 640c86dade..67cb7e5887 100644
--- a/openair2/RRC/NR/MESSAGES/asn1_msg.h
+++ b/openair2/RRC/NR/MESSAGES/asn1_msg.h
@@ -28,7 +28,6 @@
 * \email: raymond.knopp@eurecom.fr and  navid.nikaein@eurecom.fr
 */
 
-#ifdef USER_MODE
 #include <stdio.h>
 #include <sys/types.h>
 #include <stdlib.h> /* for atoi(3) */
@@ -36,14 +35,11 @@
 #include <string.h> /* for strerror(3) */
 #include <sysexits.h> /* for EX_* exit codes */
 #include <errno.h>  /* for errno */
-#else
-#include <linux/module.h>  /* Needed by all modules */
-#endif
 
 #include <asn_application.h>
 #include <asn_internal.h> /* for _ASN_DEFAULT_STACK_MAX */
 
-#include "RRC/NR/defs_NR.h"
+#include "RRC/NR/nr_rrc_defs.h"
 
 /*
  * The variant of the above function which dumps the BASIC-XER (XER_F_BASIC)
@@ -81,194 +77,18 @@ uint8_t do_MIB_NR(rrc_gNB_carrier_data_t *carrier,
 @param configuration Pointer Configuration Request structure  
 @return size of encoded bit stream in bytes*/
 
-uint8_t do_SIB1_NR(rrc_gNB_carrier_data_t *carrier,int Mod_id,int CC_id, gNB_RrcConfigurationReq *configuration
-               );
+uint8_t do_SIB1_NR(rrc_gNB_carrier_data_t *carrier,int Mod_id,int CC_id, gNB_RrcConfigurationReq *configuration);
 
-/**
-\brief Generate a default configuration for SIB2/SIB3 in one System Information PDU (eNB).
-@param Mod_id Index of eNB (used to derive some parameters)
-@param buffer Pointer to PER-encoded ASN.1 description of SI PDU
-@param systemInformation Pointer to asn1c C representation of SI PDU
-@param sib2 Pointer (returned) to sib2 component withing SI PDU
-@param sib3 Pointer (returned) to sib3 component withing SI PDU
-@param sib13 Pointer (returned) to sib13 component withing SI PDU
-@param MBMS_flag Indicates presence of MBMS system information (when 1)
-@return size of encoded bit stream in bytes*/
-
-/*uint8_t do_SIB23(uint8_t Mod_id,
-                 int CC_id
-#if defined(ENABLE_ITTI)
-                 , RrcConfigurationReq *configuration
-#endif
-                );
-
-/**
-\brief Generate an RRCConnectionRequest UL-CCCH-Message (UE) based on random string or S-TMSI.  This
-routine only generates an mo-data establishment cause.
-@param buffer Pointer to PER-encoded ASN.1 description of UL-DCCH-Message PDU
-@param rv 5 byte random string or S-TMSI
-@returns Size of encoded bit stream in bytes*/
-
-/*uint8_t do_RRCConnectionRequest(uint8_t Mod_id, uint8_t *buffer,uint8_t *rv);
-
-/** \brief Generate an RRCConnectionSetupComplete UL-DCCH-Message (UE)
-@param buffer Pointer to PER-encoded ASN.1 description of UL-DCCH-Message PDU
-@returns Size of encoded bit stream in bytes*/
-
-/*uint8_t do_RRCConnectionSetupComplete(uint8_t Mod_id, uint8_t* buffer, const uint8_t Transaction_id, const int dedicatedInfoNASLength,
-                                      const char* dedicatedInfoNAS);
-
-/** \brief Generate an RRCConnectionReconfigurationComplete UL-DCCH-Message (UE)
-@param buffer Pointer to PER-encoded ASN.1 description of UL-DCCH-Message PDU
-@returns Size of encoded bit stream in bytes*/
-
-/*uint8_t
-do_RRCConnectionReconfigurationComplete(
-  const protocol_ctxt_t* const ctxt_pP,
-  uint8_t* buffer,
-  const uint8_t Transaction_id
-);
-
-/**
-\brief Generate an RRCConnectionSetup DL-CCCH-Message (eNB).  This routine configures SRB_ToAddMod (SRB1/SRB2) and
-PhysicalConfigDedicated IEs.  The latter does not enable periodic CQI reporting (PUCCH format 2/2a/2b) or SRS.
-@param ctxt_pP Running context
-@param ue_context_pP UE context
-@param CC_id         Component Carrier ID
-@param buffer Pointer to PER-encoded ASN.1 description of DL-CCCH-Message PDU
-@param transmission_mode Transmission mode for UE (1-9)
-@param UE_id UE index for this message
-@param Transaction_id Transaction_ID for this message
-@param SRB_configList Pointer (returned) to SRB1_config/SRB2_config(later) IEs for this UE
-@param physicalConfigDedicated Pointer (returned) to PhysicalConfigDedicated IE for this UE
-@returns Size of encoded bit stream in bytes*/
-/*uint8_t
-do_RRCConnectionSetup(
-  const protocol_ctxt_t*     const ctxt_pP,
-  rrc_eNB_ue_context_t*      const ue_context_pP,
-  int                              CC_id,
-  uint8_t*                   const buffer,
-  const uint8_t                    transmission_mode,
-  const uint8_t                    Transaction_id,
-  SRB_ToAddModList_t**             SRB_configList,
-  struct PhysicalConfigDedicated** physicalConfigDedicated
-);
+void do_SERVINGCELLCONFIGCOMMON(uint8_t Mod_id,
+                                int CC_id
+                                #if defined(ENABLE_ITTI)
+                                ,gNB_RrcConfigurationReq *configuration
+                                #endif
+                                );
 
-/**
-\brief Generate an RRCConnectionReconfiguration DL-DCCH-Message (eNB).  This routine configures SRBToAddMod (SRB2) and one DRBToAddMod
-(DRB3).  PhysicalConfigDedicated is not updated.
-@param ctxt_pP Running context
-@param buffer Pointer to PER-encoded ASN.1 description of DL-CCCH-Message PDU
-@param Transaction_id Transaction_ID for this message
-@param SRB_list Pointer to SRB List to be added/modified (NULL if no additions/modifications)
-@param DRB_list Pointer to DRB List to be added/modified (NULL if no additions/modifications)
-@param DRB_list2 Pointer to DRB List to be released      (NULL if none to be released)
-@param sps_Config Pointer to sps_Config to be modified (NULL if no modifications, or default if initial configuration)
-@param physicalConfigDedicated Pointer to PhysicalConfigDedicated to be modified (NULL if no modifications)
-@param MeasObj_list Pointer to MeasObj List to be added/modified (NULL if no additions/modifications)
-@param ReportConfig_list Pointer to ReportConfig List (NULL if no additions/modifications)
-@param QuantityConfig Pointer to QuantityConfig to be modified (NULL if no modifications)
-@param MeasId_list Pointer to MeasID List (NULL if no additions/modifications)
-@param mobilityInfo mobility control information for handover
-@param speedStatePars speed state parameteres for handover
-@param mac_MainConfig Pointer to Mac_MainConfig(NULL if no modifications)
-@param measGapConfig Pointer to MeasGapConfig (NULL if no modifications)
-@param cba_rnti RNTI for the cba transmission
-@returns Size of encoded bit stream in bytes*/
-
-/*uint16_t
-do_RRCConnectionReconfiguration(
-  const protocol_ctxt_t*        const ctxt_pP,
-    uint8_t                            *buffer,
-    uint8_t                             Transaction_id,
-    SRB_ToAddModList_t                 *SRB_list,
-    DRB_ToAddModList_t                 *DRB_list,
-    DRB_ToReleaseList_t                *DRB_list2,
-    struct SPS_Config                  *sps_Config,
-    struct PhysicalConfigDedicated     *physicalConfigDedicated,
-    MeasObjectToAddModList_t           *MeasObj_list,
-    ReportConfigToAddModList_t         *ReportConfig_list,
-    QuantityConfig_t                   *quantityConfig,
-    MeasIdToAddModList_t               *MeasId_list,
-    MAC_MainConfig_t                   *mac_MainConfig,
-    MeasGapConfig_t                    *measGapConfig,
-    MobilityControlInfo_t              *mobilityInfo,
-    struct MeasConfig__speedStatePars  *speedStatePars,
-    RSRP_Range_t                       *rsrp,
-    C_RNTI_t                           *cba_rnti,
-  struct RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList* dedicatedInfoNASList
-#if defined(Rel10) || defined(Rel14)
-    , SCellToAddMod_r10_t  *SCell_config
-#endif
-                                        );
-
-/**
-\brief Generate an RRCConnectionReestablishmentReject DL-CCCH-Message (eNB).
-@param Mod_id Module ID of eNB
-@param buffer Pointer to PER-encoded ASN.1 description of DL-CCCH-Message PDU
-@returns Size of encoded bit stream in bytes*/
-/*uint8_t
-do_RRCConnectionReestablishmentReject(
-    uint8_t                    Mod_id,
-    uint8_t*                   const buffer);
-
-/**
-\brief Generate an RRCConnectionReject DL-CCCH-Message (eNB).
-@param Mod_id Module ID of eNB
-@param buffer Pointer to PER-encoded ASN.1 description of DL-CCCH-Message PDU
-@returns Size of encoded bit stream in bytes*/
-/*uint8_t
-do_RRCConnectionReject(
-    uint8_t                    Mod_id,
-    uint8_t*                   const buffer);
-
-/**
-\brief Generate an RRCConnectionRequest UL-CCCH-Message (UE) based on random string or S-TMSI.  This
-routine only generates an mo-data establishment cause.
-@param Mod_id Module ID of eNB
-@param buffer Pointer to PER-encoded ASN.1 description of UL-DCCH-Message PDU
-@param transaction_id Transaction index
-@returns Size of encoded bit stream in bytes*/
-
-/*uint8_t do_RRCConnectionRelease(uint8_t Mod_id, uint8_t *buffer,int Transaction_id);
-
-/***
- * \brief Generate an MCCH-Message (eNB). This routine configures MBSFNAreaConfiguration (PMCH-InfoList and Subframe Allocation for MBMS data)
- * @param buffer Pointer to PER-encoded ASN.1 description of MCCH-Message PDU
- * @returns Size of encoded bit stream in bytes
-*/
-/*uint8_t do_MCCHMessage(uint8_t *buffer);
-#if defined(Rel10) || defined(Rel14)
-/***
- * \brief Generate an MCCH-Message (eNB). This routine configures MBSFNAreaConfiguration (PMCH-InfoList and Subframe Allocation for MBMS data)
- * @param buffer Pointer to PER-encoded ASN.1 description of MCCH-Message PDU
- * @returns Size of encoded bit stream in bytes
-*/
-/*uint8_t do_MBSFNAreaConfig(uint8_t Mod_id,
-                           uint8_t sync_area,
-                           uint8_t *buffer,
-                           MCCH_Message_t *mcch_message,
-                           MBSFNAreaConfiguration_r9_t **mbsfnAreaConfiguration);
-#endif
 
-uint8_t do_MeasurementReport(uint8_t Mod_id, uint8_t *buffer,int measid,int phy_id,long rsrp_s,long rsrq_s,long rsrp_t,long rsrq_t);
 
-uint8_t do_DLInformationTransfer(uint8_t Mod_id, uint8_t **buffer, uint8_t transaction_id, uint32_t pdu_length, uint8_t *pdu_buffer);
 
-uint8_t do_ULInformationTransfer(uint8_t **buffer, uint32_t pdu_length, uint8_t *pdu_buffer);
 
-OAI_UECapability_t *fill_ue_capability(char *UE_EUTRA_Capability_xer);
 
-uint8_t
-do_UECapabilityEnquiry(
-  const protocol_ctxt_t* const ctxt_pP,
-  uint8_t*               const buffer,
-  const uint8_t                Transaction_id
-);
 
-uint8_t do_SecurityModeCommand(
-  const protocol_ctxt_t* const ctxt_pP,
-  uint8_t* const buffer,
-  const uint8_t Transaction_id,
-  const uint8_t cipheringAlgorithm,
-  const uint8_t integrityProtAlgorithm);
diff --git a/openair2/RRC/NR/L2_interface_NR.c b/openair2/RRC/NR/NR_L2_interface.c
similarity index 100%
rename from openair2/RRC/NR/L2_interface_NR.c
rename to openair2/RRC/NR/NR_L2_interface.c
diff --git a/openair2/RRC/NR/defs_NR.h b/openair2/RRC/NR/defs_NR.h
deleted file mode 100644
index b1a37590be..0000000000
--- a/openair2/RRC/NR/defs_NR.h
+++ /dev/null
@@ -1,573 +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
- */
-
-/*! \file RRC/LITE/defs_NR.h
-* \brief NR RRC struct definitions and function prototypes
-* \author Navid Nikaein, Raymond Knopp 
-* \date 2010 - 2014, 2018
-* \version 1.0
-* \company Eurecom
-* \email: navid.nikaein@eurecom.fr, raymond.knopp@eurecom.fr
-*/
-
-#ifndef __OPENAIR_RRC_DEFS_NR_H__
-#define __OPENAIR_RRC_DEFS_NR_H__
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "collection/tree.h"
-#include "rrc_types_NR.h"
-#include "COMMON/platform_constants.h"
-#include "COMMON/platform_types.h"
-
-//#include "COMMON/mac_rrc_primitives.h"
-#if defined(NR_Rel15)
-#include "NR_SIB1.h"
-//#include "SystemInformation.h"
-//#include "RRCConnectionReconfiguration.h"
-#include "NR_RRCReconfigurationComplete.h"
-#include "NR_RRCReconfiguration.h"
-//#include "RRCConnectionReconfigurationComplete.h"
-//#include "RRCConnectionSetup.h"
-//#include "RRCConnectionSetupComplete.h"
-//#include "RRCConnectionRequest.h"
-//#include "RRCConnectionReestablishmentRequest.h"
-//#include "BCCH-DL-SCH-Message.h"
-#include "NR_BCCH-BCH-Message.h"
-//#include "MCCH-Message.h"
-//#include "MBSFNAreaConfiguration-r9.h"
-//#include "SCellToAddMod-r10.h"
-//#include "AS-Config.h"
-//#include "AS-Context.h"
-#include "NR_UE-NR-Capability.h"
-#include "NR_MeasResults.h"
-#include "NR_ServingCellConfigCommon.h"
-#endif
-//-------------------
-
-#if defined(ENABLE_ITTI)
-# include "intertask_interface.h"
-#endif
-
-/* TODO: be sure this include is correct.
- * It solves a problem of compilation of the RRH GW,
- * issue #186.
- */
-#if !defined(ENABLE_ITTI)
-# include "as_message.h"
-#endif
-
-#if defined(ENABLE_USE_MME)
-# include "commonDef.h"
-#endif
-
-#if ENABLE_RAL
-# include "collection/hashtable/obj_hashtable.h"
-#endif
-
-
-
-/*I will change the name of the structure for compile purposes--> hope not to undo this process*/
-
-typedef unsigned int uid_NR_t;
-#define UID_LINEAR_ALLOCATOR_BITMAP_SIZE_NR (((NUMBER_OF_NR_UE_MAX/8)/sizeof(unsigned int)) + 1)
-
-typedef struct uid_linear_allocator_NR_s {
-  unsigned int   bitmap[UID_LINEAR_ALLOCATOR_BITMAP_SIZE_NR];
-} uid_allocator_NR_t;
-    
-
-#define PROTOCOL_NRRRC_CTXT_UE_FMT                PROTOCOL_CTXT_FMT
-#define PROTOCOL_NRRRC_CTXT_UE_ARGS(CTXT_Pp)      PROTOCOL_CTXT_ARGS(CTXT_Pp)
-
-#define PROTOCOL_NRRRC_CTXT_FMT                   PROTOCOL_CTXT_FMT
-#define PROTOCOL_NRRRC_CTXT_ARGS(CTXT_Pp)         PROTOCOL_CTXT_ARGS(CTXT_Pp)
-
-
-#define UE_MODULE_INVALID ((module_id_t) ~0) // FIXME attention! depends on type uint8_t!!!
-#define UE_INDEX_INVALID  ((module_id_t) ~0) // FIXME attention! depends on type uint8_t!!! used to be -1
-
-typedef enum {
-  NR_RRC_OK=0,
-  NR_RRC_ConnSetup_failed,
-  NR_RRC_PHY_RESYNCH,
-  NR_RRC_Handover_failed,
-  NR_RRC_HO_STARTED
-} NR_RRC_status_t;
-
-typedef enum UE_STATE_NR_e {
-  NR_RRC_INACTIVE=0,
-  NR_RRC_IDLE,
-  NR_RRC_SI_RECEIVED,
-  NR_RRC_CONNECTED,
-  NR_RRC_RECONFIGURED,
-  NR_RRC_HO_EXECUTION
-} NR_UE_STATE_t;
-
-typedef enum HO_STATE_NR_e {
-  NR_HO_IDLE=0,
-  NR_HO_MEASURMENT,
-  NR_HO_PREPARE,
-  NR_HO_CMD, // initiated by the src eNB
-  NR_HO_COMPLETE // initiated by the target eNB
-} NR_HO_STATE_t;
-
-//#define NUMBER_OF_UE_MAX MAX_MOBILES_PER_RG
-#define RRM_FREE(p)       if ( (p) != NULL) { free(p) ; p=NULL ; }
-#define RRM_MALLOC(t,n)   (t *) malloc16( sizeof(t) * n )
-#define RRM_CALLOC(t,n)   (t *) malloc16( sizeof(t) * n)
-#define RRM_CALLOC2(t,s)  (t *) malloc16( s )
-
-#define MAX_MEAS_OBJ                                  6
-#define MAX_MEAS_CONFIG                               6
-#define MAX_MEAS_ID                                   6
-
-#define PAYLOAD_SIZE_MAX                              1024
-#define RRC_BUF_SIZE                                  255
-#define UNDEF_SECURITY_MODE                           0xff
-#define NO_SECURITY_MODE                              0x20
-
-/* TS 36.331: RRC-TransactionIdentifier ::= INTEGER (0..3) */
-#define RRC_TRANSACTION_IDENTIFIER_NUMBER             3
-
-typedef struct {
-  unsigned short                                      transport_block_size;      /*!< \brief Minimum PDU size in bytes provided by RLC to MAC layer interface */
-  unsigned short                                      max_transport_blocks;      /*!< \brief Maximum PDU size in bytes provided by RLC to MAC layer interface */
-  unsigned long                                       Guaranteed_bit_rate;       /*!< \brief Guaranteed Bit Rate (average) to be offered by MAC layer scheduling*/
-  unsigned long                                       Max_bit_rate;              /*!< \brief Maximum Bit Rate that can be offered by MAC layer scheduling*/
-  uint8_t                                             Delay_class;               /*!< \brief Delay class offered by MAC layer scheduling*/
-  uint8_t                                             Target_bler;               /*!< \brief Target Average Transport Block Error rate*/
-  uint8_t                                             Lchan_t;                   /*!< \brief Logical Channel Type (BCCH,CCCH,DCCH,DTCH_B,DTCH,MRBCH)*/
-} __attribute__ ((__packed__))  LCHAN_DESC_NR;
-
-typedef struct UE_RRC_INFO_NR_s {
-  NR_UE_STATE_t                                       State;
-  uint8_t                                             SIB1systemInfoValueTag;
-  uint32_t                                            SIStatus;
-  uint32_t                                            SIcnt;
-#if defined(Rel10) || defined(Rel14)
-  uint8_t                                             MCCHStatus[8];             // MAX_MBSFN_AREA
-#endif
-  uint8_t                                             SIwindowsize;              //!< Corresponds to the SIB1 si-WindowLength parameter. The unit is ms. Possible values are (final): 1,2,5,10,15,20,40
-  uint8_t                                             handoverTarget;
-  //HO_STATE_t ho_state;
-  uint16_t                                            SIperiod;                  //!< Corresponds to the SIB1 si-Periodicity parameter (multiplied by 10). Possible values are (final): 80,160,320,640,1280,2560,5120
-  unsigned short                                      UE_index;
-  uint32_t                                            T300_active;
-  uint32_t                                            T300_cnt;
-  uint32_t                                            T304_active;
-  uint32_t                                            T304_cnt;
-  uint32_t                                            T310_active;
-  uint32_t                                            T310_cnt;
-  uint32_t                                            N310_cnt;
-  uint32_t                                            N311_cnt;
-  rnti_t                                              rnti;
-} __attribute__ ((__packed__)) UE_RRC_INFO_NR;
-
-typedef struct UE_S_TMSI_NR_s {
-  boolean_t                                           presence;
-  mme_code_t                                          mme_code;
-  m_tmsi_t                                            m_tmsi;
-} __attribute__ ((__packed__)) UE_S_TMSI_NR;
-
-
-typedef enum e_rab_satus_NR_e {
-  E_RAB_STATUS_NEW_NR,
-  E_RAB_STATUS_DONE_NR,           // from the eNB perspective
-  E_RAB_STATUS_ESTABLISHED_NR,    // get the reconfigurationcomplete form UE
-  E_RAB_STATUS_FAILED_NR,
-} e_rab_status_NR_t;
-
-typedef struct e_rab_param_NR_s {
-  e_rab_t param;
-  uint8_t status;
-  uint8_t xid; // transaction_id
-} __attribute__ ((__packed__)) e_rab_param_NR_t;
-
-
-typedef struct HANDOVER_INFO_NR_s {
-  uint8_t                                             ho_prepare;
-  uint8_t                                             ho_complete;
-  uint8_t                                             modid_s;            //module_idP of serving cell
-  uint8_t                                             modid_t;            //module_idP of target cell
-  uint8_t                                             ueid_s;             //UE index in serving cell
-  uint8_t                                             ueid_t;             //UE index in target cell
-
-  // NR not define at this moment
-  //AS_Config_t                                       as_config;          /* these two parameters are taken from 36.331 section 10.2.2: HandoverPreparationInformation-r8-IEs */
-  //AS_Context_t                                      as_context;         /* They are mandatory for HO */
-
-  uint8_t                                             buf[RRC_BUF_SIZE];  /* ASN.1 encoded handoverCommandMessage */
-  int                                                 size;               /* size of above message in bytes */
-} HANDOVER_INFO_NR;
-
-
-#define RRC_HEADER_SIZE_MAX 64
-#define RRC_BUFFER_SIZE_MAX 1024
-
-typedef struct {
-  char                                                Payload[RRC_BUFFER_SIZE_MAX];
-  char                                                Header[RRC_HEADER_SIZE_MAX];
-  char                                                payload_size;
-} RRC_BUFFER_NR;
-
-#define RRC_BUFFER_SIZE_NR                            sizeof(RRC_BUFFER_NR)
-
-
-typedef struct RB_INFO_NR_s {
-  uint16_t                                            Rb_id;  //=Lchan_id
-  LCHAN_DESC Lchan_desc[2]; 
-  //MAC_MEAS_REQ_ENTRY *Meas_entry; //may not needed for NB-IoT
-} RB_INFO_NR;
-
-typedef struct SRB_INFO_NR_s {
-  uint16_t                                            Srb_id;         //=Lchan_id
-  RRC_BUFFER                                          Rx_buffer;
-  RRC_BUFFER                                          Tx_buffer;
-  LCHAN_DESC                                          Lchan_desc[2];
-  unsigned int                                        Trans_id;
-  uint8_t                                             Active;
-} SRB_INFO_NR;
-
-
-typedef struct RB_INFO_TABLE_ENTRY_NR_s {
-  RB_INFO_NR                                          Rb_info;
-  uint8_t                                             Active;
-  uint32_t                                            Next_check_frame;
-  uint8_t                                             Status;
-} RB_INFO_TABLE_ENTRY_NR;
-
-typedef struct SRB_INFO_TABLE_ENTRY_NR_s {
-  SRB_INFO_NR                                         Srb_info;
-  uint8_t                                             Active;
-  uint8_t                                             Status;
-  uint32_t                                            Next_check_frame;
-} SRB_INFO_TABLE_ENTRY_NR;
-
-typedef struct MEAS_REPORT_LIST_NR_s {
-  MeasId_t                                            measId;
-  //CellsTriggeredList  cellsTriggeredList;//OPTIONAL
-  uint32_t                                            numberOfReportsSent;
-} MEAS_REPORT_LIST_NR;
-
-typedef struct HANDOVER_INFO_UE_NR_s {
-  PhysCellId_t                                        targetCellId;
-  uint8_t                                             measFlag;
-} HANDOVER_INFO_UE_NR;
-
-//NB-IoT eNB_RRC_UE_NB_IoT_s--(used as a context in eNB --> ue_context in rrc_eNB_ue_context)------
-typedef struct gNB_RRC_UE_s {
-
-  uint8_t                                             primaryCC_id;
-  
-  //SCellToAddMod_t                               sCell_config[2];
-
-  SRB_ToAddModList_t*                                 SRB_configList;//for SRB1 and SRB1bis
-  SRB_ToAddModList_t*                                 SRB_configList2[RRC_TRANSACTION_IDENTIFIER_NUMBER];
-  DRB_ToAddModList_t*                                 DRB_configList; //for all the DRBs
-  DRB_ToAddModList_t*                                 DRB_configList2[RRC_TRANSACTION_IDENTIFIER_NUMBER]; //for the configured DRBs of a xid
-  uint8_t                                             DRB_active[8];//in LTE was 8 
-
-  // NR not define at this moment
-  //struct PhysicalConfigDedicated*                   physicalConfigDedicated_NR;
-  
-  struct SPS_Config*                                  sps_Config;
-  MeasObjectToAddMod_t*                               MeasObj[MAX_MEAS_OBJ];
-  struct ReportConfigToAddMod*                        ReportConfig[MAX_MEAS_CONFIG];
-  struct QuantityConfig*                              QuantityConfig;
-  struct MeasIdToAddMod*                              MeasId[MAX_MEAS_ID];
-
-  // NR not define at this moment
-  //MAC_MainConfig_t*                                 mac_MainConfig_NR;
-
-  MeasGapConfig_t*                                    measGapConfig;
-
-  SRB_INFO_NR                                         SI;
-  SRB_INFO_NR                                         Srb0;
-  SRB_INFO_TABLE_ENTRY_NR                             Srb1;
-  SRB_INFO_TABLE_ENTRY_NR                             Srb2;
-
-  MeasConfig_t*                                       measConfig;
-  HANDOVER_INFO_NR*                                   handover_info;
-
-
-#if defined(ENABLE_SECURITY)
-  /* KeNB as derived from KASME received from EPC */
-  uint8_t                                             kenb[32];
-#endif
-
-  /* Used integrity/ciphering algorithms */
-  //Specs. TS 38.331 V15.1.0 pag 432 Change position of chipering enumerative w.r.t previous version
-  e_NR_CipheringAlgorithm                                ciphering_algorithm; 
-  e_NR_IntegrityProtAlgorithm                           integrity_algorithm;
-
-  uint8_t                                             Status;
-  rnti_t                                              rnti;
-  uint64_t                                            random_ue_identity;
-
-
-
-  /* Information from UE RRC ConnectionRequest */
-  UE_S_TMSI_NR                                        Initialue_identity_s_TMSI;
-  
-  /* NR not define at this moment
-  EstablishmentCause_t                             establishment_cause_NR; //different set for NB-IoT
-  */
-  /* NR not define at this moment*/
-  /* Information from UE RRC ConnectionReestablishmentRequest  */
-  //ReestablishmentCause_t                           reestablishment_cause_NR; //different set for NB_IoT
-
-  /* UE id for initial connection to S1AP */
-  uint16_t                                            ue_initial_id;
-
-  /* Information from S1AP initial_context_setup_req */
-  uint32_t                                            eNB_ue_s1ap_id :24;
-
-  security_capabilities_t                             security_capabilities;
-
-  /* Total number of e_rab already setup in the list */ //NAS list?
-  uint8_t                                             setup_e_rabs;
-  /* Number of e_rab to be setup in the list */ //NAS list?
-  uint8_t                                             nb_of_e_rabs;
-  /* list of e_rab to be setup by RRC layers */
-  e_rab_param_NR_t                                    e_rab[NB_RB_MAX_NB_IOT];//[S1AP_MAX_E_RAB];
-
-  // LG: For GTPV1 TUNNELS
-  uint32_t                                            enb_gtp_teid[S1AP_MAX_E_RAB];
-  transport_layer_addr_t                              enb_gtp_addrs[S1AP_MAX_E_RAB];
-  rb_id_t                                             enb_gtp_ebi[S1AP_MAX_E_RAB];
-
- //Which timers are referring to?
-  uint32_t                                            ul_failure_timer;
-  uint32_t                                            ue_release_timer;
-  //threshold of the release timer--> set in RRCConnectionRelease
-  uint32_t                                            ue_release_timer_thres;
-} gNB_RRC_UE_t;
-//--------------------------------------------------------------------------------
-
-typedef uid_NR_t ue_uid_t;
-
-
-//generally variable called: ue_context_pP
-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.
-   */
-  rnti_t                                    ue_id_rnti;
-
-  // another key for protocol layers but should not be used as a key for RB tree
-  ue_uid_t                                  local_uid;
-
-  /* UE id for initial connection to S1AP */
-  struct gNB_RRC_UE_s                       ue_context; //context of ue in the e-nB
-
-} rrc_gNB_ue_context_t;
-
-
-//called "carrier"--> data from PHY layer
-typedef struct {
-
-  // buffer that contains the encoded messages
-  uint8_t							                      *MIB;
-  uint8_t							                      sizeof_MIB;
-
-  uint8_t                                   *SIB1;
-  uint8_t                                   sizeof_SIB1;
-
-  //implicit parameters needed
-  int                                       Ncp; //cyclic prefix for DL
-  int								                        Ncp_UL; //cyclic prefix for UL
-  int                                       p_gNB; //number of tx antenna port
-  int								                        p_rx_gNB; //number of receiving antenna ports
-  uint32_t                                  dl_CarrierFreq; //detected by the UE
-  uint32_t                                  ul_CarrierFreq; //detected by the UE
-  uint16_t                                  physCellId; 
-  
-  //are the only static one (memory has been already allocated)
-  BCCH_BCH_Message_t                        mib;
-  
-  NR_SIB1_t     		                            *sib1;
-  NR_ServingCellConfigCommon_t                 *servingcellconfigcommon;
-
-
-  SRB_INFO_NR                               SI;
-  SRB_INFO_NR                               Srb0;
-
-} rrc_gNB_carrier_data_t;
-//---------------------------------------------------
-
-
-
-//---NR---(completely change)---------------------
-typedef struct gNB_RRC_INST_s {
-
-  eth_params_t                                        eth_params_s;
-  rrc_gNB_carrier_data_t                              carrier[MAX_NUM_CCs];
-  uid_allocator_NR_t                                  uid_allocator; // for rrc_ue_head
-  RB_HEAD(rrc_ue_tree_NR_s, rrc_gNB_ue_context_s)     rrc_ue_head; // ue_context tree key search by rnti
-  
-  uint8_t                                             HO_flag;
-  uint8_t                                             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
-
-  //RRC configuration
-#if defined(ENABLE_ITTI)
-  gNB_RrcConfigurationReq                             configuration;//rrc_messages_types.h
-#endif
-
-  // other PLMN parameters
-  /// Mobile country code
-  int mcc;
-  /// Mobile network code
-  int mnc;
-  /// number of mnc digits
-  int mnc_digit_length;
-
-  // other RAN parameters
-  int srb1_timer_poll_retransmit;
-  int srb1_poll_pdu;
-  int srb1_poll_byte;
-  int srb1_max_retx_threshold;
-  int srb1_timer_reordering;
-  int srb1_timer_status_prohibit;
-  int srs_enable[MAX_NUM_CCs];
-
-} gNB_RRC_INST;
-
-//#define RRC_HEADER_SIZE_MAX_NR 64
-#define MAX_UE_CAPABILITY_SIZE_NR 255
-
-//not needed for the moment
-typedef struct OAI_UECapability_NR_s {
- uint8_t sdu[MAX_UE_CAPABILITY_SIZE_NR];
- uint8_t sdu_size;
-////NR------
-  NR_UE_NR_Capability_t  UE_Capability_NR; //replace the UE_EUTRA_Capability of LTE
-} OAI_UECapability_NR_t;
-
-
-typedef struct UE_RRC_INST_NR_s {
-  Rrc_State_NR_t     RrcState;
-  Rrc_Sub_State_NR_t RrcSubState;
-# if defined(ENABLE_USE_MME)
-  plmn_t          plmnID;
-  Byte_t          rat;
-  as_nas_info_t   initialNasMsg;
-# endif
-  OAI_UECapability_NR_t *UECap;
-  uint8_t *UECapability;
-  uint8_t UECapability_size;
-
-  UE_RRC_INFO_NR              Info[NB_SIG_CNX_UE];
-  
-  SRB_INFO_NR                 Srb0[NB_SIG_CNX_UE];
-  SRB_INFO_TABLE_ENTRY_NR     Srb1[NB_CNX_UE];
-  SRB_INFO_TABLE_ENTRY_NR     Srb2[NB_CNX_UE];
-  HANDOVER_INFO_UE_NR         HandoverInfoUe;
-  /*
-  uint8_t *SIB1[NB_CNX_UE];
-  uint8_t sizeof_SIB1[NB_CNX_UE];
-  uint8_t *SI[NB_CNX_UE];
-  uint8_t sizeof_SI[NB_CNX_UE];
-  uint8_t SIB1Status[NB_CNX_UE];
-  uint8_t SIStatus[NB_CNX_UE];
-  SIB1_t *sib1[NB_CNX_UE];
-  SystemInformation_t *si[NB_CNX_UE]; //!< Temporary storage for an SI message. Decoding happens in decode_SI().
-  
-  SystemInformationBlockType2_t *sib2[NB_CNX_UE];
-  SystemInformationBlockType3_t *sib3[NB_CNX_UE];
-  SystemInformationBlockType4_t *sib4[NB_CNX_UE];
-  SystemInformationBlockType5_t *sib5[NB_CNX_UE];
-  SystemInformationBlockType6_t *sib6[NB_CNX_UE];
-  SystemInformationBlockType7_t *sib7[NB_CNX_UE];
-  SystemInformationBlockType8_t *sib8[NB_CNX_UE];
-  SystemInformationBlockType9_t *sib9[NB_CNX_UE];
-  SystemInformationBlockType10_t *sib10[NB_CNX_UE];
-  SystemInformationBlockType11_t *sib11[NB_CNX_UE];
-
-#if defined(Rel10) || defined(Rel14)
-  uint8_t                           MBMS_flag;
-  uint8_t *MCCH_MESSAGE[NB_CNX_UE];
-  uint8_t sizeof_MCCH_MESSAGE[NB_CNX_UE];
-  uint8_t MCCH_MESSAGEStatus[NB_CNX_UE];
-  MBSFNAreaConfiguration_r9_t       *mcch_message[NB_CNX_UE];
-  SystemInformationBlockType12_r9_t *sib12[NB_CNX_UE];
-  SystemInformationBlockType13_r9_t *sib13[NB_CNX_UE];
-#endif
-#ifdef CBA
-  uint8_t                         num_active_cba_groups;
-  uint16_t                        cba_rnti[NUM_MAX_CBA_GROUP];
-#endif
-  uint8_t                         num_srb;
-  struct SRB_ToAddMod             *SRB1_config[NB_CNX_UE];
-  struct SRB_ToAddMod             *SRB2_config[NB_CNX_UE];
-  struct DRB_ToAddMod             *DRB_config[NB_CNX_UE][8];
-  rb_id_t                         *defaultDRB; // remember the ID of the default DRB
-  MeasObjectToAddMod_t            *MeasObj[NB_CNX_UE][MAX_MEAS_OBJ];
-  struct ReportConfigToAddMod     *ReportConfig[NB_CNX_UE][MAX_MEAS_CONFIG];
-  */
-  struct QuantityConfig           *QuantityConfig[NB_CNX_UE];
-  /*
-  struct MeasIdToAddMod           *MeasId[NB_CNX_UE][MAX_MEAS_ID];
-  MEAS_REPORT_LIST      *measReportList[NB_CNX_UE][MAX_MEAS_ID];
-  uint32_t           measTimer[NB_CNX_UE][MAX_MEAS_ID][6]; // 6 neighboring cells
-  RSRP_Range_t                    s_measure;
-  struct MeasConfig__speedStatePars *speedStatePars;
-  struct PhysicalConfigDedicated  *physicalConfigDedicated[NB_CNX_UE];
-  struct SPS_Config               *sps_Config[NB_CNX_UE];
-  MAC_MainConfig_t                *mac_MainConfig[NB_CNX_UE];
-  MeasGapConfig_t                 *measGapConfig[NB_CNX_UE];
-  double                          filter_coeff_rsrp; // [7] ???
-  double                          filter_coeff_rsrq; // [7] ???
-  float                           rsrp_db[7];
-  float                           rsrq_db[7];
-  float                           rsrp_db_filtered[7];
-  float                           rsrq_db_filtered[7];
-#if ENABLE_RAL
-  obj_hash_table_t               *ral_meas_thresholds;
-  ral_transaction_id_t            scan_transaction_id;
-#endif
-#if defined(ENABLE_SECURITY)
-  // KeNB as computed from parameters within USIM card //
-  uint8_t kenb[32];
-#endif
-
-  // Used integrity/ciphering algorithms //
-  CipheringAlgorithm_r12_t                          ciphering_algorithm;
-  e_SecurityAlgorithmConfig__integrityProtAlgorithm integrity_algorithm;
-  */
-}UE_RRC_INST_NR;
-
-
-
-
-#include "proto_NR.h" //should be put here otherwise compilation error
-
-#endif
-/** @} */
diff --git a/openair2/RRC/NR/nr_rrc_common.c b/openair2/RRC/NR/nr_rrc_common.c
new file mode 100644
index 0000000000..6902d753b3
--- /dev/null
+++ b/openair2/RRC/NR/nr_rrc_common.c
@@ -0,0 +1,87 @@
+/*
+ * 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
+ */
+
+/*! \file rrc_common.c
+ * \brief rrc common procedures for eNB and UE
+ * \author Navid Nikaein and Raymond Knopp
+ * \date 2011 - 2014
+ * \version 1.0
+ * \company Eurecom
+ * \email:  navid.nikaein@eurecom.fr and raymond.knopp@eurecom.fr
+ */
+
+#include "nr_rrc_defs.h"
+#include "nr_rrc_extern.h"
+#include "LAYER2/MAC/mac_extern.h"
+#include "COMMON/openair_defs.h"
+#include "COMMON/platform_types.h"
+#include "RRC/L2_INTERFACE/openair_rrc_L2_interface.h"
+#include "LAYER2/RLC/rlc.h"
+#include "COMMON/mac_rrc_primitives.h"
+#include "UTIL/LOG/log.h"
+#include "asn1_msg.h"
+#include "pdcp.h"
+#include "UTIL/LOG/vcd_signal_dumper.h"
+#include "rrc_eNB_UE_context.h"
+#include "common/ran_context.h"
+
+#define DEBUG_NR_RRC 1
+
+extern RAN_CONTEXT_t RC;
+extern UE_MAC_INST *UE_mac_inst;
+extern mui_t rrc_gNB_mui;
+
+//-----------------------------------------------------------------------------
+int
+nr_rrc_init_global_param(
+  void
+)
+//-----------------------------------------------------------------------------
+{
+
+  rrc_rlc_register_rrc (rrc_data_ind, NULL); //register with rlc
+
+  DCCH_LCHAN_DESC.transport_block_size = 4;
+  DCCH_LCHAN_DESC.max_transport_blocks = 16;
+  DCCH_LCHAN_DESC.Delay_class = 1;
+  DTCH_DL_LCHAN_DESC.transport_block_size = 52;
+  DTCH_DL_LCHAN_DESC.max_transport_blocks = 20;
+  DTCH_DL_LCHAN_DESC.Delay_class = 1;
+  DTCH_UL_LCHAN_DESC.transport_block_size = 52;
+  DTCH_UL_LCHAN_DESC.max_transport_blocks = 20;
+  DTCH_UL_LCHAN_DESC.Delay_class = 1;
+
+  Rlc_info_um.rlc_mode = RLC_MODE_UM;
+  Rlc_info_um.rlc.rlc_um_info.timer_reordering = 5;
+  Rlc_info_um.rlc.rlc_um_info.sn_field_length = 10;
+  Rlc_info_um.rlc.rlc_um_info.is_mXch = 0;
+  //Rlc_info_um.rlc.rlc_um_info.sdu_discard_mode=16;
+
+  Rlc_info_am_config.rlc_mode = RLC_MODE_AM;
+  Rlc_info_am_config.rlc.rlc_am_info.max_retx_threshold = 50;
+  Rlc_info_am_config.rlc.rlc_am_info.poll_pdu = 8;
+  Rlc_info_am_config.rlc.rlc_am_info.poll_byte = 1000;
+  Rlc_info_am_config.rlc.rlc_am_info.t_poll_retransmit = 15;
+  Rlc_info_am_config.rlc.rlc_am_info.t_reordering = 50;
+  Rlc_info_am_config.rlc.rlc_am_info.t_status_prohibit = 10;
+
+  return 0;
+}
\ No newline at end of file
diff --git a/openair2/RRC/NR/nr_rrc_defs.h b/openair2/RRC/NR/nr_rrc_defs.h
new file mode 100644
index 0000000000..8675224d1d
--- /dev/null
+++ b/openair2/RRC/NR/nr_rrc_defs.h
@@ -0,0 +1,333 @@
+/* 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
+ */
+
+/*! \file RRC/LITE/defs_NR.h
+* \brief NR RRC struct definitions and function prototypes
+* \author Navid Nikaein, Raymond Knopp 
+* \date 2010 - 2014, 2018
+* \version 1.0
+* \company Eurecom
+* \email: navid.nikaein@eurecom.fr, raymond.knopp@eurecom.fr
+*/
+
+#ifndef __OPENAIR_RRC_DEFS_NR_H__
+#define __OPENAIR_RRC_DEFS_NR_H__
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "collection/tree.h"
+#include "nr_rrc_types.h"
+
+#include "COMMON/platform_constants.h"
+#include "COMMON/platform_types.h"
+#include "RRC/LTE/rrc_defs.h"
+//#include "LAYER2/RLC/rlc.h"
+
+//#include "COMMON/mac_rrc_primitives.h"
+#if defined(NR_Rel15)
+#include "NR_SIB1.h"
+//#include "SystemInformation.h"
+//#include "RRCConnectionReconfiguration.h"
+#include "NR_RRCReconfigurationComplete.h"
+#include "NR_RRCReconfiguration.h"
+//#include "RRCConnectionReconfigurationComplete.h"
+//#include "RRCConnectionSetup.h"
+//#include "RRCConnectionSetupComplete.h"
+//#include "RRCConnectionRequest.h"
+//#include "RRCConnectionReestablishmentRequest.h"
+//#include "BCCH-DL-SCH-Message.h"
+#include "NR_BCCH-BCH-Message.h"
+//#include "MCCH-Message.h"
+//#include "MBSFNAreaConfiguration-r9.h"
+//#include "SCellToAddMod-r10.h"
+//#include "AS-Config.h"
+//#include "AS-Context.h"
+#include "NR_UE-NR-Capability.h"
+#include "NR_MeasResults.h"
+#include "NR_ServingCellConfigCommon.h"
+#endif
+//-------------------
+
+#if defined(ENABLE_ITTI)
+# include "intertask_interface.h"
+#endif
+
+/* TODO: be sure this include is correct.
+ * It solves a problem of compilation of the RRH GW,
+ * issue #186.
+ */
+#if !defined(ENABLE_ITTI)
+# include "as_message.h"
+#endif
+
+#if defined(ENABLE_USE_MME)
+# include "commonDef.h"
+#endif
+
+
+/*I will change the name of the structure for compile purposes--> hope not to undo this process*/
+
+typedef unsigned int uid_nr_t;
+#define NR_UID_LINEAR_ALLOCATOR_BITMAP_SIZE (((NUMBER_OF_NR_UE_MAX/8)/sizeof(unsigned int)) + 1)
+
+typedef struct nr_uid_linear_allocator_s {
+  unsigned int   bitmap[NR_UID_LINEAR_ALLOCATOR_BITMAP_SIZE];
+} nr_uid_allocator_t;
+    
+
+#define PROTOCOL_NR_RRC_CTXT_UE_FMT                PROTOCOL_CTXT_FMT
+#define PROTOCOL_NR_RRC_CTXT_UE_ARGS(CTXT_Pp)      PROTOCOL_CTXT_ARGS(CTXT_Pp)
+
+#define PROTOCOL_NR_RRC_CTXT_FMT                   PROTOCOL_CTXT_FMT
+#define PROTOCOL_NR_RRC_CTXT_ARGS(CTXT_Pp)         PROTOCOL_CTXT_ARGS(CTXT_Pp)
+
+
+#define NR_UE_MODULE_INVALID ((module_id_t) ~0) // FIXME attention! depends on type uint8_t!!!
+#define NR_UE_INDEX_INVALID  ((module_id_t) ~0) // FIXME attention! depends on type uint8_t!!! used to be -1
+
+typedef enum {
+  NR_RRC_OK=0,
+  NR_RRC_ConnSetup_failed,
+  NR_RRC_PHY_RESYNCH,
+  NR_RRC_Handover_failed,
+  NR_RRC_HO_STARTED
+} NR_RRC_status_t;
+
+typedef enum UE_STATE_NR_e {
+  NR_RRC_INACTIVE=0,
+  NR_RRC_IDLE,
+  NR_RRC_SI_RECEIVED,
+  NR_RRC_CONNECTED,
+  NR_RRC_RECONFIGURED,
+  NR_RRC_HO_EXECUTION
+} NR_UE_STATE_t;
+
+
+//#define NUMBER_OF_NR_UE_MAX MAX_MOBILES_PER_RG
+#define RRM_FREE(p)       if ( (p) != NULL) { free(p) ; p=NULL ; }
+#define RRM_MALLOC(t,n)   (t *) malloc16( sizeof(t) * n )
+#define RRM_CALLOC(t,n)   (t *) malloc16( sizeof(t) * n)
+#define RRM_CALLOC2(t,s)  (t *) malloc16( s )
+
+#define MAX_MEAS_OBJ                                  6
+#define MAX_MEAS_CONFIG                               6
+#define MAX_MEAS_ID                                   6
+
+#define PAYLOAD_SIZE_MAX                              1024
+#define RRC_BUF_SIZE                                  255
+#define UNDEF_SECURITY_MODE                           0xff
+#define NO_SECURITY_MODE                              0x20
+
+/* TS 36.331: RRC-TransactionIdentifier ::= INTEGER (0..3) */
+#define NR_RRC_TRANSACTION_IDENTIFIER_NUMBER             3
+
+typedef struct {
+  unsigned short                                      transport_block_size;      /*!< \brief Minimum PDU size in bytes provided by RLC to MAC layer interface */
+  unsigned short                                      max_transport_blocks;      /*!< \brief Maximum PDU size in bytes provided by RLC to MAC layer interface */
+  unsigned long                                       Guaranteed_bit_rate;       /*!< \brief Guaranteed Bit Rate (average) to be offered by MAC layer scheduling*/
+  unsigned long                                       Max_bit_rate;              /*!< \brief Maximum Bit Rate that can be offered by MAC layer scheduling*/
+  uint8_t                                             Delay_class;               /*!< \brief Delay class offered by MAC layer scheduling*/
+  uint8_t                                             Target_bler;               /*!< \brief Target Average Transport Block Error rate*/
+  uint8_t                                             Lchan_t;                   /*!< \brief Logical Channel Type (BCCH,CCCH,DCCH,DTCH_B,DTCH,MRBCH)*/
+} __attribute__ ((__packed__))  NR_LCHAN_DESC;
+
+typedef struct UE_RRC_INFO_NR_s {
+  NR_UE_STATE_t                                       State;
+  uint8_t                                             SIB1systemInfoValueTag;
+  uint32_t                                            SIStatus;
+  uint32_t                                            SIcnt;
+#if defined(Rel10) || defined(Rel14)
+  uint8_t                                             MCCHStatus[8];             // MAX_MBSFN_AREA
+#endif
+  uint8_t                                             SIwindowsize;              //!< Corresponds to the SIB1 si-WindowLength parameter. The unit is ms. Possible values are (final): 1,2,5,10,15,20,40
+  uint8_t                                             handoverTarget;
+  //HO_STATE_t ho_state;
+  uint16_t                                            SIperiod;                  //!< Corresponds to the SIB1 si-Periodicity parameter (multiplied by 10). Possible values are (final): 80,160,320,640,1280,2560,5120
+  unsigned short                                      UE_index;
+  uint32_t                                            T300_active;
+  uint32_t                                            T300_cnt;
+  uint32_t                                            T304_active;
+  uint32_t                                            T304_cnt;
+  uint32_t                                            T310_active;
+  uint32_t                                            T310_cnt;
+  uint32_t                                            N310_cnt;
+  uint32_t                                            N311_cnt;
+  rnti_t                                              rnti;
+} __attribute__ ((__packed__)) NR_UE_RRC_INFO;
+
+typedef struct UE_S_TMSI_NR_s {
+  boolean_t                                           presence;
+  mme_code_t                                          mme_code;
+  m_tmsi_t                                            m_tmsi;
+} __attribute__ ((__packed__)) NR_UE_S_TMSI;
+
+
+typedef enum nr_e_rab_satus_e {
+  NR_E_RAB_STATUS_NEW,
+  NR_E_RAB_STATUS_DONE,           // from the gNB perspective
+  NR_E_RAB_STATUS_ESTABLISHED,    // get the reconfigurationcomplete form UE
+  NR_E_RAB_STATUS_FAILED,
+} nr_e_rab_status_t;
+
+typedef struct nr_e_rab_param_s {
+  e_rab_t param;
+  uint8_t status;
+  uint8_t xid; // transaction_id
+} __attribute__ ((__packed__)) nr_e_rab_param_t;
+
+
+typedef struct HANDOVER_INFO_NR_s {
+  uint8_t                                             ho_prepare;
+  uint8_t                                             ho_complete;
+  uint8_t                                             modid_s;            //module_idP of serving cell
+  uint8_t                                             modid_t;            //module_idP of target cell
+  uint8_t                                             ueid_s;             //UE index in serving cell
+  uint8_t                                             ueid_t;             //UE index in target cell
+
+  // NR not define at this moment
+  //AS_Config_t                                       as_config;          /* these two parameters are taken from 36.331 section 10.2.2: HandoverPreparationInformation-r8-IEs */
+  //AS_Context_t                                      as_context;         /* They are mandatory for HO */
+
+  uint8_t                                             buf[RRC_BUF_SIZE];  /* ASN.1 encoded handoverCommandMessage */
+  int                                                 size;               /* size of above message in bytes */
+} NR_HANDOVER_INFO;
+
+
+#define NR_RRC_HEADER_SIZE_MAX 64
+#define NR_RRC_BUFFER_SIZE_MAX 1024
+
+typedef struct {
+  char                                                Payload[NR_RRC_BUFFER_SIZE_MAX];
+  char                                                Header[NR_RRC_HEADER_SIZE_MAX];
+  char                                                payload_size;
+} NR_RRC_BUFFER;
+
+#define NR_RRC_BUFFER_SIZE                            sizeof(RRC_BUFFER_NR)
+
+
+typedef struct RB_INFO_NR_s {
+  uint16_t                                            Rb_id;  //=Lchan_id
+  NR_LCHAN_DESC Lchan_desc[2]; 
+  //MAC_MEAS_REQ_ENTRY *Meas_entry; //may not needed for NB-IoT
+} NR_RB_INFO;
+
+typedef struct NR_SRB_INFO_s {
+  uint16_t                                            Srb_id;         //=Lchan_id
+  NR_RRC_BUFFER                                          Rx_buffer;
+  NR_RRC_BUFFER                                          Tx_buffer;
+  NR_LCHAN_DESC                                          Lchan_desc[2];
+  unsigned int                                        Trans_id;
+  uint8_t                                             Active;
+} NR_SRB_INFO;
+
+
+typedef struct RB_INFO_TABLE_ENTRY_NR_s {
+  NR_RB_INFO                                          Rb_info;
+  uint8_t                                             Active;
+  uint32_t                                            Next_check_frame;
+  uint8_t                                             Status;
+} NR_RB_INFO_TABLE_ENTRY;
+
+typedef struct SRB_INFO_TABLE_ENTRY_NR_s {
+  NR_SRB_INFO                                         Srb_info;
+  uint8_t                                             Active;
+  uint8_t                                             Status;
+  uint32_t                                            Next_check_frame;
+} NR_SRB_INFO_TABLE_ENTRY;
+
+//called "carrier"--> data from PHY layer
+typedef struct {
+
+  // buffer that contains the encoded messages
+  uint8_t							                      *MIB;
+  uint8_t							                      sizeof_MIB;
+
+  uint8_t                                   *SIB1;
+  uint8_t                                   sizeof_SIB1;
+
+  //implicit parameters needed
+  int                                       physCellId;
+  int                                       Ncp; //cyclic prefix for DL
+  int								                        Ncp_UL; //cyclic prefix for UL
+  int                                       p_gNB; //number of tx antenna port
+  int								                        p_rx_gNB; //number of receiving antenna ports
+  uint32_t                                  dl_CarrierFreq; //detected by the UE
+  uint32_t                                  ul_CarrierFreq; //detected by the UE
+  
+  //are the only static one (memory has been already allocated)
+  NR_BCCH_BCH_Message_t                     mib;
+  
+  NR_SIB1_t     		                        *sib1;
+  NR_ServingCellConfigCommon_t              *servingcellconfigcommon;
+
+
+  NR_SRB_INFO                               SI;
+  NR_SRB_INFO                               Srb0;
+
+} rrc_gNB_carrier_data_t;
+//---------------------------------------------------
+
+
+
+//---NR---(completely change)---------------------
+typedef struct gNB_RRC_INST_s {
+
+  eth_params_t                                        eth_params_s;
+  rrc_gNB_carrier_data_t                              carrier[MAX_NUM_CCs];
+  nr_uid_allocator_t                                  uid_allocator; // for rrc_ue_head
+  RB_HEAD(rrc_nr_ue_tree_s, rrc_gNB_ue_context_s)     rrc_ue_head; // ue_context tree key search by rnti
+  
+  uint8_t                                             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
+
+  //RRC configuration
+#if defined(ENABLE_ITTI)
+  gNB_RrcConfigurationReq                             configuration;//rrc_messages_types.h
+#endif
+
+  // other PLMN parameters
+  /// Mobile country code
+  int mcc;
+  /// Mobile network code
+  int mnc;
+  /// number of mnc digits
+  int mnc_digit_length;
+
+  // other RAN parameters
+  int srb1_timer_poll_retransmit;
+  int srb1_poll_pdu;
+  int srb1_poll_byte;
+  int srb1_max_retx_threshold;
+  int srb1_timer_reordering;
+  int srb1_timer_status_prohibit;
+  int srs_enable[MAX_NUM_CCs];
+
+} gNB_RRC_INST;
+
+
+#include "nr_rrc_proto.h" //should be put here otherwise compilation error
+
+#endif
+/** @} */
diff --git a/openair2/RRC/NR/extern_NR.h b/openair2/RRC/NR/nr_rrc_extern.h
similarity index 95%
rename from openair2/RRC/NR/extern_NR.h
rename to openair2/RRC/NR/nr_rrc_extern.h
index b45dbd11e9..b631e13025 100644
--- a/openair2/RRC/NR/extern_NR.h
+++ b/openair2/RRC/NR/nr_rrc_extern.h
@@ -30,16 +30,13 @@
 
 #ifndef __OPENAIR_RRC_EXTERN_H__
 #define __OPENAIR_RRC_EXTERN_H__
-#include "defs.h"
+#include "nr_rrc_defs.h"
 #include "COMMON/mac_rrc_primitives.h"
-#include "LAYER2/MAC/defs.h"
-#include "LAYER2/MAC/extern.h"
+#include "LAYER2/MAC/mac.h"
 #include "LAYER2/RLC/rlc.h"
 
 extern UE_RRC_INST *UE_rrc_inst;
 
-#include "LAYER2/MAC/extern.h"
-
 extern uint8_t DRB2LCHAN[8];
 
 extern LogicalChannelConfig_t SRB1_logicalChannelConfig_defaultValue;
diff --git a/openair2/RRC/NR/nr_rrc_proto.h b/openair2/RRC/NR/nr_rrc_proto.h
new file mode 100644
index 0000000000..d381c7c5aa
--- /dev/null
+++ b/openair2/RRC/NR/nr_rrc_proto.h
@@ -0,0 +1,45 @@
+/*
+ * 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
+ */
+
+/*! \file proto.h
+ * \brief RRC functions prototypes for eNB and UE
+ * \author Navid Nikaein and Raymond Knopp
+ * \date 2010 - 2014
+ * \email navid.nikaein@eurecom.fr
+ * \version 1.0
+ 
+ */
+/** \addtogroup _rrc
+ *  @{
+ */
+
+#include "RRC/NR/nr_rrc_defs.h"
+
+#include "flexran_agent_extern.h"
+
+int nr_rrc_init_global_param(void);
+
+#if defined(ENABLE_ITTI)
+/**\brief RRC eNB task.
+   \param void *args_p Pointer on arguments to start the task. */
+void *rrc_gnb_task(void *args_p);
+
+#endif
\ No newline at end of file
diff --git a/openair2/RRC/NR/rrc_types_NR.h b/openair2/RRC/NR/nr_rrc_types.h
similarity index 100%
rename from openair2/RRC/NR/rrc_types_NR.h
rename to openair2/RRC/NR/nr_rrc_types.h
diff --git a/openair2/RRC/NR/proto_NR.h b/openair2/RRC/NR/proto_NR.h
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/openair2/RRC/NR/rrc_gNB.c b/openair2/RRC/NR/rrc_gNB.c
index 4bc43a7d10..8c3f23754b 100644
--- a/openair2/RRC/NR/rrc_gNB.c
+++ b/openair2/RRC/NR/rrc_gNB.c
@@ -27,44 +27,40 @@
  * \company Eurecom
  * \email: navid.nikaein@eurecom.fr and raymond.knopp@eurecom.fr
  */
-#define RRC_GNB
+#define RRC_GNB_C
 #define RRC_GNB_C
 
-#include "defs_NR.h"
-#include "extern.h"
+#include "nr_rrc_defs.h"
+#include "nr_rrc_extern.h"
 #include "assertions.h"
 #include "common/ran_context.h"
 #include "asn1_conversions.h"
 
 #include "RRC/L2_INTERFACE/openair_rrc_L2_interface.h"
 #include "LAYER2/RLC/rlc.h"
-#include "LAYER2/MAC/proto.h"
+#include "LAYER2/MAC/mac_proto.h"
 #include "UTIL/LOG/log.h"
 #include "COMMON/mac_rrc_primitives.h"
-#include "RRC/NR/asn1_msg.h"
-
-///ASN.1 header files
-//#include "RRCConnectionRequest.h"
-//#include "RRCConnectionReestablishmentRequest.h"
-//#include "ReestablishmentCause.h"
-#include "BCCH-BCH-Message.h"
-//#include "UL-CCCH-Message.h"
-//#include "DL-CCCH-Message.h"
-#include "UL-DCCH-Message.h"
-#include "DL-DCCH-Message.h"
-//#include "TDD-Config.h"
-//#include "HandoverCommand.h"
-#include "MeasResults.h"
+#include "RRC/NR/MESSAGES/asn1_msg.h"
+
+
+#include "NR_BCCH-BCH-Message.h"
+#include "NR_UL-DCCH-Message.h"
+#include "NR_DL-DCCH-Message.h"
+
+#include "NR_MeasResults.h"
 
-#include "pdcp.h"
 #include "rlc.h"
-#include "SIMULATION/ETH_TRANSPORT/extern.h"
 #include "rrc_eNB_UE_context.h"
 #include "platform_types.h"
 #include "msc.h"
 #include "UTIL/LOG/vcd_signal_dumper.h"
+
 #include "T.h"
 
+//#if defined(Rel10) || defined(Rel14)
+#include "MeasResults.h"
+//#endif
 
 #include "RRC/NAS/nas_config.h"
 #include "RRC/NAS/rb_config.h"
@@ -84,20 +80,22 @@
 #   endif
 #endif
 
+#include "pdcp.h"
 #include "gtpv1u_eNB_task.h"
 
 #if defined(ENABLE_ITTI)
 #   include "intertask_interface.h"
 #endif
-             
+
 #if ENABLE_RAL
 #   include "rrc_eNB_ral.h"
 #endif
 
-#include "SIMULATION/TOOLS/defs.h" // for taus
+#include "SIMULATION/TOOLS/sim.h" // for taus
 
 //#define XER_PRINT
 
+
 extern RAN_CONTEXT_t RC;
 
 #ifdef PHY_EMUL
@@ -124,7 +122,7 @@ openair_nrrrc_on(
 {
   int            CC_id;
 
-    LOG_I(NR_RRC, PROTOCOL_RRC_CTXT_FMT" gNB:OPENAIR NR RRC IN....\n",
+    LOG_I(NR_RRC, PROTOCOL_NR_RRC_CTXT_FMT" gNB:OPENAIR NR RRC IN....\n",
           PROTOCOL_RRC_CTXT_ARGS(ctxt_pP));
     for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) {
       rrc_config_buffer (&RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].SI, BCCH, 1);
@@ -154,8 +152,9 @@ init_NR_SI(
 
   // copy basic parameters
   RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].physCellId      = configuration->Nid_cell[CC_id];
-  RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].p_eNB           = configuration->nb_antenna_ports[CC_id];
-  RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].Ncp             = configuration->prefix_type[CC_id];
+  RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].p_gNB           = configuration->nb_antenna_ports[CC_id];
+  RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].Ncp             = configuration->DL_prefix_type[CC_id];
+  RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].Ncp_UL          = configuration->UL_prefix_type[CC_id];
   RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].dl_CarrierFreq  = configuration->downlink_frequency[CC_id];
   RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].ul_CarrierFreq  = configuration->downlink_frequency[CC_id]+ configuration->uplink_frequency_offset[CC_id];
   
@@ -174,18 +173,17 @@ init_NR_SI(
                                                                             );
 
   ///SIB1
-  RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB1     = 0;
-  RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].SIB1            = (uint8_t*) malloc16(32);
-  AssertFatal(RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].SIB1! 
-              = NULL,PROTOCOL_RRC_CTXT_FMT" init_SI: FATAL, no memory for NR SIB1 allocated\n",PROTOCOL_RRC_CTXT_ARGS(ctxt_pP));
+  RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB1      =  0;
+  RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].SIB1             =  (uint8_t*) malloc16(32);
+  AssertFatal(RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].SIB1 != NULL,PROTOCOL_NR_RRC_CTXT_FMT" init_SI: FATAL, no memory for NR SIB1 allocated\n",PROTOCOL_RRC_CTXT_ARGS(ctxt_pP));
   
-  RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB1     = do_SIB1_NR(&RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id],
+/*  RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB1     = do_SIB1_NR(&RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id],
                                                                              ctxt_pP->module_id,
                                                                              CC_id
                                                                              #if defined(ENABLE_ITTI)
                                                                              ,configuration
                                                                              #endif
-                                                                             );
+                                                                             );*/
   
   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");
 
@@ -198,16 +196,15 @@ init_NR_SI(
 
   
   
-  rrc_mac_config_req_gNB(ctxt_pP->module_id, CC_id,
-                         RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].physCellId,
-			 RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].p_gNB,
-			 RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].Ncp,
-			 RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].sib1->freqBandIndicator,
-			 RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].dl_CarrierFreq,
-			 0, // rnti
-			 (BCCH_BCH_Message_t *)&RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].mib,
-			 (ServingCellConfigCommon_t *)&RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id]servingcellconfigcommon
-			 );
+  rrc_mac_config_req_gNB(ctxt_pP->module_id,
+                         CC_id,
+                         RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].p_gNB,
+                         configuration->eutra_band[CC_id],
+                         RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].dl_CarrierFreq,
+                         configuration->N_RB_DL[CC_id],
+                         (NR_BCCH_BCH_Message_t *)&RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].mib,
+                         (NR_ServingCellConfigCommon_t *)&RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].servingcellconfigcommon
+                         );
 }
 
 
@@ -216,7 +213,9 @@ char openair_rrc_gNB_configuration(const module_id_t gnb_mod_idP, gNB_RrcConfigu
   int                  CC_id;
 
   PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, gnb_mod_idP, GNB_FLAG_YES, NOT_A_RNTI, 0, 0,gnb_mod_idP);
-  LOG_I(NR_RRC,PROTOCOL_NRRRC_CTXT_FMT" Init...\n",PROTOCOL_NRRRC_CTXT_ARGS(&ctxt));
+  LOG_I(NR_RRC,
+        PROTOCOL_NR_RRC_CTXT_FMT" Init...\n",
+        PROTOCOL_NR_RRC_CTXT_ARGS(&ctxt));
 
   #if OCP_FRAMEWORK
     while ( RC.nrrrc[gnb_mod_idP] == NULL ) {
@@ -236,7 +235,7 @@ char openair_rrc_gNB_configuration(const module_id_t gnb_mod_idP, gNB_RrcConfigu
     RC.nrrrc[ctxt.module_id]->carrier[CC_id].Srb0.Active = 0;
   }
 
-  uid_linear_allocator_init(&nrrrc.nrrrc[ctxt.module_id]->uid_allocator);
+  uid_linear_allocator_init(&RC.nrrrc[ctxt.module_id]->uid_allocator);
   RB_INIT(&RC.nrrrc[ctxt.module_id]->rrc_ue_head);
 
   RC.nrrrc[ctxt.module_id]->initial_id2_s1ap_ids = hashtable_create (NUMBER_OF_UE_MAX * 2, NULL, NULL);
@@ -246,7 +245,7 @@ char openair_rrc_gNB_configuration(const module_id_t gnb_mod_idP, gNB_RrcConfigu
 
   /// System Information INIT
 
-  LOG_I(NR_RRC, PROTOCOL_NRRRC_CTXT_FMT" Checking release \n",PROTOCOL_NRRRC_CTXT_ARGS(&ctxt));
+  LOG_I(NR_RRC, PROTOCOL_NR_RRC_CTXT_FMT" Checking release \n",PROTOCOL_NR_RRC_CTXT_ARGS(&ctxt));
 
   #ifdef CBA
 
@@ -260,8 +259,8 @@ char openair_rrc_gNB_configuration(const module_id_t gnb_mod_idP, gNB_RrcConfigu
     }
 
     LOG_D(NR_RRC,
-          PROTOCOL_NRRRC_CTXT_FMT" Initialization of 4 cba_RNTI values (%x %x %x %x) num active groups %d\n",
-          PROTOCOL_NRRRC_CTXT_ARGS(&ctxt),
+          PROTOCOL_NR_RRC_CTXT_FMT" Initialization of 4 cba_RNTI values (%x %x %x %x) num active groups %d\n",
+          PROTOCOL_NR_RRC_CTXT_ARGS(&ctxt),
           gnb_mod_idP, RC.nrrrc[ctxt.module_id]->carrier[CC_id].cba_rnti[0],
           RC.nrrrc[ctxt.module_id]->carrier[CC_id].cba_rnti[1],
           RC.nrrrc[ctxt.module_id]->carrier[CC_id].cba_rnti[2],
@@ -278,18 +277,10 @@ char openair_rrc_gNB_configuration(const module_id_t gnb_mod_idP, gNB_RrcConfigu
               ,configuration
               #endif
               );
-    for (int ue_id = 0; ue_id < NUMBER_OF_UE_MAX; ue_id++){
-        RC.nrrrc[ctxt.module_id]->carrier[CC_id].sizeof_paging[ue_id] = 0;
-        RC.nrrrc[ctxt.module_id]->carrier[CC_id].paging[ue_id] = (uint8_t*) malloc16(256);
-    }
-
   }//END for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++)
 
-  //rrc_init_NR_global_param();
+  nr_rrc_init_global_param();
 
-  for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) {
-    openair_rrc_top_init_gNB(RC.nrrrc[ctxt.module_id]->carrier[CC_id].MBMS_flag,0);
-  }
 
   openair_nrrrc_on(&ctxt);
 
@@ -342,7 +333,7 @@ void* rrc_gnb_task(void* args_p){
 
       /* Messages from S1AP */
     case S1AP_DOWNLINK_NAS:
-      rrc_eNB_process_S1AP_DOWNLINK_NAS(msg_p, msg_name_p, instance, &rrc_eNB_mui);
+      rrc_eNB_process_S1AP_DOWNLINK_NAS(msg_p, msg_name_p, instance, &rrc_gNB_mui);
       break;
 
     case S1AP_INITIAL_CONTEXT_SETUP_REQ:
@@ -410,48 +401,3 @@ void* rrc_gnb_task(void* args_p){
 }
 
 #endif //END #if defined(ENABLE_ITTI)
-
-/*------------------------------------------------------------------------------*/
-void
-openair_rrc_top_init_gNB(int eMBMS_active,uint8_t HO_active)
-//-----------------------------------------------------------------------------
-{
-
-  module_id_t         module_id;
-  int                 CC_id;
-
-  /* for no gcc warnings */
-  (void)CC_id;
-
-  LOG_D(RRC, "[OPENAIR][INIT] Init function start: NB_gNB_INST=%d\n", RC.nb_nr_inst);
-
-  if (RC.nb_nr_inst > 0) {
-    LOG_I(RRC,"[gNB] handover active state is %d \n", HO_active);
-
-    for (module_id=0; module_id<NB_gNB_INST; module_id++) {
-      RC.nrrrc[module_id]->HO_flag   = (uint8_t)HO_active;
-    }
-
-  #if defined(Rel10) || defined(Rel14)
-    LOG_I(RRC,"[gNB] eMBMS active state is %d \n", eMBMS_active);
-
-    for (module_id=0; module_id<NB_gNB_INST; module_id++) {
-      for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) {
-        RC.nrrrc[module_id]->carrier[CC_id].MBMS_flag = (uint8_t)eMBMS_active;
-      }
-    }
-
-  #endif
-  #ifdef CBA
-
-    for (module_id=0; module_id<RC.nb_nr_inst; module_id++) {
-      for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) {
-        RC.nrrrc[module_id]->carrier[CC_id].num_active_cba_groups = cba_group_active;
-      }
-    }
-
-  #endif
-
-  }//END if (RC.nb_nr_inst > 0)
-
-}
\ No newline at end of file
diff --git a/openair2/UTIL/LOG/log.h b/openair2/UTIL/LOG/log.h
index 00bc334de5..78fe0ee954 100644
--- a/openair2/UTIL/LOG/log.h
+++ b/openair2/UTIL/LOG/log.h
@@ -186,6 +186,10 @@ typedef enum {
     RRH,
     X2AP,
     MAX_LOG_COMPONENTS,
+    GNB_APP,
+    NR_RRC,
+    NR_MAC,
+    NR_PHY,
 }
 comp_name_t;
 
diff --git a/targets/COMMON/create_nr_tasks.c b/targets/COMMON/create_nr_tasks.c
new file mode 100644
index 0000000000..af047dd049
--- /dev/null
+++ b/targets/COMMON/create_nr_tasks.c
@@ -0,0 +1,103 @@
+/*
+ * 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
+ */
+
+#if defined(ENABLE_ITTI)
+# include "intertask_interface.h"
+# include "create_nr_tasks.h"
+# include "log.h"
+
+# ifdef OPENAIR2
+#   if defined(ENABLE_USE_MME)
+#     include "sctp_eNB_task.h"
+#     include "s1ap_eNB.h"
+#     include "nas_ue_task.h"
+#     include "udp_eNB_task.h"
+#     include "gtpv1u_eNB_task.h"
+#   endif
+#   if ENABLE_RAL
+#     include "lteRALue.h"
+#     include "lteRALenb.h"
+#   endif
+#   include "RRC/NR/nr_rrc_defs.h"
+# endif
+# include "gnb_app.h"
+
+extern int emulate_rf;
+
+int create_gNB_tasks(uint32_t gnb_nb)
+{
+  LOG_D(GNB_APP, "%s(gnb_nb:%d\n", __FUNCTION__, gnb_nb);
+  
+  itti_wait_ready(1);
+  if (itti_create_task (TASK_L2L1, l2l1_task, NULL) < 0) {
+    LOG_E(PDCP, "Create task for L2L1 failed\n");
+    return -1;
+  }
+
+  if (gnb_nb > 0) {
+    /* Last task to create, others task must be ready before its start */
+    if (itti_create_task (TASK_GNB_APP, gNB_app_task, NULL) < 0) {
+      LOG_E(GNB_APP, "Create task for gNB APP failed\n");
+      return -1;
+    }
+  }
+
+#   if defined(ENABLE_USE_MME)
+      if (gnb_nb > 0) {
+        if (itti_create_task (TASK_SCTP, sctp_eNB_task, NULL) < 0) {
+          LOG_E(SCTP, "Create task for SCTP failed\n");
+          return -1;
+        }
+
+        if (itti_create_task (TASK_S1AP, s1ap_eNB_task, NULL) < 0) {
+          LOG_E(S1AP, "Create task for S1AP failed\n");
+          return -1;
+        }
+        if(!emulate_rf){
+          if (itti_create_task (TASK_UDP, udp_eNB_task, NULL) < 0) {
+            LOG_E(UDP_, "Create task for UDP failed\n");
+            return -1;
+          }
+        }
+
+        if (itti_create_task (TASK_GTPV1_U, &gtpv1u_eNB_task, NULL) < 0) {
+          LOG_E(GTPU, "Create task for GTPV1U failed\n");
+          return -1;
+        }
+      }
+
+#      endif
+
+    if (gnb_nb > 0) {
+      LOG_I(NR_RRC,"Creating NR RRC gNB Task\n");
+
+      if (itti_create_task (TASK_RRC_GNB, rrc_gnb_task, NULL) < 0) {
+        LOG_E(NR_RRC, "Create task for NR RRC gNB failed\n");
+        return -1;
+      }
+    }
+
+
+  itti_wait_ready(0);
+
+  return 0;
+}
+#endif
diff --git a/targets/COMMON/create_nr_tasks.h b/targets/COMMON/create_nr_tasks.h
new file mode 100644
index 0000000000..7f5961f5ae
--- /dev/null
+++ b/targets/COMMON/create_nr_tasks.h
@@ -0,0 +1,33 @@
+/*
+ * 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
+ */
+
+#ifndef CREATE_NR_TASKS_H_
+#define CREATE_NR_TASKS_H_
+
+#if defined(ENABLE_ITTI)
+/* External declaration of L2L1 task that depend on the target */
+extern void *l2l1_task(void *arg);
+
+int create_gNB_tasks(uint32_t gnb_nb);
+
+#endif
+
+#endif /* CREATE_TASKS_H_ */
diff --git a/targets/RT/USER/nr-softmodem.c b/targets/RT/USER/nr-softmodem.c
index 506a34d81a..fc5790fe4e 100644
--- a/targets/RT/USER/nr-softmodem.c
+++ b/targets/RT/USER/nr-softmodem.c
@@ -76,7 +76,7 @@ unsigned short config_frames[4] = {2,9,11,13};
 
 #if defined(ENABLE_ITTI)
 #include "intertask_interface_init.h"
-#include "create_tasks.h"
+#include "create_nr_tasks.h"
 #endif
 
 #include "PHY/INIT/phy_init.h"
@@ -1048,7 +1048,7 @@ int main( int argc, char **argv )
   if (RC.nb_inst > 0)  {
     
     // don't create if node doesn't connect to RRC/S1/GTP
-      if (create_tasks(1) < 0) {
+      if (create_gNB_tasks(1) < 0) {
         printf("cannot create ITTI tasks\n");
         exit(-1); // need a softer mode
       }
-- 
GitLab