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
12bfb2a7
Commit
12bfb2a7
authored
Dec 01, 2022
by
Tien Thinh NGUYEN
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Update PDU Session Release Complete handling
parent
61e84600
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
70 additions
and
38 deletions
+70
-38
src/smf_app/smf_context.cpp
src/smf_app/smf_context.cpp
+62
-23
src/smf_app/smf_context.hpp
src/smf_app/smf_context.hpp
+6
-6
src/smf_app/smf_event_sig.hpp
src/smf_app/smf_event_sig.hpp
+2
-3
src/smf_app/smf_procedure.cpp
src/smf_app/smf_procedure.cpp
+0
-6
No files found.
src/smf_app/smf_context.cpp
View file @
12bfb2a7
...
...
@@ -2192,11 +2192,6 @@ bool smf_context::handle_pdu_session_release_complete(
// 5GSM Cause
// Extended Protocol Configuration Options
// Update PDU Session status -> INACTIVE
sp
.
get
()
->
set_pdu_session_status
(
pdu_session_status_e
::
PDU_SESSION_INACTIVE
);
// Stop timer T3592
itti_inst
->
timer_remove
(
sp
.
get
()
->
timer_T3592
);
// TODO: SMF invokes Nsmf_PDUSession_SMContextStatusNotify to notify AMF
// that the SM context for this PDU Session is released
scid_t
scid
=
{};
...
...
@@ -2214,12 +2209,13 @@ bool smf_context::handle_pdu_session_release_complete(
event_sub
.
sm_context_status
(
scid
,
status
,
sm_context_request
.
get
()
->
http_version
);
// Trigger PDU Session Release event notification
supi64_t
supi64
=
smf_supi_to_u64
(
sm_context_request
.
get
()
->
req
.
get_supi
());
Logger
::
smf_app
().
debug
(
"Signal the PDU Session Release Event notification"
);
event_sub
.
ee_pdu_session_release
(
supi64
,
sm_context_request
.
get
()
->
req
.
get_pdu_session_id
(),
sm_context_request
.
get
()
->
http_version
);
// TODO: Notify AMF that the SM context for this PDU session is released
if
(
sp
.
get
()
->
get_pdu_session_status
()
==
pdu_session_status_e
::
PDU_SESSION_ACTIVE
)
{
Logger
::
smf_app
().
debug
(
"Signal the PDU Session Release Event notification"
);
trigger_pdu_session_release
(
scid
,
1
);
}
// SM Policy Association termination
if
(
sp
->
policy_ptr
)
{
...
...
@@ -2242,6 +2238,11 @@ bool smf_context::handle_pdu_session_release_complete(
}
// TODO: Invoke Nudm_UECM_Deregistration
// Update PDU Session status -> INACTIVE
sp
.
get
()
->
set_pdu_session_status
(
pdu_session_status_e
::
PDU_SESSION_INACTIVE
);
// Stop timer T3592
itti_inst
->
timer_remove
(
sp
.
get
()
->
timer_T3592
);
return
true
;
}
...
...
@@ -2434,7 +2435,8 @@ bool smf_context::handle_pdu_session_resource_modify_response_transfer(
//-------------------------------------------------------------------------------------
bool
smf_context
::
handle_pdu_session_resource_release_response_transfer
(
std
::
string
&
n2_sm_information
,
std
::
shared_ptr
<
itti_n11_update_sm_context_request
>&
sm_context_request
)
{
std
::
shared_ptr
<
itti_n11_update_sm_context_request
>&
sm_context_request
,
std
::
shared_ptr
<
smf_pdu_session
>&
sp
)
{
std
::
string
n1_sm_msg
,
n1_sm_msg_hex
;
// TODO: SMF does nothing (Step 7, section 4.3.4.2@3GPP TS 23.502)
...
...
@@ -2457,6 +2459,22 @@ bool smf_context::handle_pdu_session_resource_release_response_transfer(
return
false
;
}
scid_t
scid
=
{};
try
{
scid
=
std
::
stoi
(
sm_context_request
->
scid
);
}
catch
(
const
std
::
exception
&
err
)
{
Logger
::
smf_app
().
warn
(
"Couldn't retrieve "
"the corresponding SMF context, ignore message!"
);
return
false
;
}
// Notify AMF that the SM context for this PDU session is released
if
(
sp
.
get
()
->
get_pdu_session_status
()
==
pdu_session_status_e
::
PDU_SESSION_ACTIVE
)
{
trigger_pdu_session_release
(
scid
,
1
);
}
smf_app_inst
->
trigger_http_response
(
http_status_code_e
::
HTTP_STATUS_CODE_200_OK
,
sm_context_request
.
get
()
->
pid
,
N11_SESSION_UPDATE_SM_CONTEXT_RESPONSE
);
...
...
@@ -2691,15 +2709,12 @@ bool smf_context::handle_pdu_session_update_sm_context_request(
return
false
;
}
// Update PDU session status to PDU_SESSION_INACTIVE
sp
.
get
()
->
set_pdu_session_status
(
pdu_session_status_e
::
PDU_SESSION_INACTIVE
);
// display info
Logger
::
smf_app
().
info
(
"SMF context:
\n
%s"
,
toString
().
c_str
());
// don't need to create a procedure to update UPF
pdu_session_release_procedure
=
true
;
}
break
;
default:
{
Logger
::
smf_app
().
warn
(
"Unknown message type %d"
,
message_type
);
...
...
@@ -2803,7 +2818,7 @@ bool smf_context::handle_pdu_session_update_sm_context_request(
PDU_SESSION_RELEASE_UE_REQUESTED_STEP2
;
if
(
!
handle_pdu_session_resource_release_response_transfer
(
n2_sm_information
,
smreq
))
{
n2_sm_information
,
smreq
,
sp
))
{
// TODO:
return
false
;
}
...
...
@@ -3965,13 +3980,34 @@ void smf_context::handle_sm_context_status_change(
}
}
//------------------------------------------------------------------------------
void
smf_context
::
trigger_pdu_session_release
(
scid_t
scid
,
uint8_t
http_version
)
{
event_sub
.
ee_pdu_session_release
(
scid
,
http_version
);
}
//------------------------------------------------------------------------------
void
smf_context
::
handle_ee_pdu_session_release
(
s
upi64_t
supi
,
pdu_session_id_t
pdu_session_
id
,
uint8_t
http_version
)
{
s
cid_t
sc
id
,
uint8_t
http_version
)
{
Logger
::
smf_app
().
debug
(
"Send request to N11 to triger PDU Session Release Notification (Event "
"Exposure), SUPI "
SUPI_64_FMT
" , PDU Session ID %d, HTTP version %d"
,
supi
,
pdu_session_id
,
http_version
);
"Send request to N11 to triger PDU Session Release Notification, "
"SMF Context ID "
SCID_FMT
" "
,
scid
);
// get the smf context
std
::
shared_ptr
<
smf_context_ref
>
scf
=
{};
if
(
smf_app_inst
->
is_scid_2_smf_context
(
scid
))
{
scf
=
smf_app_inst
->
scid_2_smf_context
(
scid
);
}
else
{
Logger
::
smf_app
().
warn
(
"Context associated with this id "
SCID_FMT
" does not exit!"
,
scid
);
return
;
}
supi_t
supi
=
scf
.
get
()
->
supi
;
supi64_t
supi64
=
smf_supi_to_u64
(
supi
);
pdu_session_id_t
pdu_session_id
=
scf
.
get
()
->
pdu_session_id
;
std
::
vector
<
std
::
shared_ptr
<
smf_subscription
>>
subscriptions
=
{};
smf_app_inst
->
get_ee_subscriptions
(
...
...
@@ -3987,10 +4023,9 @@ void smf_context::handle_ee_pdu_session_release(
for
(
auto
i
:
subscriptions
)
{
event_notification
ev_notif
=
{};
ev_notif
.
set_supi
(
supi
);
ev_notif
.
set_supi
(
supi
64
);
ev_notif
.
set_pdu_session_id
(
pdu_session_id
);
ev_notif
.
set_smf_event
(
smf_event_t
::
SMF_EVENT_PDU_SES_REL
);
ev_notif
.
set_supi
(
supi
);
ev_notif
.
set_notif_uri
(
i
.
get
()
->
notif_uri
);
ev_notif
.
set_notif_id
(
i
.
get
()
->
notif_id
);
// custom json e.g., for FlexCN
...
...
@@ -5443,6 +5478,10 @@ void smf_context::send_pdu_session_release_response(
http_status_code_e
::
HTTP_STATUS_CODE_406_NOT_ACCEPTABLE
);
}
// clear the resources including addresses allocated to this Session and
// associated QoS flows
sps
->
deallocate_ressources
(
resp
->
res
.
get_dnn
());
// send ITTI message to SMF_APP interface to trigger the response towards AMFs
Logger
::
smf_app
().
info
(
"Sending ITTI message %s to task TASK_SMF_APP"
,
resp
->
get_msg_name
());
...
...
src/smf_app/smf_context.hpp
View file @
12bfb2a7
...
...
@@ -614,7 +614,7 @@ class smf_context : public std::enable_shared_from_this<smf_context> {
// Subscribe to PDU Session Release (event exposure)
ee_pdu_session_release_connection
=
event_sub
.
subscribe_ee_pdu_session_release
(
boost
::
bind
(
&
smf_context
::
handle_ee_pdu_session_release
,
this
,
_1
,
_2
,
_3
));
&
smf_context
::
handle_ee_pdu_session_release
,
this
,
_1
,
_2
));
// Subscribe to UE IP Change Event
ee_ue_ip_change_connection
=
event_sub
.
subscribe_ee_ue_ip_change
(
...
...
@@ -885,7 +885,8 @@ class smf_context : public std::enable_shared_from_this<smf_context> {
*/
bool
handle_pdu_session_resource_release_response_transfer
(
std
::
string
&
n2_sm_information
,
std
::
shared_ptr
<
itti_n11_update_sm_context_request
>&
sm_context_request
);
std
::
shared_ptr
<
itti_n11_update_sm_context_request
>&
sm_context_request
,
std
::
shared_ptr
<
smf_pdu_session
>&
sp
);
/*
* Handle Xn Handover Patch Switch Request
...
...
@@ -1183,14 +1184,13 @@ class smf_context : public std::enable_shared_from_this<smf_context> {
scid_t
scid
,
const
std
::
string
&
status
,
uint8_t
http_version
);
/*
*
Handle SM Context Status Change
(Send notification AMF)
*
Trigger PDU Session Release Notification
(Send notification AMF)
* @param [scid_t] scid: SMF Context ID
* @param [uint32_t] status: Updated status
* @param [uint8_t] http_version: HTTP version
* @return void
*/
void
handle_ee_pdu_session_release
(
supi64_t
supi
,
pdu_session_id_t
pdu_session_
id
,
uint8_t
http_version
);
void
trigger_pdu_session_release
(
scid_t
scid
,
uint8_t
http_version
);
void
handle_ee_pdu_session_release
(
scid_t
sc
id
,
uint8_t
http_version
);
void
trigger_ue_ip_change
(
scid_t
scid
,
uint8_t
http_version
);
void
handle_ue_ip_change
(
scid_t
scid
,
uint8_t
http_version
);
...
...
src/smf_app/smf_event_sig.hpp
View file @
12bfb2a7
...
...
@@ -46,10 +46,9 @@ typedef bs2::signal_type<
bs2
::
keywords
::
mutex_type
<
bs2
::
dummy_mutex
>>::
type
sm_context_status_sig_t
;
// Signal for Event exposure
// PDU session Release, S
UPI, PDU Session
ID, HTTP version
// PDU session Release, S
C
ID, HTTP version
typedef
bs2
::
signal_type
<
void
(
supi64_t
,
pdu_session_id_t
,
uint8_t
),
bs2
::
keywords
::
mutex_type
<
bs2
::
dummy_mutex
>>::
type
void
(
scid_t
,
uint8_t
),
bs2
::
keywords
::
mutex_type
<
bs2
::
dummy_mutex
>>::
type
ee_pdu_session_release_sig_t
;
// TODO: ee_ue_ip_address_change_sig_t; //UI IP Address, UE ID
...
...
src/smf_app/smf_procedure.cpp
View file @
12bfb2a7
...
...
@@ -1569,12 +1569,6 @@ smf_procedure_code session_release_sm_context_procedure::handle_itti_msg(
n11_triggered_pending
->
res
.
set_cause
(
static_cast
<
uint8_t
>
(
cause_value_5gsm_e
::
CAUSE_255_REQUEST_ACCEPTED
));
Logger
::
smf_app
().
info
(
"PDU Session Release SM Context accepted by UPFs"
);
// clear the resources including addresses allocated to this Session and
// associated QoS flows
sps
->
deallocate_ressources
(
n11_trigger
->
req
.
get_dnn
());
// TODO: for IPv6 (only for Ipv4 for the moment)
// trigger to send reply to AMF
return
smf_procedure_code
::
OK
;
}
else
{
n11_triggered_pending
->
res
.
set_cause
(
static_cast
<
uint8_t
>
(
...
...
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