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
21a4a9a9
Commit
21a4a9a9
authored
Dec 06, 2023
by
liuyu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
sync partial ^Cntext
parent
0de64c70
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
111 additions
and
13 deletions
+111
-13
etc/lysmf.conf
etc/lysmf.conf
+3
-3
src/smf_app/smf_procedure.cpp
src/smf_app/smf_procedure.cpp
+1
-0
src/udp/cooudp.cpp
src/udp/cooudp.cpp
+107
-10
No files found.
etc/lysmf.conf
View file @
21a4a9a9
...
...
@@ -31,8 +31,8 @@ SMF =
N4
:
{
# SMF binded interface for N4 communication (UPF)
INTERFACE_NAME
=
"
lo
"
;
# YOUR NETWORK CONFIG HERE
IPV4_ADDRESS
=
"
127.0.0.100/8
"
;
INTERFACE_NAME
=
"
ens18
"
;
# YOUR NETWORK CONFIG HERE
IPV4_ADDRESS
=
"
read
"
;
};
SBI
:
...
...
@@ -138,7 +138,7 @@ SMF =
UPF_LIST
= (
{
IPV4_ADDRESS
=
"1
27.0.0.101
"
;
IPV4_ADDRESS
=
"1
0.103.238.93
"
;
FQDN
=
"UPF"
;
NWI_LIST
= (
{
...
...
src/smf_app/smf_procedure.cpp
View file @
21a4a9a9
...
...
@@ -744,6 +744,7 @@ smf_procedure_code session_create_sm_context_procedure::run(
udpsmfcontext
[
"pdu_session_id"
]
=
scf
.
get
()
->
pdu_session_id
;
udpsmfcontext
[
"dnn"
]
=
dnn
;
udpsmfcontext
[
"snssai"
]
=
snssai
.
toString
();
udpsmfcontext
[
"pdu_session_type"
]
=
sm_context_req
->
req
.
get_pdu_session_type
();
...
...
src/udp/cooudp.cpp
View file @
21a4a9a9
...
...
@@ -179,6 +179,13 @@ int udp_server_coop::udp_read_from_peer_smf() {
}
std
::
shared_ptr
<
smf_pdu_session
>
sp
=
{};
if
(
!
sc
.
get
()
->
find_pdu_session
(
scf
.
get
()
->
pdu_session_id
,
sp
))
{
Logger
::
smf_app
().
debug
(
"Create a new PDU session"
);
sp
=
std
::
shared_ptr
<
smf_pdu_session
>
(
new
smf_pdu_session
(
scf
.
get
()
->
pdu_session_id
));
sp
.
get
()
->
pdu_session_type
.
pdu_session_type
=
smfcontext
[
"pdu_session_type"
];
sc
.
get
()
->
add_pdu_session
(
scf
.
get
()
->
pdu_session_id
,
sp
);
}
std
::
string
dnn
=
smfcontext
[
"dnn"
];
snssai_t
snssai
=
{};
std
::
string
sstsd
=
smfcontext
[
"snssai"
];
...
...
@@ -190,18 +197,108 @@ int udp_server_coop::udp_read_from_peer_smf() {
if
(
sdPos
!=
std
::
string
::
npos
)
{
snssai
.
sd
=
std
::
stoi
(
sstsd
.
substr
(
sdPos
+
3
));
}
std
::
shared_ptr
<
session_management_subscription
>
subscription
=
std
::
shared_ptr
<
session_management_subscription
>
(
new
session_management_subscription
(
snssai
));
if
(
smf_app_inst
->
get_session_management_subscription_data
(
supi64
,
dnn
,
snssai
,
subscription
))
{
// update dnn_context with subscription info
sc
.
get
()
->
insert_dnn_subscription
(
snssai
,
dnn
,
subscription
);
}
std
::
shared_ptr
<
upf_graph
>
graph
=
{};
graph
=
pfcp_associations
::
get_instance
().
select_up_node
(
snssai
,
dnn
);
subscribed_default_qos_t
default_qos
=
{};
std
::
shared_ptr
<
session_management_subscription
>
ss
=
{};
sc
->
get_default_qos
(
snssai
,
dnn
,
default_qos
);
// Create default QoS (Non-GBR) and associate far id and pdr id to this flow
smf_qos_flow
flow
=
{};
flow
.
pdu_session_id
=
scf
.
get
()
->
pdu_session_id
;
// default QoS profile
flow
.
qfi
.
qfi
=
default_qos
.
_5qi
;
flow
.
qos_profile
.
_5qi
=
default_qos
.
_5qi
;
flow
.
qos_profile
.
arp
=
default_qos
.
arp
;
flow
.
qos_profile
.
priority_level
=
default_qos
.
priority_level
;
// assign default QoS rule for this flow
QOSRulesIE
qos_rule
=
{};
sc
->
get_default_qos_rule
(
qos_rule
,
sp
.
get
()
->
pdu_session_type
.
pdu_session_type
);
uint8_t
rule_id
=
{
0
};
sp
->
generate_qos_rule_id
(
rule_id
);
qos_rule
.
qosruleidentifer
=
rule_id
;
qos_rule
.
qosflowidentifer
=
flow
.
qfi
.
qfi
;
sp
->
add_qos_rule
(
qos_rule
);
sp
->
add_qos_flow
(
flow
);
sp
->
set_default_qos_flow
(
flow
.
qfi
);
smf_qos_flow
current_flow
{};
current_flow
=
flow
;
Logger
::
smf_app
().
warn
(
"----------liuyu-------start_asynch_dfs_procedure"
);
graph
->
start_asynch_dfs_procedure
(
true
,
flow
);
std
::
vector
<
edge
>
dl_edges
;
std
::
vector
<
edge
>
ul_edges
;
std
::
shared_ptr
<
pfcp_association
>
upf
=
{};
// Get next UPF for the first N4 session establishment
Logger
::
smf_app
().
warn
(
"----------liuyu-------dfs_next_upf"
);
graph
->
dfs_next_upf
(
dl_edges
,
ul_edges
,
upf
);
if
(
!
sc
.
get
()
->
find_pdu_session
(
scf
.
get
()
->
pdu_session_id
,
sp
))
{
Logger
::
smf_app
().
debug
(
"Create a new PDU session"
);
sp
=
std
::
shared_ptr
<
smf_pdu_session
>
(
new
smf_pdu_session
(
scf
.
get
()
->
pdu_session_id
));
// sp.get()->pdu_session_type.pdu_session_type = smreq->req.get_pdu_session_type();
sp
.
get
()
->
set_dnn
(
dnn
);
sp
.
get
()
->
set_snssai
(
snssai
);
sp
.
get
()
->
set_sessions_graph
(
graph
);
sc
.
get
()
->
add_pdu_session
(
scf
.
get
()
->
pdu_session_id
,
sp
);
}
// std::shared_ptr<pfcp_association> current_upf;
// std::vector<edge> dl_edges2;
// std::vector<edge> ul_edges2;
// std::shared_ptr<smf_session_procedure> ssp = {};
// // smf_procedure_code res = ssp.get()->get_current_upf(dl_edges2, ul_edges2, current_upf);
// edge dl_edge = dl_edges[0];
// // if (res != smf_procedure_code::OK) {
// // Logger::smf_app().error("----------liuyu-------smf_procedure_code");
// // }
// for (auto ul_edge : ul_edges) {
// //-------------------
// // IE CREATE_FAR
// //-------------------
// pfcp::create_far create_far = ssp.get()->pfcp_create_far(ul_edge, current_flow.qfi);
// // copy created FAR ID to DL edge for PDR
// ssp.get()->synch_ul_dl_edges(dl_edges, ul_edges, current_flow.qfi);
// // copy values from UL edge, so we simulate two downlink edges for PFCP
// auto flow = dl_edge.get_qos_flow(current_flow.qfi);
// flow->pdr_id_ul = 0;
// dl_edge.flow_description = ul_edge.flow_description;
// dl_edge.precedence = ul_edge.precedence;
// //-------------------
// // IE CREATE_PDR
// //-------------------
// pfcp::create_pdr create_pdr = ssp.get()->pfcp_create_pdr(
// dl_edge, current_flow.qfi, current_upf->function_features.second);
// ssp.get()->synch_ul_dl_edges(dl_edges, ul_edges, current_flow.qfi);
// ADD IEs to message
//-------------------
// n4_triggered->pfcp_ies.set(create_pdr);
// n4_triggered->pfcp_ies.set(create_far);
// if (smf_cfg.enable_dl_pdr_in_pfcp_sess_estab) {
// pfcp::create_far create_far_dl =
// pfcp_create_far(dl_edge, current_flow.qfi);
// pfcp::create_pdr create_pdr_dl =
// pfcp_create_pdr_dl(dl_edge, current_flow.qfi);
// n4_triggered->pfcp_ies.set(create_pdr_dl);
// n4_triggered->pfcp_ies.set(create_far_dl);
// }
// Handle PDR and FAR for downlink if thid feature is enabled
// if (smf_cfg.enable_dl_pdr_in_pfcp_sess_estab) {
// Logger::smf_app().info("Adding DL PDR and FAR start");
// }
// }
...
...
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