Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG UE
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
Michael Black
OpenXG UE
Commits
e53947f4
Commit
e53947f4
authored
Nov 18, 2020
by
yaojie
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add NGAP UE CONTEXT RELEASE MESSAGE
parent
158063ff
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
197 additions
and
0 deletions
+197
-0
openair2/RRC/NR/rrc_gNB.c
openair2/RRC/NR/rrc_gNB.c
+8
-0
openair2/RRC/NR/rrc_gNB_NGAP.c
openair2/RRC/NR/rrc_gNB_NGAP.c
+161
-0
openair2/RRC/NR/rrc_gNB_NGAP.h
openair2/RRC/NR/rrc_gNB_NGAP.h
+28
-0
No files found.
openair2/RRC/NR/rrc_gNB.c
View file @
e53947f4
...
@@ -1448,6 +1448,14 @@ void *rrc_gnb_task(void *args_p) {
...
@@ -1448,6 +1448,14 @@ void *rrc_gnb_task(void *args_p) {
rrc_gNB_process_NGAP_INITIAL_CONTEXT_SETUP_REQ
(
msg_p
,
msg_name_p
,
instance
);
rrc_gNB_process_NGAP_INITIAL_CONTEXT_SETUP_REQ
(
msg_p
,
msg_name_p
,
instance
);
break
;
break
;
case
NGAP_UE_CONTEXT_RELEASE_REQ
:
rrc_gNB_process_NGAP_UE_CONTEXT_RELEASE_REQ
(
msg_p
,
msg_name_p
,
instance
);
break
;
case
NGAP_UE_CONTEXT_RELEASE_COMMAND
:
rrc_gNB_process_NGAP_UE_CONTEXT_RELEASE_COMMAND
(
msg_p
,
msg_name_p
,
instance
);
break
;
default:
default:
LOG_E
(
NR_RRC
,
"[gNB %d] Received unexpected message %s
\n
"
,
instance
,
msg_name_p
);
LOG_E
(
NR_RRC
,
"[gNB %d] Received unexpected message %s
\n
"
,
instance
,
msg_name_p
);
break
;
break
;
...
...
openair2/RRC/NR/rrc_gNB_NGAP.c
View file @
e53947f4
...
@@ -946,3 +946,164 @@ rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ(
...
@@ -946,3 +946,164 @@ rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ(
return
(
0
);
return
(
0
);
}
}
}
}
void
rrc_gNB_send_NGAP_UE_CONTEXT_RELEASE_REQ
(
const
module_id_t
gnb_mod_idP
,
const
rrc_gNB_ue_context_t
*
const
ue_context_pP
,
const
ngap_Cause_t
causeP
,
const
long
cause_valueP
)
//------------------------------------------------------------------------------
{
if
(
ue_context_pP
==
NULL
)
{
LOG_E
(
RRC
,
"[gNB] In NGAP_UE_CONTEXT_RELEASE_REQ: invalid UE
\n
"
);
}
else
{
MSC_LOG_TX_MESSAGE
(
MSC_RRC_GNB
,
MSC_NGAP_GNB
,
NULL
,
0
,
"0 NGAP_UE_CONTEXT_RELEASE_REQ gNB_ue_ngap_id 0x%06"
PRIX32
" "
,
ue_context_pP
->
ue_context
.
gNB_ue_ngap_id
);
MessageDef
*
msg_context_release_req_p
=
NULL
;
msg_context_release_req_p
=
itti_alloc_new_message
(
TASK_RRC_GNB
,
NGAP_UE_CONTEXT_RELEASE_REQ
);
NGAP_UE_CONTEXT_RELEASE_REQ
(
msg_context_release_req_p
).
gNB_ue_ngap_id
=
ue_context_pP
->
ue_context
.
gNB_ue_ngap_id
;
NGAP_UE_CONTEXT_RELEASE_REQ
(
msg_context_release_req_p
).
cause
=
causeP
;
NGAP_UE_CONTEXT_RELEASE_REQ
(
msg_context_release_req_p
).
cause_value
=
cause_valueP
;
NGAP_UE_CONTEXT_RELEASE_REQ
(
msg_context_release_req_p
).
nb_of_pdusessions
=
ue_context_pP
->
ue_context
.
setup_pdu_sessions
;
for
(
int
pdusession
=
0
;
pdusession
<
ue_context_pP
->
ue_context
.
setup_pdu_sessions
;
pdusession
++
)
{
NGAP_UE_CONTEXT_RELEASE_REQ
(
msg_context_release_req_p
).
pdusessions
[
pdusession
].
pdusession_id
=
ue_context_pP
->
ue_context
.
pdusession
[
pdusession
].
param
.
pdusession_id
;
}
itti_send_msg_to_task
(
TASK_NGAP
,
GNB_MODULE_ID_TO_INSTANCE
(
gnb_mod_idP
),
msg_context_release_req_p
);
}
}
/*------------------------------------------------------------------------------*/
int
rrc_gNB_process_NGAP_UE_CONTEXT_RELEASE_REQ
(
MessageDef
*
msg_p
,
const
char
*
msg_name
,
instance_t
instance
)
{
uint32_t
gNB_ue_ngap_id
;
struct
rrc_gNB_ue_context_s
*
ue_context_p
=
NULL
;
gNB_ue_ngap_id
=
NGAP_UE_CONTEXT_RELEASE_REQ
(
msg_p
).
gNB_ue_ngap_id
;
ue_context_p
=
rrc_gNB_get_ue_context_from_ngap_ids
(
instance
,
UE_INITIAL_ID_INVALID
,
gNB_ue_ngap_id
);
if
(
ue_context_p
==
NULL
)
{
/* Can not associate this message to an UE index, send a failure to ngAP and discard it! */
MessageDef
*
msg_fail_p
;
LOG_W
(
RRC
,
"[gNB %d] In NGAP_UE_CONTEXT_RELEASE_REQ: unknown UE from gNB_ue_ngap_id (%d)
\n
"
,
instance
,
gNB_ue_ngap_id
);
msg_fail_p
=
itti_alloc_new_message
(
TASK_RRC_GNB
,
NGAP_UE_CONTEXT_RELEASE_RESP
);
/* TODO change message ID. */
NGAP_UE_CONTEXT_RELEASE_RESP
(
msg_fail_p
).
gNB_ue_ngap_id
=
gNB_ue_ngap_id
;
// TODO add failure cause when defined!
itti_send_msg_to_task
(
TASK_NGAP
,
instance
,
msg_fail_p
);
return
(
-
1
);
}
else
{
/* TODO release context. */
/* Send the response */
{
MessageDef
*
msg_resp_p
;
msg_resp_p
=
itti_alloc_new_message
(
TASK_RRC_GNB
,
NGAP_UE_CONTEXT_RELEASE_RESP
);
NGAP_UE_CONTEXT_RELEASE_RESP
(
msg_resp_p
).
gNB_ue_ngap_id
=
gNB_ue_ngap_id
;
itti_send_msg_to_task
(
TASK_NGAP
,
instance
,
msg_resp_p
);
}
return
(
0
);
}
}
//-----------------------------------------------------------------------------
/*
* Process the NG command NGAP_UE_CONTEXT_RELEASE_COMMAND, sent by AMF.
* The gNB should remove all pdu session, NG context, and other context of the UE.
*/
int
rrc_gNB_process_NGAP_UE_CONTEXT_RELEASE_COMMAND
(
MessageDef
*
msg_p
,
const
char
*
msg_name
,
instance_t
instance
)
{
//-----------------------------------------------------------------------------
uint32_t
gNB_ue_ngap_id
=
0
;
protocol_ctxt_t
ctxt
;
struct
rrc_gNB_ue_context_s
*
ue_context_p
=
NULL
;
struct
rrc_ue_ngap_ids_s
*
rrc_ue_ngap_ids
=
NULL
;
gNB_ue_ngap_id
=
NGAP_UE_CONTEXT_RELEASE_COMMAND
(
msg_p
).
gNB_ue_ngap_id
;
ue_context_p
=
rrc_gNB_get_ue_context_from_ngap_ids
(
instance
,
UE_INITIAL_ID_INVALID
,
gNB_ue_ngap_id
);
if
(
ue_context_p
==
NULL
)
{
/* Can not associate this message to an UE index */
MessageDef
*
msg_complete_p
=
NULL
;
LOG_W
(
RRC
,
"[gNB %d] In NGAP_UE_CONTEXT_RELEASE_COMMAND: unknown UE from gNB_ue_ngap_id (%d)
\n
"
,
instance
,
gNB_ue_ngap_id
);
MSC_LOG_EVENT
(
MSC_RRC_GNB
,
"0 NGAP_UE_CONTEXT_RELEASE_COMPLETE gNB_ue_ngap_id 0x%06"
PRIX32
" context not found"
,
gNB_ue_ngap_id
);
MSC_LOG_TX_MESSAGE
(
MSC_RRC_GNB
,
MSC_NGAP_GNB
,
NULL
,
0
,
"0 NGAP_UE_CONTEXT_RELEASE_COMPLETE gNB_ue_ngap_id 0x%06"
PRIX32
" "
,
gNB_ue_ngap_id
);
msg_complete_p
=
itti_alloc_new_message
(
TASK_RRC_GNB
,
NGAP_UE_CONTEXT_RELEASE_COMPLETE
);
NGAP_UE_CONTEXT_RELEASE_COMPLETE
(
msg_complete_p
).
gNB_ue_ngap_id
=
gNB_ue_ngap_id
;
itti_send_msg_to_task
(
TASK_NGAP
,
instance
,
msg_complete_p
);
rrc_ue_ngap_ids
=
rrc_gNB_NGAP_get_ue_ids
(
RC
.
nrrrc
[
instance
],
UE_INITIAL_ID_INVALID
,
gNB_ue_ngap_id
);
if
(
rrc_ue_ngap_ids
!=
NULL
)
{
rrc_gNB_NGAP_remove_ue_ids
(
RC
.
nrrrc
[
instance
],
rrc_ue_ngap_ids
);
}
return
-
1
;
}
else
{
ue_context_p
->
ue_context
.
ue_release_timer_ng
=
0
;
PROTOCOL_CTXT_SET_BY_INSTANCE
(
&
ctxt
,
instance
,
GNB_FLAG_YES
,
ue_context_p
->
ue_context
.
rnti
,
0
,
0
);
rrc_gNB_generate_RRCRelease
(
&
ctxt
,
ue_context_p
);
return
0
;
}
}
//------------------------------------------------------------------------------
/*
* Remove UE ids (ue_initial_id and ng_id) from hashtables.
*/
void
rrc_gNB_NGAP_remove_ue_ids
(
gNB_RRC_INST
*
const
rrc_instance_pP
,
struct
rrc_ue_ngap_ids_s
*
const
ue_ids_pP
)
//------------------------------------------------------------------------------
{
hashtable_rc_t
h_rc
;
if
(
rrc_instance_pP
==
NULL
)
{
LOG_E
(
NR_RRC
,
"Bad NR RRC instance
\n
"
);
return
;
}
if
(
ue_ids_pP
==
NULL
)
{
LOG_E
(
NR_RRC
,
"Trying to free a NULL NGAP UE IDs
\n
"
);
return
;
}
const
uint16_t
ue_initial_id
=
ue_ids_pP
->
ue_initial_id
;
const
uint32_t
gNB_ue_ngap_id
=
ue_ids_pP
->
gNB_ue_ngap_id
;
if
(
gNB_ue_ngap_id
>
0
)
{
h_rc
=
hashtable_remove
(
rrc_instance_pP
->
ngap_id2_ngap_ids
,
(
hash_key_t
)
gNB_ue_ngap_id
);
if
(
h_rc
!=
HASH_TABLE_OK
)
{
LOG_W
(
NR_RRC
,
"NGAP Did not find entry in hashtable ngap_id2_ngap_ids for gNB_ue_ngap_id %u
\n
"
,
gNB_ue_ngap_id
);
}
else
{
LOG_W
(
NR_RRC
,
"NGAP removed entry in hashtable ngap_id2_ngap_ids for gNB_ue_ngap_id %u
\n
"
,
gNB_ue_ngap_id
);
}
}
if
(
ue_initial_id
!=
UE_INITIAL_ID_INVALID
)
{
h_rc
=
hashtable_remove
(
rrc_instance_pP
->
initial_id2_ngap_ids
,
(
hash_key_t
)
ue_initial_id
);
if
(
h_rc
!=
HASH_TABLE_OK
)
{
LOG_W
(
NR_RRC
,
"NGAP Did not find entry in hashtable initial_id2_ngap_ids for ue_initial_id %u
\n
"
,
ue_initial_id
);
}
else
{
LOG_W
(
NR_RRC
,
"NGAP removed entry in hashtable initial_id2_ngap_ids for ue_initial_id %u
\n
"
,
ue_initial_id
);
}
}
}
openair2/RRC/NR/rrc_gNB_NGAP.h
View file @
e53947f4
...
@@ -107,4 +107,32 @@ rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ(
...
@@ -107,4 +107,32 @@ rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ(
instance_t
instance
instance_t
instance
);
);
void
rrc_gNB_send_NGAP_UE_CONTEXT_RELEASE_REQ
(
const
module_id_t
gnb_mod_idP
,
const
rrc_gNB_ue_context_t
*
const
ue_context_pP
,
const
ngap_Cause_t
causeP
,
const
long
cause_valueP
);
int
rrc_gNB_process_NGAP_UE_CONTEXT_RELEASE_REQ
(
MessageDef
*
msg_p
,
const
char
*
msg_name
,
instance_t
instance
);
int
rrc_gNB_process_NGAP_UE_CONTEXT_RELEASE_COMMAND
(
MessageDef
*
msg_p
,
const
char
*
msg_name
,
instance_t
instance
);
void
rrc_gNB_NGAP_remove_ue_ids
(
gNB_RRC_INST
*
const
rrc_instance_pP
,
struct
rrc_ue_ngap_ids_s
*
const
ue_ids_pP
);
#endif
#endif
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