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
ZhouShuya
OpenXG-RAN
Commits
02bb4ac9
Commit
02bb4ac9
authored
Dec 14, 2020
by
hardy
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/fix_do_ra_data' into integration_2020_wk51
parents
4e0e95aa
ac73df69
Changes
19
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
225 additions
and
209 deletions
+225
-209
executables/nr-ue.c
executables/nr-ue.c
+3
-5
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
+1
-1
openair1/SCHED_NR_UE/pucch_uci_ue_nr.c
openair1/SCHED_NR_UE/pucch_uci_ue_nr.c
+2
-3
openair2/LAYER2/NR_MAC_UE/main_ue_nr.c
openair2/LAYER2/NR_MAC_UE/main_ue_nr.c
+2
-4
openair2/LAYER2/NR_MAC_UE/nr_ue_dci_configuration.c
openair2/LAYER2/NR_MAC_UE/nr_ue_dci_configuration.c
+1
-1
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
+19
-26
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
+9
-5
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
+11
-26
openair2/LAYER2/NR_MAC_gNB/main.c
openair2/LAYER2/NR_MAC_gNB/main.c
+2
-2
openair2/LAYER2/nr_pdcp/nr_pdcp_entity.h
openair2/LAYER2/nr_pdcp/nr_pdcp_entity.h
+3
-1
openair2/LAYER2/nr_pdcp/nr_pdcp_entity_drb_am.c
openair2/LAYER2/nr_pdcp/nr_pdcp_entity_drb_am.c
+5
-1
openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
+13
-58
openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c
openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c
+79
-11
openair2/LAYER2/nr_rlc/nr_rlc_oai_api.h
openair2/LAYER2/nr_rlc/nr_rlc_oai_api.h
+49
-0
openair2/LAYER2/nr_rlc/nr_rlc_ue_manager.c
openair2/LAYER2/nr_rlc/nr_rlc_ue_manager.c
+1
-1
openair2/LAYER2/rlc_v2/rlc_oai_api.c
openair2/LAYER2/rlc_v2/rlc_oai_api.c
+4
-8
openair2/RRC/NR/rrc_gNB.c
openair2/RRC/NR/rrc_gNB.c
+1
-1
openair2/RRC/NR/rrc_gNB_nsa.c
openair2/RRC/NR/rrc_gNB_nsa.c
+13
-3
openair2/RRC/NR/rrc_gNB_reconfig.c
openair2/RRC/NR/rrc_gNB_reconfig.c
+7
-52
No files found.
executables/nr-ue.c
View file @
02bb4ac9
...
...
@@ -416,12 +416,10 @@ void processSlotRX( PHY_VARS_NR_UE *UE, UE_nr_rxtx_proc_t *proc) {
//printf(">>> nr_ue_pdcch_procedures ended\n");
#endif
if
(
IS_SOFTMODEM_NOS1
){
//&& proc->nr_slot_rx==1
//Hardcoded rnti value
if
(
IS_SOFTMODEM_NOS1
){
NR_UE_MAC_INST_t
*
mac
=
get_mac_inst
(
0
);
protocol_ctxt_t
ctxt
;
PROTOCOL_CTXT_SET_BY_MODULE_ID
(
&
ctxt
,
UE
->
Mod_id
,
ENB_FLAG_NO
,
0x1234
,
proc
->
frame_rx
,
proc
->
nr_slot_rx
,
0
);
PROTOCOL_CTXT_SET_BY_MODULE_ID
(
&
ctxt
,
UE
->
Mod_id
,
ENB_FLAG_NO
,
mac
->
crnti
,
proc
->
frame_rx
,
proc
->
nr_slot_rx
,
0
);
pdcp_run
(
&
ctxt
);
}
}
...
...
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
View file @
02bb4ac9
...
...
@@ -194,7 +194,7 @@ void phy_procedures_nrUE_TX(PHY_VARS_NR_UE *ue,
start_meas
(
&
ue
->
phy_proc_tx
);
#endif
if
(
ue
->
UE_mode
[
gNB_id
]
<=
PUSCH
||
get_softmodem_params
()
->
phy_test
==
1
){
if
(
ue
->
UE_mode
[
gNB_id
]
<=
PUSCH
){
if
(
ue
->
ulsch
[
proc
->
thread_id
][
gNB_id
][
0
]
->
harq_processes
[
harq_pid
]
->
status
==
ACTIVE
)
nr_ue_ulsch_procedures
(
ue
,
harq_pid
,
frame_tx
,
slot_tx
,
proc
->
thread_id
,
gNB_id
);
...
...
openair1/SCHED_NR_UE/pucch_uci_ue_nr.c
View file @
02bb4ac9
...
...
@@ -33,6 +33,7 @@
*
**************************************************************************/
#include "executables/softmodem-common.h"
#include "PHY/NR_REFSIG/ss_pbch_nr.h"
#include "PHY/defs_nr_UE.h"
#include <openair1/SCHED/sched_common.h>
...
...
@@ -228,13 +229,11 @@ bool pucch_procedures_ue_nr(PHY_VARS_NR_UE *ue, uint8_t gNB_id, UE_nr_rxtx_proc_
int
pucch_resource_indicator
=
MAX_PUCCH_RESOURCE_INDICATOR
;
int
n_HARQ_ACK
;
uint16_t
crnti
=
0x1234
;
int
dmrs_scrambling_id
=
0
,
data_scrambling_id
=
0
;
NR_UE_MAC_INST_t
*
mac
=
get_mac_inst
(
0
);
NR_PUCCH_Resource_t
*
pucch_resource
;
//NR_UE_MAC_INST_t *mac = get_mac_inst(0)
;
uint16_t
crnti
=
mac
->
crnti
;
/* update current context */
...
...
openair2/LAYER2/NR_MAC_UE/main_ue_nr.c
View file @
02bb4ac9
...
...
@@ -54,11 +54,9 @@ NR_UE_MAC_INST_t * nr_l2_init_ue(NR_UE_RRC_INST_t* rrc_inst)
nr_rrc_mac_config_req_ue
(
0
,
0
,
0
,
NULL
,
rrc_inst
->
cell_group_config
);
if
(
IS_SOFTMODEM_NOS1
){
if
(
rlc_module_init
(
0
)
!=
0
)
{
LOG_I
(
RLC
,
"Problem at RLC initiation
\n
"
);
}
AssertFatal
(
rlc_module_init
(
0
)
==
0
,
"%s: Could not initialize RLC layer
\n
"
,
__FUNCTION__
);
pdcp_layer_init
();
nr_DRB_preconfiguration
();
nr_DRB_preconfiguration
(
nr_ue_mac_inst
->
crnti
);
}
// Allocate memory for ul_config_request in the mac instance. This is now a pointer and will
...
...
openair2/LAYER2/NR_MAC_UE/nr_ue_dci_configuration.c
View file @
02bb4ac9
...
...
@@ -287,7 +287,7 @@ void ue_dci_configuration(NR_UE_MAC_INST_t *mac, fapi_nr_dl_config_request_t *dl
if
(
ss
->
searchSpaceType
->
choice
.
ue_Specific
){
if
(
ss
->
searchSpaceType
->
choice
.
ue_Specific
->
dci_Formats
==
NR_SearchSpace__searchSpaceType__ue_Specific__dci_Formats_formats0_1_And_1_1
){
// Monitors DCI 01 and 11 scrambled with C-RNTI, or CS-RNTI(s), or SP-CSI-RNTI
if
(
get_softmodem_params
()
->
phy_test
==
1
&&
mac
->
crnti
>
0
)
{
if
(
(
mac
->
ra_state
==
RA_SUCCEEDED
||
get_softmodem_params
()
->
phy_test
)
&&
mac
->
crnti
>
0
)
{
LOG_D
(
MAC
,
"[DCI_CONFIG] Configure monitoring of PDCCH candidates in the user specific search space
\n
"
);
rel15
->
num_dci_options
=
2
;
rel15
->
dci_format_options
[
0
]
=
NR_DL_DCI_FORMAT_1_1
;
...
...
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
View file @
02bb4ac9
...
...
@@ -1501,8 +1501,10 @@ NR_UE_L2_STATE_t nr_ue_scheduler(nr_downlink_indication_t *dl_info, nr_uplink_in
}
}
else
if
(
ul_info
)
{
// ULSCH is handled only in phy-test mode (consistently with OAI gNB)
if
(
get_softmodem_params
()
->
phy_test
)
{
module_id_t
mod_id
=
ul_info
->
module_id
;
NR_UE_MAC_INST_t
*
mac
=
get_mac_inst
(
mod_id
);
if
(
mac
->
ra_state
==
RA_SUCCEEDED
||
get_softmodem_params
()
->
phy_test
)
{
uint8_t
nb_dmrs_re_per_rb
;
uint8_t
ulsch_input_buffer
[
MAX_ULSCH_PAYLOAD_BYTES
];
...
...
@@ -1511,14 +1513,12 @@ NR_UE_L2_STATE_t nr_ue_scheduler(nr_downlink_indication_t *dl_info, nr_uplink_in
uint32_t
TBS
;
int
i
,
N_PRB_oh
;
module_id_t
mod_id
=
ul_info
->
module_id
;
uint32_t
gNB_index
=
ul_info
->
gNB_index
;
int
cc_id
=
ul_info
->
cc_id
;
frame_t
rx_frame
=
ul_info
->
frame_rx
;
slot_t
rx_slot
=
ul_info
->
slot_rx
;
frame_t
frame_tx
=
ul_info
->
frame_tx
;
slot_t
slot_tx
=
ul_info
->
slot_tx
;
NR_UE_MAC_INST_t
*
mac
=
get_mac_inst
(
mod_id
);
uint8_t
access_mode
=
SCHEDULED_ACCESS
;
fapi_nr_ul_config_request_t
*
ul_config_req
=
get_ul_config_request
(
mac
,
slot_tx
);
...
...
@@ -4935,7 +4935,7 @@ void nr_ue_process_mac_pdu(module_id_t module_idP,
if
(
rx_lcid
<
NB_RB_MAX
&&
rx_lcid
>=
DL_SCH_LCID_DTCH
)
{
mac_rlc_data_ind
(
module_idP
,
0x1234
,
mac
->
crnti
,
gNB_index
,
frameP
,
ENB_FLAG_NO
,
...
...
@@ -5147,6 +5147,7 @@ nr_ue_get_sdu(module_id_t module_idP, int CC_id, frame_t frameP,
uint8_t
ulsch_sdus
[
MAX_ULSCH_PAYLOAD_BYTES
];
uint16_t
sdu_length_total
=
0
;
//unsigned short post_padding = 0;
NR_UE_MAC_INST_t
*
mac
=
get_mac_inst
(
module_idP
);
rlc_buffer_occupancy_t
lcid_buffer_occupancy_old
=
0
,
lcid_buffer_occupancy_new
=
0
;
...
...
@@ -5159,19 +5160,12 @@ nr_ue_get_sdu(module_id_t module_idP, int CC_id, frame_t frameP,
start_meas
(
&
UE_mac_inst
[
module_idP
].
tx_ulsch_sdu
);
#endif
//NR_UE_MAC_INST_t *nr_ue_mac_inst = get_mac_inst(0);
// Check for DCCH first
// TO DO: Multiplex in the order defined by the logical channel prioritization
for
(
lcid
=
UL_SCH_LCID_SRB1
;
lcid
<
NR_MAX_NUM_LCID
;
lcid
++
)
{
lcid_buffer_occupancy_old
=
//TODO: Replace static value with CRNTI
mac_rlc_get_buffer_occupancy_ind
(
module_idP
,
0x1234
,
eNB_index
,
frameP
,
//nr_ue_mac_inst->crnti
subframe
,
ENB_FLAG_NO
,
lcid
);
lcid_buffer_occupancy_old
=
mac_rlc_get_buffer_occupancy_ind
(
module_idP
,
mac
->
crnti
,
eNB_index
,
frameP
,
subframe
,
ENB_FLAG_NO
,
lcid
);
lcid_buffer_occupancy_new
=
lcid_buffer_occupancy_old
;
if
(
lcid_buffer_occupancy_new
){
...
...
@@ -5187,17 +5181,17 @@ nr_ue_get_sdu(module_id_t module_idP, int CC_id, frame_t frameP,
while
(
buflen_remain
>
0
&&
lcid_buffer_occupancy_new
){
//TODO: Replace static value with CRNTI
sdu_lengths
[
num_sdus
]
=
mac_rlc_data_req
(
module_idP
,
0x1234
,
eNB_index
,
//nr_ue_mac_inst->crnti
mac
->
crnti
,
eNB_index
,
frameP
,
ENB_FLAG_NO
,
MBMS_FLAG_NO
,
lcid
,
buflen_remain
,
(
char
*
)
&
ulsch_sdus
[
sdu_length_total
],
0
,
0
);
0
);
AssertFatal
(
buflen_remain
>=
sdu_lengths
[
num_sdus
],
"LCID=%d RLC has segmented %d bytes but MAC has max=%d
\n
"
,
lcid
,
sdu_lengths
[
num_sdus
],
buflen_remain
);
...
...
@@ -5213,14 +5207,13 @@ nr_ue_get_sdu(module_id_t module_idP, int CC_id, frame_t frameP,
}
/* Get updated BO after multiplexing this PDU */
//TODO: Replace static value with CRNTI
lcid_buffer_occupancy_new
=
mac_rlc_get_buffer_occupancy_ind
(
module_idP
,
0x1234
,
//nr_ue_mac_inst->crnti
eNB_index
,
frameP
,
subframe
,
ENB_FLAG_NO
,
lcid
);
lcid_buffer_occupancy_new
=
mac_rlc_get_buffer_occupancy_ind
(
module_idP
,
mac
->
crnti
,
eNB_index
,
frameP
,
subframe
,
ENB_FLAG_NO
,
lcid
);
buflen_remain
=
buflen
-
(
total_rlc_pdu_header_len
+
sdu_length_total
+
MAX_RLC_SDU_SUBHEADER_SIZE
);
}
...
...
@@ -5236,7 +5229,7 @@ nr_ue_get_sdu(module_id_t module_idP, int CC_id, frame_t frameP,
sdu_lengths
,
// sdu length
sdu_lcids
,
// sdu lcid
0
,
// power_headroom
0
,
// crnti
mac
->
crnti
,
// crnti
0
,
// truncated_bsr
0
,
// short_bsr
0
,
// long_bsr
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
View file @
02bb4ac9
...
...
@@ -393,7 +393,7 @@ void nr_simple_dlsch_preprocessor(module_id_t module_id,
/* Retrieve amount of data to send for this UE */
sched_ctrl
->
num_total_bytes
=
0
;
const
int
lcid
=
DL_SCH_LCID_DTCH
;
const
uint16
_t
rnti
=
UE_info
->
rnti
[
UE_id
];
const
rnti
_t
rnti
=
UE_info
->
rnti
[
UE_id
];
sched_ctrl
->
rlc_status
[
lcid
]
=
mac_rlc_status_ind
(
module_id
,
rnti
,
module_id
,
...
...
@@ -408,8 +408,9 @@ void nr_simple_dlsch_preprocessor(module_id_t module_id,
if
(
sched_ctrl
->
num_total_bytes
==
0
&&
!
sched_ctrl
->
ta_apply
)
/* If TA should be applied, give at least one RB */
return
;
LOG_D
(
MAC
,
"%d.%d, DTCH%d->DLSCH, RLC status %d bytes TA %d
\n
"
,
LOG_D
(
MAC
,
"[%s][%d.%d], DTCH%d->DLSCH, RLC status %d bytes TA %d
\n
"
,
__FUNCTION__
,
frame
,
slot
,
lcid
,
...
...
@@ -551,8 +552,10 @@ void nr_schedule_ue_spec(module_id_t module_id,
* Possible improvement: take the periodicity from input file.
* If such UE is not scheduled now, it will be by the preprocessor later.
* If we add the CE, ta_apply will be reset */
if
(
frame
==
(
sched_ctrl
->
ta_frame
+
10
)
%
1024
)
if
(
frame
==
(
sched_ctrl
->
ta_frame
+
10
)
%
1024
)
{
sched_ctrl
->
ta_apply
=
true
;
/* the timer is reset once TA CE is scheduled */
LOG_D
(
MAC
,
"[UE %d][%d.%d] UL timing alignment procedures: setting flag for Timing Advance command
\n
"
,
UE_id
,
frame
,
slot
);
}
if
(
sched_ctrl
->
rbSize
<=
0
)
continue
;
...
...
@@ -650,6 +653,7 @@ void nr_schedule_ue_spec(module_id_t module_id,
harq
->
ndi
);
}
else
{
/* initial transmission */
LOG_D
(
MAC
,
"[%s] Initial HARQ transmission in %d.%d
\n
"
,
__FUNCTION__
,
frame
,
slot
);
/* reserve space for timing advance of UE if necessary,
* nr_generate_dlsch_pdu() checks for ta_apply and add TA CE if necessary */
const
int
ta_len
=
(
sched_ctrl
->
ta_apply
)
?
2
:
0
;
...
...
@@ -703,7 +707,7 @@ void nr_schedule_ue_spec(module_id_t module_id,
header_length_total
+=
header_length_last
;
num_sdus
++
;
}
else
if
(
get_softmodem_params
()
->
phy_test
)
{
else
if
(
get_softmodem_params
()
->
phy_test
||
get_softmodem_params
()
->
do_ra
)
{
LOG_D
(
MAC
,
"Configuring DL_TX in %d.%d: random data
\n
"
,
frame
,
slot
);
// fill dlsch_buffer with random data
for
(
int
i
=
0
;
i
<
TBS
;
i
++
)
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
View file @
02bb4ac9
...
...
@@ -217,33 +217,18 @@ void nr_process_mac_pdu(
log_dump
(
MAC
,
pdu_ptr
+
mac_subheader_len
,
32
,
LOG_DUMP_CHAR
,
"
\n
"
);
#endif
if
(
IS_SOFTMODEM_NOS1
){
mac_rlc_data_ind
(
module_idP
,
0x1234
,
module_idP
,
frameP
,
ENB_FLAG_YES
,
MBMS_FLAG_NO
,
rx_lcid
,
(
char
*
)
(
pdu_ptr
+
mac_subheader_len
),
mac_sdu_len
,
1
,
NULL
);
}
else
{
mac_rlc_data_ind
(
module_idP
,
rnti
,
module_idP
,
frameP
,
ENB_FLAG_YES
,
MBMS_FLAG_NO
,
rx_lcid
,
(
char
*
)
(
pdu_ptr
+
mac_subheader_len
),
mac_sdu_len
,
1
,
NULL
);
}
mac_rlc_data_ind
(
module_idP
,
rnti
,
module_idP
,
frameP
,
ENB_FLAG_YES
,
MBMS_FLAG_NO
,
rx_lcid
,
(
char
*
)
(
pdu_ptr
+
mac_subheader_len
),
mac_sdu_len
,
1
,
NULL
);
break
;
...
...
openair2/LAYER2/NR_MAC_gNB/main.c
View file @
02bb4ac9
...
...
@@ -96,8 +96,8 @@ void mac_top_init_gNB(void)
// These should be out of here later
pdcp_layer_init
();
if
(
IS_SOFTMODEM_NOS1
)
nr_DRB_preconfiguration
();
if
(
IS_SOFTMODEM_NOS1
&&
!
get_softmodem_params
()
->
do_ra
)
nr_DRB_preconfiguration
(
0x1234
);
rrc_init_nr_global_param
();
...
...
openair2/LAYER2/nr_pdcp/nr_pdcp_entity.h
View file @
02bb4ac9
...
...
@@ -19,6 +19,8 @@
* contact@openairinterface.org
*/
#include <stdint.h>
#ifndef _NR_PDCP_ENTITY_H_
#define _NR_PDCP_ENTITY_H_
...
...
@@ -63,6 +65,6 @@ nr_pdcp_entity_t *new_nr_pdcp_entity_drb_am(
int
t_reordering
,
int
discard_timer
);
void
nr_DRB_preconfiguration
(
void
);
void
nr_DRB_preconfiguration
(
uint16_t
crnti
);
#endif
/* _NR_PDCP_ENTITY_H_ */
openair2/LAYER2/nr_pdcp/nr_pdcp_entity_drb_am.c
View file @
02bb4ac9
...
...
@@ -24,13 +24,17 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "common/utils/LOG/log.h"
void
nr_pdcp_entity_drb_am_recv_pdu
(
nr_pdcp_entity_t
*
_entity
,
char
*
buffer
,
int
size
)
{
nr_pdcp_entity_drb_am_t
*
entity
=
(
nr_pdcp_entity_drb_am_t
*
)
_entity
;
if
(
size
<
3
)
abort
();
if
(
!
(
buffer
[
0
]
&
0x80
))
{
printf
(
"%s:%d:%s: fatal
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
);
exit
(
1
);
}
if
(
!
(
buffer
[
0
]
&
0x80
))
LOG_E
(
PDCP
,
"%s:%d:%s: fatal
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
);
entity
->
common
.
deliver_sdu
(
entity
->
common
.
deliver_sdu_data
,
(
nr_pdcp_entity_t
*
)
entity
,
buffer
+
3
,
size
-
3
);
}
...
...
openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
View file @
02bb4ac9
...
...
@@ -26,11 +26,13 @@
#include "nr_pdcp_ue_manager.h"
#include "NR_RadioBearerConfig.h"
#include "NR_RLC-BearerConfig.h"
#include "NR_RLC-Config.h"
#include "NR_CellGroupConfig.h"
#include "openair2/RRC/NR/nr_rrc_proto.h"
/* from OAI */
#include "pdcp.h"
#include "LAYER2/nr_rlc/nr_rlc_oai_api.h"
#define TODO do { \
printf("%s:%d:%s: todo\n", __FILE__, __LINE__, __FUNCTION__); \
...
...
@@ -411,7 +413,6 @@ static void deliver_sdu_drb(void *_ue, nr_pdcp_entity_t *entity,
len
=
write
(
nas_sock_fd
[
0
],
buf
,
size
);
if
(
len
!=
size
)
{
LOG_E
(
PDCP
,
"%s:%d:%s: fatal
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
);
exit
(
1
);
}
}
else
{
...
...
@@ -624,8 +625,7 @@ static void add_drb_am(int rnti, struct NR_DRB_ToAddMod *s)
sn_size_dl
,
t_reordering
,
discard_timer
);
nr_pdcp_ue_add_drb_pdcp_entity
(
ue
,
drb_id
,
pdcp_drb
);
LOG_D
(
PDCP
,
"%s:%d:%s: added drb %d to ue %d
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
drb_id
,
rnti
);
LOG_D
(
PDCP
,
"%s:%d:%s: added drb %d to ue rnti %x
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
drb_id
,
rnti
);
}
nr_pdcp_manager_unlock
(
nr_pdcp_ue_manager
);
}
...
...
@@ -646,6 +646,7 @@ static void add_drb(int rnti, struct NR_DRB_ToAddMod *s, NR_RLC_Config_t *rlc_Co
__FILE__
,
__LINE__
,
__FUNCTION__
);
exit
(
1
);
}
LOG_I
(
PDCP
,
"%s:%s:%d: added DRB for UE RNTI %x
\n
"
,
__FILE__
,
__FUNCTION__
,
__LINE__
,
rnti
);
}
boolean_t
nr_rrc_pdcp_config_asn1_req
(
...
...
@@ -692,7 +693,6 @@ boolean_t nr_rrc_pdcp_config_asn1_req(
if
(
drb2add_list
!=
NULL
)
{
for
(
i
=
0
;
i
<
drb2add_list
->
list
.
count
;
i
++
)
{
LOG_I
(
PDCP
,
"Before calling add_drb
\n
"
);
add_drb
(
rnti
,
drb2add_list
->
list
.
array
[
i
],
rlc_bearer2add_list
->
list
.
array
[
i
]
->
rlc_Config
);
}
}
...
...
@@ -727,7 +727,7 @@ boolean_t rrc_pdcp_config_asn1_req(
return
0
;
}
void
nr_DRB_preconfiguration
(
void
)
void
nr_DRB_preconfiguration
(
uint16_t
crnti
)
{
NR_RadioBearerConfig_t
*
rbconfig
=
NULL
;
...
...
@@ -779,67 +779,19 @@ void nr_DRB_preconfiguration(void)
xer_fprint
(
stdout
,
&
asn_DEF_NR_RadioBearerConfig
,
(
const
void
*
)
rbconfig
);
NR_RLC_BearerConfig_t
*
RLC_BearerConfig
=
calloc
(
1
,
sizeof
(
*
RLC_BearerConfig
));
RLC_BearerConfig
->
logicalChannelIdentity
=
4
;
RLC_BearerConfig
->
servedRadioBearer
=
calloc
(
1
,
sizeof
(
*
RLC_BearerConfig
->
servedRadioBearer
));
RLC_BearerConfig
->
servedRadioBearer
->
present
=
NR_RLC_BearerConfig__servedRadioBearer_PR_drb_Identity
;
RLC_BearerConfig
->
servedRadioBearer
->
choice
.
drb_Identity
=
1
;
RLC_BearerConfig
->
reestablishRLC
=
calloc
(
1
,
sizeof
(
*
RLC_BearerConfig
->
reestablishRLC
));
*
RLC_BearerConfig
->
reestablishRLC
=
NR_RLC_BearerConfig__reestablishRLC_true
;
RLC_BearerConfig
->
rlc_Config
=
calloc
(
1
,
sizeof
(
*
RLC_BearerConfig
->
rlc_Config
));
// RLC UM Bi-directional Bearer configuration
RLC_BearerConfig
->
rlc_Config
->
present
=
NR_RLC_Config_PR_um_Bi_Directional
;
RLC_BearerConfig
->
rlc_Config
->
choice
.
um_Bi_Directional
=
calloc
(
1
,
sizeof
(
*
RLC_BearerConfig
->
rlc_Config
->
choice
.
um_Bi_Directional
));
RLC_BearerConfig
->
rlc_Config
->
choice
.
um_Bi_Directional
->
ul_UM_RLC
.
sn_FieldLength
=
calloc
(
1
,
sizeof
(
*
RLC_BearerConfig
->
rlc_Config
->
choice
.
um_Bi_Directional
->
ul_UM_RLC
.
sn_FieldLength
));
*
RLC_BearerConfig
->
rlc_Config
->
choice
.
um_Bi_Directional
->
ul_UM_RLC
.
sn_FieldLength
=
NR_SN_FieldLengthUM_size12
;
RLC_BearerConfig
->
rlc_Config
->
choice
.
um_Bi_Directional
->
dl_UM_RLC
.
sn_FieldLength
=
calloc
(
1
,
sizeof
(
*
RLC_BearerConfig
->
rlc_Config
->
choice
.
um_Bi_Directional
->
dl_UM_RLC
.
sn_FieldLength
));
*
RLC_BearerConfig
->
rlc_Config
->
choice
.
um_Bi_Directional
->
dl_UM_RLC
.
sn_FieldLength
=
NR_SN_FieldLengthUM_size12
;
RLC_BearerConfig
->
rlc_Config
->
choice
.
um_Bi_Directional
->
dl_UM_RLC
.
t_Reassembly
=
NR_T_Reassembly_ms15
;
// RLC AM Bearer configuration
/*RLC_BearerConfig->rlc_Config->present = NR_RLC_Config_PR_am;
RLC_BearerConfig->rlc_Config->choice.am = calloc(1,sizeof(*RLC_BearerConfig->rlc_Config->choice.am));
RLC_BearerConfig->rlc_Config->choice.am->ul_AM_RLC.sn_FieldLength = calloc(1,sizeof(*RLC_BearerConfig->rlc_Config->choice.am->ul_AM_RLC.sn_FieldLength));
*RLC_BearerConfig->rlc_Config->choice.am->ul_AM_RLC.sn_FieldLength = NR_SN_FieldLengthAM_size18;
RLC_BearerConfig->rlc_Config->choice.am->ul_AM_RLC.t_PollRetransmit = NR_T_PollRetransmit_ms45;
RLC_BearerConfig->rlc_Config->choice.am->ul_AM_RLC.pollPDU = NR_PollPDU_p64;
RLC_BearerConfig->rlc_Config->choice.am->ul_AM_RLC.pollByte = NR_PollByte_kB500;
RLC_BearerConfig->rlc_Config->choice.am->ul_AM_RLC.maxRetxThreshold = NR_UL_AM_RLC__maxRetxThreshold_t32;
RLC_BearerConfig->rlc_Config->choice.am->dl_AM_RLC.sn_FieldLength = calloc(1,sizeof(*RLC_BearerConfig->rlc_Config->choice.am->dl_AM_RLC.sn_FieldLength));
*RLC_BearerConfig->rlc_Config->choice.am->dl_AM_RLC.sn_FieldLength = NR_SN_FieldLengthAM_size18;
RLC_BearerConfig->rlc_Config->choice.am->dl_AM_RLC.t_Reassembly = NR_T_Reassembly_ms15;
RLC_BearerConfig->rlc_Config->choice.am->dl_AM_RLC.t_StatusProhibit = NR_T_StatusProhibit_ms15;*/
RLC_BearerConfig
->
mac_LogicalChannelConfig
=
calloc
(
1
,
sizeof
(
*
RLC_BearerConfig
->
mac_LogicalChannelConfig
));
RLC_BearerConfig
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
=
calloc
(
1
,
sizeof
(
*
RLC_BearerConfig
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
));
RLC_BearerConfig
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
priority
=
1
;
RLC_BearerConfig
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
prioritisedBitRate
=
NR_LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_infinity
;
RLC_BearerConfig
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
bucketSizeDuration
=
NR_LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms50
;
RLC_BearerConfig
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
allowedServingCells
=
NULL
;
RLC_BearerConfig
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
allowedSCS_List
=
NULL
;
RLC_BearerConfig
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
maxPUSCH_Duration
=
NULL
;
RLC_BearerConfig
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
configuredGrantType1Allowed
=
NULL
;
RLC_BearerConfig
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
logicalChannelGroup
=
calloc
(
1
,
sizeof
(
*
RLC_BearerConfig
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
logicalChannelGroup
));
*
RLC_BearerConfig
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
logicalChannelGroup
=
1
;
RLC_BearerConfig
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
schedulingRequestID
=
NULL
;
RLC_BearerConfig
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
logicalChannelSR_Mask
=
false
;
RLC_BearerConfig
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
logicalChannelSR_DelayTimerApplied
=
false
;
RLC_BearerConfig
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
bitRateQueryProhibitTimer
=
NULL
;
nr_rlc_bearer_init
(
RLC_BearerConfig
);
nr_drb_config
(
RLC_BearerConfig
->
rlc_Config
,
NR_RLC_Config_PR_um_Bi_Directional
);
nr_rlc_bearer_init_ul_spec
(
RLC_BearerConfig
->
mac_LogicalChannelConfig
);
Rlc_Bearer_ToAdd_list
=
calloc
(
1
,
sizeof
(
*
Rlc_Bearer_ToAdd_list
));
ASN_SEQUENCE_ADD
(
&
Rlc_Bearer_ToAdd_list
->
list
,
RLC_BearerConfig
);
if
(
ENB_NAS_USE_TUN
){
PROTOCOL_CTXT_SET_BY_MODULE_ID
(
&
ctxt
,
0
,
ENB_FLAG_YES
,
0x1234
,
0
,
0
,
0
);
PROTOCOL_CTXT_SET_BY_MODULE_ID
(
&
ctxt
,
0
,
ENB_FLAG_YES
,
crnti
,
0
,
0
,
0
);
}
else
{
PROTOCOL_CTXT_SET_BY_MODULE_ID
(
&
ctxt
,
0
,
ENB_FLAG_NO
,
0x1234
,
0
,
0
,
0
);
PROTOCOL_CTXT_SET_BY_MODULE_ID
(
&
ctxt
,
0
,
ENB_FLAG_NO
,
crnti
,
0
,
0
,
0
);
}
nr_rrc_pdcp_config_asn1_req
(
...
...
@@ -861,6 +813,9 @@ void nr_DRB_preconfiguration(void)
rbconfig
->
drb_ToReleaseList
,
(
LTE_PMCH_InfoList_r9_t
*
)
NULL
,
Rlc_Bearer_ToAdd_list
);
LOG_D
(
PDCP
,
"%s:%d: done RRC PDCP/RLC ASN1 request for UE rnti %x
\n
"
,
__FUNCTION__
,
__LINE__
,
ctxt
.
rnti
);
}
uint64_t
get_pdcp_optmask
(
void
)
...
...
openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c
View file @
02bb4ac9
...
...
@@ -27,6 +27,7 @@
#include "asn1_utils.h"
#include "nr_rlc_ue_manager.h"
#include "nr_rlc_entity.h"
#include "nr_rlc_oai_api.h"
#include "NR_RLC-BearerConfig.h"
#include "NR_DRB-ToAddMod.h"
#include "NR_DRB-ToAddModList.h"
...
...
@@ -44,6 +45,76 @@ static uint64_t nr_rlc_current_time;
static
int
nr_rlc_current_time_last_frame
;
static
int
nr_rlc_current_time_last_subframe
;
void
nr_rlc_bearer_init
(
NR_RLC_BearerConfig_t
*
RLC_BearerConfig
){
RLC_BearerConfig
->
servedRadioBearer
=
calloc
(
1
,
sizeof
(
*
RLC_BearerConfig
->
servedRadioBearer
));
RLC_BearerConfig
->
reestablishRLC
=
calloc
(
1
,
sizeof
(
*
RLC_BearerConfig
->
reestablishRLC
));
RLC_BearerConfig
->
rlc_Config
=
calloc
(
1
,
sizeof
(
*
RLC_BearerConfig
->
rlc_Config
));
RLC_BearerConfig
->
mac_LogicalChannelConfig
=
calloc
(
1
,
sizeof
(
*
RLC_BearerConfig
->
mac_LogicalChannelConfig
));
RLC_BearerConfig
->
logicalChannelIdentity
=
4
;
RLC_BearerConfig
->
servedRadioBearer
->
present
=
NR_RLC_BearerConfig__servedRadioBearer_PR_drb_Identity
;
RLC_BearerConfig
->
servedRadioBearer
->
choice
.
drb_Identity
=
1
;
*
RLC_BearerConfig
->
reestablishRLC
=
NR_RLC_BearerConfig__reestablishRLC_true
;
}
void
nr_rlc_bearer_init_ul_spec
(
struct
NR_LogicalChannelConfig
*
mac_LogicalChannelConfig
){
mac_LogicalChannelConfig
->
ul_SpecificParameters
=
calloc
(
1
,
sizeof
(
*
mac_LogicalChannelConfig
->
ul_SpecificParameters
));
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
priority
=
1
;
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
prioritisedBitRate
=
NR_LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_infinity
;
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
bucketSizeDuration
=
NR_LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms50
;
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
allowedServingCells
=
NULL
;
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
allowedSCS_List
=
NULL
;
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
maxPUSCH_Duration
=
NULL
;
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
configuredGrantType1Allowed
=
NULL
;
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
logicalChannelGroup
=
calloc
(
1
,
sizeof
(
*
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
logicalChannelGroup
));
*
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
logicalChannelGroup
=
1
;
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
schedulingRequestID
=
NULL
;
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
logicalChannelSR_Mask
=
false
;
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
logicalChannelSR_DelayTimerApplied
=
false
;
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
bitRateQueryProhibitTimer
=
NULL
;
}
void
nr_drb_config
(
struct
NR_RLC_Config
*
rlc_Config
,
NR_RLC_Config_PR
rlc_config_pr
){
switch
(
rlc_config_pr
){
case
NR_RLC_Config_PR_um_Bi_Directional
:
// RLC UM Bi-directional Bearer configuration
rlc_Config
->
choice
.
um_Bi_Directional
=
calloc
(
1
,
sizeof
(
*
rlc_Config
->
choice
.
um_Bi_Directional
));
rlc_Config
->
choice
.
um_Bi_Directional
->
ul_UM_RLC
.
sn_FieldLength
=
calloc
(
1
,
sizeof
(
*
rlc_Config
->
choice
.
um_Bi_Directional
->
ul_UM_RLC
.
sn_FieldLength
));
*
rlc_Config
->
choice
.
um_Bi_Directional
->
ul_UM_RLC
.
sn_FieldLength
=
NR_SN_FieldLengthUM_size12
;
rlc_Config
->
choice
.
um_Bi_Directional
->
dl_UM_RLC
.
sn_FieldLength
=
calloc
(
1
,
sizeof
(
*
rlc_Config
->
choice
.
um_Bi_Directional
->
dl_UM_RLC
.
sn_FieldLength
));
*
rlc_Config
->
choice
.
um_Bi_Directional
->
dl_UM_RLC
.
sn_FieldLength
=
NR_SN_FieldLengthUM_size12
;
rlc_Config
->
choice
.
um_Bi_Directional
->
dl_UM_RLC
.
t_Reassembly
=
NR_T_Reassembly_ms15
;
break
;
case
NR_RLC_Config_PR_am
:
// RLC AM Bearer configuration
rlc_Config
->
choice
.
am
=
calloc
(
1
,
sizeof
(
*
rlc_Config
->
choice
.
am
));
rlc_Config
->
choice
.
am
->
ul_AM_RLC
.
sn_FieldLength
=
calloc
(
1
,
sizeof
(
*
rlc_Config
->
choice
.
am
->
ul_AM_RLC
.
sn_FieldLength
));
*
rlc_Config
->
choice
.
am
->
ul_AM_RLC
.
sn_FieldLength
=
NR_SN_FieldLengthAM_size18
;
rlc_Config
->
choice
.
am
->
ul_AM_RLC
.
t_PollRetransmit
=
NR_T_PollRetransmit_ms45
;
rlc_Config
->
choice
.
am
->
ul_AM_RLC
.
pollPDU
=
NR_PollPDU_p64
;
rlc_Config
->
choice
.
am
->
ul_AM_RLC
.
pollByte
=
NR_PollByte_kB500
;
rlc_Config
->
choice
.
am
->
ul_AM_RLC
.
maxRetxThreshold
=
NR_UL_AM_RLC__maxRetxThreshold_t32
;
rlc_Config
->
choice
.
am
->
dl_AM_RLC
.
sn_FieldLength
=
calloc
(
1
,
sizeof
(
*
rlc_Config
->
choice
.
am
->
dl_AM_RLC
.
sn_FieldLength
));
*
rlc_Config
->
choice
.
am
->
dl_AM_RLC
.
sn_FieldLength
=
NR_SN_FieldLengthAM_size18
;
rlc_Config
->
choice
.
am
->
dl_AM_RLC
.
t_Reassembly
=
NR_T_Reassembly_ms15
;
rlc_Config
->
choice
.
am
->
dl_AM_RLC
.
t_StatusProhibit
=
NR_T_StatusProhibit_ms15
;
break
;
default:
LOG_E
(
RLC
,
"Error in %s: RLC config type %d is not handled
\n
"
,
__FUNCTION__
,
rlc_config_pr
);
break
;
}
rlc_Config
->
present
=
rlc_config_pr
;
}
void
mac_rlc_data_ind
(
const
module_id_t
module_idP
,
const
rnti_t
rntiP
,
...
...
@@ -179,6 +250,7 @@ mac_rlc_status_resp_t mac_rlc_status_ind(
+
buf_stat
.
retx_size
+
buf_stat
.
tx_size
;
}
else
{
LOG_W
(
RLC
,
"[%s] Radio Bearer (channel ID %d) is NULL for UE with rntiP %x
\n
"
,
__FUNCTION__
,
channel_idP
,
rntiP
);
ret
.
bytes_in_buffer
=
0
;
}
...
...
@@ -586,8 +658,7 @@ static void add_srb(int rnti, struct LTE_SRB_ToAddMod *s)
nr_rlc_manager_lock
(
nr_rlc_ue_manager
);
ue
=
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager
,
rnti
);
if
(
ue
->
srb
[
srb_id
-
1
]
!=
NULL
)
{
LOG_D
(
RLC
,
"%s:%d:%s: warning SRB %d already exist for ue %d, do nothing
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
srb_id
,
rnti
);
LOG_W
(
RLC
,
"%s:%d:%s: SRB %d already exists for UE with RNTI %x, do nothing
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
srb_id
,
rnti
);
}
else
{
/* hack: hardcode values for NR */
t_poll_retransmit
=
45
;
...
...
@@ -678,8 +749,7 @@ static void add_drb_am(int rnti, struct NR_DRB_ToAddMod *s, NR_RLC_BearerConfig_
nr_rlc_manager_lock
(
nr_rlc_ue_manager
);
ue
=
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager
,
rnti
);
if
(
ue
->
drb
[
drb_id
-
1
]
!=
NULL
)
{
LOG_D
(
RLC
,
"%s:%d:%s: warning DRB %d already exist for ue %d, do nothing
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
drb_id
,
rnti
);
LOG_W
(
RLC
,
"%s:%d:%s: DRB %d already exists for UE with RNTI %d, do nothing
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
drb_id
,
rnti
);
}
else
{
nr_rlc_am
=
new_nr_rlc_entity_am
(
100000
,
100000
,
...
...
@@ -692,8 +762,7 @@ static void add_drb_am(int rnti, struct NR_DRB_ToAddMod *s, NR_RLC_BearerConfig_
sn_field_length
);
nr_rlc_ue_add_drb_rlc_entity
(
ue
,
drb_id
,
nr_rlc_am
);
LOG_D
(
RLC
,
"%s:%d:%s: added drb %d to ue %d
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
drb_id
,
rnti
);
LOG_D
(
RLC
,
"%s:%d:%s: added drb %d to UE with RNTI %x
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
drb_id
,
rnti
);
}
nr_rlc_manager_unlock
(
nr_rlc_ue_manager
);
}
...
...
@@ -752,8 +821,7 @@ static void add_drb_um(int rnti, struct NR_DRB_ToAddMod *s, NR_RLC_BearerConfig_
nr_rlc_manager_lock
(
nr_rlc_ue_manager
);
ue
=
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager
,
rnti
);
if
(
ue
->
drb
[
drb_id
-
1
]
!=
NULL
)
{
LOG_D
(
RLC
,
"%s:%d:%s: warning DRB %d already exist for ue %d, do nothing
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
drb_id
,
rnti
);
LOG_W
(
RLC
,
"DEBUG add_drb_um %s:%d:%s: warning DRB %d already exist for ue %d, do nothing
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
drb_id
,
rnti
);
}
else
{
nr_rlc_um
=
new_nr_rlc_entity_um
(
1000000
,
1000000
,
...
...
@@ -762,8 +830,7 @@ static void add_drb_um(int rnti, struct NR_DRB_ToAddMod *s, NR_RLC_BearerConfig_
sn_field_length
);
nr_rlc_ue_add_drb_rlc_entity
(
ue
,
drb_id
,
nr_rlc_um
);
LOG_D
(
RLC
,
"%s:%d:%s: added drb %d to ue %d
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
drb_id
,
rnti
);
LOG_D
(
RLC
,
"%s:%d:%s: added drb %d to UE with RNTI %x
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
drb_id
,
rnti
);
}
nr_rlc_manager_unlock
(
nr_rlc_ue_manager
);
}
...
...
@@ -782,6 +849,7 @@ static void add_drb(int rnti, struct NR_DRB_ToAddMod *s, struct NR_RLC_BearerCon
__FILE__
,
__LINE__
,
__FUNCTION__
);
exit
(
1
);
}
LOG_I
(
RLC
,
"%s:%s:%d: added DRB to UE with RNTI %x
\n
"
,
__FILE__
,
__FUNCTION__
,
__LINE__
,
rnti
);
}
/* Dummy function due to dependency from LTE libraries */
...
...
@@ -869,7 +937,7 @@ rlc_op_status_t rrc_rlc_config_req (
exit
(
1
);
}
nr_rlc_manager_lock
(
nr_rlc_ue_manager
);
LOG_D
(
RLC
,
"%s:%d:%s: remove rb %ld (is_srb %d) for UE
%d
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
rb_idP
,
srb_flagP
,
ctxt_pP
->
rnti
);
LOG_D
(
RLC
,
"%s:%d:%s: remove rb %ld (is_srb %d) for UE
RNTI %x
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
rb_idP
,
srb_flagP
,
ctxt_pP
->
rnti
);
ue
=
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager
,
ctxt_pP
->
rnti
);
if
(
srb_flagP
)
{
if
(
ue
->
srb
[
rb_idP
-
1
]
!=
NULL
)
{
...
...
openair2/LAYER2/nr_rlc/nr_rlc_oai_api.h
0 → 100644
View file @
02bb4ac9
/*
* 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 nr_rlc_oai_api.h
* \brief Header file for nr_rlc_oai_api
* \author Guido Casati
* \date 2020
* \email: guido.casati@iis.fraunhofe.de
* \version 1.0
* @ingroup _rlc
*/
#include "NR_RLC-BearerConfig.h"
#include "NR_RLC-Config.h"
#include "NR_LogicalChannelIdentity.h"
#include "NR_RadioBearerConfig.h"
#include "NR_CellGroupConfig.h"
#include "openair2/RRC/NR/nr_rrc_proto.h"
/* from OAI */
#include "pdcp.h"
struct
NR_RLC_Config
;
struct
NR_LogicalChannelConfig
;
void
nr_rlc_bearer_init
(
NR_RLC_BearerConfig_t
*
RLC_BearerConfig
);
void
nr_drb_config
(
struct
NR_RLC_Config
*
rlc_Config
,
NR_RLC_Config_PR
rlc_config_pr
);
void
nr_rlc_bearer_init_ul_spec
(
struct
NR_LogicalChannelConfig
*
mac_LogicalChannelConfig
);
\ No newline at end of file
openair2/LAYER2/nr_rlc/nr_rlc_ue_manager.c
View file @
02bb4ac9
...
...
@@ -85,7 +85,7 @@ nr_rlc_ue_t *nr_rlc_manager_get_ue(nr_rlc_ue_manager_t *_m, int rnti)
if
(
m
->
ue_list
[
i
]
->
rnti
==
rnti
)
return
m
->
ue_list
[
i
];
LOG_D
(
RLC
,
"%s:%d:%s: new UE
%d
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
rnti
);
LOG_D
(
RLC
,
"%s:%d:%s: new UE
with RNTI %x
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
rnti
);
m
->
ue_count
++
;
m
->
ue_list
=
realloc
(
m
->
ue_list
,
sizeof
(
nr_rlc_ue_t
*
)
*
m
->
ue_count
);
...
...
openair2/LAYER2/rlc_v2/rlc_oai_api.c
View file @
02bb4ac9
...
...
@@ -642,8 +642,7 @@ static void add_srb(int rnti, int module_id, struct LTE_SRB_ToAddMod *s)
poll_pdu
,
poll_byte
,
max_retx_threshold
);
rlc_ue_add_srb_rlc_entity
(
ue
,
srb_id
,
rlc_am
);
LOG_D
(
RLC
,
"%s:%d:%s: added srb %d to ue %d
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
srb_id
,
rnti
);
LOG_D
(
RLC
,
"%s:%d:%s: added SRB %d to UE RNTI %x
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
srb_id
,
rnti
);
}
rlc_manager_unlock
(
rlc_ue_manager
);
}
...
...
@@ -720,8 +719,7 @@ static void add_drb_am(int rnti, int module_id, struct LTE_DRB_ToAddMod *s)
poll_pdu
,
poll_byte
,
max_retx_threshold
);
rlc_ue_add_drb_rlc_entity
(
ue
,
drb_id
,
rlc_am
);
LOG_D
(
RLC
,
"%s:%d:%s: added drb %d to ue %d
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
drb_id
,
rnti
);
LOG_D
(
RLC
,
"%s:%d:%s: added DRB %d to UE RNTI %x
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
drb_id
,
rnti
);
}
rlc_manager_unlock
(
rlc_ue_manager
);
}
...
...
@@ -791,8 +789,7 @@ static void add_drb_um(int rnti, int module_id, struct LTE_DRB_ToAddMod *s)
sn_field_length
);
rlc_ue_add_drb_rlc_entity
(
ue
,
drb_id
,
rlc_um
);
LOG_D
(
RLC
,
"%s:%d:%s: added drb %d to ue %d
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
drb_id
,
rnti
);
LOG_D
(
RLC
,
"%s:%d:%s: added DRB %d to UE RNTI %x
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
drb_id
,
rnti
);
}
rlc_manager_unlock
(
rlc_ue_manager
);
}
...
...
@@ -909,8 +906,7 @@ rlc_op_status_t rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt_pP
);
rlc_ue_add_drb_rlc_entity
(
ue
,
drb_id
,
rlc_um
);
LOG_D
(
RLC
,
"%s:%d:%s: added drb %d to ue %d
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
(
int
)
drb_id
,
mbms_rnti
);
LOG_D
(
RLC
,
"%s:%d:%s: added DRB %d to UE RNTI %x
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
(
int
)
drb_id
,
mbms_rnti
);
}
rlc_manager_unlock
(
rlc_ue_manager
);
...
...
openair2/RRC/NR/rrc_gNB.c
View file @
02bb4ac9
...
...
@@ -75,7 +75,7 @@
#include "rrc_eNB_GTPV1U.h"
#include "nr_pdcp/nr_pdcp_entity.h"
#include "pdcp.h"
#include "gtpv1u_eNB_task.h"
...
...
openair2/RRC/NR/rrc_gNB_nsa.c
View file @
02bb4ac9
...
...
@@ -243,12 +243,9 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_
}
}
else
LOG_W
(
RRC
,
"No E-RAB to be added received from SgNB Addition Request message
\n
"
);
}
if
(
m
!=
NULL
)
{
X2AP_ENDC_SGNB_ADDITION_REQ_ACK
(
msg
).
MeNB_ue_x2_id
=
m
->
ue_x2_id
;
X2AP_ENDC_SGNB_ADDITION_REQ_ACK
(
msg
).
SgNB_ue_x2_id
=
ue_context_p
->
ue_context
.
secondaryCellGroup
->
spCellConfig
->
reconfigurationWithSync
->
newUE_Identity
;
//X2AP_ENDC_SGNB_ADDITION_REQ_ACK(msg).rrc_buffer_size = CG_Config_size; //Need to verify correct value for the buffer_size
// Send to X2 entity to transport to MeNB
asn_enc_rval_t
enc_rval
=
uper_encode_to_buffer
(
&
asn_DEF_NR_CG_Config
,
...
...
@@ -258,6 +255,8 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_
1024
);
X2AP_ENDC_SGNB_ADDITION_REQ_ACK
(
msg
).
rrc_buffer_size
=
(
enc_rval
.
encoded
+
7
)
>>
3
;
itti_send_msg_to_task
(
TASK_X2AP
,
ENB_MODULE_ID_TO_INSTANCE
(
0
),
msg
);
//Check right id instead of hardcoding
}
else
if
(
get_softmodem_params
()
->
do_ra
)
{
PROTOCOL_CTXT_SET_BY_MODULE_ID
(
&
ctxt
,
rrc
->
module_id
,
GNB_FLAG_YES
,
ue_context_p
->
ue_id_rnti
,
0
,
0
,
rrc
->
module_id
);
}
rrc
->
Nb_ue
++
;
...
...
@@ -272,6 +271,15 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_
ue_context_p
->
ue_id_rnti
,
ue_context_p
->
ue_context
.
secondaryCellGroup
);
if
(
m
==
NULL
){
LOG_W
(
RRC
,
"Calling RRC PDCP/RLC ASN1 request functions for protocol context %p with module_id %d, rnti %x, frame %d, subframe %d eNB_index %d
\n
"
,
&
ctxt
,
ctxt
.
module_id
,
ctxt
.
rnti
,
ctxt
.
frame
,
ctxt
.
subframe
,
ctxt
.
eNB_index
);
}
nr_rrc_pdcp_config_asn1_req
(
&
ctxt
,
(
NR_SRB_ToAddModList_t
*
)
NULL
,
...
...
@@ -292,6 +300,8 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_
(
LTE_PMCH_InfoList_r9_t
*
)
NULL
,
ue_context_p
->
ue_context
.
secondaryCellGroup
->
rlc_BearerToAddModList
);
LOG_D
(
RRC
,
"%s:%d: done RRC PDCP/RLC ASN1 request for UE rnti %x
\n
"
,
__FUNCTION__
,
__LINE__
,
ctxt
.
rnti
);
}
void
rrc_remove_nsa_user
(
gNB_RRC_INST
*
rrc
,
int
rnti
)
{
...
...
openair2/RRC/NR/rrc_gNB_reconfig.c
View file @
02bb4ac9
...
...
@@ -43,6 +43,7 @@
#include "common/utils/nr/nr_common.h"
#include "SIMULATION/TOOLS/sim.h"
#include "executables/softmodem-common.h"
#include "LAYER2/nr_rlc/nr_rlc_oai_api.h"
#define false 0
#define true 1
...
...
@@ -77,59 +78,13 @@ void fill_default_secondaryCellGroup(NR_ServingCellConfigCommon_t *servingcellco
memset
(
secondaryCellGroup
,
0
,
sizeof
(
NR_CellGroupConfig_t
));
secondaryCellGroup
->
cellGroupId
=
scg_id
;
NR_RLC_BearerConfig_t
*
RLC_BearerConfig
=
calloc
(
1
,
sizeof
(
*
RLC_BearerConfig
));
RLC_BearerConfig
->
logicalChannelIdentity
=
4
;
RLC_BearerConfig
->
servedRadioBearer
=
calloc
(
1
,
sizeof
(
*
RLC_BearerConfig
->
servedRadioBearer
));
RLC_BearerConfig
->
servedRadioBearer
->
present
=
NR_RLC_BearerConfig__servedRadioBearer_PR_drb_Identity
;
RLC_BearerConfig
->
servedRadioBearer
->
choice
.
drb_Identity
=
1
;
RLC_BearerConfig
->
reestablishRLC
=
calloc
(
1
,
sizeof
(
*
RLC_BearerConfig
->
reestablishRLC
));
*
RLC_BearerConfig
->
reestablishRLC
=
NR_RLC_BearerConfig__reestablishRLC_true
;
RLC_BearerConfig
->
rlc_Config
=
calloc
(
1
,
sizeof
(
*
RLC_BearerConfig
->
rlc_Config
));
nr_rlc_bearer_init
(
RLC_BearerConfig
);
if
(
get_softmodem_params
()
->
do_ra
)
nr_drb_config
(
RLC_BearerConfig
->
rlc_Config
,
NR_RLC_Config_PR_um_Bi_Directional
);
else
nr_drb_config
(
RLC_BearerConfig
->
rlc_Config
,
NR_RLC_Config_PR_am
);
nr_rlc_bearer_init_ul_spec
(
RLC_BearerConfig
->
mac_LogicalChannelConfig
);
#if 0
// RLC UM Bi-directional Bearer configuration
RLC_BearerConfig->rlc_Config->present = NR_RLC_Config_PR_um_Bi_Directional;
RLC_BearerConfig->rlc_Config->choice.um_Bi_Directional = calloc(1,sizeof(*RLC_BearerConfig->rlc_Config->choice.um_Bi_Directional));
RLC_BearerConfig->rlc_Config->choice.um_Bi_Directional->ul_UM_RLC.sn_FieldLength = calloc(1,sizeof(*RLC_BearerConfig->rlc_Config->choice.um_Bi_Directional->ul_UM_RLC.sn_FieldLength));
*RLC_BearerConfig->rlc_Config->choice.um_Bi_Directional->ul_UM_RLC.sn_FieldLength = NR_SN_FieldLengthUM_size12;
RLC_BearerConfig->rlc_Config->choice.um_Bi_Directional->dl_UM_RLC.sn_FieldLength = calloc(1,sizeof(*RLC_BearerConfig->rlc_Config->choice.um_Bi_Directional->dl_UM_RLC.sn_FieldLength));
*RLC_BearerConfig->rlc_Config->choice.um_Bi_Directional->dl_UM_RLC.sn_FieldLength = NR_SN_FieldLengthUM_size12;
RLC_BearerConfig->rlc_Config->choice.um_Bi_Directional->dl_UM_RLC.t_Reassembly = NR_T_Reassembly_ms15;
#else
// RLC AM Bearer configuration
RLC_BearerConfig
->
rlc_Config
->
present
=
NR_RLC_Config_PR_am
;
RLC_BearerConfig
->
rlc_Config
->
choice
.
am
=
calloc
(
1
,
sizeof
(
*
RLC_BearerConfig
->
rlc_Config
->
choice
.
am
));
RLC_BearerConfig
->
rlc_Config
->
choice
.
am
->
ul_AM_RLC
.
sn_FieldLength
=
calloc
(
1
,
sizeof
(
*
RLC_BearerConfig
->
rlc_Config
->
choice
.
am
->
ul_AM_RLC
.
sn_FieldLength
));
*
RLC_BearerConfig
->
rlc_Config
->
choice
.
am
->
ul_AM_RLC
.
sn_FieldLength
=
NR_SN_FieldLengthAM_size18
;
RLC_BearerConfig
->
rlc_Config
->
choice
.
am
->
ul_AM_RLC
.
t_PollRetransmit
=
NR_T_PollRetransmit_ms45
;
RLC_BearerConfig
->
rlc_Config
->
choice
.
am
->
ul_AM_RLC
.
pollPDU
=
NR_PollPDU_p64
;
RLC_BearerConfig
->
rlc_Config
->
choice
.
am
->
ul_AM_RLC
.
pollByte
=
NR_PollByte_kB500
;
RLC_BearerConfig
->
rlc_Config
->
choice
.
am
->
ul_AM_RLC
.
maxRetxThreshold
=
NR_UL_AM_RLC__maxRetxThreshold_t32
;
RLC_BearerConfig
->
rlc_Config
->
choice
.
am
->
dl_AM_RLC
.
sn_FieldLength
=
calloc
(
1
,
sizeof
(
*
RLC_BearerConfig
->
rlc_Config
->
choice
.
am
->
dl_AM_RLC
.
sn_FieldLength
));
*
RLC_BearerConfig
->
rlc_Config
->
choice
.
am
->
dl_AM_RLC
.
sn_FieldLength
=
NR_SN_FieldLengthAM_size18
;
RLC_BearerConfig
->
rlc_Config
->
choice
.
am
->
dl_AM_RLC
.
t_Reassembly
=
NR_T_Reassembly_ms15
;
RLC_BearerConfig
->
rlc_Config
->
choice
.
am
->
dl_AM_RLC
.
t_StatusProhibit
=
NR_T_StatusProhibit_ms15
;
#endif
RLC_BearerConfig
->
mac_LogicalChannelConfig
=
calloc
(
1
,
sizeof
(
*
RLC_BearerConfig
->
mac_LogicalChannelConfig
));
RLC_BearerConfig
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
=
calloc
(
1
,
sizeof
(
*
RLC_BearerConfig
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
));
RLC_BearerConfig
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
priority
=
1
;
RLC_BearerConfig
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
prioritisedBitRate
=
NR_LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_infinity
;
RLC_BearerConfig
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
bucketSizeDuration
=
NR_LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms50
;
RLC_BearerConfig
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
allowedServingCells
=
NULL
;
RLC_BearerConfig
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
allowedSCS_List
=
NULL
;
RLC_BearerConfig
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
maxPUSCH_Duration
=
NULL
;
RLC_BearerConfig
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
configuredGrantType1Allowed
=
NULL
;
RLC_BearerConfig
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
logicalChannelGroup
=
calloc
(
1
,
sizeof
(
*
RLC_BearerConfig
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
logicalChannelGroup
));
*
RLC_BearerConfig
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
logicalChannelGroup
=
1
;
RLC_BearerConfig
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
schedulingRequestID
=
NULL
;
RLC_BearerConfig
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
logicalChannelSR_Mask
=
false
;
RLC_BearerConfig
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
logicalChannelSR_DelayTimerApplied
=
false
;
RLC_BearerConfig
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
bitRateQueryProhibitTimer
=
NULL
;
secondaryCellGroup
->
rlc_BearerToAddModList
=
calloc
(
1
,
sizeof
(
*
secondaryCellGroup
->
rlc_BearerToAddModList
));
ASN_SEQUENCE_ADD
(
&
secondaryCellGroup
->
rlc_BearerToAddModList
->
list
,
RLC_BearerConfig
);
secondaryCellGroup
->
mac_CellGroupConfig
=
calloc
(
1
,
sizeof
(
*
secondaryCellGroup
->
mac_CellGroupConfig
));
...
...
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