From a0289d74fa610bd73ac2bb79d20da8bc8a685411 Mon Sep 17 00:00:00 2001
From: Xenofon Foukas <x.foukas@sms.ed.ac.uk>
Date: Tue, 9 Feb 2016 13:03:31 +0000
Subject: [PATCH] Added support for eNB, cell, UE and logical channel
 configuration messages to the progRAN protocol

---
 cmake_targets/CMakeLists.txt                  |   4 +
 .../ENB_APP/MESSAGES/V2/config_common.proto   | 174 ++++++++++++++++++
 .../ENB_APP/MESSAGES/V2/config_messages.proto |  88 +++++++++
 openair2/ENB_APP/MESSAGES/V2/header.proto     |  12 +-
 openair2/ENB_APP/MESSAGES/V2/progran.proto    |  40 +++-
 5 files changed, 315 insertions(+), 3 deletions(-)
 create mode 100644 openair2/ENB_APP/MESSAGES/V2/config_common.proto
 create mode 100644 openair2/ENB_APP/MESSAGES/V2/config_messages.proto

diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt
index 8631fe92a5..93aa36c727 100644
--- a/cmake_targets/CMakeLists.txt
+++ b/cmake_targets/CMakeLists.txt
@@ -713,6 +713,8 @@ if (ENB_AGENT_SB_IF)
     ${PRPT_MSG_DIR}/time_common.proto
     ${PRPT_MSG_DIR}/controller_commands.proto
     ${PRPT_MSG_DIR}/mac_primitives.proto
+    ${PRPT_MSG_DIR}/config_messages.proto
+    ${PRPT_MSG_DIR}/config_common.proto
     )
 
   set(PRPT_C_DIR ${protobuf_generated_dir}/${PRPTDIR})
@@ -727,6 +729,8 @@ if (ENB_AGENT_SB_IF)
     ${PRPT_C_DIR}/time_common.pb-c.c
     ${PRPT_C_DIR}/controller_commands.pb-c.c
     ${PRPT_C_DIR}/mac_primitives.pb-c.c
+    ${PRPT_C_DIR}/config_messages.pb-c.c
+    ${PRPT_C_DIR}/config_common.pb-c.c
     )
   
   file(GLOB prpt_h ${PRPT_C_DIR}/*.h)
diff --git a/openair2/ENB_APP/MESSAGES/V2/config_common.proto b/openair2/ENB_APP/MESSAGES/V2/config_common.proto
new file mode 100644
index 0000000000..ab6e8b8c22
--- /dev/null
+++ b/openair2/ENB_APP/MESSAGES/V2/config_common.proto
@@ -0,0 +1,174 @@
+//'syntax = "proto2";'
+package protocol;
+
+//
+// Cell config related structures and enums
+//
+
+message prp_si_config {
+       optional uint32 sfn = 1;
+       optional uint32 sib1_length = 2;		// The length of SIB1 in bytes
+       optional uint32 si_window_length = 3; 	// The scheduling window for all SIs in SF
+       repeated prp_si_message si_message = 4;	// List of SI messages to be sent.
+       						// The index identifies the type of an SI message
+						// 0 - SIB1
+						// 1..31 - SIx
+						// 32..63 - PCCH
+}
+
+message prp_si_message {
+	optional uint32 periodicity = 1;		// Periodicity of SI msg in radio frames
+	optional uint32 length = 2;			// The length of the SI message in bytes
+}
+
+enum prp_hopping_mode {
+     PRHM_INTER = 0;
+     PRHM_INTERINTRA = 1;
+}
+
+enum prp_phich_resource {
+     PRPR_ONE_SIXTH = 0;
+     PRPR_HALF = 1;
+     PRPR_ONE = 2;
+     PRPR_TWO = 3;
+}
+
+enum prp_phich_duration {
+     PRPD_NORMAL = 0;
+     PRPD_EXTENDED = 1;
+}
+
+enum prp_ul_cyclic_prefix_length {
+     PRUCPL_NORMAL = 0;
+     PRUCPL_EXTENDED = 1;
+}
+
+enum prp_dl_cyclic_prefix_length {
+     PRDCPL_NORMAL = 0;
+     PRDCPL_EXTENDED = 1;
+}
+
+enum prp_duplex_mode {
+     PRDM_TDD = 0;
+     PRDM_FDD = 1;
+}
+
+enum prp_qam {
+     PREQ_MOD_16QAM = 0;
+     PREQ_MOD_64QAM = 1;
+}
+
+//
+// UE config related structures and enums
+//
+
+message prp_drx_config {
+	optional uint32 on_duration_timer = 1;		// Timer in SF. See TS 36.321
+	optional uint32 drx_inactivity_timer = 2;	// Timer in SF. See TS 36.321
+	optional uint32 drx_retransmission_timer = 3;	// Timer in SF. See TS 36.321
+	optional uint32 long_drx_cycle = 4;		// In SF. See TS 36.321
+	optional uint32 long_drx_cycle_start_offset = 5;// See TS 36.321
+	optional uint32 short_drx_cycle = 6;		// In SF
+	optional uint32 drx_short_cycle_timer = 7;	// Timer in subframes. See TS 36.321
+}
+
+message prp_sps_config {
+	optional uint32 semi_persistent_sched_interval_UL = 1; // SPS UL scheduling interval in SF
+	optional uint32 semi_persistent_sched_interval_DL = 2; // SPS DL scheduling interval in SF
+	optional uint32 num_of_conf_sps_proc = 3;	   // Number of SPS HARQ processes. See TS 36.321
+	repeated uint32 n1_PUCCH_AN_persistent_element = 4;// See TS36.213. Ignored when config is used
+		 					   // as part of PRPT_SET_UE_CONFIG
+	optional uint32 implicit_release_after = 5;		   // number of empty transmissions before release of SPS
+}
+
+message prp_sr_config {
+	optional uint32 sr_action = 1;			// Indicates if SR config should be changed or released
+		 					// One of the PRSRA_* enum values
+	optional uint32 sched_interval = 2;		// SR scheduling interval in SF
+	optional uint32 dsr_trans_max = 3;		// See TS 36.213
+}
+
+message prp_cqi_config {
+	optional uint32 cqi_action = 1;			// Indicats if CQI changed or released.
+		 					// One of the PRSRA_* enum values
+	optional uint32 cqi_sched_interval = 2;		// CQI scheduling interval in SF
+	optional uint32 ri_sched_interval = 3;		// RI scheduling interval in SF
+}
+
+message prp_ue_capabilities {
+	optional uint32 half_duplex = 1;		// Boolean value. Only half duplex support. FDD operation
+	optional uint32 intra_SF_hopping = 2;		// Support for intra-subframe hopping. Boolean value
+	optional uint32 type2_sb_1 = 3;			// Support for type 2 hopping with n_sb > 1
+	optional uint32 ue_category = 4;
+	optional uint32 res_alloc_type1 = 5;		// Boolean value. UE support for resource allocation type 1
+}
+
+message prp_scell_config {
+	optional uint32 carrier_index = 1;		// Id of the carrier component
+	optional uint32 scell_index = 2;		// Index of this Scell (RRC SCellIndex)
+	optional uint32 use_ccs = 3;			// Boolean value. Indicates if cross-carrier scheduling
+		 					// is used by this SCell
+	optional uint32 sched_cell_index = 4;		// Index of the cell responsible for scheduling
+		 					// this SCell if cross-carrier scheduling is enabled
+	optional uint32 pdsch_start = 5;		// Starting OFDM symbol of PDSCH data region for this SCell
+}
+
+enum prp_meas_gap_config_pattern {
+     PRMGCP_GP1 = 0;
+     PRMGCP_GP2 = 1;
+     PRMGCP_OFF = 2;
+}
+
+enum prp_setup_release_action {
+     PRSRA_SETUP = 0;
+     PRSRA_RELEASE = 1;
+}
+
+enum prp_ue_transmission_antenna {
+     PRUTA_NONE = 0;
+     PRUTA_OPEN_LOOP = 1;
+     PRUTA_CLOSED_LOOP = 2;
+}
+
+enum prp_aperiodic_cqi_report_mode {
+     PRACRM_RM12 = 0;
+     PRACRM_RM20 = 1;
+     PRACRM_RM22 = 2;
+     PRACRM_RM30 = 3;
+     PRACRM_RM31 = 4;
+     PRACRM_NONE = 5;
+}
+
+enum prp_tdd_ack_nack_feedback_mode {
+     PRTANFM_BUNDLING = 0;
+     PRTANFM_MULTIPLEXING = 1;
+}
+
+//
+// Logical channel config related structures and enums
+//
+
+message prp_lc_config {
+	optional uint32 lcid = 1;	// The logical channel id
+	optional uint32 lcg = 2;	// The logical channel group (0..3) the LC is mapped to
+	optional uint32 direction = 3;	// The LC direction. One of the PRLCD_* enum values
+	optional uint32 qos_bearer_type = 4;// GBR or NGBR bearer. One of the PRQBT_* enum values
+	optional uint32 qci = 5;	// The QCI defined in TS 23.203, coded as defined in TS 36.413
+		 			// One less than the actual QCI value
+	optional uint64 e_RAB_max_bitrate_UL = 6; // In bps (GBR only)
+	optional uint64 e_RAB_max_bitrate_DL = 7; // In bps (GBR only)
+	optional uint64 e_RAB_guaranteed_bitrate_UL = 8; // In bps (GBR only)
+	optional uint64 e_RAB_guranteed_bitrate_DL = 9;  // In bps (GBR only)
+}
+
+enum prp_lc_direction {
+     PRLCD_UL = 0;
+     PRLCD_DL = 1;
+     PRLCD_BOTH = 2;
+}
+
+enum prp_qos_bearer_type {
+     PRQBT_NON_GBR = 0;
+     PRQBT_GBR = 1;
+}
+
diff --git a/openair2/ENB_APP/MESSAGES/V2/config_messages.proto b/openair2/ENB_APP/MESSAGES/V2/config_messages.proto
new file mode 100644
index 0000000000..4e1151a7e8
--- /dev/null
+++ b/openair2/ENB_APP/MESSAGES/V2/config_messages.proto
@@ -0,0 +1,88 @@
+//'syntax = "proto2";'
+package protocol;
+
+import "config_common.proto";
+
+message prp_cell_config {
+	optional uint32 phy_cell_id = 1;		// The PCI of this cell
+	optional uint32 cell_id = 2;			// The PLMN cell id of this cell
+	optional uint32 pusch_hopping_offset = 3;	// PUSCH resources in RBs for hopping
+	optional uint32 hopping_mode = 4;		// One of the PRHM_* enum values
+	optional uint32 n_sb = 5;			// The number of subbands
+	optional uint32 phich_resource = 6;		// The number of REGs used for PHICH
+		 					// One of the PRPR_* enum values
+	optional uint32 phich_duration = 7;		// One of the PRPD_* enum values
+	optional uint32 init_nr_PDCCH_OFDM_sym = 8; 	// See TS 36.211, section 6.9
+	optional prp_si_config si_config = 9;	 	// The SI configuration
+	optional uint32 dl_bandwidth = 10;		// The DL transmission bandwidth in RBs
+	optional uint32 ul_bandwidth = 11;		// The UL transmission bandwidth in RBs
+	optional uint32 ul_cyclic_prefix_length = 13;	// One of the PRUCPL_* enum values
+	optional uint32 dl_cyclic_prefix_length = 14;	// One of the PRDCPL_* enum values
+	optional uint32 antenna_ports_count = 15;	// Number of cell specific antenna ports
+	optional uint32 duplex_mode = 16;		// One of the PRDM_* enum values
+	optional uint32 subframe_assignment = 17;	// DL/UL subframe assignment. TDD only
+	optional uint32	special_subframe_patterns = 18; // TDD only. See TS 36.211, table 4.2.1
+	repeated uint32 mbsfn_subframe_config_rfperiod = 19; // The MBSFN radio frame period (Optional)
+	repeated uint32 mbsfn_subframe_config_rfoffset = 20; // The radio frame offset (Optional)
+	repeated uint32 mbsfn_subframe_config_sfalloc = 21; // Bitmap indicating the MBSFN subframes (Optional)
+	optional uint32 prach_config_index = 22;	// See TS 36.211, section 5.7.1
+	optional uint32 prach_freq_offset = 23;	// See TS 36.211, section 5.7.1
+	optional uint32 ra_response_window_size = 24; // The duration of the RA response window in SF
+	optional uint32 mac_contention_resolution_timer = 25; // Timer for RA
+	optional uint32 max_HARQ_Msg3Tx = 26;		// See TS 36.321
+	optional uint32 n1PUCCH_AN = 27;		// See TS 36.213, section 10.1
+	optional uint32 deltaPUCCH_shift = 28;		// See TS 36.211, section 5.4
+	optional uint32 nRB_cqi = 29;			// See TS 36.211, section 5.4
+	optional uint32 srs_subframe_config = 30;	// See TS 36.211, table 5.5.3.3-1 and 2
+	optional uint32 srs_bw_config = 31;		// See TS 36.211, section 5.5.3.2
+	optional uint32 srs_mac_up_pts = 32;		// Boolean value. See TS 36.211, section 5.5.3.2. TDD only
+	optional uint32 enable_64QAM = 33;		// One of the PREQ_* enum values
+	optional uint32 carrier_index = 34;		// Carrier component index
+}
+
+message prp_ue_config {
+	optional uint32 rnti = 1;
+	optional prp_drx_config drx_config = 2;		// The DRX configuration (Optional)
+	optional uint32 time_alignment_timer = 3;	// Timer in SF. Control the synchronization
+		 					// status of the UE, not the actual advance procedure
+							// See TS 36.321
+	optional uint32 meas_gap_config_pattern = 4;	// Measurement gap configuration.
+		 				  	// One of the PRMGCP_* enum values
+		 					// See TS 36.133
+	optional uint32 meas_gap_config_sf_offset = 5;	// Measurement gap offset if applicable
+	optional prp_sps_config sps_config = 6;	    	// The SPS configuration (Optional)
+	optional prp_sr_config sr_config = 7;		// The SR configuration (Optional)
+	optional prp_cqi_config cqi_config = 8;		// The CQI configuration (Optional)
+	optional uint32 transmission_mode = 9;		// The UE transmission mode
+	optional uint64 ue_aggregated_max_bitrate_UL = 10; // Aggregated bit-rate of non-gbr bearer
+                                		       	   // per UE. See TS 36.413
+	optional uint64 ue_aggregated_max_bitrate_DL = 11; // Aggregated bit-rate of non-gbr bearer
+		 				       	   // per UE. See TS 36.413
+	optional prp_ue_capabilities capabilities = 12;
+	optional uint32 ue_transmission_antenna = 13;	// One of the PRUTA_* enum values
+	optional uint32 tti_bundling = 14;		// Boolean value. See TS 36.321
+	optional uint32 max_HARQ_tx = 15;		// The max HARQ retransmission for UL
+	optional uint32 beta_offset_ACK_index = 16; 	// See TS 36.213
+	optional uint32 beta_offset_RI_index = 17;	// See TS 36.213
+	optional uint32 beta_offset_CQI_index = 18;	// See TS 36.213
+	optional uint32 ack_nack_simultaneous_trans = 19;// Boolean. See TS 36.213
+	optional uint32 simultaneous_ack_nack_cqi = 20; // Boolean. See TS 36.213
+	optional uint32 aperiodic_cqi_rep_mode = 21;    // One of the PRACRM_* enum values
+	optional uint32 tdd_ack_nack_feedback = 22;     // One of the PRTANFM_* enum values
+	optional uint32 ack_nack_repetition_factor = 23;// See TS 36.213, section 10.1
+	optional uint32 extended_bsr_size = 24;	     	// Boolean for extended BSR size
+	optional uint32 ca_support = 25;    		// Boolean. Support for carrier aggregation
+	optional uint32 cross_carrier_sched_support = 26; // Boolean value
+	optional uint32 pcell_carrier_index = 27;     // Index of primary cell
+	repeated prp_scell_config scell_config = 28;  // Secondary cells configuration
+	optional uint32 scell_deactivation_timer = 29;// Deactivation timer for secondary cell
+}
+
+message prp_lc_ue_config {
+	optional uint32 rnti = 1;
+	repeated prp_lc_config lc_config = 2;	// A list of LC configurations for the given UE
+}
+
+
+
+
diff --git a/openair2/ENB_APP/MESSAGES/V2/header.proto b/openair2/ENB_APP/MESSAGES/V2/header.proto
index 10a18ddcef..be0341f132 100644
--- a/openair2/ENB_APP/MESSAGES/V2/header.proto
+++ b/openair2/ENB_APP/MESSAGES/V2/header.proto
@@ -19,10 +19,18 @@ enum prp_type {
      // Time indication messages
      PRPT_SF_TRIGGER = 5;
 
-     //Asynchronous messages
+     // Asynchronous messages
      PRPT_UL_SR_INFO = 6;
 
+     // eNB configuration messages
+     PRPT_GET_ENB_CONFIG_REQUEST = 7;
+     PRPT_GET_ENB_CONFIG_REPLY = 8;
+     PRPT_GET_UE_CONFIG_REQUEST = 9;
+     PRPT_GET_UE_CONFIG_REPLY = 10;
+     PRPT_GET_LC_CONFIG_REQUEST = 11;
+     PRPT_GET_LC_CONFIG_REPLY = 12;
+
      //Controller command messages
-     PRPT_DL_MAC_CONFIG = 7;
+     PRPT_DL_MAC_CONFIG = 13;
 }
 
diff --git a/openair2/ENB_APP/MESSAGES/V2/progran.proto b/openair2/ENB_APP/MESSAGES/V2/progran.proto
index 5d0ec15518..f1178c0f57 100644
--- a/openair2/ENB_APP/MESSAGES/V2/progran.proto
+++ b/openair2/ENB_APP/MESSAGES/V2/progran.proto
@@ -4,6 +4,7 @@ package protocol;
 import "stats_messages.proto";
 import "header.proto";
 import "time_common.proto";
+import "config_messages.proto";
 import "controller_commands.proto";
 
 message progran_message {
@@ -16,7 +17,13 @@ message progran_message {
 	      prp_stats_reply stats_reply_msg = 5;
 	      prp_sf_trigger sf_trigger_msg = 6;
 	      prp_ul_sr_info ul_sr_info_msg = 7;
-	      prp_dl_mac_config dl_mac_config_msg = 8;
+	      prp_enb_config_request enb_config_request = 8;
+	      prp_enb_config_reply enb_config_reply = 9;
+	      prp_ue_config_request ue_config_request = 10;
+	      prp_ue_config_reply ue_config_reply = 11;
+	      prp_lc_config_request lc_config_request = 12;
+	      prp_lc_config_reply lc_config_reply = 13;
+	      prp_dl_mac_config dl_mac_config_msg = 14;
 	}
 }
 
@@ -108,6 +115,37 @@ message prp_ul_sr_info {
 	repeated uint32 rnti = 3;
 }
 
+//
+// eNB configuration messages
+//
+message prp_enb_config_request {
+	optional prp_header header = 1;
+}
+
+message prp_enb_config_reply {
+	optional prp_header header = 1;
+	optional uint32 eNB_id = 2;		// Unique id to distinguish the eNB
+	repeated prp_cell_config cell_config = 3;
+}
+
+message prp_ue_config_request {
+	optional prp_header header = 1;
+}
+
+message prp_ue_config_reply {
+	optional prp_header header = 1;
+	repeated prp_ue_config ue_config = 2;
+}
+
+message prp_lc_config_request {
+	optional prp_header header = 1;
+}
+
+message prp_lc_config_reply {
+	optional prp_header header = 1;
+	repeated prp_lc_ue_config lc_ue_config = 2;
+}
+
 //
 // Controller command messages
 //
-- 
GitLab