flexran_agent_mac_proto.h 6.73 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
/*
 * 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.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.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
 */ 
21

22 23
/*! \file flexran_agent_mac_proto.h
 * \brief MAC functions for FlexRAN agent
24
 * \author Xenofon Foukas and Navid Nikaein
25 26 27 28 29 30 31
 * \date 2016
 * \email: x.foukas@sms.ed.ac.uk
 * \version 0.1
 * @ingroup _mac

 */

32 33
#ifndef __LAYER2_MAC_FLEXRAN_AGENT_MAC_PROTO_H__
#define __LAYER2_MAC_FLEXRAN_AGENT_MAC_PROTO_H__
34

35
#include "flexran_agent_defs.h"
36
#include "header.pb-c.h"
37
#include "flexran.pb-c.h"
38

39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
/*
 * slice specific scheduler 
 */
typedef void (*slice_scheduler)(module_id_t mod_id, 
				int slice_id, 
				uint32_t frame, 
				uint32_t subframe,
				int *mbsfn_flag,
				Protocol__FlexranMessage **dl_info);



/*
 * top level flexran scheduler used by the eNB scheduler
 */
void flexran_schedule_ue_spec_default(mid_t mod_id, 
				      uint32_t frame, 
				      uint32_t subframe,
				      int *mbsfn_flag, 
				      Protocol__FlexranMessage **dl_info);
/*
 * slice specific scheduler for embb
 */
void
flexran_schedule_ue_spec_embb(mid_t   mod_id,
			      int       slice_id, 
			      uint32_t      frame,
			      uint32_t      subframe,
			      int           *mbsfn_flag,
			      Protocol__FlexranMessage **dl_info);
/*
 * slice specific scheduler for urllc
 */
void
flexran_schedule_ue_spec_urllc(mid_t   mod_id,
			      int       slice_id, 
			      uint32_t      frame,
			      uint32_t      subframe,
			      int           *mbsfn_flag,
			      Protocol__FlexranMessage **dl_info);

/*
 * slice specific scheduler for mmtc
 */
void
flexran_schedule_ue_spec_mmtc(mid_t   mod_id,
			      int       slice_id, 
			      uint32_t      frame,
			      uint32_t      subframe,
			      int           *mbsfn_flag,
			      Protocol__FlexranMessage **dl_info);
/*
 * slice specific scheduler for best effort traffic 
 */
void
flexran_schedule_ue_spec_be(mid_t   mod_id,
			    int       slice_id, 
			    uint32_t      frame,
			    uint32_t      subframe,
			    int           *mbsfn_flag,
			    Protocol__FlexranMessage **dl_info);

/*
 * common flexran scheduler function
 */
void
flexran_schedule_ue_spec_common(mid_t   mod_id,
				int       slice_id, 
				uint32_t      frame,
				uint32_t      subframe,
				int           *mbsfn_flag,
				Protocol__FlexranMessage **dl_info);

uint16_t flexran_nb_rbs_allowed_slice(float rb_percentage, 
				      int total_rbs);

int flexran_slice_member(int UE_id, 
			 int slice_id);

int flexran_slice_maxmcs(int slice_id) ;

shahab SHARIATBAGHERI's avatar
shahab SHARIATBAGHERI committed
120 121
/* Downlink Primitivies */

122 123 124 125 126 127 128 129 130 131 132 133 134 135
void _store_dlsch_buffer (module_id_t Mod_id,
			  int         slice_id,
			  frame_t     frameP,
			  sub_frame_t subframeP);


void _assign_rbs_required (module_id_t Mod_id,
			   int         slice_id,
			   frame_t     frameP,
			   sub_frame_t subframe,
			   uint16_t    nb_rbs_required[MAX_NUM_CCs][NUMBER_OF_UE_MAX],
			   uint16_t    nb_rbs_allowed_slice[MAX_NUM_CCs][MAX_NUM_SLICES], 
			   int         min_rb_unit[MAX_NUM_CCs]);

shahab SHARIATBAGHERI's avatar
shahab SHARIATBAGHERI committed
136 137 138 139 140

/* Uplink Primitivies */

// void _sort_ue_ul (module_id_t module_idP,int frameP, sub_frame_t subframeP);

shahab SHARIATBAGHERI's avatar
shahab SHARIATBAGHERI committed
141
void _assign_max_mcs_min_rb(module_id_t module_idP, int slice_id, int frameP, sub_frame_t subframeP, uint16_t *first_rb);
shahab SHARIATBAGHERI's avatar
shahab SHARIATBAGHERI committed
142 143 144


void _ulsch_scheduler_pre_processor(module_id_t module_idP,
shahab SHARIATBAGHERI's avatar
shahab SHARIATBAGHERI committed
145
                                   int slice_id,                                   
shahab SHARIATBAGHERI's avatar
shahab SHARIATBAGHERI committed
146 147 148 149 150
                                   int frameP,
                                   sub_frame_t subframeP,
                                   uint16_t *first_rb);


151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181
void _dlsch_scheduler_pre_processor (module_id_t   Mod_id,
				     int           slice_id,
				     frame_t       frameP,
				     sub_frame_t   subframeP,
				     int           N_RBG[MAX_NUM_CCs],
				     int           *mbsfn_flag);

void _dlsch_scheduler_pre_processor_reset (int module_idP,
					   int UE_id,
					   uint8_t  CC_id,
					   int frameP,
					   int subframeP,					  
					   int N_RBG,
					   uint16_t nb_rbs_required[MAX_NUM_CCs][NUMBER_OF_UE_MAX],
					   uint16_t nb_rbs_required_remaining[MAX_NUM_CCs][NUMBER_OF_UE_MAX],
					   uint16_t nb_rbs_allowed_slice[MAX_NUM_CCs][MAX_NUM_SLICES],
					   unsigned char rballoc_sub[MAX_NUM_CCs][N_RBG_MAX],
					   unsigned char MIMO_mode_indicator[MAX_NUM_CCs][N_RBG_MAX]);

void _dlsch_scheduler_pre_processor_allocate (module_id_t   Mod_id,
					      int           UE_id,
					      uint8_t       CC_id,
					      int           N_RBG,
					      int           transmission_mode,
					      int           min_rb_unit,
					      uint8_t       N_RB_DL,
					      uint16_t      nb_rbs_required[MAX_NUM_CCs][NUMBER_OF_UE_MAX],
					      uint16_t      nb_rbs_required_remaining[MAX_NUM_CCs][NUMBER_OF_UE_MAX],
					      unsigned char rballoc_sub[MAX_NUM_CCs][N_RBG_MAX],
					      unsigned char MIMO_mode_indicator[MAX_NUM_CCs][N_RBG_MAX]);

182 183 184
/*
 * Default scheduler used by the eNB agent
 */
185 186
void flexran_schedule_ue_spec_default(mid_t mod_id, uint32_t frame, uint32_t subframe,
				      int *mbsfn_flag, Protocol__FlexranMessage **dl_info);
187

188 189 190 191 192 193
/*
  Uplink scheduler used by MAC agent
*/

void flexran_agent_schedule_ulsch_ue_spec(module_id_t module_idP,  frame_t frameP,  unsigned char cooperation_flag,
		    sub_frame_t subframeP, 
shahab SHARIATBAGHERI's avatar
shahab SHARIATBAGHERI committed
194
		    unsigned char sched_subframe, Protocol__FlexranMessage **ul_info);
195

196 197 198
/*
 * Data plane function for applying the DL decisions of the scheduler
 */
shahab SHARIATBAGHERI's avatar
shahab SHARIATBAGHERI committed
199
void flexran_apply_scheduling_decisions(mid_t mod_id, uint32_t frame, uint32_t subframe, int *mbsfn_flag,
200
					   Protocol__FlexranMessage *dl_scheduling_info);
201 202 203 204

/*
 * Data plane function for applying the UE specific DL decisions of the scheduler
 */
205
void flexran_apply_ue_spec_scheduling_decisions(mid_t mod_id, uint32_t frame, uint32_t subframe, int *mbsfn_flag,
206
						uint32_t n_dl_ue_data, Protocol__FlexDlData **dl_ue_data);
207 208 209 210

/*
 * Data plane function for filling the DCI structure
 */
211
void flexran_fill_oai_dci(mid_t mod_id, uint32_t CC_id, uint32_t rnti, Protocol__FlexDlDci *dl_dci);
212 213

#endif