Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
oai-upf-6g
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
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
oai-upf-6g
Commits
894ac324
Commit
894ac324
authored
Apr 23, 2025
by
Franck Messaoudi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix: fixing issue when qer not available
parent
7aae8847
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
66 additions
and
64 deletions
+66
-64
src/upf_app/SessionProgramManager.cpp
src/upf_app/SessionProgramManager.cpp
+66
-64
No files found.
src/upf_app/SessionProgramManager.cpp
View file @
894ac324
...
@@ -206,8 +206,10 @@ pfcp_pdr_t_ SessionProgramManager::createPdr(
...
@@ -206,8 +206,10 @@ pfcp_pdr_t_ SessionProgramManager::createPdr(
// pdr.pdi.ethernet_pdu_session_information =
// pdr.pdi.ethernet_pdu_session_information =
// pPdr->pdi.second.ethernet_packet_filter;
// pPdr->pdi.second.ethernet_packet_filter;
pdr
.
pdi
.
qfi
.
qfi
=
pPdr
->
pdi
.
second
.
qfi
.
second
.
qfi
;
pdr
.
pdi
.
qfi
.
qfi
=
pPdr
->
pdi
.
second
.
qfi
.
second
.
qfi
;
pdr
.
pdi
.
framed_route
=
pPdr
->
pdi
.
second
.
framed_route
;
pdr
.
pdi
.
framed_routing
=
pPdr
->
pdi
.
second
.
framed_routing
;
// pdr.pdi.framed_route.framed_route = pPdr->pdi.second.framed_route.second;
// pdr.pdi.framed_routing.framed_routing =
// pPdr->pdi.second.framed_routing.second;
// pdr.pdi.framed_ipv6_route = pPdr->pdi.second.framed_ipv6_route;
// pdr.pdi.framed_ipv6_route = pPdr->pdi.second.framed_ipv6_route;
memcpy
(
memcpy
(
...
@@ -221,11 +223,54 @@ pfcp_pdr_t_ SessionProgramManager::createPdr(
...
@@ -221,11 +223,54 @@ pfcp_pdr_t_ SessionProgramManager::createPdr(
return
pdr
;
return
pdr
;
}
}
//---------------------------------------------------------------------------------------------------------------
void
SessionProgramManager
::
addFramedRoutes
(
uint32_t
ueIpAddress
,
const
std
::
vector
<
pfcp
::
framed_route_t
>&
framedRoutes
)
{
auto
pPFCP_Session_LookupProgram
=
UserPlaneComponent
::
getInstance
().
getPFCP_Session_LookupProgram
();
for
(
const
auto
&
framedRoute
:
framedRoutes
)
{
Logger
::
upf_app
().
info
(
"Add framed route to ue_ip mapping %s to UE IP 0x%x"
,
framedRoute
.
framed_route
,
ueIpAddress
);
std
::
stringstream
ss
(
framedRoute
.
framed_route
);
std
::
string
ipsubnetmask
;
while
(
std
::
getline
(
ss
,
ipsubnetmask
,
' '
))
{
std
::
pair
<
uint32_t
,
uint32_t
>
ipCidr
=
fr
::
FramedRouting
::
extractIPCidr
(
ipsubnetmask
);
auto
key
=
framed_routing_key_for_ip_cidr
(
ipCidr
.
first
,
ipCidr
.
second
);
pPFCP_Session_LookupProgram
->
updateFramedRouteMappingMap
(
ueIpAddress
,
key
);
}
}
}
//---------------------------------------------------------------------------------------------------------------
void
SessionProgramManager
::
removeFramedRoutes
(
const
std
::
vector
<
pfcp
::
framed_route_t
>&
framedRoutes
)
{
auto
pPFCP_Session_LookupProgram
=
UserPlaneComponent
::
getInstance
().
getPFCP_Session_LookupProgram
();
for
(
const
auto
&
framedRoute
:
framedRoutes
)
{
std
::
stringstream
ss
(
framedRoute
.
framed_route
);
std
::
string
ipsubnetmask
;
Logger
::
upf_app
().
info
(
"Remove framed route to ue_ip mapping for %s"
,
framedRoute
.
framed_route
);
while
(
std
::
getline
(
ss
,
ipsubnetmask
,
' '
))
{
std
::
pair
<
uint32_t
,
uint32_t
>
ipCidr
=
fr
::
FramedRouting
::
extractIPCidr
(
ipsubnetmask
);
auto
key
=
framed_routing_key_for_ip_cidr
(
ipCidr
.
first
,
ipCidr
.
second
);
pPFCP_Session_LookupProgram
->
removeFramedRoute
(
key
);
}
}
}
//---------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------
pfcp_qer_t_
SessionProgramManager
::
createQer
(
pfcp_qer_t_
SessionProgramManager
::
createQer
(
std
::
shared_ptr
<
pfcp
::
pfcp_qer
>
pQer
)
{
std
::
shared_ptr
<
pfcp
::
pfcp_qer
>
pQer
)
{
pfcp_qer_t_
qer
;
pfcp_qer_t_
qer
=
{}
;
if
(
pQer
)
{
qer
.
qer_id
.
qer_id
=
pQer
->
qer_id
.
second
.
qer_id
;
qer
.
qer_id
.
qer_id
=
pQer
->
qer_id
.
second
.
qer_id
;
qer
.
qer_correlation_id
.
qer_correlation_id
=
qer
.
qer_correlation_id
.
qer_correlation_id
=
...
@@ -246,7 +291,7 @@ pfcp_qer_t_ SessionProgramManager::createQer(
...
@@ -246,7 +291,7 @@ pfcp_qer_t_ SessionProgramManager::createQer(
qer
.
qos_flow_identifier
.
qfi
=
pQer
->
qfi
.
second
.
qfi
;
qer
.
qos_flow_identifier
.
qfi
=
pQer
->
qfi
.
second
.
qfi
;
qer
.
reflective_qos
.
rqi
=
pQer
->
rqi
.
second
.
rqi
;
qer
.
reflective_qos
.
rqi
=
pQer
->
rqi
.
second
.
rqi
;
}
return
qer
;
return
qer
;
}
}
...
@@ -468,49 +513,6 @@ bool SessionProgramManager::getQer(
...
@@ -468,49 +513,6 @@ bool SessionProgramManager::getQer(
return
(
pdr
->
get
(
qerId
)
&&
session
->
get
(
qerId
.
qer_id
,
outQer
));
return
(
pdr
->
get
(
qerId
)
&&
session
->
get
(
qerId
.
qer_id
,
outQer
));
}
}
//---------------------------------------------------------------------------------------------------------------
void
SessionProgramManager
::
addFramedRoutes
(
uint32_t
ueIpAddress
,
const
std
::
vector
<
pfcp
::
framed_route_t
>&
framedRoutes
)
{
auto
pPFCP_Session_LookupProgram
=
UserPlaneComponent
::
getInstance
().
getPFCP_Session_LookupProgram
();
for
(
const
auto
&
framedRoute
:
framedRoutes
)
{
Logger
::
upf_app
().
info
(
"Add framed route to ue_ip mapping %s to UE IP 0x%x"
,
framedRoute
.
framed_route
,
ueIpAddress
);
std
::
stringstream
ss
(
framedRoute
.
framed_route
);
std
::
string
ipsubnetmask
;
while
(
std
::
getline
(
ss
,
ipsubnetmask
,
' '
))
{
std
::
pair
<
uint32_t
,
uint32_t
>
ipCidr
=
fr
::
FramedRouting
::
extractIPCidr
(
ipsubnetmask
);
auto
key
=
framed_routing_key_for_ip_cidr
(
ipCidr
.
first
,
ipCidr
.
second
);
pPFCP_Session_LookupProgram
->
updateFramedRouteMappingMap
(
ueIpAddress
,
key
);
}
}
}
//---------------------------------------------------------------------------------------------------------------
void
SessionProgramManager
::
removeFramedRoutes
(
const
std
::
vector
<
pfcp
::
framed_route_t
>&
framedRoutes
)
{
auto
pPFCP_Session_LookupProgram
=
UserPlaneComponent
::
getInstance
().
getPFCP_Session_LookupProgram
();
for
(
const
auto
&
framedRoute
:
framedRoutes
)
{
std
::
stringstream
ss
(
framedRoute
.
framed_route
);
std
::
string
ipsubnetmask
;
Logger
::
upf_app
().
info
(
"Remove framed route to ue_ip mapping for %s"
,
framedRoute
.
framed_route
);
while
(
std
::
getline
(
ss
,
ipsubnetmask
,
' '
))
{
std
::
pair
<
uint32_t
,
uint32_t
>
ipCidr
=
fr
::
FramedRouting
::
extractIPCidr
(
ipsubnetmask
);
auto
key
=
framed_routing_key_for_ip_cidr
(
ipCidr
.
first
,
ipCidr
.
second
);
pPFCP_Session_LookupProgram
->
removeFramedRoute
(
key
);
}
}
}
//---------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------
void
SessionProgramManager
::
createPipeline
(
void
SessionProgramManager
::
createPipeline
(
std
::
shared_ptr
<
pfcp
::
pfcp_session
>
session
)
{
std
::
shared_ptr
<
pfcp
::
pfcp_session
>
session
)
{
...
@@ -587,9 +589,9 @@ void SessionProgramManager::createPipeline(
...
@@ -587,9 +589,9 @@ void SessionProgramManager::createPipeline(
/*
/*
* On the Uplink see if there is QER applied for downlink
* On the Uplink see if there is QER applied for downlink
*/
*/
std
::
shared_ptr
<
pfcp
::
pfcp_qer
>
qer
;
std
::
shared_ptr
<
pfcp
::
pfcp_qer
>
qer
=
nullptr
;
if
(
!
getQer
(
session
,
pdr
,
qer
))
{
if
(
!
getQer
(
session
,
pdr
,
qer
))
{
logger
.
debug
(
"Missing
vv
qer for pdr %d"
,
pdr_id
);
logger
.
debug
(
"Missing qer for pdr %d"
,
pdr_id
);
}
}
struct
rules_match_pdr
rules
=
{
0
};
struct
rules_match_pdr
rules
=
{
0
};
...
...
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