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
c77a9a40
Commit
c77a9a40
authored
Oct 09, 2020
by
Tien-Thinh Nguyen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Process Create SM Context Request colliding with an existing SM Context
parent
7369359d
Changes
3
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
86 additions
and
36 deletions
+86
-36
src/smf_app/smf_app.cpp
src/smf_app/smf_app.cpp
+12
-18
src/smf_app/smf_context.cpp
src/smf_app/smf_context.cpp
+55
-14
src/smf_app/smf_context.hpp
src/smf_app/smf_context.hpp
+19
-4
No files found.
src/smf_app/smf_app.cpp
View file @
c77a9a40
...
...
@@ -770,23 +770,7 @@ void smf_app::handle_pdu_session_create_sm_context_request(
return
;
}
//Step 4. Verify the session is already existed
if
(
is_scid_2_smf_context
(
supi64
,
dnn
,
snssai
,
pdu_session_id
))
{
//TODO: should delete the local context (including and any associated resources in the UPF and PCF) and create a new one
Logger
::
smf_app
().
warn
(
"PDU Session already existed (SUPI "
SUPI_64_FMT
", DNN %s, NSSAI (sst %d, sd %s), PDU Session ID %d)"
,
supi64
,
dnn
.
c_str
(),
snssai
.
sST
,
snssai
.
sD
.
c_str
(),
pdu_session_id
);
//TODO: temporary disable this action to test with AMF
/*
//trigger to send reply to AMF
trigger_http_response(
http_status_code_e::HTTP_STATUS_CODE_406_NOT_ACCEPTABLE, smreq->pid,
N11_SESSION_CREATE_SM_CONTEXT_RESPONSE);
return;
*/
}
//Step 5. create a context for this supi if not existed, otherwise update
//Step 4. create a context for this supi if not existed, otherwise update
std
::
shared_ptr
<
smf_context
>
sc
=
{
};
if
(
is_supi_2_smf_context
(
supi64
))
{
Logger
::
smf_app
().
debug
(
"Update SMF context with SUPI "
SUPI_64_FMT
""
,
...
...
@@ -802,7 +786,7 @@ void smf_app::handle_pdu_session_create_sm_context_request(
set_supi_2_smf_context
(
supi64
,
sc
);
}
//Step
6
. Create/update context with dnn information
//Step
5
. Create/update context with dnn information
std
::
shared_ptr
<
dnn_context
>
sd
=
{
};
if
(
!
sc
.
get
()
->
find_dnn_context
(
snssai
,
dnn
,
sd
))
{
...
...
@@ -818,6 +802,16 @@ void smf_app::handle_pdu_session_create_sm_context_request(
}
}
//Step 6. if colliding with an existing SM context (session is already existed and request type is INITIAL_REQUEST)
//Delete the local context (including and any associated resources in the UPF and PCF) and create a new one
if
(
is_scid_2_smf_context
(
supi64
,
dnn
,
snssai
,
pdu_session_id
)
&&
(
request_type
.
compare
(
"INITIAL_REQUEST"
)
==
0
))
{
//remove smf_pdu_session (including all flows associated to this session)
sd
.
get
()
->
remove_pdu_session
(
pdu_session_id
);
Logger
::
smf_app
().
warn
(
"PDU Session already existed (SUPI "
SUPI_64_FMT
", DNN %s, NSSAI (sst %d, sd %s), PDU Session ID %d)"
,
supi64
,
dnn
.
c_str
(),
snssai
.
sST
,
snssai
.
sD
.
c_str
(),
pdu_session_id
);
}
//Step 7. retrieve Session Management Subscription data from UDM if not available (step 4, section 4.3.2 3GPP TS 23.502)
std
::
string
dnn_selection_mode
=
smreq
->
req
.
get_dnn_selection_mode
();
//if the Session Management Subscription data is not available, get from configuration file or UDM
...
...
src/smf_app/smf_context.cpp
View file @
c77a9a40
This diff is collapsed.
Click to expand it.
src/smf_app/smf_context.hpp
View file @
c77a9a40
...
...
@@ -233,6 +233,12 @@ class smf_pdu_session : public std::enable_shared_from_this<smf_pdu_session> {
*/
void
remove_qos_flow
(
smf_qos_flow
&
flow
);
/*
* Remove all QoS flow associated with this PDU Session
* @return void
*/
void
remove_qos_flows
();
/*
* Set current status of PDU Session
* @param [const pdu_session_status_e &] status: status to be set
...
...
@@ -428,8 +434,7 @@ class smf_pdu_session : public std::enable_shared_from_this<smf_pdu_session> {
uint8_t
number_of_supported_packet_filters
;
//number_of_supported_packet_filters
util
::
uint_generator
<
uint32_t
>
qos_rule_id_generator
;
// Recursive lock
mutable
std
::
recursive_mutex
m_pdu_session_mutex
;
mutable
std
::
shared_mutex
m_pdu_session_mutex
;
};
...
...
@@ -438,7 +443,8 @@ class session_management_subscription {
session_management_subscription
(
snssai_t
snssai
)
:
single_nssai
(
snssai
),
dnn_configurations
()
{
dnn_configurations
(),
m_mutex
()
{
}
/*
...
...
@@ -471,6 +477,7 @@ class session_management_subscription {
private:
snssai_t
single_nssai
;
std
::
map
<
std
::
string
,
std
::
shared_ptr
<
dnn_configuration_t
>>
dnn_configurations
;
//dnn <->dnn_configuration
mutable
std
::
shared_mutex
m_mutex
;
};
/*
...
...
@@ -513,6 +520,14 @@ class dnn_context {
*/
void
insert_pdu_session
(
std
::
shared_ptr
<
smf_pdu_session
>
&
sp
);
/*
* Delete a PDU Session identified by its ID
* @param [const uint32_t] pdu_session_id
* @return bool: return true if the pdu session is deleted, otherwise, return false
*/
bool
remove_pdu_session
(
const
uint32_t
pdu_session_id
);
/*
* Get number of pdu sessions associated with this context (dnn and Nssai)
* @param void
...
...
@@ -531,7 +546,7 @@ class dnn_context {
std
::
string
dnn_in_use
;
// The DNN currently used, as received from the AMF
snssai_t
nssai
;
std
::
vector
<
std
::
shared_ptr
<
smf_pdu_session
>>
pdu_sessions
;
//Store all PDU Sessions associated with this DNN context
mutable
std
::
recursive
_mutex
m_context
;
mutable
std
::
shared
_mutex
m_context
;
};
class
smf_context
;
...
...
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