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
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
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
OpenXG-RAN
Commits
94474ac6
Commit
94474ac6
authored
Apr 29, 2024
by
Jaroslava Fiedlerova
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/NR_UE_RRCRelease_improvements' into integration_2024_w17
parents
aecc695d
da26eacf
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
55 additions
and
11 deletions
+55
-11
openair2/RRC/NR_UE/rrc_UE.c
openair2/RRC/NR_UE/rrc_UE.c
+45
-6
openair2/RRC/NR_UE/rrc_defs.h
openair2/RRC/NR_UE/rrc_defs.h
+5
-4
openair2/RRC/NR_UE/rrc_proto.h
openair2/RRC/NR_UE/rrc_proto.h
+1
-1
openair2/RRC/NR_UE/rrc_timers_and_constants.c
openair2/RRC/NR_UE/rrc_timers_and_constants.c
+4
-0
No files found.
openair2/RRC/NR_UE/rrc_UE.c
View file @
94474ac6
...
@@ -1623,15 +1623,14 @@ static int nr_rrc_ue_decode_dcch(NR_UE_RRC_INST_t *rrc,
...
@@ -1623,15 +1623,14 @@ static int nr_rrc_ue_decode_dcch(NR_UE_RRC_INST_t *rrc,
}
break
;
}
break
;
case
NR_DL_DCCH_MessageType__c1_PR_rrcResume
:
case
NR_DL_DCCH_MessageType__c1_PR_rrcResume
:
LOG_
I
(
NR_RRC
,
"Received rrcResume on DL-DCCH-Message
\n
"
);
LOG_
E
(
NR_RRC
,
"Received rrcResume on DL-DCCH-Message -> Not handled
\n
"
);
break
;
break
;
case
NR_DL_DCCH_MessageType__c1_PR_rrcRelease
:
case
NR_DL_DCCH_MessageType__c1_PR_rrcRelease
:
LOG_I
(
NR_RRC
,
"[UE %ld] Received RRC Release (gNB %d)
\n
"
,
rrc
->
ue_id
,
gNB_indexP
);
LOG_I
(
NR_RRC
,
"[UE %ld] Received RRC Release (gNB %d)
\n
"
,
rrc
->
ue_id
,
gNB_indexP
);
// TODO properly implement procedures in 5.3.8.3 of 38.331
// delay the actions 60 ms from the moment the RRCRelease message was received
NR_Release_Cause_t
cause
=
OTHER
;
UPDATE_IE
(
rrc
->
RRCRelease
,
dl_dcch_msg
->
message
.
choice
.
c1
->
choice
.
rrcRelease
,
NR_RRCRelease_t
);
if
(
rrc
->
detach_after_release
)
nr_timer_setup
(
&
rrc
->
release_timer
,
60
,
10
);
// 10ms step
rrc
->
nrRrcState
=
RRC_STATE_DETACH_NR
;
nr_timer_start
(
&
rrc
->
release_timer
);
nr_rrc_going_to_IDLE
(
rrc
,
cause
,
dl_dcch_msg
->
message
.
choice
.
c1
->
choice
.
rrcRelease
);
break
;
break
;
case
NR_DL_DCCH_MessageType__c1_PR_ueCapabilityEnquiry
:
case
NR_DL_DCCH_MessageType__c1_PR_ueCapabilityEnquiry
:
...
@@ -2136,6 +2135,46 @@ static void process_lte_nsa_msg(NR_UE_RRC_INST_t *rrc, nsa_msg_t *msg, int msg_l
...
@@ -2136,6 +2135,46 @@ static void process_lte_nsa_msg(NR_UE_RRC_INST_t *rrc, nsa_msg_t *msg, int msg_l
}
}
}
}
void
handle_RRCRelease
(
NR_UE_RRC_INST_t
*
rrc
)
{
NR_UE_Timers_Constants_t
*
tac
=
&
rrc
->
timers_and_constants
;
// stop timer T380, if running
nr_timer_stop
(
&
tac
->
T380
);
// stop timer T320, if running
nr_timer_stop
(
&
tac
->
T320
);
if
(
rrc
->
detach_after_release
)
rrc
->
nrRrcState
=
RRC_STATE_DETACH_NR
;
const
struct
NR_RRCRelease_IEs
*
rrcReleaseIEs
=
rrc
->
RRCRelease
?
rrc
->
RRCRelease
->
criticalExtensions
.
choice
.
rrcRelease
:
NULL
;
if
(
!
rrc
->
as_security_activated
)
{
// ignore any field included in RRCRelease message except waitTime
// perform the actions upon going to RRC_IDLE as specified in 5.3.11 with the release cause 'other'
// upon which the procedure ends
NR_Release_Cause_t
cause
=
OTHER
;
nr_rrc_going_to_IDLE
(
rrc
,
cause
,
rrc
->
RRCRelease
);
asn1cFreeStruc
(
asn_DEF_NR_RRCRelease
,
rrc
->
RRCRelease
);
return
;
}
bool
suspend
=
false
;
if
(
rrcReleaseIEs
)
{
if
(
rrcReleaseIEs
->
redirectedCarrierInfo
)
LOG_E
(
NR_RRC
,
"redirectedCarrierInfo in RRCRelease not handled
\n
"
);
if
(
rrcReleaseIEs
->
cellReselectionPriorities
)
LOG_E
(
NR_RRC
,
"cellReselectionPriorities in RRCRelease not handled
\n
"
);
if
(
rrcReleaseIEs
->
deprioritisationReq
)
LOG_E
(
NR_RRC
,
"deprioritisationReq in RRCRelease not handled
\n
"
);
if
(
rrcReleaseIEs
->
suspendConfig
)
{
suspend
=
true
;
// procedures to go in INACTIVE state
AssertFatal
(
false
,
"Inactive State not supported
\n
"
);
}
}
if
(
!
suspend
)
{
NR_Release_Cause_t
cause
=
OTHER
;
nr_rrc_going_to_IDLE
(
rrc
,
cause
,
rrc
->
RRCRelease
);
}
asn1cFreeStruc
(
asn_DEF_NR_RRCRelease
,
rrc
->
RRCRelease
);
}
void
nr_rrc_going_to_IDLE
(
NR_UE_RRC_INST_t
*
rrc
,
void
nr_rrc_going_to_IDLE
(
NR_UE_RRC_INST_t
*
rrc
,
NR_Release_Cause_t
release_cause
,
NR_Release_Cause_t
release_cause
,
NR_RRCRelease_t
*
RRCRelease
)
NR_RRCRelease_t
*
RRCRelease
)
...
...
openair2/RRC/NR_UE/rrc_defs.h
View file @
94474ac6
...
@@ -159,6 +159,7 @@ typedef struct NR_UE_Timers_Constants_s {
...
@@ -159,6 +159,7 @@ typedef struct NR_UE_Timers_Constants_s {
NR_timer_t
T320
;
NR_timer_t
T320
;
NR_timer_t
T321
;
NR_timer_t
T321
;
NR_timer_t
T325
;
NR_timer_t
T325
;
NR_timer_t
T380
;
NR_timer_t
T390
;
NR_timer_t
T390
;
// counters
// counters
uint32_t
N310_cnt
;
uint32_t
N310_cnt
;
...
@@ -217,10 +218,10 @@ typedef struct NR_UE_RRC_INST_s {
...
@@ -217,10 +218,10 @@ typedef struct NR_UE_RRC_INST_s {
long
keyToUse
;
long
keyToUse
;
bool
as_security_activated
;
bool
as_security_activated
;
bool
detach_after_release
;
bool
detach_after_release
;
NR_timer_t
release_timer
;
long
selected_plmn_identity
;
NR_RRCRelease_t
*
RRCRelease
;
Rrc_State_NR_t
nrRrcState
;
long
selected_plmn_identity
;
as_nas_info_t
initialNasMsg
;
Rrc_State_NR_t
nrRrcState
;
//Sidelink params
//Sidelink params
NR_SL_PreconfigurationNR_r16_t
*
sl_preconfig
;
NR_SL_PreconfigurationNR_r16_t
*
sl_preconfig
;
...
...
openair2/RRC/NR_UE/rrc_proto.h
View file @
94474ac6
...
@@ -86,7 +86,7 @@ void nr_mac_rrc_sync_ind(const module_id_t module_id,
...
@@ -86,7 +86,7 @@ void nr_mac_rrc_sync_ind(const module_id_t module_id,
void
nr_rrc_going_to_IDLE
(
NR_UE_RRC_INST_t
*
rrc
,
void
nr_rrc_going_to_IDLE
(
NR_UE_RRC_INST_t
*
rrc
,
NR_Release_Cause_t
release_cause
,
NR_Release_Cause_t
release_cause
,
NR_RRCRelease_t
*
RRCRelease
);
NR_RRCRelease_t
*
RRCRelease
);
void
handle_RRCRelease
(
NR_UE_RRC_INST_t
*
rrc
);
void
nr_mac_rrc_ra_ind
(
const
module_id_t
mod_id
,
int
frame
,
bool
success
);
void
nr_mac_rrc_ra_ind
(
const
module_id_t
mod_id
,
int
frame
,
bool
success
);
void
nr_mac_rrc_msg3_ind
(
const
module_id_t
mod_id
,
const
int
rnti
,
int
gnb_id
);
void
nr_mac_rrc_msg3_ind
(
const
module_id_t
mod_id
,
const
int
rnti
,
int
gnb_id
);
void
set_rlf_sib1_timers_and_constants
(
NR_UE_Timers_Constants_t
*
tac
,
NR_SIB1_t
*
sib1
);
void
set_rlf_sib1_timers_and_constants
(
NR_UE_Timers_Constants_t
*
tac
,
NR_SIB1_t
*
sib1
);
...
...
openair2/RRC/NR_UE/rrc_timers_and_constants.c
View file @
94474ac6
...
@@ -119,6 +119,10 @@ void nr_rrc_handle_timers(NR_UE_RRC_INST_t *rrc)
...
@@ -119,6 +119,10 @@ void nr_rrc_handle_timers(NR_UE_RRC_INST_t *rrc)
{
{
NR_UE_Timers_Constants_t
*
timers
=
&
rrc
->
timers_and_constants
;
NR_UE_Timers_Constants_t
*
timers
=
&
rrc
->
timers_and_constants
;
bool
release_timer_expired
=
nr_timer_tick
(
&
rrc
->
release_timer
);
if
(
release_timer_expired
)
handle_RRCRelease
(
rrc
);
bool
t300_expired
=
nr_timer_tick
(
&
timers
->
T300
);
bool
t300_expired
=
nr_timer_tick
(
&
timers
->
T300
);
if
(
t300_expired
)
{
if
(
t300_expired
)
{
LOG_W
(
NR_RRC
,
"Timer T300 expired! No timely response to RRCSetupRequest
\n
"
);
LOG_W
(
NR_RRC
,
"Timer T300 expired! No timely response to RRCSetupRequest
\n
"
);
...
...
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