From d6b6cb9143f71afd36201190d2b95d44b363f027 Mon Sep 17 00:00:00 2001
From: Michele Paffetti <michele.paffetti@eurecom.fr>
Date: Wed, 28 Jun 2017 15:08:28 +0200
Subject: [PATCH] commit before merge with nick

---
 openair1/PHY/LTE_TRANSPORT/dci_tools_nb_iot.c |   2 +-
 .../SCHED/IF_Module_L1_primitives_nb_iot.c    |  14 +-
 openair2/PHY_INTERFACE/IF_Module_nb_iot.h     |  22 ++-
 openair2/RRC/LITE/L2_interface_nb_iot.c       | 182 ++++++++++--------
 openair2/RRC/LITE/vars_nb_iot.c               |   2 +-
 targets/SIMU/USER/init_lte.c                  |   2 +
 6 files changed, 126 insertions(+), 98 deletions(-)

diff --git a/openair1/PHY/LTE_TRANSPORT/dci_tools_nb_iot.c b/openair1/PHY/LTE_TRANSPORT/dci_tools_nb_iot.c
index 9351299760..c5a78d7bbd 100644
--- a/openair1/PHY/LTE_TRANSPORT/dci_tools_nb_iot.c
+++ b/openair1/PHY/LTE_TRANSPORT/dci_tools_nb_iot.c
@@ -143,7 +143,7 @@ int NB_generate_eNB_dlsch_params_from_dci(PHY_VARS_eNB *eNB,
                                        DCI_CONTENT *DCI_Content,
                                        uint16_t rnti,
                                        DCI_format_NB_t dci_format,
-                                       LTE_eNB_DLSCH_t *dlsch,
+									   LTE_eNB_DLSCH_t *dlsch,
                                        NB_DL_FRAME_PARMS *frame_parms,
                                        uint8_t aggregation,
                                        uint8_t Num_dci
diff --git a/openair1/SCHED/IF_Module_L1_primitives_nb_iot.c b/openair1/SCHED/IF_Module_L1_primitives_nb_iot.c
index 8fc3a46638..b13629989a 100644
--- a/openair1/SCHED/IF_Module_L1_primitives_nb_iot.c
+++ b/openair1/SCHED/IF_Module_L1_primitives_nb_iot.c
@@ -16,10 +16,10 @@ void PHY_config_req(PHY_Config_t* config_INFO){
 		NB_phy_config_mib_eNB(config_INFO->mod_id,
 							  config_INFO->CC_id,
 							  config_INFO->frequency_band_indicator,
-							  config_INFO->sch_config.physical_cell_id.value,
-							  config_INFO->subframe_config.dl_cyclic_prefix_type.value,
-							  config_INFO->subframe_config.ul_cyclic_prefix_type.value,
-							  config_INFO->rf_config.tx_antenna_ports.value,
+							  config_INFO->cfg->sch_config.physical_cell_id.value,
+							  config_INFO->cfg->subframe_config.dl_cyclic_prefix_type.value,
+							  config_INFO->cfg->subframe_config.ul_cyclic_prefix_type.value,
+							  config_INFO->cfg->rf_config.tx_antenna_ports.value,
 							  config_INFO->dl_CarrierFreq,
 							  config_INFO->ul_CarrierFreq);
 	}
@@ -29,9 +29,9 @@ void PHY_config_req(PHY_Config_t* config_INFO){
 		//Common Configuration included in SIB2-NB
 		NB_phy_config_sib2_eNB(config_INFO->mod_id,
 							   config_INFO->CC_id,
-						       &config_INFO->nb_iot_config, // FIXME to be evaluated is should be passed a pointer
-						       &config_INFO->rf_config,
-							   &config_INFO->uplink_reference_signal_config,
+						       &config_INFO->cfg->nb_iot_config, // FIXME to be evaluated is should be passed a pointer
+						       &config_INFO->cfg->rf_config,
+							   &config_INFO->cfg->uplink_reference_signal_config,
 							   &config_INFO->extra_phy_parms
 							   );
 	}
diff --git a/openair2/PHY_INTERFACE/IF_Module_nb_iot.h b/openair2/PHY_INTERFACE/IF_Module_nb_iot.h
index 6a2ff2a5e6..8bdb2a5756 100644
--- a/openair2/PHY_INTERFACE/IF_Module_nb_iot.h
+++ b/openair2/PHY_INTERFACE/IF_Module_nb_iot.h
@@ -77,14 +77,20 @@ typedef struct{
 	uint32_t ul_CarrierFreq;
 
 
-	/*FAPI style config. parameters*/
-
-	nfapi_uplink_reference_signal_config_t uplink_reference_signal_config;
-	nfapi_subframe_config_t subframe_config;
-	nfapi_rf_config_t rf_config;
-	nfapi_sch_config_t sch_config;
-	nfapi_nb_iot_config_t nb_iot_config;
-	nfapi_l23_config_t l23_config;
+	/*FAPI style config. parameters
+	 *
+	 * useful config message contents:
+	 * -nfapi_uplink_reference_signal_config_t uplink_reference_signal_config
+	 * -nfapi_subframe_config_t subframe_config;
+	 * -nfapi_rf_config_t rf_config;
+	 * -nfapi_sch_config_t sch_config;
+	 * -nfapi_nb_iot_config_t nb_iot_config;
+	 * -nfapi_l23_config_t l23_config;
+	 *
+	 * */
+	//XXX where allocate memory??
+	nfapi_config_request_t* cfg;
+
 
 	/*Dedicated configuration -->not supported by FAPI
 	 * In OAI at least are needed when we manage the phy_procedures_eNB_TX in which we call the phy_config_dedicated_eNB_step2
diff --git a/openair2/RRC/LITE/L2_interface_nb_iot.c b/openair2/RRC/LITE/L2_interface_nb_iot.c
index 51e657bba4..01ec95eedc 100644
--- a/openair2/RRC/LITE/L2_interface_nb_iot.c
+++ b/openair2/RRC/LITE/L2_interface_nb_iot.c
@@ -125,6 +125,11 @@ extern void (*rlc_rrc_data_conf)(
 
 /*---------------------------------RRC-MAC-----------------------------------*/
 
+/*
+ * This function is used to configured MAC and PHY layer. In the latter case, we first do a mapping of OAI params to the FAPI-like once
+ * by filling the PHY_COnfig structure
+ */
+
 //defined in MAC/config.c
 //FIXME: this function has no implication in terms of logical channel configuration for MAC
 int NB_rrc_mac_config_req_eNB(
@@ -155,7 +160,7 @@ int NB_rrc_mac_config_req_eNB(
 			   )
 {
 
- /*to review with the Raymond implementation*/
+ /*XXX to review with the Raymond implementation*/
 
 
   int UE_id = -1;
@@ -173,7 +178,9 @@ int NB_rrc_mac_config_req_eNB(
   config_INFO->CC_id = CC_idP;
 
 
-  if (mib_NB!=NULL) {
+
+
+  if (mib_NB!=NULL ) {
 
    //if(eNB_mac_inst == NULL) l2_init_eNB(); //TODO MP: to be included in the MAC/main.c
 
@@ -205,14 +212,18 @@ int NB_rrc_mac_config_req_eNB(
      * 2)Call the PHY_config_req for trigger the NB_phy_config_mib_eNB()
      */
 
+
+    //XXX where rymond allocate memory for cfg??
+    if(config_INFO->cfg == NULL) LOG_E(MAC, "NB_rrc_mac_config_req_eNB: trying to configure PHY but no config.request message in config_INFO is allocated\n");
+
     config_INFO->get_MIB = 1;
     config_INFO->rnti = rntiP;
     config_INFO->frequency_band_indicator = (uint8_t)eutra_band; // guarda raimon
-    config_INFO->sch_config.physical_cell_id.value = physCellId;
-    config_INFO->subframe_config.dl_cyclic_prefix_type.value = Ncp;
-    config_INFO->subframe_config.ul_cyclic_prefix_type.value = Ncp_UL;
-    config_INFO->rf_config.tx_antenna_ports.value = p_eNB;
-    config_INFO->rf_config.rx_antenna_ports.value = p_rx_eNB;
+    config_INFO->cfg->sch_config.physical_cell_id.value = physCellId;
+    config_INFO->cfg->subframe_config.dl_cyclic_prefix_type.value = Ncp;
+    config_INFO->cfg->subframe_config.ul_cyclic_prefix_type.value = Ncp_UL;
+    config_INFO->cfg->rf_config.tx_antenna_ports.value = p_eNB;
+    config_INFO->cfg->rf_config.rx_antenna_ports.value = p_rx_eNB;
     config_INFO->dl_CarrierFreq = dl_CarrierFreq; //guarda raymond is in rf_config
     config_INFO->ul_CarrierFreq = ul_CarrierFreq; //guarda raymond
 
@@ -221,44 +232,44 @@ int NB_rrc_mac_config_req_eNB(
     {
     //FAPI specs pag 135
     case MasterInformationBlock_NB__operationModeInfo_r13_PR_inband_SamePCI_r13:
-		config_INFO->nb_iot_config.operating_mode.value = 0;
-		config_INFO->nb_iot_config.prb_index.value = mib_NB->message.operationModeInfo_r13.choice.inband_SamePCI_r13.eutra_CRS_SequenceInfo_r13; //see TS 36.213 ch 16.0
-		config_INFO->nb_iot_config.assumed_crs_aps.value = -1; //is not defined so we put a negative value
+		config_INFO->cfg->nb_iot_config.operating_mode.value = 0;
+		config_INFO->cfg->nb_iot_config.prb_index.value = mib_NB->message.operationModeInfo_r13.choice.inband_SamePCI_r13.eutra_CRS_SequenceInfo_r13; //see TS 36.213 ch 16.0
+		config_INFO->cfg->nb_iot_config.assumed_crs_aps.value = -1; //is not defined so we put a negative value
 
 		if(eutraControlRegionSize == NULL)
 			LOG_E(RRC, "NB_rrc_mac_config_req_eNB: operation mode is in-band but eutraControlRegionSize is not defined");
 		else
-			config_INFO->nb_iot_config.control_region_size.value = *eutraControlRegionSize;
+			config_INFO->cfg->nb_iot_config.control_region_size.value = *eutraControlRegionSize;
 
 		break;
     case MasterInformationBlock_NB__operationModeInfo_r13_PR_inband_DifferentPCI_r13:
-    	config_INFO->nb_iot_config.operating_mode.value = 1;
+    	config_INFO->cfg->nb_iot_config.operating_mode.value = 1;
 
     	//XXX problem: fapi think to define also eutra_CRS_sequenceInfo also for in band with different PCI but the problem is that we don-t have it
     	//config_INFO->nb_iot_config.prb_index.value = mib_NB->message.operationModeInfo_r13.choice.inband_DifferentPCI_r13 XXX (see FAPI specs pag 135)
 
-    	config_INFO->nb_iot_config.assumed_crs_aps.value = mib_NB->message.operationModeInfo_r13.choice.inband_DifferentPCI_r13.eutra_NumCRS_Ports_r13;
+    	config_INFO->cfg->nb_iot_config.assumed_crs_aps.value = mib_NB->message.operationModeInfo_r13.choice.inband_DifferentPCI_r13.eutra_NumCRS_Ports_r13;
 
 		if(eutraControlRegionSize == NULL)
 			LOG_E(RRC, "NB_rrc_mac_config_req_eNB: operation mode is in-band but eutraControlRegionSize is not defined");
 		else
-			config_INFO->nb_iot_config.control_region_size.value = *eutraControlRegionSize;
+			config_INFO->cfg->nb_iot_config.control_region_size.value = *eutraControlRegionSize;
 
     	break;
     case MasterInformationBlock_NB__operationModeInfo_r13_PR_guardband_r13:
-    	config_INFO->nb_iot_config.operating_mode.value = 2;
+    	config_INFO->cfg->nb_iot_config.operating_mode.value = 2;
 
     	//XXX problem: fapi think to define also eutra_CRS_sequenceInfo also for in band with different PCI but the problem is that we don-t have it
     	//config_INFO->nb_iot_config.prb_index = mib_NB->message.operationModeInfo_r13.choice.guardband_r13; XXX (see FAPI specs pag 135)
 
-    	config_INFO->nb_iot_config.control_region_size.value = -1; //should not being defined so we put a negative value
-		config_INFO->nb_iot_config.assumed_crs_aps.value = -1; //is not defined so we put a negative value
+    	config_INFO->cfg->nb_iot_config.control_region_size.value = -1; //should not being defined so we put a negative value
+		config_INFO->cfg->nb_iot_config.assumed_crs_aps.value = -1; //is not defined so we put a negative value
     	break;
     case MasterInformationBlock_NB__operationModeInfo_r13_PR_standalone_r13:
-    	config_INFO->nb_iot_config.operating_mode.value = 3;
-    	config_INFO->nb_iot_config.prb_index.value = -1; // is not defined for this case (put a negative value)
-    	config_INFO->nb_iot_config.control_region_size.value = -1;//is not defined so we put a negative value
-		config_INFO->nb_iot_config.assumed_crs_aps.value = -1; //is not defined so we put a negative value
+    	config_INFO->cfg->nb_iot_config.operating_mode.value = 3;
+    	config_INFO->cfg->nb_iot_config.prb_index.value = -1; // is not defined for this case (put a negative value)
+    	config_INFO->cfg->nb_iot_config.control_region_size.value = -1;//is not defined so we put a negative value
+		config_INFO->cfg->nb_iot_config.assumed_crs_aps.value = -1; //is not defined so we put a negative value
     	break;
     default:
     	LOG_E(RRC, "NB_rrc_mac_config_req_eNB: NB-IoT operating Mode (MIB-NB) not valid\n");
@@ -275,6 +286,8 @@ int NB_rrc_mac_config_req_eNB(
 
   if (radioResourceConfigCommon!=NULL) {
 
+	  if(config_INFO->cfg == NULL) LOG_E(MAC, "NB_rrc_mac_config_req_eNB: trying to configure PHY but no config.request message in config_INFO is allocated\n");
+
 	  config_INFO->get_COMMON = 1;
 
       LOG_I(MAC,"[CONFIG]SIB2/3-NB radioResourceConfigCommon Contents (partial)\n");
@@ -302,9 +315,9 @@ int NB_rrc_mac_config_req_eNB(
 
       NPRACH_Parameters_NB_r13_t* nprach_parameter;
 
-	  config_INFO->nb_iot_config.nprach_config_0_enabled.value = 0;
-	  config_INFO->nb_iot_config.nprach_config_1_enabled.value = 0;
-	  config_INFO->nb_iot_config.nprach_config_2_enabled.value = 0;
+	  config_INFO->cfg->nb_iot_config.nprach_config_0_enabled.value = 0;
+	  config_INFO->cfg->nb_iot_config.nprach_config_1_enabled.value = 0;
+	  config_INFO->cfg->nb_iot_config.nprach_config_2_enabled.value = 0;
 
       switch(radioResourceConfigCommon->nprach_Config_r13.nprach_ParametersList_r13.list.size)
       {
@@ -312,13 +325,13 @@ int NB_rrc_mac_config_req_eNB(
     	  break;
       case 1:
     	  nprach_parameter = radioResourceConfigCommon->nprach_Config_r13.nprach_ParametersList_r13.list.array[0];
-    	  config_INFO->nb_iot_config.nprach_config_0_enabled.value = 1;
-    	  config_INFO->nb_iot_config.nprach_config_0_cp_length.value = radioResourceConfigCommon->nprach_Config_r13.nprach_CP_Length_r13;
-    	  config_INFO->nb_iot_config.nprach_config_0_sf_periodicity.value = nprach_parameter->nprach_Periodicity_r13;
-    	  config_INFO->nb_iot_config.nprach_config_0_start_time.value = nprach_parameter->nprach_StartTime_r13;
-    	  config_INFO->nb_iot_config.nprach_config_0_subcarrier_offset.value = nprach_parameter->nprach_SubcarrierOffset_r13;
-    	  config_INFO->nb_iot_config.nprach_config_0_number_of_subcarriers.value = nprach_parameter->nprach_NumSubcarriers_r13;
-    	  config_INFO->nb_iot_config.nprach_config_0_number_of_repetitions_per_attempt.value = nprach_parameter->numRepetitionsPerPreambleAttempt_r13;
+    	  config_INFO->cfg->nb_iot_config.nprach_config_0_enabled.value = 1;
+    	  config_INFO->cfg->nb_iot_config.nprach_config_0_cp_length.value = radioResourceConfigCommon->nprach_Config_r13.nprach_CP_Length_r13;
+    	  config_INFO->cfg->nb_iot_config.nprach_config_0_sf_periodicity.value = nprach_parameter->nprach_Periodicity_r13;
+    	  config_INFO->cfg->nb_iot_config.nprach_config_0_start_time.value = nprach_parameter->nprach_StartTime_r13;
+    	  config_INFO->cfg->nb_iot_config.nprach_config_0_subcarrier_offset.value = nprach_parameter->nprach_SubcarrierOffset_r13;
+    	  config_INFO->cfg->nb_iot_config.nprach_config_0_number_of_subcarriers.value = nprach_parameter->nprach_NumSubcarriers_r13;
+    	  config_INFO->cfg->nb_iot_config.nprach_config_0_number_of_repetitions_per_attempt.value = nprach_parameter->numRepetitionsPerPreambleAttempt_r13;
     	  //MP: missed configuration for FAPI-style structure (I have added on my own byt maybe are not needed)
     	  config_INFO->extra_phy_parms.nprach_config_0_subcarrier_MSG3_range_start = nprach_parameter->nprach_SubcarrierMSG3_RangeStart_r13;
     	  config_INFO->extra_phy_parms.nprach_config_0_max_num_preamble_attempt_CE = nprach_parameter->maxNumPreambleAttemptCE_r13;
@@ -330,13 +343,13 @@ int NB_rrc_mac_config_req_eNB(
     	  break;
       case 2:
     	  nprach_parameter = radioResourceConfigCommon->nprach_Config_r13.nprach_ParametersList_r13.list.array[0];
-    	  config_INFO->nb_iot_config.nprach_config_0_enabled.value = 1;
-    	  config_INFO->nb_iot_config.nprach_config_0_cp_length.value = radioResourceConfigCommon->nprach_Config_r13.nprach_CP_Length_r13;
-    	  config_INFO->nb_iot_config.nprach_config_0_sf_periodicity.value = nprach_parameter->nprach_Periodicity_r13;
-    	  config_INFO->nb_iot_config.nprach_config_0_start_time.value = nprach_parameter->nprach_StartTime_r13;
-    	  config_INFO->nb_iot_config.nprach_config_0_subcarrier_offset.value = nprach_parameter->nprach_SubcarrierOffset_r13;
-    	  config_INFO->nb_iot_config.nprach_config_0_number_of_subcarriers.value = nprach_parameter->nprach_NumSubcarriers_r13;
-    	  config_INFO->nb_iot_config.nprach_config_0_number_of_repetitions_per_attempt.value = nprach_parameter->numRepetitionsPerPreambleAttempt_r13;
+    	  config_INFO->cfg->nb_iot_config.nprach_config_0_enabled.value = 1;
+    	  config_INFO->cfg->nb_iot_config.nprach_config_0_cp_length.value = radioResourceConfigCommon->nprach_Config_r13.nprach_CP_Length_r13;
+    	  config_INFO->cfg->nb_iot_config.nprach_config_0_sf_periodicity.value = nprach_parameter->nprach_Periodicity_r13;
+    	  config_INFO->cfg->nb_iot_config.nprach_config_0_start_time.value = nprach_parameter->nprach_StartTime_r13;
+    	  config_INFO->cfg->nb_iot_config.nprach_config_0_subcarrier_offset.value = nprach_parameter->nprach_SubcarrierOffset_r13;
+    	  config_INFO->cfg->nb_iot_config.nprach_config_0_number_of_subcarriers.value = nprach_parameter->nprach_NumSubcarriers_r13;
+    	  config_INFO->cfg->nb_iot_config.nprach_config_0_number_of_repetitions_per_attempt.value = nprach_parameter->numRepetitionsPerPreambleAttempt_r13;
     	  //MP: missed configuration for FAPI-style structure (I have added on my own byt maybe are not needed)
     	  config_INFO->extra_phy_parms.nprach_config_0_subcarrier_MSG3_range_start = nprach_parameter->nprach_SubcarrierMSG3_RangeStart_r13;
     	  config_INFO->extra_phy_parms.nprach_config_0_max_num_preamble_attempt_CE = nprach_parameter->maxNumPreambleAttemptCE_r13;
@@ -347,13 +360,13 @@ int NB_rrc_mac_config_req_eNB(
 
 
     	  nprach_parameter = radioResourceConfigCommon->nprach_Config_r13.nprach_ParametersList_r13.list.array[1];
-    	  config_INFO->nb_iot_config.nprach_config_1_enabled.value = 1;
-    	  config_INFO->nb_iot_config.nprach_config_1_cp_length.value = radioResourceConfigCommon->nprach_Config_r13.nprach_CP_Length_r13;
-    	  config_INFO->nb_iot_config.nprach_config_1_sf_periodicity.value = nprach_parameter->nprach_Periodicity_r13;
-    	  config_INFO->nb_iot_config.nprach_config_1_start_time.value = nprach_parameter->nprach_StartTime_r13;
-    	  config_INFO->nb_iot_config.nprach_config_1_subcarrier_offset.value = nprach_parameter->nprach_SubcarrierOffset_r13;
-    	  config_INFO->nb_iot_config.nprach_config_1_number_of_subcarriers.value = nprach_parameter->nprach_NumSubcarriers_r13;
-    	  config_INFO->nb_iot_config.nprach_config_1_number_of_repetitions_per_attempt.value = nprach_parameter->numRepetitionsPerPreambleAttempt_r13;
+    	  config_INFO->cfg->nb_iot_config.nprach_config_1_enabled.value = 1;
+    	  config_INFO->cfg->nb_iot_config.nprach_config_1_cp_length.value = radioResourceConfigCommon->nprach_Config_r13.nprach_CP_Length_r13;
+    	  config_INFO->cfg->nb_iot_config.nprach_config_1_sf_periodicity.value = nprach_parameter->nprach_Periodicity_r13;
+    	  config_INFO->cfg->nb_iot_config.nprach_config_1_start_time.value = nprach_parameter->nprach_StartTime_r13;
+    	  config_INFO->cfg->nb_iot_config.nprach_config_1_subcarrier_offset.value = nprach_parameter->nprach_SubcarrierOffset_r13;
+    	  config_INFO->cfg->nb_iot_config.nprach_config_1_number_of_subcarriers.value = nprach_parameter->nprach_NumSubcarriers_r13;
+    	  config_INFO->cfg->nb_iot_config.nprach_config_1_number_of_repetitions_per_attempt.value = nprach_parameter->numRepetitionsPerPreambleAttempt_r13;
     	  //MP: missed configuration for FAPI-style structure (I have added on my own byt maybe are not needed)
     	  config_INFO->extra_phy_parms.nprach_config_1_subcarrier_MSG3_range_start = nprach_parameter->nprach_SubcarrierMSG3_RangeStart_r13;
     	  config_INFO->extra_phy_parms.nprach_config_1_max_num_preamble_attempt_CE = nprach_parameter->maxNumPreambleAttemptCE_r13;
@@ -364,13 +377,13 @@ int NB_rrc_mac_config_req_eNB(
     	  break;
       case 3:
     	  nprach_parameter = radioResourceConfigCommon->nprach_Config_r13.nprach_ParametersList_r13.list.array[0];
-    	  config_INFO->nb_iot_config.nprach_config_0_enabled.value = 1;
-    	  config_INFO->nb_iot_config.nprach_config_0_cp_length.value = radioResourceConfigCommon->nprach_Config_r13.nprach_CP_Length_r13;
-    	  config_INFO->nb_iot_config.nprach_config_0_sf_periodicity.value = nprach_parameter->nprach_Periodicity_r13;
-    	  config_INFO->nb_iot_config.nprach_config_0_start_time.value = nprach_parameter->nprach_StartTime_r13;
-    	  config_INFO->nb_iot_config.nprach_config_0_subcarrier_offset.value = nprach_parameter->nprach_SubcarrierOffset_r13;
-    	  config_INFO->nb_iot_config.nprach_config_0_number_of_subcarriers.value = nprach_parameter->nprach_NumSubcarriers_r13;
-    	  config_INFO->nb_iot_config.nprach_config_0_number_of_repetitions_per_attempt.value = nprach_parameter->numRepetitionsPerPreambleAttempt_r13;
+    	  config_INFO->cfg->nb_iot_config.nprach_config_0_enabled.value = 1;
+    	  config_INFO->cfg->nb_iot_config.nprach_config_0_cp_length.value = radioResourceConfigCommon->nprach_Config_r13.nprach_CP_Length_r13;
+    	  config_INFO->cfg->nb_iot_config.nprach_config_0_sf_periodicity.value = nprach_parameter->nprach_Periodicity_r13;
+    	  config_INFO->cfg->nb_iot_config.nprach_config_0_start_time.value = nprach_parameter->nprach_StartTime_r13;
+    	  config_INFO->cfg->nb_iot_config.nprach_config_0_subcarrier_offset.value = nprach_parameter->nprach_SubcarrierOffset_r13;
+    	  config_INFO->cfg->nb_iot_config.nprach_config_0_number_of_subcarriers.value = nprach_parameter->nprach_NumSubcarriers_r13;
+    	  config_INFO->cfg->nb_iot_config.nprach_config_0_number_of_repetitions_per_attempt.value = nprach_parameter->numRepetitionsPerPreambleAttempt_r13;
     	  //MP: missed configuration for FAPI-style structure (I have added on my own byt maybe are not needed)
     	  config_INFO->extra_phy_parms.nprach_config_0_subcarrier_MSG3_range_start = nprach_parameter->nprach_SubcarrierMSG3_RangeStart_r13;
     	  config_INFO->extra_phy_parms.nprach_config_0_max_num_preamble_attempt_CE = nprach_parameter->maxNumPreambleAttemptCE_r13;
@@ -381,13 +394,13 @@ int NB_rrc_mac_config_req_eNB(
 
 
     	  nprach_parameter = radioResourceConfigCommon->nprach_Config_r13.nprach_ParametersList_r13.list.array[1];
-    	  config_INFO->nb_iot_config.nprach_config_1_enabled.value = 1;
-    	  config_INFO->nb_iot_config.nprach_config_1_cp_length.value = radioResourceConfigCommon->nprach_Config_r13.nprach_CP_Length_r13;
-    	  config_INFO->nb_iot_config.nprach_config_1_sf_periodicity.value = nprach_parameter->nprach_Periodicity_r13;
-    	  config_INFO->nb_iot_config.nprach_config_1_start_time.value = nprach_parameter->nprach_StartTime_r13;
-    	  config_INFO->nb_iot_config.nprach_config_1_subcarrier_offset.value = nprach_parameter->nprach_SubcarrierOffset_r13;
-    	  config_INFO->nb_iot_config.nprach_config_1_number_of_subcarriers.value = nprach_parameter->nprach_NumSubcarriers_r13;
-    	  config_INFO->nb_iot_config.nprach_config_1_number_of_repetitions_per_attempt.value = nprach_parameter->numRepetitionsPerPreambleAttempt_r13;
+    	  config_INFO->cfg->nb_iot_config.nprach_config_1_enabled.value = 1;
+    	  config_INFO->cfg->nb_iot_config.nprach_config_1_cp_length.value = radioResourceConfigCommon->nprach_Config_r13.nprach_CP_Length_r13;
+    	  config_INFO->cfg->nb_iot_config.nprach_config_1_sf_periodicity.value = nprach_parameter->nprach_Periodicity_r13;
+    	  config_INFO->cfg->nb_iot_config.nprach_config_1_start_time.value = nprach_parameter->nprach_StartTime_r13;
+    	  config_INFO->cfg->nb_iot_config.nprach_config_1_subcarrier_offset.value = nprach_parameter->nprach_SubcarrierOffset_r13;
+    	  config_INFO->cfg->nb_iot_config.nprach_config_1_number_of_subcarriers.value = nprach_parameter->nprach_NumSubcarriers_r13;
+    	  config_INFO->cfg->nb_iot_config.nprach_config_1_number_of_repetitions_per_attempt.value = nprach_parameter->numRepetitionsPerPreambleAttempt_r13;
     	  //MP: missed configuration for FAPI-style structure (I have added on my own byt maybe are not needed)
     	  config_INFO->extra_phy_parms.nprach_config_1_subcarrier_MSG3_range_start = nprach_parameter->nprach_SubcarrierMSG3_RangeStart_r13;
     	  config_INFO->extra_phy_parms.nprach_config_1_max_num_preamble_attempt_CE = nprach_parameter->maxNumPreambleAttemptCE_r13;
@@ -398,13 +411,13 @@ int NB_rrc_mac_config_req_eNB(
 
 
     	  nprach_parameter = radioResourceConfigCommon->nprach_Config_r13.nprach_ParametersList_r13.list.array[2];
-    	  config_INFO->nb_iot_config.nprach_config_2_enabled.value = 1;
-    	  config_INFO->nb_iot_config.nprach_config_2_cp_length.value = radioResourceConfigCommon->nprach_Config_r13.nprach_CP_Length_r13;
-    	  config_INFO->nb_iot_config.nprach_config_2_sf_periodicity.value = nprach_parameter->nprach_Periodicity_r13;
-    	  config_INFO->nb_iot_config.nprach_config_2_start_time.value = nprach_parameter->nprach_StartTime_r13;
-    	  config_INFO->nb_iot_config.nprach_config_2_subcarrier_offset.value = nprach_parameter->nprach_SubcarrierOffset_r13;
-    	  config_INFO->nb_iot_config.nprach_config_2_number_of_subcarriers.value = nprach_parameter->nprach_NumSubcarriers_r13;
-    	  config_INFO->nb_iot_config.nprach_config_2_number_of_repetitions_per_attempt.value = nprach_parameter->numRepetitionsPerPreambleAttempt_r13;
+    	  config_INFO->cfg->nb_iot_config.nprach_config_2_enabled.value = 1;
+    	  config_INFO->cfg->nb_iot_config.nprach_config_2_cp_length.value = radioResourceConfigCommon->nprach_Config_r13.nprach_CP_Length_r13;
+    	  config_INFO->cfg->nb_iot_config.nprach_config_2_sf_periodicity.value = nprach_parameter->nprach_Periodicity_r13;
+    	  config_INFO->cfg->nb_iot_config.nprach_config_2_start_time.value = nprach_parameter->nprach_StartTime_r13;
+    	  config_INFO->cfg->nb_iot_config.nprach_config_2_subcarrier_offset.value = nprach_parameter->nprach_SubcarrierOffset_r13;
+    	  config_INFO->cfg->nb_iot_config.nprach_config_2_number_of_subcarriers.value = nprach_parameter->nprach_NumSubcarriers_r13;
+    	  config_INFO->cfg->nb_iot_config.nprach_config_2_number_of_repetitions_per_attempt.value = nprach_parameter->numRepetitionsPerPreambleAttempt_r13;
     	  //MP: missed configuration for FAPI-style structure (I have added on my own byt maybe are not needed)
     	  config_INFO->extra_phy_parms.nprach_config_2_subcarrier_MSG3_range_start = nprach_parameter->nprach_SubcarrierMSG3_RangeStart_r13;
     	  config_INFO->extra_phy_parms.nprach_config_2_max_num_preamble_attempt_CE = nprach_parameter->maxNumPreambleAttemptCE_r13;
@@ -423,7 +436,7 @@ int NB_rrc_mac_config_req_eNB(
       /*NPDSCH ConfigCommon*/
 
       //FIXME: MP: FAPI specs define a range of value [0-255]==[0db - 63.75db] with 0.25db step -- corrispondence in 3GPP specs???
-      config_INFO->rf_config.reference_signal_power.value = radioResourceConfigCommon->npdsch_ConfigCommon_r13.nrs_Power_r13;
+      config_INFO->cfg->rf_config.reference_signal_power.value = radioResourceConfigCommon->npdsch_ConfigCommon_r13.nrs_Power_r13;
 
       /*NPUSCH ConfigCommon*/
 
@@ -435,26 +448,26 @@ int NB_rrc_mac_config_req_eNB(
       {
     	  /* OPTIONAL */
     	  if(radioResourceConfigCommon->npusch_ConfigCommon_r13.dmrs_Config_r13->threeTone_BaseSequence_r13!= NULL)
-    		  config_INFO->nb_iot_config.three_tone_base_sequence.value  = *(radioResourceConfigCommon->npusch_ConfigCommon_r13.dmrs_Config_r13->threeTone_BaseSequence_r13);
+    		  config_INFO->cfg->nb_iot_config.three_tone_base_sequence.value  = *(radioResourceConfigCommon->npusch_ConfigCommon_r13.dmrs_Config_r13->threeTone_BaseSequence_r13);
     	  /* OPTIONAL */
     	  if(radioResourceConfigCommon->npusch_ConfigCommon_r13.dmrs_Config_r13->sixTone_BaseSequence_r13!= NULL)
-    		  config_INFO->nb_iot_config.six_tone_base_sequence.value = *(radioResourceConfigCommon->npusch_ConfigCommon_r13.dmrs_Config_r13->sixTone_BaseSequence_r13);
+    		  config_INFO->cfg->nb_iot_config.six_tone_base_sequence.value = *(radioResourceConfigCommon->npusch_ConfigCommon_r13.dmrs_Config_r13->sixTone_BaseSequence_r13);
     	  /* OPTIONAL */
 		  if(radioResourceConfigCommon->npusch_ConfigCommon_r13.dmrs_Config_r13->twelveTone_BaseSequence_r13!= NULL)
-			  config_INFO->nb_iot_config.twelve_tone_base_sequence.value = *(radioResourceConfigCommon->npusch_ConfigCommon_r13.dmrs_Config_r13->twelveTone_BaseSequence_r13);
+			  config_INFO->cfg->nb_iot_config.twelve_tone_base_sequence.value = *(radioResourceConfigCommon->npusch_ConfigCommon_r13.dmrs_Config_r13->twelveTone_BaseSequence_r13);
 
-		  config_INFO->nb_iot_config.three_tone_cyclic_shift.value = radioResourceConfigCommon->npusch_ConfigCommon_r13.dmrs_Config_r13->threeTone_CyclicShift_r13;
-		  config_INFO->nb_iot_config.six_tone_cyclic_shift.value = radioResourceConfigCommon->npusch_ConfigCommon_r13.dmrs_Config_r13->sixTone_CyclicShift_r13;
+		  config_INFO->cfg->nb_iot_config.three_tone_cyclic_shift.value = radioResourceConfigCommon->npusch_ConfigCommon_r13.dmrs_Config_r13->threeTone_CyclicShift_r13;
+		  config_INFO->cfg->nb_iot_config.six_tone_cyclic_shift.value = radioResourceConfigCommon->npusch_ConfigCommon_r13.dmrs_Config_r13->sixTone_CyclicShift_r13;
       }
 
 
       //NOTE: MP: FAPI specs for UL RS Configurations seems to be targeted for LTE and not for NB-IoT
       if(radioResourceConfigCommon->npusch_ConfigCommon_r13.ul_ReferenceSignalsNPUSCH_r13.groupHoppingEnabled_r13 == TRUE)
-    	  config_INFO->uplink_reference_signal_config.uplink_rs_hopping.value = 1; //RS_GROUP_HOPPING (FAPI specs pag 127)
+    	  config_INFO->cfg->uplink_reference_signal_config.uplink_rs_hopping.value = 1; //RS_GROUP_HOPPING (FAPI specs pag 127)
       else
-    	  config_INFO->uplink_reference_signal_config.uplink_rs_hopping.value = 0;//RS_NO_HOPPING
+    	  config_INFO->cfg->uplink_reference_signal_config.uplink_rs_hopping.value = 0;//RS_NO_HOPPING
 
-      config_INFO->uplink_reference_signal_config.group_assignment.value = radioResourceConfigCommon->npusch_ConfigCommon_r13.ul_ReferenceSignalsNPUSCH_r13.groupAssignmentNPUSCH_r13;
+      config_INFO->cfg->uplink_reference_signal_config.group_assignment.value = radioResourceConfigCommon->npusch_ConfigCommon_r13.ul_ReferenceSignalsNPUSCH_r13.groupAssignmentNPUSCH_r13;
 
       //Some missed parameters are in UL_CONFIG.request message (P7) in FAPI specs. and not configured through P5 procedure
 	   //ack_NACK_NumRepetitions_Msg4_r13
@@ -463,13 +476,13 @@ int NB_rrc_mac_config_req_eNB(
 	  /*DL GAP config */
       if(radioResourceConfigCommon->dl_Gap_r13 !=NULL)/* OPTIONAL */
       {
-    	  config_INFO->nb_iot_config.dl_gap_config_enable.value = 1;
-    	  config_INFO->nb_iot_config.dl_gap_threshold.value = radioResourceConfigCommon->dl_Gap_r13->dl_GapThreshold_r13;
-		  config_INFO->nb_iot_config.dl_gap_duration_coefficient.value = radioResourceConfigCommon->dl_Gap_r13->dl_GapDurationCoeff_r13;
-		  config_INFO->nb_iot_config.dl_gap_periodicity.value = radioResourceConfigCommon->dl_Gap_r13->dl_GapPeriodicity_r13;
+    	  config_INFO->cfg->nb_iot_config.dl_gap_config_enable.value = 1;
+    	  config_INFO->cfg->nb_iot_config.dl_gap_threshold.value = radioResourceConfigCommon->dl_Gap_r13->dl_GapThreshold_r13;
+		  config_INFO->cfg->nb_iot_config.dl_gap_duration_coefficient.value = radioResourceConfigCommon->dl_Gap_r13->dl_GapDurationCoeff_r13;
+		  config_INFO->cfg->nb_iot_config.dl_gap_periodicity.value = radioResourceConfigCommon->dl_Gap_r13->dl_GapPeriodicity_r13;
       }
       else
-    	  config_INFO->nb_iot_config.dl_gap_config_enable.value = 0;
+    	  config_INFO->cfg->nb_iot_config.dl_gap_config_enable.value = 0;
 
 
 	  /*UL Power Control ConfigCommon*/
@@ -496,6 +509,10 @@ int NB_rrc_mac_config_req_eNB(
   }
 
   if (logicalChannelConfig!= NULL) {
+
+
+	if(config_INFO->cfg == NULL) LOG_E(MAC, "NB_rrc_mac_config_req_eNB: trying to configure PHY but no config.request message in config_INFO is allocated\n");
+
     if (UE_id == -1) {
       LOG_E(MAC,"%s:%d:%s: ERROR, UE_id == -1\n", __FILE__, __LINE__, __FUNCTION__);
     } else {
@@ -507,6 +524,9 @@ int NB_rrc_mac_config_req_eNB(
 
   if (physicalConfigDedicated != NULL) {
 
+
+	if(config_INFO->cfg == NULL) LOG_E(MAC, "NB_rrc_mac_config_req_eNB: trying to configure PHY but no config.request message in config_INFO is allocated\n");
+
     if (UE_id == -1)
       LOG_E(MAC,"%s:%d:%s: ERROR, UE_id == -1\n", __FILE__, __LINE__, __FUNCTION__);
     else
@@ -848,7 +868,7 @@ int8_t NB_mac_rrc_data_req_eNB(
     	      		    LOG_T(RRC,"\n");
     	    #endif
 
-    	    return (eNB_rrc_inst_NB[Mod_idP].carrier[CC_id].sizeof_MIB_NB);
+    	    return (eNB_rrc_inst_NB[Mod_idP].carrier[CC_id].sizeof_MIB_NB); //exit from the function
       }
 
       //Requesting for SI Message
diff --git a/openair2/RRC/LITE/vars_nb_iot.c b/openair2/RRC/LITE/vars_nb_iot.c
index 08a8c73810..7d78fc0d6b 100644
--- a/openair2/RRC/LITE/vars_nb_iot.c
+++ b/openair2/RRC/LITE/vars_nb_iot.c
@@ -69,7 +69,7 @@ unsigned short Data_to_read;
 eNB_RRC_INST_NB *eNB_rrc_inst_NB;
 uint8_t DRB2LCHAN_NB[2];//max can be 2 DRBs for NB_IoT --> it used for saving the LCID of DRBs
 
-//structure for FAPI-like configuration
+//structure for FAPI-like configuration (memory for this is allocated in init_SI)
 PHY_Config_t *config_INFO;
 
 BOOLEAN_t logicalChannelSR_Prohibit = 1;
diff --git a/targets/SIMU/USER/init_lte.c b/targets/SIMU/USER/init_lte.c
index 7ff5ec8c45..1912c514b0 100644
--- a/targets/SIMU/USER/init_lte.c
+++ b/targets/SIMU/USER/init_lte.c
@@ -148,6 +148,8 @@ PHY_VARS_eNB* init_lte_eNB(LTE_DL_FRAME_PARMS *frame_parms,
   return (PHY_vars_eNB);
 }
 
+
+/*this is a function just for initialization of NB-IoT stuff*/
 void init_lte_eNB_NB(
 					PHY_VARS_eNB  *PHY_vars_eNB,
 					NB_DL_FRAME_PARMS *frame_parms,
-- 
2.26.2