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
3c71b1c2
Commit
3c71b1c2
authored
Jun 25, 2022
by
Tien Thinh NGUYEN
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix SD issue
parent
2e98b774
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
143 additions
and
101 deletions
+143
-101
src/common/smf.h
src/common/smf.h
+20
-12
src/common/utils/3gpp_conversions.cpp
src/common/utils/3gpp_conversions.cpp
+14
-2
src/common/utils/3gpp_conversions.hpp
src/common/utils/3gpp_conversions.hpp
+1
-0
src/smf_app/smf_app.cpp
src/smf_app/smf_app.cpp
+11
-11
src/smf_app/smf_config.cpp
src/smf_app/smf_config.cpp
+14
-5
src/smf_app/smf_context.cpp
src/smf_app/smf_context.cpp
+16
-28
src/smf_app/smf_n1.cpp
src/smf_app/smf_n1.cpp
+3
-12
src/smf_app/smf_pfcp_association.cpp
src/smf_app/smf_pfcp_association.cpp
+7
-7
src/smf_app/smf_procedure.cpp
src/smf_app/smf_procedure.cpp
+2
-2
src/smf_app/smf_profile.cpp
src/smf_app/smf_profile.cpp
+46
-17
src/smf_app/smf_sbi.cpp
src/smf_app/smf_sbi.cpp
+9
-5
No files found.
src/common/smf.h
View file @
3c71b1c2
...
@@ -62,15 +62,23 @@ static uint64_t smf_supi_to_u64(supi_t supi) {
...
@@ -62,15 +62,23 @@ static uint64_t smf_supi_to_u64(supi_t supi) {
typedef
struct
s_nssai
// section 28.4, TS23.003
typedef
struct
s_nssai
// section 28.4, TS23.003
{
{
uint8_t
sST
;
uint8_t
sst
;
// uint32_t sD:24;
uint32_t
sd
;
std
::
string
sD
;
s_nssai
(
const
uint8_t
&
m_sst
,
const
uint32_t
m_sd
)
:
sst
(
m_sst
),
sd
(
m_sd
)
{}
// s_nssai(const uint8_t& sst, const uint32_t sd) : sST(sst), sD(sd) {}
s_nssai
(
const
uint8_t
&
m_sst
,
const
std
::
string
m_sd
)
:
sst
(
m_sst
)
{
s_nssai
(
const
uint8_t
&
sst
,
const
std
::
string
sd
)
:
sST
(
sst
),
sD
(
sd
)
{}
sd
=
0xFFFFFF
;
s_nssai
()
:
sST
(),
sD
()
{}
try
{
s_nssai
(
const
s_nssai
&
p
)
:
sST
(
p
.
sST
),
sD
(
p
.
sD
)
{}
sd
=
std
::
stoul
(
m_sd
,
nullptr
,
10
);
}
catch
(
const
std
::
exception
&
e
)
{
Logger
::
smf_app
().
warn
(
"Error when converting from string to int for snssai.SD, error: %s"
,
e
.
what
());
}
}
s_nssai
()
:
sst
(),
sd
()
{}
s_nssai
(
const
s_nssai
&
p
)
:
sst
(
p
.
sst
),
sd
(
p
.
sd
)
{}
bool
operator
==
(
const
struct
s_nssai
&
s
)
const
{
bool
operator
==
(
const
struct
s_nssai
&
s
)
const
{
if
((
s
.
s
ST
==
this
->
sST
)
&&
(
s
.
sD
.
compare
(
this
->
sD
)
==
0
))
{
if
((
s
.
s
st
==
this
->
sst
)
&&
(
s
.
sd
==
this
->
sd
))
{
return
true
;
return
true
;
}
else
{
}
else
{
return
false
;
return
false
;
...
@@ -78,15 +86,15 @@ typedef struct s_nssai // section 28.4, TS23.003
...
@@ -78,15 +86,15 @@ typedef struct s_nssai // section 28.4, TS23.003
}
}
s_nssai
&
operator
=
(
const
struct
s_nssai
&
s
)
{
s_nssai
&
operator
=
(
const
struct
s_nssai
&
s
)
{
s
ST
=
s
.
sST
;
s
st
=
s
.
sst
;
s
D
=
s
.
sD
;
s
d
=
s
.
sd
;
return
*
this
;
return
*
this
;
}
}
std
::
string
toString
()
const
{
std
::
string
toString
()
const
{
std
::
string
s
=
{};
std
::
string
s
=
{};
s
.
append
(
"SST="
).
append
(
std
::
to_string
(
s
ST
));
s
.
append
(
"SST="
).
append
(
std
::
to_string
(
s
st
));
s
.
append
(
", SD="
).
append
(
s
D
);
s
.
append
(
", SD="
).
append
(
s
td
::
to_string
(
sd
)
);
return
s
;
return
s
;
}
}
...
...
src/common/utils/3gpp_conversions.cpp
View file @
3c71b1c2
...
@@ -558,8 +558,8 @@ void xgpp_conv::smf_event_exposure_notification_from_openapi(
...
@@ -558,8 +558,8 @@ void xgpp_conv::smf_event_exposure_notification_from_openapi(
void
xgpp_conv
::
sm_context_request_from_nas
(
void
xgpp_conv
::
sm_context_request_from_nas
(
const
nas_message_t
&
nas_msg
,
const
nas_message_t
&
nas_msg
,
smf
::
pdu_session_create_sm_context_request
&
pcr
)
{
smf
::
pdu_session_create_sm_context_request
&
pcr
)
{
pdu_session_type_t
pdu_session_type
=
{
.
pdu_session_type
=
pdu_session_type_t
pdu_session_type
=
{
PDU_SESSION_TYPE_E_IPV4
};
.
pdu_session_type
=
PDU_SESSION_TYPE_E_IPV4
};
// Extended Protocol Discriminator
// Extended Protocol Discriminator
pcr
.
set_epd
(
nas_msg
.
header
.
extended_protocol_discriminator
);
pcr
.
set_epd
(
nas_msg
.
header
.
extended_protocol_discriminator
);
// Message Type
// Message Type
...
@@ -634,3 +634,15 @@ void xgpp_conv::update_sm_context_response_from_ctx_request(
...
@@ -634,3 +634,15 @@ void xgpp_conv::update_sm_context_response_from_ctx_request(
ct_response
->
res
.
set_snssai
(
ct_request
->
req
.
get_snssai
());
ct_response
->
res
.
set_snssai
(
ct_request
->
req
.
get_snssai
());
ct_response
->
res
.
set_dnn
(
ct_request
->
req
.
get_dnn
());
ct_response
->
res
.
set_dnn
(
ct_request
->
req
.
get_dnn
());
}
}
//------------------------------------------------------------------------------
void
xgpp_conv
::
sd_string_to_int
(
const
std
::
string
&
sd_str
,
uint32_t
&
sd
)
{
sd
=
0xFFFFFF
;
try
{
sd
=
std
::
stoul
(
sd_str
,
nullptr
,
10
);
}
catch
(
const
std
::
exception
&
e
)
{
Logger
::
smf_app
().
warn
(
"Error when converting from string to int for S-NSSAI SD, error: %s"
,
e
.
what
());
}
}
src/common/utils/3gpp_conversions.hpp
View file @
3c71b1c2
...
@@ -169,6 +169,7 @@ void update_sm_context_response_from_ctx_request(
...
@@ -169,6 +169,7 @@ void update_sm_context_response_from_ctx_request(
const
std
::
shared_ptr
<
itti_n11_update_sm_context_request
>&
ct_request
,
const
std
::
shared_ptr
<
itti_n11_update_sm_context_request
>&
ct_request
,
std
::
shared_ptr
<
itti_n11_update_sm_context_response
>&
ct_response
);
std
::
shared_ptr
<
itti_n11_update_sm_context_response
>&
ct_response
);
void
sd_string_to_int
(
const
std
::
string
&
sd_str
,
uint32_t
&
sd
);
}
// namespace xgpp_conv
}
// namespace xgpp_conv
#endif
/* FILE_3GPP_CONVERSIONS_HPP_SEEN */
#endif
/* FILE_3GPP_CONVERSIONS_HPP_SEEN */
src/smf_app/smf_app.cpp
View file @
3c71b1c2
...
@@ -785,8 +785,8 @@ void smf_app::handle_pdu_session_create_sm_context_request(
...
@@ -785,8 +785,8 @@ void smf_app::handle_pdu_session_create_sm_context_request(
std
::
string
n1_sm_message
,
n1_sm_message_hex
;
std
::
string
n1_sm_message
,
n1_sm_message_hex
;
nas_message_t
decoded_nas_msg
=
{};
nas_message_t
decoded_nas_msg
=
{};
cause_value_5gsm_e
cause_n1
=
{
cause_value_5gsm_e
::
CAUSE_0_UNKNOWN
};
cause_value_5gsm_e
cause_n1
=
{
cause_value_5gsm_e
::
CAUSE_0_UNKNOWN
};
pdu_session_type_t
pdu_session_type
=
{
.
pdu_session_type
=
pdu_session_type_t
pdu_session_type
=
{
PDU_SESSION_TYPE_E_IPV4
};
.
pdu_session_type
=
PDU_SESSION_TYPE_E_IPV4
};
// Step 1. Decode NAS and get the necessary information
// Step 1. Decode NAS and get the necessary information
int
decoder_rc
=
smf_n1
::
get_instance
().
decode_n1_sm_container
(
int
decoder_rc
=
smf_n1
::
get_instance
().
decode_n1_sm_container
(
...
@@ -853,8 +853,8 @@ void smf_app::handle_pdu_session_create_sm_context_request(
...
@@ -853,8 +853,8 @@ void smf_app::handle_pdu_session_create_sm_context_request(
snssai_t
snssai
=
smreq
->
req
.
get_snssai
();
snssai_t
snssai
=
smreq
->
req
.
get_snssai
();
Logger
::
smf_app
().
info
(
Logger
::
smf_app
().
info
(
"Handle a PDU Session Create SM Context Request message from AMF, "
"Handle a PDU Session Create SM Context Request message from AMF, "
"SUPI "
SUPI_64_FMT
", SNSSAI SST %d, SD %
s
"
,
"SUPI "
SUPI_64_FMT
", SNSSAI SST %d, SD %
#0x
"
,
supi64
,
snssai
.
s
ST
,
snssai
.
sD
.
c_str
()
);
supi64
,
snssai
.
s
st
,
snssai
.
sd
);
// Step 2. Verify Procedure transaction id, pdu session id, message type,
// Step 2. Verify Procedure transaction id, pdu session id, message type,
// request type, etc.
// request type, etc.
...
@@ -1878,8 +1878,8 @@ bool smf_app::get_session_management_subscription_data(
...
@@ -1878,8 +1878,8 @@ bool smf_app::get_session_management_subscription_data(
std
::
make_shared
<
dnn_configuration_t
>
();
std
::
make_shared
<
dnn_configuration_t
>
();
for
(
auto
sub
:
smf_cfg
.
session_management_subscriptions
)
{
for
(
auto
sub
:
smf_cfg
.
session_management_subscriptions
)
{
if
((
0
==
dnn
.
compare
(
sub
.
dnn
))
and
(
snssai
.
s
ST
==
sub
.
single_nssai
.
sST
)
and
if
((
0
==
dnn
.
compare
(
sub
.
dnn
))
and
(
snssai
.
s
st
==
sub
.
single_nssai
.
sst
)
and
(
0
==
snssai
.
sD
.
compare
(
sub
.
single_nssai
.
sD
)
))
{
(
snssai
.
sd
==
sub
.
single_nssai
.
sd
))
{
// PDU Session Type
// PDU Session Type
pdu_session_type_t
pdu_session_type
(
pdu_session_type_t
pdu_session_type
(
pdu_session_type_e
::
PDU_SESSION_TYPE_E_IPV4
);
pdu_session_type_e
::
PDU_SESSION_TYPE_E_IPV4
);
...
@@ -2278,14 +2278,14 @@ void smf_app::generate_smf_profile() {
...
@@ -2278,14 +2278,14 @@ void smf_app::generate_smf_profile() {
for
(
auto
sms
:
smf_cfg
.
session_management_subscriptions
)
{
for
(
auto
sms
:
smf_cfg
.
session_management_subscriptions
)
{
// SNSSAIS
// SNSSAIS
snssai_t
snssai
=
{};
snssai_t
snssai
=
{};
snssai
.
s
D
=
sms
.
single_nssai
.
sD
;
snssai
.
s
d
=
sms
.
single_nssai
.
sd
;
snssai
.
s
ST
=
sms
.
single_nssai
.
sST
;
snssai
.
s
st
=
sms
.
single_nssai
.
sst
;
// Verify if this SNSSAI exist
// Verify if this SNSSAI exist
std
::
vector
<
snssai_t
>
ss
=
{};
std
::
vector
<
snssai_t
>
ss
=
{};
nf_instance_profile
.
get_nf_snssais
(
ss
);
nf_instance_profile
.
get_nf_snssais
(
ss
);
bool
found
=
false
;
bool
found
=
false
;
for
(
auto
it
:
ss
)
{
for
(
auto
it
:
ss
)
{
if
((
it
.
s
D
==
snssai
.
sD
)
and
(
it
.
sST
==
snssai
.
sST
))
{
if
((
it
.
s
d
==
snssai
.
sd
)
and
(
it
.
sst
==
snssai
.
sst
))
{
found
=
true
;
found
=
true
;
break
;
break
;
}
}
...
@@ -2296,8 +2296,8 @@ void smf_app::generate_smf_profile() {
...
@@ -2296,8 +2296,8 @@ void smf_app::generate_smf_profile() {
dnn_smf_info_item_t
dnn_item
=
{.
dnn
=
sms
.
dnn
};
dnn_smf_info_item_t
dnn_item
=
{.
dnn
=
sms
.
dnn
};
snssai_smf_info_item_t
smf_info_item
=
{};
snssai_smf_info_item_t
smf_info_item
=
{};
smf_info_item
.
dnn_smf_info_list
.
push_back
(
dnn_item
);
smf_info_item
.
dnn_smf_info_list
.
push_back
(
dnn_item
);
smf_info_item
.
snssai
.
s
D
=
sms
.
single_nssai
.
sD
;
smf_info_item
.
snssai
.
s
d
=
sms
.
single_nssai
.
sd
;
smf_info_item
.
snssai
.
s
ST
=
sms
.
single_nssai
.
sST
;
smf_info_item
.
snssai
.
s
st
=
sms
.
single_nssai
.
sst
;
nf_instance_profile
.
add_smf_info_item
(
smf_info_item
);
nf_instance_profile
.
add_smf_info_item
(
smf_info_item
);
}
}
...
...
src/smf_app/smf_config.cpp
View file @
3c71b1c2
...
@@ -843,8 +843,17 @@ int smf_config::load(const string& config_file) {
...
@@ -843,8 +843,17 @@ int smf_config::load(const string& config_file) {
session_management_subscription_cfg
.
lookupValue
(
session_management_subscription_cfg
.
lookupValue
(
SMF_CONFIG_STRING_SESSION_AMBR_DL
,
session_ambr_dl
);
SMF_CONFIG_STRING_SESSION_AMBR_DL
,
session_ambr_dl
);
sub_item
.
single_nssai
.
sST
=
nssai_sst
;
sub_item
.
single_nssai
.
sst
=
nssai_sst
;
sub_item
.
single_nssai
.
sD
=
nssai_sd
;
sub_item
.
single_nssai
.
sd
=
0xFFFFFF
;
try
{
sub_item
.
single_nssai
.
sd
=
std
::
stoul
(
nssai_sd
,
nullptr
,
10
);
}
catch
(
const
std
::
exception
&
e
)
{
Logger
::
smf_app
().
warn
(
"Error when converting from string to int for snssai.SD, error: "
"%s"
,
e
.
what
());
}
sub_item
.
session_type
=
default_session_type
;
sub_item
.
session_type
=
default_session_type
;
sub_item
.
dnn
=
dnn
;
sub_item
.
dnn
=
dnn
;
sub_item
.
ssc_mode
=
default_ssc_mode
;
sub_item
.
ssc_mode
=
default_ssc_mode
;
...
@@ -1062,13 +1071,13 @@ void smf_config::display() {
...
@@ -1062,13 +1071,13 @@ void smf_config::display() {
nssai_str
=
nssai_str
.
append
(
" "
)
nssai_str
=
nssai_str
.
append
(
" "
)
.
append
(
SMF_CONFIG_STRING_NSSAI_SST
)
.
append
(
SMF_CONFIG_STRING_NSSAI_SST
)
.
append
(
": "
)
.
append
(
": "
)
.
append
(
std
::
to_string
(
sub
.
single_nssai
.
s
ST
));
.
append
(
std
::
to_string
(
sub
.
single_nssai
.
s
st
));
if
(
!
boost
::
iequals
(
sub
.
single_nssai
.
sD
,
"0xffffff"
)
)
{
if
(
sub
.
single_nssai
.
sd
!=
0xffffff
)
{
nssai_str
=
nssai_str
.
append
(
", "
)
nssai_str
=
nssai_str
.
append
(
", "
)
.
append
(
SMF_CONFIG_STRING_NSSAI_SD
)
.
append
(
SMF_CONFIG_STRING_NSSAI_SD
)
.
append
(
": "
)
.
append
(
": "
)
.
append
(
s
ub
.
single_nssai
.
sD
);
.
append
(
s
td
::
to_string
(
sub
.
single_nssai
.
sd
)
);
}
}
Logger
::
smf_app
().
info
(
"%s"
,
nssai_str
.
c_str
());
Logger
::
smf_app
().
info
(
"%s"
,
nssai_str
.
c_str
());
...
...
src/smf_app/smf_context.cpp
View file @
3c71b1c2
...
@@ -945,9 +945,9 @@ void smf_context::handle_itti_msg(
...
@@ -945,9 +945,9 @@ void smf_context::handle_itti_msg(
json_data
[
"n2InfoContainer"
][
"smInfo"
][
"n2InfoContent"
][
"ngapData"
]
json_data
[
"n2InfoContainer"
][
"smInfo"
][
"n2InfoContent"
][
"ngapData"
]
[
"contentId"
]
=
N2_SM_CONTENT_ID
;
// NGAP part
[
"contentId"
]
=
N2_SM_CONTENT_ID
;
// NGAP part
json_data
[
"n2InfoContainer"
][
"smInfo"
][
"sNssai"
][
"sst"
]
=
json_data
[
"n2InfoContainer"
][
"smInfo"
][
"sNssai"
][
"sst"
]
=
session_report_msg
.
get_snssai
().
s
ST
;
session_report_msg
.
get_snssai
().
s
st
;
json_data
[
"n2InfoContainer"
][
"smInfo"
][
"sNssai"
][
"sd"
]
=
json_data
[
"n2InfoContainer"
][
"smInfo"
][
"sNssai"
][
"sd"
]
=
s
ession_report_msg
.
get_snssai
().
sD
;
s
td
::
to_string
(
session_report_msg
.
get_snssai
().
sd
)
;
session_report_msg
.
set_json_data
(
json_data
);
session_report_msg
.
set_json_data
(
json_data
);
...
@@ -1057,7 +1057,7 @@ void smf_context::get_default_qos(
...
@@ -1057,7 +1057,7 @@ void smf_context::get_default_qos(
const
snssai_t
&
snssai
,
const
std
::
string
&
dnn
,
const
snssai_t
&
snssai
,
const
std
::
string
&
dnn
,
subscribed_default_qos_t
&
default_qos
)
{
subscribed_default_qos_t
&
default_qos
)
{
Logger
::
smf_app
().
info
(
Logger
::
smf_app
().
info
(
"Get default QoS for a PDU Session, key %d"
,
(
uint8_t
)
snssai
.
s
ST
);
"Get default QoS for a PDU Session, key %d"
,
(
uint8_t
)
snssai
.
s
st
);
// get the default QoS profile
// get the default QoS profile
std
::
shared_ptr
<
session_management_subscription
>
ss
=
{};
std
::
shared_ptr
<
session_management_subscription
>
ss
=
{};
std
::
shared_ptr
<
dnn_configuration_t
>
sdc
=
{};
std
::
shared_ptr
<
dnn_configuration_t
>
sdc
=
{};
...
@@ -3162,9 +3162,9 @@ void smf_context::handle_pdu_session_modification_network_requested(
...
@@ -3162,9 +3162,9 @@ void smf_context::handle_pdu_session_modification_network_requested(
json_data
[
"n2InfoContainer"
][
"smInfo"
][
"n2InfoContent"
][
"ngapData"
]
json_data
[
"n2InfoContainer"
][
"smInfo"
][
"n2InfoContent"
][
"ngapData"
]
[
"contentId"
]
=
N2_SM_CONTENT_ID
;
// NGAP part
[
"contentId"
]
=
N2_SM_CONTENT_ID
;
// NGAP part
json_data
[
"n2InfoContainer"
][
"smInfo"
][
"sNssai"
][
"sst"
]
=
json_data
[
"n2InfoContainer"
][
"smInfo"
][
"sNssai"
][
"sst"
]
=
itti_msg
->
msg
.
get_snssai
().
s
ST
;
itti_msg
->
msg
.
get_snssai
().
s
st
;
json_data
[
"n2InfoContainer"
][
"smInfo"
][
"sNssai"
][
"sd"
]
=
json_data
[
"n2InfoContainer"
][
"smInfo"
][
"sNssai"
][
"sd"
]
=
itti_msg
->
msg
.
get_snssai
().
sD
;
std
::
to_string
(
itti_msg
->
msg
.
get_snssai
().
sd
)
;
json_data
[
"n2InfoContainer"
][
"ranInfo"
]
=
"SM"
;
json_data
[
"n2InfoContainer"
][
"ranInfo"
]
=
"SM"
;
json_data
[
"pduSessionId"
]
=
itti_msg
->
msg
.
get_pdu_session_id
();
json_data
[
"pduSessionId"
]
=
itti_msg
->
msg
.
get_pdu_session_id
();
...
@@ -3561,16 +3561,7 @@ bool smf_context::handle_ho_cancellation(
...
@@ -3561,16 +3561,7 @@ bool smf_context::handle_ho_cancellation(
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
void
smf_context
::
get_snssai_key
(
const
snssai_t
&
snssai
,
uint32_t
&
key
)
{
void
smf_context
::
get_snssai_key
(
const
snssai_t
&
snssai
,
uint32_t
&
key
)
{
uint32_t
sd
=
SD_NO_VALUE
;
key
=
(
snssai
.
sd
<<
8
|
snssai
.
sst
);
try
{
sd
=
std
::
stoul
(
snssai
.
sD
,
nullptr
,
10
);
}
catch
(
const
std
::
exception
&
e
)
{
Logger
::
smf_app
().
warn
(
"Error when converting from string to int for snssai.SD, error: %s"
,
e
.
what
());
}
key
=
(
sd
<<
8
|
snssai
.
sST
);
}
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
...
@@ -3582,11 +3573,10 @@ void smf_context::insert_dnn_subscription(
...
@@ -3582,11 +3573,10 @@ void smf_context::insert_dnn_subscription(
get_snssai_key
(
snssai
,
key
);
get_snssai_key
(
snssai
,
key
);
std
::
unique_lock
<
std
::
recursive_mutex
>
lock
(
m_context
);
std
::
unique_lock
<
std
::
recursive_mutex
>
lock
(
m_context
);
dnn_subscriptions
[
key
]
=
ss
;
dnn_subscriptions
[
key
]
=
ss
;
Logger
::
smf_app
().
info
(
Logger
::
smf_app
().
info
(
"Inserted DNN Subscription, key: %ld (SST %d, SD %
s)"
,
key
,
snssai
.
sST
,
"Inserted DNN Subscription, key: %ld (SST %d, SD %
#0x)"
,
key
,
snssai
.
sst
,
snssai
.
s
D
.
c_str
()
);
snssai
.
s
d
);
}
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
...
@@ -3598,11 +3588,9 @@ void smf_context::insert_dnn_subscription(
...
@@ -3598,11 +3588,9 @@ void smf_context::insert_dnn_subscription(
get_snssai_key
(
snssai
,
key
);
get_snssai_key
(
snssai
,
key
);
std
::
unique_lock
<
std
::
recursive_mutex
>
lock
(
m_context
);
std
::
unique_lock
<
std
::
recursive_mutex
>
lock
(
m_context
);
if
(
dnn_subscriptions
.
count
(
key
)
>
0
)
{
if
(
dnn_subscriptions
.
count
(
key
)
>
0
)
{
std
::
shared_ptr
<
session_management_subscription
>
old_ss
=
std
::
shared_ptr
<
session_management_subscription
>
old_ss
=
dnn_subscriptions
.
at
(
key
);
dnn_subscriptions
.
at
(
key
);
std
::
shared_ptr
<
dnn_configuration_t
>
dnn_configuration
=
{};
std
::
shared_ptr
<
dnn_configuration_t
>
dnn_configuration
=
{};
ss
.
get
()
->
find_dnn_configuration
(
dnn
,
dnn_configuration
);
ss
.
get
()
->
find_dnn_configuration
(
dnn
,
dnn_configuration
);
if
(
dnn_configuration
!=
nullptr
)
{
if
(
dnn_configuration
!=
nullptr
)
{
...
@@ -3613,8 +3601,8 @@ void smf_context::insert_dnn_subscription(
...
@@ -3613,8 +3601,8 @@ void smf_context::insert_dnn_subscription(
dnn_subscriptions
[
key
]
=
ss
;
dnn_subscriptions
[
key
]
=
ss
;
}
}
Logger
::
smf_app
().
info
(
Logger
::
smf_app
().
info
(
"Inserted DNN Subscription, key: %ld (SST %d, SD %
s
), dnn %s"
,
key
,
"Inserted DNN Subscription, key: %ld (SST %d, SD %
#0x
), dnn %s"
,
key
,
snssai
.
s
ST
,
snssai
.
sD
.
c_str
()
,
dnn
.
c_str
());
snssai
.
s
st
,
snssai
.
sd
,
dnn
.
c_str
());
}
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
...
@@ -3645,8 +3633,8 @@ bool smf_context::find_dnn_subscription(
...
@@ -3645,8 +3633,8 @@ bool smf_context::find_dnn_subscription(
get_snssai_key
(
snssai
,
key
);
get_snssai_key
(
snssai
,
key
);
Logger
::
smf_app
().
info
(
Logger
::
smf_app
().
info
(
"Find a DNN Subscription with key: %ld (SST %d, SD %
s
), map size %d"
,
"Find a DNN Subscription with key: %ld (SST %d, SD %
#0x
), map size %d"
,
(
uint8_t
)
snssai
.
s
ST
,
snssai
.
sD
.
c_str
()
,
dnn_subscriptions
.
size
());
(
uint8_t
)
snssai
.
s
st
,
snssai
.
sd
,
dnn_subscriptions
.
size
());
std
::
unique_lock
<
std
::
recursive_mutex
>
lock
(
m_context
);
std
::
unique_lock
<
std
::
recursive_mutex
>
lock
(
m_context
);
if
(
dnn_subscriptions
.
count
(
key
)
>
0
)
{
if
(
dnn_subscriptions
.
count
(
key
)
>
0
)
{
...
@@ -3655,8 +3643,8 @@ bool smf_context::find_dnn_subscription(
...
@@ -3655,8 +3643,8 @@ bool smf_context::find_dnn_subscription(
}
}
Logger
::
smf_app
().
info
(
Logger
::
smf_app
().
info
(
"DNN subscription (SST %d, SD %
s) not found"
,
(
uint8_t
)
snssai
.
sST
,
"DNN subscription (SST %d, SD %
#0x) not found"
,
(
uint8_t
)
snssai
.
sst
,
snssai
.
s
D
.
c_str
()
);
snssai
.
s
d
);
return
false
;
return
false
;
}
}
...
@@ -4157,8 +4145,8 @@ void smf_context::handle_flexcn_event(scid_t scid, uint8_t http_version) {
...
@@ -4157,8 +4145,8 @@ void smf_context::handle_flexcn_event(scid_t scid, uint8_t http_version) {
cj
[
"pdu_session_type"
]
=
cj
[
"pdu_session_type"
]
=
sp
->
pdu_session_type
.
toString
();
// PDU Session Type
sp
->
pdu_session_type
.
toString
();
// PDU Session Type
// NSSAI
// NSSAI
cj
[
"snssai"
][
"sst"
]
=
sp
->
get_snssai
().
s
ST
;
cj
[
"snssai"
][
"sst"
]
=
sp
->
get_snssai
().
s
st
;
cj
[
"snssai"
][
"sd"
]
=
s
p
->
get_snssai
().
sD
;
cj
[
"snssai"
][
"sd"
]
=
s
td
::
to_string
(
sp
->
get_snssai
().
sd
)
;
cj
[
"dnn"
]
=
sp
->
get_dnn
();
// DNN
cj
[
"dnn"
]
=
sp
->
get_dnn
();
// DNN
cj
[
"amf_addr"
]
=
sc
->
get_amf_addr
();
// Serving AMF addr
cj
[
"amf_addr"
]
=
sc
->
get_amf_addr
();
// Serving AMF addr
...
...
src/smf_app/smf_n1.cpp
View file @
3c71b1c2
...
@@ -203,18 +203,9 @@ bool smf_n1::create_n1_pdu_session_establishment_accept(
...
@@ -203,18 +203,9 @@ bool smf_n1::create_n1_pdu_session_establishment_accept(
// SNSSAI
// SNSSAI
sm_msg
->
pdu_session_establishment_accept
.
snssai
.
len
=
SST_AND_SD_LENGTH
;
sm_msg
->
pdu_session_establishment_accept
.
snssai
.
len
=
SST_AND_SD_LENGTH
;
sm_msg
->
pdu_session_establishment_accept
.
snssai
.
sst
=
sm_msg
->
pdu_session_establishment_accept
.
snssai
.
sst
=
sm_context_res
.
get_snssai
().
sST
;
sm_context_res
.
get_snssai
().
sst
;
sm_msg
->
pdu_session_establishment_accept
.
snssai
.
sd
=
try
{
sm_context_res
.
get_snssai
().
sd
;
sm_msg
->
pdu_session_establishment_accept
.
snssai
.
sd
=
std
::
stoul
(
sm_context_res
.
get_snssai
().
sD
,
nullptr
,
10
);
}
catch
(
const
std
::
exception
&
e
)
{
Logger
::
smf_n1
().
warn
(
"Error when converting from string to int for snssai.SD, error: %s"
,
e
.
what
());
//"no SD value associated with the SST"
sm_msg
->
pdu_session_establishment_accept
.
snssai
.
sd
=
0xFFFFFF
;
}
Logger
::
smf_n1
().
debug
(
Logger
::
smf_n1
().
debug
(
"SNSSAI SST %d, SD %#0x"
,
"SNSSAI SST %d, SD %#0x"
,
...
...
src/smf_app/smf_pfcp_association.cpp
View file @
3c71b1c2
...
@@ -467,17 +467,17 @@ bool pfcp_associations::select_up_node(
...
@@ -467,17 +467,17 @@ bool pfcp_associations::select_up_node(
Logger
::
smf_app
().
debug
(
"UPF info: %s"
,
upf_info
.
to_string
().
c_str
());
Logger
::
smf_app
().
debug
(
"UPF info: %s"
,
upf_info
.
to_string
().
c_str
());
for
(
auto
ui
:
upf_info
.
snssai_upf_info_list
)
{
for
(
auto
ui
:
upf_info
.
snssai_upf_info_list
)
{
if
(
ui
.
snssai
.
s
ST
==
snssai
.
sST
)
{
if
(
ui
.
snssai
.
s
st
==
snssai
.
sst
)
{
if
((
ui
.
snssai
.
s
ST
<=
SST_MAX_STANDARDIZED_VALUE
)
or
if
((
ui
.
snssai
.
s
st
<=
SST_MAX_STANDARDIZED_VALUE
)
or
(
snssai
.
s
D
.
compare
(
ui
.
snssai
.
sD
)
==
0
))
{
(
snssai
.
s
d
==
ui
.
snssai
.
sd
))
{
for
(
auto
d
:
ui
.
dnn_upf_info_list
)
{
for
(
auto
d
:
ui
.
dnn_upf_info_list
)
{
if
(
d
.
dnn
.
compare
(
dnn
)
==
0
)
{
if
(
d
.
dnn
.
compare
(
dnn
)
==
0
)
{
node_id
=
it
->
second
->
node_id
;
node_id
=
it
->
second
->
node_id
;
Logger
::
smf_app
().
info
(
Logger
::
smf_app
().
info
(
"Select the UPF for the corresponding DNN %s, NSSSAI (S
D
: "
"Select the UPF for the corresponding DNN %s, NSSSAI (S
ST
: "
"%
s
, "
"%
d
, "
"S
ST
: %d) "
,
"S
D
: %d) "
,
d
.
dnn
.
c_str
(),
snssai
.
s
D
.
c_str
(),
snssai
.
sST
);
d
.
dnn
.
c_str
(),
snssai
.
s
st
,
snssai
.
sd
);
return
true
;
return
true
;
}
}
}
}
...
...
src/smf_app/smf_procedure.cpp
View file @
3c71b1c2
...
@@ -542,9 +542,9 @@ void session_create_sm_context_procedure::handle_itti_msg(
...
@@ -542,9 +542,9 @@ void session_create_sm_context_procedure::handle_itti_msg(
json_data
[
"n2InfoContainer"
][
"smInfo"
][
"n2InfoContent"
][
"ngapData"
]
json_data
[
"n2InfoContainer"
][
"smInfo"
][
"n2InfoContent"
][
"ngapData"
]
[
"contentId"
]
=
N2_SM_CONTENT_ID
;
// NGAP part
[
"contentId"
]
=
N2_SM_CONTENT_ID
;
// NGAP part
json_data
[
"n2InfoContainer"
][
"smInfo"
][
"sNssai"
][
"sst"
]
=
json_data
[
"n2InfoContainer"
][
"smInfo"
][
"sNssai"
][
"sst"
]
=
n11_triggered_pending
->
res
.
get_snssai
().
s
ST
;
n11_triggered_pending
->
res
.
get_snssai
().
s
st
;
json_data
[
"n2InfoContainer"
][
"smInfo"
][
"sNssai"
][
"sd"
]
=
json_data
[
"n2InfoContainer"
][
"smInfo"
][
"sNssai"
][
"sd"
]
=
n11_triggered_pending
->
res
.
get_snssai
().
sD
;
std
::
to_string
(
n11_triggered_pending
->
res
.
get_snssai
().
sd
)
;
json_data
[
"n2InfoContainer"
][
"ranInfo"
]
=
"SM"
;
json_data
[
"n2InfoContainer"
][
"ranInfo"
]
=
"SM"
;
// N1N2MsgTxfrFailureNotification
// N1N2MsgTxfrFailureNotification
...
...
src/smf_app/smf_profile.cpp
View file @
3c71b1c2
...
@@ -203,7 +203,7 @@ void nf_profile::display() const {
...
@@ -203,7 +203,7 @@ void nf_profile::display() const {
Logger
::
smf_app
().
debug
(
"
\t
SNSSAI:"
);
Logger
::
smf_app
().
debug
(
"
\t
SNSSAI:"
);
}
}
for
(
auto
s
:
snssais
)
{
for
(
auto
s
:
snssais
)
{
Logger
::
smf_app
().
debug
(
"
\t\t
SST %d, SD %
s"
,
s
.
sST
,
s
.
sD
.
c_str
()
);
Logger
::
smf_app
().
debug
(
"
\t\t
SST %d, SD %
#0x"
,
s
.
sst
,
s
.
sd
);
}
}
if
(
!
fqdn
.
empty
())
{
if
(
!
fqdn
.
empty
())
{
Logger
::
smf_app
().
debug
(
"
\t
FQDN: %s"
,
fqdn
.
c_str
());
Logger
::
smf_app
().
debug
(
"
\t
FQDN: %s"
,
fqdn
.
c_str
());
...
@@ -235,8 +235,8 @@ void nf_profile::to_json(nlohmann::json& data) const {
...
@@ -235,8 +235,8 @@ void nf_profile::to_json(nlohmann::json& data) const {
data
[
"sNssais"
]
=
nlohmann
::
json
::
array
();
data
[
"sNssais"
]
=
nlohmann
::
json
::
array
();
for
(
auto
s
:
snssais
)
{
for
(
auto
s
:
snssais
)
{
nlohmann
::
json
tmp
=
{};
nlohmann
::
json
tmp
=
{};
tmp
[
"sst"
]
=
s
.
s
ST
;
tmp
[
"sst"
]
=
s
.
s
st
;
tmp
[
"sd"
]
=
s
.
sD
;
tmp
[
"sd"
]
=
s
td
::
to_string
(
s
.
sd
)
;
data
[
"sNssais"
].
push_back
(
tmp
);
data
[
"sNssais"
].
push_back
(
tmp
);
}
}
if
(
!
fqdn
.
empty
())
{
if
(
!
fqdn
.
empty
())
{
...
@@ -282,8 +282,17 @@ void nf_profile::from_json(const nlohmann::json& data) {
...
@@ -282,8 +282,17 @@ void nf_profile::from_json(const nlohmann::json& data) {
if
(
data
.
find
(
"sNssais"
)
!=
data
.
end
())
{
if
(
data
.
find
(
"sNssais"
)
!=
data
.
end
())
{
for
(
auto
it
:
data
[
"sNssais"
])
{
for
(
auto
it
:
data
[
"sNssais"
])
{
snssai_t
s
=
{};
snssai_t
s
=
{};
s
.
sST
=
it
[
"sst"
].
get
<
int
>
();
s
.
sst
=
it
[
"sst"
].
get
<
int
>
();
s
.
sD
=
it
[
"sd"
].
get
<
std
::
string
>
();
s
.
sd
=
0xFFFFFF
;
try
{
s
.
sd
=
std
::
stoul
(
it
[
"sd"
].
get
<
std
::
string
>
(),
nullptr
,
10
);
}
catch
(
const
std
::
exception
&
e
)
{
Logger
::
smf_app
().
warn
(
"Error when converting from string to int for snssai.SD, error: %s"
,
e
.
what
());
}
// s.sD = it["sd"].get<std::string>();
snssais
.
push_back
(
s
);
snssais
.
push_back
(
s
);
}
}
}
}
...
@@ -384,7 +393,7 @@ void smf_profile::display() const {
...
@@ -384,7 +393,7 @@ void smf_profile::display() const {
for
(
auto
s
:
smf_info
.
snssai_smf_info_list
)
{
for
(
auto
s
:
smf_info
.
snssai_smf_info_list
)
{
Logger
::
smf_app
().
debug
(
"
\t\t
Parameters supported by the SMF:"
);
Logger
::
smf_app
().
debug
(
"
\t\t
Parameters supported by the SMF:"
);
Logger
::
smf_app
().
debug
(
Logger
::
smf_app
().
debug
(
"
\t\t\t
SNSSAI (SST %d, SD %
s)"
,
s
.
snssai
.
sST
,
s
.
snssai
.
sD
.
c_str
()
);
"
\t\t\t
SNSSAI (SST %d, SD %
#0x)"
,
s
.
snssai
.
sst
,
s
.
snssai
.
sd
);
for
(
auto
d
:
s
.
dnn_smf_info_list
)
{
for
(
auto
d
:
s
.
dnn_smf_info_list
)
{
Logger
::
smf_app
().
debug
(
"
\t\t\t
DNN %s"
,
d
.
dnn
.
c_str
());
Logger
::
smf_app
().
debug
(
"
\t\t\t
DNN %s"
,
d
.
dnn
.
c_str
());
}
}
...
@@ -430,8 +439,8 @@ void smf_profile::to_json(nlohmann::json& data) const {
...
@@ -430,8 +439,8 @@ void smf_profile::to_json(nlohmann::json& data) const {
data
[
"smfInfo"
][
"sNssaiSmfInfoList"
]
=
nlohmann
::
json
::
array
();
data
[
"smfInfo"
][
"sNssaiSmfInfoList"
]
=
nlohmann
::
json
::
array
();
for
(
auto
s
:
smf_info
.
snssai_smf_info_list
)
{
for
(
auto
s
:
smf_info
.
snssai_smf_info_list
)
{
nlohmann
::
json
tmp
=
{};
nlohmann
::
json
tmp
=
{};
tmp
[
"sNssai"
][
"sst"
]
=
s
.
snssai
.
s
ST
;
tmp
[
"sNssai"
][
"sst"
]
=
s
.
snssai
.
s
st
;
tmp
[
"sNssai"
][
"sd"
]
=
s
.
snssai
.
sD
;
tmp
[
"sNssai"
][
"sd"
]
=
s
td
::
to_string
(
s
.
snssai
.
sd
)
;
tmp
[
"dnnSmfInfoList"
]
=
nlohmann
::
json
::
array
();
tmp
[
"dnnSmfInfoList"
]
=
nlohmann
::
json
::
array
();
for
(
auto
d
:
s
.
dnn_smf_info_list
)
{
for
(
auto
d
:
s
.
dnn_smf_info_list
)
{
nlohmann
::
json
dnn_json
=
{};
nlohmann
::
json
dnn_json
=
{};
...
@@ -464,9 +473,19 @@ void smf_profile::from_json(const nlohmann::json& data) {
...
@@ -464,9 +473,19 @@ void smf_profile::from_json(const nlohmann::json& data) {
snssai_smf_info_item_t
smf_info_item
=
{};
snssai_smf_info_item_t
smf_info_item
=
{};
if
(
it
.
find
(
"sNssai"
)
!=
it
.
end
())
{
if
(
it
.
find
(
"sNssai"
)
!=
it
.
end
())
{
if
(
it
[
"sNssai"
].
find
(
"sst"
)
!=
it
[
"sNssai"
].
end
())
if
(
it
[
"sNssai"
].
find
(
"sst"
)
!=
it
[
"sNssai"
].
end
())
smf_info_item
.
snssai
.
sST
=
it
[
"sNssai"
][
"sst"
].
get
<
int
>
();
smf_info_item
.
snssai
.
sst
=
it
[
"sNssai"
][
"sst"
].
get
<
int
>
();
if
(
it
[
"sNssai"
].
find
(
"sd"
)
!=
it
[
"sNssai"
].
end
())
if
(
it
[
"sNssai"
].
find
(
"sd"
)
!=
it
[
"sNssai"
].
end
())
{
smf_info_item
.
snssai
.
sD
=
it
[
"sNssai"
][
"sd"
].
get
<
std
::
string
>
();
smf_info_item
.
snssai
.
sd
=
0xFFFFFF
;
try
{
smf_info_item
.
snssai
.
sd
=
std
::
stoul
(
it
[
"sNssai"
][
"sd"
].
get
<
std
::
string
>
(),
nullptr
,
10
);
}
catch
(
const
std
::
exception
&
e
)
{
Logger
::
smf_app
().
warn
(
"Error when converting from string to int for snssai.SD, "
"error: %s"
,
e
.
what
());
}
}
}
}
if
(
it
.
find
(
"dnnSmfInfoList"
)
!=
it
.
end
())
{
if
(
it
.
find
(
"dnnSmfInfoList"
)
!=
it
.
end
())
{
for
(
auto
d
:
it
[
"dnnSmfInfoList"
])
{
for
(
auto
d
:
it
[
"dnnSmfInfoList"
])
{
...
@@ -514,7 +533,7 @@ void upf_profile::display() const {
...
@@ -514,7 +533,7 @@ void upf_profile::display() const {
for
(
auto
s
:
upf_info
.
snssai_upf_info_list
)
{
for
(
auto
s
:
upf_info
.
snssai_upf_info_list
)
{
Logger
::
smf_app
().
debug
(
"
\t\t
Parameters supported by the UPF:"
);
Logger
::
smf_app
().
debug
(
"
\t\t
Parameters supported by the UPF:"
);
Logger
::
smf_app
().
debug
(
Logger
::
smf_app
().
debug
(
"
\t\t\t
SNSSAI (SST %d, SD %
s)"
,
s
.
snssai
.
sST
,
s
.
snssai
.
sD
.
c_str
()
);
"
\t\t\t
SNSSAI (SST %d, SD %
#0x)"
,
s
.
snssai
.
sst
,
s
.
snssai
.
sd
);
for
(
auto
d
:
s
.
dnn_upf_info_list
)
{
for
(
auto
d
:
s
.
dnn_upf_info_list
)
{
Logger
::
smf_app
().
debug
(
"
\t\t\t
DNN %s"
,
d
.
dnn
.
c_str
());
Logger
::
smf_app
().
debug
(
"
\t\t\t
DNN %s"
,
d
.
dnn
.
c_str
());
}
}
...
@@ -550,8 +569,8 @@ void upf_profile::to_json(nlohmann::json& data) const {
...
@@ -550,8 +569,8 @@ void upf_profile::to_json(nlohmann::json& data) const {
data
[
"upfInfo"
][
"sNssaiUpfInfoList"
]
=
nlohmann
::
json
::
array
();
data
[
"upfInfo"
][
"sNssaiUpfInfoList"
]
=
nlohmann
::
json
::
array
();
for
(
auto
s
:
upf_info
.
snssai_upf_info_list
)
{
for
(
auto
s
:
upf_info
.
snssai_upf_info_list
)
{
nlohmann
::
json
tmp
=
{};
nlohmann
::
json
tmp
=
{};
tmp
[
"sNssai"
][
"sst"
]
=
s
.
snssai
.
s
ST
;
tmp
[
"sNssai"
][
"sst"
]
=
s
.
snssai
.
s
st
;
tmp
[
"sNssai"
][
"sd"
]
=
s
.
snssai
.
sD
;
tmp
[
"sNssai"
][
"sd"
]
=
s
td
::
to_string
(
s
.
snssai
.
sd
)
;
tmp
[
"dnnSmfInfoList"
]
=
nlohmann
::
json
::
array
();
tmp
[
"dnnSmfInfoList"
]
=
nlohmann
::
json
::
array
();
for
(
auto
d
:
s
.
dnn_upf_info_list
)
{
for
(
auto
d
:
s
.
dnn_upf_info_list
)
{
nlohmann
::
json
dnn_json
=
{};
nlohmann
::
json
dnn_json
=
{};
...
@@ -598,9 +617,19 @@ void upf_profile::from_json(const nlohmann::json& data) {
...
@@ -598,9 +617,19 @@ void upf_profile::from_json(const nlohmann::json& data) {
snssai_upf_info_item_t
upf_info_item
=
{};
snssai_upf_info_item_t
upf_info_item
=
{};
if
(
it
.
find
(
"sNssai"
)
!=
it
.
end
())
{
if
(
it
.
find
(
"sNssai"
)
!=
it
.
end
())
{
if
(
it
[
"sNssai"
].
find
(
"sst"
)
!=
it
[
"sNssai"
].
end
())
if
(
it
[
"sNssai"
].
find
(
"sst"
)
!=
it
[
"sNssai"
].
end
())
upf_info_item
.
snssai
.
sST
=
it
[
"sNssai"
][
"sst"
].
get
<
int
>
();
upf_info_item
.
snssai
.
sst
=
it
[
"sNssai"
][
"sst"
].
get
<
int
>
();
if
(
it
[
"sNssai"
].
find
(
"sd"
)
!=
it
[
"sNssai"
].
end
())
if
(
it
[
"sNssai"
].
find
(
"sd"
)
!=
it
[
"sNssai"
].
end
())
{
upf_info_item
.
snssai
.
sD
=
it
[
"sNssai"
][
"sd"
].
get
<
std
::
string
>
();
upf_info_item
.
snssai
.
sd
=
0xFFFFFF
;
try
{
upf_info_item
.
snssai
.
sd
=
std
::
stoul
(
it
[
"sNssai"
][
"sd"
].
get
<
std
::
string
>
(),
nullptr
,
10
);
}
catch
(
const
std
::
exception
&
e
)
{
Logger
::
smf_app
().
warn
(
"Error when converting from string to int for snssai.SD, "
"error: %s"
,
e
.
what
());
}
}
}
}
if
(
it
.
find
(
"dnnUpfInfoList"
)
!=
it
.
end
())
{
if
(
it
.
find
(
"dnnUpfInfoList"
)
!=
it
.
end
())
{
for
(
auto
d
:
it
[
"dnnUpfInfoList"
])
{
for
(
auto
d
:
it
[
"dnnUpfInfoList"
])
{
...
...
src/smf_app/smf_sbi.cpp
View file @
3c71b1c2
...
@@ -43,6 +43,7 @@
...
@@ -43,6 +43,7 @@
#include "itti.hpp"
#include "itti.hpp"
#include "logger.hpp"
#include "logger.hpp"
#include "mime_parser.hpp"
#include "mime_parser.hpp"
#include "3gpp_conversions.hpp"
#include "smf.h"
#include "smf.h"
#include "smf_app.hpp"
#include "smf_app.hpp"
#include "smf_config.hpp"
#include "smf_config.hpp"
...
@@ -844,8 +845,8 @@ bool smf_sbi::get_sm_data(
...
@@ -844,8 +845,8 @@ bool smf_sbi::get_sm_data(
std
::
string
mnc
=
{};
std
::
string
mnc
=
{};
conv
::
plmnToMccMnc
(
plmn
,
mcc
,
mnc
);
conv
::
plmnToMccMnc
(
plmn
,
mcc
,
mnc
);
query_str
=
"?single-nssai={
\"
sst
\"
:"
+
std
::
to_string
(
snssai
.
s
ST
)
+
query_str
=
"?single-nssai={
\"
sst
\"
:"
+
std
::
to_string
(
snssai
.
s
st
)
+
",
\"
sd
\"
:
\"
"
+
s
nssai
.
sD
+
"
\"
}&dnn="
+
dnn
+
",
\"
sd
\"
:
\"
"
+
s
td
::
to_string
(
snssai
.
sd
)
+
"
\"
}&dnn="
+
dnn
+
"&plmn-id={
\"
mcc
\"
:
\"
"
+
mcc
+
"
\"
,
\"
mnc
\"
:
\"
"
+
mnc
+
"
\"
}"
;
"&plmn-id={
\"
mcc
\"
:
\"
"
+
mcc
+
"
\"
,
\"
mnc
\"
:
\"
"
+
mnc
+
"
\"
}"
;
std
::
string
url
=
std
::
string
url
=
std
::
string
(
inet_ntoa
(
*
((
struct
in_addr
*
)
&
smf_cfg
.
udm_addr
.
ipv4_addr
)))
+
std
::
string
(
inet_ntoa
(
*
((
struct
in_addr
*
)
&
smf_cfg
.
udm_addr
.
ipv4_addr
)))
+
...
@@ -906,13 +907,16 @@ bool smf_sbi::get_sm_data(
...
@@ -906,13 +907,16 @@ bool smf_sbi::get_sm_data(
if
(
jsonData
.
find
(
"singleNssai"
)
==
jsonData
.
end
())
return
false
;
if
(
jsonData
.
find
(
"singleNssai"
)
==
jsonData
.
end
())
return
false
;
if
(
jsonData
[
"singleNssai"
].
find
(
"sst"
)
!=
jsonData
[
"singleNssai"
].
end
())
{
if
(
jsonData
[
"singleNssai"
].
find
(
"sst"
)
!=
jsonData
[
"singleNssai"
].
end
())
{
uint8_t
sst
=
jsonData
[
"singleNssai"
][
"sst"
].
get
<
uint8_t
>
();
uint8_t
sst
=
jsonData
[
"singleNssai"
][
"sst"
].
get
<
uint8_t
>
();
if
(
sst
!=
snssai
.
s
ST
)
{
if
(
sst
!=
snssai
.
s
st
)
{
return
false
;
return
false
;
}
}
}
}
if
(
jsonData
[
"singleNssai"
].
find
(
"sd"
)
!=
jsonData
[
"singleNssai"
].
end
())
{
if
(
jsonData
[
"singleNssai"
].
find
(
"sd"
)
!=
jsonData
[
"singleNssai"
].
end
())
{
std
::
string
sd
=
jsonData
[
"singleNssai"
][
"sd"
];
std
::
string
sd_str
=
jsonData
[
"singleNssai"
][
"sd"
];
if
(
sd
.
compare
(
snssai
.
sD
)
!=
0
)
{
uint32_t
sd
=
0xFFFFFF
;
xgpp_conv
::
sd_string_to_int
(
jsonData
[
"singleNssai"
][
"sd"
].
get
<
std
::
string
>
(),
sd
);
if
(
sd
!=
snssai
.
sd
)
{
return
false
;
return
false
;
}
}
}
}
...
...
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