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
e3e158a7
Commit
e3e158a7
authored
Jun 13, 2023
by
francescomani
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
RRC go to IDLE
parent
4b019293
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
289 additions
and
101 deletions
+289
-101
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
+0
-27
openair2/LAYER2/NR_MAC_UE/config_ue.c
openair2/LAYER2/NR_MAC_UE/config_ue.c
+26
-0
openair2/LAYER2/NR_MAC_UE/mac_defs.h
openair2/LAYER2/NR_MAC_UE/mac_defs.h
+0
-7
openair2/LAYER2/NR_MAC_UE/mac_proto.h
openair2/LAYER2/NR_MAC_UE/mac_proto.h
+7
-0
openair2/LAYER2/NR_MAC_UE/main_ue_nr.c
openair2/LAYER2/NR_MAC_UE/main_ue_nr.c
+84
-14
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
+0
-47
openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
+1
-3
openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.h
openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.h
+1
-1
openair2/RRC/NR_UE/rrc_UE.c
openair2/RRC/NR_UE/rrc_UE.c
+157
-1
openair2/RRC/NR_UE/rrc_defs.h
openair2/RRC/NR_UE/rrc_defs.h
+13
-1
No files found.
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
View file @
e3e158a7
...
@@ -4277,33 +4277,6 @@ void get_type0_PDCCH_CSS_config_parameters(NR_Type0_PDCCH_CSS_config_t *type0_PD
...
@@ -4277,33 +4277,6 @@ void get_type0_PDCCH_CSS_config_parameters(NR_Type0_PDCCH_CSS_config_t *type0_PD
AssertFatal
(
type0_PDCCH_CSS_config
->
num_symbols
!=
-
1
,
"Type0 PDCCH coreset num_symbols undefined"
);
AssertFatal
(
type0_PDCCH_CSS_config
->
num_symbols
!=
-
1
,
"Type0 PDCCH coreset num_symbols undefined"
);
AssertFatal
(
type0_PDCCH_CSS_config
->
rb_offset
!=
-
1
,
"Type0 PDCCH coreset rb_offset undefined"
);
AssertFatal
(
type0_PDCCH_CSS_config
->
rb_offset
!=
-
1
,
"Type0 PDCCH coreset rb_offset undefined"
);
//uint32_t cell_id = 0; // obtain from L1 later
//mac->type0_pdcch_dci_config.coreset.rb_start = rb_offset;
//mac->type0_pdcch_dci_config.coreset.rb_end = rb_offset + num_rbs - 1;
// uint64_t mask = 0x0;
// uint8_t i;
// for(i=0; i<(type0_PDCCH_CSS_config->num_rbs/6); ++i){ // 38.331 Each bit corresponds a group of 6 RBs
// mask = mask >> 1;
// mask = mask | 0x100000000000;
// }
//LOG_I(MAC,">>>>>>>>mask %x num_rbs %d rb_offset %d\n", mask, num_rbs, rb_offset);
// mac->type0_pdcch_dci_config.coreset.frequency_domain_resource = mask;
// mac->type0_pdcch_dci_config.coreset.rb_offset = rb_offset; // additional parameter other than coreset
//
// //mac->type0_pdcch_dci_config.type0_pdcch_coreset.duration = num_symbols;
// mac->type0_pdcch_dci_config.coreset.cce_reg_mapping_type = CCE_REG_MAPPING_TYPE_INTERLEAVED;
// mac->type0_pdcch_dci_config.coreset.cce_reg_interleaved_reg_bundle_size = 6; // L 38.211 7.3.2.2
// mac->type0_pdcch_dci_config.coreset.cce_reg_interleaved_interleaver_size = 2; // R 38.211 7.3.2.2
// mac->type0_pdcch_dci_config.coreset.cce_reg_interleaved_shift_index = cell_id;
// mac->type0_pdcch_dci_config.coreset.precoder_granularity = PRECODER_GRANULARITY_SAME_AS_REG_BUNDLE;
// mac->type0_pdcch_dci_config.coreset.pdcch_dmrs_scrambling_id = cell_id;
// type0-pdcch search space
// type0-pdcch search space
float
big_o
=
0
.
0
f
;
float
big_o
=
0
.
0
f
;
float
big_m
=
0
.
0
f
;
float
big_m
=
0
.
0
f
;
...
...
openair2/LAYER2/NR_MAC_UE/config_ue.c
View file @
e3e158a7
...
@@ -1351,6 +1351,32 @@ static void configure_common_BWP_ul(NR_UE_MAC_INST_t *mac, int bwp_id, NR_BWP_Up
...
@@ -1351,6 +1351,32 @@ static void configure_common_BWP_ul(NR_UE_MAC_INST_t *mac, int bwp_id, NR_BWP_Up
}
}
}
}
void
nr_rrc_mac_config_req_reset
(
module_id_t
module_id
)
{
NR_UE_MAC_INST_t
*
mac
=
get_mac_inst
(
module_id
);
reset_mac_inst
(
mac
);
}
void
nr_rrc_mac_config_req_release
(
module_id_t
module_id
)
{
NR_UE_MAC_INST_t
*
mac
=
get_mac_inst
(
module_id
);
reset_ra
(
&
mac
->
ra
);
release_mac_configuration
(
mac
);
mac
->
first_sync_frame
=
-
1
;
mac
->
get_sib1
=
false
;
mac
->
phy_config_request_sent
=
false
;
mac
->
state
=
UE_NOT_SYNC
;
// Sending to PHY a request to resync
// with no target cell ID
mac
->
synch_request
.
Mod_id
=
module_id
;
mac
->
synch_request
.
CC_id
=
0
;
mac
->
synch_request
.
synch_req
.
target_Nid_cell
=
-
1
;
mac
->
if_module
->
synch_request
(
&
mac
->
synch_request
);
}
void
nr_rrc_mac_config_req_sib1
(
module_id_t
module_id
,
void
nr_rrc_mac_config_req_sib1
(
module_id_t
module_id
,
int
cc_idP
,
int
cc_idP
,
NR_SI_SchedulingInfo_t
*
si_SchedulingInfo
,
NR_SI_SchedulingInfo_t
*
si_SchedulingInfo
,
...
...
openair2/LAYER2/NR_MAC_UE/mac_defs.h
View file @
e3e158a7
...
@@ -472,13 +472,6 @@ typedef struct {
...
@@ -472,13 +472,6 @@ typedef struct {
bool
phy_config_request_sent
;
bool
phy_config_request_sent
;
frame_type_t
frame_type
;
frame_type_t
frame_type
;
/// Type0-PDCCH seach space
fapi_nr_dl_config_dci_dl_pdu_rel15_t
type0_pdcch_dci_config
;
uint32_t
type0_pdcch_ss_mux_pattern
;
int
type0_pdcch_ss_sfn_c
;
uint32_t
type0_pdcch_ss_n_c
;
uint32_t
type0_pdcch_consecutive_slots
;
/* PDUs */
/* PDUs */
/// Outgoing CCCH pdu for PHY
/// Outgoing CCCH pdu for PHY
CCCH_PDU
CCCH_pdu
;
CCCH_PDU
CCCH_pdu
;
...
...
openair2/LAYER2/NR_MAC_UE/mac_proto.h
View file @
e3e158a7
...
@@ -136,6 +136,8 @@ void nr_ue_mac_default_configs(NR_UE_MAC_INST_t *mac);
...
@@ -136,6 +136,8 @@ void nr_ue_mac_default_configs(NR_UE_MAC_INST_t *mac);
void
nr_ue_decode_mib
(
module_id_t
module_id
,
int
cc_id
);
void
nr_ue_decode_mib
(
module_id_t
module_id
,
int
cc_id
);
void
release_common_ss_cset
(
NR_BWP_PDCCH_t
*
pdcch
);
/**\brief decode SIB1 and other SIs pdus in NR_UE, from if_module dl_ind
/**\brief decode SIB1 and other SIs pdus in NR_UE, from if_module dl_ind
\param module_id module id
\param module_id module id
\param cc_id component carrier id
\param cc_id component carrier id
...
@@ -168,6 +170,9 @@ void nr_rrc_mac_config_req_sib1(module_id_t module_id,
...
@@ -168,6 +170,9 @@ void nr_rrc_mac_config_req_sib1(module_id_t module_id,
NR_SI_SchedulingInfo_t
*
si_SchedulingInfo
,
NR_SI_SchedulingInfo_t
*
si_SchedulingInfo
,
NR_ServingCellConfigCommonSIB_t
*
scc
);
NR_ServingCellConfigCommonSIB_t
*
scc
);
void
nr_rrc_mac_config_req_reset
(
module_id_t
module_id
);
void
nr_rrc_mac_config_req_release
(
module_id_t
module_id
);
/**\brief initialization NR UE MAC instance(s), total number of MAC instance based on NB_NR_UE_MAC_INST*/
/**\brief initialization NR UE MAC instance(s), total number of MAC instance based on NB_NR_UE_MAC_INST*/
NR_UE_MAC_INST_t
*
nr_l2_init_ue
();
NR_UE_MAC_INST_t
*
nr_l2_init_ue
();
...
@@ -176,6 +181,8 @@ NR_UE_MAC_INST_t * nr_l2_init_ue();
...
@@ -176,6 +181,8 @@ NR_UE_MAC_INST_t * nr_l2_init_ue();
NR_UE_MAC_INST_t
*
get_mac_inst
(
module_id_t
module_id
);
NR_UE_MAC_INST_t
*
get_mac_inst
(
module_id_t
module_id
);
void
reset_mac_inst
(
NR_UE_MAC_INST_t
*
nr_mac
);
void
reset_mac_inst
(
NR_UE_MAC_INST_t
*
nr_mac
);
void
reset_ra
(
RA_config_t
*
ra
);
void
release_mac_configuration
(
NR_UE_MAC_INST_t
*
mac
);
/**\brief called at each slot, slot length based on numerology. now use u=0, scs=15kHz, slot=1ms
/**\brief called at each slot, slot length based on numerology. now use u=0, scs=15kHz, slot=1ms
performs BSR/SR/PHR procedures, random access procedure handler and DLSCH/ULSCH procedures.
performs BSR/SR/PHR procedures, random access procedure handler and DLSCH/ULSCH procedures.
...
...
openair2/LAYER2/NR_MAC_UE/main_ue_nr.c
View file @
e3e158a7
...
@@ -60,27 +60,72 @@ void send_msg3_rrc_request(module_id_t mod_id, int rnti)
...
@@ -60,27 +60,72 @@ void send_msg3_rrc_request(module_id_t mod_id, int rnti)
nr_mac_rrc_msg3_ind
(
mod_id
,
rnti
);
nr_mac_rrc_msg3_ind
(
mod_id
,
rnti
);
}
}
NR_UE_MAC_INST_t
*
nr_l2_init_ue
(
)
void
nr_ue_init_mac
(
module_id_t
module_idP
)
{
{
LOG_I
(
NR_MAC
,
"MAIN: init UE MAC functions
\n
"
);
LOG_I
(
NR_MAC
,
"[UE%d] Applying default macMainConfig
\n
"
,
module_idP
);
//init mac here
NR_UE_MAC_INST_t
*
mac
=
get_mac_inst
(
module_idP
);
nr_ue_mac_inst
=
(
NR_UE_MAC_INST_t
*
)
calloc
(
NB_NR_UE_MAC_INST
,
sizeof
(
NR_UE_MAC_INST_t
));
nr_ue_mac_default_configs
(
mac
);
mac
->
first_sync_frame
=
-
1
;
mac
->
get_sib1
=
false
;
mac
->
get_otherSI
=
false
;
mac
->
phy_config_request_sent
=
false
;
memset
(
&
mac
->
phy_config
,
0
,
sizeof
(
mac
->
phy_config
));
mac
->
state
=
UE_NOT_SYNC
;
mac
->
si_window_start
=
-
1
;
mac
->
servCellIndex
=
0
;
}
for
(
int
j
=
0
;
j
<
NB_NR_UE_MAC_INST
;
j
++
)
void
nr_ue_mac_default_configs
(
NR_UE_MAC_INST_t
*
mac
)
nr_ue_init_mac
(
j
);
{
// default values as defined in 38.331 sec 9.2.2
mac
->
scheduling_info
.
retxBSR_Timer
=
NR_BSR_Config__retxBSR_Timer_sf10240
;
mac
->
scheduling_info
.
periodicBSR_Timer
=
NR_BSR_Config__periodicBSR_Timer_infinity
;
mac
->
scheduling_info
.
SR_COUNTER
=
0
;
mac
->
scheduling_info
.
SR_pending
=
0
;
mac
->
scheduling_info
.
sr_ProhibitTimer
=
0
;
mac
->
scheduling_info
.
sr_ProhibitTimer_Running
=
0
;
mac
->
scheduling_info
.
sr_id
=
-
1
;
// invalid init value
// set init value 0xFFFF, make sure periodic timer and retx time counters are NOT active, after bsr transmission set the value
// configured by the NW.
mac
->
scheduling_info
.
periodicBSR_SF
=
MAC_UE_BSR_TIMER_NOT_RUNNING
;
mac
->
scheduling_info
.
retxBSR_SF
=
MAC_UE_BSR_TIMER_NOT_RUNNING
;
mac
->
BSR_reporting_active
=
BSR_TRIGGER_NONE
;
for
(
int
i
=
0
;
i
<
NR_MAX_NUM_LCID
;
i
++
)
{
LOG_D
(
NR_MAC
,
"Applying default logical channel config for LCGID %d
\n
"
,
i
);
mac
->
scheduling_info
.
lc_sched_info
[
i
].
Bj
=
-
1
;
mac
->
scheduling_info
.
lc_sched_info
[
i
].
bucket_size
=
-
1
;
mac
->
scheduling_info
.
lc_sched_info
[
i
].
LCGID
=
0
;
// defaults to 0 irrespective of SRB or DRB
mac
->
scheduling_info
.
lc_sched_info
[
i
].
LCID_status
=
LCID_EMPTY
;
mac
->
scheduling_info
.
lc_sched_info
[
i
].
LCID_buffer_remain
=
0
;
for
(
int
k
=
0
;
k
<
NR_MAX_HARQ_PROCESSES
;
k
++
)
mac
->
UL_ndi
[
k
]
=
-
1
;
// initialize to invalid value
}
memset
(
&
mac
->
ssb_measurements
,
0
,
sizeof
(
mac
->
ssb_measurements
));
memset
(
&
mac
->
ul_time_alignment
,
0
,
sizeof
(
mac
->
ul_time_alignment
));
}
if
(
get_softmodem_params
()
->
sa
)
NR_UE_MAC_INST_t
*
nr_l2_init_ue
()
ue_init_config_request
(
nr_ue_mac_inst
,
get_softmodem_params
()
->
numerology
);
{
//init mac here
nr_ue_mac_inst
=
(
NR_UE_MAC_INST_t
*
)
calloc
(
NB_NR_UE_MAC_INST
,
sizeof
(
NR_UE_MAC_INST_t
));
int
rc
=
rlc_module_init
(
0
);
for
(
int
j
=
0
;
j
<
NB_NR_UE_MAC_INST
;
j
++
)
AssertFatal
(
rc
==
0
,
"%s: Could not initialize RLC layer
\n
"
,
__FUNCTION__
);
nr_ue_init_mac
(
j
);
return
(
nr_ue_mac_inst
);
if
(
get_softmodem_params
()
->
sa
)
ue_init_config_request
(
nr_ue_mac_inst
,
get_softmodem_params
()
->
numerology
);
int
rc
=
rlc_module_init
(
0
);
AssertFatal
(
rc
==
0
,
"%s: Could not initialize RLC layer
\n
"
,
__FUNCTION__
);
return
(
nr_ue_mac_inst
);
}
}
NR_UE_MAC_INST_t
*
get_mac_inst
(
module_id_t
module_id
)
NR_UE_MAC_INST_t
*
get_mac_inst
(
module_id_t
module_id
)
{
{
return
&
nr_ue_mac_inst
[(
int
)
module_id
];
return
&
nr_ue_mac_inst
[(
int
)
module_id
];
}
}
void
reset_mac_inst
(
NR_UE_MAC_INST_t
*
nr_mac
)
void
reset_mac_inst
(
NR_UE_MAC_INST_t
*
nr_mac
)
...
@@ -133,3 +178,28 @@ void reset_mac_inst(NR_UE_MAC_INST_t *nr_mac)
...
@@ -133,3 +178,28 @@ void reset_mac_inst(NR_UE_MAC_INST_t *nr_mac)
// reset BFI_COUNTER
// reset BFI_COUNTER
// TODO beam failure procedure not implemented
// TODO beam failure procedure not implemented
}
}
void
release_mac_configuration
(
NR_UE_MAC_INST_t
*
mac
)
{
if
(
mac
->
mib
)
ASN_STRUCT_FREE
(
asn_DEF_NR_MIB
,
mac
->
mib
);
for
(
int
i
=
0
;
i
<
5
;
i
++
)
{
NR_BWP_PDCCH_t
*
pdcch
=
&
mac
->
config_BWP_PDCCH
[
5
];
release_common_ss_cset
(
pdcch
);
for
(
int
j
=
0
;
j
<
pdcch
->
list_Coreset
.
count
;
j
++
)
asn_sequence_del
(
&
pdcch
->
list_Coreset
,
j
,
1
);
for
(
int
j
=
0
;
j
<
pdcch
->
list_SS
.
count
;
j
++
)
asn_sequence_del
(
&
pdcch
->
list_SS
,
j
,
1
);
}
memset
(
&
mac
->
ssb_measurements
,
0
,
sizeof
(
mac
->
ssb_measurements
));
memset
(
&
mac
->
csirs_measurements
,
0
,
sizeof
(
mac
->
csirs_measurements
));
memset
(
&
mac
->
ul_time_alignment
,
0
,
sizeof
(
mac
->
ul_time_alignment
));
}
void
reset_ra
(
RA_config_t
*
ra
)
{
if
(
ra
->
rach_ConfigDedicated
)
ASN_STRUCT_FREE
(
asn_DEF_NR_RACH_ConfigDedicated
,
ra
->
rach_ConfigDedicated
);
memset
(
ra
,
0
,
sizeof
(
RA_config_t
));
}
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
View file @
e3e158a7
...
@@ -158,53 +158,6 @@ static uint8_t nr_extract_dci_info(NR_UE_MAC_INST_t *mac,
...
@@ -158,53 +158,6 @@ static uint8_t nr_extract_dci_info(NR_UE_MAC_INST_t *mac,
dci_pdu_rel15_t
*
dci_pdu_rel15
,
dci_pdu_rel15_t
*
dci_pdu_rel15
,
int
slot
);
int
slot
);
void
nr_ue_init_mac
(
module_id_t
module_idP
)
{
LOG_I
(
NR_MAC
,
"[UE%d] Applying default macMainConfig
\n
"
,
module_idP
);
NR_UE_MAC_INST_t
*
mac
=
get_mac_inst
(
module_idP
);
nr_ue_mac_default_configs
(
mac
);
mac
->
first_sync_frame
=
-
1
;
mac
->
get_sib1
=
false
;
mac
->
get_otherSI
=
false
;
mac
->
phy_config_request_sent
=
false
;
memset
(
&
mac
->
phy_config
,
0
,
sizeof
(
mac
->
phy_config
));
mac
->
state
=
UE_NOT_SYNC
;
mac
->
si_window_start
=
-
1
;
mac
->
servCellIndex
=
0
;
}
void
nr_ue_mac_default_configs
(
NR_UE_MAC_INST_t
*
mac
)
{
// default values as defined in 38.331 sec 9.2.2
mac
->
scheduling_info
.
retxBSR_Timer
=
NR_BSR_Config__retxBSR_Timer_sf10240
;
mac
->
scheduling_info
.
periodicBSR_Timer
=
NR_BSR_Config__periodicBSR_Timer_infinity
;
mac
->
scheduling_info
.
SR_COUNTER
=
0
;
mac
->
scheduling_info
.
SR_pending
=
0
;
mac
->
scheduling_info
.
sr_ProhibitTimer
=
0
;
mac
->
scheduling_info
.
sr_ProhibitTimer_Running
=
0
;
mac
->
scheduling_info
.
sr_id
=
-
1
;
// invalid init value
// set init value 0xFFFF, make sure periodic timer and retx time counters are NOT active, after bsr transmission set the value
// configured by the NW.
mac
->
scheduling_info
.
periodicBSR_SF
=
MAC_UE_BSR_TIMER_NOT_RUNNING
;
mac
->
scheduling_info
.
retxBSR_SF
=
MAC_UE_BSR_TIMER_NOT_RUNNING
;
mac
->
BSR_reporting_active
=
BSR_TRIGGER_NONE
;
for
(
int
i
=
0
;
i
<
NR_MAX_NUM_LCID
;
i
++
)
{
LOG_D
(
NR_MAC
,
"Applying default logical channel config for LCGID %d
\n
"
,
i
);
mac
->
scheduling_info
.
lc_sched_info
[
i
].
Bj
=
-
1
;
mac
->
scheduling_info
.
lc_sched_info
[
i
].
bucket_size
=
-
1
;
mac
->
scheduling_info
.
lc_sched_info
[
i
].
LCGID
=
0
;
// defaults to 0 irrespective of SRB or DRB
mac
->
scheduling_info
.
lc_sched_info
[
i
].
LCID_status
=
LCID_EMPTY
;
mac
->
scheduling_info
.
lc_sched_info
[
i
].
LCID_buffer_remain
=
0
;
for
(
int
k
=
0
;
k
<
NR_MAX_HARQ_PROCESSES
;
k
++
)
mac
->
UL_ndi
[
k
]
=
-
1
;
// initialize to invalid value
}
memset
(
&
mac
->
ssb_measurements
,
0
,
sizeof
(
mac
->
ssb_measurements
));
memset
(
&
mac
->
ul_time_alignment
,
0
,
sizeof
(
mac
->
ul_time_alignment
));
}
int
get_rnti_type
(
NR_UE_MAC_INST_t
*
mac
,
uint16_t
rnti
)
int
get_rnti_type
(
NR_UE_MAC_INST_t
*
mac
,
uint16_t
rnti
)
{
{
...
...
openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
View file @
e3e158a7
...
@@ -958,13 +958,11 @@ bool pdcp_remove_UE(const protocol_ctxt_t *const ctxt_pP)
...
@@ -958,13 +958,11 @@ bool pdcp_remove_UE(const protocol_ctxt_t *const ctxt_pP)
abort
();
abort
();
}
}
bool
nr_pdcp_remove_UE
(
ue_id_t
ue_id
)
void
nr_pdcp_remove_UE
(
ue_id_t
ue_id
)
{
{
nr_pdcp_manager_lock
(
nr_pdcp_ue_manager
);
nr_pdcp_manager_lock
(
nr_pdcp_ue_manager
);
nr_pdcp_manager_remove_ue
(
nr_pdcp_ue_manager
,
ue_id
);
nr_pdcp_manager_remove_ue
(
nr_pdcp_ue_manager
,
ue_id
);
nr_pdcp_manager_unlock
(
nr_pdcp_ue_manager
);
nr_pdcp_manager_unlock
(
nr_pdcp_ue_manager
);
return
1
;
}
}
/* hack: dummy function needed due to LTE dependencies */
/* hack: dummy function needed due to LTE dependencies */
...
...
openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.h
View file @
e3e158a7
...
@@ -63,7 +63,7 @@ void add_drb(int is_gnb,
...
@@ -63,7 +63,7 @@ void add_drb(int is_gnb,
void
nr_DRB_preconfiguration
(
ue_id_t
crntiMaybeUEid
);
void
nr_DRB_preconfiguration
(
ue_id_t
crntiMaybeUEid
);
bool
nr_pdcp_remove_UE
(
ue_id_t
ue_id
);
void
nr_pdcp_remove_UE
(
ue_id_t
ue_id
);
void
nr_pdcp_reestablishment
(
ue_id_t
ue_id
,
int
rb_id
,
bool
srb_flag
);
void
nr_pdcp_reestablishment
(
ue_id_t
ue_id
,
int
rb_id
,
bool
srb_flag
);
void
nr_pdcp_suspend_srb
(
ue_id_t
ue_id
,
int
srb_id
);
void
nr_pdcp_suspend_srb
(
ue_id_t
ue_id
,
int
srb_id
);
...
...
openair2/RRC/NR_UE/rrc_UE.c
View file @
e3e158a7
...
@@ -707,7 +707,6 @@ static int8_t nr_rrc_ue_decode_NR_BCCH_DL_SCH_Message(instance_t instance,
...
@@ -707,7 +707,6 @@ static int8_t nr_rrc_ue_decode_NR_BCCH_DL_SCH_Message(instance_t instance,
nr_rrc_configure_default_SI
(
SI_info
,
sib1
);
nr_rrc_configure_default_SI
(
SI_info
,
sib1
);
// configure timers and constant
// configure timers and constant
nr_rrc_set_sib1_timers_and_constants
(
&
rrc
->
timers_and_constants
,
sib1
);
nr_rrc_set_sib1_timers_and_constants
(
&
rrc
->
timers_and_constants
,
sib1
);
// take ServingCellConfigCommon and configure L1/L2
nr_rrc_mac_config_req_sib1
(
instance
,
0
,
sib1
->
si_SchedulingInfo
,
sib1
->
servingCellConfigCommon
);
nr_rrc_mac_config_req_sib1
(
instance
,
0
,
sib1
->
si_SchedulingInfo
,
sib1
->
servingCellConfigCommon
);
break
;
break
;
case
NR_BCCH_DL_SCH_MessageType__c1_PR_systemInformation
:
case
NR_BCCH_DL_SCH_MessageType__c1_PR_systemInformation
:
...
@@ -1847,6 +1846,163 @@ static void process_lte_nsa_msg(NR_UE_RRC_INST_t *rrc, nsa_msg_t *msg, int msg_l
...
@@ -1847,6 +1846,163 @@ static void process_lte_nsa_msg(NR_UE_RRC_INST_t *rrc, nsa_msg_t *msg, int msg_l
}
}
}
}
void
nr_rrc_going_to_IDLE
(
instance_t
instance
,
NR_RRCRelease_t
*
RRCRelease
)
{
NR_UE_RRC_INST_t
*
rrc
=
&
NR_UE_rrc_inst
[
instance
];
NR_UE_Timers_Constants_t
*
tac
=
&
rrc
->
timers_and_constants
;
// reset MAC
nr_rrc_mac_config_req_reset
(
instance
);
// if going to RRC_IDLE was triggered by reception
// of the RRCRelease message including a waitTime
NR_RejectWaitTime_t
*
waitTime
=
NULL
;
if
(
RRCRelease
)
{
struct
NR_RRCRelease_IEs
*
rrcReleaseIEs
=
RRCRelease
->
criticalExtensions
.
choice
.
rrcRelease
;
if
(
rrcReleaseIEs
)
{
waitTime
=
rrcReleaseIEs
->
nonCriticalExtension
?
rrcReleaseIEs
->
nonCriticalExtension
->
waitTime
:
NULL
;
if
(
waitTime
)
{
if
(
tac
->
T302_active
)
tac
->
T302_cnt
=
0
;
// stop 302
// start timer T302 with the value set to the waitTime
tac
->
T302_active
=
true
;
tac
->
T302_k
=
*
waitTime
*
1000
;
// waitTime is in seconds
// inform upper layers that access barring is applicable
// for all access categories except categories '0' and '2'.
// TODO no idea what that means
LOG_E
(
NR_RRC
,
"Go to IDLE. Handling RRCRelease message including a waitTime not implemented
\n
"
);
}
}
}
if
(
!
waitTime
)
{
if
(
tac
->
T302_active
)
{
tac
->
T302_cnt
=
0
;
tac
->
T302_active
=
false
;
// TODO barring alleviation as in 5.3.14.4
// not implemented
LOG_E
(
NR_RRC
,
"Go to IDLE. Barring alleviation not implemented
\n
"
);
}
}
if
(
tac
->
T390_active
)
{
tac
->
T390_cnt
=
0
;
tac
->
T390_active
=
false
;
// TODO barring alleviation as in 5.3.14.4
// not implemented
LOG_E
(
NR_RRC
,
"Go to IDLE. Barring alleviation not implemented
\n
"
);
}
if
(
!
RRCRelease
&&
rrc
->
nrRrcState
==
RRC_STATE_INACTIVE_NR
)
{
// TODO discard the cell reselection priority information provided by the cellReselectionPriorities
// cell reselection priorities not implemented yet
if
(
tac
->
T320_active
)
{
tac
->
T320_cnt
=
0
;
tac
->
T320_active
=
false
;
}
}
// Stop all the timers except T302, T320 and T325
tac
->
T300_active
=
false
;
tac
->
T300_cnt
=
0
;
tac
->
T301_active
=
false
;
tac
->
T301_cnt
=
0
;
tac
->
T304_active
=
false
;
tac
->
T304_cnt
=
0
;
tac
->
T310_active
=
false
;
tac
->
T310_cnt
=
0
;
tac
->
T311_active
=
false
;
tac
->
T311_cnt
=
0
;
tac
->
T319_active
=
false
;
tac
->
T319_cnt
=
0
;
// discard the UE Inactive AS context
// TODO there is no inactive AS context
// release the suspendConfig
// TODO suspendConfig not handled yet
// discard the keys (only kgnb is stored)
memset
(
rrc
->
kgnb
,
0
,
sizeof
(
rrc
->
kgnb
));
// TODO release all radio resources, including release of the RLC entity,
// the MAC configuration and the associated PDCP entity
// and SDAP for all established RBs
nr_pdcp_remove_UE
(
rrc
->
rnti
);
nr_rlc_remove_ue
(
rrc
->
rnti
);
if
(
rrc
->
meas_config
)
{
ASN_STRUCT_FREE
(
asn_DEF_NR_MeasConfig
,
rrc
->
meas_config
);
rrc
->
meas_config
=
NULL
;
}
for
(
int
i
=
0
;
i
<
NB_CNX_UE
;
i
++
)
{
rrcPerNB_t
*
nb
=
&
rrc
->
perNB
[
i
];
NR_UE_RRC_SI_INFO
*
SI_info
=
&
nb
->
SInfo
;
if
(
SI_info
->
sib1
)
{
ASN_STRUCT_FREE
(
asn_DEF_NR_SIB1
,
SI_info
->
sib1
);
SI_info
->
sib1
=
NULL
;
}
if
(
SI_info
->
sib2
)
{
ASN_STRUCT_FREE
(
asn_DEF_NR_SIB2
,
SI_info
->
sib2
);
SI_info
->
sib2
=
NULL
;
}
if
(
SI_info
->
sib3
)
{
ASN_STRUCT_FREE
(
asn_DEF_NR_SIB3
,
SI_info
->
sib3
);
SI_info
->
sib3
=
NULL
;
}
if
(
SI_info
->
sib4
)
{
ASN_STRUCT_FREE
(
asn_DEF_NR_SIB4
,
SI_info
->
sib4
);
SI_info
->
sib4
=
NULL
;
}
if
(
SI_info
->
sib5
)
{
ASN_STRUCT_FREE
(
asn_DEF_NR_SIB5
,
SI_info
->
sib5
);
SI_info
->
sib5
=
NULL
;
}
if
(
SI_info
->
sib6
)
{
ASN_STRUCT_FREE
(
asn_DEF_NR_SIB6
,
SI_info
->
sib6
);
SI_info
->
sib6
=
NULL
;
}
if
(
SI_info
->
sib7
)
{
ASN_STRUCT_FREE
(
asn_DEF_NR_SIB7
,
SI_info
->
sib7
);
SI_info
->
sib7
=
NULL
;
}
if
(
SI_info
->
sib8
)
{
ASN_STRUCT_FREE
(
asn_DEF_NR_SIB8
,
SI_info
->
sib8
);
SI_info
->
sib8
=
NULL
;
}
if
(
SI_info
->
sib9
)
{
ASN_STRUCT_FREE
(
asn_DEF_NR_SIB9
,
SI_info
->
sib9
);
SI_info
->
sib9
=
NULL
;
}
if
(
SI_info
->
sib10
)
{
ASN_STRUCT_FREE
(
asn_DEF_NR_SIB10_r16
,
SI_info
->
sib10
);
SI_info
->
sib10
=
NULL
;
}
if
(
SI_info
->
sib11
)
{
ASN_STRUCT_FREE
(
asn_DEF_NR_SIB11_r16
,
SI_info
->
sib11
);
SI_info
->
sib11
=
NULL
;
}
if
(
SI_info
->
sib12
)
{
ASN_STRUCT_FREE
(
asn_DEF_NR_SIB12_r16
,
SI_info
->
sib12
);
SI_info
->
sib12
=
NULL
;
}
if
(
SI_info
->
sib13
)
{
ASN_STRUCT_FREE
(
asn_DEF_NR_SIB13_r16
,
SI_info
->
sib13
);
SI_info
->
sib13
=
NULL
;
}
if
(
SI_info
->
sib14
)
{
ASN_STRUCT_FREE
(
asn_DEF_NR_SIB14_r16
,
SI_info
->
sib14
);
SI_info
->
sib14
=
NULL
;
}
}
nr_rrc_mac_config_req_release
(
instance
);
// TODO indicate the release of the RRC connection to upper layers
// together with the release cause
// enter RRC_IDLE
rrc
->
nrRrcState
=
RRC_STATE_IDLE_NR
;
rrc
->
rnti
=
0
;
}
void
nr_ue_rrc_timer_trigger
(
int
instance
,
int
frame
,
int
gnb_id
)
void
nr_ue_rrc_timer_trigger
(
int
instance
,
int
frame
,
int
gnb_id
)
{
{
MessageDef
*
message_p
;
MessageDef
*
message_p
;
...
...
openair2/RRC/NR_UE/rrc_defs.h
View file @
e3e158a7
...
@@ -148,17 +148,25 @@ typedef struct NR_UE_Timers_Constants_s {
...
@@ -148,17 +148,25 @@ typedef struct NR_UE_Timers_Constants_s {
// timers status
// timers status
bool
T300_active
;
bool
T300_active
;
bool
T301_active
;
bool
T301_active
;
bool
T302_active
;
bool
T304_active
;
bool
T304_active
;
bool
T310_active
;
bool
T310_active
;
bool
T311_active
;
bool
T311_active
;
bool
T319_active
;
bool
T319_active
;
bool
T320_active
;
bool
T325_active
;
bool
T390_active
;
// timers
// timers
uint32_t
T300_cnt
;
uint32_t
T300_cnt
;
uint32_t
T301_cnt
;
uint32_t
T301_cnt
;
uint32_t
T302_cnt
;
uint32_t
T304_cnt
;
uint32_t
T304_cnt
;
uint32_t
T310_cnt
;
uint32_t
T310_cnt
;
uint32_t
T311_cnt
;
uint32_t
T311_cnt
;
uint32_t
T319_cnt
;
uint32_t
T319_cnt
;
uint32_t
T320_cnt
;
uint32_t
T325_cnt
;
uint32_t
T390_cnt
;
// counters
// counters
uint32_t
N310_cnt
;
uint32_t
N310_cnt
;
uint32_t
N311_cnt
;
uint32_t
N311_cnt
;
...
@@ -167,10 +175,14 @@ typedef struct NR_UE_Timers_Constants_s {
...
@@ -167,10 +175,14 @@ typedef struct NR_UE_Timers_Constants_s {
uint32_t
N311_k
;
uint32_t
N311_k
;
uint32_t
T300_k
;
uint32_t
T300_k
;
uint32_t
T301_k
;
uint32_t
T301_k
;
uint32_t
T302_k
;
uint32_t
T304_k
;
uint32_t
T304_k
;
uint32_t
T310_k
;
uint32_t
T310_k
;
uint32_t
T311_k
;
uint32_t
T311_k
;
uint32_t
T319_k
;
uint32_t
T319_k
;
uint32_t
T320_k
;
uint32_t
T325_k
;
uint32_t
T390_k
;
}
NR_UE_Timers_Constants_t
;
}
NR_UE_Timers_Constants_t
;
typedef
enum
{
typedef
enum
{
...
@@ -210,7 +222,7 @@ typedef struct NR_UE_RRC_INST_s {
...
@@ -210,7 +222,7 @@ typedef struct NR_UE_RRC_INST_s {
NR_BWP_Id_t
dl_bwp_id
;
NR_BWP_Id_t
dl_bwp_id
;
NR_BWP_Id_t
ul_bwp_id
;
NR_BWP_Id_t
ul_bwp_id
;
/* K
e
NB as computed from parameters within USIM card */
/* K
g
NB as computed from parameters within USIM card */
uint8_t
kgnb
[
32
];
uint8_t
kgnb
[
32
];
/* Used integrity/ciphering algorithms */
/* Used integrity/ciphering algorithms */
//RRC_LIST_TYPE(NR_SecurityAlgorithmConfig_t, NR_SecurityAlgorithmConfig) SecurityAlgorithmConfig_list;
//RRC_LIST_TYPE(NR_SecurityAlgorithmConfig_t, NR_SecurityAlgorithmConfig) SecurityAlgorithmConfig_list;
...
...
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