Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
zzha zzha
OpenXG-RAN
Commits
f15b4464
Commit
f15b4464
authored
Mar 23, 2018
by
Cedric Roux
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/feature-agent-id' into develop_integration_2018_w12
parents
b79e6bfb
9c47c860
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
187 additions
and
109 deletions
+187
-109
openair2/ENB_APP/MESSAGES/V2/flexran.proto
openair2/ENB_APP/MESSAGES/V2/flexran.proto
+1
-1
openair2/ENB_APP/enb_config.c
openair2/ENB_APP/enb_config.c
+100
-13
openair2/ENB_APP/flexran_agent.c
openair2/ENB_APP/flexran_agent.c
+3
-10
openair2/ENB_APP/flexran_agent_common.c
openair2/ENB_APP/flexran_agent_common.c
+73
-78
openair2/ENB_APP/flexran_agent_defs.h
openair2/ENB_APP/flexran_agent_defs.h
+10
-7
No files found.
openair2/ENB_APP/MESSAGES/V2/flexran.proto
View file @
f15b4464
...
@@ -131,7 +131,7 @@ message flex_enb_config_request {
...
@@ -131,7 +131,7 @@ message flex_enb_config_request {
message
flex_enb_config_reply
{
message
flex_enb_config_reply
{
optional
flex_header
header
=
1
;
optional
flex_header
header
=
1
;
optional
uint
32
eNB_id
=
2
;
// Unique id to distinguish the eNB
optional
uint
64
eNB_id
=
2
;
// Unique id to distinguish the eNB
repeated
flex_cell_config
cell_config
=
3
;
repeated
flex_cell_config
cell_config
=
3
;
optional
uint32
device_spec
=
4
;
optional
uint32
device_spec
=
4
;
}
}
...
...
openair2/ENB_APP/enb_config.c
View file @
f15b4464
...
@@ -60,37 +60,124 @@
...
@@ -60,37 +60,124 @@
extern
uint16_t
sf_ahead
;
extern
uint16_t
sf_ahead
;
void
RCconfig_flexran
()
void
RCconfig_flexran
()
{
{
int
i
;
uint16_t
i
;
uint16_t
num_enbs
;
char
aprefix
[
MAX_OPTNAME_SIZE
*
2
+
8
];
/* this will possibly truncate the cell id (RRC assumes int32_t).
* Both Nid_cell and enb_id are signed in RRC case, but we use unsigned for
* the bitshifting to work properly */
int32_t
Nid_cell
=
0
;
uint16_t
Nid_cell_tr
=
0
;
uint32_t
enb_id
=
0
;
/*
* the only reason for all these variables is, that they are "hard-encoded"
* into the CCPARAMS_DESC macro and we need it for the Nid_cell variable ...
*/
char
*
frame_type
,
*
prefix_type
,
*
pbch_repetition
,
*
prach_high_speed
,
*
pusch_hoppingMode
,
*
pusch_enable64QAM
,
*
pusch_groupHoppingEnabled
,
*
pusch_sequenceHoppingEnabled
,
*
phich_duration
,
*
phich_resource
,
*
srs_enable
,
*
srs_ackNackST
,
*
srs_MaxUpPts
,
*
pusch_alpha
,
*
pucch_deltaF_Format1
,
*
pucch_deltaF_Format1b
,
*
pucch_deltaF_Format2
,
*
pucch_deltaF_Format2a
,
*
pucch_deltaF_Format2b
,
*
rach_preamblesGroupAConfig
,
*
rach_messagePowerOffsetGroupB
,
*
pcch_nB
;
long
long
int
downlink_frequency
;
int32_t
tdd_config
,
tdd_config_s
,
eutra_band
,
uplink_frequency_offset
,
Nid_cell_mbsfn
,
N_RB_DL
,
nb_antenna_ports
,
prach_root
,
prach_config_index
,
prach_zero_correlation
,
prach_freq_offset
,
pucch_delta_shift
,
pucch_nRB_CQI
,
pucch_nCS_AN
,
pucch_n1_AN
,
pdsch_referenceSignalPower
,
pdsch_p_b
,
pusch_n_SB
,
pusch_hoppingOffset
,
pusch_groupAssignment
,
pusch_nDMRS1
,
srs_BandwidthConfig
,
srs_SubframeConfig
,
pusch_p0_Nominal
,
pucch_p0_Nominal
,
msg3_delta_Preamble
,
rach_numberOfRA_Preambles
,
rach_sizeOfRA_PreamblesGroupA
,
rach_messageSizeGroupA
,
rach_powerRampingStep
,
rach_preambleInitialReceivedTargetPower
,
rach_preambleTransMax
,
rach_raResponseWindowSize
,
rach_macContentionResolutionTimer
,
rach_maxHARQ_Msg3Tx
,
pcch_defaultPagingCycle
,
bcch_modificationPeriodCoeff
,
ue_TimersAndConstants_t300
,
ue_TimersAndConstants_t301
,
ue_TimersAndConstants_t310
,
ue_TimersAndConstants_t311
,
ue_TimersAndConstants_n310
,
ue_TimersAndConstants_n311
,
ue_TransmissionMode
;
/* get number of eNBs */
paramdef_t
ENBSParams
[]
=
ENBSPARAMS_DESC
;
config_get
(
ENBSParams
,
sizeof
(
ENBSParams
)
/
sizeof
(
paramdef_t
),
NULL
);
num_enbs
=
ENBSParams
[
ENB_ACTIVE_ENBS_IDX
].
numelt
;
/* for eNB ID */
paramdef_t
ENBParams
[]
=
ENBPARAMS_DESC
;
paramlist_def_t
ENBParamList
=
{
ENB_CONFIG_STRING_ENB_LIST
,
NULL
,
0
};
/* for Nid_cell */
checkedparam_t
config_check_CCparams
[]
=
CCPARAMS_CHECK
;
paramdef_t
CCsParams
[]
=
CCPARAMS_DESC
;
paramlist_def_t
CCsParamList
=
{
ENB_CONFIG_STRING_COMPONENT_CARRIERS
,
NULL
,
0
};
/* map parameter checking array instances to parameter definition array instances */
for
(
int
I
=
0
;
I
<
(
sizeof
(
CCsParams
)
/
sizeof
(
paramdef_t
));
I
++
)
{
CCsParams
[
I
].
chkPptr
=
&
(
config_check_CCparams
[
I
]);
}
paramdef_t
flexranParams
[]
=
FLEXRANPARAMS_DESC
;
paramdef_t
flexranParams
[]
=
FLEXRANPARAMS_DESC
;
config_get
(
flexranParams
,
sizeof
(
flexranParams
)
/
sizeof
(
paramdef_t
),
CONFIG_STRING_NETWORK_CONTROLLER_CONFIG
);
config_get
(
flexranParams
,
sizeof
(
flexranParams
)
/
sizeof
(
paramdef_t
),
CONFIG_STRING_NETWORK_CONTROLLER_CONFIG
);
if
(
!
RC
.
flexran
)
{
if
(
!
RC
.
flexran
)
{
RC
.
flexran
=
calloc
(
RC
.
nb_L1_inst
,
sizeof
(
flexran_agent_info_t
*
));
RC
.
flexran
=
calloc
(
num_enbs
,
sizeof
(
flexran_agent_info_t
*
));
AssertFatal
(
RC
.
flexran
!=
NULL
,
AssertFatal
(
RC
.
flexran
,
"can't ALLOCATE %zu Bytes for %d flexran agent info with size %zu
\n
"
,
"can't ALLOCATE %zu Bytes for %d flexran agent info with size %zu
\n
"
,
RC
.
nb_L1_inst
*
sizeof
(
flexran_agent_info_t
*
),
num_enbs
*
sizeof
(
flexran_agent_info_t
*
),
RC
.
nb_L1_inst
,
sizeof
(
flexran_agent_info_t
*
));
num_enbs
,
sizeof
(
flexran_agent_info_t
*
));
}
}
/* For all agent instance, fill in the same controller configuration. */
for
(
i
=
0
;
i
<
num_enbs
;
i
++
)
{
for
(
i
=
0
;
i
<
RC
.
nb_L1_inst
;
i
++
)
{
RC
.
flexran
[
i
]
=
calloc
(
1
,
sizeof
(
flexran_agent_info_t
));
RC
.
flexran
[
i
]
=
calloc
(
1
,
sizeof
(
flexran_agent_info_t
));
AssertFatal
(
RC
.
flexran
[
i
]
!=
NULL
,
AssertFatal
(
RC
.
flexran
[
i
],
"can't ALLOCATE %zu Bytes for flexran agent info (iteration %d/%d)
\n
"
,
"can't ALLOCATE %zu Bytes for flexran agent info (iteration %d/%d)
\n
"
,
sizeof
(
flexran_agent_info_t
),
i
+
1
,
RC
.
nb_L1_inst
);
sizeof
(
flexran_agent_info_t
),
i
+
1
,
num_enbs
);
/* if config says "yes", enable Agent, in all other cases it's like "no" */
/* if config says "yes", enable Agent, in all other cases it's like "no" */
RC
.
flexran
[
i
]
->
enabled
=
strcmp
(
*
(
flexranParams
[
FLEXRAN_ENABLED
].
strptr
),
"yes"
)
==
0
;
RC
.
flexran
[
i
]
->
enabled
=
strcasecmp
(
*
(
flexranParams
[
FLEXRAN_ENABLED
].
strptr
),
"yes"
)
==
0
;
/* if not enabled, simply skip the rest, it is not needed anyway */
if
(
!
RC
.
flexran
[
i
]
->
enabled
)
continue
;
RC
.
flexran
[
i
]
->
interface_name
=
strdup
(
*
(
flexranParams
[
FLEXRAN_INTERFACE_NAME_IDX
].
strptr
));
RC
.
flexran
[
i
]
->
interface_name
=
strdup
(
*
(
flexranParams
[
FLEXRAN_INTERFACE_NAME_IDX
].
strptr
));
//inet_ntop(AF_INET, &(enb_properties->properties[mod_id]->flexran_agent_ipv4_address), in_ip, INET_ADDRSTRLEN);
//inet_ntop(AF_INET, &(enb_properties->properties[mod_id]->flexran_agent_ipv4_address), in_ip, INET_ADDRSTRLEN);
RC
.
flexran
[
i
]
->
remote_ipv4_addr
=
strdup
(
*
(
flexranParams
[
FLEXRAN_IPV4_ADDRESS_IDX
].
strptr
));
RC
.
flexran
[
i
]
->
remote_ipv4_addr
=
strdup
(
*
(
flexranParams
[
FLEXRAN_IPV4_ADDRESS_IDX
].
strptr
));
RC
.
flexran
[
i
]
->
remote_port
=
*
(
flexranParams
[
FLEXRAN_PORT_IDX
].
uptr
);
RC
.
flexran
[
i
]
->
remote_port
=
*
(
flexranParams
[
FLEXRAN_PORT_IDX
].
uptr
);
RC
.
flexran
[
i
]
->
cache_name
=
strdup
(
*
(
flexranParams
[
FLEXRAN_CACHE_IDX
].
strptr
));
RC
.
flexran
[
i
]
->
cache_name
=
strdup
(
*
(
flexranParams
[
FLEXRAN_CACHE_IDX
].
strptr
));
RC
.
flexran
[
i
]
->
node_ctrl_state
=
strcmp
(
*
(
flexranParams
[
FLEXRAN_AWAIT_RECONF_IDX
].
strptr
),
"yes"
)
==
0
?
ENB_WAIT
:
ENB_NORMAL_OPERATION
;
RC
.
flexran
[
i
]
->
node_ctrl_state
=
strcasecmp
(
*
(
flexranParams
[
FLEXRAN_AWAIT_RECONF_IDX
].
strptr
),
"yes"
)
==
0
?
ENB_WAIT
:
ENB_NORMAL_OPERATION
;
RC
.
flexran
[
i
]
->
enb_id
=
i
;
config_getlist
(
&
ENBParamList
,
ENBParams
,
sizeof
(
ENBParams
)
/
sizeof
(
paramdef_t
),
NULL
);
/* eNB ID from configuration, as read in by RCconfig_RRC() */
if
(
!
ENBParamList
.
paramarray
[
i
][
ENB_ENB_ID_IDX
].
uptr
)
{
// Calculate a default eNB ID
# if defined(ENABLE_USE_MME)
enb_id
=
i
+
(
s1ap_generate_eNB_id
()
&
0xFFFF8
);
# else
enb_id
=
i
;
# endif
}
else
{
enb_id
=
*
(
ENBParamList
.
paramarray
[
i
][
ENB_ENB_ID_IDX
].
uptr
);
}
/* cell ID */
sprintf
(
aprefix
,
"%s.[%i]"
,
ENB_CONFIG_STRING_ENB_LIST
,
i
);
config_getlist
(
&
CCsParamList
,
NULL
,
0
,
aprefix
);
if
(
CCsParamList
.
numelt
>
0
)
{
sprintf
(
aprefix
,
"%s.[%i].%s.[%i]"
,
ENB_CONFIG_STRING_ENB_LIST
,
i
,
ENB_CONFIG_STRING_COMPONENT_CARRIERS
,
0
);
config_get
(
CCsParams
,
sizeof
(
CCsParams
)
/
sizeof
(
paramdef_t
),
aprefix
);
Nid_cell_tr
=
(
uint16_t
)
Nid_cell
;
}
RC
.
flexran
[
i
]
->
mod_id
=
i
;
RC
.
flexran
[
i
]
->
agent_id
=
(((
uint64_t
)
i
)
<<
48
)
|
(((
uint64_t
)
enb_id
)
<<
16
)
|
((
uint64_t
)
Nid_cell_tr
);
/* assume for the moment the monolithic case, i.e. agent can provide
* information for all layers */
RC
.
flexran
[
i
]
->
capability_mask
=
FLEXRAN_CAP_LOPHY
|
FLEXRAN_CAP_HIPHY
|
FLEXRAN_CAP_LOMAC
|
FLEXRAN_CAP_HIMAC
|
FLEXRAN_CAP_RLC
|
FLEXRAN_CAP_PDCP
|
FLEXRAN_CAP_SDAP
|
FLEXRAN_CAP_RRC
;
}
}
}
}
...
...
openair2/ENB_APP/flexran_agent.c
View file @
f15b4464
...
@@ -114,12 +114,12 @@ void *receive_thread(void *args) {
...
@@ -114,12 +114,12 @@ void *receive_thread(void *args) {
while
(
1
)
{
while
(
1
)
{
while
(
flexran_agent_msg_recv
(
d
->
enb
_id
,
FLEXRAN_AGENT_DEFAULT
,
&
data
,
&
size
,
&
priority
)
==
0
)
{
while
(
flexran_agent_msg_recv
(
d
->
mod
_id
,
FLEXRAN_AGENT_DEFAULT
,
&
data
,
&
size
,
&
priority
)
==
0
)
{
LOG_D
(
FLEXRAN_AGENT
,
"received message with size %d
\n
"
,
size
);
LOG_D
(
FLEXRAN_AGENT
,
"received message with size %d
\n
"
,
size
);
// Invoke the message handler
// Invoke the message handler
msg
=
flexran_agent_handle_message
(
d
->
enb
_id
,
data
,
size
);
msg
=
flexran_agent_handle_message
(
d
->
mod
_id
,
data
,
size
);
free
(
data
);
free
(
data
);
...
@@ -127,7 +127,7 @@ void *receive_thread(void *args) {
...
@@ -127,7 +127,7 @@ void *receive_thread(void *args) {
if
(
msg
!=
NULL
){
if
(
msg
!=
NULL
){
data
=
flexran_agent_pack_message
(
msg
,
&
size
);
data
=
flexran_agent_pack_message
(
msg
,
&
size
);
if
(
flexran_agent_msg_send
(
d
->
enb
_id
,
FLEXRAN_AGENT_DEFAULT
,
data
,
size
,
priority
))
{
if
(
flexran_agent_msg_send
(
d
->
mod
_id
,
FLEXRAN_AGENT_DEFAULT
,
data
,
size
,
priority
))
{
err_code
=
PROTOCOL__FLEXRAN_ERR__MSG_ENQUEUING
;
err_code
=
PROTOCOL__FLEXRAN_ERR__MSG_ENQUEUING
;
goto
error
;
goto
error
;
}
}
...
@@ -191,13 +191,6 @@ int flexran_agent_start(mid_t mod_id)
...
@@ -191,13 +191,6 @@ int flexran_agent_start(mid_t mod_id)
return
100
;
return
100
;
}
}
flexran
->
enb_id
=
mod_id
;
/* assume for the moment the monolithic case, i.e. agent can provide
* information for all layers */
flexran
->
capability_mask
=
FLEXRAN_CAP_LOL1
|
FLEXRAN_CAP_HIL1
|
FLEXRAN_CAP_LOL2
|
FLEXRAN_CAP_HIL2
|
FLEXRAN_CAP_PDCP
|
FLEXRAN_CAP_RRC
;
/*
/*
* Initialize the channel container
* Initialize the channel container
*/
*/
...
...
openair2/ENB_APP/flexran_agent_common.c
View file @
f15b4464
...
@@ -804,7 +804,6 @@ int flexran_agent_enb_config_reply(mid_t mod_id, const void *params, Protocol__F
...
@@ -804,7 +804,6 @@ int flexran_agent_enb_config_reply(mid_t mod_id, const void *params, Protocol__F
xid
=
(
enb_config_req_msg
->
header
)
->
xid
;
xid
=
(
enb_config_req_msg
->
header
)
->
xid
;
int
i
,
j
;
int
i
,
j
;
int
enb_id
=
mod_id
;
Protocol__FlexEnbConfigReply
*
enb_config_reply_msg
;
Protocol__FlexEnbConfigReply
*
enb_config_reply_msg
;
enb_config_reply_msg
=
malloc
(
sizeof
(
Protocol__FlexEnbConfigReply
));
enb_config_reply_msg
=
malloc
(
sizeof
(
Protocol__FlexEnbConfigReply
));
...
@@ -817,8 +816,8 @@ int flexran_agent_enb_config_reply(mid_t mod_id, const void *params, Protocol__F
...
@@ -817,8 +816,8 @@ int flexran_agent_enb_config_reply(mid_t mod_id, const void *params, Protocol__F
enb_config_reply_msg
->
header
=
header
;
enb_config_reply_msg
->
header
=
header
;
enb_config_reply_msg
->
enb_id
=
mod
_id
;
enb_config_reply_msg
->
enb_id
=
RC
.
flexran
[
mod_id
]
->
agent
_id
;
enb_config_reply_msg
->
has_enb_id
=
1
;
enb_config_reply_msg
->
n_cell_config
=
MAX_NUM_CCs
;
enb_config_reply_msg
->
n_cell_config
=
MAX_NUM_CCs
;
...
@@ -832,61 +831,60 @@ int flexran_agent_enb_config_reply(mid_t mod_id, const void *params, Protocol__F
...
@@ -832,61 +831,60 @@ int flexran_agent_enb_config_reply(mid_t mod_id, const void *params, Protocol__F
protocol__flex_cell_config__init
(
cell_conf
[
i
]);
protocol__flex_cell_config__init
(
cell_conf
[
i
]);
cell_conf
[
i
]
->
phy_cell_id
=
1
;
cell_conf
[
i
]
->
phy_cell_id
=
1
;
cell_conf
[
i
]
->
has_phy_cell_id
=
flexran_get_cell_id
(
enb
_id
,
i
);
cell_conf
[
i
]
->
has_phy_cell_id
=
flexran_get_cell_id
(
mod
_id
,
i
);
cell_conf
[
i
]
->
cell_id
=
i
;
cell_conf
[
i
]
->
cell_id
=
i
;
cell_conf
[
i
]
->
has_cell_id
=
1
;
cell_conf
[
i
]
->
has_cell_id
=
1
;
cell_conf
[
i
]
->
pusch_hopping_offset
=
flexran_get_hopping_offset
(
enb
_id
,
i
);
cell_conf
[
i
]
->
pusch_hopping_offset
=
flexran_get_hopping_offset
(
mod
_id
,
i
);
cell_conf
[
i
]
->
has_pusch_hopping_offset
=
1
;
cell_conf
[
i
]
->
has_pusch_hopping_offset
=
1
;
if
(
flexran_get_hopping_mode
(
enb
_id
,
i
)
==
0
)
{
if
(
flexran_get_hopping_mode
(
mod
_id
,
i
)
==
0
)
{
cell_conf
[
i
]
->
hopping_mode
=
PROTOCOL__FLEX_HOPPING_MODE__FLHM_INTER
;
cell_conf
[
i
]
->
hopping_mode
=
PROTOCOL__FLEX_HOPPING_MODE__FLHM_INTER
;
}
else
if
(
flexran_get_hopping_mode
(
enb
_id
,
i
)
==
1
)
{
}
else
if
(
flexran_get_hopping_mode
(
mod
_id
,
i
)
==
1
)
{
cell_conf
[
i
]
->
hopping_mode
=
PROTOCOL__FLEX_HOPPING_MODE__FLHM_INTERINTRA
;
cell_conf
[
i
]
->
hopping_mode
=
PROTOCOL__FLEX_HOPPING_MODE__FLHM_INTERINTRA
;
}
}
cell_conf
[
i
]
->
has_hopping_mode
=
1
;
cell_conf
[
i
]
->
has_hopping_mode
=
1
;
cell_conf
[
i
]
->
n_sb
=
flexran_get_n_SB
(
enb
_id
,
i
);
cell_conf
[
i
]
->
n_sb
=
flexran_get_n_SB
(
mod
_id
,
i
);
cell_conf
[
i
]
->
has_n_sb
=
1
;
cell_conf
[
i
]
->
has_n_sb
=
1
;
if
(
flexran_get_phich_resource
(
enb
_id
,
i
)
==
0
)
{
if
(
flexran_get_phich_resource
(
mod
_id
,
i
)
==
0
)
{
cell_conf
[
i
]
->
phich_resource
=
PROTOCOL__FLEX_PHICH_RESOURCE__FLPR_ONE_SIXTH
;
//0
cell_conf
[
i
]
->
phich_resource
=
PROTOCOL__FLEX_PHICH_RESOURCE__FLPR_ONE_SIXTH
;
//0
}
else
if
(
flexran_get_phich_resource
(
enb
_id
,
i
)
==
1
)
{
}
else
if
(
flexran_get_phich_resource
(
mod
_id
,
i
)
==
1
)
{
cell_conf
[
i
]
->
phich_resource
=
PROTOCOL__FLEX_PHICH_RESOURCE__FLPR_HALF
;
//1
cell_conf
[
i
]
->
phich_resource
=
PROTOCOL__FLEX_PHICH_RESOURCE__FLPR_HALF
;
//1
}
else
if
(
flexran_get_phich_resource
(
enb
_id
,
i
)
==
2
)
{
}
else
if
(
flexran_get_phich_resource
(
mod
_id
,
i
)
==
2
)
{
cell_conf
[
i
]
->
phich_resource
=
PROTOCOL__FLEX_PHICH_RESOURCE__FLPR_ONE
;
// 2
cell_conf
[
i
]
->
phich_resource
=
PROTOCOL__FLEX_PHICH_RESOURCE__FLPR_ONE
;
// 2
}
else
if
(
flexran_get_phich_resource
(
enb
_id
,
i
)
==
3
)
{
}
else
if
(
flexran_get_phich_resource
(
mod
_id
,
i
)
==
3
)
{
cell_conf
[
i
]
->
phich_resource
=
PROTOCOL__FLEX_PHICH_RESOURCE__FLPR_TWO
;
//3
cell_conf
[
i
]
->
phich_resource
=
PROTOCOL__FLEX_PHICH_RESOURCE__FLPR_TWO
;
//3
}
}
cell_conf
[
i
]
->
has_phich_resource
=
1
;
cell_conf
[
i
]
->
has_phich_resource
=
1
;
if
(
flexran_get_phich_duration
(
enb
_id
,
i
)
==
0
)
{
if
(
flexran_get_phich_duration
(
mod
_id
,
i
)
==
0
)
{
cell_conf
[
i
]
->
phich_duration
=
PROTOCOL__FLEX_PHICH_DURATION__FLPD_NORMAL
;
cell_conf
[
i
]
->
phich_duration
=
PROTOCOL__FLEX_PHICH_DURATION__FLPD_NORMAL
;
}
else
if
(
flexran_get_phich_duration
(
enb
_id
,
i
)
==
1
)
{
}
else
if
(
flexran_get_phich_duration
(
mod
_id
,
i
)
==
1
)
{
cell_conf
[
i
]
->
phich_duration
=
PROTOCOL__FLEX_PHICH_DURATION__FLPD_EXTENDED
;
cell_conf
[
i
]
->
phich_duration
=
PROTOCOL__FLEX_PHICH_DURATION__FLPD_EXTENDED
;
}
}
cell_conf
[
i
]
->
has_phich_duration
=
1
;
cell_conf
[
i
]
->
has_phich_duration
=
1
;
//TODO: Fill in with actual value, See TS 36.211, section 6.9
cell_conf
[
i
]
->
init_nr_pdcch_ofdm_sym
=
flexran_get_num_pdcch_symb
(
mod_id
,
i
);
cell_conf
[
i
]
->
init_nr_pdcch_ofdm_sym
=
flexran_get_num_pdcch_symb
(
enb_id
,
i
);
cell_conf
[
i
]
->
has_init_nr_pdcch_ofdm_sym
=
1
;
cell_conf
[
i
]
->
has_init_nr_pdcch_ofdm_sym
=
0
;
Protocol__FlexSiConfig
*
si_config
;
//TODO: Fill in with actual value
si_config
=
malloc
(
sizeof
(
Protocol__FlexSiConfig
));
/* Protocol__FlexSiConfig *si_config; */
if
(
si_config
==
NULL
)
/* si_config = malloc(sizeof(Protocol__FlexSiConfig)); */
goto
error
;
/* if(si_config == NULL) */
protocol__flex_si_config__init
(
si_config
);
/* goto error; */
/* protocol__flex_si_config__init(si_config); */
si_config
->
sfn
=
flexran_get_current_system_frame_num
(
mod_id
);
/* //TODO: Fill in with actual value, Frame number to apply the SI configuration */
si_config
->
has_sfn
=
1
;
/* si_config->sfn = 1; */
/* si_config->has_sfn = 1; */
si_config
->
sib1_length
=
flexran_get_sib1_length
(
mod_id
,
i
);
/* //TODO: Fill in with actual value, the length of SIB1 in bytes */
si_config
->
has_sib1_length
=
1
;
/* si_config->sib1_length = get_sib1_length(enb_id,i); */
/* si_config->has_sib1_length = 1; */
si_config
->
si_window_length
=
(
uint32_t
)
flexran_get_si_window_length
(
mod_id
,
i
);
/* //TODO: Fill in with actual value, Scheduling window for all SIs in SF */
si_config
->
has_si_window_length
=
1
;
/* si_config->si_window_length = (uint32_t) get_si_window_length(enb_id,i); */
/* si_config->has_si_window_length = 1; */
si_config
->
n_si_message
=
0
;
/* //TODO: Fill in with actual value, the number of SI messages */
/* si_config->n_si_message=1; */
/* Protocol__FlexSiMessage **si_message; */
/* Protocol__FlexSiMessage **si_message; */
/* si_message = malloc(sizeof(Protocol__FlexSiMessage *) * si_config->n_si_message); */
/* si_message = malloc(sizeof(Protocol__FlexSiMessage *) * si_config->n_si_message); */
/* if(si_message == NULL) */
/* if(si_message == NULL) */
...
@@ -906,44 +904,42 @@ int flexran_agent_enb_config_reply(mid_t mod_id, const void *params, Protocol__F
...
@@ -906,44 +904,42 @@ int flexran_agent_enb_config_reply(mid_t mod_id, const void *params, Protocol__F
/* if(si_config->n_si_message > 0){ */
/* if(si_config->n_si_message > 0){ */
/* si_config->si_message = si_message; */
/* si_config->si_message = si_message; */
/* } */
/* } */
/* cell_conf[i]->si_config = si_config; */
cell_conf
[
i
]
->
dl_bandwidth
=
flexran_get_N_RB_DL
(
enb_id
,
i
);
cell_conf
[
i
]
->
si_config
=
si_config
;
cell_conf
[
i
]
->
dl_bandwidth
=
flexran_get_N_RB_DL
(
mod_id
,
i
);
cell_conf
[
i
]
->
has_dl_bandwidth
=
1
;
cell_conf
[
i
]
->
has_dl_bandwidth
=
1
;
cell_conf
[
i
]
->
ul_bandwidth
=
flexran_get_N_RB_UL
(
enb
_id
,
i
);
cell_conf
[
i
]
->
ul_bandwidth
=
flexran_get_N_RB_UL
(
mod
_id
,
i
);
cell_conf
[
i
]
->
has_ul_bandwidth
=
1
;
cell_conf
[
i
]
->
has_ul_bandwidth
=
1
;
if
(
flexran_get_ul_cyclic_prefix_length
(
enb
_id
,
i
)
==
0
)
{
if
(
flexran_get_ul_cyclic_prefix_length
(
mod
_id
,
i
)
==
0
)
{
cell_conf
[
i
]
->
ul_cyclic_prefix_length
=
PROTOCOL__FLEX_UL_CYCLIC_PREFIX_LENGTH__FLUCPL_NORMAL
;
cell_conf
[
i
]
->
ul_cyclic_prefix_length
=
PROTOCOL__FLEX_UL_CYCLIC_PREFIX_LENGTH__FLUCPL_NORMAL
;
}
else
if
(
flexran_get_ul_cyclic_prefix_length
(
enb
_id
,
i
)
==
1
)
{
}
else
if
(
flexran_get_ul_cyclic_prefix_length
(
mod
_id
,
i
)
==
1
)
{
cell_conf
[
i
]
->
ul_cyclic_prefix_length
=
PROTOCOL__FLEX_UL_CYCLIC_PREFIX_LENGTH__FLUCPL_EXTENDED
;
cell_conf
[
i
]
->
ul_cyclic_prefix_length
=
PROTOCOL__FLEX_UL_CYCLIC_PREFIX_LENGTH__FLUCPL_EXTENDED
;
}
}
cell_conf
[
i
]
->
has_ul_cyclic_prefix_length
=
1
;
cell_conf
[
i
]
->
has_ul_cyclic_prefix_length
=
1
;
if
(
flexran_get_ul_cyclic_prefix_length
(
enb
_id
,
i
)
==
0
)
{
if
(
flexran_get_ul_cyclic_prefix_length
(
mod
_id
,
i
)
==
0
)
{
cell_conf
[
i
]
->
ul_cyclic_prefix_length
=
PROTOCOL__FLEX_DL_CYCLIC_PREFIX_LENGTH__FLDCPL_NORMAL
;
cell_conf
[
i
]
->
ul_cyclic_prefix_length
=
PROTOCOL__FLEX_DL_CYCLIC_PREFIX_LENGTH__FLDCPL_NORMAL
;
}
else
if
(
flexran_get_ul_cyclic_prefix_length
(
enb
_id
,
i
)
==
1
)
{
}
else
if
(
flexran_get_ul_cyclic_prefix_length
(
mod
_id
,
i
)
==
1
)
{
cell_conf
[
i
]
->
ul_cyclic_prefix_length
=
PROTOCOL__FLEX_DL_CYCLIC_PREFIX_LENGTH__FLDCPL_EXTENDED
;
cell_conf
[
i
]
->
ul_cyclic_prefix_length
=
PROTOCOL__FLEX_DL_CYCLIC_PREFIX_LENGTH__FLDCPL_EXTENDED
;
}
}
cell_conf
[
i
]
->
has_dl_cyclic_prefix_length
=
1
;
cell_conf
[
i
]
->
has_dl_cyclic_prefix_length
=
1
;
//TODO: Fill in with actual value, number of cell specific antenna ports. Currently single port support
cell_conf
[
i
]
->
antenna_ports_count
=
flexran_get_antenna_ports
(
mod_id
,
i
);
cell_conf
[
i
]
->
antenna_ports_count
=
1
;
cell_conf
[
i
]
->
has_antenna_ports_count
=
1
;
cell_conf
[
i
]
->
has_antenna_ports_count
=
1
;
if
(
flexran_get_duplex_mode
(
enb
_id
,
i
)
==
1
)
{
if
(
flexran_get_duplex_mode
(
mod
_id
,
i
)
==
1
)
{
cell_conf
[
i
]
->
duplex_mode
=
PROTOCOL__FLEX_DUPLEX_MODE__FLDM_FDD
;
cell_conf
[
i
]
->
duplex_mode
=
PROTOCOL__FLEX_DUPLEX_MODE__FLDM_FDD
;
}
else
if
(
flexran_get_duplex_mode
(
enb
_id
,
i
)
==
0
)
{
}
else
if
(
flexran_get_duplex_mode
(
mod
_id
,
i
)
==
0
)
{
cell_conf
[
i
]
->
duplex_mode
=
PROTOCOL__FLEX_DUPLEX_MODE__FLDM_TDD
;
cell_conf
[
i
]
->
duplex_mode
=
PROTOCOL__FLEX_DUPLEX_MODE__FLDM_TDD
;
}
}
cell_conf
[
i
]
->
has_duplex_mode
=
1
;
cell_conf
[
i
]
->
has_duplex_mode
=
1
;
//TODO: Fill in with actual value, DL/UL subframe assignment. TDD only
cell_conf
[
i
]
->
subframe_assignment
=
flexran_get_subframe_assignment
(
mod_id
,
i
);
cell_conf
[
i
]
->
subframe_assignment
=
flexran_get_subframe_assignment
(
enb_id
,
i
);
cell_conf
[
i
]
->
has_subframe_assignment
=
1
;
cell_conf
[
i
]
->
has_subframe_assignment
=
0
;
cell_conf
[
i
]
->
special_subframe_patterns
=
flexran_get_special_subframe_assignment
(
mod_id
,
i
);
//TODO: Fill in with actual value, TDD only. See TS 36.211, table 4.2.1
cell_conf
[
i
]
->
has_special_subframe_patterns
=
1
;
cell_conf
[
i
]
->
special_subframe_patterns
=
flexran_get_special_subframe_assignment
(
enb_id
,
i
);
cell_conf
[
i
]
->
has_special_subframe_patterns
=
0
;
//TODO: Fill in with actual value, The MBSFN radio frame period
//TODO: Fill in with actual value, The MBSFN radio frame period
cell_conf
[
i
]
->
n_mbsfn_subframe_config_rfperiod
=
0
;
cell_conf
[
i
]
->
n_mbsfn_subframe_config_rfperiod
=
0
;
uint32_t
*
elem_rfperiod
;
uint32_t
*
elem_rfperiod
;
...
@@ -977,58 +973,57 @@ int flexran_agent_enb_config_reply(mid_t mod_id, const void *params, Protocol__F
...
@@ -977,58 +973,57 @@ int flexran_agent_enb_config_reply(mid_t mod_id, const void *params, Protocol__F
}
}
cell_conf
[
i
]
->
mbsfn_subframe_config_sfalloc
=
elem_sfalloc
;
cell_conf
[
i
]
->
mbsfn_subframe_config_sfalloc
=
elem_sfalloc
;
cell_conf
[
i
]
->
prach_config_index
=
flexran_get_prach_ConfigIndex
(
enb
_id
,
i
);
cell_conf
[
i
]
->
prach_config_index
=
flexran_get_prach_ConfigIndex
(
mod
_id
,
i
);
cell_conf
[
i
]
->
has_prach_config_index
=
1
;
cell_conf
[
i
]
->
has_prach_config_index
=
1
;
cell_conf
[
i
]
->
prach_freq_offset
=
flexran_get_prach_FreqOffset
(
enb
_id
,
i
);
cell_conf
[
i
]
->
prach_freq_offset
=
flexran_get_prach_FreqOffset
(
mod
_id
,
i
);
cell_conf
[
i
]
->
has_prach_freq_offset
=
1
;
cell_conf
[
i
]
->
has_prach_freq_offset
=
1
;
cell_conf
[
i
]
->
ra_response_window_size
=
flexran_get_ra_ResponseWindowSize
(
enb
_id
,
i
);
cell_conf
[
i
]
->
ra_response_window_size
=
flexran_get_ra_ResponseWindowSize
(
mod
_id
,
i
);
cell_conf
[
i
]
->
has_ra_response_window_size
=
1
;
cell_conf
[
i
]
->
has_ra_response_window_size
=
1
;
cell_conf
[
i
]
->
mac_contention_resolution_timer
=
flexran_get_mac_ContentionResolutionTimer
(
enb
_id
,
i
);
cell_conf
[
i
]
->
mac_contention_resolution_timer
=
flexran_get_mac_ContentionResolutionTimer
(
mod
_id
,
i
);
cell_conf
[
i
]
->
has_mac_contention_resolution_timer
=
1
;
cell_conf
[
i
]
->
has_mac_contention_resolution_timer
=
1
;
cell_conf
[
i
]
->
max_harq_msg3tx
=
flexran_get_maxHARQ_Msg3Tx
(
enb
_id
,
i
);
cell_conf
[
i
]
->
max_harq_msg3tx
=
flexran_get_maxHARQ_Msg3Tx
(
mod
_id
,
i
);
cell_conf
[
i
]
->
has_max_harq_msg3tx
=
1
;
cell_conf
[
i
]
->
has_max_harq_msg3tx
=
1
;
cell_conf
[
i
]
->
n1pucch_an
=
flexran_get_n1pucch_an
(
enb
_id
,
i
);
cell_conf
[
i
]
->
n1pucch_an
=
flexran_get_n1pucch_an
(
mod
_id
,
i
);
cell_conf
[
i
]
->
has_n1pucch_an
=
1
;
cell_conf
[
i
]
->
has_n1pucch_an
=
1
;
cell_conf
[
i
]
->
deltapucch_shift
=
flexran_get_deltaPUCCH_Shift
(
enb
_id
,
i
);
cell_conf
[
i
]
->
deltapucch_shift
=
flexran_get_deltaPUCCH_Shift
(
mod
_id
,
i
);
cell_conf
[
i
]
->
has_deltapucch_shift
=
1
;
cell_conf
[
i
]
->
has_deltapucch_shift
=
1
;
cell_conf
[
i
]
->
nrb_cqi
=
flexran_get_nRB_CQI
(
enb
_id
,
i
);
cell_conf
[
i
]
->
nrb_cqi
=
flexran_get_nRB_CQI
(
mod
_id
,
i
);
cell_conf
[
i
]
->
has_nrb_cqi
=
1
;
cell_conf
[
i
]
->
has_nrb_cqi
=
1
;
cell_conf
[
i
]
->
srs_subframe_config
=
flexran_get_srs_SubframeConfig
(
enb
_id
,
i
);
cell_conf
[
i
]
->
srs_subframe_config
=
flexran_get_srs_SubframeConfig
(
mod
_id
,
i
);
cell_conf
[
i
]
->
has_srs_subframe_config
=
1
;
cell_conf
[
i
]
->
has_srs_subframe_config
=
1
;
cell_conf
[
i
]
->
srs_bw_config
=
flexran_get_srs_BandwidthConfig
(
enb
_id
,
i
);
cell_conf
[
i
]
->
srs_bw_config
=
flexran_get_srs_BandwidthConfig
(
mod
_id
,
i
);
cell_conf
[
i
]
->
has_srs_bw_config
=
1
;
cell_conf
[
i
]
->
has_srs_bw_config
=
1
;
cell_conf
[
i
]
->
srs_mac_up_pts
=
flexran_get_srs_MaxUpPts
(
enb
_id
,
i
);
cell_conf
[
i
]
->
srs_mac_up_pts
=
flexran_get_srs_MaxUpPts
(
mod
_id
,
i
);
cell_conf
[
i
]
->
has_srs_mac_up_pts
=
1
;
cell_conf
[
i
]
->
has_srs_mac_up_pts
=
1
;
cell_conf
[
i
]
->
dl_freq
=
flexran_agent_get_operating_dl_freq
(
enb
_id
,
i
);
cell_conf
[
i
]
->
dl_freq
=
flexran_agent_get_operating_dl_freq
(
mod
_id
,
i
);
cell_conf
[
i
]
->
has_dl_freq
=
1
;
cell_conf
[
i
]
->
has_dl_freq
=
1
;
cell_conf
[
i
]
->
ul_freq
=
flexran_agent_get_operating_ul_freq
(
enb
_id
,
i
);
cell_conf
[
i
]
->
ul_freq
=
flexran_agent_get_operating_ul_freq
(
mod
_id
,
i
);
cell_conf
[
i
]
->
has_ul_freq
=
1
;
cell_conf
[
i
]
->
has_ul_freq
=
1
;
cell_conf
[
i
]
->
eutra_band
=
flexran_agent_get_operating_eutra_band
(
enb
_id
,
i
);
cell_conf
[
i
]
->
eutra_band
=
flexran_agent_get_operating_eutra_band
(
mod
_id
,
i
);
cell_conf
[
i
]
->
has_eutra_band
=
1
;
cell_conf
[
i
]
->
has_eutra_band
=
1
;
cell_conf
[
i
]
->
dl_pdsch_power
=
flexran_agent_get_operating_pdsch_refpower
(
enb
_id
,
i
);
cell_conf
[
i
]
->
dl_pdsch_power
=
flexran_agent_get_operating_pdsch_refpower
(
mod
_id
,
i
);
cell_conf
[
i
]
->
has_dl_pdsch_power
=
1
;
cell_conf
[
i
]
->
has_dl_pdsch_power
=
1
;
cell_conf
[
i
]
->
ul_pusch_power
=
flexran_agent_get_operating_pusch_p0
(
enb
_id
,
i
);
cell_conf
[
i
]
->
ul_pusch_power
=
flexran_agent_get_operating_pusch_p0
(
mod
_id
,
i
);
cell_conf
[
i
]
->
has_ul_pusch_power
=
1
;
cell_conf
[
i
]
->
has_ul_pusch_power
=
1
;
if
(
flexran_get_enable64QAM
(
mod_id
,
i
)
==
0
)
{
if
(
flexran_get_enable64QAM
(
enb_id
,
i
)
==
0
)
{
cell_conf
[
i
]
->
enable_64qam
=
PROTOCOL__FLEX_QAM__FLEQ_MOD_16QAM
;
cell_conf
[
i
]
->
enable_64qam
=
PROTOCOL__FLEX_QAM__FLEQ_MOD_16QAM
;
}
else
if
(
flexran_get_enable64QAM
(
enb
_id
,
i
)
==
1
)
{
}
else
if
(
flexran_get_enable64QAM
(
mod
_id
,
i
)
==
1
)
{
cell_conf
[
i
]
->
enable_64qam
=
PROTOCOL__FLEX_QAM__FLEQ_MOD_64QAM
;
cell_conf
[
i
]
->
enable_64qam
=
PROTOCOL__FLEX_QAM__FLEQ_MOD_64QAM
;
}
}
cell_conf
[
i
]
->
has_enable_64qam
=
1
;
cell_conf
[
i
]
->
has_enable_64qam
=
1
;
...
...
openair2/ENB_APP/flexran_agent_defs.h
View file @
f15b4464
...
@@ -138,12 +138,14 @@ typedef enum {
...
@@ -138,12 +138,14 @@ typedef enum {
FLEXRAN_AGENT_TIMER_STATE_MAX
,
FLEXRAN_AGENT_TIMER_STATE_MAX
,
}
flexran_agent_timer_state_t
;
}
flexran_agent_timer_state_t
;
#define FLEXRAN_CAP_LOL1 0x1
#define FLEXRAN_CAP_LOPHY 1
#define FLEXRAN_CAP_HIL1 0x2
#define FLEXRAN_CAP_HIPHY 2
#define FLEXRAN_CAP_LOL2 0x4 // is: MAC
#define FLEXRAN_CAP_LOMAC 4
#define FLEXRAN_CAP_HIL2 0x8 // is: RLC
#define FLEXRAN_CAP_HIMAC 8
#define FLEXRAN_CAP_PDCP 0x16
#define FLEXRAN_CAP_RLC 16
#define FLEXRAN_CAP_RRC 0x32
#define FLEXRAN_CAP_PDCP 32
#define FLEXRAN_CAP_SDAP 64
#define FLEXRAN_CAP_RRC 128
typedef
enum
{
typedef
enum
{
ENB_NORMAL_OPERATION
=
0x0
,
ENB_NORMAL_OPERATION
=
0x0
,
...
@@ -159,7 +161,8 @@ typedef struct {
...
@@ -159,7 +161,8 @@ typedef struct {
uint16_t
remote_port
;
uint16_t
remote_port
;
char
*
cache_name
;
char
*
cache_name
;
int
enb_id
;
mid_t
mod_id
;
uint64_t
agent_id
;
uint8_t
capability_mask
;
uint8_t
capability_mask
;
/* lock for waiting before starting or soft-restart */
/* lock for waiting before starting or soft-restart */
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment