laforge has submitted this change. ( https://gerrit.osmocom.org/c/upf-benchmark/+/39590?usp=email )
Change subject: testsuites/gtplab-sysmo2025/tunend: Initial eupf setup ......................................................................
testsuites/gtplab-sysmo2025/tunend: Initial eupf setup
Change-Id: I82ebaa785c67fc7a28a0e71eac55fe31a21d13d5 --- A doc/manuals/chapters/eupf_setup.adoc M doc/manuals/upfbenchmark-usermanual.adoc A testsuites/gtplab-sysmo2025/tunend/upf/eupf/configure.sh A testsuites/gtplab-sysmo2025/tunend/upf/eupf/eupf.yaml A testsuites/gtplab-sysmo2025/tunend/upf/eupf/run.sh 5 files changed, 119 insertions(+), 0 deletions(-)
Approvals: osmith: Looks good to me, but someone else must approve laforge: Looks good to me, approved Jenkins Builder: Verified
diff --git a/doc/manuals/chapters/eupf_setup.adoc b/doc/manuals/chapters/eupf_setup.adoc new file mode 100644 index 0000000..2a07b00 --- /dev/null +++ b/doc/manuals/chapters/eupf_setup.adoc @@ -0,0 +1,52 @@ +[[eupf_setup]] +== eupf setup + +[[eupf_install]] +=== eupf install + +Install eupf dependencies: +---- +$ sudo apt install wget git clang llvm gcc-multilib libbpf-dev +---- + +Download eupf: +---- +$ mkdir $HOME/git +$ cd $HOME/git +$ git clone https://github.com/edgecomllc/eupf.git +---- + +Install swag: +---- +$ cd $HOME +$ go install github.com/swaggo/swag/cmd/swag@v1.8.12 +---- + +Add to .bashrc: +---- +$ export PATH="${HOME}/go/bin:/usr/local/go/bin:${PATH}" +---- + +Build & install eupf: +---- +$ cd ~/git/eupf +$ go generate -v ./cmd/... +$ go build -v -o bin/eupf ./cmd/ +$ sudo cp bin/eupf /usr/local/bin/eupf +---- + +[[eupf_debug]] +=== eupf debug + +To enable XDP tracing, recompile like this: +---- +$ cd ~/git/eupf +$ BPF_CFLAGS="-DENABLE_LOG" go generate -v ./cmd/... +$ go build -v -o bin/eupf ./cmd/ +$ sudo cp bin/eupf /usr/local/bin/eupf +---- + +Then start eupf, run the test, cat will keep reading until killed, and you'll get output generated by the xdp code: +---- +$ cat /sys/kernel/debug/tracing/trace_pipe +---- diff --git a/doc/manuals/upfbenchmark-usermanual.adoc b/doc/manuals/upfbenchmark-usermanual.adoc index 9445fa2..3817acc 100644 --- a/doc/manuals/upfbenchmark-usermanual.adoc +++ b/doc/manuals/upfbenchmark-usermanual.adoc @@ -13,6 +13,8 @@
include::{srcdir}/chapters/osmo_upf_setup.adoc[]
+include::{srcdir}/chapters/eupf_setup.adoc[] + include::./common/chapters/vty.adoc[]
include::./common/chapters/logging.adoc[] diff --git a/testsuites/gtplab-sysmo2025/tunend/upf/eupf/configure.sh b/testsuites/gtplab-sysmo2025/tunend/upf/eupf/configure.sh new file mode 100755 index 0000000..fcadf89 --- /dev/null +++ b/testsuites/gtplab-sysmo2025/tunend/upf/eupf/configure.sh @@ -0,0 +1,45 @@ +#!/bin/bash -xe + +# Interface towards UPF: +IFACE_RAN="enp2s0f1np1" +IFACE_CN="enp2s0f0np0" +ADDR_GW_CN="172.16.31.200" +NUM_ENB=100 + +# Disable ethernet flow control: +sudo ethtool -A $IFACE_RAN autoneg off rx off tx off +sudo ethtool -A $IFACE_CN autoneg off rx off tx off +# Disable GRO / LRO: +sudo ethtool -K $IFACE_RAN gro off lro off +sudo ethtool -K $IFACE_CN gro off lro off +# Increase NIC buffers: +sudo ethtool -G $IFACE_RAN rx 8192 tx 8192 +sudo ethtool -G $IFACE_CN rx 8192 tx 8192 + +# Enable IP forwarding: +sudo sysctl -w net.ipv4.ip_forward=1 + +# Increase UDP buffer memory: +sudo sysctl -w net.ipv4.udp_mem="763563 900000000 1000000000" +sudo sysctl -w net.core.optmem_max=16000000 +sudo sysctl -w net.core.rmem_max=2000000000 +sudo sysctl -w net.core.rmem_default=2000000000 +sudo sysctl -w net.core.wmem_max=2000000000 +sudo sysctl -w net.core.wmem_default=2000000000 +sudo sysctl -w net.core.netdev_max_backlog=2000 +sudo sysctl -w net.core.netdev_budget=600 + +# Set up UPF address: +sudo ip addr add 172.16.32.1/24 dev $IFACE_RAN || true +sudo ip addr add 172.16.31.2/24 dev $IFACE_CN || true + +# TRex doesn't answer ARPs, so we need to set up the peers: +for i in $(seq "2" "$((NUM_ENB + 1))"); do + # Delete needed to potentially drop incomplet entries created when trying to Tx traffic: + sudo ip neigh del "$(printf "172.16.32.%02u" "$i")" lladdr ec:0d:9a:8a:27:52 nud permanent dev $IFACE_RAN || true + sudo ip neigh add "$(printf "172.16.32.%02u" "$i")" lladdr ec:0d:9a:8a:27:52 nud permanent dev $IFACE_RAN || true +done +sudo ip neigh add 172.16.31.200 lladdr ec:0d:9a:8a:27:53 nud permanent dev $IFACE_CN || true + +# Add route towards HTTP server on the CN side, aka "the Internet" +sudo ip route add 48.0.0.0/16 via $ADDR_GW_CN dev $IFACE_CN || true diff --git a/testsuites/gtplab-sysmo2025/tunend/upf/eupf/eupf.yaml b/testsuites/gtplab-sysmo2025/tunend/upf/eupf/eupf.yaml new file mode 100644 index 0000000..2d41730 --- /dev/null +++ b/testsuites/gtplab-sysmo2025/tunend/upf/eupf/eupf.yaml @@ -0,0 +1,15 @@ +interface_name: [enp2s0f0np0, enp2s0f1np1] +xdp_attach_mode: native +api_address: :8080 +pfcp_address: 172.16.31.2:8805 +pfcp_node_id: 172.16.31.2 +metrics_address: :9090 +n3_address: 172.16.32.1 +n9_address: 172.16.31.2 +qer_map_size: 4000000 +far_map_size: 4000000 +pdr_map_size: 4000000 +feature_ueip: false +feature_ftup: true +teid_pool: 4000000 +logging_level: 2 \ No newline at end of file diff --git a/testsuites/gtplab-sysmo2025/tunend/upf/eupf/run.sh b/testsuites/gtplab-sysmo2025/tunend/upf/eupf/run.sh new file mode 100755 index 0000000..1532b76 --- /dev/null +++ b/testsuites/gtplab-sysmo2025/tunend/upf/eupf/run.sh @@ -0,0 +1,5 @@ +#!/bin/bash -xe + +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) + +sudo eupf --config "$SCRIPT_DIR/eupf.yaml"