diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt
index e18bbad1df9c9b6b283bca02ff5c1cef06f0910f..c92f65a60570d0871f1a2e06f42f921d1eb2a97a 100644
--- a/cmake_targets/CMakeLists.txt
+++ b/cmake_targets/CMakeLists.txt
@@ -2157,7 +2157,7 @@ target_link_libraries (nr-softmodem
   UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB PHY_NR 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
-  #NFAPI_COMMON_LIB NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
+  NFAPI_COMMON_LIB NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
   -Wl,--end-group z dl)
 
 target_link_libraries (nr-softmodem ${LIBXML2_LIBRARIES})
diff --git a/nfapi/open-nFAPI/nfapi/public_inc/nfapi_interface_nr_extension.h b/nfapi/open-nFAPI/nfapi/public_inc/nfapi_interface_nr_extension.h
index 990ab9c763aafd450d0ca72f6fdda4dbb9b3df1f..7a04ffc7e4c10fa128d347dccabdf0fc81b064ff 100644
--- a/nfapi/open-nFAPI/nfapi/public_inc/nfapi_interface_nr_extension.h
+++ b/nfapi/open-nFAPI/nfapi/public_inc/nfapi_interface_nr_extension.h
@@ -1,12 +1,12 @@
 /*
  * 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.
@@ -15,19 +15,572 @@
  */
 
 
-#ifndef _NFAPI_INTERFACE_NR_EXTENSION_H_
+#ifndef _NFAPI_INTERFACE_H_
 #define _NFAPI_INTERFACE_H_
-#define _NFAPI_INTERFACE_NR_EXTENSION_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;
@@ -43,24 +596,42 @@ typedef struct {
 	uint8_t value;
 } nfapi_uint8_tlv_t;
 
-typedef enum {
-  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_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 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;
@@ -73,6 +644,7 @@ typedef struct {
 #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;
@@ -89,16 +661,14 @@ typedef struct {
 #define NFAPI_RF_CONFIG_RX_ANTENNA_PORTS_TAG 0x000E
 
 typedef struct {
-  uint16_t phy_config_index;
-  uint8_t mu;
-} nfapi_pnf_phy_rel15_info_t;
+	nfapi_uint16_tlv_t phich_resource;
+	nfapi_uint16_tlv_t phich_duration;
+	nfapi_uint16_tlv_t phich_power_offset;
+} nfapi_phich_config_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
+#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,
@@ -106,7 +676,7 @@ typedef enum {
 } nfapi_half_frame_index_e;
 
 typedef struct {
-  nfapi_uint16_tlv_t primary_synchronization_signal_epre_eprers;
+	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;
@@ -125,13 +695,3191 @@ typedef struct {
 #define NFAPI_SCH_CONFIG_SSB_PERIODICITY 0x0024
 #define NFAPI_SCH_CONFIG_SS_PBCH_BLOCK_POWER 0x0025
 
-//temporary
+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_subframe_config_t subframe_config;
-  nfapi_rf_config_t rf_config;
-  nfapi_sch_config_t sch_config;
+	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_param_t;
+	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
+#endif /* _NFAPI_INTERFACE_H_ */
diff --git a/openair1/PHY/INIT/nr_init.c b/openair1/PHY/INIT/nr_init.c
index fe853869a63c104ab201b19bb59306b04e46a59b..c47f2b4bbfaa0719e51a8cc73f55f0a182611af7 100644
--- a/openair1/PHY/INIT/nr_init.c
+++ b/openair1/PHY/INIT/nr_init.c
@@ -21,18 +21,17 @@
 
 #include "../defs_NR.h"
 
-int phy_init_nr_gNB(nfapi_param_t* nfapi_params)
+int phy_init_nr_gNB(nfapi_config_request_t *config)
 {
 
-  nfapi_params->pnf_phy_rel15.number_of_phys = 1;
-  nfapi_params->pnf_phy_rel15.phy[0].mu =1;
-  nfapi_params->subframe_config.duplex_mode.value = 1; //FDD
-  nfapi_params->subframe_config.dl_cyclic_prefix_type.value = 0; //NORMAL
-  nfapi_params->rf_config.dl_channel_bandwidth.value = 106;
-  nfapi_params->rf_config.ul_channel_bandwidth.value = 106;
-  nfapi_params->rf_config.tx_antenna_ports.value = 1;
+  config->subframe_config.numerology_index_mu.value =1;
+  config->subframe_config.duplex_mode.value = 1; //FDD
+  config->subframe_config.dl_cyclic_prefix_type.value = 0; //NORMAL
+  config->rf_config.dl_channel_bandwidth.value = 106;
+  config->rf_config.ul_channel_bandwidth.value = 106;
+  config->rf_config.tx_antenna_ports.value = 1;
 
-  nfapi_params->sch_config.physical_cell_id.value = 0;
+  config->sch_config.physical_cell_id.value = 0;
 
   return 0;
 }
diff --git a/openair1/PHY/INIT/nr_parms.c b/openair1/PHY/INIT/nr_parms.c
index 9bb27e10a659dad7d7e455ddbaeb783ddf65c3ea..7cc1318c9cafde6b77398ae40bcd7a66b3845d74 100644
--- a/openair1/PHY/INIT/nr_parms.c
+++ b/openair1/PHY/INIT/nr_parms.c
@@ -25,13 +25,13 @@
 /// Subcarrier spacings in Hz indexed by numerology index
 uint32_t nr_subcarrier_spacing[MAX_NUM_SUBCARRIER_SPACING] = {15e3, 30e3, 60e3, 120e3, 240e3};
 
-int nr_init_frame_parms(nfapi_param_t nfapi_params,
+int nr_init_frame_parms(nfapi_config_request_t config,
                         NR_DL_FRAME_PARMS *frame_parms)
 {
 
-  int N_RB = nfapi_params.rf_config.dl_channel_bandwidth.value;
-  int Ncp = nfapi_params.subframe_config.dl_cyclic_prefix_type.value;
-  int mu = nfapi_params.pnf_phy_rel15.phy[0].mu;
+  int N_RB = config.rf_config.dl_channel_bandwidth.value;
+  int Ncp = config.subframe_config.dl_cyclic_prefix_type.value;
+  int mu = config.subframe_config.numerology_index_mu.value;
 
 #if DISABLE_LOG_X
   printf("Initializing frame parms for mu %d, N_RB %d, Ncp %d\n",mu, N_RB, Ncp);
diff --git a/openair1/PHY/NR_TRANSPORT/nr_pss.c b/openair1/PHY/NR_TRANSPORT/nr_pss.c
index 682b26e2e7c94e9a89120d02890e0871f3ba93e6..5909abd25a24894460663add5f03287abff8ca89 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_pss.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_pss.c
@@ -30,7 +30,7 @@ int nr_generate_pss(  int16_t *d_pss,
                       int16_t amp,
                       int16_t ssb_first_subcarrier,
                       uint8_t slot_offset,
-                      nfapi_param_t nfapi_params,
+                      nfapi_config_request_t config,
                       NR_DL_FRAME_PARMS *frame_parms)
 {
   int i,n,m,k;
@@ -39,8 +39,8 @@ int nr_generate_pss(  int16_t *d_pss,
   int16_t pss_mod[2* NR_PSS_LENGTH];
   const int x_initial[7] = {0, 1, 1 , 0, 1, 1, 1};
 
-  uint8_t Nid2 = nfapi_params.sch_config.physical_cell_id.value % 3;
-  uint8_t Nsymb = (nfapi_params.subframe_config.dl_cyclic_prefix_type.value == 0)? 14 : 12;
+  uint8_t Nid2 = config.sch_config.physical_cell_id.value % 3;
+  uint8_t Nsymb = (config.subframe_config.dl_cyclic_prefix_type.value == 0)? 14 : 12;
 
   // Binary sequence generation
   for (i=0; i < 7; i++)
@@ -56,14 +56,14 @@ int nr_generate_pss(  int16_t *d_pss,
   }
 
   // BPSK modulation and resource mapping
-  a = (nfapi_params.rf_config.tx_antenna_ports.value == 1) ? amp : (amp*ONE_OVER_SQRT2_Q15)>>15;
+  a = (config.rf_config.tx_antenna_ports.value == 1) ? amp : (amp*ONE_OVER_SQRT2_Q15)>>15;
   for (i = 0; i <  NR_PSS_LENGTH; i++)
   {
     pss_mod[2*i] =  nr_mod_table[ 2 * (MOD_TABLE_BPSK_OFFSET + d_pss[i]) ];
     pss_mod[2*i + 1] = nr_mod_table[ 2 * (MOD_TABLE_BPSK_OFFSET + d_pss[i]) + 1];
   }
 
-  for (aa = 0; aa < nfapi_params.rf_config.tx_antenna_ports.value; aa++)
+  for (aa = 0; aa < config.rf_config.tx_antenna_ports.value; aa++)
   {
 
     // PSS occupies a predefined position (symbol 0, subcarriers 56-182) within the SSB block starting from
diff --git a/openair1/PHY/NR_TRANSPORT/nr_sss.c b/openair1/PHY/NR_TRANSPORT/nr_sss.c
index 669dffc5273bbf59f6c1d65868db9b0a0084955f..8aa87aa66b821d63a11b25542551f2c30ff6b0e3 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_sss.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_sss.c
@@ -30,7 +30,7 @@ int nr_generate_sss(  int16_t *d_sss,
                       int16_t amp,
                       int16_t ssb_first_subcarrier,
                       uint8_t slot_offset,
-                      nfapi_param_t nfapi_params,
+                      nfapi_config_request_t config,
                       NR_DL_FRAME_PARMS *frame_parms)
 {
   int i,m,k;
@@ -42,10 +42,10 @@ int nr_generate_sss(  int16_t *d_sss,
   const int x0_initial[7] = { 1, 0, 0, 0, 0, 0, 0 };
   const int x1_initial[7] = { 1, 0, 0, 0, 0, 0, 0 };
 
-  uint8_t Nsymb = (nfapi_params.subframe_config.dl_cyclic_prefix_type.value == 0)? 14 : 12;
+  uint8_t Nsymb = (config.subframe_config.dl_cyclic_prefix_type.value == 0)? 14 : 12;
 
   // Binary sequence generation
-  Nid = nfapi_params.sch_config.physical_cell_id.value;
+  Nid = config.sch_config.physical_cell_id.value;
   Nid2 = Nid % 3;
   Nid1 = (Nid - Nid2)/3;
 
@@ -69,14 +69,14 @@ int nr_generate_sss(  int16_t *d_sss,
   }
 
   // BPSK modulation and resource mapping
-  a = (nfapi_params.rf_config.tx_antenna_ports.value == 1) ? amp : (amp*ONE_OVER_SQRT2_Q15)>>15;
+  a = (config.rf_config.tx_antenna_ports.value == 1) ? amp : (amp*ONE_OVER_SQRT2_Q15)>>15;
   for (i = 0; i <  NR_SSS_LENGTH; i++)
   {
     sss_mod[2*i] =  nr_mod_table[ 2 * (MOD_TABLE_BPSK_OFFSET + d_sss[i]) ];
     sss_mod[2*i + 1] = nr_mod_table[ 2 * (MOD_TABLE_BPSK_OFFSET + d_sss[i]) + 1];
   }
 
-  for (aa = 0; aa < nfapi_params.rf_config.tx_antenna_ports.value; aa++)
+  for (aa = 0; aa < config.rf_config.tx_antenna_ports.value; aa++)
   {
 
     // SSS occupies a predefined position (symbol 2, subcarriers 56-182) within the SSB block starting from
diff --git a/targets/RT/USER/nr-softmodem.c b/targets/RT/USER/nr-softmodem.c
index 17e3777783eb134782a52bf439ade0afc7d14659..809f330b4c32bc1b3890cd4867fc8d3a18c97834 100644
--- a/targets/RT/USER/nr-softmodem.c
+++ b/targets/RT/USER/nr-softmodem.c
@@ -49,7 +49,7 @@ void exit_fun(const char* s)
 
 int main( int argc, char **argv )
 {
-  nfapi_param_t nfapi_params;
+  nfapi_config_request_t config;
   NR_DL_FRAME_PARMS* frame_parms = malloc(sizeof(NR_DL_FRAME_PARMS));
   int16_t amp;
   //malloc to move
@@ -59,13 +59,13 @@ int main( int argc, char **argv )
 
   //logInit();
 
-  phy_init_nr_gNB(&nfapi_params);
-  nr_init_frame_parms(nfapi_params, frame_parms);
+  phy_init_nr_gNB(&config);
+  nr_init_frame_parms(config, frame_parms);
   nr_dump_frame_parms(frame_parms);
 
   amp = 32767; //1_Q_15
-  //nr_generate_pss(d_pss, txdataF, amp, 0, 0, nfapi_params, frame_parms);
-  nr_generate_sss(d_sss, txdataF, amp, 0, 0, nfapi_params, frame_parms);
+  //nr_generate_pss(d_pss, txdataF, amp, 0, 0, config, frame_parms);
+  nr_generate_sss(d_sss, txdataF, amp, 0, 0, config, frame_parms);
 
   free(txdataF);
   free(d_pss);