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
常顺宇
OpenXG-RAN
Commits
0bea0aaf
Commit
0bea0aaf
authored
9 years ago
by
Xenofon Foukas
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Restructured statistics handler to consider the request message parameters
parent
7241aa6a
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
106 additions
and
50 deletions
+106
-50
openair2/ENB_APP/enb_agent_handler.c
openair2/ENB_APP/enb_agent_handler.c
+1
-1
openair2/ENB_APP/enb_agent_mac.c
openair2/ENB_APP/enb_agent_mac.c
+104
-48
openair2/ENB_APP/enb_agent_mac.h
openair2/ENB_APP/enb_agent_mac.h
+1
-1
No files found.
openair2/ENB_APP/enb_agent_handler.c
View file @
0bea0aaf
...
...
@@ -45,7 +45,7 @@ enb_agent_message_decoded_callback messages_callback[][3] = {
{
enb_agent_hello
,
0
,
0
},
/*PROTOCOL__PROGRAN_MESSAGE__MSG_HELLO_MSG*/
{
enb_agent_echo_reply
,
0
,
0
},
/*PROTOCOL__PROGRAN_MESSAGE__MSG_ECHO_REQUEST_MSG*/
{
0
,
0
,
0
},
/*PROTOCOL__PROGRAN_MESSAGE__MSG_ECHO_REPLY_MSG*/
//Must add handler when receiving echo reply
{
enb_agent_mac_
reply
,
0
,
0
},
/*PROTOCOL__PROGRAN_MESSAGE__MSG_STATS_REQUEST_MSG*/
{
enb_agent_mac_
handle_stats
,
0
,
0
},
/*PROTOCOL__PROGRAN_MESSAGE__MSG_STATS_REQUEST_MSG*/
{
0
,
0
,
0
},
/*PROTOCOL__PROGRAN_MESSAGE__MSG_STATS_REPLY_MSG*/
};
...
...
This diff is collapsed.
Click to expand it.
openair2/ENB_APP/enb_agent_mac.c
View file @
0bea0aaf
...
...
@@ -40,71 +40,127 @@
#include "LAYER2/RLC/rlc.h"
#include "log.h"
int
enb_agent_mac_
reply
(
uint32_t
xid
,
const
void
*
params
,
Protocol__ProgranMessage
**
msg
){
int
enb_agent_mac_
handle_stats
(
uint32_t
xid
,
const
void
*
params
,
Protocol__ProgranMessage
**
msg
){
// TODO: Must deal with sanitization of input
// TODO: Must check if RNTIs and cell ids of the request actually exist
int
i
;
void
*
buffer
;
int
size
;
err_code_t
err_code
;
// test code
//TODO: We do not deal with multiple CCs at the moment and eNB id is 0
int
cc_id
=
0
;
int
enb_id
=
0
;
eNB_MAC_INST
*
eNB
=
&
eNB_mac_inst
[
enb_id
];
UE_list_t
*
eNB_UE_list
=
&
eNB
->
UE_list
;
// Create and serialize a stats reply message. This would be done by one of the agents
// Let's assume that we want the power headroom, the pending CEs for UEs 1 & 2 and their
// DL CQI reports as well as the noise and interference for cell 1
report_config_t
report_config
;
// We set the flags indicating what kind of stats we need for each UE. Both UEs will have
// the same flags in this example
uint32_t
ue_flags
=
0
;
// Set the power headroom flag
ue_flags
|=
PROTOCOL__PRP_UE_STATS_TYPE__PRUST_PRH
;
// Set the pending CEs flag
ue_flags
|=
PROTOCOL__PRP_UE_STATS_TYPE__PRUST_MAC_CE_BS
;
// Set the DL CQI report flag
ue_flags
|=
PROTOCOL__PRP_UE_STATS_TYPE__PRUST_DL_CQI
;
// We do the same with the Cell flags
uint32_t
c_flags
=
0
;
// Set the noise and interference flag
c_flags
|=
PROTOCOL__PRP_CELL_STATS_TYPE__PRCST_NOISE_INTERFERENCE
;
// We create the appropriate configurations
ue_report_type_t
ue_configs
[
2
];
cc_report_type_t
cell_configs
[
1
];
// Create the config for UE with RNTI 1
ue_report_type_t
ue1_config
;
ue1_config
.
ue_rnti
=
1
;
ue1_config
.
ue_report_flags
=
ue_flags
;
// Do the same for UE with RNTI 2
ue_report_type_t
ue2_config
;
ue2_config
.
ue_rnti
=
2
;
ue2_config
.
ue_report_flags
=
ue_flags
;
// Add them to the UE list
ue_configs
[
0
]
=
ue1_config
;
ue_configs
[
1
]
=
ue2_config
;
// Do the same for cell with id 1
cc_report_type_t
c1_config
;
c1_config
.
cc_id
=
1
;
c1_config
.
cc_report_flags
=
c_flags
;
// Add them to the cell list
cell_configs
[
0
]
=
c1_config
;
//Create the full report configuration
report_config
.
nr_ue
=
2
;
report_config
.
nr_cc
=
1
;
report_config
.
ue_report_type
=
ue_configs
;
report_config
.
cc_report_type
=
cell_configs
;
Protocol__ProgranMessage
*
input
=
(
Protocol__ProgranMessage
*
)
params
;
Protocol__PrpStatsRequest
*
stats_req
=
input
->
stats_request_msg
;
// Check the type of request that is made
switch
(
stats_req
->
body_case
)
{
case
PROTOCOL__PRP_STATS_REQUEST__BODY_COMPLETE_STATS_REQUEST
:
;
Protocol__PrpCompleteStatsRequest
*
comp_req
=
stats_req
->
complete_stats_request
;
if
(
comp_req
->
report_frequency
==
PROTOCOL__PRP_STATS_REPORT_FREQ__PRSRF_PERIODICAL
)
{
//TODO: Must create a periodic report. Implement once the
// timer functionality is supported
return
-
1
;
}
else
if
(
comp_req
->
report_frequency
==
PROTOCOL__PRP_STATS_REPORT_FREQ__PRSRF_CONTINUOUS
)
{
//TODO: Must create an event based report mechanism
return
-
1
;
}
else
if
(
comp_req
->
report_frequency
==
PROTOCOL__PRP_STATS_REPORT_FREQ__PRSRF_OFF
)
{
//TODO: Must implement to deactivate the event based reporting
}
else
{
//One-off reporting
//Set the proper flags
ue_flags
=
comp_req
->
ue_report_flags
;
c_flags
=
comp_req
->
cell_report_flags
;
//Create a list of all eNB RNTIs and cells
//Set the number of UEs and create list with their RNTIs stats configs
report_config
.
nr_ue
=
eNB_UE_list
->
num_UEs
;
report_config
.
ue_report_type
=
(
ue_report_type_t
*
)
malloc
(
sizeof
(
ue_report_type_t
)
*
report_config
.
nr_ue
);
if
(
report_config
.
ue_report_type
==
NULL
)
{
// TODO: Add appropriate error code
err_code
=
-
100
;
goto
error
;
}
for
(
i
=
0
;
i
<
report_config
.
nr_ue
;
i
++
)
{
report_config
.
ue_report_type
[
i
].
ue_rnti
=
eNB_UE_list
->
eNB_UE_stats
[
UE_PCCID
(
enb_id
,
i
)][
i
].
crnti
;
report_config
.
ue_report_type
[
i
].
ue_report_flags
=
ue_flags
;
}
//Set the number of CCs and create a list with the cell stats configs
report_config
.
nr_cc
=
MAX_NUM_CCs
;
report_config
.
cc_report_type
=
(
cc_report_type_t
*
)
malloc
(
sizeof
(
cc_report_type_t
)
*
report_config
.
nr_cc
);
if
(
report_config
.
cc_report_type
==
NULL
)
{
// TODO: Add appropriate error code
err_code
=
-
100
;
goto
error
;
}
for
(
i
=
0
;
i
<
report_config
.
nr_cc
;
i
++
)
{
//TODO: Must fill in the proper cell ids
report_config
.
cc_report_type
[
i
].
cc_id
=
i
;
report_config
.
cc_report_type
[
i
].
cc_report_flags
=
c_flags
;
}
}
break
;
case
PROTOCOL__PRP_STATS_REQUEST__BODY_CELL_STATS_REQUEST
:;
Protocol__PrpCellStatsRequest
*
cell_req
=
stats_req
->
cell_stats_request
;
// UE report config will be blank
report_config
.
nr_ue
=
0
;
report_config
.
ue_report_type
=
NULL
;
report_config
.
nr_cc
=
cell_req
->
n_cell
;
report_config
.
cc_report_type
=
(
cc_report_type_t
*
)
malloc
(
sizeof
(
cc_report_type_t
)
*
report_config
.
nr_cc
);
if
(
report_config
.
cc_report_type
==
NULL
)
{
// TODO: Add appropriate error code
err_code
=
-
100
;
goto
error
;
}
for
(
i
=
0
;
i
<
report_config
.
nr_cc
;
i
++
)
{
//TODO: Must fill in the proper cell ids
report_config
.
cc_report_type
[
i
].
cc_id
=
cell_req
->
cell
[
i
];
report_config
.
cc_report_type
[
i
].
cc_report_flags
=
cell_req
->
flags
;
}
break
;
case
PROTOCOL__PRP_STATS_REQUEST__BODY_UE_STATS_REQUEST
:;
Protocol__PrpUeStatsRequest
*
ue_req
=
stats_req
->
ue_stats_request
;
// Cell report config will be blank
report_config
.
nr_cc
=
0
;
report_config
.
cc_report_type
=
NULL
;
report_config
.
nr_ue
=
ue_req
->
n_rnti
;
report_config
.
ue_report_type
=
(
ue_report_type_t
*
)
malloc
(
sizeof
(
ue_report_type_t
)
*
report_config
.
nr_ue
);
if
(
report_config
.
ue_report_type
==
NULL
)
{
// TODO: Add appropriate error code
err_code
=
-
100
;
goto
error
;
}
for
(
i
=
0
;
i
<
report_config
.
nr_ue
;
i
++
)
{
report_config
.
ue_report_type
[
i
].
ue_rnti
=
ue_req
->
rnti
[
i
];
report_config
.
ue_report_type
[
i
].
ue_report_flags
=
ue_req
->
flags
;
}
break
;
default:
//TODO: Add appropriate error code
err_code
=
-
100
;
goto
error
;
}
if
(
enb_agent_mac_stats_reply
(
xid
,
&
report_config
,
msg
)
<
0
){
err_code
=
PROTOCOL__PROGRAN_ERR__MSG_BUILD
;
goto
error
;
}
free
(
report_config
.
ue_report_type
);
free
(
report_config
.
cc_report_type
);
return
0
;
error
:
...
...
This diff is collapsed.
Click to expand it.
openair2/ENB_APP/enb_agent_mac.h
View file @
0bea0aaf
...
...
@@ -68,7 +68,7 @@ typedef struct {
}
report_config_t
;
int
enb_agent_mac_
reply
(
uint32_t
xid
,
const
void
*
params
,
Protocol__ProgranMessage
**
msg
);
int
enb_agent_mac_
handle_stats
(
uint32_t
xid
,
const
void
*
params
,
Protocol__ProgranMessage
**
msg
);
int
enb_agent_mac_stats_reply
(
uint32_t
xid
,
const
report_config_t
*
report_config
,
Protocol__ProgranMessage
**
msg
);
...
...
This diff is collapsed.
Click to expand it.
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