osmith has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/40453?usp=email )
Change subject: pgw: initial testenv.cfg ......................................................................
pgw: initial testenv.cfg
All tests are passing with this config.
Related: OS#6494 Change-Id: I0f14ce56859c3303b2f6af57d7ab5722e0cbe8e0 --- M _testenv/data/podman/Dockerfile M _testenv/testenv/podman.py M pgw/PGW_Tests.cfg A pgw/freediameter.conf A pgw/open5gs-nrf.yaml A pgw/open5gs-smf.yaml A pgw/open5gs-upf.yaml A pgw/osmo-uecups-daemon.cfg A pgw/testenv.cfg A pgw/testenv.sh 10 files changed, 310 insertions(+), 0 deletions(-)
Approvals: Jenkins Builder: Verified laforge: Looks good to me, but someone else must approve pespin: Looks good to me, approved
diff --git a/_testenv/data/podman/Dockerfile b/_testenv/data/podman/Dockerfile index 84aa0db..3c241dc 100644 --- a/_testenv/data/podman/Dockerfile +++ b/_testenv/data/podman/Dockerfile @@ -55,6 +55,7 @@ libmnl-dev \ libmongoc-dev \ libnghttp2-dev \ + libnl-route-3-dev \ libortp-dev \ libpcap-dev \ libpcsclite-dev \ diff --git a/_testenv/testenv/podman.py b/_testenv/testenv/podman.py index 5099a95..77a728f 100644 --- a/_testenv/testenv/podman.py +++ b/_testenv/testenv/podman.py @@ -231,6 +231,7 @@ f"--security-opt=seccomp={seccomp}", "--cap-add=NET_ADMIN", # for dumpcap, tun devices, osmo-pcap-client "--cap-add=NET_RAW", # for dumpcap, osmo-pcap-client + "--cap-add=SYS_ADMIN", # for osmo-uecups-daemon (CLONE_NEWNET) "--device=/dev/net/tun", # for e.g. ggsn_tests "--volume", f"{apt_dir_var_cache}:/var/cache/apt", diff --git a/pgw/PGW_Tests.cfg b/pgw/PGW_Tests.cfg index a259c32..ce3076b 100644 --- a/pgw/PGW_Tests.cfg +++ b/pgw/PGW_Tests.cfg @@ -11,6 +11,16 @@ [TESTPORT_PARAMETERS]
[MODULE_PARAMETERS] +PGW_Tests.mp_pgw_hostname := "127.0.0.4" +PGW_Tests.mp_local_hostname_c := "127.0.0.202" +PGW_Tests.mp_local_hostname_u := "127.0.0.20" +PGW_Tests.mp_run_prog_log_path := "./run_prog" +PGW_Tests.mp_run_prog_as_user := "osmocom" # testenv.sh sets this to $USER +PGW_Tests.mp_ping_hostname := "10.45.0.1" +PGW_Tests.mp_pcrf_local_ip:= "127.0.0.202" +PGW_Tests.mp_ocs_local_ip:= "127.0.0.202" +PGW_Tests.mp_aaa_local_ip:= "127.0.0.202" +GTPv2_Emulation.mp_uecups_host := "127.0.0.20"
[MAIN_CONTROLLER]
diff --git a/pgw/freediameter.conf b/pgw/freediameter.conf new file mode 100644 index 0000000..266f894 --- /dev/null +++ b/pgw/freediameter.conf @@ -0,0 +1,20 @@ +# See https://github.com/open5gs/freeDiameter/blob/main/doc/freediameter.conf.samp... + +Identity = "smf.localdomain"; +Realm = "localdomain"; +Port = 3868; +SecPort = 0; +ListenOn = "127.0.0.4"; +NoRelay; + +LoadExtension = "dbg_msg_dumps.fdx" : "0x8888"; +LoadExtension = "dict_rfc5777.fdx"; +LoadExtension = "dict_mip6i.fdx"; +LoadExtension = "dict_nasreq.fdx"; +LoadExtension = "dict_nas_mipv6.fdx"; +LoadExtension = "dict_dcca.fdx"; +LoadExtension = "dict_dcca_3gpp.fdx"; + +ConnectPeer = "pcrf.localdomain" { ConnectTo = "127.0.0.202"; No_TLS; TcTimer = 2; }; +ConnectPeer = "ocs.localdomain" { ConnectTo = "127.0.0.202"; Port = 3869; No_TLS; TcTimer = 2; }; +ConnectPeer = "aaa.localdomain" { ConnectTo = "127.0.0.202"; Port = 3870; No_TLS; TcTimer = 2; }; diff --git a/pgw/open5gs-nrf.yaml b/pgw/open5gs-nrf.yaml new file mode 100644 index 0000000..0979be0 --- /dev/null +++ b/pgw/open5gs-nrf.yaml @@ -0,0 +1,40 @@ +# See https://github.com/open5gs/open5gs/blob/main/configs/open5gs/nrf.yaml.in + +db_uri: mongodb://localhost/open5gs + +logger: + level: info + +global: + max: + ue: 1024 + +sbi: + server: + no_tls: true + cacert: /etc/open5gs/tls/ca.crt + key: /etc/open5gs/tls/nrf.key + cert: /etc/open5gs/tls/nrf.crt + client: + no_tls: true + cacert: /etc/open5gs/tls/ca.crt + key: /etc/open5gs/tls/nrf.key + cert: /etc/open5gs/tls/nrf.crt + +nrf: + sbi: + server: + - address: 127.0.0.10 + port: 7777 + +scp: + sbi: + - addr: 127.0.1.10 + port: 7777 + + +parameter: + +max: + +time: diff --git a/pgw/open5gs-smf.yaml b/pgw/open5gs-smf.yaml new file mode 100644 index 0000000..49ec84b --- /dev/null +++ b/pgw/open5gs-smf.yaml @@ -0,0 +1,72 @@ +# See https://github.com/open5gs/open5gs/blob/main/configs/open5gs/smf.yaml.in + +logger: + level: info + +global: + max: + ue: 1024 + +sbi: + server: + no_tls: true + cacert: /etc/open5gs/tls/ca.crt + key: /etc/open5gs/tls/smf.key + cert: /etc/open5gs/tls/smf.crt + client: + no_tls: true + cacert: /etc/open5gs/tls/ca.crt + key: /etc/open5gs/tls/smf.key + cert: /etc/open5gs/tls/smf.crt + +smf: + sbi: + server: + - address: 127.0.0.4 + port: 7777 + client: + nrf: + - uri: http://127.0.0.10:7777 + scp: + - uri: http://127.0.1.10:7777 + pfcp: + server: + - address: 127.0.0.4 + client: + upf: + - address: 127.0.0.7 + gtpc: + server: + - address: 127.0.0.4 + gtpu: + server: + - address: 127.0.0.4 + metrics: + server: + - address: 127.0.0.4 + port: 9090 + session: + - subnet: 10.45.0.0/16 + gateway: 10.45.0.1 + dnn: internet + - subnet: cafe::/64 + gateway: cafe::1 + dnn: internet + dns: + - 8.8.8.8 + - 8.8.4.4 + - 2001:4860:4860::8888 + - 2001:4860:4860::8844 + mtu: 1400 + p-cscf: + - 127.0.0.7 + - fd02:db8:18::7 + ctf: + enabled: auto + freeDiameter: freediameter.conf + +parameter: + +max: + +time: diff --git a/pgw/open5gs-upf.yaml b/pgw/open5gs-upf.yaml new file mode 100644 index 0000000..e65914e --- /dev/null +++ b/pgw/open5gs-upf.yaml @@ -0,0 +1,34 @@ +# See https://github.com/open5gs/open5gs/blob/main/configs/open5gs/upf.yaml.in + +logger: + level: info + +global: + max: + ue: 1024 + +upf: + pfcp: + server: + - address: 127.0.0.7 + client: + smf: + - address: 127.0.0.4 + gtpu: + server: + - address: 127.0.0.7 + session: + - subnet: 10.45.0.0/16 + gateway: 10.45.0.1 + dnn: internet + dev: ogstun46 + - subnet: cafe::/64 + gateway: cafe::1 + dnn: internet + dev: ogstun46 + +parameter: + +max: + +time: diff --git a/pgw/osmo-uecups-daemon.cfg b/pgw/osmo-uecups-daemon.cfg new file mode 100644 index 0000000..5a1eafc --- /dev/null +++ b/pgw/osmo-uecups-daemon.cfg @@ -0,0 +1,17 @@ +log gsmtap 127.0.0.202 + logging level set-all debug + logging filter all 1 +log stderr + logging filter all 1 + logging print extended-timestamp 1 + logging print file basename last + logging print category-hex 0 + logging print category 1 + logging print level 1 + logging timestamp 1 + logging color 1 + logging level set-all info +line vty + bind 127.0.0.20 +uecups + local-ip 127.0.0.20 diff --git a/pgw/testenv.cfg b/pgw/testenv.cfg new file mode 100644 index 0000000..e2a40e2 --- /dev/null +++ b/pgw/testenv.cfg @@ -0,0 +1,32 @@ +[testsuite] +titan_min=9.0.0 +program=PGW_Tests +config=PGW_Tests.cfg +clean=testenv.sh + +[nrf] +program=open5gs-nrfd -c open5gs-nrf.yaml +make=open5gs +package=open5gs-nrf +copy=open5gs-nrf.yaml + +[upf] +program=open5gs-upfd -c open5gs-upf.yaml +make=open5gs +package=open5gs-upf +copy=open5gs-upf.yaml + +[smf] +program=open5gs-smfd -c open5gs-smf.yaml +make=open5gs +package=open5gs-smf +copy=open5gs-smf.yaml freediameter.conf + +[uecups-daemon] +# Programs started by osmo-uecups-daemo log to this dir +prepare=mkdir run_prog +# Must run as root for writing to /var/run/netns/ +program=sudo $(which osmo-uecups-daemon) +make=osmo-uecups +package=osmo-uecups +copy=osmo-uecups-daemon.cfg diff --git a/pgw/testenv.sh b/pgw/testenv.sh new file mode 100755 index 0000000..2abf999 --- /dev/null +++ b/pgw/testenv.sh @@ -0,0 +1,83 @@ +#!/bin/sh -ex + +check_usage() { + if [ -z "$TESTENV_CLEAN_REASON" ]; then + set +x + echo "Do not run this script manually." + echo "Run 'testenv.py run pgw' instead." + exit 1 + fi +} + +adjust_ttcn3_config() { + local as_user="${USER:-root}" + sed -i "s/^PGW_Tests.mp_run_prog_as_user := .*/PGW_Tests.mp_run_prog_as_user := "$as_user"/" \ + PGW_Tests.cfg +} + +run_setcap() { + sudo setcap "CAP_NET_ADMIN=+eip" "$(which open5gs-upfd)" + sudo setcap "CAP_NET_ADMIN=+eip" "$(which open5gs-smfd)" + sudo setcap "CAP_NET_ADMIN,CAP_SYS_ADMIN=+eip" "$(which osmo-uecups-daemon)" +} + +add_tun() { + local name="$1" + if ! grep "$name" /proc/net/dev > /dev/null; then + sudo ip tuntap add name $name mode tun + fi +} + +add_addr() { + local name="$1" + local addr="$2" + + sudo ip addr add "$addr" dev "$name" +} + +add_tun_all() { + add_tun "ogstun4" + add_tun "ogstun6" + add_tun "ogstun46" + + add_addr "ogstun46" "10.45.0.1/16" + add_addr "ogstun46" "cafe::1/64" + + sudo ip link set ogstun4 up + sudo ip link set ogstun6 up + sudo ip link set ogstun46 up +} + +del_tun() { + local name="$1" + + if ip link ls dev "$name" >/dev/null 2>&1; then + sudo ip link set "$name" down + sudo ip link del "$name" + fi +} + +del_tun_all() { + del_tun "ogstun4" + del_tun "ogstun6" + del_tun "ogstun46" +} + +check_usage + +case "$TESTENV_CLEAN_REASON" in + prepare) + run_setcap + adjust_ttcn3_config + del_tun_all + add_tun_all + ;; + crashed|finished) + del_tun_all + ;; + *) + set +x + echo "ERROR: unexpected TESTENV_CLEAN_REASON: $TESTENV_CLEAN_REASON" + exit 1 + ;; +esac