Files
openairinterface5g/openair2/RRC/CELLULAR/rrc_rrm_primitives.h
T
2013-06-25 09:05:02 +00:00

362 lines
13 KiB
C
Executable File

/***************************************************************************
rrc_rrm_primitives.h
-------------------
copyright : (C) 2010 by Eurecom
created by : Lionel.Gauthier@eurecom.fr
modified by : Michelle.Wetterwald@eurecom.fr
**************************************************************************
Definition of RRC external interface to RRM
**************************************************************************/
#ifndef __RRC_RRMPRIM_H__
#define __RRC_RRMPRIM_H__
#include "rrm_constants.h"
//----------------------------------------------------------
// Primitives
//----------------------------------------------------------
// LG : IT IS MANDATORY THAT ALL MESSAGES ARE INDEXED FROM
// 0 TO N WHITH NO HOLE IN NUMEROTATION -> ARRAY OF POINTERS
#define RPC_CONNECTION_REQUEST 0
#define RPC_CONNECTION_RESPONSE 1
#define RPC_CONNECTION_CLOSE 2
#define RPC_CONNECTION_CLOSE_ACK 3
#define RPC_ADD_USER_REQUEST 4
#define RPC_ADD_USER_RESPONSE 5
#define RPC_ADD_USER_CONFIRM 6
#define RPC_REMOVE_USER_REQUEST 7
#define RPC_REMOVE_USER_RESPONSE 8
#define RPC_ADD_RADIO_ACCESS_BEARER_REQUEST 9
#define RPC_ADD_RADIO_ACCESS_BEARER_RESPONSE 10
#define RPC_ADD_RADIO_ACCESS_BEARER_CONFIRM 11
#define RPC_REMOVE_RADIO_ACCESS_BEARER_REQUEST 12
#define RPC_REMOVE_RADIO_ACCESS_BEARER_RESPONSE 13
#define RPC_MEASUREMENT_REQUEST 14
#define RPC_L1_MEASUREMENT_RG_INTERNAL_REPORT 15
#define RPC_L1_MEASUREMENT_RG_QUALITY_REPORT 16
#define RPC_L1_MEASUREMENT_RG_TRAFFIC_VOLUME_REPORT 17
#define RPC_L1_MEASUREMENT_RG_PHYSICAL_CHANNEL_DATA_AMP_REPORT 18
#define RPC_L1_MEASUREMENT_MT_INTERNAL_REPORT 19
#define RPC_L1_MEASUREMENT_MT_QUALITY_REPORT 20
#define RPC_L1_MEASUREMENT_MT_TRAFFIC_VOLUME_REPORT 21
#define RPC_L1_MEASUREMENT_MT_INTRA_FREQUENCY_REPORT 22
#define RPC_UPLINK_PHYSICAL_CHANNEL_CONTROL 23
#define RPC_CONFIG_REQUEST 24
#define RPC_ACK 25
#define RPC_NB_RPC 26
//----------------------------------------------------------
// Constants
//----------------------------------------------------------
#define RRM_MAX_MESSAGE_SIZE 1500
#define RRM_SERVER_PORT 9900L
#define RRC_SERVER_PORT 9899L
#define RADIO_GATEWAY_MASTER 77
#define RADIO_GATEWAY_SLAVE 83
#define RADIO_GATEWAY_SIMULATION 83
#define RADIO_GATEWAY_SIMULATION_BYPASS_L1 66
#define RADIO_GATEWAY_REAL_TIME_RF 82
#define RADIO_GATEWAY_REAL_TIME_IF 73
// CLASS_OF_TRAFFIC
#define CONVERSATIONAL 1
#define STREAMING 2
#define INTERACTIVE 3
#define BACKGROUND 4
// CONNECTION RESPONSE STATUS
#define STATUS_CONNECTION_ACCEPTED 0
#define STATUS_CONNECTION_REFUSED_ALREADY_CONNECTED -1
#define STATUS_CONNECTION_REFUSED_TOO_MANY_RG -2
// ADD USER RESPONSE STATUS
#define ADD_USER_SUCCESSFUL 3
#define ADD_USER_FAILED -3
// REMOVE USER RESPONSE STATUS
#define REMOVE_USER_SUCCESSFUL 4
#define REMOVE_USER_FAILED -4
// ADD RADIO ACCESS BEARER STATUS
#define ADD_RADIO_ACCESS_BEARER_SUCCESSFUL 5
#define ADD_RADIO_ACCESS_BEARER_FAILED -5
// REMOVE RADIO ACCESS BEARER STATUS
#define REMOVE_RADIO_ACCESS_BEARER_SUCCESSFUL 6
#define REMOVE_RADIO_ACCESS_BEARER_FAILED -6
// Measure command
#define RRC_RRM_SETUP 1
#define RRC_RRM_RELEASE 3
// Measure type
#define RRC_RRM_TYPE_IntraFreq 0
#define RRC_RRM_TYPE_TrafficVolume 1
#define RRC_RRM_TYPE_Quality 2
#define RRC_RRM_TYPE_Internal 3
//----------------------------------------------------------
// Parameter types
//----------------------------------------------------------
struct rrc_rrm_measure_ctl {
u8 command; //setup-release as above
u8 amount; //number of measures 0-1-2-4-8-16-32-64
u16 period; //250--> 64000 ms
u8 type;
u8 BaseStation; //1=YES
u16 UE_Id;
};
// Measure report
// from Mobile Terminal
struct rrc_rrm_meas_report_mt_if {
u16 UE_Id __attribute__ ((packed));
u16 if_num_cells __attribute__ ((packed));
u16 if_cell_id[maxCells] __attribute__ ((packed));
u16 if_cell_parms_id[maxCells] __attribute__ ((packed));
u16 if_BCH_RSCP[maxCells] __attribute__ ((packed));
u16 if_pathloss[maxCells] __attribute__ ((packed));
u16 if_slot_iscp[maxCells][JRRM_SLOTS_PER_FRAME] __attribute__ ((packed));
};
struct rrc_rrm_meas_report_mt_tv {
u16 UE_Id __attribute__ ((packed));
u16 tv_num_rbs __attribute__ ((packed));
u16 tv_rbid[MAXMEASRBS] __attribute__ ((packed));
u16 tv_rb_payload[MAXMEASRBS] __attribute__ ((packed));
u16 tv_rb_average[MAXMEASRBS] __attribute__ ((packed));
u16 tv_rb_variance[MAXMEASRBS] __attribute__ ((packed));
};
struct rrc_rrm_meas_report_mt_q {
u16 UE_Id __attribute__ ((packed));
u16 q_num_TrCH __attribute__ ((packed));
u16 q_dl_TrCH_id[MAXMEASTRCH] __attribute__ ((packed));
u16 q_dl_TrCH_BLER[MAXMEASTRCH] __attribute__ ((packed));
u16 q_num_tfcs __attribute__ ((packed));
u16 q_tfcs_id[MAXMEASTFCS] __attribute__ ((packed));
u16 q_sir[MAXMEASTFCS][JRRM_SLOTS_PER_FRAME] __attribute__ ((packed));
};
struct rrc_rrm_meas_report_mt_int {
// u8 UE_Id;
u16 UE_Id __attribute__ ((packed));
u16 int_xmit_power[JRRM_SLOTS_PER_FRAME] __attribute__ ((packed));
u16 int_timing_advance __attribute__ ((packed));
};
union rrc_rrm_meas_report_mt_rrc {
struct rrc_rrm_meas_report_mt_if meas_rep_mt_if;
struct rrc_rrm_meas_report_mt_tv meas_rep_mt_tv;
struct rrc_rrm_meas_report_mt_q meas_rep_mt_q;
struct rrc_rrm_meas_report_mt_int meas_rep_mt_int;
};
// from Base station
struct rrc_rrm_meas_report_bs_tv {
u16 UE_Id __attribute__ ((packed));
u16 tv_num_rbs __attribute__ ((packed));
u16 tv_rbid[MAXMEASRBS] __attribute__ ((packed));
u16 tv_rb_payload[MAXMEASRBS] __attribute__ ((packed));
u16 tv_rb_average[MAXMEASRBS] __attribute__ ((packed));
u16 tv_rb_variance[MAXMEASRBS] __attribute__ ((packed));
};
struct rrc_rrm_meas_report_bs_q {
u16 UE_Id __attribute__ ((packed));
u16 q_num_TrCH __attribute__ ((packed));
u16 q_dl_TrCH_id[MAXMEASTRCH] __attribute__ ((packed));
u16 q_dl_TrCH_BLER[MAXMEASTRCH] __attribute__ ((packed));
u16 q_num_tfcs __attribute__ ((packed));
u16 q_tfcs_id[MAXMEASTFCS] __attribute__ ((packed));
u16 q_sir[MAXMEASTFCS][JRRM_SLOTS_PER_FRAME] __attribute__ ((packed));
};
struct rrc_rrm_meas_report_bs_int {
s32 int_xmit_power[numANTENNAS][JRRM_SLOTS_PER_FRAME] __attribute__ ((packed));
s32 int_rscp[JRRM_SLOTS_PER_FRAME][MAXCH] __attribute__ ((packed));
s32 int_rssi_rf[numANTENNAS][JRRM_SLOTS_PER_FRAME] __attribute__ ((packed));
u16 int_spare[NUMSPARE] __attribute__ ((packed));
};
union rrc_rrm_meas_report_bs_rrc {
struct rrc_rrm_meas_report_bs_tv meas_rep_bs_tv;
struct rrc_rrm_meas_report_bs_q meas_rep_bs_q;
struct rrc_rrm_meas_report_bs_int meas_rep_bs_int;
};
//----------------------------------------------------------
// Primitive definitions
//----------------------------------------------------------
// Message Header
typedef struct rrc_rrm_message_header {
u16 type;
u16 length; // length includes only data following this header
u32 frame;
} rpc_message;
// Message Content
// Primitives without content
// RPC_CONNECTION_CLOSE_ACK 3
// RPC_UPLINK_PHYSICAL_CHANNEL_CONTROL 23
// RPC_CONFIG_REQUEST 24
// RPC_ACK 25
// RPC_NB_RPC 26
//-------------------------------------------
// RPC_CONNECTION_REQUEST 0
typedef struct connection_request {
char radio_gateway_type; // master or slave
char radio_gateway_execution_mode; // simulation, simulation + bypass L1, real time RF, real time IF
u8 nb_antennas;
} connection_request;
//-------------------------------------------
// RPC_CONNECTION_RESPONSE 1
typedef struct connection_response {
s8 status;
u8 equipment_id;
} connection_response;
//-------------------------------------------
// RPC_CONNECTION_CLOSE 2
typedef struct connection_close {
u8 equipment_id;
} connection_close;
//-------------------------------------------
// RPC_ADD_USER_REQUEST 4
typedef struct add_user_request {
u8 equipment_id;
u8 user_id;
u8 tx_id;
} add_user_request;
//-------------------------------------------
// RPC_ADD_USER_RESPONSE 5
typedef struct add_user_response {
u8 equipment_id;
u8 user_id;
u8 status;
u8 tx_id;
} add_user_response;
//-------------------------------------------
// RPC_ADD_USER_CONFIRM 6
typedef struct add_user_confirm {
u8 equipment_id;
u8 user_id;
} add_user_confirm;
//-------------------------------------------
// RPC_REMOVE_USER_REQUEST 7
typedef struct remove_user_request {
u8 equipment_id;
u8 user_id;
u8 tx_id;
} remove_user_request;
//-------------------------------------------
// RPC_REMOVE_USER_RESPONSE 8
typedef struct remove_user_response {
u8 equipment_id;
u8 user_id;
u8 status;
u8 tx_id;
} remove_user_response;
//-------------------------------------------
// RPC_ADD_RADIO_ACCESS_BEARER_REQUEST 9
typedef struct add_radio_access_bearer_request {
u8 equipment_id;
u8 user_id;
u8 tx_id;
u8 rab_id;
u16 traffic_class;
u16 delay;
u32 guaranted_bit_rate_uplink;
u32 max_bit_rate_uplink;
u32 guaranted_bit_rate_downlink;
u32 max_bit_rate_downlink;
} add_radio_access_bearer_request;
//-------------------------------------------
// RPC_ADD_RADIO_ACCESS_BEARER_RESPONSE 10
typedef struct add_radio_access_bearer_response {
u8 user_id;
u8 rab_id;
u8 status;
u8 tx_id;
} add_radio_access_bearer_response;
//-------------------------------------------
// RPC_ADD_RADIO_ACCESS_BEARER_CONFIRM 11
typedef struct add_radio_access_bearer_confirm {
u8 equipment_id;
u8 user_id;
u8 rab_id;
} add_radio_access_bearer_confirm;
//-------------------------------------------
// RPC_REMOVE_RADIO_ACCESS_BEARER_REQUEST 12
typedef struct remove_radio_access_bearer_request {
u8 equipment_id;
u8 user_id;
u8 rab_id;
u8 tx_id;
} remove_radio_access_bearer_request;
//-------------------------------------------
// RPC_REMOVE_RADIO_ACCESS_BEARER_RESPONSE 13
typedef struct remove_radio_access_bearer_response {
u8 user_id;
u8 rab_id;
u8 status;
u8 tx_id;
} remove_radio_access_bearer_response;
//-------------------------------------------
// RPC_MEASUREMENT_REQUEST 14
typedef struct measurement_request {
u8 measurement_type;
u8 measurement_command;
u8 equipment_type;
u8 equipment_id;
u16 amount;
u16 period;
} measurement_request;
//-------------------------------------------
// RPC_L1_MEASUREMENT_RG_INTERNAL_REPORT 15
typedef struct l1_measurement_rg_internal_report {
u32 equipment_id;
struct rrc_rrm_meas_report_bs_int measurements;
} l1_measurement_rg_internal_report;
//-------------------------------------------
// RPC_L1_MEASUREMENT_RG_QUALITY_REPORT 16
typedef struct l1_measurement_rg_quality_report {
u32 equipment_id;
struct rrc_rrm_meas_report_bs_q measurements;
} l1_measurement_rg_quality_report;
//-------------------------------------------
// RPC_L1_MEASUREMENT_RG_TRAFFIC_VOLUME_REPORT 17
typedef struct l1_measurement_rg_traffic_volume_report {
u32 equipment_id;
struct rrc_rrm_meas_report_bs_tv measurements;
} l1_measurement_rg_traffic_volume_report;
//-------------------------------------------
// RPC_L1_MEASUREMENT_RG_PHYSICAL_CHANNEL_DATA_AMP_REPORT 18
//-------------------------------------------
// RPC_L1_MEASUREMENT_MT_INTERNAL_REPORT 19
typedef struct l1_measurement_mt_internal_report {
u32 equipment_id;
struct rrc_rrm_meas_report_mt_int measurements;
} l1_measurement_mt_internal_report;
//-------------------------------------------
// RPC_L1_MEASUREMENT_MT_QUALITY_REPORT 20
typedef struct l1_measurement_mt_quality_report {
u32 equipment_id;
struct rrc_rrm_meas_report_mt_q measurements;
} l1_measurement_mt_quality_report;
//-------------------------------------------
// RPC_L1_MEASUREMENT_MT_TRAFFIC_VOLUME_REPORT 21
typedef struct l1_measurement_mt_traffic_volume_report {
u32 equipment_id;
struct rrc_rrm_meas_report_mt_tv measurements;
} l1_measurement_mt_traffic_volume_report;
//-------------------------------------------
// RPC_L1_MEASUREMENT_MT_INTRA_FREQUENCY_REPORT 22
typedef struct l1_measurement_mt_intra_frequency_report {
u32 equipment_id;
struct rrc_rrm_meas_report_mt_if measurements;
} l1_measurement_mt_intra_frequency_report;
//-------------------------------------------
#endif