Commit e42b1c43 authored by Lionel Gauthier's avatar Lionel Gauthier

OK for start of MME_GW and HSS on same host

git-svn-id: http://svn.eurecom.fr/openair4G/trunk@7111 818b1a75-f10b-46b9-bf7c-635c3b92a50f
parent fb09ba8e
...@@ -175,7 +175,7 @@ typedef struct as_stmsi_s { ...@@ -175,7 +175,7 @@ typedef struct as_stmsi_s {
/* Dedicated NAS information */ /* Dedicated NAS information */
typedef struct as_nas_info_s { typedef struct as_nas_info_s {
UInt32_t length; /* Length of the NAS information data */ UInt32_t length; /* Length of the NAS information data */
Byte_t *data; /* Dedicated NAS information data container */ Byte_t* data; /* Dedicated NAS information data container */
} as_nas_info_t; } as_nas_info_t;
/* Radio Access Bearer identity */ /* Radio Access Bearer identity */
...@@ -567,11 +567,11 @@ typedef struct as_message_s { ...@@ -567,11 +567,11 @@ typedef struct as_message_s {
/****************** E X P O R T E D F U N C T I O N S ******************/ /****************** E X P O R T E D F U N C T I O N S ******************/
/****************************************************************************/ /****************************************************************************/
int as_message_decode(const char *buffer, as_message_t *msg, int length); int as_message_decode(const char* buffer, as_message_t* msg, int length);
int as_message_encode(char *buffer, as_message_t *msg, int length); int as_message_encode(char* buffer, as_message_t* msg, int length);
/* Implemented in the network_api.c body file */ /* Implemented in the network_api.c body file */
int as_message_send(as_message_t *as_msg); int as_message_send(as_message_t* as_msg);
#endif /* __AS_MESSAGE_H__*/ #endif /* __AS_MESSAGE_H__*/
...@@ -263,7 +263,7 @@ typedef struct { ...@@ -263,7 +263,7 @@ typedef struct {
* EPS Mobility Management sublayer * EPS Mobility Management sublayer
*/ */
typedef int (*emm_indication_callback_t) (Stat_t, tac_t, ci_t, AcT_t, typedef int (*emm_indication_callback_t) (Stat_t, tac_t, ci_t, AcT_t,
const char *, size_t); const char*, size_t);
typedef enum eps_protocol_discriminator_e { typedef enum eps_protocol_discriminator_e {
/* Protocol discriminator identifier for EPS Mobility Management */ /* Protocol discriminator identifier for EPS Mobility Management */
......
...@@ -44,7 +44,7 @@ ...@@ -44,7 +44,7 @@
#define GTPV1U_ALL_TUNNELS_TEID (teid_t)0xFFFFFFFF #define GTPV1U_ALL_TUNNELS_TEID (teid_t)0xFFFFFFFF
typedef struct gtpv1u_enb_create_tunnel_req_s { typedef struct gtpv1u_enb_create_tunnel_req_s {
module_id_t ue_index; rnti_t rnti;
int num_tunnels; int num_tunnels;
teid_t sgw_S1u_teid[GTPV1U_MAX_BEARERS_PER_UE]; ///< Tunnel Endpoint Identifier teid_t sgw_S1u_teid[GTPV1U_MAX_BEARERS_PER_UE]; ///< Tunnel Endpoint Identifier
ebi_t eps_bearer_id[GTPV1U_MAX_BEARERS_PER_UE]; ebi_t eps_bearer_id[GTPV1U_MAX_BEARERS_PER_UE];
...@@ -53,7 +53,7 @@ typedef struct gtpv1u_enb_create_tunnel_req_s { ...@@ -53,7 +53,7 @@ typedef struct gtpv1u_enb_create_tunnel_req_s {
typedef struct gtpv1u_enb_create_tunnel_resp_s { typedef struct gtpv1u_enb_create_tunnel_resp_s {
uint8_t status; ///< Status of S1U endpoint creation (Failed = 0xFF or Success = 0x0) uint8_t status; ///< Status of S1U endpoint creation (Failed = 0xFF or Success = 0x0)
uint8_t ue_index; rnti_t rnti;
int num_tunnels; int num_tunnels;
teid_t enb_S1u_teid[GTPV1U_MAX_BEARERS_PER_UE]; ///< Tunnel Endpoint Identifier teid_t enb_S1u_teid[GTPV1U_MAX_BEARERS_PER_UE]; ///< Tunnel Endpoint Identifier
ebi_t eps_bearer_id[GTPV1U_MAX_BEARERS_PER_UE]; ebi_t eps_bearer_id[GTPV1U_MAX_BEARERS_PER_UE];
...@@ -61,7 +61,7 @@ typedef struct gtpv1u_enb_create_tunnel_resp_s { ...@@ -61,7 +61,7 @@ typedef struct gtpv1u_enb_create_tunnel_resp_s {
} gtpv1u_enb_create_tunnel_resp_t; } gtpv1u_enb_create_tunnel_resp_t;
typedef struct gtpv1u_enb_update_tunnel_req_s { typedef struct gtpv1u_enb_update_tunnel_req_s {
uint8_t ue_index; rnti_t rnti;
teid_t enb_S1u_teid; ///< eNB S1U Tunnel Endpoint Identifier teid_t enb_S1u_teid; ///< eNB S1U Tunnel Endpoint Identifier
teid_t sgw_S1u_teid; ///< SGW S1U local Tunnel Endpoint Identifier teid_t sgw_S1u_teid; ///< SGW S1U local Tunnel Endpoint Identifier
transport_layer_addr_t sgw_addr; transport_layer_addr_t sgw_addr;
...@@ -69,7 +69,7 @@ typedef struct gtpv1u_enb_update_tunnel_req_s { ...@@ -69,7 +69,7 @@ typedef struct gtpv1u_enb_update_tunnel_req_s {
} gtpv1u_enb_update_tunnel_req_t; } gtpv1u_enb_update_tunnel_req_t;
typedef struct gtpv1u_enb_update_tunnel_resp_s { typedef struct gtpv1u_enb_update_tunnel_resp_s {
uint8_t ue_index; rnti_t rnti;
uint8_t status; ///< Status (Failed = 0xFF or Success = 0x0) uint8_t status; ///< Status (Failed = 0xFF or Success = 0x0)
teid_t enb_S1u_teid; ///< eNB S1U Tunnel Endpoint Identifier teid_t enb_S1u_teid; ///< eNB S1U Tunnel Endpoint Identifier
teid_t sgw_S1u_teid; ///< SGW S1U local Tunnel Endpoint Identifier teid_t sgw_S1u_teid; ///< SGW S1U local Tunnel Endpoint Identifier
...@@ -77,20 +77,20 @@ typedef struct gtpv1u_enb_update_tunnel_resp_s { ...@@ -77,20 +77,20 @@ typedef struct gtpv1u_enb_update_tunnel_resp_s {
} gtpv1u_enb_update_tunnel_resp_t; } gtpv1u_enb_update_tunnel_resp_t;
typedef struct gtpv1u_enb_delete_tunnel_req_s { typedef struct gtpv1u_enb_delete_tunnel_req_s {
module_id_t ue_index; rnti_t rnti;
uint8_t num_erab; uint8_t num_erab;
ebi_t eps_bearer_id[GTPV1U_MAX_BEARERS_PER_UE]; ebi_t eps_bearer_id[GTPV1U_MAX_BEARERS_PER_UE];
//teid_t enb_S1u_teid; ///< local SGW S11 Tunnel Endpoint Identifier //teid_t enb_S1u_teid; ///< local SGW S11 Tunnel Endpoint Identifier
} gtpv1u_enb_delete_tunnel_req_t; } gtpv1u_enb_delete_tunnel_req_t;
typedef struct gtpv1u_enb_delete_tunnel_resp_s { typedef struct gtpv1u_enb_delete_tunnel_resp_s {
uint8_t ue_index; rnti_t rnti;
uint8_t status; ///< Status of S1U endpoint deleteion (Failed = 0xFF or Success = 0x0) uint8_t status; ///< Status of S1U endpoint deleteion (Failed = 0xFF or Success = 0x0)
teid_t enb_S1u_teid; ///< local S1U Tunnel Endpoint Identifier to be deleted teid_t enb_S1u_teid; ///< local S1U Tunnel Endpoint Identifier to be deleted
} gtpv1u_enb_delete_tunnel_resp_t; } gtpv1u_enb_delete_tunnel_resp_t;
typedef struct gtpv1u_enb_tunnel_data_ind_s { typedef struct gtpv1u_enb_tunnel_data_ind_s {
uint8_t ue_index; rnti_t rnti;
uint8_t *buffer; uint8_t *buffer;
uint32_t length; uint32_t length;
uint32_t offset; ///< start of message offset in buffer uint32_t offset; ///< start of message offset in buffer
...@@ -101,7 +101,7 @@ typedef struct gtpv1u_enb_tunnel_data_req_s { ...@@ -101,7 +101,7 @@ typedef struct gtpv1u_enb_tunnel_data_req_s {
uint8_t *buffer; uint8_t *buffer;
uint32_t length; uint32_t length;
uint32_t offset; ///< start of message offset in buffer uint32_t offset; ///< start of message offset in buffer
uint8_t ue_index; rnti_t rnti;
rb_id_t rab_id; rb_id_t rab_id;
} gtpv1u_enb_tunnel_data_req_t; } gtpv1u_enb_tunnel_data_req_t;
......
...@@ -95,6 +95,7 @@ typedef struct RrcMacCcchDataCnf_s { ...@@ -95,6 +95,7 @@ typedef struct RrcMacCcchDataCnf_s {
typedef struct RrcMacCcchDataInd_s { typedef struct RrcMacCcchDataInd_s {
uint32_t frame; uint32_t frame;
uint16_t rnti;
uint32_t sdu_size; uint32_t sdu_size;
uint8_t sdu[CCCH_SDU_SIZE]; uint8_t sdu[CCCH_SDU_SIZE];
uint8_t enb_index; uint8_t enb_index;
......
...@@ -399,8 +399,8 @@ typedef struct { ...@@ -399,8 +399,8 @@ typedef struct {
); );
unsigned int (*mac_rlc_data_req)(module_id_t, unsigned int, char*); unsigned int (*mac_rlc_data_req)(module_id_t, unsigned int, char*);
void (*mac_rlc_data_ind)(module_id_t, logical_chan_id_t, char*, tb_size_t, num_tb_t, crc_t* ); void (*mac_rlc_data_ind)(module_id_t, logical_chan_id_t, char*, tb_size_t, num_tb_t, crc_t* );
mac_rlc_status_resp_t (*mac_rlc_status_ind) (module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t frameP, eNB_flag_t eNB_flagP, MBMS_flag_t MBMS_flagP, logical_chan_id_t channel_idP, mac_rlc_status_resp_t (*mac_rlc_status_ind) (module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t frameP, eNB_flag_t eNB_flagP, MBMS_flag_t MBMS_flagP,
tb_size_t tb_sizeP); logical_chan_id_t channel_idP, tb_size_t tb_sizeP);
signed int (*rrc_rlc_data_req)(module_id_t, rb_id_t, mui_t, confirm_t, sdu_size_t, char *); signed int (*rrc_rlc_data_req)(module_id_t, rb_id_t, mui_t, confirm_t, sdu_size_t, char *);
void (*rrc_rlc_register_rrc) (void (*rrc_data_indP)(module_id_t , rb_id_t , sdu_size_t , char* ), void (*rrc_rlc_register_rrc) (void (*rrc_data_indP)(module_id_t , rb_id_t , sdu_size_t , char* ),
void (*rrc_data_confP) (module_id_t , rb_id_t , mui_t ) ) ; void (*rrc_data_confP) (module_id_t , rb_id_t , mui_t ) ) ;
......
...@@ -257,7 +257,7 @@ typedef struct { ...@@ -257,7 +257,7 @@ typedef struct {
typedef struct { typedef struct {
int n_pkfs; int n_pkfs;
#define NET_PACKET_FILTER_MAX 16 #define NET_PACKET_FILTER_MAX 16
network_pkf_t *pkf[NET_PACKET_FILTER_MAX]; network_pkf_t* pkf[NET_PACKET_FILTER_MAX];
} network_tft_t; } network_tft_t;
/* /*
......
...@@ -53,7 +53,8 @@ typedef struct RrcDcchDataReq_s { ...@@ -53,7 +53,8 @@ typedef struct RrcDcchDataReq_s {
uint32_t sdu_size; uint32_t sdu_size;
uint8_t *sdu_p; uint8_t *sdu_p;
uint8_t mode; uint8_t mode;
uint8_t ue_index; uint16_t rnti;
uint8_t module_id;
uint8_t eNB_index; uint8_t eNB_index;
} RrcDcchDataReq; } RrcDcchDataReq;
...@@ -62,8 +63,9 @@ typedef struct RrcDcchDataInd_s { ...@@ -62,8 +63,9 @@ typedef struct RrcDcchDataInd_s {
uint8_t dcch_index; uint8_t dcch_index;
uint32_t sdu_size; uint32_t sdu_size;
uint8_t *sdu_p; uint8_t *sdu_p;
uint8_t ue_index; uint16_t rnti;
uint8_t eNB_index; uint8_t module_id;
uint8_t eNB_index; // LG: needed in UE
} RrcDcchDataInd; } RrcDcchDataInd;
#endif /* PDCP_MESSAGES_TYPES_H_ */ #endif /* PDCP_MESSAGES_TYPES_H_ */
...@@ -42,6 +42,9 @@ ...@@ -42,6 +42,9 @@
#include <stdint.h> #include <stdint.h>
#endif #endif
#if defined(ENABLE_ITTI)
#include "itti_types.h"
#endif
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// GENERIC TYPES // GENERIC TYPES
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
...@@ -109,6 +112,7 @@ typedef sdu_size_t tbs_size_t; ...@@ -109,6 +112,7 @@ typedef sdu_size_t tbs_size_t;
typedef sdu_size_t tb_size_t; typedef sdu_size_t tb_size_t;
typedef unsigned int logical_chan_id_t; typedef unsigned int logical_chan_id_t;
typedef unsigned int num_tb_t; typedef unsigned int num_tb_t;
typedef uint8_t mac_enb_index_t;
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// RLC TYPES // RLC TYPES
...@@ -121,6 +125,8 @@ typedef uint16_t rlc_usn_t; ...@@ -121,6 +125,8 @@ typedef uint16_t rlc_usn_t;
typedef int32_t rlc_buffer_occupancy_t; typedef int32_t rlc_buffer_occupancy_t;
typedef signed int rlc_op_status_t; typedef signed int rlc_op_status_t;
#define SDU_CONFIRM_NO FALSE
#define SDU_CONFIRM_YES TRUE
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// PDCP TYPES // PDCP TYPES
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
...@@ -155,6 +161,20 @@ typedef enum ip_traffic_type_e { ...@@ -155,6 +161,20 @@ typedef enum ip_traffic_type_e {
typedef uint32_t mbms_session_id_t; typedef uint32_t mbms_session_id_t;
typedef uint16_t mbms_service_id_t; typedef uint16_t mbms_service_id_t;
typedef uint16_t rnti_t; typedef uint16_t rnti_t;
typedef uint8_t rrc_enb_index_t;
#if ! defined(NOT_A_RNTI)
#define NOT_A_RNTI (rnti_t)0
#endif
#if ! defined(M_RNTI)
#define M_RNTI (rnti_t)0xFFFD
#endif
#if ! defined(P_RNTI)
#define P_RNTI (rnti_t)0xFFFE
#endif
#if ! defined(SI_RNTI)
#define SI_RNTI (rnti_t)0xFFFF
#endif
typedef enum config_action_e { typedef enum config_action_e {
CONFIG_ACTION_NULL = 0, CONFIG_ACTION_NULL = 0,
CONFIG_ACTION_ADD = 1, CONFIG_ACTION_ADD = 1,
...@@ -176,16 +196,93 @@ typedef uint8_t ebi_t; // eps bearer id ...@@ -176,16 +196,93 @@ typedef uint8_t ebi_t; // eps bearer id
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// //
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// may be ITTI not enabled, but type instance is useful also for OTG,
#if !defined(instance_t)
typedef uint16_t instance_t;
#endif
typedef struct protocol_ctxt_s { typedef struct protocol_ctxt_s {
module_id_t enb_module_id; /*!< \brief Virtualized enb module identifier, Not used if eNB_flagP = 0. */ module_id_t module_id; /*!< \brief Virtualized module identifier */
module_id_t ue_module_id; /*!< \brief Virtualized ue module identifier */
frame_t frame; /*!< \brief LTE Frame number.*/
eNB_flag_t enb_flag; /*!< \brief Flag to indicate eNB (1) or UE (0) */ eNB_flag_t enb_flag; /*!< \brief Flag to indicate eNB (1) or UE (0) */
instance_t instance; /*!< \brief ITTI or OTG module identifier */
rnti_t rnti;
frame_t frame; /*!< \brief LTE frame number.*/
sub_frame_t subframe; /*!< \brief LTE sub frame number.*/
} protocol_ctxt_t; } protocol_ctxt_t;
#define PROTOCOL_CTXT_FMT "[FRAME %05u][%s][MOD %02u/%02u]" // warning time hardcoded
#define PROTOCOL_CTXT_TIME_MILLI_SECONDS(CtXt_h) ((CtXt_h)->frame*10+(CtXt_h)->subframe)
#define UE_MODULE_ID_TO_INSTANCE( mODULE_iD ) mODULE_iD + NB_eNB_INST
#define ENB_MODULE_ID_TO_INSTANCE( mODULE_iD ) mODULE_iD
#define UE_INSTANCE_TO_MODULE_ID( iNSTANCE ) iNSTANCE - NB_eNB_INST
#define ENB_INSTANCE_TO_MODULE_ID( iNSTANCE )iNSTANCE
#define MODULE_ID_TO_INSTANCE(mODULE_iD, iNSTANCE, eNB_fLAG) \
if(eNB_fLAG == ENB_FLAG_YES) \
iNSTANCE = ENB_MODULE_ID_TO_INSTANCE(mODULE_iD); \
else \
iNSTANCE = UE_MODULE_ID_TO_INSTANCE(mODULE_iD)
#define INSTANCE_TO_MODULE_ID(iNSTANCE, mODULE_iD, eNB_fLAG) \
if(eNB_fLAG == ENB_FLAG_YES) \
mODULE_iD = ENB_INSTANCE_TO_MODULE_ID(iNSTANCE); \
else \
mODULE_iD = UE_INSTANCE_TO_MODULE_ID(iNSTANCE)
#define PROTOCOL_CTXT_COMPUTE_MODULE_ID(CtXt_h) \
INSTANCE_TO_MODULE_ID( (CtXt_h)->instance , (CtXt_h)->module_id , (CtXt_h)->enb_flag )
#define PROTOCOL_CTXT_COMPUTE_INSTANCE(CtXt_h) \
MODULE_ID_TO_INSTANCE( (CtXt_h)->module_id , (CtXt_h)->instance , (CtXt_h)->enb_flag )
#define PROTOCOL_CTXT_SET_BY_MODULE_ID(Ctxt_Pp, mODULE_iD, eNB_fLAG, rNTI, fRAME, sUBfRAME) \
(Ctxt_Pp)->module_id = mODULE_iD; \
(Ctxt_Pp)->enb_flag = eNB_fLAG; \
(Ctxt_Pp)->rnti = rNTI; \
(Ctxt_Pp)->frame = fRAME; \
(Ctxt_Pp)->subframe = sUBfRAME; \
PROTOCOL_CTXT_COMPUTE_INSTANCE(Ctxt_Pp)
#define PROTOCOL_CTXT_SET_BY_INSTANCE(Ctxt_Pp, iNSTANCE, eNB_fLAG, rNTI, fRAME, sUBfRAME) \
(Ctxt_Pp)->instance = iNSTANCE; \
(Ctxt_Pp)->enb_flag = eNB_fLAG; \
(Ctxt_Pp)->rnti = rNTI; \
(Ctxt_Pp)->frame = fRAME; \
(Ctxt_Pp)->subframe = sUBfRAME; \
PROTOCOL_CTXT_COMPUTE_MODULE_ID(Ctxt_Pp)
#define PROTOCOL_CTXT_FMT "[FRAME %05u][%s][MOD %02u][RNTI %"PRIx16"]"
#define PROTOCOL_CTXT_ARGS(CTXT_Pp) \ #define PROTOCOL_CTXT_ARGS(CTXT_Pp) \
CTXT_Pp->frame, \ (CTXT_Pp)->frame, \
(CTXT_Pp->enb_flag == ENB_FLAG_YES) ? "eNB":" UE", \ ((CTXT_Pp)->enb_flag == ENB_FLAG_YES) ? "eNB":" UE", \
CTXT_Pp->enb_module_id, \ (CTXT_Pp)->module_id, \
CTXT_Pp->ue_module_id (CTXT_Pp)->rnti
#ifdef OAI_EMU
#define CHECK_CTXT_ARGS(CTXT_Pp) \
if ((CTXT_Pp)->enb_flag) {\
AssertFatal (((CTXT_Pp)->module_id >= oai_emulation.info.first_enb_local) && (oai_emulation.info.nb_enb_local > 0),\
"eNB module id is too low (%u/%d/%d)!\n",\
(CTXT_Pp)->module_id,\
oai_emulation.info.first_enb_local,\
oai_emulation.info.nb_enb_local);\
AssertFatal (((CTXT_Pp)->module_id < (oai_emulation.info.first_enb_local + oai_emulation.info.nb_enb_local)) && (oai_emulation.info.nb_enb_local > 0),\
"eNB module id is too high (%u/%d)!\n",\
(CTXT_Pp)->module_id,\
oai_emulation.info.first_enb_local + oai_emulation.info.nb_enb_local);\
} else {\
AssertFatal ((CTXT_Pp)->module_id < (oai_emulation.info.first_ue_local + oai_emulation.info.nb_ue_local),\
"UE module id is too high (%u/%d)!\n",\
(CTXT_Pp)->module_id,\
oai_emulation.info.first_ue_local + oai_emulation.info.nb_ue_local);\
AssertFatal ((CTXT_Pp)->module_id >= oai_emulation.info.first_ue_local,\
"UE module id is too low (%u/%d)!\n",\
(CTXT_Pp)->module_id,\
oai_emulation.info.first_ue_local);\
}
#else
#define CHECK_CTXT_ARGS(CTXT_Pp)
#endif
#endif #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment