Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
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
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
/*
* 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 m2ap_eNB_defs.h
* \brief m2ap struct definitions for eNB
* \author Javier Morgade <javier.morgade@ieee.org>
* \date 2019
* \version 0.1
*/
#include <stdint.h>
#include "queue.h"
#include "tree.h"
#include "sctp_eNB_defs.h"
#include "m2ap_default_values.h"
#include "m2ap_ids.h" //looks X2AP specific for HO
#include "m2ap_timers.h"
#ifndef M2AP_ENB_DEFS_H_
#define M2AP_ENB_DEFS_H_
#define M2AP_ENB_NAME_LENGTH_MAX (150)
typedef enum {
/* Disconnected state: initial state for any association. */
M2AP_ENB_STATE_DISCONNECTED = 0x0,
/* State waiting for m2 Setup response message if the target eNB accepts or
* M2 Setup failure if rejects the eNB.
*/
M2AP_ENB_STATE_WAITING = 0x1,
/* The eNB is successfully connected to another eNB. */
M2AP_ENB_STATE_CONNECTED = 0x2,
/* M2AP is ready, and the eNB is successfully connected to another eNB. */
M2AP_ENB_STATE_READY = 0x3,
M2AP_ENB_STATE_OVERLOAD = 0x4,
M2AP_ENB_STATE_RESETTING = 0x5,
/* Max number of states available */
M2AP_ENB_STATE_MAX,
} m2ap_eNB_state_t;
/* Served PLMN identity element */
/*struct plmn_identity_s {
uint16_t mcc;
uint16_t mnc;
uint8_t mnc_digit_length;
STAILQ_ENTRY(plmn_identity_s) next;
};*/
/* Served group id element */
/*struct served_group_id_s {
uint16_t enb_group_id;
STAILQ_ENTRY(served_group_id_s) next;
};*/
/* Served enn code for a particular eNB */
/*struct enb_code_s {
uint8_t enb_code;
STAILQ_ENTRY(enb_code_s) next;
};*/
struct m2ap_eNB_instance_s;
/* This structure describes association of a eNB to another eNB */
typedef struct m2ap_eNB_data_s {
/* eNB descriptors tree, ordered by sctp assoc id */
RB_ENTRY(m2ap_eNB_data_s) entry;
/* This is the optional name provided by the MME */
char *eNB_name;
/* target eNB ID */
uint32_t eNB_id;
/* Current eNB load information (if any). */
//m2ap_load_state_t overload_state;
/* Current eNB->eNB M2AP association state */
m2ap_eNB_state_t state;
/* Next usable stream for UE signalling */
int32_t nextstream;
/* Number of input/ouput streams */
uint16_t in_streams;
uint16_t out_streams;
/* Connexion id used between SCTP/M2AP */
uint16_t cnx_id;
/* SCTP association id */
int32_t assoc_id;
/* Nid cells */
uint32_t Nid_cell[MAX_NUM_CCs];
int num_cc;
/* Only meaningfull in virtual mode */
struct m2ap_eNB_instance_s *m2ap_eNB_instance;
} m2ap_eNB_data_t;
typedef struct m2ap_eNB_instance_s {
/* used in simulation to store multiple eNB instances*/
STAILQ_ENTRY(m2ap_eNB_instance_s) m2ap_eNB_entries;
/* Number of target eNBs requested by eNB (tree size) */
uint32_t m2_target_enb_nb;
/* Number of target eNBs for which association is pending */
uint32_t m2_target_enb_pending_nb;
/* Number of target eNB successfully associated to eNB */
uint32_t m2_target_enb_associated_nb;
/* Tree of M2AP eNB associations ordered by association ID */
RB_HEAD(m2ap_enb_map, m2ap_eNB_data_s) m2ap_enb_head;
/* Tree of UE ordered by eNB_ue_m2ap_id's */
// RB_HEAD(m2ap_ue_map, m2ap_eNB_ue_context_s) m2ap_ue_head;
/* For virtual mode, mod_id as defined in the rest of the L1/L2 stack */
instance_t instance;
/* Displayable name of eNB */
char *eNB_name;
/* Unique eNB_id to identify the eNB within EPC.
* In our case the eNB is a macro eNB so the id will be 20 bits long.
* For Home eNB id, this field should be 28 bits long.
*/
uint32_t eNB_id;
/* The type of the cell */
cell_type_t cell_type;
//uint16_t num_mbms_service_area_list;
//uint16_t mbms_service_area_list[8];
struct{
uint16_t mbsfn_sync_area;
uint16_t mbms_service_area_list[8];
uint16_t num_mbms_service_area_list;
}mbms_configuration_data_list[8];
uint8_t num_mbms_configuration_data_list;
/* Tracking area code */
uint16_t tac;
/* Mobile Country Code
* Mobile Network Code
*/
uint16_t mcc;
uint16_t mnc;
uint8_t mnc_digit_length;
/* CC params */
int16_t eutra_band[MAX_NUM_CCs];
uint32_t downlink_frequency[MAX_NUM_CCs];
int32_t uplink_frequency_offset[MAX_NUM_CCs];
uint32_t Nid_cell[MAX_NUM_CCs];
int16_t N_RB_DL[MAX_NUM_CCs];
frame_type_t frame_type[MAX_NUM_CCs];
uint32_t fdd_earfcn_DL[MAX_NUM_CCs];
uint32_t fdd_earfcn_UL[MAX_NUM_CCs];
int num_cc;
net_ip_address_t target_mce_m2_ip_address[M2AP_MAX_NB_ENB_IP_ADDRESS];
uint8_t nb_m2;
net_ip_address_t enb_m2_ip_address;
uint16_t sctp_in_streams;
uint16_t sctp_out_streams;
uint32_t enb_port_for_M2C;
int multi_sd;
m2ap_id_manager id_manager;
m2ap_timers_t timers;
} m2ap_eNB_instance_t;
typedef struct {
/* List of served eNBs
* Only used for virtual mode
*/
STAILQ_HEAD(m2ap_eNB_instances_head_s, m2ap_eNB_instance_s) m2ap_eNB_instances_head;
/* Nb of registered eNBs */
uint8_t nb_registered_eNBs;
/* Generate a unique connexion id used between M2AP and SCTP */
uint16_t global_cnx_id;
} m2ap_eNB_internal_data_t;
int m2ap_eNB_compare_assoc_id(struct m2ap_eNB_data_s *p1, struct m2ap_eNB_data_s *p2);
/* Generate the tree management functions */
struct m2ap_eNB_map;
struct m2ap_eNB_data_s;
RB_PROTOTYPE(m2ap_eNB_map, m2ap_eNB_data_s, entry, m2ap_eNB_compare_assoc_id);
#endif /* M2AP_ENB_DEFS_H_ */