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
3febe21b
Commit
3febe21b
authored
Dec 08, 2022
by
Tien Thinh NGUYEN
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'fix_multiple_pdu_udr' into fix_mcc_mnc_00_udr
parents
92d197a1
cf84406b
Changes
8
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
232 additions
and
126 deletions
+232
-126
src/common/3gpp_24.501.h
src/common/3gpp_24.501.h
+8
-1
src/common/3gpp_29.503.h
src/common/3gpp_29.503.h
+65
-1
src/common/3gpp_29.571.h
src/common/3gpp_29.571.h
+30
-0
src/smf_app/smf_config.cpp
src/smf_app/smf_config.cpp
+1
-1
src/smf_app/smf_context.cpp
src/smf_app/smf_context.cpp
+3
-3
src/smf_app/smf_n1.cpp
src/smf_app/smf_n1.cpp
+1
-1
src/smf_app/smf_n7.hpp
src/smf_app/smf_n7.hpp
+1
-1
src/smf_app/smf_sbi.cpp
src/smf_app/smf_sbi.cpp
+123
-118
No files found.
src/common/3gpp_24.501.h
View file @
3febe21b
...
...
@@ -32,6 +32,7 @@
#include <netinet/in.h>
#ifdef __cplusplus
#include <nlohmann/json.hpp>
extern
"C"
{
#endif
...
...
@@ -338,10 +339,16 @@ typedef struct pdu_session_type_s {
return
(
p
==
pdu_session_type
);
}
//------------------------------------------------------------------------------
const
std
::
string
&
to
S
tring
()
const
{
const
std
::
string
&
to
_s
tring
()
const
{
return
pdu_session_type_e2str
.
at
(
pdu_session_type
);
}
nlohmann
::
json
to_json
()
const
{
nlohmann
::
json
json_data
=
{};
json_data
=
to_string
();
return
json_data
;
}
}
pdu_session_type_t
;
//-------------------------------------
...
...
src/common/3gpp_29.503.h
View file @
3febe21b
...
...
@@ -24,6 +24,7 @@
#include "smf.h"
#include "3gpp_29.571.h"
#include <nlohmann/json.hpp>
enum
ssc_mode_e
{
SSC_MODE_1
=
1
,
...
...
@@ -31,7 +32,7 @@ enum ssc_mode_e {
SSC_MODE_3
=
3
,
};
static
const
std
::
vector
<
std
::
string
>
ssc_mode_e2str
=
{
"
Error
"
,
"SSC_MODE_1"
,
"SSC_MODE_2"
,
"SSC_MODE_3"
};
"
SSC_MODE_ERROR
"
,
"SSC_MODE_1"
,
"SSC_MODE_2"
,
"SSC_MODE_3"
};
typedef
struct
ssc_mode_s
{
uint8_t
ssc_mode
;
...
...
@@ -58,16 +59,48 @@ typedef struct ssc_mode_s {
virtual
~
ssc_mode_s
(){};
const
std
::
string
&
to_string
()
const
{
return
ssc_mode_e2str
.
at
(
ssc_mode
);
}
nlohmann
::
json
to_json
()
const
{
nlohmann
::
json
json_data
=
to_string
();
return
json_data
;
}
}
ssc_mode_t
;
typedef
struct
pdu_session_types_s
{
pdu_session_type_t
default_session_type
;
std
::
vector
<
pdu_session_type_t
>
allowed_session_types
;
nlohmann
::
json
to_json
()
const
{
nlohmann
::
json
json_data
=
{};
json_data
[
"pdu_session_types"
]
=
default_session_type
.
to_string
();
if
(
allowed_session_types
.
size
()
>
0
)
{
json_data
[
"allowed_session_types"
]
=
nlohmann
::
json
::
array
();
}
for
(
const
auto
&
a
:
allowed_session_types
)
{
nlohmann
::
json
json_item
=
a
.
to_string
();
json_data
[
"allowed_session_types"
].
push_back
(
json_item
);
}
return
json_data
;
}
}
pdu_session_types_t
;
typedef
struct
ssc_modes_s
{
ssc_mode_t
default_ssc_mode
;
std
::
vector
<
ssc_mode_t
>
allowed_ssc_modes
;
nlohmann
::
json
to_json
()
const
{
nlohmann
::
json
json_data
=
{};
json_data
[
"default_ssc_mode"
]
=
default_ssc_mode
.
to_string
();
if
(
allowed_ssc_modes
.
size
()
>
0
)
{
json_data
[
"allowed_ssc_modes"
]
=
nlohmann
::
json
::
array
();
}
for
(
const
auto
&
a
:
allowed_ssc_modes
)
{
nlohmann
::
json
json_item
=
a
.
to_string
();
json_data
[
"allowed_ssc_modes"
].
push_back
(
json_item
);
}
return
json_data
;
}
}
ssc_modes_t
;
enum
ip_address_type_value_e
{
...
...
@@ -76,6 +109,10 @@ enum ip_address_type_value_e {
IP_ADDRESS_TYPE_IPV6_PREFIX
=
2
};
static
const
std
::
vector
<
std
::
string
>
ip_address_type_value_e2str
=
{
"IP_ADDRESS_TYPE_IPV4_ADDRESS"
,
"IP_ADDRESS_TYPE_IPV6_ADDRESS"
,
"IP_ADDRESS_TYPE_IPV6_PREFIX"
};
typedef
struct
ipv6_prefix_s
{
struct
in6_addr
prefix
;
uint8_t
prefix_len
;
...
...
@@ -189,6 +226,15 @@ typedef struct ip_address_s {
}
return
std
::
string
(
"Unknown IP Address Type"
);
}
nlohmann
::
json
to_json
()
const
{
nlohmann
::
json
json_data
=
{};
json_data
[
"ip_address_type"
]
=
ip_address_type_value_e2str
.
at
(
ip_address_type
);
json_data
[
"addr"
]
=
to_string
();
return
json_data
;
}
}
ip_address_t
;
typedef
struct
dnn_configuration_s
{
...
...
@@ -197,6 +243,24 @@ typedef struct dnn_configuration_s {
session_ambr_t
session_ambr
;
subscribed_default_qos_t
_5g_qos_profile
;
std
::
vector
<
ip_address_t
>
static_ip_addresses
;
nlohmann
::
json
to_json
()
const
{
nlohmann
::
json
json_data
=
{};
json_data
[
"pdu_session_types"
]
=
pdu_session_types
.
to_json
();
json_data
[
"ssc_modes"
]
=
ssc_modes
.
to_json
();
json_data
[
"session_ambr"
]
=
session_ambr
.
to_json
();
json_data
[
"_5g_qos_profile"
]
=
_5g_qos_profile
.
to_json
();
if
(
static_ip_addresses
.
size
()
>
0
)
{
json_data
[
"static_ip_addresses"
]
=
nlohmann
::
json
::
array
();
}
for
(
const
auto
&
a
:
static_ip_addresses
)
{
nlohmann
::
json
json_item
=
a
.
to_string
();
json_data
[
"static_ip_addresses"
].
push_back
(
json_item
);
}
return
json_data
;
}
}
dnn_configuration_t
;
#endif
src/common/3gpp_29.571.h
View file @
3febe21b
...
...
@@ -25,6 +25,13 @@
typedef
struct
session_ambr_s
{
std
::
string
uplink
;
std
::
string
downlink
;
nlohmann
::
json
to_json
()
const
{
nlohmann
::
json
json_data
=
{};
json_data
[
"uplink"
]
=
uplink
;
json_data
[
"downlink"
]
=
downlink
;
return
json_data
;
}
}
session_ambr_t
;
enum
preemtion_capability_e
{
NOT_PREEMPT
=
1
,
MAY_PREEMPT
=
2
};
...
...
@@ -37,6 +44,14 @@ typedef struct arp_5gc_s {
uint8_t
priority_level
;
// (integer 1-15)
std
::
string
preempt_cap
;
std
::
string
preempt_vuln
;
// NOT_PREEMPTABLE, PREEMPTABLE
nlohmann
::
json
to_json
()
const
{
nlohmann
::
json
json_data
=
{};
json_data
[
"priority_level"
]
=
priority_level
;
json_data
[
"preempt_cap"
]
=
preempt_cap
;
json_data
[
"preempt_vuln"
]
=
preempt_vuln
;
return
json_data
;
}
}
arp_5gc_t
;
// see section 5.4.4.1@TS 29.571
...
...
@@ -44,6 +59,14 @@ typedef struct subscribed_default_qos_s {
uint8_t
_5qi
;
arp_5gc_t
arp
;
uint8_t
priority_level
;
// 1-127
nlohmann
::
json
to_json
()
const
{
nlohmann
::
json
json_data
=
{};
json_data
[
"_5qi"
]
=
_5qi
;
json_data
[
"arp"
]
=
arp
.
to_json
();
json_data
[
"priority_level"
]
=
priority_level
;
return
json_data
;
}
}
subscribed_default_qos_t
;
enum
reflective_qos_attribute_e
{
RQOS
=
1
,
NO_RQOS
=
2
};
...
...
@@ -54,6 +77,12 @@ static const std::vector<std::string> reflective_qos_attribute_e2str = {
typedef
struct
gNB_id_s
{
uint8_t
bit_length
;
std
::
string
gNB_value
;
nlohmann
::
json
to_json
()
const
{
nlohmann
::
json
json_data
=
{};
json_data
[
"bit_length"
]
=
bit_length
;
json_data
[
"gNB_value"
]
=
gNB_value
;
return
json_data
;
}
}
gNB_id_t
;
// 22bits to 32bits
typedef
struct
global_ran_node_id_s
{
...
...
@@ -61,6 +90,7 @@ typedef struct global_ran_node_id_s {
// n3IwfId:
gNB_id_t
gNbId
;
// ngeNbId:
}
global_ran_node_id_t
;
#endif
src/smf_app/smf_config.cpp
View file @
3febe21b
...
...
@@ -1085,7 +1085,7 @@ void smf_config::display() {
it
++
)
{
Logger
::
smf_app
().
info
(
" DNN..........: %s (%s)"
,
it
->
second
.
dnn
.
c_str
(),
it
->
second
.
pdu_session_type
.
to
S
tring
().
c_str
());
it
->
second
.
pdu_session_type
.
to
_s
tring
().
c_str
());
if
((
it
->
second
.
pdu_session_type
.
pdu_session_type
==
pdu_session_type_e
::
PDU_SESSION_TYPE_E_IPV4
)
or
...
...
src/smf_app/smf_context.cpp
View file @
3febe21b
...
...
@@ -379,7 +379,7 @@ std::string smf_pdu_session::toString() const {
s
.
append
(
"
\t
DNN:
\t\t\t
"
).
append
(
dnn
).
append
(
"
\n
"
);
s
.
append
(
"
\t
S-NSSAI:
\t\t\t
"
).
append
(
snssai
.
toString
()).
append
(
"
\n
"
);
s
.
append
(
"
\t
PDN type:
\t\t
"
)
.
append
(
pdu_session_type
.
to
S
tring
())
.
append
(
pdu_session_type
.
to
_s
tring
())
.
append
(
"
\n
"
);
}
if
(
ipv4
)
...
...
@@ -4427,7 +4427,7 @@ void smf_context::handle_flexcn_event(
}
}
cj
[
"pdu_session_type"
]
=
sp
->
pdu_session_type
.
to
S
tring
();
// PDU Session Type
sp
->
pdu_session_type
.
to
_s
tring
();
// PDU Session Type
// NSSAI
cj
[
"snssai"
][
"sst"
]
=
sp
->
get_snssai
().
sst
;
cj
[
"snssai"
][
"sd"
]
=
std
::
to_string
(
sp
->
get_snssai
().
sd
);
...
...
@@ -4554,7 +4554,7 @@ void smf_context::handle_pdusesest(
}
}
ev_notif
.
set_pdu_session_type
(
sp
->
pdu_session_type
.
to
S
tring
());
// PDU Session Type
sp
->
pdu_session_type
.
to
_s
tring
());
// PDU Session Type
ev_notif
.
set_sst
(
sp
->
get_snssai
().
sst
);
ev_notif
.
set_sd
(
std
::
to_string
(
sp
->
get_snssai
().
sd
));
ev_notif
.
set_dnn
(
sp
->
get_dnn
());
...
...
src/smf_app/smf_n1.cpp
View file @
3febe21b
...
...
@@ -166,7 +166,7 @@ bool smf_n1::create_n1_pdu_session_establishment_accept(
// PDUAddress
paa_t
paa
=
sm_context_res
.
get_paa
();
Logger
::
smf_n1
().
debug
(
"PDU Session Type %s"
,
paa
.
pdu_session_type
.
to
S
tring
().
c_str
());
"PDU Session Type %s"
,
paa
.
pdu_session_type
.
to
_s
tring
().
c_str
());
sm_msg
->
pdu_session_establishment_accept
.
pduaddress
.
pdu_session_type_value
=
static_cast
<
uint8_t
>
(
paa
.
pdu_session_type
.
pdu_session_type
);
if
(
paa
.
pdu_session_type
.
pdu_session_type
==
PDU_SESSION_TYPE_E_IPV4
)
{
...
...
src/smf_app/smf_n7.hpp
View file @
3febe21b
...
...
@@ -94,7 +94,7 @@ struct policy_association {
context
.
setSupi
(
"imsi-"
+
supi
);
oai
::
smf_server
::
model
::
PduSessionType
pdu_session_type_model
;
// hacky
from_json
(
pdu_session_type
.
to
S
tring
(),
pdu_session_type_model
);
from_json
(
pdu_session_type
.
to
_s
tring
(),
pdu_session_type_model
);
context
.
setPduSessionType
(
pdu_session_type_model
);
context
.
setDnn
(
dnn
);
context
.
setSliceInfo
(
snssai_model
);
...
...
src/smf_app/smf_sbi.cpp
View file @
3febe21b
This diff is collapsed.
Click to expand it.
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