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
933aff46
Commit
933aff46
authored
Apr 14, 2025
by
Franck Messaoudi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix: enforcing QoS needs these modifications
parent
e1e1f74a
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
66 additions
and
51 deletions
+66
-51
docker/Dockerfile.upf.ubuntu
docker/Dockerfile.upf.ubuntu
+4
-0
scripts/entrypoint.sh
scripts/entrypoint.sh
+11
-0
src/upf_app/bpf/rules/qer/qer_tc_kernel.c
src/upf_app/bpf/rules/qer/qer_tc_kernel.c
+49
-49
src/upf_app/programs/qer_tc_user.cpp
src/upf_app/programs/qer_tc_user.cpp
+2
-2
No files found.
docker/Dockerfile.upf.ubuntu
View file @
933aff46
...
...
@@ -131,7 +131,9 @@ WORKDIR /openair-upf/bin
COPY --from=oai-upf-builder \
/usr/local/sbin/bpftool \
/openair-upf/build/upf/build/oai_upf \
/openair-upf/build/upf/build/upf_app/bpf/CMakeFiles/qer_tc.dir/rules/qer/qer_tc_kernel.c.o \
/openair-upf/scripts/healthcheck.sh \
/openair-upf/scripts/entrypoint.sh \
./
WORKDIR /usr/local/lib
...
...
@@ -173,3 +175,5 @@ HEALTHCHECK --interval=10s \
CMD /openair-upf/bin/healthcheck.sh
CMD ["/openair-upf/bin/oai_upf", "-c", "/openair-upf/etc/config.yaml", "-o"]
ENTRYPOINT [ "sh", "/openair-upf/bin/entrypoint.sh" ]
\ No newline at end of file
scripts/entrypoint.sh
0 → 100755
View file @
933aff46
#!/bin/sh
# Mount bpffs and debugfs if not present already
if
[
$(
/bin/mount | /bin/grep /sys/fs/bpf
-c
)
-eq
0
]
;
then
/bin/mount bpffs /sys/fs/bpf
-t
bpf
;
fi
if
[
$(
/bin/mount | /bin/grep debugfs
-c
)
-eq
0
]
;
then
/bin/mount debugfs /sys/kernel/debug
-t
debugfs
;
fi
exec
"
$@
"
src/upf_app/bpf/rules/qer/qer_tc_kernel.c
View file @
933aff46
...
...
@@ -30,67 +30,67 @@
#include <linux/pkt_sched.h>
//---------------------------------------------------------------------------------------------------------------
static
__always_inline
u32
egress_sdf_classifier
(
struct
__sk_buff
*
skb
)
{
void
*
data
=
(
void
*
)
(
long
)
skb
->
data
;
void
*
data_end
=
(
void
*
)
(
long
)
skb
->
data_end
;
void
*
data_meta
=
(
void
*
)
(
long
)
skb
->
data_meta
;
//
static __always_inline u32 egress_sdf_classifier(struct __sk_buff* skb) {
//
void* data = (void*) (long) skb->data;
//
void* data_end = (void*) (long) skb->data_end;
//
void* data_meta = (void*) (long) skb->data_meta;
// struct packet_filter* filter = data_meta;
struct
session_qfi
*
qos_class_metadata
=
data_meta
;
struct
ethhdr
*
ethh
=
data
;
//
// struct packet_filter* filter = data_meta;
//
struct session_qfi* qos_class_metadata = data_meta;
//
struct ethhdr* ethh = data;
if
((
void
*
)
(
ethh
+
1
)
>
data_end
)
{
bpf_debug
(
"Error: Invalid Ethernet header"
);
return
TC_ACT_SHOT
;
}
//
if ((void*) (ethh + 1) > data_end) {
//
bpf_debug("Error: Invalid Ethernet header");
//
return TC_ACT_SHOT;
//
}
struct
iphdr
*
iph
=
(
struct
iphdr
*
)
(
ethh
+
1
);
//
struct iphdr* iph = (struct iphdr*) (ethh + 1);
if
((
void
*
)
(
iph
+
1
)
>
data_end
)
{
bpf_debug
(
"Error: Invalid IPv4 header"
);
return
TC_ACT_SHOT
;
}
//
if ((void*) (iph + 1) > data_end) {
//
bpf_debug("Error: Invalid IPv4 header");
//
return TC_ACT_SHOT;
//
}
struct
udphdr
*
udph
=
(
struct
udphdr
*
)
(
iph
+
1
);
//
struct udphdr* udph = (struct udphdr*) (iph + 1);
if
((
void
*
)
(
udph
+
1
)
>
data_end
)
{
bpf_debug
(
"Error: Invalid UDP header"
);
return
TC_ACT_SHOT
;
}
//
if ((void*) (udph + 1) > data_end) {
//
bpf_debug("Error: Invalid UDP header");
//
return TC_ACT_SHOT;
//
}
struct
gtpuhdr
*
gtpuh
=
(
struct
gtpuhdr
*
)
(
udph
+
1
);
//
struct gtpuhdr* gtpuh = (struct gtpuhdr*) (udph + 1);
if
((
void
*
)
(
gtpuh
+
1
)
>
data_end
)
{
bpf_debug
(
"Error: Invalid GTPU packet"
);
return
TC_ACT_SHOT
;
}
//
if ((void*) (gtpuh + 1) > data_end) {
//
bpf_debug("Error: Invalid GTPU packet");
//
return TC_ACT_SHOT;
//
}
struct
gtpu_extn_pdu_session_container
*
gtpu_ext_h
=
(
struct
gtpu_extn_pdu_session_container
*
)
((
void
*
)
(
gtpuh
+
1
));
//
struct gtpu_extn_pdu_session_container* gtpu_ext_h =
//
(struct gtpu_extn_pdu_session_container*) ((void*) (gtpuh + 1));
if
((
void
*
)
(
gtpu_ext_h
+
1
)
>
data_end
)
{
bpf_debug
(
"Error: Invalid GTPU Extension packet"
);
return
TC_ACT_SHOT
;
}
//
if ((void*) (gtpu_ext_h + 1) > data_end) {
//
bpf_debug("Error: Invalid GTPU Extension packet");
//
return TC_ACT_SHOT;
//
}
/* Check XDP gave us some data_meta */
if
((
void
*
)
(
qos_class_metadata
+
1
)
>
data
)
{
bpf_debug
(
"Error: Failed to load metadata from XDP"
);
return
TC_ACT_SHOT
;
}
//
/* Check XDP gave us some data_meta */
//
if ((void*) (qos_class_metadata + 1) > data) {
//
bpf_debug("Error: Failed to load metadata from XDP");
//
return TC_ACT_SHOT;
//
}
bpf_debug
(
"TC: Received XDP Metadata - seid: %llu, qfi: %u"
,
qos_class_metadata
->
seid
,
qos_class_metadata
->
qfi
);
u16
minor_id
=
generate_minor_id
(
qos_class_metadata
->
seid
,
qos_class_metadata
->
qfi
);
skb
->
tc_classid
=
minor_id
;
skb
->
priority
=
TC_H_MAKE
(
1
,
minor_id
);
// 1 is the HTB root handle's major number
bpf_debug
(
"TC: classid %d"
,
skb
->
tc_classid
);
bpf_debug
(
"TC: skb->priority set to 0x%x"
,
skb
->
priority
);
return
TC_ACT_OK
;
}
//
bpf_debug(
//
"TC: Received XDP Metadata - seid: %llu, qfi: %u",
//
qos_class_metadata->seid, qos_class_metadata->qfi);
//
u16 minor_id =
//
generate_minor_id(qos_class_metadata->seid, qos_class_metadata->qfi);
//
skb->tc_classid = minor_id;
//
skb->priority =
//
TC_H_MAKE(1, minor_id); // 1 is the HTB root handle's major number
//
bpf_debug("TC: classid %d", skb->tc_classid);
//
bpf_debug("TC: skb->priority set to 0x%x", skb->priority);
//
return TC_ACT_OK;
//
}
//---------------------------------------------------------------------------------------------------------------
// static __always_inline u32 ipv4_sdf_filter(struct __sk_buff* skb) {
...
...
src/upf_app/programs/qer_tc_user.cpp
View file @
933aff46
...
...
@@ -371,8 +371,8 @@ void QERProgram::setup(
}
// Logger::upf_app().info("Attach Section tc_filter_traffic to gtp
// interface");
//
mpLifeCycle->tcAttachEgress("tc_filter_traffic",
GTP_INTERFACE.c_str());
// interface");
mpLifeCycle->tcAttachEgress("tc_filter_traffic",
// GTP_INTERFACE.c_str());
if
(
no_tc_filter_bpf
(
GTP_INTERFACE
))
{
Logger
::
upf_app
().
info
(
"Attach Section tc_filter_traffic to gtp interface"
);
...
...
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