Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-SMF
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
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-SMF
Commits
8f2660cf
Commit
8f2660cf
authored
Jul 20, 2021
by
Tien-Thinh Nguyen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add Handover execution
parent
e6c95cb8
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
41 additions
and
6 deletions
+41
-6
src/smf_app/smf_context.cpp
src/smf_app/smf_context.cpp
+30
-6
src/smf_app/smf_context.hpp
src/smf_app/smf_context.hpp
+11
-0
No files found.
src/smf_app/smf_context.cpp
View file @
8f2660cf
...
@@ -2674,7 +2674,12 @@ bool smf_context::handle_pdu_session_update_sm_context_request(
...
@@ -2674,7 +2674,12 @@ bool smf_context::handle_pdu_session_update_sm_context_request(
case
n2_sm_info_type_e
:
:
SECONDARY_RAT_USAGE
:
{
case
n2_sm_info_type_e
:
:
SECONDARY_RAT_USAGE
:
{
// Inter NG-RAN node N2 based handover (Section 4.9.1.3@3GPP TS 23.502
// Inter NG-RAN node N2 based handover (Section 4.9.1.3@3GPP TS 23.502
// V16.0.0)
// V16.0.0)
// process later
if
(
sm_context_req_msg
.
ho_state_is_set
())
{
std
::
string
ho_state
=
sm_context_req_msg
.
get_ho_state
();
if
(
ho_state
.
compare
(
"COMPLETED"
)
==
0
)
{
// TODO:
}
}
}
break
;
}
break
;
default:
{
default:
{
...
@@ -2719,8 +2724,7 @@ bool smf_context::handle_pdu_session_update_sm_context_request(
...
@@ -2719,8 +2724,7 @@ bool smf_context::handle_pdu_session_update_sm_context_request(
// Step 5. N2 Handover Execution/Cancellation
// Step 5. N2 Handover Execution/Cancellation
if
(
sm_context_req_msg
.
ho_state_is_set
()
or
if
(
sm_context_req_msg
.
ho_state_is_set
()
or
sm_context_req_msg
.
n2_sm_info_is_set
())
{
sm_context_req_msg
.
n2_sm_info_is_set
())
{
std
::
string
ho_state
;
std
::
string
ho_state
=
sm_context_req_msg
.
get_ho_state
();
sm_context_req_msg
.
get_ho_state
(
ho_state
);
// Handover Execution
// Handover Execution
if
(
ho_state
.
compare
(
"COMPLETED"
)
==
0
or
if
(
ho_state
.
compare
(
"COMPLETED"
)
==
0
or
...
@@ -3163,6 +3167,10 @@ bool smf_context::handle_ho_preparation_request(
...
@@ -3163,6 +3167,10 @@ bool smf_context::handle_ho_preparation_request(
// TODO: Check Target ID whether N2 Handover for the indicated PDU Session can
// TODO: Check Target ID whether N2 Handover for the indicated PDU Session can
// be accepted Select UPF (should be done in Procedure)
// be accepted Select UPF (should be done in Procedure)
if
(
!
check_handover_possibility
(
ran_target_id
,
pdu_session_id
))
{
// TODO:
return
false
;
}
std
::
vector
<
smf_qos_flow
>
flows
=
{};
std
::
vector
<
smf_qos_flow
>
flows
=
{};
sp
.
get
()
->
get_qos_flows
(
sp
.
get
()
->
get_qos_flows
(
...
@@ -3217,11 +3225,11 @@ bool smf_context::handle_ho_preparation_request_ack(
...
@@ -3217,11 +3225,11 @@ bool smf_context::handle_ho_preparation_request_ack(
int
decode_status
=
smf_n2
::
get_instance
().
decode_n2_sm_information
(
int
decode_status
=
smf_n2
::
get_instance
().
decode_n2_sm_information
(
decoded_msg
,
n2_sm_information
);
decoded_msg
,
n2_sm_information
);
if
(
decode_status
==
RETURNerror
)
{
if
(
decode_status
==
RETURNerror
)
{
//
e
rror, send error to AMF
//
E
rror, send error to AMF
Logger
::
smf_app
().
warn
(
Logger
::
smf_app
().
warn
(
"Decode N2 SM (Ngap_HandoverRequestAcknowledgeTransfer) "
"Decode N2 SM (Ngap_HandoverRequestAcknowledgeTransfer) "
"failed!"
);
"failed!"
);
//
t
rigger to send reply to AMF
//
T
rigger to send reply to AMF
// TODO: to be updated with correct status/cause
// TODO: to be updated with correct status/cause
smf_app_inst
->
trigger_update_context_error_response
(
smf_app_inst
->
trigger_update_context_error_response
(
http_status_code_e
::
HTTP_STATUS_CODE_403_FORBIDDEN
,
http_status_code_e
::
HTTP_STATUS_CODE_403_FORBIDDEN
,
...
@@ -3232,7 +3240,7 @@ bool smf_context::handle_ho_preparation_request_ack(
...
@@ -3232,7 +3240,7 @@ bool smf_context::handle_ho_preparation_request_ack(
}
}
if
(
decoded_msg
->
dL_NGU_UP_TNLInformation
.
present
)
{
if
(
decoded_msg
->
dL_NGU_UP_TNLInformation
.
present
)
{
//
s
tore AN Tunnel Info + list of accepted QFIs
//
S
tore AN Tunnel Info + list of accepted QFIs
pfcp
::
fteid_t
dl_teid
=
{};
pfcp
::
fteid_t
dl_teid
=
{};
memcpy
(
memcpy
(
...
@@ -3247,6 +3255,7 @@ bool smf_context::handle_ho_preparation_request_ack(
...
@@ -3247,6 +3255,7 @@ bool smf_context::handle_ho_preparation_request_ack(
dl_teid
.
teid
=
ntohl
(
dl_teid
.
teid
);
dl_teid
.
teid
=
ntohl
(
dl_teid
.
teid
);
dl_teid
.
v4
=
1
;
// Only V4 for now
dl_teid
.
v4
=
1
;
// Only V4 for now
dl_teid
.
v6
=
0
;
sm_context_request
.
get
()
->
req
.
set_dl_fteid
(
dl_teid
);
sm_context_request
.
get
()
->
req
.
set_dl_fteid
(
dl_teid
);
Logger
::
smf_app
().
debug
(
Logger
::
smf_app
().
debug
(
...
@@ -3366,6 +3375,13 @@ bool smf_context::handle_ho_execution(
...
@@ -3366,6 +3375,13 @@ bool smf_context::handle_ho_execution(
}
}
// TODO: process Ngap_SecondaryRATDataUsageReportTransfer
// TODO: process Ngap_SecondaryRATDataUsageReportTransfer
// Fill the content of SmContextUpdatedData
nlohmann
::
json
json_data
=
{};
json_data
[
"hoState"
]
=
"COMPLETED"
;
sm_context_resp
.
get
()
->
res
.
set_json_data
(
json_data
);
sm_context_resp
.
get
()
->
res
.
set_http_code
(
http_status_code_e
::
HTTP_STATUS_CODE_200_OK
);
// set HoState to NONE
// set HoState to NONE
sp
.
get
()
->
set_ho_state
(
ho_state_e
::
HO_STATE_COMPLETED
);
sp
.
get
()
->
set_ho_state
(
ho_state_e
::
HO_STATE_COMPLETED
);
return
true
;
return
true
;
...
@@ -3780,6 +3796,14 @@ void smf_context::get_plmn(plmn_t& plmn) const {
...
@@ -3780,6 +3796,14 @@ void smf_context::get_plmn(plmn_t& plmn) const {
plmn
=
this
->
plmn
;
plmn
=
this
->
plmn
;
}
}
//------------------------------------------------------------------------------
bool
smf_context
::
check_handover_possibility
(
const
ng_ran_target_id_t
&
ran_target_id
,
const
pdu_session_id_t
&
pdu_session_id
)
const
{
// TODO:
return
true
;
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
bool
dnn_context
::
find_pdu_session
(
bool
dnn_context
::
find_pdu_session
(
const
uint32_t
pdu_session_id
,
const
uint32_t
pdu_session_id
,
...
...
src/smf_app/smf_context.hpp
View file @
8f2660cf
...
@@ -1172,6 +1172,17 @@ class smf_context : public std::enable_shared_from_this<smf_context> {
...
@@ -1172,6 +1172,17 @@ class smf_context : public std::enable_shared_from_this<smf_context> {
*/
*/
void
get_plmn
(
plmn_t
&
plmn
)
const
;
void
get_plmn
(
plmn_t
&
plmn
)
const
;
/*
* Check if N2 HO for this PDU session can be accepted
* @param [const ng_ran_target_id_t&] ran_target_id: Target ID
* @param [const pdu_session_id_t&] pdu_session_id: PDU Session ID
* @return true if the N2 HO can be accepted, otherwise return false
*
*/
bool
check_handover_possibility
(
const
ng_ran_target_id_t
&
ran_target_id
,
const
pdu_session_id_t
&
pdu_session_id
)
const
;
private:
private:
std
::
vector
<
std
::
shared_ptr
<
dnn_context
>>
dnns
;
std
::
vector
<
std
::
shared_ptr
<
dnn_context
>>
dnns
;
std
::
vector
<
std
::
shared_ptr
<
smf_procedure
>>
pending_procedures
;
std
::
vector
<
std
::
shared_ptr
<
smf_procedure
>>
pending_procedures
;
...
...
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