pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/upf-benchmark/+/38353?usp=email )
Change subject: Initial tunend and tunmap testsuites for osmo-upf ......................................................................
Initial tunend and tunmap testsuites for osmo-upf
Change-Id: Iffe344975fa16621959f7306e095451e4421de26 --- A testsuites/gtplab-sysmo2017/overview_only_tunend.dot A testsuites/gtplab-sysmo2017/overview_only_tunmap.dot A testsuites/gtplab-sysmo2017/overview_tunmap_and_tunend.dot A testsuites/gtplab-sysmo2017/tunend/cn/configure.sh A testsuites/gtplab-sysmo2017/tunend/cn/run.sh A testsuites/gtplab-sysmo2017/tunend/osmo-pfcp-tool.cfg A testsuites/gtplab-sysmo2017/tunend/ran/0.gtp_flood.vty A testsuites/gtplab-sysmo2017/tunend/ran/configure.sh A testsuites/gtplab-sysmo2017/tunend/ran/osmo-pfcp-tool.cfg A testsuites/gtplab-sysmo2017/tunend/ran/run.sh A testsuites/gtplab-sysmo2017/tunend/upf/configure.sh A testsuites/gtplab-sysmo2017/tunend/upf/eupf/1.eupf.yaml A testsuites/gtplab-sysmo2017/tunend/upf/eupf/1.run_eupf.sh A testsuites/gtplab-sysmo2017/tunend/upf/osmo-upf/osmo-upf.cfg A testsuites/gtplab-sysmo2017/tunend/upf/osmo-upf/run.sh A testsuites/gtplab-sysmo2017/tunmap/cn/configure.sh A testsuites/gtplab-sysmo2017/tunmap/cn/run.sh A testsuites/gtplab-sysmo2017/tunmap/ran/0.gtp_flood.vty A testsuites/gtplab-sysmo2017/tunmap/ran/configure.sh A testsuites/gtplab-sysmo2017/tunmap/ran/osmo-pfcp-tool.cfg A testsuites/gtplab-sysmo2017/tunmap/ran/run.sh A testsuites/gtplab-sysmo2017/tunmap/upf/configure.sh A testsuites/gtplab-sysmo2017/tunmap/upf/eupf/1.eupf.yaml A testsuites/gtplab-sysmo2017/tunmap/upf/eupf/1.run_eupf.sh A testsuites/gtplab-sysmo2017/tunmap/upf/osmo-upf/osmo-upf.cfg A testsuites/gtplab-sysmo2017/tunmap/upf/osmo-upf/run.sh 26 files changed, 722 insertions(+), 0 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/upf-benchmark refs/changes/53/38353/1
diff --git a/testsuites/gtplab-sysmo2017/overview_only_tunend.dot b/testsuites/gtplab-sysmo2017/overview_only_tunend.dot new file mode 100644 index 0000000..067f091 --- /dev/null +++ b/testsuites/gtplab-sysmo2017/overview_only_tunend.dot @@ -0,0 +1,35 @@ +digraph G { + rankdir=TB; + labelloc=t; + label="gtplab @ sysmocom"; + + subgraph cluster_gtplab0 { + label="gtplab0"; + rankdir=TB; + gtplab0_172_31 [label="172.16.31.1/24"]; + tool [label="osmo-pfcp-tool",shape=box3d]; + } + subgraph cluster_gtplab1 { + label="gtplab1"; + gtplab1_172_31 [label="172.16.31.2/24"]; + gtplab1_172_32 [label="172.16.32.1/24"]; + + upf_tunend [label="UPF\ntunend",shape=box3d]; + } + subgraph cluster_gtplab2 { + label="gtplab2"; + gtplab2_172_32 [label="172.16.32.2/24"]; + + responder [label="osmo-udp-responder",shape=box3d]; + } + + + tool -> gtplab0_172_31 -> gtplab1_172_31 -> upf_tunend [label="PFCP", dir=both]; + + tool -> gtplab0_172_31 -> gtplab1_172_31 -> upf_tunend [label="GTP tun",style=bold]; + upf_tunend -> gtplab1_172_32 -> gtplab2_172_32 -> responder [label="UDP/IP",style=bold]; + + tool -> gtplab0_172_31 -> gtplab1_172_31 -> upf_tunend [style=dotted,dir=back]; + upf_tunend -> gtplab1_172_32 -> gtplab2_172_32 -> responder [style=dotted,dir=back]; + +} diff --git a/testsuites/gtplab-sysmo2017/overview_only_tunmap.dot b/testsuites/gtplab-sysmo2017/overview_only_tunmap.dot new file mode 100644 index 0000000..96d5dcf --- /dev/null +++ b/testsuites/gtplab-sysmo2017/overview_only_tunmap.dot @@ -0,0 +1,37 @@ +digraph G { + rankdir=TB; + labelloc=t; + label="gtplab @ sysmocom"; + + subgraph cluster_gtplab0 { + label="gtplab0"; + rankdir=TB; + gtplab0_172_31 [label="172.16.31.1/24"]; + tool [label="osmo-pfcp-tool",shape=box3d]; + insert_teid [label="insert return TEID\nin UDP payload",shape=note]; + } + subgraph cluster_gtplab1 { + label="gtplab1"; + gtplab1_172_31 [label="172.16.31.2/24"]; + gtplab1_172_32 [label="172.16.32.1/24"]; + + upf_tunmap [label="UPF\ntunmap",shape=box3d]; + } + subgraph cluster_gtplab2 { + label="gtplab2"; + gtplab2_172_32 [label="172.16.32.2/24"]; + + responder [label="osmo-udp-responder",shape=box3d]; + send_to_teid [label="use TEID from\nUDP payload",shape=note]; + } + + + tool -> gtplab0_172_31 -> gtplab1_172_31 -> upf_tunmap [label="PFCP", dir=both]; + + tool -> insert_teid -> gtplab0_172_31 -> gtplab1_172_31 -> upf_tunmap [label="GTP tun",style=bold]; + upf_tunmap -> gtplab1_172_32 -> gtplab2_172_32 -> responder [label="GTP tun",style=bold]; + + tool -> gtplab0_172_31 -> gtplab1_172_31 -> upf_tunmap [style=dotted,dir=back]; + upf_tunmap -> gtplab1_172_32 -> gtplab2_172_32 -> send_to_teid -> responder [style=dotted,dir=back]; + +} diff --git a/testsuites/gtplab-sysmo2017/overview_tunmap_and_tunend.dot b/testsuites/gtplab-sysmo2017/overview_tunmap_and_tunend.dot new file mode 100644 index 0000000..6d82dd9 --- /dev/null +++ b/testsuites/gtplab-sysmo2017/overview_tunmap_and_tunend.dot @@ -0,0 +1,43 @@ +digraph G { + rankdir=TB; + labelloc=t; + label="gtplab @ sysmocom"; + + subgraph cluster_gtplab0 { + label="gtplab0"; + rankdir=TB; + gtplab0_10 [label="10.9.25.20/24"]; + gtplab0_172_31 [label="172.16.31.1/24"]; + tool [label="osmo-pfcp-tool",shape=box3d]; + } + subgraph cluster_gtplab1 { + label="gtplab1"; + gtplab1_10 [label="10.9.25.21/24"]; + gtplab1_172_31 [label="172.16.31.2/24"]; + gtplab1_172_32 [label="172.16.32.1/24"]; + + upf1 [label="UPF\ntunmap",shape=box3d]; + } + subgraph cluster_gtplab2 { + label="gtplab2"; + gtplab2_10 [label="10.9.25.22/24"]; + gtplab2_172_32 [label="172.16.32.2/24"]; + + upf2 [label="UPF\ntunend",shape=box3d]; + + responder [label="osmo-udp-responder",shape=box3d]; + } + + + tool -> gtplab0_10 -> gtplab1_10 -> upf1 [label="PFCP", dir=both]; + gtplab0_10 -> gtplab2_10 -> upf2 [label="PFCP", dir=both]; + + tool -> gtplab0_172_31 -> gtplab1_172_31 -> upf1 [label="GTP tun",style=bold]; + upf1 -> gtplab1_172_32 -> gtplab2_172_32 -> upf2 [label="GTP tun",style=bold]; + upf2 -> responder [label="UDP/IP",style=bold]; + + upf2 -> responder [style=dotted,dir=back]; + upf1 -> gtplab1_172_32 -> gtplab2_172_32 -> upf2 [style=dotted,dir=back]; + tool -> gtplab0_172_31 -> gtplab1_172_31 -> upf1 [style=dotted,dir=back]; + +} diff --git a/testsuites/gtplab-sysmo2017/tunend/cn/configure.sh b/testsuites/gtplab-sysmo2017/tunend/cn/configure.sh new file mode 100755 index 0000000..256bd14 --- /dev/null +++ b/testsuites/gtplab-sysmo2017/tunend/cn/configure.sh @@ -0,0 +1,29 @@ +#!/bin/bash -xe + +# Interface towards UPF: +IFACE_UPF="enp2s0f0np0" +IPADR_UPF="172.16.32.1" +NUM_CN=50 + +# Disable ethernet flow control: +sudo ethtool -A $IFACE_UPF autoneg off rx off tx off +# Increase NIC buffers: +sudo ethtool -G $IFACE_UPF rx 8192 tx 8192 +# Increase Adapter Transmit Queue: +sudo ip link set dev $IFACE_UPF txqueuelen 2000 + +# 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 CN IP addresses: +for i in $(seq "0" "$((NUM_CN - 1))"); do + sudo ip addr add "$(printf "172.16.32.2%02u/24" $i)" brd 172.16.32.255 dev $IFACE_UPF || true; +done +sudo ip route add 192.168.0.0/16 via $IPADR_UPF dev $IFACE_UPF diff --git a/testsuites/gtplab-sysmo2017/tunend/cn/run.sh b/testsuites/gtplab-sysmo2017/tunend/cn/run.sh new file mode 100755 index 0000000..dab8b3c --- /dev/null +++ b/testsuites/gtplab-sysmo2017/tunend/cn/run.sh @@ -0,0 +1,2 @@ +#!/bin/bash -xe +osmo-udp-responder -l 0.0.0.0 -p 23000 --io-uring-queue 16000 --workers 6 -n 1 -a diff --git a/testsuites/gtplab-sysmo2017/tunend/osmo-pfcp-tool.cfg b/testsuites/gtplab-sysmo2017/tunend/osmo-pfcp-tool.cfg new file mode 100644 index 0000000..6e80e6e --- /dev/null +++ b/testsuites/gtplab-sysmo2017/tunend/osmo-pfcp-tool.cfg @@ -0,0 +1,12 @@ +log stderr + logging color 1 + logging print category-hex 0 + logging print category 1 + logging timestamp 0 + logging print file basename last + logging print level 1 + logging level set-all info + logging level lpfcp error + +local-addr 0.0.0.0 +listen diff --git a/testsuites/gtplab-sysmo2017/tunend/ran/0.gtp_flood.vty b/testsuites/gtplab-sysmo2017/tunend/ran/0.gtp_flood.vty new file mode 100644 index 0000000..9d197ab --- /dev/null +++ b/testsuites/gtplab-sysmo2017/tunend/ran/0.gtp_flood.vty @@ -0,0 +1,135 @@ +# Establish N PFCP sessions for tunend, and emit massive GTP traffic to the UPF +# to each established tunnel. +# +# osmo-pfcp-tool UPF "internet host" +# |GTP-ep -------GTP-----> GTP-ep|UE-IP-addr -------IP------> arbitrary-IP| +# |10.0.1.1 10.0.2.1|192.168.10.23 123.234.42.23| +# |10.0.1.2 +# ^ ^ ^ +# ^ | | | +# | | configure by configure by +# configure by from UPF 'ue ip' 'payload target ip', +# 'gtp ip' ("F-TEID=choose") 'payload target port' + +# Configure CPU related settings: +cpu-sched + !policy rr 18 + ! All Rx in hyperthreads within same cores: + ! core-id=0, processor=0: + cpu-affinity GtpFloodTx0 0x0001 delay + ! core-id=0, processor=6: + cpu-affinity GtpFloodTx1 0x0040 delay + ! core-id=1, processor=1: + cpu-affinity GtpFloodTx2 0x0002 delay + ! core-id=1, processor=7: + cpu-affinity GtpFloodTx3 0x0080 delay + ! core-id=2, processor=2: + cpu-affinity GtpFloodTx4 0x0004 delay + ! core-id=2, processor=8: SPARE + ! core-id=3, processor=3: + cpu-affinity GtpFloodRx0 0x0008 delay + ! core-id=3, processor=9: + cpu-affinity GtpFloodRx1 0x0200 delay + ! core-id=4, processor=4: + cpu-affinity GtpFloodRx2 0x0010 delay + ! core-id=4, processor=10: + cpu-affinity GtpFloodRx3 0x0400 delay + ! core-id=5, processor=5: + cpu-affinity GtpFloodRx4 0x0020 delay + ! core-id=2, processor=11: SPARE + +# Configure one or more local GTP endpoints to emit GTP packets from. +# Established sessions will use these round-robin. +# These need to be local IP addresses for 'gtp flood' to work. +gtp local 172.16.31.100 +gtp local 172.16.31.101 +gtp local 172.16.31.102 +gtp local 172.16.31.103 +gtp local 172.16.31.104 +gtp local 172.16.31.105 +gtp local 172.16.31.106 +gtp local 172.16.31.107 +gtp local 172.16.31.108 +gtp local 172.16.31.109 +gtp local 172.16.31.110 +gtp local 172.16.31.111 +gtp local 172.16.31.112 +gtp local 172.16.31.113 +gtp local 172.16.31.114 +gtp local 172.16.31.115 +gtp local 172.16.31.116 +gtp local 172.16.31.117 +gtp local 172.16.31.118 +gtp local 172.16.31.119 +gtp local 172.16.31.120 +gtp local 172.16.31.121 +gtp local 172.16.31.122 +gtp local 172.16.31.123 +gtp local 172.16.31.124 +gtp local 172.16.31.125 +gtp local 172.16.31.126 +gtp local 172.16.31.127 +gtp local 172.16.31.128 +gtp local 172.16.31.129 +gtp local 172.16.31.130 +gtp local 172.16.31.131 +gtp local 172.16.31.132 +gtp local 172.16.31.133 +gtp local 172.16.31.134 +gtp local 172.16.31.135 +gtp local 172.16.31.136 +gtp local 172.16.31.137 +gtp local 172.16.31.138 +gtp local 172.16.31.139 +gtp local 172.16.31.140 +gtp local 172.16.31.141 +gtp local 172.16.31.142 +gtp local 172.16.31.143 +gtp local 172.16.31.144 +gtp local 172.16.31.145 +gtp local 172.16.31.146 +gtp local 172.16.31.147 +gtp local 172.16.31.148 +gtp local 172.16.31.149 +gtp local 172.16.31.150 + +gtp core 172.16.32.2 + +# use UE IP addresses from this range, +1 for each new UE: +# 192.168.0.1, 192.168.0.2, ... +ue ip range 192.168.1.2 192.168.254.254 + +# now associate with UPF and start N sessions. +pfcp-peer 172.16.31.2 + tx assoc-setup-req + sleep 1 + date + + n 50000 session create tunend + wait responses + # All sessions established + date + +# For each established PFCP session, emit GTP packets +gtp flood + rx-workers 5 + tx-workers 5 + io-uring queue-size 4000 + flows-per-session 1 + packets-per-flow infinite + + # configure the generated GTP payload: send UDP packets from the UE address + # and these source UDP ports to these target addresses and target UDP ports. + # They are used round-robin. + # Source IP is the UE IP address. + payload source port udp range 10000 10010 + payload target ip range 172.16.32.200 172.16.32.223 + payload target port udp range 23000 23000 + +date +# All GTP is flowing. +# osmo-pfcp-tool will keep this up for as long as there still are active GTP flows, +# or until receiving a signal interrupt (ctrl-C). + +# give some time to gather counters before the tunnel is removed +sleep 1 diff --git a/testsuites/gtplab-sysmo2017/tunend/ran/configure.sh b/testsuites/gtplab-sysmo2017/tunend/ran/configure.sh new file mode 100755 index 0000000..4b80fab --- /dev/null +++ b/testsuites/gtplab-sysmo2017/tunend/ran/configure.sh @@ -0,0 +1,27 @@ +#!/bin/bash -xe + +# Interface towards UPF: +IFACE_UPF="enp2s0f0np0" +NUM_ENB=50 + +# Disable ethernet flow control: +sudo ethtool -A $IFACE_UPF autoneg off rx off tx off +# Increase NIC buffers: +sudo ethtool -G $IFACE_UPF rx 8192 tx 8192 +# Increase Adapter Transmit Queue: +sudo ip link set dev $IFACE_UPF txqueuelen 2000 + +# 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 IP addresses: +for i in $(seq "0" "$((NUM_ENB - 1))"); do + sudo ip addr add "$(printf "172.16.31.1%02u/24" $i)" dev $IFACE_UPF || true; +done diff --git a/testsuites/gtplab-sysmo2017/tunend/ran/osmo-pfcp-tool.cfg b/testsuites/gtplab-sysmo2017/tunend/ran/osmo-pfcp-tool.cfg new file mode 100644 index 0000000..6e80e6e --- /dev/null +++ b/testsuites/gtplab-sysmo2017/tunend/ran/osmo-pfcp-tool.cfg @@ -0,0 +1,12 @@ +log stderr + logging color 1 + logging print category-hex 0 + logging print category 1 + logging timestamp 0 + logging print file basename last + logging print level 1 + logging level set-all info + logging level lpfcp error + +local-addr 0.0.0.0 +listen diff --git a/testsuites/gtplab-sysmo2017/tunend/ran/run.sh b/testsuites/gtplab-sysmo2017/tunend/ran/run.sh new file mode 100755 index 0000000..cfd313c --- /dev/null +++ b/testsuites/gtplab-sysmo2017/tunend/ran/run.sh @@ -0,0 +1,5 @@ +#!/bin/bash -xe + +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) + +osmo-pfcp-tool -c "$SCRIPT_DIR/osmo-pfcp-tool.cfg" "$SCRIPT_DIR/0.gtp_flood.vty" \ No newline at end of file diff --git a/testsuites/gtplab-sysmo2017/tunend/upf/configure.sh b/testsuites/gtplab-sysmo2017/tunend/upf/configure.sh new file mode 100755 index 0000000..dd48c7e --- /dev/null +++ b/testsuites/gtplab-sysmo2017/tunend/upf/configure.sh @@ -0,0 +1,35 @@ +#!/bin/bash -xe + +# Interface towards UPF: +IFACE_RAN="enp2s0f0np0" +IFACE_CN="enp2s0f1np1" +IFACE_APN="apn-flood" + +# 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 +# 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.31.2/24 dev $IFACE_RAN || true; +sudo ip addr add 172.16.32.1/24 dev $IFACE_CN || true; + +# Set up UE IP routes: +# FIXME: These 2 below need to be done *after* osmo-upf creates the iface.... +#sudo ip addr add 192.168.1.1/16 dev $IFACE_APN +sudo ip route add 192.168.0.0/16 dev $IFACE_APN diff --git a/testsuites/gtplab-sysmo2017/tunend/upf/eupf/1.eupf.yaml b/testsuites/gtplab-sysmo2017/tunend/upf/eupf/1.eupf.yaml new file mode 100644 index 0000000..cd49159 --- /dev/null +++ b/testsuites/gtplab-sysmo2017/tunend/upf/eupf/1.eupf.yaml @@ -0,0 +1,13 @@ +interface_name: [enp2s0f0np0] +xdp_attach_mode: generic +api_address: :8080 +pfcp_address: 172.16.31.2:8805 +pfcp_node_id: 172.16.31.2 +metrics_address: :9090 +n3_address: 172.16.31.2 +qer_map_size: 1000000 +far_map_size: 1000000 +pdr_map_size: 1000000 +feature_ueip: true +feature_ftup: true +teid_pool: 1000000 diff --git a/testsuites/gtplab-sysmo2017/tunend/upf/eupf/1.run_eupf.sh b/testsuites/gtplab-sysmo2017/tunend/upf/eupf/1.run_eupf.sh new file mode 100755 index 0000000..12e0b27 --- /dev/null +++ b/testsuites/gtplab-sysmo2017/tunend/upf/eupf/1.run_eupf.sh @@ -0,0 +1,3 @@ +#!/bin/sh +set -x +sudo eupf --config 1.eupf.yaml diff --git a/testsuites/gtplab-sysmo2017/tunend/upf/osmo-upf/osmo-upf.cfg b/testsuites/gtplab-sysmo2017/tunend/upf/osmo-upf/osmo-upf.cfg new file mode 100644 index 0000000..b1f5804 --- /dev/null +++ b/testsuites/gtplab-sysmo2017/tunend/upf/osmo-upf/osmo-upf.cfg @@ -0,0 +1,25 @@ +log stderr + logging filter all 1 + logging color 1 + logging print category-hex 0 + logging print category 1 + logging timestamp 0 + logging print file basename last + logging print level 1 + logging level set-all notice + logging level set-all info + logging level session debug + logging level nft debug + logging level gtp debug + logging level set-all error + +line vty + bind 127.0.0.1 +ctrl + bind 127.0.0.1 + +timer pfcp x24 5000 +pfcp + local-addr 172.16.31.2 +tunend + dev create apn-flood 172.16.31.2 diff --git a/testsuites/gtplab-sysmo2017/tunend/upf/osmo-upf/run.sh b/testsuites/gtplab-sysmo2017/tunend/upf/osmo-upf/run.sh new file mode 100755 index 0000000..41f4616 --- /dev/null +++ b/testsuites/gtplab-sysmo2017/tunend/upf/osmo-upf/run.sh @@ -0,0 +1,5 @@ +#!/bin/bash -xe + +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) + +sudo osmo-upf -c "$SCRIPT_DIR/osmo-upf.cfg" diff --git a/testsuites/gtplab-sysmo2017/tunmap/cn/configure.sh b/testsuites/gtplab-sysmo2017/tunmap/cn/configure.sh new file mode 100755 index 0000000..15dd2f8 --- /dev/null +++ b/testsuites/gtplab-sysmo2017/tunmap/cn/configure.sh @@ -0,0 +1,27 @@ +#!/bin/bash -xe + +# Interface towards UPF: +IFACE_UPF="enp2s0f0np0" +NUM_CN=50 + +# Disable ethernet flow control: +sudo ethtool -A $IFACE_UPF autoneg off rx off tx off +# Increase NIC buffers: +sudo ethtool -G $IFACE_UPF rx 8192 tx 8192 +# Increase Adapter Transmit Queue: +sudo ip link set dev $IFACE_UPF txqueuelen 2000 + +# 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 CN IP addresses: +for i in $(seq "0" "$((NUM_CN - 1))"); do + sudo ip addr add "$(printf "172.16.32.2%02u/24" $i)" brd 172.16.32.255 dev $IFACE_UPF || true; +done diff --git a/testsuites/gtplab-sysmo2017/tunmap/cn/run.sh b/testsuites/gtplab-sysmo2017/tunmap/cn/run.sh new file mode 100755 index 0000000..8d1c14d --- /dev/null +++ b/testsuites/gtplab-sysmo2017/tunmap/cn/run.sh @@ -0,0 +1,3 @@ +#!/bin/bash -xe + +osmo-udp-responder -l 0.0.0.0 -p 2152 --io-uring-queue 16000 --workers 6 -n 1 -a diff --git a/testsuites/gtplab-sysmo2017/tunmap/ran/0.gtp_flood.vty b/testsuites/gtplab-sysmo2017/tunmap/ran/0.gtp_flood.vty new file mode 100644 index 0000000..611065c --- /dev/null +++ b/testsuites/gtplab-sysmo2017/tunmap/ran/0.gtp_flood.vty @@ -0,0 +1,155 @@ +# Establish N PFCP sessions for tunmap, and emit massive GTP traffic to the UPF +# to each established tunnel. +# +# osmo-pfcp-tool UPF "core" +# |GTP-ep -------GTP-----> GTP-ep|GTP-ep ----------IP------> GTP-ep +# |10.0.1.1 10.0.2.1|10.0.3.1 10.0.3.2 +# |10.0.1.2 +# ^ ^ ^ +# ^ | | | +# | | / configure by +# configure by from UPF 'gtp core' +# 'gtp ip' ("F-TEID=choose") + +# Configure CPU related settings: +cpu-sched + !policy rr 18 + ! All Rx in hyperthreads within same cores: + ! core-id=0, processor=0: + cpu-affinity GtpFloodTx0 0x0001 delay + ! core-id=0, processor=6: + cpu-affinity GtpFloodTx1 0x0040 delay + ! core-id=1, processor=1: + cpu-affinity GtpFloodTx2 0x0002 delay + ! core-id=1, processor=7: + cpu-affinity GtpFloodTx3 0x0080 delay + ! core-id=2, processor=2: + cpu-affinity GtpFloodTx4 0x0004 delay + ! core-id=2, processor=8: SPARE + ! core-id=3, processor=3: + cpu-affinity GtpFloodRx0 0x0008 delay + ! core-id=3, processor=9: + cpu-affinity GtpFloodRx1 0x0200 delay + ! core-id=4, processor=4: + cpu-affinity GtpFloodRx2 0x0010 delay + ! core-id=4, processor=10: + cpu-affinity GtpFloodRx3 0x0400 delay + ! core-id=5, processor=5: + cpu-affinity GtpFloodRx4 0x0020 delay + ! core-id=2, processor=11: SPARE + +# Configure one or more local GTP endpoints to emit GTP packets from. +# Established sessions will use these round-robin. +# These need to be local IP addresses for 'gtp flood' to work. +gtp local 172.16.31.100 +gtp local 172.16.31.101 +gtp local 172.16.31.102 +gtp local 172.16.31.103 +gtp local 172.16.31.104 +gtp local 172.16.31.105 +gtp local 172.16.31.106 +gtp local 172.16.31.107 +gtp local 172.16.31.108 +gtp local 172.16.31.109 +gtp local 172.16.31.110 +gtp local 172.16.31.111 +gtp local 172.16.31.112 +gtp local 172.16.31.113 +gtp local 172.16.31.114 +gtp local 172.16.31.115 +gtp local 172.16.31.116 +gtp local 172.16.31.117 +gtp local 172.16.31.118 +gtp local 172.16.31.119 +gtp local 172.16.31.120 +gtp local 172.16.31.121 +gtp local 172.16.31.122 +gtp local 172.16.31.123 +gtp local 172.16.31.124 +gtp local 172.16.31.125 +gtp local 172.16.31.126 +gtp local 172.16.31.127 +gtp local 172.16.31.128 +gtp local 172.16.31.129 +gtp local 172.16.31.130 +gtp local 172.16.31.131 +gtp local 172.16.31.132 +gtp local 172.16.31.133 +gtp local 172.16.31.134 +gtp local 172.16.31.135 +gtp local 172.16.31.136 +gtp local 172.16.31.137 +gtp local 172.16.31.138 +gtp local 172.16.31.139 +gtp local 172.16.31.140 +gtp local 172.16.31.141 +gtp local 172.16.31.142 +gtp local 172.16.31.143 +gtp local 172.16.31.144 +gtp local 172.16.31.145 +gtp local 172.16.31.146 +gtp local 172.16.31.147 +gtp local 172.16.31.148 +gtp local 172.16.31.149 +gtp local 172.16.31.150 + +gtp core 172.16.32.200 +gtp core 172.16.32.201 +gtp core 172.16.32.202 +gtp core 172.16.32.203 +gtp core 172.16.32.204 +gtp core 172.16.32.205 +gtp core 172.16.32.206 +gtp core 172.16.32.207 +gtp core 172.16.32.208 +gtp core 172.16.32.209 +gtp core 172.16.32.210 +gtp core 172.16.32.211 +gtp core 172.16.32.212 +gtp core 172.16.32.213 +gtp core 172.16.32.214 +gtp core 172.16.32.215 +gtp core 172.16.32.216 +gtp core 172.16.32.217 +gtp core 172.16.32.218 +gtp core 172.16.32.219 +gtp core 172.16.32.220 +gtp core 172.16.32.221 +gtp core 172.16.32.222 +gtp core 172.16.32.223 + +ue ip range 192.168.1.2 192.168.254.254 + +# now associate with UPF and start N sessions. +pfcp-peer 172.16.31.2 + tx assoc-setup-req + sleep 1 + date + + n 50 session create tunmap + wait responses + # All sessions established + date + +# For each established PFCP session, emit GTP packets +gtp flood + rx-workers 5 + tx-workers 5 + io-uring queue-size 4000 + flows-per-session 1 + packets-per-flow infinite + + # configure the generated GTP payload: include in the payload each tunnel's + # GTP TEID needed to correctly echo the GTP payload back with + # osmo-udp-responder. + payload append-info + + #slew 10000 + +date +# All GTP is flowing. +# osmo-pfcp-tool will keep this up for as long as there still are active GTP flows, +# or until receiving a signal interrupt (ctrl-C). + +# give some time to gather counters before the tunnel is removed +sleep 1 diff --git a/testsuites/gtplab-sysmo2017/tunmap/ran/configure.sh b/testsuites/gtplab-sysmo2017/tunmap/ran/configure.sh new file mode 100755 index 0000000..4b80fab --- /dev/null +++ b/testsuites/gtplab-sysmo2017/tunmap/ran/configure.sh @@ -0,0 +1,27 @@ +#!/bin/bash -xe + +# Interface towards UPF: +IFACE_UPF="enp2s0f0np0" +NUM_ENB=50 + +# Disable ethernet flow control: +sudo ethtool -A $IFACE_UPF autoneg off rx off tx off +# Increase NIC buffers: +sudo ethtool -G $IFACE_UPF rx 8192 tx 8192 +# Increase Adapter Transmit Queue: +sudo ip link set dev $IFACE_UPF txqueuelen 2000 + +# 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 IP addresses: +for i in $(seq "0" "$((NUM_ENB - 1))"); do + sudo ip addr add "$(printf "172.16.31.1%02u/24" $i)" dev $IFACE_UPF || true; +done diff --git a/testsuites/gtplab-sysmo2017/tunmap/ran/osmo-pfcp-tool.cfg b/testsuites/gtplab-sysmo2017/tunmap/ran/osmo-pfcp-tool.cfg new file mode 100644 index 0000000..6e80e6e --- /dev/null +++ b/testsuites/gtplab-sysmo2017/tunmap/ran/osmo-pfcp-tool.cfg @@ -0,0 +1,12 @@ +log stderr + logging color 1 + logging print category-hex 0 + logging print category 1 + logging timestamp 0 + logging print file basename last + logging print level 1 + logging level set-all info + logging level lpfcp error + +local-addr 0.0.0.0 +listen diff --git a/testsuites/gtplab-sysmo2017/tunmap/ran/run.sh b/testsuites/gtplab-sysmo2017/tunmap/ran/run.sh new file mode 100755 index 0000000..277bb4a --- /dev/null +++ b/testsuites/gtplab-sysmo2017/tunmap/ran/run.sh @@ -0,0 +1,5 @@ +#!/bin/bash -xe + +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) + +osmo-pfcp-tool -c "$SCRIPT_DIR/osmo-pfcp-tool.cfg" "$SCRIPT_DIR/0.gtp_flood.vty" diff --git a/testsuites/gtplab-sysmo2017/tunmap/upf/configure.sh b/testsuites/gtplab-sysmo2017/tunmap/upf/configure.sh new file mode 100755 index 0000000..f812c45 --- /dev/null +++ b/testsuites/gtplab-sysmo2017/tunmap/upf/configure.sh @@ -0,0 +1,29 @@ +#!/bin/bash -xe + +# Interface towards UPF: +IFACE_RAN="enp2s0f0np0" +IFACE_CN="enp2s0f1np1" + +# 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 +# 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.31.2/24 dev $IFACE_RAN || true; +sudo ip addr add 172.16.32.1/24 dev $IFACE_CN || true; diff --git a/testsuites/gtplab-sysmo2017/tunmap/upf/eupf/1.eupf.yaml b/testsuites/gtplab-sysmo2017/tunmap/upf/eupf/1.eupf.yaml new file mode 100644 index 0000000..8ff3444 --- /dev/null +++ b/testsuites/gtplab-sysmo2017/tunmap/upf/eupf/1.eupf.yaml @@ -0,0 +1,13 @@ +interface_name: [enp2s0f0np0,enp2s0f1np1] +xdp_attach_mode: generic +api_address: :8080 +pfcp_address: 172.16.31.2:8805 +pfcp_node_id: 172.16.31.2 +metrics_address: :9090 +n3_address: 172.16.31.2 +qer_map_size: 1000000 +far_map_size: 1000000 +pdr_map_size: 1000000 +feature_ueip: true +feature_ftup: true +teid_pool: 1000000 diff --git a/testsuites/gtplab-sysmo2017/tunmap/upf/eupf/1.run_eupf.sh b/testsuites/gtplab-sysmo2017/tunmap/upf/eupf/1.run_eupf.sh new file mode 100755 index 0000000..12e0b27 --- /dev/null +++ b/testsuites/gtplab-sysmo2017/tunmap/upf/eupf/1.run_eupf.sh @@ -0,0 +1,3 @@ +#!/bin/sh +set -x +sudo eupf --config 1.eupf.yaml diff --git a/testsuites/gtplab-sysmo2017/tunmap/upf/osmo-upf/osmo-upf.cfg b/testsuites/gtplab-sysmo2017/tunmap/upf/osmo-upf/osmo-upf.cfg new file mode 100644 index 0000000..ef9050f --- /dev/null +++ b/testsuites/gtplab-sysmo2017/tunmap/upf/osmo-upf/osmo-upf.cfg @@ -0,0 +1,25 @@ +log stderr + logging filter all 1 + logging color 1 + logging print category-hex 0 + logging print category 1 + logging timestamp 0 + logging print file basename last + logging print level 1 + logging level set-all notice + logging level set-all info + logging level session debug + logging level nft debug + logging level gtp debug + logging level set-all error + +line vty + bind 127.0.0.1 +ctrl + bind 127.0.0.1 + +timer pfcp x24 5000 +pfcp + local-addr 172.16.31.2 +tunend + dev create gtp-echo diff --git a/testsuites/gtplab-sysmo2017/tunmap/upf/osmo-upf/run.sh b/testsuites/gtplab-sysmo2017/tunmap/upf/osmo-upf/run.sh new file mode 100755 index 0000000..41f4616 --- /dev/null +++ b/testsuites/gtplab-sysmo2017/tunmap/upf/osmo-upf/run.sh @@ -0,0 +1,5 @@ +#!/bin/bash -xe + +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) + +sudo osmo-upf -c "$SCRIPT_DIR/osmo-upf.cfg"