The agent_id is a uint64 consisting of: module ID (i.e. mod_id, the several instances of OAI at once, 16 bit), the enb_id from the configuration file (32 bit) and the cell_id from the configuration file (16 bit). The module ID is part of the agent ID but it is easier to have it directly in the struct.
231 lines
5.4 KiB
C
231 lines
5.4 KiB
C
/*
|
|
* 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 flexran_agent_defs.h
|
|
* \brief FlexRAN agent common definitions
|
|
* \author Navid Nikaein and Xenofon Foukas and shahab SHARIAT BAGHERI
|
|
* \date 2017
|
|
* \version 0.1
|
|
*/
|
|
#ifndef FLEXRAN_AGENT_DEFS_H_
|
|
#define FLEXRAN_AGENT_DEFS_H_
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <pthread.h>
|
|
#include <string.h>
|
|
#include <stdbool.h>
|
|
#include <time.h>
|
|
|
|
#include "link_manager.h"
|
|
|
|
#define NUM_MAX_ENB 2
|
|
#define NUM_MAX_DRB 8
|
|
#define NUM_MAX_SRB 3
|
|
#define NUM_MAX_UE 2048
|
|
#define DEFAULT_DRB 3
|
|
#define DEFAULT_FLEXRAN_AGENT_IPv4_ADDRESS "127.0.0.1"
|
|
#define DEFAULT_FLEXRAN_AGENT_PORT 2210
|
|
#define DEFAULT_FLEXRAN_AGENT_CACHE "/mnt/oai_agent_cache"
|
|
|
|
typedef enum {
|
|
|
|
FLEXRAN_AGENT_DEFAULT=0,
|
|
|
|
FLEXRAN_AGENT_PHY=1,
|
|
FLEXRAN_AGENT_MAC=2,
|
|
FLEXRAN_AGENT_RLC=3,
|
|
FLEXRAN_AGENT_PDCP=4,
|
|
FLEXRAN_AGENT_RRC=5,
|
|
FLEXRAN_AGENT_S1AP=6,
|
|
FLEXRAN_AGENT_GTP=7,
|
|
FLEXRAN_AGENT_X2AP=8,
|
|
|
|
FLEXRAN_AGENT_MAX=9,
|
|
|
|
} agent_id_t;
|
|
|
|
typedef enum {
|
|
/* no action */
|
|
FLEXRAN_AGENT_ACTION_NONE = 0x0,
|
|
|
|
/* send action */
|
|
FLEXRAN_AGENT_ACTION_SEND = 0x1,
|
|
|
|
/* apply action */
|
|
FLEXRAN_AGENT_ACTION_APPLY = 0x2,
|
|
|
|
/* clear action */
|
|
FLEXRAN_AGENT_ACTION_CLEAR = 0x4,
|
|
|
|
/* write action */
|
|
FLEXRAN_AGENT_ACTION_WRITE = 0x8,
|
|
|
|
/* filter action */
|
|
FLEXRAN_AGENT_ACTION_FILTER = 0x10,
|
|
|
|
/* preprocess action */
|
|
FLEXRAN_AGENT_ACTION_PREPROCESS = 0x20,
|
|
|
|
/* meter action */
|
|
FLEXRAN_AGENT_ACTION_METER = 0x40,
|
|
|
|
/* Max number of states available */
|
|
FLEXRAN_AGENT_ACTION_MAX = 0x7f,
|
|
} agent_action_t;
|
|
|
|
|
|
typedef enum {
|
|
|
|
RAN_LTE_OAI= 0,
|
|
|
|
/* Max number of states available */
|
|
RAN_NAME_MAX = 0x7f,
|
|
} ran_name_t;
|
|
|
|
typedef uint8_t xid_t;
|
|
typedef uint8_t mid_t; // module or enb id
|
|
typedef uint8_t lcid_t;
|
|
typedef int32_t err_code_t;
|
|
|
|
|
|
/*---------Timer Enums --------- */
|
|
|
|
typedef enum {
|
|
/* oneshot timer: */
|
|
FLEXRAN_AGENT_TIMER_TYPE_ONESHOT = 0,
|
|
|
|
/* periodic timer */
|
|
FLEXRAN_AGENT_TIMER_TYPE_PERIODIC = 1,
|
|
|
|
/* Inactive state: initial state for any timer. */
|
|
FLEXRAN_AGENT_TIMER_TYPE_EVENT_DRIVEN = 2,
|
|
|
|
/* Max number of states available */
|
|
FLEXRAN_AGENT_TIMER_TYPE_MAX,
|
|
} flexran_agent_timer_type_t;
|
|
|
|
|
|
typedef enum {
|
|
/* Inactive state: initial state for any timer. */
|
|
FLEXRAN_AGENT_TIMER_STATE_INACTIVE = 0x0,
|
|
|
|
/* Inactive state: initial state for any timer. */
|
|
FLEXRAN_AGENT_TIMER_STATE_ACTIVE = 0x1,
|
|
|
|
/* Inactive state: initial state for any timer. */
|
|
FLEXRAN_AGENT_TIMER_STATE_STOPPED = 0x2,
|
|
|
|
/* Max number of states available */
|
|
FLEXRAN_AGENT_TIMER_STATE_MAX,
|
|
} flexran_agent_timer_state_t;
|
|
|
|
#define FLEXRAN_CAP_LOPHY 1
|
|
#define FLEXRAN_CAP_HIPHY 2
|
|
#define FLEXRAN_CAP_LOMAC 4
|
|
#define FLEXRAN_CAP_HIMAC 8
|
|
#define FLEXRAN_CAP_RLC 16
|
|
#define FLEXRAN_CAP_PDCP 32
|
|
#define FLEXRAN_CAP_SDAP 64
|
|
#define FLEXRAN_CAP_RRC 128
|
|
|
|
typedef enum {
|
|
ENB_NORMAL_OPERATION = 0x0,
|
|
ENB_WAIT = 0x1,
|
|
ENB_MAKE_WAIT = 0x2,
|
|
} flexran_enb_state_t;
|
|
|
|
typedef struct {
|
|
/* general info */
|
|
int enabled;
|
|
char *interface_name;
|
|
char *remote_ipv4_addr;
|
|
uint16_t remote_port;
|
|
char *cache_name;
|
|
|
|
mid_t mod_id;
|
|
uint64_t agent_id;
|
|
uint8_t capability_mask;
|
|
|
|
/* lock for waiting before starting or soft-restart */
|
|
pthread_cond_t cond_node_ctrl;
|
|
pthread_mutex_t mutex_node_ctrl;
|
|
flexran_enb_state_t node_ctrl_state;
|
|
|
|
/* stats */
|
|
|
|
uint32_t total_rx_msg;
|
|
uint32_t total_tx_msg;
|
|
|
|
uint32_t rx_msg[NUM_MAX_ENB];
|
|
uint32_t tx_msg[NUM_MAX_ENB];
|
|
|
|
} flexran_agent_info_t;
|
|
|
|
|
|
/*
|
|
rrc triggering
|
|
*/
|
|
|
|
|
|
typedef struct {
|
|
char * trigger_policy;
|
|
uint32_t report_interval;
|
|
uint32_t report_amount;
|
|
|
|
} agent_reconf_rrc;
|
|
|
|
|
|
/* These structs will be used to give
|
|
instructions for the type of stats reports
|
|
we need to create */
|
|
|
|
|
|
typedef struct {
|
|
uint16_t ue_rnti;
|
|
uint32_t ue_report_flags; /* Indicates the report elements
|
|
required for this UE id. See
|
|
FlexRAN specification 1.2.4.2 */
|
|
} ue_report_type_t;
|
|
|
|
typedef struct {
|
|
uint16_t cc_id;
|
|
uint32_t cc_report_flags; /* Indicates the report elements
|
|
required for this CC index. See
|
|
FlexRAN specification 1.2.4.3 */
|
|
} cc_report_type_t;
|
|
|
|
typedef struct {
|
|
int nr_ue;
|
|
ue_report_type_t *ue_report_type;
|
|
int nr_cc;
|
|
cc_report_type_t *cc_report_type;
|
|
} report_config_t;
|
|
|
|
typedef struct stats_request_config_s{
|
|
uint8_t report_type;
|
|
uint8_t report_frequency;
|
|
uint16_t period; /*In number of subframes*/
|
|
report_config_t *config;
|
|
} stats_request_config_t;
|
|
|
|
#endif
|