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
e5e48bb2
Commit
e5e48bb2
authored
Mar 20, 2024
by
Robert Schmidt
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
RRC: take last UE activity time stamps
parent
d9abf18d
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
24 additions
and
4 deletions
+24
-4
openair2/RRC/NR/nr_rrc_defs.h
openair2/RRC/NR/nr_rrc_defs.h
+2
-0
openair2/RRC/NR/rrc_gNB.c
openair2/RRC/NR/rrc_gNB.c
+4
-0
openair2/RRC/NR/rrc_gNB_UE_context.c
openair2/RRC/NR/rrc_gNB_UE_context.c
+18
-4
No files found.
openair2/RRC/NR/nr_rrc_defs.h
View file @
e5e48bb2
...
@@ -249,6 +249,8 @@ typedef enum {
...
@@ -249,6 +249,8 @@ typedef enum {
}
rrc_action_t
;
}
rrc_action_t
;
typedef
struct
gNB_RRC_UE_s
{
typedef
struct
gNB_RRC_UE_s
{
time_t
last_seen
;
// last time this UE has been accessed
drb_t
established_drbs
[
MAX_DRBS_PER_UE
];
drb_t
established_drbs
[
MAX_DRBS_PER_UE
];
NR_DRB_ToReleaseList_t
*
DRB_ReleaseList
;
NR_DRB_ToReleaseList_t
*
DRB_ReleaseList
;
...
...
openair2/RRC/NR/rrc_gNB.c
View file @
e5e48bb2
...
@@ -33,6 +33,7 @@
...
@@ -33,6 +33,7 @@
#include <sys/socket.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <arpa/inet.h>
#include <time.h>
#include "nr_rrc_config.h"
#include "nr_rrc_config.h"
#include "nr_rrc_defs.h"
#include "nr_rrc_defs.h"
...
@@ -2290,6 +2291,7 @@ static void write_rrc_stats(const gNB_RRC_INST *rrc)
...
@@ -2290,6 +2291,7 @@ static void write_rrc_stats(const gNB_RRC_INST *rrc)
return
;
return
;
}
}
time_t
now
=
time
(
NULL
);
int
i
=
0
;
int
i
=
0
;
rrc_gNB_ue_context_t
*
ue_context_p
=
NULL
;
rrc_gNB_ue_context_t
*
ue_context_p
=
NULL
;
/* cast is necessary to eliminate warning "discards ‘const’ qualifier" */
/* cast is necessary to eliminate warning "discards ‘const’ qualifier" */
...
@@ -2309,6 +2311,8 @@ static void write_rrc_stats(const gNB_RRC_INST *rrc)
...
@@ -2309,6 +2311,8 @@ static void write_rrc_stats(const gNB_RRC_INST *rrc)
fprintf
(
f
,
" S-TMSI %x"
,
ue_ctxt
->
Initialue_identity_5g_s_TMSI
.
fiveg_tmsi
);
fprintf
(
f
,
" S-TMSI %x"
,
ue_ctxt
->
Initialue_identity_5g_s_TMSI
.
fiveg_tmsi
);
fprintf
(
f
,
":
\n
"
);
fprintf
(
f
,
":
\n
"
);
time_t
last_seen
=
now
-
ue_ctxt
->
last_seen
;
fprintf
(
f
,
" last RRC activity: %ld seconds ago
\n
"
,
last_seen
);
fprintf
(
f
,
" RRC status %s
\n
"
,
get_rrc_connection_status_text
(
ue_ctxt
->
StatusRrc
));
fprintf
(
f
,
" RRC status %s
\n
"
,
get_rrc_connection_status_text
(
ue_ctxt
->
StatusRrc
));
if
(
ue_ctxt
->
nb_of_pdusessions
==
0
)
if
(
ue_ctxt
->
nb_of_pdusessions
==
0
)
...
...
openair2/RRC/NR/rrc_gNB_UE_context.c
View file @
e5e48bb2
...
@@ -32,11 +32,16 @@
...
@@ -32,11 +32,16 @@
#include <stdlib.h>
#include <stdlib.h>
#include <string.h>
#include <string.h>
#include <limits.h>
#include <limits.h>
#include <time.h>
#include "common/utils/LOG/log.h"
#include "common/utils/LOG/log.h"
#include "rrc_gNB_UE_context.h"
#include "rrc_gNB_UE_context.h"
#include "openair2/F1AP/f1ap_ids.h"
#include "openair2/F1AP/f1ap_ids.h"
static
void
rrc_gNB_ue_context_update_time
(
rrc_gNB_ue_context_t
*
ctxt
)
{
ctxt
->
ue_context
.
last_seen
=
time
(
NULL
);
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
int
rrc_gNB_compare_ue_rnti_id
(
rrc_gNB_ue_context_t
*
c1_pP
,
rrc_gNB_ue_context_t
*
c2_pP
)
int
rrc_gNB_compare_ue_rnti_id
(
rrc_gNB_ue_context_t
*
c1_pP
,
rrc_gNB_ue_context_t
*
c2_pP
)
...
@@ -68,6 +73,7 @@ rrc_gNB_ue_context_t *rrc_gNB_allocate_new_ue_context(gNB_RRC_INST *rrc_instance
...
@@ -68,6 +73,7 @@ rrc_gNB_ue_context_t *rrc_gNB_allocate_new_ue_context(gNB_RRC_INST *rrc_instance
return
NULL
;
return
NULL
;
}
}
new_p
->
ue_context
.
rrc_ue_id
=
uid_linear_allocator_new
(
&
rrc_instance_pP
->
uid_allocator
)
+
1
;
new_p
->
ue_context
.
rrc_ue_id
=
uid_linear_allocator_new
(
&
rrc_instance_pP
->
uid_allocator
)
+
1
;
rrc_gNB_ue_context_update_time
(
new_p
);
for
(
int
i
=
0
;
i
<
NB_RB_MAX
;
i
++
)
for
(
int
i
=
0
;
i
<
NB_RB_MAX
;
i
++
)
new_p
->
ue_context
.
pduSession
[
i
].
xid
=
-
1
;
new_p
->
ue_context
.
pduSession
[
i
].
xid
=
-
1
;
...
@@ -92,8 +98,10 @@ rrc_gNB_ue_context_t *rrc_gNB_get_ue_context_by_rnti(gNB_RRC_INST *rrc_instance_
...
@@ -92,8 +98,10 @@ rrc_gNB_ue_context_t *rrc_gNB_get_ue_context_by_rnti(gNB_RRC_INST *rrc_instance_
rrc_gNB_ue_context_t
*
ue_context_p
;
rrc_gNB_ue_context_t
*
ue_context_p
;
RB_FOREACH
(
ue_context_p
,
rrc_nr_ue_tree_s
,
&
(
rrc_instance_pP
->
rrc_ue_head
))
{
RB_FOREACH
(
ue_context_p
,
rrc_nr_ue_tree_s
,
&
(
rrc_instance_pP
->
rrc_ue_head
))
{
f1_ue_data_t
ue_data
=
cu_get_f1_ue_data
(
ue_context_p
->
ue_context
.
rrc_ue_id
);
f1_ue_data_t
ue_data
=
cu_get_f1_ue_data
(
ue_context_p
->
ue_context
.
rrc_ue_id
);
if
(
ue_data
.
du_assoc_id
==
assoc_id
&&
ue_context_p
->
ue_context
.
rnti
==
rntiP
)
if
(
ue_data
.
du_assoc_id
==
assoc_id
&&
ue_context_p
->
ue_context
.
rnti
==
rntiP
)
{
rrc_gNB_ue_context_update_time
(
ue_context_p
);
return
ue_context_p
;
return
ue_context_p
;
}
}
}
LOG_W
(
NR_RRC
,
"search by RNTI %04x and assoc_id %d: no UE found
\n
"
,
rntiP
,
assoc_id
);
LOG_W
(
NR_RRC
,
"search by RNTI %04x and assoc_id %d: no UE found
\n
"
,
rntiP
,
assoc_id
);
return
NULL
;
return
NULL
;
...
@@ -104,8 +112,10 @@ rrc_gNB_ue_context_t *rrc_gNB_get_ue_context_by_rnti_any_du(gNB_RRC_INST *rrc_in
...
@@ -104,8 +112,10 @@ rrc_gNB_ue_context_t *rrc_gNB_get_ue_context_by_rnti_any_du(gNB_RRC_INST *rrc_in
rrc_gNB_ue_context_t
*
ue_context_p
;
rrc_gNB_ue_context_t
*
ue_context_p
;
RB_FOREACH
(
ue_context_p
,
rrc_nr_ue_tree_s
,
&
(
rrc_instance_pP
->
rrc_ue_head
))
RB_FOREACH
(
ue_context_p
,
rrc_nr_ue_tree_s
,
&
(
rrc_instance_pP
->
rrc_ue_head
))
{
{
if
(
ue_context_p
->
ue_context
.
rnti
==
rntiP
)
if
(
ue_context_p
->
ue_context
.
rnti
==
rntiP
)
{
rrc_gNB_ue_context_update_time
(
ue_context_p
);
return
ue_context_p
;
return
ue_context_p
;
}
}
}
LOG_W
(
NR_RRC
,
"search by rnti not found %04x
\n
"
,
rntiP
);
LOG_W
(
NR_RRC
,
"search by rnti not found %04x
\n
"
,
rntiP
);
return
NULL
;
return
NULL
;
...
@@ -146,8 +156,10 @@ rrc_gNB_ue_context_t *rrc_gNB_ue_context_random_exist(gNB_RRC_INST *rrc_instance
...
@@ -146,8 +156,10 @@ rrc_gNB_ue_context_t *rrc_gNB_ue_context_random_exist(gNB_RRC_INST *rrc_instance
{
{
rrc_gNB_ue_context_t
*
ue_context_p
=
NULL
;
rrc_gNB_ue_context_t
*
ue_context_p
=
NULL
;
RB_FOREACH
(
ue_context_p
,
rrc_nr_ue_tree_s
,
&
rrc_instance_pP
->
rrc_ue_head
)
{
RB_FOREACH
(
ue_context_p
,
rrc_nr_ue_tree_s
,
&
rrc_instance_pP
->
rrc_ue_head
)
{
if
(
ue_context_p
->
ue_context
.
random_ue_identity
==
ue_identityP
)
if
(
ue_context_p
->
ue_context
.
random_ue_identity
==
ue_identityP
)
{
rrc_gNB_ue_context_update_time
(
ue_context_p
);
return
ue_context_p
;
return
ue_context_p
;
}
}
}
return
NULL
;
return
NULL
;
}
}
...
@@ -161,8 +173,10 @@ rrc_gNB_ue_context_t *rrc_gNB_ue_context_5g_s_tmsi_exist(gNB_RRC_INST *rrc_insta
...
@@ -161,8 +173,10 @@ rrc_gNB_ue_context_t *rrc_gNB_ue_context_5g_s_tmsi_exist(gNB_RRC_INST *rrc_insta
RB_FOREACH
(
ue_context_p
,
rrc_nr_ue_tree_s
,
&
rrc_instance_pP
->
rrc_ue_head
)
RB_FOREACH
(
ue_context_p
,
rrc_nr_ue_tree_s
,
&
rrc_instance_pP
->
rrc_ue_head
)
{
{
LOG_I
(
NR_RRC
,
"Checking for UE 5G S-TMSI %ld: RNTI %04x
\n
"
,
s_TMSI
,
ue_context_p
->
ue_context
.
rnti
);
LOG_I
(
NR_RRC
,
"Checking for UE 5G S-TMSI %ld: RNTI %04x
\n
"
,
s_TMSI
,
ue_context_p
->
ue_context
.
rnti
);
if
(
ue_context_p
->
ue_context
.
ng_5G_S_TMSI_Part1
==
s_TMSI
)
if
(
ue_context_p
->
ue_context
.
ng_5G_S_TMSI_Part1
==
s_TMSI
)
{
rrc_gNB_ue_context_update_time
(
ue_context_p
);
return
ue_context_p
;
return
ue_context_p
;
}
}
}
return
NULL
;
return
NULL
;
}
}
...
...
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