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
deleted file mode 100644
index c91f6bd6f727131053f64f691eed97c15b4110c0..0000000000000000000000000000000000000000
--- a/nfapi/open-nFAPI/nfapi/public_inc/nfapi_interface_nr_extension.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright 2017 Cisco Systems, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-#ifndef _NFAPI_INTERFACE_NR_EXTENSION_H_
-#define _NFAPI_INTERFACE_NR_EXTENSION_H_
-
-#include "stddef.h"
-#include "nfapi_interface.h"
-
-
-
-#endif /* _NFAPI_INTERFACE_NR_EXTENSION_H_ */
diff --git a/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface.h b/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..83b4d5838619ddccc0c0489058a64b9a7c36e67e
--- /dev/null
+++ b/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface.h
@@ -0,0 +1,273 @@
+#ifndef _NFAPI_INTERFACE_NR_H_
+#define _NFAPI_INTERFACE_NR_H_
+
+#include "nfapi_interface.h"
+
+//These TLVs are used exclusively by nFAPI
+typedef struct
+{
+  // These TLVs are used to setup the transport connection between VNF and PNF
+  // nfapi_ipv4_address_t p7_vnf_address_ipv4;
+  // nfapi_ipv6_address_t p7_vnf_address_ipv6;
+  // nfapi_uint16_tlv_t p7_vnf_port;
+
+  // nfapi_ipv4_address_t p7_pnf_address_ipv4;
+  // nfapi_ipv6_address_t p7_pnf_address_ipv6;
+  // nfapi_uint16_tlv_t p7_pnf_port;
+  
+  // // These TLVs are used to setup the transport connection between VNF and PNF
+  // nfapi_uint8_tlv_t dl_ue_per_sf;
+  // nfapi_uint8_tlv_t ul_ue_per_sf;
+
+  // These TLVs are used by PNF to report its RF capabilities to the VNF software
+  nfapi_rf_bands_t rf_bands;
+
+  // These TLVs are used by the VNF to configure the synchronization with the PNF.
+  // nfapi_uint8_tlv_t timing_window;
+  // nfapi_uint8_tlv_t timing_info_mode;
+  // nfapi_uint8_tlv_t timing_info_period;
+
+  // These TLVs are used by the VNF to configure the RF in the PNF
+  // nfapi_uint16_tlv_t max_transmit_power;
+  nfapi_uint16_tlv_t earfcn;
+
+  // nfapi_nmm_frequency_bands_t nmm_gsm_frequency_bands;
+  // nfapi_nmm_frequency_bands_t nmm_umts_frequency_bands;
+  // nfapi_nmm_frequency_bands_t nmm_lte_frequency_bands;
+  // nfapi_uint8_tlv_t nmm_uplink_rssi_supported;
+
+} nfapi_nr_nfapi_t;
+
+#define NFAPI_NR_NFAPI_P7_VNF_ADDRESS_IPV4_TAG 0x5100
+#define NFAPI_NR_NFAPI_P7_VNF_ADDRESS_IPV6_TAG 0x5101
+#define NFAPI_NR_NFAPI_P7_VNF_PORT_TAG 0x5102
+#define NFAPI_NR_NFAPI_P7_PNF_ADDRESS_IPV4_TAG 0x5103
+#define NFAPI_NR_NFAPI_P7_PNF_ADDRESS_IPV6_TAG 0x5104
+#define NFAPI_NR_NFAPI_P7_PNF_PORT_TAG 0x5105
+
+#define NFAPI_NR_NFAPI_DOWNLINK_UES_PER_SUBFRAME_TAG 0x510A
+#define NFAPI_NR_NFAPI_UPLINK_UES_PER_SUBFRAME_TAG 0x510B
+#define NFAPI_NR_NFAPI_RF_BANDS_TAG 0x5114
+#define NFAPI_NR_NFAPI_TIMING_WINDOW_TAG 0x511E
+#define NFAPI_NR_NFAPI_TIMING_INFO_MODE_TAG 0x511F
+#define NFAPI_NR_NFAPI_TIMING_INFO_PERIOD_TAG 0x5120
+#define NFAPI_NR_NFAPI_MAXIMUM_TRANSMIT_POWER_TAG 0x5128
+#define NFAPI_NR_NFAPI_EARFCN_TAG 0x5129
+#define NFAPI_NR_NFAPI_NMM_GSM_FREQUENCY_BANDS_TAG 0x5130
+#define NFAPI_NR_NFAPI_NMM_UMTS_FREQUENCY_BANDS_TAG 0x5131
+#define NFAPI_NR_NFAPI_NMM_LTE_FREQUENCY_BANDS_TAG 0x5132
+#define NFAPI_NR_NFAPI_NMM_UPLINK_RSSI_SUPPORTED_TAG 0x5133
+
+// P5 Message Structures
+typedef struct {
+  nfapi_uint16_tlv_t  numerology_index_mu;
+  nfapi_uint16_tlv_t  duplex_mode;
+} nfapi_nr_subframe_config_t;
+
+#define NFAPI_NR_SUBFRAME_CONFIG_DUPLEX_MODE_TAG 0x5001
+#define NFAPI_NR_SUBFRAME_CONFIG_PCFICH_POWER_OFFSET_TAG 0x5002
+#define NFAPI_NR_SUBFRAME_CONFIG_PB_TAG 0x5003
+#define NFAPI_NR_SUBFRAME_CONFIG_DL_CYCLIC_PREFIX_TYPE_TAG 0x5004
+#define NFAPI_NR_SUBFRAME_CONFIG_UL_CYCLIC_PREFIX_TYPE_TAG 0x5005
+#define NFAPI_NR_SUBFRAME_CONFIG_NUMEROLOGY_INDEX_MU_TAG 0x5006
+
+typedef struct {
+  nfapi_uint16_tlv_t  tx_antenna_ports;
+  nfapi_uint16_tlv_t  rx_antenna_ports;
+} nfapi_nr_rf_config_t;
+
+#define NFAPI_NR_RF_CONFIG_DL_CHANNEL_BANDWIDTH_TAG 0x500A
+#define NFAPI_NR_RF_CONFIG_UL_CHANNEL_BANDWIDTH_TAG 0x500B
+#define NFAPI_NR_RF_CONFIG_REFERENCE_SIGNAL_POWER_TAG 0x500C
+#define NFAPI_NR_RF_CONFIG_TX_ANTENNA_PORTS_TAG 0x500D
+#define NFAPI_NR_RF_CONFIG_RX_ANTENNA_PORTS_TAG 0x500E
+
+typedef struct {
+  nfapi_uint16_tlv_t  physical_cell_id;
+  nfapi_uint16_tlv_t  half_frame_index;
+  nfapi_uint16_tlv_t  ssb_subcarrier_offset;
+  nfapi_uint16_tlv_t  ssb_position_in_burst;
+  nfapi_uint16_tlv_t  ssb_periodicity;
+  nfapi_uint16_tlv_t  ss_pbch_block_power;
+  nfapi_uint16_tlv_t  n_ssb_crb;
+} nfapi_nr_sch_config_t;
+
+#define NFAPI_NR_SCH_CONFIG_PHYSICAL_CELL_ID_TAG 0x501E
+#define NFAPI_NR_SCH_CONFIG_HALF_FRAME_INDEX_TAG 0x501F
+#define NFAPI_NR_SCH_CONFIG_SSB_SUBCARRIER_OFFSET_TAG 0x5020
+#define NFAPI_NR_SCH_CONFIG_SSB_POSITION_IN_BURST 0x5021
+#define NFAPI_NR_SCH_CONFIG_SSB_PERIODICITY 0x5022
+#define NFAPI_NR_SCH_CONFIG_SS_PBCH_BLOCK_POWER 0x5023
+#define NFAPI_NR_SCH_CONFIG_N_SSB_CRB 0x5024
+
+
+typedef struct {
+  nfapi_uint16_tlv_t  prach_RootSequenceIndex;                                        ///// L1 parameter 'PRACHRootSequenceIndex'
+  nfapi_uint16_tlv_t  prach_msg1_SubcarrierSpacing;                                   ///// L1 parameter 'prach-Msg1SubcarrierSpacing'
+  nfapi_uint16_tlv_t  restrictedSetConfig;
+  nfapi_uint16_tlv_t  msg3_transformPrecoding;                                        ///// L1 parameter 'msg3-tp'
+  /////////////////--------------------NR RACH-ConfigGeneric--------------------/////////////////
+  nfapi_uint16_tlv_t  prach_ConfigurationIndex;                                       ///// L1 parameter 'PRACHConfigurationIndex'
+  nfapi_uint16_tlv_t  prach_msg1_FDM;                                                 ///// L1 parameter 'prach-FDM'
+  nfapi_uint16_tlv_t  prach_msg1_FrequencyStart;                                      ///// L1 parameter 'prach-frequency-start'
+  nfapi_uint16_tlv_t  zeroCorrelationZoneConfig;
+  nfapi_uint16_tlv_t  preambleReceivedTargetPower;
+} nfapi_nr_rach_config_t;
+
+typedef struct {
+  //NR FrequencyInfoDL
+  nfapi_uint16_tlv_t  absoluteFrequencySSB;
+  nfapi_uint16_tlv_t  ssb_SubcarrierOffset;                                           ///// L1 parameter 'kssb'
+  nfapi_uint16_tlv_t  DL_FreqBandIndicatorNR;
+  nfapi_uint16_tlv_t  DL_absoluteFrequencyPointA;                                     ///// L1 parameter 'offset-ref-low-scs-ref-PRB'
+  //NR DL SCS-SpecificCarrier  ///// L1 parameter 'offset-pointA-set'
+  nfapi_uint16_tlv_t  DL_offsetToCarrier;                                             ///// L1 parameter 'offset-pointA-low-scs '
+  nfapi_uint16_tlv_t  DL_SCS_SubcarrierSpacing;                                       ///// L1 parameter 'ref-scs'
+  nfapi_uint16_tlv_t  DL_SCS_SpecificCarrier_k0;                                      ///// L1 parameter 'k0'
+  nfapi_uint16_tlv_t  DL_carrierBandwidth;                                            ///// L1 parameter 'BW'
+} nfapi_nr_dl_frequencyinfo_t;
+
+typedef struct {
+  //NR BWP-DownlinkCommon
+  nfapi_uint16_tlv_t  DL_locationAndBandwidth;                                        ///// L1 parameter 'DL-BWP-loc'
+  nfapi_uint16_tlv_t  DL_BWP_SubcarrierSpacing;                                       ///// Corresponds to subcarrier spacing according to 38.211, Table 4.2-1
+  nfapi_uint16_tlv_t  DL_BWP_prefix_type;
+} nfapi_nr_bwp_dl_t;
+
+typedef struct {
+  //NR FrequencyInfoUL
+  nfapi_uint16_tlv_t  UL_FreqBandIndicatorNR;
+  nfapi_uint16_tlv_t  UL_absoluteFrequencyPointA;                                     ///// L1 parameter 'offset-ref-low-scs-ref-PRB'
+  nfapi_uint16_tlv_t  UL_additionalSpectrumEmission;
+  nfapi_uint16_tlv_t  UL_p_Max;
+  nfapi_uint16_tlv_t  UL_frequencyShift7p5khz;
+  //NR UL SCS-SpecificCarrier    ///// L1 parameter 'offset-pointA-set'
+  nfapi_uint16_tlv_t  UL_offsetToCarrier;                                             ///// L1 parameter 'offset-pointA-low-scs '
+  nfapi_uint16_tlv_t  UL_SCS_SubcarrierSpacing;                                       ///// L1 parameter 'ref-scs'
+  nfapi_uint16_tlv_t  UL_SCS_SpecificCarrier_k0;                                      ///// L1 parameter 'k0'
+  nfapi_uint16_tlv_t  UL_carrierBandwidth;                                            ///// L1 parameter 'BW'
+} nfapi_nr_ul_frequencyinfo_t;
+
+typedef struct {
+  //NR BWP-UplinkCommon          ///// L1 parameter 'initial-UL-BWP'
+  nfapi_uint16_tlv_t  UL_locationAndBandwidth;                                        ///// L1 parameter 'DL-BWP-loc'
+  nfapi_uint16_tlv_t  UL_BWP_SubcarrierSpacing;                                       ///// Corresponds to subcarrier spacing according to 38.211, Table 4.2-1
+  nfapi_uint16_tlv_t  UL_BWP_prefix_type;
+} nfapi_nr_bwp_ul_t;
+
+typedef struct {
+  nfapi_uint16_tlv_t  groupHoppingEnabledTransformPrecoding;                          ///// L1 parameter 'Group-hopping-enabled-Transform-precoding'
+  nfapi_uint16_tlv_t  msg3_DeltaPreamble;                                             ///// L1 parameter 'Delta-preamble-msg3' 
+  nfapi_uint16_tlv_t  p0_NominalWithGrant;                                            ///// L1 parameter 'p0-nominal-pusch-withgrant'
+  nfapi_uint16_tlv_t  TimeDomainResourceAllocation_k2;                                ///// L1 parameter 'K2' 
+  nfapi_uint16_tlv_t  TimeDomainResourceAllocation_mappingType;                       ///// L1 parameter 'Mapping-type'
+} nfapi_nr_pusch_config_t;
+
+typedef struct {
+  nfapi_uint16_tlv_t  pucch_GroupHopping;                                             ///// L1 parameter 'PUCCH-GroupHopping' 
+  nfapi_uint16_tlv_t  p0_nominal;                                                     ///// L1 parameter 'p0-nominal-pucch'
+} nfapi_nr_pucch_config_t;
+
+typedef struct {
+  nfapi_uint16_tlv_t  TimeDomainResourceAllocation_k0;                                ///// L1 parameter 'K0'
+  nfapi_uint16_tlv_t  TimeDomainResourceAllocation_mappingType;                       ///// L1 parameter 'Mapping-type'
+} nfapi_nr_pdsch_config_t;
+
+typedef struct {
+  nfapi_uint16_tlv_t  searchSpaceSIB1;                                                ///// L1 parameter 'rmsi-SearchSpace'
+  nfapi_uint16_tlv_t  searchSpaceOtherSystemInformation;                              ///// L1 parameter 'osi-SearchSpace'
+  nfapi_uint16_tlv_t  pagingSearchSpace;                                              ///// L1 parameter 'paging-SearchSpace'
+  nfapi_uint16_tlv_t  ra_SearchSpace;                                                 ///// L1 parameter 'ra-SearchSpace'
+  nfapi_uint16_tlv_t  rach_ra_ControlResourceSet;                                     ///// L1 parameter 'rach-coreset-configuration'
+  nfapi_uint16_tlv_t  common_controlResourceSetId;                                    ///// L1 parameter 'CORESET-ID
+  nfapi_uint16_tlv_t  common_ControlResourceSet_duration;                             ///// L1 parameter 'CORESET-time-duration'
+  nfapi_uint16_tlv_t  cce_REG_MappingType;                                            ///// L1 parameter 'CORESET-CCE-REG-mapping-type'
+  nfapi_uint16_tlv_t  reg_BundleSize;                                                 ///// L1 parameter 'CORESET-REG-bundle-size'
+  nfapi_uint16_tlv_t  interleaverSize;                                                ///// L1 parameter 'CORESET-interleaver-size'
+  nfapi_uint16_tlv_t  shiftIndex;                                                     ///// L1 parameter 'CORESET-shift-index'
+  nfapi_uint16_tlv_t  precoderGranularity;                                            ///// L1 parameter 'CORESET-precoder-granuality'
+  nfapi_uint16_tlv_t  TCI_StateId;                                                    ///// L1 parameter 'TCI-StatesPDCCH'
+  nfapi_uint16_tlv_t  tci_PresentInDCI;                                               ///// L1 parameter 'TCI-PresentInDCI'
+  nfapi_uint16_tlv_t  SearchSpaceId;
+  nfapi_uint16_tlv_t  commonSearchSpaces_controlResourceSetId;
+  nfapi_uint16_tlv_t  SearchSpace_monitoringSlotPeriodicityAndOffset;                 ///// L1 parameters 'Montoring-periodicity-PDCCH-slot'
+  nfapi_uint16_tlv_t  SearchSpace_nrofCandidates_aggregationLevel1;                   ///// L1 parameter 'Aggregation-level-1'
+  nfapi_uint16_tlv_t  SearchSpace_nrofCandidates_aggregationLevel2;                   ///// L1 parameter 'Aggregation-level-2'
+  nfapi_uint16_tlv_t  SearchSpace_nrofCandidates_aggregationLevel4;                   ///// L1 parameter 'Aggregation-level-4'
+  nfapi_uint16_tlv_t  SearchSpace_nrofCandidates_aggregationLevel8;                   ///// L1 parameter 'Aggregation-level-8'
+  nfapi_uint16_tlv_t  SearchSpace_nrofCandidates_aggregationLevel16;                  ///// L1 parameter 'Aggregation-level-16'
+  nfapi_uint16_tlv_t  Common_dci_Format2_0_nrofCandidates_SFI_And_aggregationLevel;   ///// L1 parameters 'SFI-Num-PDCCH-cand' and 'SFI-Aggregation-Level'
+  nfapi_uint16_tlv_t  Common_dci_Format2_3_monitoringPeriodicity;                     ///// L1 parameter 'SRS-monitoring-periodicity'
+  nfapi_uint16_tlv_t  Common_dci_Format2_3_nrofPDCCH_Candidates;                      ///// L1 parameter 'SRS-Num-PDCCH-cand'
+  nfapi_uint16_tlv_t  ue_Specific__dci_Formats;
+} nfapi_nr_pdcch_config_t;
+
+typedef struct {
+  nfapi_uint16_tlv_t  ssb_PositionsInBurst_PR;                                        ///// L1 parameter 'SSB-Transmitted
+  nfapi_uint16_tlv_t  ssb_periodicityServingCell;
+  nfapi_uint16_tlv_t  dmrs_TypeA_Position;                                            ///// Position of (first) DL DM-RS
+  nfapi_uint16_tlv_t  NIA_SubcarrierSpacing;                                          ///// Used only for non-initial access (e.g. SCells, PCell of SCG)   
+  nfapi_uint16_tlv_t  ss_PBCH_BlockPower;
+} nfapi_nr_servingcellconfigcommon_t;
+
+typedef struct {
+//NR TDD-UL-DL-ConfigCommon                ///// L1 parameter 'UL-DL-configuration-common'
+  nfapi_uint16_tlv_t  referenceSubcarrierSpacing;                                     ///// L1 parameter 'reference-SCS'
+  nfapi_uint16_tlv_t  dl_UL_TransmissionPeriodicity;                                  ///// L1 parameter 'DL-UL-transmission-periodicity'
+  nfapi_uint16_tlv_t  nrofDownlinkSlots;                                              ///// L1 parameter 'number-of-DL-slots'
+  nfapi_uint16_tlv_t  nrofDownlinkSymbols;                                            ///// L1 parameter 'number-of-DL-symbols-common'
+  nfapi_uint16_tlv_t  nrofUplinkSlots;                                                ///// L1 parameter 'number-of-UL-slots'
+  nfapi_uint16_tlv_t  nrofUplinkSymbols;                                              ///// L1 parameter 'number-of-UL-symbols-common'
+} nfapi_nr_tdd_ul_dl_config_t;
+
+
+typedef struct {
+ //RateMatchPattern  is used to configure one rate matching pattern for PDSCH    ///// L1 parameter 'Resource-set-cekk'             
+  nfapi_uint16_tlv_t  rateMatchPatternId;
+  nfapi_uint16_tlv_t  RateMatchPattern_patternType;
+  nfapi_uint16_tlv_t  symbolsInResourceBlock;                                          ///// L1 parameter 'rate-match-PDSCH-bitmap2
+  nfapi_uint16_tlv_t  periodicityAndPattern;                                           ///// L1 parameter 'rate-match-PDSCH-bitmap3'
+  nfapi_uint16_tlv_t  RateMatchPattern_controlResourceSet;
+  nfapi_uint16_tlv_t  RateMatchPattern_subcarrierSpacing;                              ///// L1 parameter 'resource-pattern-scs'
+  nfapi_uint16_tlv_t  RateMatchPattern_mode; 
+} nfapi_nr_ratematchpattern_t;
+
+typedef struct {
+  //NR  RateMatchPatternLTE-CRS
+  nfapi_uint16_tlv_t  RateMatchPatternLTE_CRS_carrierFreqDL;                           ///// L1 parameter 'center-subcarrier-location'
+  nfapi_uint16_tlv_t  RateMatchPatternLTE_CRS_carrierBandwidthDL;                      ///// L1 parameter 'BW'
+  nfapi_uint16_tlv_t  RateMatchPatternLTE_CRS_nrofCRS_Ports;                           ///// L1 parameter 'rate-match-resources-numb-LTE-CRS-antenna-port'
+  nfapi_uint16_tlv_t  RateMatchPatternLTE_CRS_v_Shift;                                 ///// L1 parameter 'rate-match-resources-LTE-CRS-v-shift'
+  nfapi_uint16_tlv_t  RateMatchPatternLTE_CRS_radioframeAllocationPeriod;
+  nfapi_uint16_tlv_t  RateMatchPatternLTE_CRS_radioframeAllocationOffset;
+  nfapi_uint16_tlv_t  RateMatchPatternLTE_CRS_subframeAllocation_choice;
+} nfapi_nr_ratematchpattern_lte_crs_t;
+
+
+
+
+typedef struct {
+  nfapi_p4_p5_message_header_t              header;
+  uint8_t num_tlv;
+  nfapi_nr_subframe_config_t                subframe_config;
+  nfapi_nr_rf_config_t                      rf_config;
+  nfapi_nr_sch_config_t                     sch_config;
+  nfapi_nr_rach_config_t                    rach_config;
+  nfapi_nr_dl_frequencyinfo_t               dl_frequencyinfo;
+  nfapi_nr_bwp_dl_t                         bwp_dl;
+  nfapi_nr_ul_frequencyinfo_t               ul_frequencyinfo;
+  nfapi_nr_bwp_ul_t                         bwp_ul;
+  nfapi_nr_pusch_config_t                   pusch_config;
+  nfapi_nr_pucch_config_t                   pucch_config;
+  nfapi_nr_pdsch_config_t                   pdsch_config;
+  nfapi_nr_pucch_config_t                   pdcch_config;
+  nfapi_nr_servingcellconfigcommon_t        servingcellconfigcommon;
+  nfapi_nr_tdd_ul_dl_config_t               tdd_ul_dl_config;
+  nfapi_nr_ratematchpattern_t               ratematchpattern;
+  nfapi_nr_ratematchpattern_lte_crs_t       ratematchpattern_lte_crs;
+  nfapi_nr_nfapi_t                          nfapi_config;
+
+  nfapi_vendor_extension_tlv_t              vendor_extension;
+} nfapi_nr_config_request_t;
+
+#endif
diff --git a/openair1/PHY/NR_TRANSPORT/nr_dci.c b/openair1/PHY/NR_TRANSPORT/nr_dci.c
new file mode 100644
index 0000000000000000000000000000000000000000..5ebfd5a05c241dc0ab8e332acff71176944548de
--- /dev/null
+++ b/openair1/PHY/NR_TRANSPORT/nr_dci.c
@@ -0,0 +1,132 @@
+/*
+ * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The OpenAirInterface Software Alliance licenses this file to You under
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
+ * except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.openairinterface.org/?page_id=698
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *-------------------------------------------------------------------------------
+ * For more information about the OpenAirInterface (OAI) Software Alliance:
+ *      contact@openairinterface.org
+ */
+
+/*! \file PHY/NR_TRANSPORT/nr_dci.c
+* \brief Implements DCI encoding/decoding (38.212/38.213/38.214). Current NR compliance V15.1 2018-06.
+* \author Guy De Souza
+* \date 2018
+* \version 0.1
+* \company Eurecom
+* \email: desouza@eurecom.fr
+* \note
+* \warning
+*/
+
+#include "nr_dci.h"
+
+uint8_t nr_get_dci_size(nr_dci_format_e format,
+                     nr_rnti_type_e rnti,
+                     NR_BWP_PARMS* bwp,
+                     nfapi_nr_config_request_t* config)
+{
+  uint8_t size = 0;
+  uint16_t N_RB = bwp->N_RB;
+
+  switch(format) {
+
+    case nr_dci_format_0_0:
+      /// fixed: Format identifier 1, Hop flag 1, MCS 5, NDI 1, RV 2, HARQ PID 4, PUSCH TPC 2 --16
+      size += 16;
+      size += ceil( log2( (N_RB*(N_RB+1))>>2 ) ); // Freq domain assignment -- hopping scenario to be updated
+      // Time domain assignment
+      // UL/SUL indicator
+      break;
+
+    case nr_dci_format_0_1:
+      /// fixed: Format identifier 1, MCS 5, NDI 1, RV 2, HARQ PID 4, PUSCH TPC 2, SRS request 2 --17
+      size += 17;
+      // Carrier indicator
+      // UL/SUL indicator
+      // BWP Indicator
+      // Freq domain assignment
+      // Time domain assignment
+      // VRB to PRB mapping
+      // Frequency Hopping flag
+      // 1st DAI
+      // 2nd DAI
+      // SRS resource indicator
+      // Precoding info and number of layers
+      // Antenna ports
+      // CSI request
+      // CBGTI
+      // PTRS - DMRS association
+      // beta offset indicator
+      // DMRS sequence init
+      break;
+
+    case nr_dci_format_1_0:
+      /// fixed: Format identifier 1, VRB2PRB 1, MCS 5, NDI 1, RV 2, HARQ PID 4, DAI 2, PUCCH TPC 2, PUCCH RInd 3, PDSCH to HARQ TInd 3 --24
+      size += 24;
+      size += ceil( log2( (N_RB*(N_RB+1))>>2 ) ); // Freq domain assignment
+      // Time domain assignment
+      break;
+
+    case nr_dci_format_1_1:
+      // Carrier indicator
+      size += 1; // Format identifier
+      // BWP Indicator
+      // Freq domain assignment
+      // Time domain assignment
+      // VRB to PRB mapping
+      // PRB bundling size indicator
+      // Rate matching indicator
+      // ZP CSI-RS trigger
+        /// TB1- MCS 5, NDI 1, RV 2
+      size += 8;
+      // TB2
+      size += 4 ;  // HARQ PID
+      // DAI
+      size += 2; // TPC PUCCH
+      size += 3; // PUCCH resource indicator
+      size += 3; // PDSCH to HARQ timing indicator
+      // Antenna ports
+      // Tx Config Indication
+      size += 2; // SRS request
+      // CBGTI
+      // CBGFI
+      size += 1; // DMRS sequence init
+      
+      break;
+
+    case nr_dci_format_2_0:
+      break;
+
+    case nr_dci_format_2_1:
+      break;
+
+    case nr_dci_format_2_2:
+      break;
+
+    case nr_dci_format_2_3:
+      break;
+
+  default:
+    AssertFatal(1==0, "Invalid NR DCI format %d\n", format);
+  }
+
+  return size;
+}
+
+
+uint8_t nr_generate_dci_top()
+{
+  return 0;
+}
diff --git a/openair1/PHY/NR_TRANSPORT/nr_dci.h b/openair1/PHY/NR_TRANSPORT/nr_dci.h
new file mode 100644
index 0000000000000000000000000000000000000000..a1a58e6598577c371ab9e9714908f286c1821a9b
--- /dev/null
+++ b/openair1/PHY/NR_TRANSPORT/nr_dci.h
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The OpenAirInterface Software Alliance licenses this file to You under
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
+ * except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.openairinterface.org/?page_id=698
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *-------------------------------------------------------------------------------
+ * For more information about the OpenAirInterface (OAI) Software Alliance:
+ *      contact@openairinterface.org
+ */
+#ifndef __PHY_NR_TRANSPORT_DCI__H
+#define __PHY_NR_TRANSPORT_DCI__H
+
+#include "defs_gNB.h"
+
+
+typedef enum {
+  nr_dci_format_0_0=0,
+  nr_dci_format_0_1,
+  nr_dci_format_1_0,
+  nr_dci_format_1_1,
+  nr_dci_format_2_0,
+  nr_dci_format_2_1,
+  nr_dci_format_2_2,
+  nr_dci_format_2_3
+} nr_dci_format_e;
+
+typedef enum {
+  nr_rnti_type_SI_RNTI=0,
+  nr_rnti_type_RA_RNTI,
+  nr_rnti_type_C_RNTI,
+  nr_rnti_type_TC_RNTI,
+  nr_rnti_type_CS_RNTI,
+  nr_rnti_type_P_RNTI
+} nr_rnti_type_e;
+
+
+
+typedef struct {
+  /// Length of DCI in bits
+  uint8_t size;
+  /// Aggregation level
+  uint8_t L;
+  /// Position of first CCE of the dci
+  int firstCCE;
+  /// flag to indicate that this is a RA response
+  boolean_t ra_flag;
+  /// rnti
+  nr_rnti_type_e rnti;
+  /// Format
+  DCI_format_t format;
+  /// DCI pdu
+  uint8_t dci_pdu[8];
+} NR_DCI_ALLOC_t;
+
+
+uint8_t nr_get_dci_size(nr_dci_format_e format,
+                     nr_rnti_type_e rnti,
+                     NR_BWP_PARMS bwp,
+                     nfapi_nr_config_request_t* config);
+
+uint8_t nr_generate_dci_top();
+
+#endif //__PHY_NR_TRANSPORT_DCI__H
diff --git a/openair1/PHY/NR_TRANSPORT/nr_pdcch.c b/openair1/PHY/NR_TRANSPORT/nr_pdcch.c
new file mode 100644
index 0000000000000000000000000000000000000000..469c0472a5bf4304aa4c34742b9ec1aaa60166a7
--- /dev/null
+++ b/openair1/PHY/NR_TRANSPORT/nr_pdcch.c
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The OpenAirInterface Software Alliance licenses this file to You under
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
+ * except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.openairinterface.org/?page_id=698
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *-------------------------------------------------------------------------------
+ * For more information about the OpenAirInterface (OAI) Software Alliance:
+ *      contact@openairinterface.org
+ */
+
+/*! \file PHY/NR_TRANSPORT/nr_pdcch.c
+* \brief Implements PDCCH physical channel TX/RX procedures (38.211). Current NR compliance V15.1 2018-06.
+* \author Guy De Souza
+* \date 2018
+* \version 0.1
+* \company Eurecom
+* \email: desouza@eurecom.fr
+* \note
+* \warning
+*/
+
+#include "nr_dci.h"
+
+
diff --git a/openair1/PHY/defs_gNB.h b/openair1/PHY/defs_gNB.h
index 20f58409b1fbd9b7de8548d9025dfb5e03c91cef..9728d6b2d0726867e3a5ec57138c30eca6b5df82 100644
--- a/openair1/PHY/defs_gNB.h
+++ b/openair1/PHY/defs_gNB.h
@@ -320,7 +320,7 @@ typedef struct PHY_VARS_gNB_s {
   /// counter to average prach energh over first 100 prach opportunities
   int prach_energy_counter;
 
-  // PDSCH Varaibles
+  // PDSCH Variables
   PDSCH_CONFIG_DEDICATED pdsch_config_dedicated[NUMBER_OF_UE_MAX];
 
   // PUSCH Varaibles
diff --git a/openair1/PHY/defs_nr_common.h b/openair1/PHY/defs_nr_common.h
index 6d54128820d57ebb280636ae54ff96afe7deb7f1..c1c03570337b21a14e8bb520d2ff833ba16e5a8a 100644
--- a/openair1/PHY/defs_nr_common.h
+++ b/openair1/PHY/defs_nr_common.h
@@ -34,7 +34,7 @@
 #define __PHY_DEFS_NR_COMMON__H__
 
 #include "defs_common.h"
-#include "nfapi_interface_nr_extension.h"
+#include "nfapi_nr_interface.h"
 #include "impl_defs_nr.h"
 #include "PHY/CODING/nrPolar_tools/nr_polar_defs.h"
 
@@ -57,6 +57,8 @@
 #define NR_PBCH_DMRS_LENGTH 144
 #define NR_PBCH_DMRS_LENGTH_DWORD 5 // roundup(NR_PBCH_DMRS_LENGTH/32)
 
+#define NR_MAX_NUM_BWP 4
+
 typedef enum {
   NR_MU_0=0,
   NR_MU_1,
@@ -74,6 +76,17 @@ typedef enum{
   nr_ssb_type_E
 } nr_ssb_type_e;
 
+typedef struct NR_BWP_PARMS {
+  /// Associated numerology index
+  uint8_t numerology_index;
+  /// Freq domain location
+  uint8_t location;
+  /// Bandwidth in PRB
+  uint16_t N_RB;
+  /// Size of FFT/IFFT
+  uint16_t ofdm_symbol_size;
+} NR_BWP_PARMS;
+
 typedef struct NR_DL_FRAME_PARMS {
   /// Number of resource blocks (RB) in DL
   uint8_t N_RB_DL;
@@ -166,6 +179,11 @@ typedef struct NR_DL_FRAME_PARMS {
   /// PBCH polar encoder params
   t_nrPolar_params pbch_polar_params;
 
+   //BWP params
+  NR_BWP_PARMS initial_bwp_params_dl;
+  NR_BWP_PARMS initial_bwp_params_ul;
+
 } NR_DL_FRAME_PARMS;
 
+
 #endif