├── BUGS ├── juju ├── hsscharm │ ├── hooks │ │ ├── install │ │ ├── start │ │ └── upgrade-charm │ ├── config.yaml │ ├── metadata.yaml │ ├── actions.yaml │ └── metrics.yaml ├── mmecharm │ ├── hooks │ │ ├── install │ │ ├── start │ │ └── upgrade-charm │ ├── config.yaml │ ├── metadata.yaml │ └── actions.yaml ├── p4ovscharm │ ├── hooks │ │ ├── start │ │ ├── install │ │ └── upgrade-charm │ ├── config.yaml │ ├── actions.yaml │ └── metadata.yaml ├── p4sscharm │ ├── hooks │ │ ├── install │ │ ├── start │ │ └── upgrade-charm │ ├── config.yaml │ ├── metadata.yaml │ └── actions.yaml ├── spgwccharm │ ├── hooks │ │ ├── start │ │ ├── install │ │ └── upgrade-charm │ ├── config.yaml │ ├── metadata.yaml │ └── actions.yaml ├── spgwucharm │ ├── hooks │ │ ├── start │ │ ├── install │ │ └── upgrade-charm │ ├── config.yaml │ ├── metadata.yaml │ └── actions.yaml ├── flexrancharm │ ├── hooks │ │ ├── install │ │ ├── start │ │ └── upgrade-charm │ ├── lib │ │ └── ops │ ├── config.yaml │ ├── metadata.yaml │ ├── actions.yaml │ └── metrics.yaml └── oai5gdockercharm │ ├── hooks │ ├── start │ ├── install │ └── upgrade-charm │ ├── lib │ └── ops │ ├── config.yaml │ ├── metadata.yaml │ ├── actions.yaml │ └── metrics.yaml ├── watch-juju ├── docs ├── EN-OSM-OAI-Testbed-4G.dia ├── EN-OSM-OAI-Testbed-5G.dia ├── OAI_testbed_logical_topology.png ├── OAI_testbed_logical_topology.pptx ├── Makefile ├── SimCards.md ├── eNB.md └── README.md ├── vduhelper └── README ├── SimulaMet-FlexRAN_nsd ├── icons │ └── NorNet.png ├── README └── SimulaMet-FlexRAN_nsd.yaml ├── SimulaMet-OAI-EPC_nsd ├── icons │ └── NorNet.png └── README ├── SimulaMet-P4-SS_nsd ├── README ├── icons │ └── NorNet.png └── SimulaMet-P4-SS_nsd.yaml ├── SimulaMet-P4-SS_vnfd ├── icons │ └── NorNet.png ├── README └── cloud_init │ └── p4ss-init ├── SimulaMet-FlexRAN_vnfd ├── README ├── icons │ └── NorNet.png └── cloud_init │ └── flexran-init ├── SimulaMet-OAI-HSS_vnfd ├── README ├── icons │ └── NorNet.png └── cloud_init │ └── hss-init ├── SimulaMet-OAI-MME_vnfd ├── README ├── icons │ └── NorNet.png └── cloud_init │ └── mme-init ├── SimulaMet-OAI-5G-Docker_nsd ├── README ├── icons │ └── NorNet.png └── SimulaMet-OAI-5G-Docker_nsd.yaml ├── SimulaMet-OAI-5G-Docker_vnfd ├── README ├── icons │ └── NorNet.png └── cloud_init │ └── oai5gdocker-init ├── SimulaMet-OAI-SPGW-C_vnfd ├── README ├── icons │ └── NorNet.png └── cloud_init │ └── spgwc-init ├── SimulaMet-OAI-SPGW-U_vnfd ├── README ├── icons │ └── NorNet.png └── cloud_init │ └── spgwu-init ├── SimulaMet-OAI-TelemetryEPC_nsd ├── README └── icons │ └── NorNet.png ├── Work-in-Progress ├── SimulaMet-P4-OvS_nsd │ ├── README │ ├── icons │ │ └── NorNet.png │ └── SimulaMet-P4-OvS_nsd.yaml ├── SimulaMet-P4-OvS_vnfd │ ├── README │ ├── icons │ │ └── NorNet.png │ └── cloud_init │ │ └── p4ovs-init └── SimulaMet-P4-OvS.yaml ├── sshP ├── sshA1 ├── sshA2 ├── sshA3 ├── sshA4 ├── sshB1 ├── sshB2 ├── sshB3 ├── sshB4 ├── sshC1 ├── sshC2 ├── sshC3 ├── sshC4 ├── sshD1 ├── sshD2 ├── sshD3 ├── sshD4 ├── sshF ├── tests ├── fix-iproute2 ├── bashrc.add ├── juju-cleaner ├── build-gNodeB ├── count-osm-mon-collectors ├── osm-mon-collector-bug-workaround ├── docker-cn5g ├── run-gNodeB ├── qos-controller ├── perform-osm-installation ├── add-k8s_monitoring ├── plot-count-osm-mon-collectors.R ├── metrics ├── 5g-docker-compose │ └── healthscripts │ │ └── mysql-healthcheck2.sh ├── reinstall-spgwu ├── wireshark │ └── colorfilters ├── build-cn5g ├── reinstall-spgwc ├── clone-mosaic5g-repositories └── reinstall-mme ├── evaluation ├── remove-incomplete-results ├── archive-measurement ├── rsync-measurement ├── get-flexran-info ├── tshark-xz ├── Run-MeasurementM2EC2020 ├── plot-MeasurementM2EC2020.R ├── plot-MeasurementEuCNC1.R ├── plot-Measurement4.R ├── plot-Measurement5.R └── plot-Measurement6.R ├── slicing ├── ue-association.json ├── ran-sharing.json ├── get-stats ├── apply-scheduler-configuration └── apply-ue-slice-associations ├── systemd ├── mme.service ├── hss.service ├── spgwu.service ├── spgwc.service └── eNodeB.service ├── baselayers └── README ├── make-ssh-scripts ├── reset-SimulaMet-OAI-EPC-core ├── .gitmodules ├── README ├── show-failed-juju-actions ├── autogen.sh ├── Core4-SimulaMet-OAI-5G-Docker.yaml ├── Core1-SimulaMet-FlexRAN.yaml ├── Core3-SimulaMet-FlexRAN.yaml ├── Core4-SimulaMet-FlexRAN.yaml └── Test-SimulaMet-P4-SS.yaml /BUGS: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /juju/hsscharm/hooks/install: -------------------------------------------------------------------------------- 1 | ../src/charm.py -------------------------------------------------------------------------------- /juju/hsscharm/hooks/start: -------------------------------------------------------------------------------- 1 | ../src/charm.py -------------------------------------------------------------------------------- /juju/mmecharm/hooks/install: -------------------------------------------------------------------------------- 1 | ../src/charm.py -------------------------------------------------------------------------------- /juju/mmecharm/hooks/start: -------------------------------------------------------------------------------- 1 | ../src/charm.py -------------------------------------------------------------------------------- /juju/p4ovscharm/hooks/start: -------------------------------------------------------------------------------- 1 | ../src/charm.py -------------------------------------------------------------------------------- /juju/p4sscharm/hooks/install: -------------------------------------------------------------------------------- 1 | ../src/charm.py -------------------------------------------------------------------------------- /juju/p4sscharm/hooks/start: -------------------------------------------------------------------------------- 1 | ../src/charm.py -------------------------------------------------------------------------------- /juju/spgwccharm/hooks/start: -------------------------------------------------------------------------------- 1 | ../src/charm.py -------------------------------------------------------------------------------- /juju/spgwucharm/hooks/start: -------------------------------------------------------------------------------- 1 | ../src/charm.py -------------------------------------------------------------------------------- /juju/flexrancharm/hooks/install: -------------------------------------------------------------------------------- 1 | ../src/charm.py -------------------------------------------------------------------------------- /juju/flexrancharm/hooks/start: -------------------------------------------------------------------------------- 1 | ../src/charm.py -------------------------------------------------------------------------------- /juju/flexrancharm/lib/ops: -------------------------------------------------------------------------------- 1 | ../mod/operator/ops -------------------------------------------------------------------------------- /juju/hsscharm/hooks/upgrade-charm: -------------------------------------------------------------------------------- 1 | ../src/charm.py -------------------------------------------------------------------------------- /juju/mmecharm/hooks/upgrade-charm: -------------------------------------------------------------------------------- 1 | ../src/charm.py -------------------------------------------------------------------------------- /juju/oai5gdockercharm/hooks/start: -------------------------------------------------------------------------------- 1 | ../src/charm.py -------------------------------------------------------------------------------- /juju/oai5gdockercharm/lib/ops: -------------------------------------------------------------------------------- 1 | ../mod/operator/ops -------------------------------------------------------------------------------- /juju/p4ovscharm/hooks/install: -------------------------------------------------------------------------------- 1 | ../src/charm.py -------------------------------------------------------------------------------- /juju/spgwccharm/hooks/install: -------------------------------------------------------------------------------- 1 | ../src/charm.py -------------------------------------------------------------------------------- /juju/spgwucharm/hooks/install: -------------------------------------------------------------------------------- 1 | ../src/charm.py -------------------------------------------------------------------------------- /juju/flexrancharm/hooks/upgrade-charm: -------------------------------------------------------------------------------- 1 | ../src/charm.py -------------------------------------------------------------------------------- /juju/oai5gdockercharm/hooks/install: -------------------------------------------------------------------------------- 1 | ../src/charm.py -------------------------------------------------------------------------------- /juju/p4ovscharm/hooks/upgrade-charm: -------------------------------------------------------------------------------- 1 | ../src/charm.py -------------------------------------------------------------------------------- /juju/p4sscharm/hooks/upgrade-charm: -------------------------------------------------------------------------------- 1 | ../src/charm.py -------------------------------------------------------------------------------- /juju/spgwccharm/hooks/upgrade-charm: -------------------------------------------------------------------------------- 1 | ../src/charm.py -------------------------------------------------------------------------------- /juju/spgwucharm/hooks/upgrade-charm: -------------------------------------------------------------------------------- 1 | ../src/charm.py -------------------------------------------------------------------------------- /juju/oai5gdockercharm/hooks/upgrade-charm: -------------------------------------------------------------------------------- 1 | ../src/charm.py -------------------------------------------------------------------------------- /watch-juju: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | watch -n 5 --color juju status --color 3 | -------------------------------------------------------------------------------- /docs/EN-OSM-OAI-Testbed-4G.dia: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simula/5gvinni-oai-ns/HEAD/docs/EN-OSM-OAI-Testbed-4G.dia -------------------------------------------------------------------------------- /docs/EN-OSM-OAI-Testbed-5G.dia: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simula/5gvinni-oai-ns/HEAD/docs/EN-OSM-OAI-Testbed-5G.dia -------------------------------------------------------------------------------- /vduhelper/README: -------------------------------------------------------------------------------- 1 | The files in this directory are copied into each Charm's "reactive" directory before building the Charm! 2 | -------------------------------------------------------------------------------- /SimulaMet-FlexRAN_nsd/icons/NorNet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simula/5gvinni-oai-ns/HEAD/SimulaMet-FlexRAN_nsd/icons/NorNet.png -------------------------------------------------------------------------------- /SimulaMet-OAI-EPC_nsd/icons/NorNet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simula/5gvinni-oai-ns/HEAD/SimulaMet-OAI-EPC_nsd/icons/NorNet.png -------------------------------------------------------------------------------- /SimulaMet-P4-SS_nsd/README: -------------------------------------------------------------------------------- 1 | Descriptor created by OSM descriptor package generated 2 | Created on on. 16. okt. 16:08:31 +0200 2019 3 | -------------------------------------------------------------------------------- /SimulaMet-P4-SS_nsd/icons/NorNet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simula/5gvinni-oai-ns/HEAD/SimulaMet-P4-SS_nsd/icons/NorNet.png -------------------------------------------------------------------------------- /SimulaMet-P4-SS_vnfd/icons/NorNet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simula/5gvinni-oai-ns/HEAD/SimulaMet-P4-SS_vnfd/icons/NorNet.png -------------------------------------------------------------------------------- /docs/OAI_testbed_logical_topology.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simula/5gvinni-oai-ns/HEAD/docs/OAI_testbed_logical_topology.png -------------------------------------------------------------------------------- /docs/OAI_testbed_logical_topology.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simula/5gvinni-oai-ns/HEAD/docs/OAI_testbed_logical_topology.pptx -------------------------------------------------------------------------------- /SimulaMet-FlexRAN_nsd/README: -------------------------------------------------------------------------------- 1 | Descriptor created by OSM descriptor package generated 2 | Created on on. 16. okt. 16:08:31 +0200 2019 3 | -------------------------------------------------------------------------------- /SimulaMet-FlexRAN_vnfd/README: -------------------------------------------------------------------------------- 1 | Descriptor created by OSM descriptor package generated 2 | Created on on. 16. okt. 16:08:31 +0200 2019 3 | -------------------------------------------------------------------------------- /SimulaMet-FlexRAN_vnfd/icons/NorNet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simula/5gvinni-oai-ns/HEAD/SimulaMet-FlexRAN_vnfd/icons/NorNet.png -------------------------------------------------------------------------------- /SimulaMet-OAI-EPC_nsd/README: -------------------------------------------------------------------------------- 1 | Descriptor created by OSM descriptor package generated 2 | Created on on. 16. okt. 16:08:31 +0200 2019 3 | -------------------------------------------------------------------------------- /SimulaMet-OAI-HSS_vnfd/README: -------------------------------------------------------------------------------- 1 | Descriptor created by OSM descriptor package generated 2 | Created on on. 16. okt. 16:08:31 +0200 2019 3 | -------------------------------------------------------------------------------- /SimulaMet-OAI-HSS_vnfd/icons/NorNet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simula/5gvinni-oai-ns/HEAD/SimulaMet-OAI-HSS_vnfd/icons/NorNet.png -------------------------------------------------------------------------------- /SimulaMet-OAI-MME_vnfd/README: -------------------------------------------------------------------------------- 1 | Descriptor created by OSM descriptor package generated 2 | Created on on. 16. okt. 16:08:31 +0200 2019 3 | -------------------------------------------------------------------------------- /SimulaMet-OAI-MME_vnfd/icons/NorNet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simula/5gvinni-oai-ns/HEAD/SimulaMet-OAI-MME_vnfd/icons/NorNet.png -------------------------------------------------------------------------------- /SimulaMet-P4-SS_vnfd/README: -------------------------------------------------------------------------------- 1 | Descriptor created by OSM descriptor package generated 2 | Created on on. 16. okt. 16:08:31 +0200 2019 3 | -------------------------------------------------------------------------------- /SimulaMet-OAI-5G-Docker_nsd/README: -------------------------------------------------------------------------------- 1 | Descriptor created by OSM descriptor package generated 2 | Created on on. 16. okt. 16:08:31 +0200 2019 3 | -------------------------------------------------------------------------------- /SimulaMet-OAI-5G-Docker_vnfd/README: -------------------------------------------------------------------------------- 1 | Descriptor created by OSM descriptor package generated 2 | Created on on. 16. okt. 16:08:31 +0200 2019 3 | -------------------------------------------------------------------------------- /SimulaMet-OAI-SPGW-C_vnfd/README: -------------------------------------------------------------------------------- 1 | Descriptor created by OSM descriptor package generated 2 | Created on on. 16. okt. 16:08:31 +0200 2019 3 | -------------------------------------------------------------------------------- /SimulaMet-OAI-SPGW-C_vnfd/icons/NorNet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simula/5gvinni-oai-ns/HEAD/SimulaMet-OAI-SPGW-C_vnfd/icons/NorNet.png -------------------------------------------------------------------------------- /SimulaMet-OAI-SPGW-U_vnfd/README: -------------------------------------------------------------------------------- 1 | Descriptor created by OSM descriptor package generated 2 | Created on on. 16. okt. 16:08:31 +0200 2019 3 | -------------------------------------------------------------------------------- /SimulaMet-OAI-SPGW-U_vnfd/icons/NorNet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simula/5gvinni-oai-ns/HEAD/SimulaMet-OAI-SPGW-U_vnfd/icons/NorNet.png -------------------------------------------------------------------------------- /SimulaMet-OAI-5G-Docker_nsd/icons/NorNet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simula/5gvinni-oai-ns/HEAD/SimulaMet-OAI-5G-Docker_nsd/icons/NorNet.png -------------------------------------------------------------------------------- /SimulaMet-OAI-5G-Docker_vnfd/icons/NorNet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simula/5gvinni-oai-ns/HEAD/SimulaMet-OAI-5G-Docker_vnfd/icons/NorNet.png -------------------------------------------------------------------------------- /SimulaMet-OAI-TelemetryEPC_nsd/README: -------------------------------------------------------------------------------- 1 | Descriptor created by OSM descriptor package generated 2 | Created on on. 16. okt. 16:08:31 +0200 2019 3 | -------------------------------------------------------------------------------- /SimulaMet-OAI-TelemetryEPC_nsd/icons/NorNet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simula/5gvinni-oai-ns/HEAD/SimulaMet-OAI-TelemetryEPC_nsd/icons/NorNet.png -------------------------------------------------------------------------------- /Work-in-Progress/SimulaMet-P4-OvS_nsd/README: -------------------------------------------------------------------------------- 1 | Descriptor created by OSM descriptor package generated 2 | Created on on. 16. okt. 16:08:31 +0200 2019 3 | -------------------------------------------------------------------------------- /Work-in-Progress/SimulaMet-P4-OvS_vnfd/README: -------------------------------------------------------------------------------- 1 | Descriptor created by OSM descriptor package generated 2 | Created on on. 16. okt. 16:08:31 +0200 2019 3 | -------------------------------------------------------------------------------- /Work-in-Progress/SimulaMet-P4-OvS_nsd/icons/NorNet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simula/5gvinni-oai-ns/HEAD/Work-in-Progress/SimulaMet-P4-OvS_nsd/icons/NorNet.png -------------------------------------------------------------------------------- /Work-in-Progress/SimulaMet-P4-OvS_vnfd/icons/NorNet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simula/5gvinni-oai-ns/HEAD/Work-in-Progress/SimulaMet-P4-OvS_vnfd/icons/NorNet.png -------------------------------------------------------------------------------- /sshP: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | HOST="10.132.13.219" 4 | 5 | ssh-keygen -q -R ${HOST} 6 | echo "SSH to P4-OvS Switch ..." 7 | ssh -CX -oStrictHostKeyChecking=no ubuntu@${HOST} 8 | -------------------------------------------------------------------------------- /sshA1: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | HOST="10.132.13.200" 4 | 5 | ssh-keygen -q -R ${HOST} 6 | echo "SSH to HSS in Core #1 ..." 7 | ssh -CX -oStrictHostKeyChecking=no ubuntu@${HOST} 8 | -------------------------------------------------------------------------------- /sshA2: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | HOST="10.132.13.201" 4 | 5 | ssh-keygen -q -R ${HOST} 6 | echo "SSH to MME in Core #1 ..." 7 | ssh -CX -oStrictHostKeyChecking=no ubuntu@${HOST} 8 | -------------------------------------------------------------------------------- /sshA3: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | HOST="10.132.13.202" 4 | 5 | ssh-keygen -q -R ${HOST} 6 | echo "SSH to SPGW-C in Core #1 ..." 7 | ssh -CX -oStrictHostKeyChecking=no ubuntu@${HOST} 8 | -------------------------------------------------------------------------------- /sshA4: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | HOST="10.132.13.203" 4 | 5 | ssh-keygen -q -R ${HOST} 6 | echo "SSH to SPGW-U in Core #1 ..." 7 | ssh -CX -oStrictHostKeyChecking=no ubuntu@${HOST} 8 | -------------------------------------------------------------------------------- /sshB1: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | HOST="10.132.13.210" 4 | 5 | ssh-keygen -q -R ${HOST} 6 | echo "SSH to HSS in Core #2 ..." 7 | ssh -CX -oStrictHostKeyChecking=no ubuntu@${HOST} 8 | -------------------------------------------------------------------------------- /sshB2: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | HOST="10.132.13.211" 4 | 5 | ssh-keygen -q -R ${HOST} 6 | echo "SSH to MME in Core #2 ..." 7 | ssh -CX -oStrictHostKeyChecking=no ubuntu@${HOST} 8 | -------------------------------------------------------------------------------- /sshB3: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | HOST="10.132.13.212" 4 | 5 | ssh-keygen -q -R ${HOST} 6 | echo "SSH to SPGW-C in Core #2 ..." 7 | ssh -CX -oStrictHostKeyChecking=no ubuntu@${HOST} 8 | -------------------------------------------------------------------------------- /sshB4: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | HOST="10.132.13.213" 4 | 5 | ssh-keygen -q -R ${HOST} 6 | echo "SSH to SPGW-U in Core #2 ..." 7 | ssh -CX -oStrictHostKeyChecking=no ubuntu@${HOST} 8 | -------------------------------------------------------------------------------- /sshC1: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | HOST="10.132.13.220" 4 | 5 | ssh-keygen -q -R ${HOST} 6 | echo "SSH to HSS in Core #3 ..." 7 | ssh -CX -oStrictHostKeyChecking=no ubuntu@${HOST} 8 | -------------------------------------------------------------------------------- /sshC2: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | HOST="10.132.13.221" 4 | 5 | ssh-keygen -q -R ${HOST} 6 | echo "SSH to MME in Core #3 ..." 7 | ssh -CX -oStrictHostKeyChecking=no ubuntu@${HOST} 8 | -------------------------------------------------------------------------------- /sshC3: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | HOST="10.132.13.222" 4 | 5 | ssh-keygen -q -R ${HOST} 6 | echo "SSH to SPGW-C in Core #3 ..." 7 | ssh -CX -oStrictHostKeyChecking=no ubuntu@${HOST} 8 | -------------------------------------------------------------------------------- /sshC4: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | HOST="10.132.13.223" 4 | 5 | ssh-keygen -q -R ${HOST} 6 | echo "SSH to SPGW-U in Core #3 ..." 7 | ssh -CX -oStrictHostKeyChecking=no ubuntu@${HOST} 8 | -------------------------------------------------------------------------------- /sshD1: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | HOST="10.132.13.230" 4 | 5 | ssh-keygen -q -R ${HOST} 6 | echo "SSH to HSS in Core #4 ..." 7 | ssh -CX -oStrictHostKeyChecking=no ubuntu@${HOST} 8 | -------------------------------------------------------------------------------- /sshD2: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | HOST="10.132.13.231" 4 | 5 | ssh-keygen -q -R ${HOST} 6 | echo "SSH to MME in Core #4 ..." 7 | ssh -CX -oStrictHostKeyChecking=no ubuntu@${HOST} 8 | -------------------------------------------------------------------------------- /sshD3: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | HOST="10.132.13.232" 4 | 5 | ssh-keygen -q -R ${HOST} 6 | echo "SSH to SPGW-C in Core #4 ..." 7 | ssh -CX -oStrictHostKeyChecking=no ubuntu@${HOST} 8 | -------------------------------------------------------------------------------- /sshD4: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | HOST="10.132.13.233" 4 | 5 | ssh-keygen -q -R ${HOST} 6 | echo "SSH to SPGW-U in Core #4 ..." 7 | ssh -CX -oStrictHostKeyChecking=no ubuntu@${HOST} 8 | -------------------------------------------------------------------------------- /sshF: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | HOST="10.132.13.204" 4 | 5 | ssh-keygen -q -R ${HOST} 6 | echo "SSH to FlexRAN Controller ..." 7 | ssh -CX -oStrictHostKeyChecking=no ubuntu@${HOST} 8 | -------------------------------------------------------------------------------- /tests/fix-iproute2: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | 3 | cd ~/src 4 | git clone https://salsa.debian.org/debian/iproute2.git 5 | cd iproute2 6 | ./configure 7 | make -j4 8 | sudo cp tc/tc /sbin 9 | -------------------------------------------------------------------------------- /docs/Makefile: -------------------------------------------------------------------------------- 1 | mdfiles := $(wildcard *.md) 2 | htmlfiles := $(patsubst %.md,%.html,$(mdfiles)) 3 | 4 | .PHONY: all 5 | all: $(htmlfiles) 6 | 7 | $(htmlfiles): %.html: %.md 8 | pandoc $< >$@ 9 | -------------------------------------------------------------------------------- /tests/bashrc.add: -------------------------------------------------------------------------------- 1 | # --------------------------------------------------------------------------- 2 | 3 | cores=`getconf _NPROCESSORS_ONLN 2>/dev/null || true` 4 | export MAKEFLAGS=-j${cores} 5 | export XZ_DEFAULTS="-T 0" 6 | -------------------------------------------------------------------------------- /evaluation/remove-incomplete-results: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | INCOMPLETE=`find . -name "*-ping" -type d -printf "%p\n" | sed -e "s/-ping$//g"` 4 | for incomplete in ${INCOMPLETE} ; do 5 | echo "Cleaning up ${incomplete}* ..." 6 | rm -rf ${incomplete}* 7 | done 8 | -------------------------------------------------------------------------------- /tests/juju-cleaner: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | sudo snap remove charms 3 | juju list-models | cut -d' ' -f1 | grep -E "^[a-f0-9-]+$" | xargs -n1 juju destroy-model -y 4 | lxc list -c n --format csv | grep "^juju" | xargs -n1 -r sudo lxc delete --force 5 | sudo updatedb 6 | echo "Done!" 7 | -------------------------------------------------------------------------------- /tests/build-gNodeB: -------------------------------------------------------------------------------- 1 | #!/bin/bash -eu 2 | 3 | cd ~/src/openairinterface5g 4 | source oaienv 5 | export BUILD_UHD_FROM_SOURCE=True 6 | export UHD_VERSION=4.7.0.0 7 | ./cmake_targets/build_oai -w USRP -c --eNB --gNB --nrUE --run-with-gdb RelWithDebInfo 8 | 9 | echo "Ready!" 10 | -------------------------------------------------------------------------------- /tests/count-osm-mon-collectors: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | while [ true ] ; do 4 | uptime=`cat /proc/uptime | cut -d' ' -f1` 5 | procs=`ps ax | grep osm-mon-collector | wc --lines` 6 | echo -e "${uptime}\t${procs}" | tee --append osm-mon-collectors.data 7 | sleep 10 8 | done 9 | -------------------------------------------------------------------------------- /slicing/ue-association.json: -------------------------------------------------------------------------------- 1 | { 2 | "ueConfig": [ 3 | { 4 | "imsi": 242881234500003, 5 | "dlSliceId": 2, 6 | "ulSliceId": 2 7 | }, 8 | { 9 | "imsi": 242891234500000, 10 | "dlSliceId": 0, 11 | "ulSliceId": 0 12 | } 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /evaluation/archive-measurement: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ $# -lt 1 ] ; then 4 | echo >&2 "Usage: $0 measurement_name ..." 5 | exit 1 6 | fi 7 | 8 | while [ $# -gt 0 ] ; do 9 | echo "Archiving $1 ..." 10 | tar cvf - Run-$1 plot-$1.R Results-$1-active.pdf Results-$1-passive.pdf $1 | xz -T0 - >$1.tar.xz 11 | shift 12 | done 13 | -------------------------------------------------------------------------------- /systemd/mme.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Mobility Management Entity (MME) 3 | After=ssh.target 4 | 5 | [Service] 6 | ExecStart=/bin/sh -c 'exec /usr/local/bin/mme -c /usr/local/etc/oai/mme.conf >>/var/log/mme.log 2>&1' 7 | KillMode=process 8 | Restart=on-failure 9 | RestartPreventExitStatus=255 10 | WorkingDirectory=/home/nornetpp/src/openair-cn/scripts 11 | 12 | [Install] 13 | WantedBy=multi-user.target 14 | -------------------------------------------------------------------------------- /systemd/hss.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Home Subscriber Server (HSS) 3 | After=ssh.target 4 | 5 | [Service] 6 | ExecStart=/bin/sh -c 'exec /usr/local/bin/oai_hss -j /usr/local/etc/oai/hss_rel14.json >>/var/log/hss.log 2>&1' 7 | KillMode=process 8 | Restart=on-failure 9 | RestartPreventExitStatus=255 10 | WorkingDirectory=/home/nornetpp/src/openair-cn/scripts 11 | 12 | [Install] 13 | WantedBy=multi-user.target 14 | -------------------------------------------------------------------------------- /baselayers/README: -------------------------------------------------------------------------------- 1 | This directory should be empty in the ideal case. However, if there is a 2 | problem with the Juju Charms baselayers, place the base layers to be included 3 | in this directory. 4 | 5 | Example to get a previous version of the "basic" layer: 6 | git submodule add https://github.com/juju-solutions/layer-basic.git baselayers/basic 7 | cd baselayers/basic 8 | git checkout 26ece6b3192bfb2b61e12740a05d5822cfedf496 9 | -------------------------------------------------------------------------------- /tests/osm-mon-collector-bug-workaround: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | procs=`ps ax | grep osm-mon-collector | grep -v grep | grep -v workaround | wc --lines` 4 | if [ $procs -gt 200 ] ; then 5 | echo "$procs osm-mon-collector processes -> terminating them!" 6 | ps ax | grep "/usr/bin/python3 /usr/bin/osm-mon-collector" | grep -v "grep" | awk '{ print $1 }' | xargs -r sudo kill 7 | else 8 | echo "$procs osm-mon-collector processes -> okay." 9 | fi 10 | -------------------------------------------------------------------------------- /tests/docker-cn5g: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | 3 | # Documentation: 4 | # https://gitlab.eurecom.fr/oai/cn5g/oai-cn5g-fed/-/blob/master/docs/DEPLOY_HOME.md 5 | 6 | 7 | mkdir -p src 8 | cd src 9 | 10 | if [ ! -d oai-cn5g-fed ] ; then 11 | git clone --recursive https://gitlab.eurecom.fr/oai/cn5g/oai-cn5g-fed.git 12 | fi 13 | 14 | sudo sysctl net.ipv4.conf.all.forwarding=1 15 | sudo iptables -P FORWARD ACCEPT 16 | 17 | sudo apt install -y tshark 18 | 19 | -------------------------------------------------------------------------------- /systemd/spgwu.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Serving and Packet Data Network Gateway -- User Plane (SPGW-U) 3 | After=ssh.target 4 | 5 | [Service] 6 | ExecStart=/bin/sh -c 'exec /usr/local/bin/spgwu -c /usr/local/etc/oai/spgw_u.conf -o >>/var/log/spgwu.log 2>&1' 7 | KillMode=process 8 | Restart=on-failure 9 | RestartPreventExitStatus=255 10 | WorkingDirectory=/home/nornetpp/src/openair-cn-cups/build/scripts 11 | 12 | [Install] 13 | WantedBy=multi-user.target 14 | -------------------------------------------------------------------------------- /systemd/spgwc.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Serving and Packet Data Network Gateway -- Control Plane (SPGW-C) 3 | After=ssh.target 4 | 5 | [Service] 6 | ExecStart=/bin/sh -c 'exec /usr/local/bin/spgwc -c /usr/local/etc/oai/spgw_c.conf -o >>/var/log/spgwc.log 2>&1' 7 | KillMode=process 8 | Restart=on-failure 9 | RestartPreventExitStatus=255 10 | WorkingDirectory=/home/nornetpp/src/openair-cn-cups/build/scripts 11 | 12 | [Install] 13 | WantedBy=multi-user.target 14 | -------------------------------------------------------------------------------- /evaluation/rsync-measurement: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ $# -lt 1 ] ; then 4 | echo >&2 "Usage: $0 measurement_name ..." 5 | exit 1 6 | fi 7 | 8 | while [ $# -gt 0 ] ; do 9 | echo "Copying $1 ..." 10 | if [ ! -d $1 ] ; then 11 | echo >&2 "ERROR: $1 does not exist!" 12 | exit 1 13 | fi 14 | 15 | rsync -az --partial --info=progress2 Run-$1 plot-$1.R Results-$1-active.pdf Results-$1-passive.pdf $1 dominos.simula.no:/var/foivos/OAI/ 16 | shift 17 | done 18 | -------------------------------------------------------------------------------- /tests/run-gNodeB: -------------------------------------------------------------------------------- 1 | #!/bin/bash -eu 2 | 3 | # Assuming Ettus N310! 4 | 5 | ping -c3 -i0.2 192.168.243.132 # AMF 6 | ping -c3 -i0.2 192.168.10.2 # Ettus via fibre0 7 | ping -c3 -i0.2 192.168.20.2 # Ettus via fibre1 8 | ping -c3 -i0.2 10.132.17.40 # Ettus via copper 9 | 10 | cd ~/src/openairinterface5g 11 | source oaienv 12 | cd cmake_targets/ran_build/build 13 | sudo nice -n -19 ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.band78.sa.fr1.106PRB.2x2.usrpn310.conf --gNBs.[0].min_rxtxtime 6 --sa --usrp-tx-thread-config 1 14 | -------------------------------------------------------------------------------- /tests/qos-controller: -------------------------------------------------------------------------------- 1 | #!/bin/sh -e 2 | 3 | # ssh-copy-id -p 2909 -i ~/.ssh/id_rsa nornetpp@localhost 4 | # ssh -p 2909 -i ~/.ssh/id_rsa nornetpp@localhost hostname 5 | # HENCSAT-QoS-Controller -router "Access to Public Data Network" -sshuser nornetpp -sshhost localhost -sshport 2909 6 | 7 | PROXY="oesthorn.nntb.no,nornetpp@frigg.simula.nornet" 8 | SPGW_U="10.132.13.213" 9 | ssh -J $PROXY nornetpp@$SPGW_U hostname 10 | ./HENCSAT-QoS-Controller \ 11 | -router "SPGW-U QoS Control" \ 12 | -sshuser nornetpp \ 13 | -sshhost $SPGW_U \ 14 | -sshproxy $PROXY 15 | -------------------------------------------------------------------------------- /systemd/eNodeB.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Evolved Node B (eNodeB) 3 | After=ssh.target 4 | 5 | [Service] 6 | ExecStart=/bin/sh -c 'exec nice --adjustment=-20 /home/nornetpp/src/openairinterface5g/cmake_targets/ran_build/build/lte-softmodem -O /home/nornetpp/src/openairinterface5g/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf >>/var/log/eNodeB.log 2>&1' 7 | KillMode=process 8 | Restart=on-failure 9 | RestartPreventExitStatus=255 10 | WorkingDirectory=/home/nornetpp/src/openairinterface5g/cmake_targets/ran_build/build 11 | 12 | [Install] 13 | WantedBy=multi-user.target 14 | -------------------------------------------------------------------------------- /tests/perform-osm-installation: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | 3 | export VERSION=14.0-fourteen 4 | 5 | sudo apt install -y cmake colordiff curl git joe python3-virtualenv snapd virtualenv yamllint 6 | 7 | 8 | echo "###### Installing OSM ################################################" 9 | cd ~ 10 | rm -f install_osm.sh 11 | wget https://osm-download.etsi.org/ftp/osm-${VERSION}/install_osm.sh 12 | chmod +x install_osm.sh 13 | ./install_osm.sh -y 2>&1 | tee osm_install_log.txt 14 | 15 | 16 | echo "###### Installing \"charm\" snap #####################################" 17 | sudo snap install charm --classic 18 | 19 | echo "###### Adding VIM #####################################################" 20 | ~/vim 21 | -------------------------------------------------------------------------------- /tests/add-k8s_monitoring: -------------------------------------------------------------------------------- 1 | #!/bin/bash -ex 2 | 3 | # Work-around for installation issue: 4 | # https://app.slack.com/client/TA2TL9TB2/CA6UEUSBT/thread/CA6UEUSBT-1644503663.275889 5 | 6 | 7 | # Clone the master branch of the OSM devops repo 8 | git clone http://osm.etsi.org/gerrit/osm/devops.git 9 | # Install the monitoring component 10 | devops/installers/k8s/install_osm_k8s_monitoring.sh 11 | 12 | # Update the OSM grafana configuration (name of a datasource) 13 | kubectl -n osm apply -f devops/installers/docker/osm_pods/grafana.yaml 14 | 15 | # Restart the grafana pod to take changes 16 | export GRAFANA_POD=$(kubectl get pods -n osm -l "app=grafana" -o jsonpath="{.items[0].metadata.name}") 17 | kubectl -n osm delete pod $GRAFANA_POD 18 | -------------------------------------------------------------------------------- /make-ssh-scripts: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | make-script () 4 | { 5 | local scriptName="$1" 6 | local coreName="$2" 7 | local deviceName="$3" 8 | local ip="$4" 9 | 10 | cat >${scriptName} < ${deviceName}" 31 | 32 | make-script ssh${coreName}${device} "Core #${coreNumber}" ${deviceName} ${ip} 33 | 34 | done 35 | let core=${core}+1 36 | done 37 | -------------------------------------------------------------------------------- /slicing/ran-sharing.json: -------------------------------------------------------------------------------- 1 | { 2 | "ul": { 3 | "algorithm": "Static", 4 | "slices": [ 5 | { 6 | "id": 0, 7 | "label": "default", 8 | "static": { 9 | "posLow": 1, 10 | "posHigh": 12 11 | } 12 | }, 13 | { 14 | "id": 2, 15 | "label": "two", 16 | "static": { 17 | "posLow": 13, 18 | "posHigh": 23 19 | } 20 | } 21 | ] 22 | }, 23 | "dl": { 24 | "algorithm": "Static", 25 | "slices": [ 26 | { 27 | "id": 0, 28 | "label": "default", 29 | "static": { 30 | "posLow": 0, 31 | "posHigh": 5 32 | } 33 | }, 34 | { 35 | "id": 2, 36 | "label": "two", 37 | "static": { 38 | "posLow": 6, 39 | "posHigh": 12 40 | } 41 | } 42 | ] 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /reset-SimulaMet-OAI-EPC-core: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | IP_HSS=10.132.13.200 4 | IP_MME=10.132.13.201 5 | IP_SPGWC=10.132.13.202 6 | IP_SPGWU=10.132.13.203 7 | IP_FLEXRAN=10.132.13.218 8 | 9 | # Reset HSS, MME, SPGW-C, SPGW-U, FlexRAN: 10 | echo "Stopping services ..." 11 | ssh nornetpp@${IP_HSS} sudo service hss stop & 12 | ssh nornetpp@${IP_MME} sudo service mme stop & 13 | ssh nornetpp@${IP_SPGWC} sudo service spgwc stop & 14 | ssh nornetpp@${IP_SPGWU} sudo service spgwu stop & 15 | ssh nornetpp@${IP_FLEXRAN} sudo service flexran stop & 16 | wait 17 | 18 | 19 | echo "Starting services ..." 20 | echo "HSS ..." 21 | ssh nornetpp@${IP_HSS} sudo service hss start 22 | sleep 10 23 | echo "MME ..." 24 | ssh nornetpp@${IP_MME} sudo service mme start 25 | sleep 10 26 | echo "SPGW-C ..." 27 | ssh nornetpp@${IP_SPGWC} sudo service spgwc start 28 | sleep 10 29 | echo "SPGW-U ..." 30 | ssh nornetpp@${IP_SPGWU} sudo service spgwu start 31 | sleep 10 32 | ssh nornetpp@${IP_SPGWU} sudo HENCSAT-QoS-Setup stop 33 | ssh nornetpp@${IP_SPGWU} sudo HENCSAT-QoS-Setup start 100000 0 0 0 34 | echo "FlexRAN ..." 35 | ssh nornetpp@${IP_FLEXRAN} sudo service flexran start 36 | 37 | echo "Done!" 38 | -------------------------------------------------------------------------------- /docs/SimCards.md: -------------------------------------------------------------------------------- 1 | = Software Simcard for the RAN Simulator = 2 | 3 | uicc0 = { 4 | imsi = "242881234500088"; 5 | key = "449c4b91aeacd0ace182cf3a5a72bfa1"; 6 | opc = "9245cd6283cc53ce24ac1186a60dee6b"; 7 | dnn = "oai"; 8 | nssai_sst = 1; 9 | # nssai_sd = 0; # Default: 0xffffff 10 | } 11 | 12 | = Universal simcard = 13 | 14 | == Simcard writer software == 15 | git clone https://gitea.osmocom.org/sim-card/pysim 16 | 17 | == Write data to simcard == 18 | OPERATOR="SimulaMet" 19 | IMSI=242881234500086 20 | ICCID=8924288123456000086 21 | KI=449c4b91aeacd0ace182cf3a5a72bfa1 22 | OPC=9245cd6283cc53ce24ac1186a60dee6b 23 | MCC=242 24 | MNC=88 25 | ACC=0002 26 | ADM_PIN=24376726 # !!! for card 999700000054252 !!! 27 | ./pySim-prog.py -p 0 -a ${ADM_PIN} \ 28 | -n "${OPERATOR}" -k ${KI} -o ${OPC} --acc ${ACC} \ 29 | -x ${MCC} -y ${MNC} -i ${IMSI} -s ${ICCID} \ 30 | --fplmn 24202 --fplmn 24201 \ 31 | --dry-run 32 | 33 | Note: --dry-run performs a test, *without writing*! To actually write to the card, remove --dry-run. 34 | 35 | ⚠Double-check the usage of the correct Admin PIN when writing a simcard! Using the wrong PIN multiple times will destory the simcard!⚠ 36 | -------------------------------------------------------------------------------- /tests/plot-count-osm-mon-collectors.R: -------------------------------------------------------------------------------- 1 | library("ggplot2") 2 | 3 | data <- read.table("osm-mon-collectors.data", col.names = c("Uptime","Count")) 4 | 5 | cairo_pdf("osm-mon-collectors.pdf", width=15, height=10, family="Helvetica", pointsize=22) 6 | 7 | p <- ggplot(data, 8 | aes(x = Uptime, 9 | y = Count) 10 | ) + 11 | geom_line(color="red", size=2) + 12 | theme(title = element_text(size=32), 13 | plot.title = element_text(size=20, hjust = 0.5, face="bold"), 14 | axis.title = element_text(size=20, face="bold"), 15 | strip.text = element_text(size=18, face="bold"), 16 | axis.text.x = element_text(size=16, angle=90, face="bold", colour="black"), 17 | axis.text.y = element_text(size=16, angle=90, hjust=0.5, colour="black"), 18 | legend.title = element_blank(), 19 | legend.text = element_text(size=18, face="bold"), 20 | legend.background = element_rect(colour = "blue", fill = "#ffffaa55", size=1), 21 | ) + 22 | labs(title = "Number of osm-mon-collector Processes", 23 | x = "Uptime [s]", 24 | y = "Number of osm-mon-collector Processes") 25 | print(p) 26 | 27 | dev.off() 28 | -------------------------------------------------------------------------------- /docs/eNB.md: -------------------------------------------------------------------------------- 1 | # Using the eNB 2 | 3 | ## Connectivity Check 4 | ``` 5 | ping 192.168.247.10 # MME -> eNodeB 6 | ping 192.168.248.10 # SPGW-U -> eNodeB 7 | ping 192.168.246.10 # FlexRAN Controller -> eNodeB 8 | 9 | ping -c1 192.168.247.102 # eNodeB -> MME 10 | ping -c1 192.168.248.159 # eNodeB -> SPGW-U 11 | ping -c1 192.168.246.100 # eNodeB -> FlexRAN Controller 12 | ``` 13 | 14 | 15 | ## Build 16 | 17 | ``` 18 | cd ~/src/openairinterface5g 19 | source oaienv 20 | ./cmake_targets/build_oai -w USRP -x -c --eNB --run-with-gdb RelWithDebInfo --build-doxygen --enable-deadline --enable-cpu-affinity 21 | 22 | ``` 23 | 24 | Options: 25 | * Use "-C" for a full cleanup first! 26 | * Use "-I" to install external packages (asn1c, etc.)! 27 | 28 | 29 | ## Debug Run (with GDB) 30 | 31 | ``` 32 | cd /home/nornetpp/src/openairinterface5g/cmake_targets/ran_build/build 33 | sudo nice -n -19 gdb ./lte-softmodem 34 | run -O /home/nornetpp/src/openairinterface5g/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf 35 | 36 | --T_stdout 0 37 | ``` 38 | 39 | 40 | ## Normal Run (without GDB) 41 | ``` 42 | cd /home/nornetpp/src/openairinterface5g/cmake_targets/ran_build/build 43 | sudo nice -n -19 ./lte-softmodem -O /home/nornetpp/src/openairinterface5g/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf 44 | ``` 45 | -------------------------------------------------------------------------------- /tests/metrics: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | 4 | # Random byte: 5 | od -A n -t d -N 1 /dev/urandom 6 | 7 | 8 | # Uptime in h: 9 | cat /proc/uptime | gawk '{ uptime_h=$1/3600.0 } END { print uptime_h }' 10 | 11 | # Users: 12 | who | wc -l 13 | 14 | # Processes: 15 | ps ax | wc -l 16 | 17 | # CPU load 1min/5min/15min: 18 | cat /proc/loadavg | gawk '{ load1min_pct=100.0*$1 } END { print load1min_pct }' 19 | cat /proc/loadavg | gawk '{ load5min_pct=100.0*$2 } END { print load5min_pct }' 20 | cat /proc/loadavg | gawk '{ load15min_pct=100.0*$3 } END { print load15min_pct }' 21 | 22 | # Memory usage in percent: 23 | cat /proc/meminfo | gawk '/^MemTotal:/ { total=$2 } /^MemAvailable:/ { available=$2 } END { print 100.0*(total-available)/total }' 24 | # Swap usage in percent: 25 | cat /proc/meminfo | gawk '/^SwapTotal:/ { total=$2 } /^SwapFree:/ { available=$2 } END { print 100.0*(total-available)/total }' 26 | 27 | # Disk usage for /: 28 | df / | tail -n1 | gawk '{ total=$2 ; used=$3 ; available=$4 ; print 100.0*(total-available)/total }' 29 | 30 | # Network for ens3: 31 | cat /proc/net/dev | gawk '/ens3:/ { inB=$2 ; inP=$3 ; outB=$10 ; outP=$11 ; print inB }' 32 | cat /proc/net/dev | gawk '/ens3:/ { inB=$2 ; inP=$3 ; outB=$10 ; outP=$11 ; print inP }' 33 | cat /proc/net/dev | gawk '/ens3:/ { inB=$2 ; inP=$3 ; outB=$10 ; outP=$11 ; print outB }' 34 | cat /proc/net/dev | gawk '/ens3:/ { inB=$2 ; inP=$3 ; outB=$10 ; outP=$11 ; print outP }' 35 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "devops"] 2 | path = devops 3 | url = https://osm.etsi.org/gerrit/osm/devops.git 4 | [submodule "baselayers/basic"] 5 | path = baselayers/basic 6 | url = https://github.com/juju-solutions/layer-basic.git 7 | [submodule "vmimage-builder-scripts"] 8 | path = vmimage-builder-scripts 9 | url = https://github.com/simula/nornet-vmimage-builder-scripts.git 10 | [submodule "juju/flexrancharm/mod/operator"] 11 | path = juju/flexrancharm/mod/operator 12 | url = https://github.com/canonical/operator 13 | [submodule "juju/hsscharm/mod/operator"] 14 | path = juju/hsscharm/mod/operator 15 | url = https://github.com/canonical/operator 16 | [submodule "juju/mmecharm/mod/operator"] 17 | path = juju/mmecharm/mod/operator 18 | url = https://github.com/canonical/operator 19 | [submodule "juju/spgwucharm/mod/operator"] 20 | path = juju/spgwucharm/mod/operator 21 | url = https://github.com/canonical/operator 22 | [submodule "juju/spgwccharm/mod/operator"] 23 | path = juju/spgwccharm/mod/operator 24 | url = https://github.com/canonical/operator 25 | [submodule "juju/p4sscharm/mod/operator"] 26 | path = juju/p4sscharm/mod/operator 27 | url = https://github.com/canonical/operator 28 | [submodule "juju/p4ovscharm/mod/operator"] 29 | path = juju/p4ovscharm/mod/operator 30 | url = https://github.com/canonical/operator 31 | [submodule "juju/oai5gdockercharm/mod/operator"] 32 | path = juju/oai5gdockercharm/mod/operator 33 | url = https://github.com/canonical/operator 34 | -------------------------------------------------------------------------------- /juju/p4sscharm/config.yaml: -------------------------------------------------------------------------------- 1 | # ===================================================================== 2 | # ####### ##### # # ### # # # # ### 3 | # # # # # # # ## # ## # # 4 | # # # # # # # # # # # # # 5 | # ##### # #### ##### # # # # # # # # # # 6 | # # # # # # # # # # # # # # 7 | # # # # # # # # # ## # ## # 8 | # ##### ##### # ### # # # # ### 9 | # ===================================================================== 10 | # 11 | # SimulaMet P4-SS VNF and NS 12 | # Copyright (C) 2021-2023 by Thomas Dreibholz 13 | # 14 | # This program is free software: you can redistribute it and/or modify 15 | # it under the terms of the GNU General Public License as published by 16 | # the Free Software Foundation, either version 3 of the License, or 17 | # (at your option) any later version. 18 | # 19 | # This program is distributed in the hope that it will be useful, 20 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | # GNU General Public License for more details. 23 | # 24 | # You should have received a copy of the GNU General Public License 25 | # along with this program. If not, see . 26 | # 27 | # Contact: dreibh@simula.no 28 | 29 | options: {} 30 | -------------------------------------------------------------------------------- /juju/flexrancharm/config.yaml: -------------------------------------------------------------------------------- 1 | # ===================================================================== 2 | # ####### ##### # # ### # # # # ### 3 | # # # # # # # ## # ## # # 4 | # # # # # # # # # # # # # 5 | # ##### # #### ##### # # # # # # # # # # 6 | # # # # # # # # # # # # # # 7 | # # # # # # # # # ## # ## # 8 | # ##### ##### # ### # # # # ### 9 | # ===================================================================== 10 | # 11 | # SimulaMet FlexRAN VNF and NS 12 | # Copyright (C) 2019-2023 by Thomas Dreibholz 13 | # 14 | # This program is free software: you can redistribute it and/or modify 15 | # it under the terms of the GNU General Public License as published by 16 | # the Free Software Foundation, either version 3 of the License, or 17 | # (at your option) any later version. 18 | # 19 | # This program is distributed in the hope that it will be useful, 20 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | # GNU General Public License for more details. 23 | # 24 | # You should have received a copy of the GNU General Public License 25 | # along with this program. If not, see . 26 | # 27 | # Contact: dreibh@simula.no 28 | 29 | options: {} 30 | -------------------------------------------------------------------------------- /juju/p4ovscharm/config.yaml: -------------------------------------------------------------------------------- 1 | # ===================================================================== 2 | # ####### ##### # # ### # # # # ### 3 | # # # # # # # ## # ## # # 4 | # # # # # # # # # # # # # 5 | # ##### # #### ##### # # # # # # # # # # 6 | # # # # # # # # # # # # # # 7 | # # # # # # # # # ## # ## # 8 | # ##### ##### # ### # # # # ### 9 | # ===================================================================== 10 | # 11 | # SimulaMet P4-OvS VNF and NS 12 | # Copyright (C) 2021-2023 by Thomas Dreibholz 13 | # 14 | # This program is free software: you can redistribute it and/or modify 15 | # it under the terms of the GNU General Public License as published by 16 | # the Free Software Foundation, either version 3 of the License, or 17 | # (at your option) any later version. 18 | # 19 | # This program is distributed in the hope that it will be useful, 20 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | # GNU General Public License for more details. 23 | # 24 | # You should have received a copy of the GNU General Public License 25 | # along with this program. If not, see . 26 | # 27 | # Contact: dreibh@simula.no 28 | 29 | options: {} 30 | -------------------------------------------------------------------------------- /juju/oai5gdockercharm/config.yaml: -------------------------------------------------------------------------------- 1 | # ===================================================================== 2 | # ####### ##### # # ### # # # # ### 3 | # # # # # # # ## # ## # # 4 | # # # # # # # # # # # # # 5 | # ##### # #### ##### # # # # # # # # # # 6 | # # # # # # # # # # # # # # 7 | # # # # # # # # # ## # ## # 8 | # ##### ##### # ### # # # # ### 9 | # ===================================================================== 10 | # 11 | # SimulaMet OAI 5G Docker VNF and NS 12 | # Copyright (C) 2019-2023 by Thomas Dreibholz 13 | # 14 | # This program is free software: you can redistribute it and/or modify 15 | # it under the terms of the GNU General Public License as published by 16 | # the Free Software Foundation, either version 3 of the License, or 17 | # (at your option) any later version. 18 | # 19 | # This program is distributed in the hope that it will be useful, 20 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | # GNU General Public License for more details. 23 | # 24 | # You should have received a copy of the GNU General Public License 25 | # along with this program. If not, see . 26 | # 27 | # Contact: dreibh@simula.no 28 | 29 | options: {} 30 | -------------------------------------------------------------------------------- /tests/5g-docker-compose/healthscripts/mysql-healthcheck2.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eo pipefail 3 | 4 | if [ "$MYSQL_ROOT_PASSWORD" ] && [ -z "$MYSQL_USER" ] && [ -z "$MYSQL_PASSWORD" ]; then 5 | echo >&2 'Healthcheck error: cannot determine root password (and MYSQL_USER and MYSQL_PASSWORD were not set)' 6 | exit 0 7 | fi 8 | 9 | host="$(hostname --ip-address || echo '127.0.0.1')" 10 | user="${MYSQL_USER:-root}" 11 | export MYSQL_PWD="${MYSQL_PASSWORD:-$MYSQL_ROOT_PASSWORD}" 12 | 13 | args=( 14 | # force mysql to not use the local "mysqld.sock" (test "external" connectivity) 15 | -h"$host" 16 | -u"$user" 17 | --silent 18 | ) 19 | 20 | STATUS=0 21 | if command -v mysqladmin &> /dev/null; then 22 | if mysqladmin "${args[@]}" ping > /dev/null; then 23 | database_check=$(mysql -u$user -D oai_db --silent -e "SELECT * FROM AuthenticationSubscription;") 24 | if [[ -z $database_check ]]; then 25 | echo "Healthcheck error: oai_db not populated" 26 | STATUS=1 27 | fi 28 | STATUS=0 29 | else 30 | echo "Healthcheck error: Mysql port inactive" 31 | STATUS=1 32 | fi 33 | else 34 | if select="$(echo 'SELECT 1' | mysql "${args[@]}")" && [ "$select" = '1' ]; then 35 | database_check=$(mysql -u$user -D oai_db --silent -e "SELECT * FROM AuthenticationSubscription;") 36 | if [[ -z $database_check ]]; then 37 | echo "Healthcheck error: oai_db not populated" 38 | STATUS=1 39 | fi 40 | STATUS=0 41 | else 42 | echo "Healthcheck error: Mysql port inactive" 43 | STATUS=1 44 | fi 45 | fi 46 | exit $STATUS 47 | -------------------------------------------------------------------------------- /juju/hsscharm/config.yaml: -------------------------------------------------------------------------------- 1 | # ===================================================================== 2 | # ####### ##### # # ### # # # # ### 3 | # # # # # # # ## # ## # # 4 | # # # # # # # # # # # # # 5 | # ##### # #### ##### # # # # # # # # # # 6 | # # # # # # # # # # # # # # 7 | # # # # # # # # # ## # ## # 8 | # ##### ##### # ### # # # # ### 9 | # ===================================================================== 10 | # 11 | # SimulaMet OpenAirInterface Evolved Packet Core VNF and NS 12 | # Copyright (C) 2019-2023 by Thomas Dreibholz 13 | # 14 | # This program is free software: you can redistribute it and/or modify 15 | # it under the terms of the GNU General Public License as published by 16 | # the Free Software Foundation, either version 3 of the License, or 17 | # (at your option) any later version. 18 | # 19 | # This program is distributed in the hope that it will be useful, 20 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | # GNU General Public License for more details. 23 | # 24 | # You should have received a copy of the GNU General Public License 25 | # along with this program. If not, see . 26 | # 27 | # Contact: dreibh@simula.no 28 | 29 | options: {} 30 | -------------------------------------------------------------------------------- /juju/mmecharm/config.yaml: -------------------------------------------------------------------------------- 1 | # ===================================================================== 2 | # ####### ##### # # ### # # # # ### 3 | # # # # # # # ## # ## # # 4 | # # # # # # # # # # # # # 5 | # ##### # #### ##### # # # # # # # # # # 6 | # # # # # # # # # # # # # # 7 | # # # # # # # # # ## # ## # 8 | # ##### ##### # ### # # # # ### 9 | # ===================================================================== 10 | # 11 | # SimulaMet OpenAirInterface Evolved Packet Core VNF and NS 12 | # Copyright (C) 2019-2023 by Thomas Dreibholz 13 | # 14 | # This program is free software: you can redistribute it and/or modify 15 | # it under the terms of the GNU General Public License as published by 16 | # the Free Software Foundation, either version 3 of the License, or 17 | # (at your option) any later version. 18 | # 19 | # This program is distributed in the hope that it will be useful, 20 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | # GNU General Public License for more details. 23 | # 24 | # You should have received a copy of the GNU General Public License 25 | # along with this program. If not, see . 26 | # 27 | # Contact: dreibh@simula.no 28 | 29 | options: {} 30 | -------------------------------------------------------------------------------- /juju/spgwccharm/config.yaml: -------------------------------------------------------------------------------- 1 | # ===================================================================== 2 | # ####### ##### # # ### # # # # ### 3 | # # # # # # # ## # ## # # 4 | # # # # # # # # # # # # # 5 | # ##### # #### ##### # # # # # # # # # # 6 | # # # # # # # # # # # # # # 7 | # # # # # # # # # ## # ## # 8 | # ##### ##### # ### # # # # ### 9 | # ===================================================================== 10 | # 11 | # SimulaMet OpenAirInterface Evolved Packet Core VNF and NS 12 | # Copyright (C) 2019-2023 by Thomas Dreibholz 13 | # 14 | # This program is free software: you can redistribute it and/or modify 15 | # it under the terms of the GNU General Public License as published by 16 | # the Free Software Foundation, either version 3 of the License, or 17 | # (at your option) any later version. 18 | # 19 | # This program is distributed in the hope that it will be useful, 20 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | # GNU General Public License for more details. 23 | # 24 | # You should have received a copy of the GNU General Public License 25 | # along with this program. If not, see . 26 | # 27 | # Contact: dreibh@simula.no 28 | 29 | options: {} 30 | -------------------------------------------------------------------------------- /juju/spgwucharm/config.yaml: -------------------------------------------------------------------------------- 1 | # ===================================================================== 2 | # ####### ##### # # ### # # # # ### 3 | # # # # # # # ## # ## # # 4 | # # # # # # # # # # # # # 5 | # ##### # #### ##### # # # # # # # # # # 6 | # # # # # # # # # # # # # # 7 | # # # # # # # # # ## # ## # 8 | # ##### ##### # ### # # # # ### 9 | # ===================================================================== 10 | # 11 | # SimulaMet OpenAirInterface Evolved Packet Core VNF and NS 12 | # Copyright (C) 2019-2023 by Thomas Dreibholz 13 | # 14 | # This program is free software: you can redistribute it and/or modify 15 | # it under the terms of the GNU General Public License as published by 16 | # the Free Software Foundation, either version 3 of the License, or 17 | # (at your option) any later version. 18 | # 19 | # This program is distributed in the hope that it will be useful, 20 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | # GNU General Public License for more details. 23 | # 24 | # You should have received a copy of the GNU General Public License 25 | # along with this program. If not, see . 26 | # 27 | # Contact: dreibh@simula.no 28 | 29 | options: {} 30 | -------------------------------------------------------------------------------- /juju/p4ovscharm/actions.yaml: -------------------------------------------------------------------------------- 1 | # ===================================================================== 2 | # ####### ##### # # ### # # # # ### 3 | # # # # # # # ## # ## # # 4 | # # # # # # # # # # # # # 5 | # ##### # #### ##### # # # # # # # # # # 6 | # # # # # # # # # # # # # # 7 | # # # # # # # # # ## # ## # 8 | # ##### ##### # ### # # # # ### 9 | # ===================================================================== 10 | # 11 | # SimulaMet P4-OvS VNF and NS 12 | # Copyright (C) 2021-2023 by Thomas Dreibholz 13 | # 14 | # This program is free software: you can redistribute it and/or modify 15 | # it under the terms of the GNU General Public License as published by 16 | # the Free Software Foundation, either version 3 of the License, or 17 | # (at your option) any later version. 18 | # 19 | # This program is distributed in the hope that it will be useful, 20 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | # GNU General Public License for more details. 23 | # 24 | # You should have received a copy of the GNU General Public License 25 | # along with this program. If not, see . 26 | # 27 | # Contact: dreibh@simula.no 28 | 29 | configure-p4ovs: 30 | description: Configures P4-OvS 31 | 32 | restart-p4ovs: 33 | description: Restarts P4-OvS 34 | -------------------------------------------------------------------------------- /juju/p4sscharm/metadata.yaml: -------------------------------------------------------------------------------- 1 | # ===================================================================== 2 | # ####### ##### # # ### # # # # ### 3 | # # # # # # # ## # ## # # 4 | # # # # # # # # # # # # # 5 | # ##### # #### ##### # # # # # # # # # # 6 | # # # # # # # # # # # # # # 7 | # # # # # # # # # ## # ## # 8 | # ##### ##### # ### # # # # ### 9 | # ===================================================================== 10 | # 11 | # SimulaMet P4-SS VNF and NS 12 | # Copyright (C) 2021-2023 by Thomas Dreibholz 13 | # 14 | # This program is free software: you can redistribute it and/or modify 15 | # it under the terms of the GNU General Public License as published by 16 | # the Free Software Foundation, either version 3 of the License, or 17 | # (at your option) any later version. 18 | # 19 | # This program is distributed in the hope that it will be useful, 20 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | # GNU General Public License for more details. 23 | # 24 | # You should have received a copy of the GNU General Public License 25 | # along with this program. If not, see . 26 | # 27 | # Contact: dreibh@simula.no 28 | 29 | name: p4sscharm 30 | display-name: p4sscharm 31 | summary: SimulaMet P4-SS Charm 32 | maintainer: Thomas Dreibholz 33 | description: | 34 | This charm manages P4-SS. 35 | tags: 36 | - network 37 | subordinate: false 38 | series: 39 | - focal 40 | - jammy 41 | -------------------------------------------------------------------------------- /juju/p4ovscharm/metadata.yaml: -------------------------------------------------------------------------------- 1 | # ===================================================================== 2 | # ####### ##### # # ### # # # # ### 3 | # # # # # # # ## # ## # # 4 | # # # # # # # # # # # # # 5 | # ##### # #### ##### # # # # # # # # # # 6 | # # # # # # # # # # # # # # 7 | # # # # # # # # # ## # ## # 8 | # ##### ##### # ### # # # # ### 9 | # ===================================================================== 10 | # 11 | # SimulaMet P4-OvS VNF and NS 12 | # Copyright (C) 2021-2023 by Thomas Dreibholz 13 | # 14 | # This program is free software: you can redistribute it and/or modify 15 | # it under the terms of the GNU General Public License as published by 16 | # the Free Software Foundation, either version 3 of the License, or 17 | # (at your option) any later version. 18 | # 19 | # This program is distributed in the hope that it will be useful, 20 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | # GNU General Public License for more details. 23 | # 24 | # You should have received a copy of the GNU General Public License 25 | # along with this program. If not, see . 26 | # 27 | # Contact: dreibh@simula.no 28 | 29 | name: p4ovscharm 30 | display-name: p4ovscharm 31 | summary: SimulaMet P4-OvS Charm 32 | maintainer: Thomas Dreibholz 33 | description: | 34 | This charm manages P4-OvS. 35 | tags: 36 | - network 37 | subordinate: false 38 | series: 39 | - focal 40 | - jammy 41 | -------------------------------------------------------------------------------- /SimulaMet-OAI-HSS_vnfd/cloud_init/hss-init: -------------------------------------------------------------------------------- 1 | #cloud-config 2 | # ===================================================================== 3 | # ####### ##### # # ### # # # # ### 4 | # # # # # # # ## # ## # # 5 | # # # # # # # # # # # # # 6 | # ##### # #### ##### # # # # # # # # # # 7 | # # # # # # # # # # # # # # 8 | # # # # # # # # # ## # ## # 9 | # ##### ##### # ### # # # # ### 10 | # ===================================================================== 11 | # 12 | # SimulaMet OpenAirInterface Evolved Packet Core VNF and NS 13 | # Copyright (C) 2019-2023 by Thomas Dreibholz 14 | # 15 | # This program is free software: you can redistribute it and/or modify 16 | # it under the terms of the GNU General Public License as published by 17 | # the Free Software Foundation, either version 3 of the License, or 18 | # (at your option) any later version. 19 | # 20 | # This program is distributed in the hope that it will be useful, 21 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 22 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 23 | # GNU General Public License for more details. 24 | # 25 | # You should have received a copy of the GNU General Public License 26 | # along with this program. If not, see . 27 | # 28 | # Contact: dreibh@simula.no 29 | 30 | hostname: hss 31 | manage_etc_hosts: localhost 32 | password: {{password}} 33 | chpasswd: {expire: False} 34 | ssh_pwauth: True 35 | system_info: 36 | default_user: 37 | name: ubuntu 38 | sudo: ALL=(ALL) NOPASSWD:ALL 39 | -------------------------------------------------------------------------------- /SimulaMet-OAI-MME_vnfd/cloud_init/mme-init: -------------------------------------------------------------------------------- 1 | #cloud-config 2 | # ===================================================================== 3 | # ####### ##### # # ### # # # # ### 4 | # # # # # # # ## # ## # # 5 | # # # # # # # # # # # # # 6 | # ##### # #### ##### # # # # # # # # # # 7 | # # # # # # # # # # # # # # 8 | # # # # # # # # # ## # ## # 9 | # ##### ##### # ### # # # # ### 10 | # ===================================================================== 11 | # 12 | # SimulaMet OpenAirInterface Evolved Packet Core VNF and NS 13 | # Copyright (C) 2019-2023 by Thomas Dreibholz 14 | # 15 | # This program is free software: you can redistribute it and/or modify 16 | # it under the terms of the GNU General Public License as published by 17 | # the Free Software Foundation, either version 3 of the License, or 18 | # (at your option) any later version. 19 | # 20 | # This program is distributed in the hope that it will be useful, 21 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 22 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 23 | # GNU General Public License for more details. 24 | # 25 | # You should have received a copy of the GNU General Public License 26 | # along with this program. If not, see . 27 | # 28 | # Contact: dreibh@simula.no 29 | 30 | hostname: mme 31 | manage_etc_hosts: localhost 32 | password: {{password}} 33 | chpasswd: {expire: False} 34 | ssh_pwauth: True 35 | system_info: 36 | default_user: 37 | name: ubuntu 38 | sudo: ALL=(ALL) NOPASSWD:ALL 39 | -------------------------------------------------------------------------------- /SimulaMet-FlexRAN_vnfd/cloud_init/flexran-init: -------------------------------------------------------------------------------- 1 | #cloud-config 2 | # ===================================================================== 3 | # ####### ##### # # ### # # # # ### 4 | # # # # # # # ## # ## # # 5 | # # # # # # # # # # # # # 6 | # ##### # #### ##### # # # # # # # # # # 7 | # # # # # # # # # # # # # # 8 | # # # # # # # # # ## # ## # 9 | # ##### ##### # ### # # # # ### 10 | # ===================================================================== 11 | # 12 | # SimulaMet OpenAirInterface Evolved Packet Core VNF and NS 13 | # Copyright (C) 2019-2023 by Thomas Dreibholz 14 | # 15 | # This program is free software: you can redistribute it and/or modify 16 | # it under the terms of the GNU General Public License as published by 17 | # the Free Software Foundation, either version 3 of the License, or 18 | # (at your option) any later version. 19 | # 20 | # This program is distributed in the hope that it will be useful, 21 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 22 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 23 | # GNU General Public License for more details. 24 | # 25 | # You should have received a copy of the GNU General Public License 26 | # along with this program. If not, see . 27 | # 28 | # Contact: dreibh@simula.no 29 | 30 | hostname: flexran 31 | manage_etc_hosts: localhost 32 | password: {{password}} 33 | chpasswd: {expire: False} 34 | ssh_pwauth: True 35 | system_info: 36 | default_user: 37 | name: ubuntu 38 | sudo: ALL=(ALL) NOPASSWD:ALL 39 | -------------------------------------------------------------------------------- /SimulaMet-OAI-SPGW-C_vnfd/cloud_init/spgwc-init: -------------------------------------------------------------------------------- 1 | #cloud-config 2 | # ===================================================================== 3 | # ####### ##### # # ### # # # # ### 4 | # # # # # # # ## # ## # # 5 | # # # # # # # # # # # # # 6 | # ##### # #### ##### # # # # # # # # # # 7 | # # # # # # # # # # # # # # 8 | # # # # # # # # # ## # ## # 9 | # ##### ##### # ### # # # # ### 10 | # ===================================================================== 11 | # 12 | # SimulaMet OpenAirInterface Evolved Packet Core VNF and NS 13 | # Copyright (C) 2019-2023 by Thomas Dreibholz 14 | # 15 | # This program is free software: you can redistribute it and/or modify 16 | # it under the terms of the GNU General Public License as published by 17 | # the Free Software Foundation, either version 3 of the License, or 18 | # (at your option) any later version. 19 | # 20 | # This program is distributed in the hope that it will be useful, 21 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 22 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 23 | # GNU General Public License for more details. 24 | # 25 | # You should have received a copy of the GNU General Public License 26 | # along with this program. If not, see . 27 | # 28 | # Contact: dreibh@simula.no 29 | 30 | hostname: spgw-c 31 | manage_etc_hosts: localhost 32 | password: {{password}} 33 | chpasswd: {expire: False} 34 | ssh_pwauth: True 35 | system_info: 36 | default_user: 37 | name: ubuntu 38 | sudo: ALL=(ALL) NOPASSWD:ALL 39 | -------------------------------------------------------------------------------- /SimulaMet-OAI-SPGW-U_vnfd/cloud_init/spgwu-init: -------------------------------------------------------------------------------- 1 | #cloud-config 2 | # ===================================================================== 3 | # ####### ##### # # ### # # # # ### 4 | # # # # # # # ## # ## # # 5 | # # # # # # # # # # # # # 6 | # ##### # #### ##### # # # # # # # # # # 7 | # # # # # # # # # # # # # # 8 | # # # # # # # # # ## # ## # 9 | # ##### ##### # ### # # # # ### 10 | # ===================================================================== 11 | # 12 | # SimulaMet OpenAirInterface Evolved Packet Core VNF and NS 13 | # Copyright (C) 2019-2023 by Thomas Dreibholz 14 | # 15 | # This program is free software: you can redistribute it and/or modify 16 | # it under the terms of the GNU General Public License as published by 17 | # the Free Software Foundation, either version 3 of the License, or 18 | # (at your option) any later version. 19 | # 20 | # This program is distributed in the hope that it will be useful, 21 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 22 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 23 | # GNU General Public License for more details. 24 | # 25 | # You should have received a copy of the GNU General Public License 26 | # along with this program. If not, see . 27 | # 28 | # Contact: dreibh@simula.no 29 | 30 | hostname: spgw-u 31 | manage_etc_hosts: localhost 32 | password: {{password}} 33 | chpasswd: {expire: False} 34 | ssh_pwauth: True 35 | system_info: 36 | default_user: 37 | name: ubuntu 38 | sudo: ALL=(ALL) NOPASSWD:ALL 39 | -------------------------------------------------------------------------------- /SimulaMet-P4-SS_vnfd/cloud_init/p4ss-init: -------------------------------------------------------------------------------- 1 | #cloud-config 2 | # ===================================================================== 3 | # ####### ##### # # ### # # # # ### 4 | # # # # # # # ## # ## # # 5 | # # # # # # # # # # # # # 6 | # ##### # #### ##### # # # # # # # # # # 7 | # # # # # # # # # # # # # # 8 | # # # # # # # # # ## # ## # 9 | # ##### ##### # ### # # # # ### 10 | # ===================================================================== 11 | # 12 | # SimulaMet OpenAirInterface Evolved Packet Core VNF and NS 13 | # Copyright (C) 2019-2021 by Thomas Dreibholz 14 | # 15 | # This program is free software: you can redistribute it and/or modify 16 | # it under the terms of the GNU General Public License as published by 17 | # the Free Software Foundation, either version 3 of the License, or 18 | # (at your option) any later version. 19 | # 20 | # This program is distributed in the hope that it will be useful, 21 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 22 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 23 | # GNU General Public License for more details. 24 | # 25 | # You should have received a copy of the GNU General Public License 26 | # along with this program. If not, see . 27 | # 28 | # Contact: dreibh@simula.no 29 | 30 | hostname: {{hostname}} 31 | manage_etc_hosts: localhost 32 | password: {{password}} 33 | chpasswd: {expire: False} 34 | ssh_pwauth: True 35 | system_info: 36 | default_user: 37 | name: ubuntu 38 | sudo: ALL=(ALL) NOPASSWD:ALL 39 | -------------------------------------------------------------------------------- /juju/flexrancharm/metadata.yaml: -------------------------------------------------------------------------------- 1 | # ===================================================================== 2 | # ####### ##### # # ### # # # # ### 3 | # # # # # # # ## # ## # # 4 | # # # # # # # # # # # # # 5 | # ##### # #### ##### # # # # # # # # # # 6 | # # # # # # # # # # # # # # 7 | # # # # # # # # # ## # ## # 8 | # ##### ##### # ### # # # # ### 9 | # ===================================================================== 10 | # 11 | # SimulaMet FlexRAN VNF and NS 12 | # Copyright (C) 2019-2023 by Thomas Dreibholz 13 | # 14 | # This program is free software: you can redistribute it and/or modify 15 | # it under the terms of the GNU General Public License as published by 16 | # the Free Software Foundation, either version 3 of the License, or 17 | # (at your option) any later version. 18 | # 19 | # This program is distributed in the hope that it will be useful, 20 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | # GNU General Public License for more details. 23 | # 24 | # You should have received a copy of the GNU General Public License 25 | # along with this program. If not, see . 26 | # 27 | # Contact: dreibh@simula.no 28 | 29 | name: flexrancharm 30 | display-name: flexrancharm 31 | summary: SimulaMet FlexRAN Charm 32 | maintainer: Thomas Dreibholz 33 | description: | 34 | This charm manages FlexRAN. 35 | tags: 36 | - network 37 | subordinate: false 38 | series: 39 | - jammy 40 | - focal 41 | -------------------------------------------------------------------------------- /SimulaMet-OAI-5G-Docker_vnfd/cloud_init/oai5gdocker-init: -------------------------------------------------------------------------------- 1 | #cloud-config 2 | # ===================================================================== 3 | # ####### ##### # # ### # # # # ### 4 | # # # # # # # ## # ## # # 5 | # # # # # # # # # # # # # 6 | # ##### # #### ##### # # # # # # # # # # 7 | # # # # # # # # # # # # # # 8 | # # # # # # # # # ## # ## # 9 | # ##### ##### # ### # # # # ### 10 | # ===================================================================== 11 | # 12 | # SimulaMet OpenAirInterface Evolved Packet Core VNF and NS 13 | # Copyright (C) 2019-2021 by Thomas Dreibholz 14 | # 15 | # This program is free software: you can redistribute it and/or modify 16 | # it under the terms of the GNU General Public License as published by 17 | # the Free Software Foundation, either version 3 of the License, or 18 | # (at your option) any later version. 19 | # 20 | # This program is distributed in the hope that it will be useful, 21 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 22 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 23 | # GNU General Public License for more details. 24 | # 25 | # You should have received a copy of the GNU General Public License 26 | # along with this program. If not, see . 27 | # 28 | # Contact: dreibh@simula.no 29 | 30 | hostname: oai5gdocker 31 | manage_etc_hosts: localhost 32 | password: {{password}} 33 | chpasswd: {expire: False} 34 | ssh_pwauth: True 35 | system_info: 36 | default_user: 37 | name: ubuntu 38 | sudo: ALL=(ALL) NOPASSWD:ALL 39 | -------------------------------------------------------------------------------- /juju/hsscharm/metadata.yaml: -------------------------------------------------------------------------------- 1 | # ===================================================================== 2 | # ####### ##### # # ### # # # # ### 3 | # # # # # # # ## # ## # # 4 | # # # # # # # # # # # # # 5 | # ##### # #### ##### # # # # # # # # # # 6 | # # # # # # # # # # # # # # 7 | # # # # # # # # # ## # ## # 8 | # ##### ##### # ### # # # # ### 9 | # ===================================================================== 10 | # 11 | # SimulaMet OpenAirInterface Evolved Packet Core VNF and NS 12 | # Copyright (C) 2019-2023 by Thomas Dreibholz 13 | # 14 | # This program is free software: you can redistribute it and/or modify 15 | # it under the terms of the GNU General Public License as published by 16 | # the Free Software Foundation, either version 3 of the License, or 17 | # (at your option) any later version. 18 | # 19 | # This program is distributed in the hope that it will be useful, 20 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | # GNU General Public License for more details. 23 | # 24 | # You should have received a copy of the GNU General Public License 25 | # along with this program. If not, see . 26 | # 27 | # Contact: dreibh@simula.no 28 | 29 | name: hsscharm 30 | display-name: hsscharm 31 | summary: SimulaMet-OAI HSS Charm 32 | maintainer: Thomas Dreibholz 33 | description: | 34 | This charm manages the HSS. 35 | tags: 36 | - network 37 | subordinate: false 38 | series: 39 | - focal 40 | - jammy 41 | -------------------------------------------------------------------------------- /juju/mmecharm/metadata.yaml: -------------------------------------------------------------------------------- 1 | # ===================================================================== 2 | # ####### ##### # # ### # # # # ### 3 | # # # # # # # ## # ## # # 4 | # # # # # # # # # # # # # 5 | # ##### # #### ##### # # # # # # # # # # 6 | # # # # # # # # # # # # # # 7 | # # # # # # # # # ## # ## # 8 | # ##### ##### # ### # # # # ### 9 | # ===================================================================== 10 | # 11 | # SimulaMet OpenAirInterface Evolved Packet Core VNF and NS 12 | # Copyright (C) 2019-2023 by Thomas Dreibholz 13 | # 14 | # This program is free software: you can redistribute it and/or modify 15 | # it under the terms of the GNU General Public License as published by 16 | # the Free Software Foundation, either version 3 of the License, or 17 | # (at your option) any later version. 18 | # 19 | # This program is distributed in the hope that it will be useful, 20 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | # GNU General Public License for more details. 23 | # 24 | # You should have received a copy of the GNU General Public License 25 | # along with this program. If not, see . 26 | # 27 | # Contact: dreibh@simula.no 28 | 29 | name: mmecharm 30 | display-name: mmecharm 31 | summary: SimulaMet-OAI MME Charm 32 | maintainer: Thomas Dreibholz 33 | description: | 34 | This charm manages the MME. 35 | tags: 36 | - network 37 | subordinate: false 38 | series: 39 | - focal 40 | - jammy 41 | -------------------------------------------------------------------------------- /Work-in-Progress/SimulaMet-P4-OvS_vnfd/cloud_init/p4ovs-init: -------------------------------------------------------------------------------- 1 | #cloud-config 2 | # ===================================================================== 3 | # ####### ##### # # ### # # # # ### 4 | # # # # # # # ## # ## # # 5 | # # # # # # # # # # # # # 6 | # ##### # #### ##### # # # # # # # # # # 7 | # # # # # # # # # # # # # # 8 | # # # # # # # # # ## # ## # 9 | # ##### ##### # ### # # # # ### 10 | # ===================================================================== 11 | # 12 | # SimulaMet OpenAirInterface Evolved Packet Core VNF and NS 13 | # Copyright (C) 2019-2023 by Thomas Dreibholz 14 | # 15 | # This program is free software: you can redistribute it and/or modify 16 | # it under the terms of the GNU General Public License as published by 17 | # the Free Software Foundation, either version 3 of the License, or 18 | # (at your option) any later version. 19 | # 20 | # This program is distributed in the hope that it will be useful, 21 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 22 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 23 | # GNU General Public License for more details. 24 | # 25 | # You should have received a copy of the GNU General Public License 26 | # along with this program. If not, see . 27 | # 28 | # Contact: dreibh@simula.no 29 | 30 | hostname: {{hostname}} 31 | manage_etc_hosts: localhost 32 | password: {{password}} 33 | chpasswd: {expire: False} 34 | ssh_pwauth: True 35 | system_info: 36 | default_user: 37 | name: nornetpp 38 | sudo: ALL=(ALL) NOPASSWD:ALL 39 | -------------------------------------------------------------------------------- /juju/oai5gdockercharm/metadata.yaml: -------------------------------------------------------------------------------- 1 | # ===================================================================== 2 | # ####### ##### # # ### # # # # ### 3 | # # # # # # # ## # ## # # 4 | # # # # # # # # # # # # # 5 | # ##### # #### ##### # # # # # # # # # # 6 | # # # # # # # # # # # # # # 7 | # # # # # # # # # ## # ## # 8 | # ##### ##### # ### # # # # ### 9 | # ===================================================================== 10 | # 11 | # SimulaMet OAI 5G Docker VNF and NS 12 | # Copyright (C) 2019-2023 by Thomas Dreibholz 13 | # 14 | # This program is free software: you can redistribute it and/or modify 15 | # it under the terms of the GNU General Public License as published by 16 | # the Free Software Foundation, either version 3 of the License, or 17 | # (at your option) any later version. 18 | # 19 | # This program is distributed in the hope that it will be useful, 20 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | # GNU General Public License for more details. 23 | # 24 | # You should have received a copy of the GNU General Public License 25 | # along with this program. If not, see . 26 | # 27 | # Contact: dreibh@simula.no 28 | 29 | name: oai5gdockercharm 30 | display-name: oai5gdockercharm 31 | summary: SimulaMet OAI 5G Docker Charm 32 | maintainer: Thomas Dreibholz 33 | description: | 34 | This charm manages OAI 5G Docker. 35 | tags: 36 | - network 37 | subordinate: false 38 | series: 39 | - jammy 40 | - focal 41 | -------------------------------------------------------------------------------- /juju/spgwccharm/metadata.yaml: -------------------------------------------------------------------------------- 1 | # ===================================================================== 2 | # ####### ##### # # ### # # # # ### 3 | # # # # # # # ## # ## # # 4 | # # # # # # # # # # # # # 5 | # ##### # #### ##### # # # # # # # # # # 6 | # # # # # # # # # # # # # # 7 | # # # # # # # # # ## # ## # 8 | # ##### ##### # ### # # # # ### 9 | # ===================================================================== 10 | # 11 | # SimulaMet OpenAirInterface Evolved Packet Core VNF and NS 12 | # Copyright (C) 2019-2023 by Thomas Dreibholz 13 | # 14 | # This program is free software: you can redistribute it and/or modify 15 | # it under the terms of the GNU General Public License as published by 16 | # the Free Software Foundation, either version 3 of the License, or 17 | # (at your option) any later version. 18 | # 19 | # This program is distributed in the hope that it will be useful, 20 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | # GNU General Public License for more details. 23 | # 24 | # You should have received a copy of the GNU General Public License 25 | # along with this program. If not, see . 26 | # 27 | # Contact: dreibh@simula.no 28 | 29 | name: spgwccharm 30 | display-name: spgwccharm 31 | summary: SimulaMet-OAI SPGW-C Charm 32 | maintainer: Thomas Dreibholz 33 | description: | 34 | This charm manages the SPGW-C. 35 | tags: 36 | - network 37 | subordinate: false 38 | series: 39 | - focal 40 | - jammy 41 | -------------------------------------------------------------------------------- /juju/spgwucharm/metadata.yaml: -------------------------------------------------------------------------------- 1 | # ===================================================================== 2 | # ####### ##### # # ### # # # # ### 3 | # # # # # # # ## # ## # # 4 | # # # # # # # # # # # # # 5 | # ##### # #### ##### # # # # # # # # # # 6 | # # # # # # # # # # # # # # 7 | # # # # # # # # # ## # ## # 8 | # ##### ##### # ### # # # # ### 9 | # ===================================================================== 10 | # 11 | # SimulaMet OpenAirInterface Evolved Packet Core VNF and NS 12 | # Copyright (C) 2019-2023 by Thomas Dreibholz 13 | # 14 | # This program is free software: you can redistribute it and/or modify 15 | # it under the terms of the GNU General Public License as published by 16 | # the Free Software Foundation, either version 3 of the License, or 17 | # (at your option) any later version. 18 | # 19 | # This program is distributed in the hope that it will be useful, 20 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | # GNU General Public License for more details. 23 | # 24 | # You should have received a copy of the GNU General Public License 25 | # along with this program. If not, see . 26 | # 27 | # Contact: dreibh@simula.no 28 | 29 | name: spgwucharm 30 | display-name: spgwucharm 31 | summary: SimulaMet-OAI SPGW-U Charm 32 | maintainer: Thomas Dreibholz 33 | description: | 34 | This charm manages the SPGW-U. 35 | tags: 36 | - network 37 | subordinate: false 38 | series: 39 | - focal 40 | - jammy 41 | -------------------------------------------------------------------------------- /slicing/get-stats: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | # ===================================================================== 3 | # ####### ##### # # ### # # # # ### 4 | # # # # # # # ## # ## # # 5 | # # # # # # # # # # # # # 6 | # ##### # #### ##### # # # # # # # # # # 7 | # # # # # # # # # # # # # # 8 | # # # # # # # # # ## # ## # 9 | # ##### ##### # ### # # # # ### 10 | # ===================================================================== 11 | # 12 | # SimulaMet OpenAirInterface Evolved Packet Core VNF and NS 13 | # Copyright (C) 2019-2023 by Thomas Dreibholz 14 | # 15 | # This program is free software: you can redistribute it and/or modify 16 | # it under the terms of the GNU General Public License as published by 17 | # the Free Software Foundation, either version 3 of the License, or 18 | # (at your option) any later version. 19 | # 20 | # This program is distributed in the hope that it will be useful, 21 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 22 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 23 | # GNU General Public License for more details. 24 | # 25 | # You should have received a copy of the GNU General Public License 26 | # along with this program. If not, see . 27 | # 28 | # Contact: dreibh@simula.no 29 | 30 | # Documentation: 31 | # * https://gitlab.eurecom.fr/mosaic5g/mosaic5g/-/wikis/tutorials/slicing 32 | # * http://mosaic-5g.io/apidocs/flexran/#api-SliceConfiguration-ApplySliceConfiguration 33 | 34 | FLEXRAN_CONTROLLER=192.168.246.100 35 | 36 | curl -X GET http://${FLEXRAN_CONTROLLER}:9999/stats/enb/-1/ | jq . 37 | -------------------------------------------------------------------------------- /slicing/apply-scheduler-configuration: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | # ===================================================================== 3 | # ####### ##### # # ### # # # # ### 4 | # # # # # # # ## # ## # # 5 | # # # # # # # # # # # # # 6 | # ##### # #### ##### # # # # # # # # # # 7 | # # # # # # # # # # # # # # 8 | # # # # # # # # # ## # ## # 9 | # ##### ##### # ### # # # # ### 10 | # ===================================================================== 11 | # 12 | # SimulaMet OpenAirInterface Evolved Packet Core VNF and NS 13 | # Copyright (C) 2019-2023 by Thomas Dreibholz 14 | # 15 | # This program is free software: you can redistribute it and/or modify 16 | # it under the terms of the GNU General Public License as published by 17 | # the Free Software Foundation, either version 3 of the License, or 18 | # (at your option) any later version. 19 | # 20 | # This program is distributed in the hope that it will be useful, 21 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 22 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 23 | # GNU General Public License for more details. 24 | # 25 | # You should have received a copy of the GNU General Public License 26 | # along with this program. If not, see . 27 | # 28 | # Contact: dreibh@simula.no 29 | 30 | # Documentation: 31 | # * https://gitlab.eurecom.fr/mosaic5g/mosaic5g/-/wikis/tutorials/slicing 32 | # * http://mosaic-5g.io/apidocs/flexran/#api-SliceConfiguration-ApplySliceConfiguration 33 | 34 | FLEXRAN_CONTROLLER=192.168.246.100 35 | 36 | curl -X POST http://${FLEXRAN_CONTROLLER}:9999/slice/enb/-1 \ 37 | --data-binary @ran-sharing.json 38 | -------------------------------------------------------------------------------- /slicing/apply-ue-slice-associations: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | # ===================================================================== 3 | # ####### ##### # # ### # # # # ### 4 | # # # # # # # ## # ## # # 5 | # # # # # # # # # # # # # 6 | # ##### # #### ##### # # # # # # # # # # 7 | # # # # # # # # # # # # # # 8 | # # # # # # # # # ## # ## # 9 | # ##### ##### # ### # # # # ### 10 | # ===================================================================== 11 | # 12 | # SimulaMet OpenAirInterface Evolved Packet Core VNF and NS 13 | # Copyright (C) 2019-2023 by Thomas Dreibholz 14 | # 15 | # This program is free software: you can redistribute it and/or modify 16 | # it under the terms of the GNU General Public License as published by 17 | # the Free Software Foundation, either version 3 of the License, or 18 | # (at your option) any later version. 19 | # 20 | # This program is distributed in the hope that it will be useful, 21 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 22 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 23 | # GNU General Public License for more details. 24 | # 25 | # You should have received a copy of the GNU General Public License 26 | # along with this program. If not, see . 27 | # 28 | # Contact: dreibh@simula.no 29 | 30 | # Documentation: 31 | # * https://gitlab.eurecom.fr/mosaic5g/mosaic5g/-/wikis/tutorials/slicing 32 | # * http://mosaic-5g.io/apidocs/flexran/#api-SliceConfiguration-ApplySliceConfiguration 33 | 34 | FLEXRAN_CONTROLLER=192.168.246.100 35 | 36 | curl -X POST http://${FLEXRAN_CONTROLLER}:9999/ue_slice_assoc/enb/ \ 37 | --data-binary @ue-association.json 38 | -------------------------------------------------------------------------------- /evaluation/get-flexran-info: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | # ===================================================================== 3 | # ####### ##### # # ### # # # # ### 4 | # # # # # # # ## # ## # # 5 | # # # # # # # # # # # # # 6 | # ##### # #### ##### # # # # # # # # # # 7 | # # # # # # # # # # # # # # 8 | # # # # # # # # # ## # ## # 9 | # ##### ##### # ### # # # # ### 10 | # ===================================================================== 11 | # 12 | # SimulaMet OpenAirInterface Evolved Packet Core VNF and NS 13 | # Copyright (C) 2019-2023 by Thomas Dreibholz 14 | # 15 | # This program is free software: you can redistribute it and/or modify 16 | # it under the terms of the GNU General Public License as published by 17 | # the Free Software Foundation, either version 3 of the License, or 18 | # (at your option) any later version. 19 | # 20 | # This program is distributed in the hope that it will be useful, 21 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 22 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 23 | # GNU General Public License for more details. 24 | # 25 | # You should have received a copy of the GNU General Public License 26 | # along with this program. If not, see . 27 | # 28 | # Contact: dreibh@simula.no 29 | 30 | PREFIX="$1" 31 | if [ "$PREFIX" == "" ] ; then 32 | PREFIX="/tmp/flexran" 33 | fi 34 | FLEXRAN_CONTROLLER="127.0.0.1" 35 | 36 | i=0 37 | while [ true ] ; do 38 | jsonFile=`printf "%s-%04i.json.xz" "$PREFIX" $i` 39 | curl -X GET http://${FLEXRAN_CONTROLLER}:9999/stats/enb/-1/ | jq . | xz -T0 -c >${jsonFile} || true 40 | sleep 1 41 | let i=$i+1 42 | done 43 | -------------------------------------------------------------------------------- /README: -------------------------------------------------------------------------------- 1 | ==== Install development tools ==== 2 | 3 | Run tests/perform-osm-installation script! 4 | 5 | 6 | ==== Create instances ==== 7 | 8 | ------ Core #1 ------- 9 | 10 | ./create-instance Core1-SimulaMet-OAI-EPC.yaml 11 | ./create-instance Core1-SimulaMet-FlexRAN.yaml 12 | 13 | Helper scripts: 14 | * sshA1 ... sshA4 for SSH to HSS, MME, SPGW-C and SPGW-U of Core #4 15 | * sshF for SSH to FlexRAN Controller 16 | 17 | ------ Core #2 ------- 18 | 19 | TBD. 20 | 21 | ------ Core #4 ------- 22 | 23 | ./create-instance Core4-SimulaMet-OAI-EPC.yaml 24 | ./create-instance Core4-SimulaMet-FlexRAN.yaml 25 | 26 | Helper scripts: 27 | * sshD1 ... sshD4 for SSH to HSS, MME, SPGW-C and SPGW-U of Core #4 28 | 29 | 30 | ==== If something goes wrong: debugging commands ==== 31 | 32 | * Watch Juju status: 33 | 34 | watch -n 5 --color juju status --color 35 | 36 | * Simple check for failed Juju actions: 37 | 38 | ./show-failed-juju-actions 39 | 40 | * Get Juju status: 41 | 42 | juju status 43 | 44 | * SSH into Juju container of VDU: 45 | 46 | juju ssh 47 | 48 | Unit is from "juju status". 49 | /var/log/juju/unit-* is the log file of the Charm. 50 | 51 | * Get output of Juju actions: 52 | 53 | juju show-action-status 54 | 55 | juju show-action-output 56 | 57 | ID is from "juju show-action-status". 58 | The output contains the "message" of function_fail(), as well as stdout and stderr! 59 | 60 | * If Juju fails to destroy the Juju model, blocking removal of a NS: 61 | 62 | juju list-models 63 | 64 | juju destroy-model --force -y 65 | 66 | Important: --force may be necessary of NS removal is blocking due to problems removing the Juju model. 67 | 68 | # Acknowledgment 69 | 70 | This research was conducted as part of the “Raksha: 5G Security for Critical Communications” project, funded by the Research Council of Norway under the "IKTPLUSS-IKT og digital innovasjon" program (grant agreement No. 312122), https://prosjektbanken.forskningsradet.no/en/project/FORISS/312122 71 | 72 | -------------------------------------------------------------------------------- /evaluation/tshark-xz: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # 3 | # Launch T-Shark with on-the-fly XZ compression via FIFO pipe 4 | # Copyright (C) 2019-2023 by Thomas Dreibholz 5 | # 6 | # This program is free software: you can redistribute it and/or modify 7 | # it under the terms of the GNU General Public License as published by 8 | # the Free Software Foundation, either version 3 of the License, or 9 | # (at your option) any later version. 10 | # 11 | # This program is distributed in the hope that it will be useful, 12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | # GNU General Public License for more details. 15 | # 16 | # You should have received a copy of the GNU General Public License 17 | # along with this program. If not, see . 18 | # 19 | # Contact: dreibh@simula.no 20 | 21 | # Initial idea based on: 22 | # https://stackoverflow.com/questions/50489159/write-tcpdump-output-to-compressed-gziped-file 23 | 24 | 25 | set -e 26 | 27 | # ====== Handle arguments =================================================== 28 | if [ $# -lt 1 ] ; then 29 | echo >&2 "Usage: $0 output.pcapng.xz [TShark_argument ...]" 30 | exit 1 31 | fi 32 | PCAP="$1" 33 | FIFO="${PCAP}.fifo" 34 | shift 35 | 36 | tcpdump_pid= 37 | pid_xz= 38 | 39 | 40 | # ====== Clean-up trap on SIGINT ============================================ 41 | trap '[ -n "${tcpdump_pid}" ] && kill "${tcpdump_pid}"' INT 42 | trap 'rm -f -- "${FIFO}"' EXIT 43 | 44 | 45 | # ====== Start xz for writing a compressed pcap file from FIFO input ======== 46 | rm -f -- "${FIFO}" 47 | mkfifo "${FIFO}" 48 | nice xz -T0 -c >"${PCAP}" <"${FIFO}" & pid_xz=$! 49 | 50 | # Make sure that xz has been started successfully before starting T-Shark 51 | if [ "${pid_xz}" == "" -o ! "${pid_xz}" -gt 0 ] ; then 52 | kill -0 "${pid_xz}" 53 | echo >&2 "ERROR: xz failed to start -> exiting!" 54 | exit 1 55 | fi 56 | 57 | 58 | # ====== Run T-Shark ======================================================== 59 | tshark -w - "$@" >"${FIFO}" & tcpdump_pid=$! || true 60 | 61 | # Return T-Shark status on failure, or xz status if T-Shark finished successfully: 62 | wait "${tcpdump_pid}" || wait "${pid_xz}" 63 | -------------------------------------------------------------------------------- /juju/p4sscharm/actions.yaml: -------------------------------------------------------------------------------- 1 | # ===================================================================== 2 | # ####### ##### # # ### # # # # ### 3 | # # # # # # # ## # ## # # 4 | # # # # # # # # # # # # # 5 | # ##### # #### ##### # # # # # # # # # # 6 | # # # # # # # # # # # # # # 7 | # # # # # # # # # ## # ## # 8 | # ##### ##### # ### # # # # ### 9 | # ===================================================================== 10 | # 11 | # SimulaMet P4-SS VNF and NS 12 | # Copyright (C) 2021-2023 by Thomas Dreibholz 13 | # 14 | # This program is free software: you can redistribute it and/or modify 15 | # it under the terms of the GNU General Public License as published by 16 | # the Free Software Foundation, either version 3 of the License, or 17 | # (at your option) any later version. 18 | # 19 | # This program is distributed in the hope that it will be useful, 20 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | # GNU General Public License for more details. 23 | # 24 | # You should have received a copy of the GNU General Public License 25 | # along with this program. If not, see . 26 | # 27 | # Contact: dreibh@simula.no 28 | 29 | prepare-p4ss-build: 30 | description: Prepares P4-SS sources 31 | params: 32 | p4ss-git-repository: 33 | description: P4-SS Git repository 34 | type: string 35 | default: https://github.com/simula/behavioral-model 36 | p4ss-git-commit: 37 | description: P4-SS Git commit 38 | type: string 39 | default: main 40 | git-name: 41 | description: Git name 42 | type: string 43 | default: Thomas Dreibholz 44 | git-email: 45 | description: Git E-mail 46 | type: string 47 | default: dreibh@simula.no 48 | required: 49 | - p4ss-git-repository 50 | - p4ss-git-commit 51 | 52 | configure-p4ss: 53 | description: Configures P4-SS 54 | 55 | restart-p4ss: 56 | description: Restarts P4-SS 57 | -------------------------------------------------------------------------------- /juju/flexrancharm/actions.yaml: -------------------------------------------------------------------------------- 1 | # ===================================================================== 2 | # ####### ##### # # ### # # # # ### 3 | # # # # # # # ## # ## # # 4 | # # # # # # # # # # # # # 5 | # ##### # #### ##### # # # # # # # # # # 6 | # # # # # # # # # # # # # # 7 | # # # # # # # # # ## # ## # 8 | # ##### ##### # ### # # # # ### 9 | # ===================================================================== 10 | # 11 | # SimulaMet FlexRAN VNF and NS 12 | # Copyright (C) 2019-2023 by Thomas Dreibholz 13 | # 14 | # This program is free software: you can redistribute it and/or modify 15 | # it under the terms of the GNU General Public License as published by 16 | # the Free Software Foundation, either version 3 of the License, or 17 | # (at your option) any later version. 18 | # 19 | # This program is distributed in the hope that it will be useful, 20 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | # GNU General Public License for more details. 23 | # 24 | # You should have received a copy of the GNU General Public License 25 | # along with this program. If not, see . 26 | # 27 | # Contact: dreibh@simula.no 28 | 29 | prepare-flexran-build: 30 | description: Prepares FlexRAN sources 31 | params: 32 | flexran-git-repository: 33 | description: FlexRAN Git repository 34 | type: string 35 | default: https://gitlab.eurecom.fr/mosaic5g/mosaic5g 36 | flexran-git-commit: 37 | description: FlexRAN Git commit 38 | type: string 39 | default: master 40 | git-name: 41 | description: Git name 42 | type: string 43 | default: Thomas Dreibholz 44 | git-email: 45 | description: Git E-mail 46 | type: string 47 | default: dreibh@simula.no 48 | required: 49 | - flexran-git-repository 50 | - flexran-git-commit 51 | 52 | configure-flexran: 53 | description: Configures FlexRAN 54 | 55 | restart-flexran: 56 | description: Restarts FlexRAN 57 | -------------------------------------------------------------------------------- /juju/oai5gdockercharm/actions.yaml: -------------------------------------------------------------------------------- 1 | # ===================================================================== 2 | # ####### ##### # # ### # # # # ### 3 | # # # # # # # ## # ## # # 4 | # # # # # # # # # # # # # 5 | # ##### # #### ##### # # # # # # # # # # 6 | # # # # # # # # # # # # # # 7 | # # # # # # # # # ## # ## # 8 | # ##### ##### # ### # # # # ### 9 | # ===================================================================== 10 | # 11 | # SimulaMet OAI 5G Docker VNF and NS 12 | # Copyright (C) 2019-2023 by Thomas Dreibholz 13 | # 14 | # This program is free software: you can redistribute it and/or modify 15 | # it under the terms of the GNU General Public License as published by 16 | # the Free Software Foundation, either version 3 of the License, or 17 | # (at your option) any later version. 18 | # 19 | # This program is distributed in the hope that it will be useful, 20 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | # GNU General Public License for more details. 23 | # 24 | # You should have received a copy of the GNU General Public License 25 | # along with this program. If not, see . 26 | # 27 | # Contact: dreibh@simula.no 28 | 29 | prepare-oai5gdocker-build: 30 | description: Prepares OAI 5G Docker sources 31 | params: 32 | oai5gdocker-git-repository: 33 | description: OAI 5G Docker Git repository 34 | type: string 35 | default: https://gitlab.eurecom.fr/oai/cn5g/oai-cn5g-fed.git 36 | oai5gdocker-git-commit: 37 | description: OAI 5G Docker Git commit 38 | type: string 39 | default: master 40 | git-name: 41 | description: Git name 42 | type: string 43 | default: Thomas Dreibholz 44 | git-email: 45 | description: Git E-mail 46 | type: string 47 | default: dreibh@simula.no 48 | required: 49 | - oai5gdocker-git-repository 50 | - oai5gdocker-git-commit 51 | 52 | configure-oai5gdocker: 53 | description: Configures OAI 5G Docker 54 | 55 | restart-oai5gdocker: 56 | description: Restarts OAI 5G Docker 57 | -------------------------------------------------------------------------------- /show-failed-juju-actions: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | # ===================================================================== 3 | # ####### ##### # # ### # # # # ### 4 | # # # # # # # ## # ## # # 5 | # # # # # # # # # # # # # 6 | # ##### # #### ##### # # # # # # # # # # 7 | # # # # # # # # # # # # # # 8 | # # # # # # # # # ## # ## # 9 | # ##### ##### # ### # # # # ### 10 | # ===================================================================== 11 | # 12 | # SimulaMet OpenAirInterface Evolved Packet Core VNF and NS 13 | # Copyright (C) 2019-2023 by Thomas Dreibholz 14 | # 15 | # This program is free software: you can redistribute it and/or modify 16 | # it under the terms of the GNU General Public License as published by 17 | # the Free Software Foundation, either version 3 of the License, or 18 | # (at your option) any later version. 19 | # 20 | # This program is distributed in the hope that it will be useful, 21 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 22 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 23 | # GNU General Public License for more details. 24 | # 25 | # You should have received a copy of the GNU General Public License 26 | # along with this program. If not, see . 27 | # 28 | # Contact: dreibh@simula.no 29 | 30 | rm -f juju.errors 31 | juju show-action-status |grep -B3 -A1 fail | tee juju.errors 32 | echo "" 33 | 34 | cat juju.errors | tr -d '" \t' | ( 35 | action="???" 36 | id="???" 37 | IFS=":" 38 | while read key value ; do 39 | if [ "$key" == "-action" ]; then 40 | action="$value" 41 | elif [ "$key" == "id" ] ; then 42 | id="$value" 43 | elif [ "$key" == "unit" ] ; then 44 | if [ "$action" != "verify-ssh-credentials" ] ; then 45 | unit="$value" 46 | echo -e "\x1b[31m###### Action $action in Unit $unit failed, ID $id ######\x1b[0m" 47 | echo -e "\x1b[36m===> juju show-action-output $id\x1b[0m" 48 | echo -en "\x1b[34m" 49 | juju show-action-output $id 50 | echo -e "\x1b[0m" 51 | fi 52 | action="???" 53 | id="???" 54 | # else 55 | # echo "KEY $key" 56 | fi 57 | done 58 | ) 59 | -------------------------------------------------------------------------------- /autogen.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # 3 | # Build Scripts 4 | # Copyright (C) 2002-2023 by Thomas Dreibholz 5 | # 6 | # This program is free software: you can redistribute it and/or modify 7 | # it under the terms of the GNU General Public License as published by 8 | # the Free Software Foundation, either version 3 of the License, or 9 | # (at your option) any later version. 10 | # 11 | # This program is distributed in the hope that it will be useful, 12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | # GNU General Public License for more details. 15 | # 16 | # You should have received a copy of the GNU General Public License 17 | # along with this program. If not, see . 18 | # 19 | # Contact: dreibh@iem.uni-due.de 20 | 21 | # Bash options: 22 | set -e 23 | 24 | 25 | CMAKE_OPTIONS="" 26 | while [ $# -gt 0 ] ; do 27 | if [[ "$1" =~ ^(-|--)use-clang$ ]] ; then 28 | # Use these settings for CLang: 29 | export CXX=clang++ 30 | export CC=clang 31 | elif [[ "$1" =~ ^(-|--)use-gcc$ ]] ; then 32 | # Use these settings for GCC: 33 | export CXX=g++ 34 | export CC=gcc 35 | elif [[ "$1" =~ ^(-|--)debug$ ]] ; then 36 | # Enable debugging build: 37 | CMAKE_OPTIONS="$CMAKE_OPTIONS -DCMAKE_BUILD_TYPE=DEBUG" 38 | elif [[ "$1" =~ ^(-|--)verbose$ ]] ; then 39 | # Enable verbose Makefile: 40 | CMAKE_OPTIONS="$CMAKE_OPTIONS -DCMAKE_VERBOSE_MAKEFILE=ON" 41 | elif [ "$1" == "--" ] ; then 42 | break 43 | else 44 | echo >&2 "Usage: autogen.sh [--use-clang|--use-gcc] [--debug] [--verbose]" 45 | exit 1 46 | fi 47 | shift 48 | done 49 | 50 | 51 | # ====== Configure with CMake =============================================== 52 | rm -f CMakeCache.txt 53 | echo "CMake options:${CMAKE_OPTIONS} -DCMAKE_INSTALL_PREFIX=/usr $@ ." 54 | cmake ${CMAKE_OPTIONS} -DCMAKE_INSTALL_PREFIX=/usr $@ . 55 | 56 | # ------ Obtain number of cores --------------------------------------------- 57 | # Try Linux 58 | cores=`getconf _NPROCESSORS_ONLN 2>/dev/null || true` 59 | if [ "${cores}" == "" ] ; then 60 | # Try FreeBSD 61 | cores=`sysctl -a | grep 'hw.ncpu' | cut -d ':' -f2 | tr -d ' ' || true` 62 | fi 63 | if [ "${cores}" == "" ] ; then 64 | cores="1" 65 | fi 66 | echo "This system has ${cores} cores!" 67 | 68 | # ====== Build ============================================================== 69 | make -j${cores} 70 | -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | # OAI 5G Core Network Topology 2 | 3 | ![OAI_testbed_logical_topology](OAI_testbed_logical_topology.png) 4 | 5 | Service Based Interfaces (SBIs) (i.e. interfaces that are labeled `Nxxx`), are used in the Control Plane in the 5G Network to connect between different Network Functions. 6 | All Network Functions in the Control Plane in the 5G Network, are using a common bus to exchange control plane messages between each other. 7 | Each Network Function is using a Service Based Interface (SBI), in order to connect to this common bus. 8 | 9 | ## In detail for the core: 10 | 11 | - **MYSQL**: 12 | - image: mysql:8.0 13 | - build file: https://github.com/docker-library/mysql/blob/090eb25ac69bca920fc5320484bc35aac92a8143/8.0/Dockerfile.oracle 14 | - It is needed for the `oai-udr` network function. Not part of a typical 5G core. 15 | - **oai-udr**: 16 | - image: oaisoftwarealliance/oai-udr:v2.1.0 17 | - source: https://gitlab.eurecom.fr/oai/cn5g/oai-cn5g-udr/-/tree/v2.1.0?ref_type=tags 18 | - **oai-ausf** 19 | - image: oaisoftwarealliance/oai-ausf:v2.1.0 20 | - source: https://gitlab.eurecom.fr/oai/cn5g/oai-cn5g-ausf/-/tree/v2.1.0?ref_type=tags 21 | - **oai-nrf**: 22 | - image: oaisoftwarealliance/oai-nrf:v2.1.0 23 | - source: https://gitlab.eurecom.fr/oai/cn5g/oai-cn5g-nrf/-/tree/v2.1.0?ref_type=tags 24 | - **oai-amf** 25 | - image: oaisoftwarealliance/oai-amf:v2.1.0 26 | - source: https://gitlab.eurecom.fr/oai/cn5g/oai-cn5g-amf/-/tree/v2.1.0?ref_type=tags 27 | - **oai-upf** 28 | - image: oaisoftwarealliance/oai-upf:v2.1.0 29 | - source: https://gitlab.eurecom.fr/oai/cn5g/oai-cn5g-upf/-/tree/v2.1.0?ref_type=tags 30 | - **oai-ext-dn**: 31 | - image: oaisoftwarealliance/trf-gen-cn5g:latest 32 | - source: https://gitlab.eurecom.fr/oai/cn5g/oai-cn5g-fed/-/blob/v2.1.0/ci-scripts/Dockerfile.traffic.generator.ubuntu?ref_type=tags 33 | - It is just a traffic generator. It is not needed in the core. 34 | - **oai-smf** 35 | - image: oaisoftwarealliance/oai-smf:v2.1.0 36 | - source: https://gitlab.eurecom.fr/oai/cn5g/oai-cn5g-smf/-/tree/v2.1.0?ref_type=tags 37 | - **oai-udm** 38 | - image: oaisoftwarealliance/oai-udm:v2.1.0 39 | - source: https://gitlab.eurecom.fr/oai/cn5g/oai-cn5g-udm/-/tree/v2.1.0?ref_type=tags 40 | 41 | 42 | ## In detail for the RAN 43 | 44 | - source: [https://gitlab.eurecom.fr/oai/openairinterface5g](https://gitlab.eurecom.fr/oai/openairinterface5g) 45 | - We use the latest weekly tag. Latest version we tested `2024.w15`. 46 | - We modify some parameters like MCC / MNC and IP addresses. 47 | 48 | 49 | -------------------------------------------------------------------------------- /Core4-SimulaMet-OAI-5G-Docker.yaml: -------------------------------------------------------------------------------- 1 | # ===================================================================== 2 | # ####### ##### # # ### # # # # ### 3 | # # # # # # # ## # ## # # 4 | # # # # # # # # # # # # # 5 | # ##### # #### ##### # # # # # # # # # # 6 | # # # # # # # # # # # # # # 7 | # # # # # # # # # ## # ## # 8 | # ##### ##### # ### # # # # ### 9 | # ===================================================================== 10 | # 11 | # SimulaMet OAI-5G-Docker VNF and NS 12 | # Copyright (C) 2019-2023 by Thomas Dreibholz 13 | # 14 | # This program is free software: you can redistribute it and/or modify 15 | # it under the terms of the GNU General Public License as published by 16 | # the Free Software Foundation, either version 3 of the License, or 17 | # (at your option) any later version. 18 | # 19 | # This program is distributed in the hope that it will be useful, 20 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | # GNU General Public License for more details. 23 | # 24 | # You should have received a copy of the GNU General Public License 25 | # along with this program. If not, see . 26 | # 27 | # Contact: dreibh@simula.no 28 | 29 | # The following line tells "create-instance" the name of the NSD: 30 | #! NSD SimulaMet-OAI-5G-Docker_nsd 31 | 32 | # ###### VNF Parameters ##################################################### 33 | additionalParamsForVnf: 34 | # ====== OAI-5G-Docker ========================================================== 35 | - member-vnf-index: '1' 36 | additionalParams: 37 | oai5gdocker_git_repository: 'https://github.com/simula/5gvinni-oai-ns.git' 38 | oai5gdocker_git_commit: 'dreibh/vnf-testing' 39 | 40 | password: 'osm4us' 41 | 42 | 43 | # ###### Addresses ########################################################## 44 | vld: 45 | # ====== Management ======================================================= 46 | - name: Management 47 | vim-network-name: osm-management # <<-- VIM Network for Management 48 | vnfd-connection-point-ref: 49 | - member-vnf-index-ref: '1' 50 | vnfd-connection-point-ref: oai5gdocker-mgmt-cp-ext 51 | ip-address: 10.132.13.23 52 | 53 | # ====== OAI-5G-Docker ========================================================== 54 | - name: OAI-5G-Docker 55 | vim-network-name: 5gvinni-core4-flexran # <<-- VIM Network for OAI-5G-Docker 56 | vnfd-connection-point-ref: 57 | - member-vnf-index-ref: '1' 58 | vnfd-connection-point-ref: oai5gdocker-service-cp-ext 59 | ip-address: 192.168.243.23 60 | -------------------------------------------------------------------------------- /SimulaMet-FlexRAN_nsd/SimulaMet-FlexRAN_nsd.yaml: -------------------------------------------------------------------------------- 1 | # ===================================================================== 2 | # ####### ##### # # ### # # # # ### 3 | # # # # # # # ## # ## # # 4 | # # # # # # # # # # # # # 5 | # ##### # #### ##### # # # # # # # # # # 6 | # # # # # # # # # # # # # # 7 | # # # # # # # # # ## # ## # 8 | # ##### ##### # ### # # # # ### 9 | # ===================================================================== 10 | # 11 | # SimulaMet FlexRAN NS 12 | # Copyright (C) 2019-2023 by Thomas Dreibholz 13 | # 14 | # This program is free software: you can redistribute it and/or modify 15 | # it under the terms of the GNU General Public License as published by 16 | # the Free Software Foundation, either version 3 of the License, or 17 | # (at your option) any later version. 18 | # 19 | # This program is distributed in the hope that it will be useful, 20 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | # GNU General Public License for more details. 23 | # 24 | # You should have received a copy of the GNU General Public License 25 | # along with this program. If not, see . 26 | # 27 | # Contact: dreibh@simula.no 28 | 29 | nsd: 30 | nsd: 31 | - id: SimulaMet-FlexRAN_nsd 32 | name: SimulaMet-FlexRAN_nsd 33 | description: SimulaMet OpenAirInterface Evolved Packet Core NS 34 | version: '2.0' 35 | designer: Thomas Dreibholz 36 | 37 | # ###### Connections ################################################## 38 | virtual-link-desc: 39 | - id: Management 40 | mgmt-network: 'true' 41 | vim-network-name: osm-management 42 | - id: FlexRAN 43 | # vim-network-name: nornet-simula 44 | 45 | # ###### Used VNFDs ################################################### 46 | vnfd-id: 47 | - SimulaMet-FlexRAN_vnfd 48 | 49 | # ###### NS Definition ################################################ 50 | df: 51 | - id: default-df 52 | vnf-profile: 53 | - id: '1' 54 | virtual-link-connectivity: 55 | - constituent-cpd-id: 56 | - constituent-base-element-id: '1' 57 | constituent-cpd-id: flexran-mgmt-cp-ext 58 | virtual-link-profile-id: Management 59 | - constituent-cpd-id: 60 | - constituent-base-element-id: '1' 61 | constituent-cpd-id: flexran-service-cp-ext 62 | virtual-link-profile-id: FlexRAN 63 | vnfd-id: SimulaMet-FlexRAN_vnfd 64 | -------------------------------------------------------------------------------- /SimulaMet-OAI-5G-Docker_nsd/SimulaMet-OAI-5G-Docker_nsd.yaml: -------------------------------------------------------------------------------- 1 | # ===================================================================== 2 | # ####### ##### # # ### # # # # ### 3 | # # # # # # # ## # ## # # 4 | # # # # # # # # # # # # # 5 | # ##### # #### ##### # # # # # # # # # # 6 | # # # # # # # # # # # # # # 7 | # # # # # # # # # ## # ## # 8 | # ##### ##### # ### # # # # ### 9 | # ===================================================================== 10 | # 11 | # SimulaMet OAI-5G-Docker NS 12 | # Copyright (C) 2019-2023 by Thomas Dreibholz 13 | # 14 | # This program is free software: you can redistribute it and/or modify 15 | # it under the terms of the GNU General Public License as published by 16 | # the Free Software Foundation, either version 3 of the License, or 17 | # (at your option) any later version. 18 | # 19 | # This program is distributed in the hope that it will be useful, 20 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | # GNU General Public License for more details. 23 | # 24 | # You should have received a copy of the GNU General Public License 25 | # along with this program. If not, see . 26 | # 27 | # Contact: dreibh@simula.no 28 | 29 | nsd: 30 | nsd: 31 | - id: SimulaMet-OAI-5G-Docker_nsd 32 | name: SimulaMet-OAI-5G-Docker_nsd 33 | description: SimulaMet OpenAirInterface 5G Docker NS 34 | designer: Thomas Dreibholz 35 | version: 1.0 36 | 37 | # ###### Connections ################################################## 38 | virtual-link-desc: 39 | - id: Management 40 | mgmt-network: 'true' 41 | vim-network-name: osm-management 42 | - id: OAI-5G-Docker 43 | 44 | # ###### Used VNFDs ################################################### 45 | vnfd-id: 46 | - SimulaMet-OAI-5G-Docker_vnfd 47 | 48 | # ###### NS Definition ################################################ 49 | df: 50 | - id: default-df 51 | vnf-profile: 52 | - id: '1' 53 | virtual-link-connectivity: 54 | - constituent-cpd-id: 55 | - constituent-base-element-id: '1' 56 | constituent-cpd-id: oai5gdocker-mgmt-cp-ext 57 | virtual-link-profile-id: Management 58 | - constituent-cpd-id: 59 | - constituent-base-element-id: '1' 60 | constituent-cpd-id: oai5gdocker-service-cp-ext 61 | virtual-link-profile-id: OAI-5G-Docker 62 | vnfd-id: SimulaMet-OAI-5G-Docker_vnfd 63 | -------------------------------------------------------------------------------- /Core1-SimulaMet-FlexRAN.yaml: -------------------------------------------------------------------------------- 1 | # ===================================================================== 2 | # ####### ##### # # ### # # # # ### 3 | # # # # # # # ## # ## # # 4 | # # # # # # # # # # # # # 5 | # ##### # #### ##### # # # # # # # # # # 6 | # # # # # # # # # # # # # # 7 | # # # # # # # # # ## # ## # 8 | # ##### ##### # ### # # # # ### 9 | # ===================================================================== 10 | # 11 | # SimulaMet FlexRAN VNF and NS 12 | # Copyright (C) 2019-2023 by Thomas Dreibholz 13 | # 14 | # This program is free software: you can redistribute it and/or modify 15 | # it under the terms of the GNU General Public License as published by 16 | # the Free Software Foundation, either version 3 of the License, or 17 | # (at your option) any later version. 18 | # 19 | # This program is distributed in the hope that it will be useful, 20 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | # GNU General Public License for more details. 23 | # 24 | # You should have received a copy of the GNU General Public License 25 | # along with this program. If not, see . 26 | # 27 | # Contact: dreibh@simula.no 28 | 29 | # The following line tells "create-instance" the name of the NSD: 30 | #! NSD SimulaMet-FlexRAN_nsd 31 | 32 | # ###### VNF Parameters ##################################################### 33 | additionalParamsForVnf: 34 | # ====== FlexRAN ========================================================== 35 | - member-vnf-index: '1' 36 | additionalParams: 37 | flexran_git_repository: 'https://github.com/simula/mosaic5g-mosaic5g.git' 38 | flexran_git_commit: 'master' 39 | flexran_service_ipv4_interface: '192.168.246.100/24' 40 | flexran_service_ipv4_gateway: '0.0.0.0' 41 | flexran_service_ipv6_interface: '' 42 | flexran_service_ipv6_gateway: '' 43 | 44 | password: 'osm4us' 45 | 46 | 47 | # ###### Addresses ########################################################## 48 | vld: 49 | # ====== Management ======================================================= 50 | - name: Management 51 | vim-network-name: osm-management 52 | vnfd-connection-point-ref: 53 | - member-vnf-index-ref: '1' 54 | vnfd-connection-point-ref: flexran-mgmt-cp-ext 55 | ip-address: 10.132.13.204 56 | 57 | # ====== FlexRAN ========================================================== 58 | - name: FlexRAN 59 | vim-network-name: 5gvinni-core1-flexran 60 | vnfd-connection-point-ref: 61 | - member-vnf-index-ref: '1' 62 | vnfd-connection-point-ref: flexran-service-cp-ext 63 | ip-address: 192.168.246.100 64 | -------------------------------------------------------------------------------- /juju/spgwccharm/actions.yaml: -------------------------------------------------------------------------------- 1 | # ===================================================================== 2 | # ####### ##### # # ### # # # # ### 3 | # # # # # # # ## # ## # # 4 | # # # # # # # # # # # # # 5 | # ##### # #### ##### # # # # # # # # # # 6 | # # # # # # # # # # # # # # 7 | # # # # # # # # # ## # ## # 8 | # ##### ##### # ### # # # # ### 9 | # ===================================================================== 10 | # 11 | # SimulaMet OpenAirInterface Evolved Packet Core VNF and NS 12 | # Copyright (C) 2019-2023 by Thomas Dreibholz 13 | # 14 | # This program is free software: you can redistribute it and/or modify 15 | # it under the terms of the GNU General Public License as published by 16 | # the Free Software Foundation, either version 3 of the License, or 17 | # (at your option) any later version. 18 | # 19 | # This program is distributed in the hope that it will be useful, 20 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | # GNU General Public License for more details. 23 | # 24 | # You should have received a copy of the GNU General Public License 25 | # along with this program. If not, see . 26 | # 27 | # Contact: dreibh@simula.no 28 | 29 | prepare-spgwc-build: 30 | description: Prepares SPGW-C sources 31 | params: 32 | spgwc-git-repository: 33 | description: SPGW-C Git repository 34 | type: string 35 | default: https://github.com/OPENAIRINTERFACE/openair-cn-cups.git 36 | spgwc-git-commit: 37 | description: SPGW-C Git commit 38 | type: string 39 | default: develop 40 | git-name: 41 | description: Git name 42 | type: string 43 | default: Thomas Dreibholz 44 | git-email: 45 | description: Git E-mail 46 | type: string 47 | default: dreibh@simula.no 48 | required: 49 | - spgwc-git-repository 50 | - spgwc-git-commit 51 | 52 | configure-spgwc: 53 | description: Configures the SPGW-C 54 | params: 55 | network-realm: 56 | description: Network realm 57 | type: string 58 | default: simula.nornet 59 | network-ipv4-dns1: 60 | description: Network DNS 1 61 | data-type: string 62 | default: 10.1.1.1 63 | network-ipv4-dns2: 64 | description: Network DNS 2 65 | data-type: string 66 | default: 10.1.2.1 67 | network-ipv4-ue-address-pool: 68 | description: Network IPv4 UE Address Pool 69 | data-type: string 70 | default: 12.1.1.2 - 12.1.1.128 71 | required: 72 | - network-realm 73 | - network-ipv4-dns1 74 | - network-ipv4-dns2 75 | 76 | restart-spgwc: 77 | description: Restarts the SPGW-C 78 | -------------------------------------------------------------------------------- /Core3-SimulaMet-FlexRAN.yaml: -------------------------------------------------------------------------------- 1 | # ===================================================================== 2 | # ####### ##### # # ### # # # # ### 3 | # # # # # # # ## # ## # # 4 | # # # # # # # # # # # # # 5 | # ##### # #### ##### # # # # # # # # # # 6 | # # # # # # # # # # # # # # 7 | # # # # # # # # # ## # ## # 8 | # ##### ##### # ### # # # # ### 9 | # ===================================================================== 10 | # 11 | # SimulaMet FlexRAN VNF and NS 12 | # Copyright (C) 2019-2023 by Thomas Dreibholz 13 | # 14 | # This program is free software: you can redistribute it and/or modify 15 | # it under the terms of the GNU General Public License as published by 16 | # the Free Software Foundation, either version 3 of the License, or 17 | # (at your option) any later version. 18 | # 19 | # This program is distributed in the hope that it will be useful, 20 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | # GNU General Public License for more details. 23 | # 24 | # You should have received a copy of the GNU General Public License 25 | # along with this program. If not, see . 26 | # 27 | # Contact: dreibh@simula.no 28 | 29 | # The following line tells "create-instance" the name of the NSD: 30 | #! NSD SimulaMet-FlexRAN_nsd 31 | 32 | # ###### VNF Parameters ##################################################### 33 | additionalParamsForVnf: 34 | # ====== FlexRAN ========================================================== 35 | - member-vnf-index: '1' 36 | additionalParams: 37 | flexran_git_repository: 'https://github.com/simula/mosaic5g-mosaic5g.git' 38 | flexran_git_commit: 'master' 39 | flexran_service_ipv4_interface: '192.168.244.100/24' 40 | flexran_service_ipv4_gateway: '0.0.0.0' 41 | flexran_service_ipv6_interface: '' 42 | flexran_service_ipv6_gateway: '' 43 | 44 | password: 'osm4us' 45 | 46 | 47 | # ###### Addresses ########################################################## 48 | vld: 49 | # ====== Management ======================================================= 50 | - name: Management 51 | vim-network-name: osm-management # <<-- VIM Network for Management 52 | vnfd-connection-point-ref: 53 | - member-vnf-index-ref: '1' 54 | vnfd-connection-point-ref: flexran-mgmt-cp-ext 55 | ip-address: 10.132.13.224 56 | 57 | # ====== FlexRAN ========================================================== 58 | - name: FlexRAN 59 | vim-network-name: 5gvinni-core3-flexran # <<-- VIM Network for FlexRAN 60 | vnfd-connection-point-ref: 61 | - member-vnf-index-ref: '1' 62 | vnfd-connection-point-ref: flexran-service-cp-ext 63 | ip-address: 192.168.244.100 64 | -------------------------------------------------------------------------------- /Core4-SimulaMet-FlexRAN.yaml: -------------------------------------------------------------------------------- 1 | # ===================================================================== 2 | # ####### ##### # # ### # # # # ### 3 | # # # # # # # ## # ## # # 4 | # # # # # # # # # # # # # 5 | # ##### # #### ##### # # # # # # # # # # 6 | # # # # # # # # # # # # # # 7 | # # # # # # # # # ## # ## # 8 | # ##### ##### # ### # # # # ### 9 | # ===================================================================== 10 | # 11 | # SimulaMet FlexRAN VNF and NS 12 | # Copyright (C) 2019-2023 by Thomas Dreibholz 13 | # 14 | # This program is free software: you can redistribute it and/or modify 15 | # it under the terms of the GNU General Public License as published by 16 | # the Free Software Foundation, either version 3 of the License, or 17 | # (at your option) any later version. 18 | # 19 | # This program is distributed in the hope that it will be useful, 20 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | # GNU General Public License for more details. 23 | # 24 | # You should have received a copy of the GNU General Public License 25 | # along with this program. If not, see . 26 | # 27 | # Contact: dreibh@simula.no 28 | 29 | # The following line tells "create-instance" the name of the NSD: 30 | #! NSD SimulaMet-FlexRAN_nsd 31 | 32 | # ###### VNF Parameters ##################################################### 33 | additionalParamsForVnf: 34 | # ====== FlexRAN ========================================================== 35 | - member-vnf-index: '1' 36 | additionalParams: 37 | flexran_git_repository: 'https://github.com/simula/mosaic5g-mosaic5g.git' 38 | flexran_git_commit: 'master' 39 | flexran_service_ipv4_interface: '192.168.243.100/24' 40 | flexran_service_ipv4_gateway: '0.0.0.0' 41 | flexran_service_ipv6_interface: '' 42 | flexran_service_ipv6_gateway: '' 43 | 44 | password: 'osm4us' 45 | 46 | 47 | # ###### Addresses ########################################################## 48 | vld: 49 | # ====== Management ======================================================= 50 | - name: Management 51 | vim-network-name: osm-management # <<-- VIM Network for Management 52 | vnfd-connection-point-ref: 53 | - member-vnf-index-ref: '1' 54 | vnfd-connection-point-ref: flexran-mgmt-cp-ext 55 | ip-address: 10.132.13.234 56 | 57 | # ====== FlexRAN ========================================================== 58 | - name: FlexRAN 59 | vim-network-name: 5gvinni-core4-flexran # <<-- VIM Network for FlexRAN 60 | vnfd-connection-point-ref: 61 | - member-vnf-index-ref: '1' 62 | vnfd-connection-point-ref: flexran-service-cp-ext 63 | ip-address: 192.168.243.100 64 | -------------------------------------------------------------------------------- /SimulaMet-P4-SS_nsd/SimulaMet-P4-SS_nsd.yaml: -------------------------------------------------------------------------------- 1 | # ===================================================================== 2 | # ####### ##### # # ### # # # # ### 3 | # # # # # # # ## # ## # # 4 | # # # # # # # # # # # # # 5 | # ##### # #### ##### # # # # # # # # # # 6 | # # # # # # # # # # # # # # 7 | # # # # # # # # # ## # ## # 8 | # ##### ##### # ### # # # # ### 9 | # ===================================================================== 10 | # 11 | # SimulaMet P4-SS NS 12 | # Copyright (C) 2019-2023 by Thomas Dreibholz 13 | # 14 | # This program is free software: you can redistribute it and/or modify 15 | # it under the terms of the GNU General Public License as published by 16 | # the Free Software Foundation, either version 3 of the License, or 17 | # (at your option) any later version. 18 | # 19 | # This program is distributed in the hope that it will be useful, 20 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | # GNU General Public License for more details. 23 | # 24 | # You should have received a copy of the GNU General Public License 25 | # along with this program. If not, see . 26 | # 27 | # Contact: dreibh@simula.no 28 | 29 | nsd: 30 | nsd: 31 | - id: SimulaMet-P4-SS_nsd 32 | name: SimulaMet-P4-SS_nsd 33 | description: SimulaMet P4-capable Open vSwitch NS 34 | version: '2.0' 35 | designer: Thomas Dreibholz 36 | 37 | # ###### Connections ################################################## 38 | virtual-link-desc: 39 | - id: Management 40 | mgmt-network: 'true' 41 | vim-network-name: osm-management 42 | - id: Service-Port1 43 | # vim-network-name: nornet-simula 44 | - id: Service-Port2 45 | # vim-network-name: nornet-simula 46 | 47 | # ###### Used VNFDs ################################################### 48 | vnfd-id: 49 | - SimulaMet-P4-SS_vnfd 50 | 51 | # ###### NS Definition ################################################ 52 | df: 53 | - id: default-df 54 | vnf-profile: 55 | - id: '1' 56 | virtual-link-connectivity: 57 | - constituent-cpd-id: 58 | - constituent-base-element-id: '1' 59 | constituent-cpd-id: p4ss-mgmt-cp-ext 60 | virtual-link-profile-id: Management 61 | - constituent-cpd-id: 62 | - constituent-base-element-id: '1' 63 | constituent-cpd-id: p4ss-service-port1-cp-ext 64 | virtual-link-profile-id: Service-Port1 65 | - constituent-cpd-id: 66 | - constituent-base-element-id: '1' 67 | constituent-cpd-id: p4ss-service-port2-cp-ext 68 | virtual-link-profile-id: Service-Port2 69 | vnfd-id: SimulaMet-P4-SS_vnfd 70 | -------------------------------------------------------------------------------- /Work-in-Progress/SimulaMet-P4-OvS.yaml: -------------------------------------------------------------------------------- 1 | # ===================================================================== 2 | # ####### ##### # # ### # # # # ### 3 | # # # # # # # ## # ## # # 4 | # # # # # # # # # # # # # 5 | # ##### # #### ##### # # # # # # # # # # 6 | # # # # # # # # # # # # # # 7 | # # # # # # # # # ## # ## # 8 | # ##### ##### # ### # # # # ### 9 | # ===================================================================== 10 | # 11 | # SimulaMet P4-OvS VNF and NS 12 | # Copyright (C) 2021-2023 by Thomas Dreibholz 13 | # 14 | # This program is free software: you can redistribute it and/or modify 15 | # it under the terms of the GNU General Public License as published by 16 | # the Free Software Foundation, either version 3 of the License, or 17 | # (at your option) any later version. 18 | # 19 | # This program is distributed in the hope that it will be useful, 20 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | # GNU General Public License for more details. 23 | # 24 | # You should have received a copy of the GNU General Public License 25 | # along with this program. If not, see . 26 | # 27 | # Contact: dreibh@simula.no 28 | 29 | # The following line tells "create-instance" the name of the NSD: 30 | #! NSD SimulaMet-P4-OvS_nsd 31 | 32 | # ###### VNF Parameters ##################################################### 33 | additionalParamsForVnf: 34 | - member-vnf-index: '1' 35 | additionalParams: 36 | # ====== P4-OvS ======================================================= 37 | 38 | # ====== Other ======================================================== 39 | hostname: 'p4-ovs' 40 | password: 'osm4us' 41 | 42 | 43 | # ###### Addresses ########################################################## 44 | vld: 45 | # ====== Management ======================================================= 46 | - name: Management 47 | vim-network-name: osm-management # <<-- VIM Network for Management 48 | vnfd-connection-point-ref: 49 | - member-vnf-index-ref: '1' 50 | vnfd-connection-point-ref: p4ovs-mgmt-cp-ext 51 | ip-address: 10.132.13.111 52 | 53 | # ====== Service, Port 1 ================================================== 54 | - name: Service-Port1 55 | vim-network-name: 5gvinni-core4-flexran # <<-- VIM Network for service port 56 | vnfd-connection-point-ref: 57 | - member-vnf-index-ref: '1' 58 | vnfd-connection-point-ref: p4ovs-service-port1-cp-ext 59 | ip-address: 192.168.243.111 60 | 61 | # ====== Service, Port 2 ================================================== 62 | - name: Service-Port2 63 | vim-network-name: hermod-management # <<-- VIM Network for service port 64 | vnfd-connection-point-ref: 65 | - member-vnf-index-ref: '1' 66 | vnfd-connection-point-ref: p4ovs-service-port2-cp-ext 67 | ip-address: 10.0.225.111 68 | -------------------------------------------------------------------------------- /tests/reinstall-spgwu: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | 3 | sudo service mme spgwu 4 | 5 | sudo rm -rf /usr/local 6 | sudo mkdir -p /usr/local/bin 7 | 8 | sudo apt install -fy 9 | sudo updatedb 10 | 11 | 12 | # ------ Fetching Git repository openair-spgwu-tiny -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 13 | time bash -c "cd /home/nornetpp/src && \ 14 | if [ ! -d \"openair-spgwu-tiny\" ] ; then git clone --quiet https://github.com/simula/openairinterface-openair-spgwu-tiny.git openair-spgwu-tiny && cd openair-spgwu-tiny ; else cd openair-spgwu-tiny && git pull ; fi && \ 15 | git checkout dreibh/tx-checksum-ip-generic-off" 16 | # ------ Building SPGW-U dependencies ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 17 | time bash -c "echo \"ZXhwb3J0IE1BS0VGTEFHUz0iLWpgbnByb2NgIiAmJiBcCmNkIC9ob21lL25vcm5ldHBwL3NyYy9vcGVuYWlyLXNwZ3d1LXRpbnkvYnVpbGQvc2NyaXB0cyAmJiBcCm1rZGlyIC1wIGxvZ3MgJiYgXAouL2J1aWxkX3NwZ3d1IC1JIC1mID5sb2dzL2J1aWxkX3NwZ3d1LTEubG9nIDI+JjE=\" | base64 -d | /bin/bash -x" 18 | # ------ Building SPGW-U itself ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 19 | time bash -c "echo \"ZXhwb3J0IE1BS0VGTEFHUz0iLWpgbnByb2NgIiAmJiBcCmNkIC9ob21lL25vcm5ldHBwL3NyYy9vcGVuYWlyLXNwZ3d1LXRpbnkvYnVpbGQvc2NyaXB0cyAmJiBcCi4vYnVpbGRfc3Bnd3UgLWMgLVYgLWIgRGVidWcgLWogPmxvZ3MvYnVpbGRfc3Bnd3UtMi5sb2cgMj4mMQ==\" | base64 -d | /bin/bash -x" 20 | # ------ Configuring SPGW-U -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 21 | time bash -c "echo \"Y2QgL2hvbWUvbm9ybmV0cHAvc3JjL29wZW5haXItc3Bnd3UtdGlueS9idWlsZC9zY3JpcHRzICYmIFwKSU5TVEFOQ0U9MSAmJiBcClBSRUZJWD0nL3Vzci9sb2NhbC9ldGMvb2FpJyAmJiBcCnN1ZG8gbWtkaXIgLW0gMDc3NyAtcCAkUFJFRklYICYmIFwKc3VkbyBjcCAuLi8uLi9ldGMvc3Bnd191LmNvbmYgJFBSRUZJWCAmJiBcCmRlY2xhcmUgLUEgU1BHV1VfQ09ORiAmJiBcClNQR1dVX0NPTkZbQElOU1RBTkNFQF09JElOU1RBTkNFICYmIFwKU1BHV1VfQ09ORltAUFJFRklYQF09JFBSRUZJWCAmJiBcClNQR1dVX0NPTkZbQFBJRF9ESVJFQ1RPUllAXT0nL3Zhci9ydW4nICYmIFwKU1BHV1VfQ09ORltAU0dXX0lOVEVSRkFDRV9OQU1FX0ZPUl9TMVVfUzEyX1M0X1VQQF09J2VuczUnICYmIFwKU1BHV1VfQ09ORltAU0dXX0lOVEVSRkFDRV9OQU1FX0ZPUl9TWEBdPSdlbnM0JyAmJiBcClNQR1dVX0NPTkZbQFNHV19JTlRFUkZBQ0VfTkFNRV9GT1JfU0dJQF09J2VuczYnICYmIFwKZm9yIEsgaW4gIiR7IVNQR1dVX0NPTkZbQF19IjsgZG8gc3VkbyBlZ3JlcCAtbFJaICIkSyIgJFBSRUZJWCB8IHhhcmdzIC0wIC1sIHN1ZG8gc2VkIC1pIC1lICJzfCRLfCR7U1BHV1VfQ09ORlskS119fGciIDsgcmV0PSQ/O1tbIHJldCAtbmUgMCBdXSAmJiBlY2hvICJUcmllZCB0byByZXBsYWNlICRLIHdpdGggJHtTUEdXVV9DT05GWyRLXX0iIHx8IHRydWUgOyBkb25lICYmIFwKc3VkbyBzZWQgLWUgInMvey4qSVBWNF9BRERSRVNTPVwiMTkyLjE2OC4xNjAuMTAwfFwiLio7Lip9XHx7LipJUFY0X0FERFJFU1M9XCJAU1BHV0MwX0lQX0FERFJFU1NAXCIuKjsuKn0veyBJUFY0X0FERFJFU1M9XFxcIjE3Mi41NS41NS4xMDFcXFwiOyB9L2ciIC1pIC91c3IvbG9jYWwvZXRjL29haS9zcGd3X3UuY29uZg==\" | base64 -d | /bin/bash -x" 22 | -------------------------------------------------------------------------------- /tests/wireshark/colorfilters: -------------------------------------------------------------------------------- 1 | # This file was created by Wireshark. Edit with care. 2 | @DownlinkNASTransport@ngap.procedureCode == 4@[35209,43176,65535][7967,7196,6939] 3 | @InitialContextSetup@ngap.procedureCode == 14@[30583,43690,11051][7967,7196,6939] 4 | @InitialUEMessage@ngap.procedureCode == 15@[39064,43690,17990][7967,7196,6939] 5 | @NGSetup@ngap.procedureCode == 21@[43690,43690,32639][7967,7196,6939] 6 | @PDUSessionResourceRelease@ngap.procedureCode == 28@[43690,21331,8224][7967,7196,6939] 7 | @PDUSessionResourceSetup@ngap.procedureCode == 29@[38036,43690,22359][7967,7196,6939] 8 | @UEContextRelease@ngap.procedureCode == 41@[43690,35209,35209][7967,7196,6939] 9 | @UEContextReleaseRequest@ngap.procedureCode == 42@[48316,28270,20560][7967,7196,6939] 10 | @UERadioCapabilityInfoIndication@ngap.procedureCode == 44@[39835,65535,48316][7967,7196,6939] 11 | @UplinkNASTransport@ngap.procedureCode == 46@[6425,44718,65535][7967,7196,6939] 12 | @NGAP@ngap@[53456,53456,53456][0,0,0] 13 | @Bad TCP@tcp.analysis.flags && !tcp.analysis.window_update && !tcp.analysis.keep_alive && !tcp.analysis.keep_alive_ack@[4626,10023,11822][63479,34695,34695] 14 | @HSRP State Change@hsrp.state != 8 && hsrp.state != 16@[4626,10023,11822][65535,64764,40092] 15 | @Spanning Tree Topology Change@stp.type == 0x80@[4626,10023,11822][65535,64764,40092] 16 | @OSPF State Change@ospf.msg != 1@[4626,10023,11822][65535,64764,40092] 17 | @ICMP errors@icmp.type in { 3..5, 11 } || icmpv6.type in { 1..4 }@[4626,10023,11822][47031,63479,29812] 18 | @ARP@arp@[64250,61680,55255][4626,10023,11822] 19 | @ICMP@icmp || icmpv6@[64764,57568,65535][4626,10023,11822] 20 | @TCP RST@tcp.flags.reset eq 1@[42148,0,0][65535,64764,40092] 21 | @SCTP ABORT@sctp.chunk_type eq ABORT@[42148,0,0][65535,64764,40092] 22 | @IPv4 TTL low or unexpected@(ip.dst != 224.0.0.0/4 && ip.ttl < 5 && !(pim || ospf || eigrp || bgp || tcp.port==179)) || (ip.dst == 224.0.0.0/24 && ip.dst != 224.0.0.251 && ip.ttl != 1 && !(vrrp || carp || eigrp || rip || glbp))@[42148,0,0][60652,61680,60395] 23 | @IPv6 hop limit low or unexpected@(ipv6.dst != ff00::/8 && ipv6.hlim < 5 && !( ospf|| bgp || tcp.port==179)) || (ipv6.dst==ff00::/8 && ipv6.hlim not in {1, 64, 255})@[42148,0,0][60652,61680,60395] 24 | @Checksum Errors@eth.fcs.status=="Bad" || ip.checksum.status=="Bad" || tcp.checksum.status=="Bad" || udp.checksum.status=="Bad" || sctp.checksum.status=="Bad" || mstp.checksum.status=="Bad" || cdp.checksum.status=="Bad" || edp.checksum.status=="Bad" || wlan.fcs.status=="Bad" || stt.checksum.status=="Bad"@[4626,10023,11822][63479,34695,34695] 25 | @SMB@smb || nbss || nbns || netbios@[65278,65535,53456][4626,10023,11822] 26 | @HTTP@http || tcp.port == 80 || http2@[58596,65535,51143][4626,10023,11822] 27 | @DCERPC@dcerpc@[51143,38807,65535][4626,10023,11822] 28 | @Routing@hsrp || eigrp || ospf || bgp || cdp || vrrp || carp || gvrp || igmp || ismp@[65535,62451,54998][4626,10023,11822] 29 | @TCP SYN/FIN@tcp.flags & 0x02 || tcp.flags.fin == 1@[41120,41120,41120][4626,10023,11822] 30 | @TCP@tcp@[59367,59110,65535][4626,10023,11822] 31 | @UDP@udp@[56026,61166,65535][4626,10023,11822] 32 | @Broadcast@eth[0] & 1@[65535,65535,65535][47802,48573,46774] 33 | @System Event@systemd_journal || sysdig@[59110,59110,59110][11565,28527,39578] 34 | -------------------------------------------------------------------------------- /Work-in-Progress/SimulaMet-P4-OvS_nsd/SimulaMet-P4-OvS_nsd.yaml: -------------------------------------------------------------------------------- 1 | # ===================================================================== 2 | # ####### ##### # # ### # # # # ### 3 | # # # # # # # ## # ## # # 4 | # # # # # # # # # # # # # 5 | # ##### # #### ##### # # # # # # # # # # 6 | # # # # # # # # # # # # # # 7 | # # # # # # # # # ## # ## # 8 | # ##### ##### # ### # # # # ### 9 | # ===================================================================== 10 | # 11 | # SimulaMet P4-OvS NS 12 | # Copyright (C) 2019-2023 by Thomas Dreibholz 13 | # 14 | # This program is free software: you can redistribute it and/or modify 15 | # it under the terms of the GNU General Public License as published by 16 | # the Free Software Foundation, either version 3 of the License, or 17 | # (at your option) any later version. 18 | # 19 | # This program is distributed in the hope that it will be useful, 20 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | # GNU General Public License for more details. 23 | # 24 | # You should have received a copy of the GNU General Public License 25 | # along with this program. If not, see . 26 | # 27 | # Contact: dreibh@simula.no 28 | 29 | nsd: 30 | nsd: 31 | - id: SimulaMet-P4-OvS_nsd 32 | name: SimulaMet-P4-OvS_nsd 33 | description: SimulaMet P4-capable Open vSwitch NS 34 | version: '2.0' 35 | designer: Thomas Dreibholz 36 | 37 | # ###### Connections ################################################## 38 | virtual-link-desc: 39 | - id: Management 40 | mgmt-network: 'true' 41 | vim-network-name: osm-management 42 | - id: Service-Port1 43 | # vim-network-name: nornet-simula 44 | - id: Service-Port2 45 | # vim-network-name: nornet-simula 46 | 47 | # ###### Used VNFDs ################################################### 48 | vnfd-id: 49 | - SimulaMet-P4-OvS_vnfd 50 | 51 | # ###### NS Definition ################################################ 52 | df: 53 | - id: default-df 54 | vnf-profile: 55 | - id: '1' 56 | virtual-link-connectivity: 57 | - constituent-cpd-id: 58 | - constituent-base-element-id: '1' 59 | constituent-cpd-id: p4ovs-mgmt-cp-ext 60 | virtual-link-profile-id: Management 61 | - constituent-cpd-id: 62 | - constituent-base-element-id: '1' 63 | constituent-cpd-id: p4ovs-service-port1-cp-ext 64 | virtual-link-profile-id: Service-Port1 65 | - constituent-cpd-id: 66 | - constituent-base-element-id: '1' 67 | constituent-cpd-id: p4ovs-service-port2-cp-ext 68 | virtual-link-profile-id: Service-Port2 69 | vnfd-id: SimulaMet-P4-OvS_vnfd 70 | -------------------------------------------------------------------------------- /Test-SimulaMet-P4-SS.yaml: -------------------------------------------------------------------------------- 1 | # ===================================================================== 2 | # ####### ##### # # ### # # # # ### 3 | # # # # # # # ## # ## # # 4 | # # # # # # # # # # # # # 5 | # ##### # #### ##### # # # # # # # # # # 6 | # # # # # # # # # # # # # # 7 | # # # # # # # # # ## # ## # 8 | # ##### ##### # ### # # # # ### 9 | # ===================================================================== 10 | # 11 | # SimulaMet P4-SS VNF and NS 12 | # Copyright (C) 2021-2023 by Thomas Dreibholz 13 | # 14 | # This program is free software: you can redistribute it and/or modify 15 | # it under the terms of the GNU General Public License as published by 16 | # the Free Software Foundation, either version 3 of the License, or 17 | # (at your option) any later version. 18 | # 19 | # This program is distributed in the hope that it will be useful, 20 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | # GNU General Public License for more details. 23 | # 24 | # You should have received a copy of the GNU General Public License 25 | # along with this program. If not, see . 26 | # 27 | # Contact: dreibh@simula.no 28 | 29 | # The following line tells "create-instance" the name of the NSD: 30 | #! NSD SimulaMet-P4-SS_nsd 31 | 32 | # ###### VNF Parameters ##################################################### 33 | additionalParamsForVnf: 34 | - member-vnf-index: '1' 35 | additionalParams: 36 | # ====== P4-SS ======================================================== 37 | p4ss_git_repository: 'https://github.com/simula/behavioral-model' 38 | p4ss_git_commit: 'main' 39 | 40 | # ====== Other ======================================================== 41 | hostname: 'p4-ss' 42 | password: 'osm4us' 43 | 44 | 45 | # ###### Addresses ########################################################## 46 | vld: 47 | # ====== Management ======================================================= 48 | - name: Management 49 | vim-network-name: osm-management # <<-- VIM Network for Management 50 | vnfd-connection-point-ref: 51 | - member-vnf-index-ref: '1' 52 | vnfd-connection-point-ref: p4ss-mgmt-cp-ext 53 | ip-address: 10.132.13.110 54 | 55 | # ====== Service, Port 1 ================================================== 56 | - name: Service-Port1 57 | vim-network-name: 5gvinni-core4-flexran # <<-- VIM Network for service port 58 | vnfd-connection-point-ref: 59 | - member-vnf-index-ref: '1' 60 | vnfd-connection-point-ref: p4ss-service-port1-cp-ext 61 | ip-address: 192.168.243.110 62 | 63 | # ====== Service, Port 2 ================================================== 64 | - name: Service-Port2 65 | vim-network-name: 5gvinni-core3-flexran # <<-- VIM Network for service port 66 | vnfd-connection-point-ref: 67 | - member-vnf-index-ref: '1' 68 | vnfd-connection-point-ref: p4ss-service-port2-cp-ext 69 | ip-address: 192.168.244.110 70 | -------------------------------------------------------------------------------- /tests/build-cn5g: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | 3 | # apt install -y docker.io 4 | # 5 | # # !!! git clone -b https://gitlab.eurecom.fr/oai/cn5g/oai-cn5g-amf.git /openair-amf 6 | # git clone -b v1.5.1 https://gitlab.eurecom.fr/oai/cn5g/oai-cn5g-amf.git /openair-amf 7 | # 8 | # # !!! docker run --privileged -d --name oai-amf-development --volume openair-amf:/openair-amf ubuntu:bionic sleep infinity 9 | # docker run --privileged -d --name oai-amf-development --volume openair-amf:/openair-amf ubuntu:jammy sleep infinity 10 | # 11 | # docker exec -it oai-amf-development bash 12 | # # below command is same for all network functions 13 | # sudo apt update && apt install psmisc software-properties-common git vim nano joe gnupg 14 | # # now you can peform the build 15 | # cd /openair-amf/build/scripts 16 | # /build_amf --install-deps --force 17 | # /build_amf --clean --Verbose --build-type Debug --jobs 18 | 19 | 20 | 21 | 22 | # apt install -y docker.io 23 | 24 | 25 | # Required: 26 | # * Access and Mobility Management Function (AMF) 27 | # * Authentication Server Management Function (AUSF) 28 | # * Network Repository Function (NRF) 29 | # * Session Management Function (SMF) 30 | # * Unified Data Management (UDM) 31 | # - Simple Implementation based on our 4G CUPS component (SPGWU-TINY) 32 | # - VPP-Based Implementation (UPF-VPP) 33 | # * Unified Data Repository (UDR) 34 | 35 | # Not required for now: 36 | # * Network Slicing Selection Function (NSSF) 37 | # * Network Data Analytics Function (NWDAF) 38 | # * Unstructured Data Storage Function (UDSF) 39 | # * Network Exposure Function (NEF) 40 | # * Policy Control Function (PCF) 41 | 42 | 43 | declare -a TAGS 44 | TAG_SPGWU_TINY="v1.5.1" 45 | TAG_AMF="v1.5.1" 46 | TAG_SMF="v1.5.1" 47 | TAG_NRF="v1.5.1" 48 | TAG_UDM="v1.5.1" 49 | TAG_UDR="v1.5.1" 50 | TAG_AUSF="v1.5.1" 51 | TAG_NSSF="v1.5.1" 52 | TAG_NEF="v1.5.1" 53 | TAG_PCF="v1.5.1" 54 | 55 | 56 | mkdir -p ~/src/oai-cn5g 57 | cd ~/src/oai-cn5g 58 | for component in spgwu-tiny amf smf nrf udr udm ausf nssf nef pcf ; do 59 | 60 | echo "====== Cloning ${component^^} ======" 61 | 62 | if [ ! -d oai-cn5g-${component} ] ; then 63 | if [ "${component}" == "spgwu-tiny" ] ; then 64 | git clone -b ${TAG_SPGWU_TINY} --recursive https://github.com/OPENAIRINTERFACE/openair-spgwu-tiny.git oai-cn5g-${component} 65 | else 66 | tag=`eval "echo \\\$TAG_${component^^}"` 67 | if [ "${tag}" == "" ] ; then 68 | echo >&2 "ERROR: Missing tag for ${component^^}!" 69 | exit 1 70 | fi 71 | git clone -b ${tag} --recursive https://gitlab.eurecom.fr/oai/cn5g/oai-cn5g-${component}.git oai-cn5g-${component} 72 | fi 73 | cd oai-cn5g-${component} 74 | else 75 | cd oai-cn5g-${component} 76 | fi 77 | 78 | 79 | echo "====== Preparing build of ${component^^} ======" 80 | cd build/scripts/ 81 | if [ "${component}" == "spgwu-tiny" ] ; then 82 | ./build_spgwu --install-deps --force 83 | ./build_spgwu --clean --Verbose --build-type Debug --jobs 84 | else 85 | ./build_${component} --install-deps --force 86 | ./build_${component} --clean --Verbose --build-type Debug --jobs 87 | fi 88 | 89 | 90 | echo "====== Finished build of ${component^^} ======" 91 | cd ~/src/oai-cn5g 92 | 93 | done 94 | -------------------------------------------------------------------------------- /juju/spgwucharm/actions.yaml: -------------------------------------------------------------------------------- 1 | # ===================================================================== 2 | # ####### ##### # # ### # # # # ### 3 | # # # # # # # ## # ## # # 4 | # # # # # # # # # # # # # 5 | # ##### # #### ##### # # # # # # # # # # 6 | # # # # # # # # # # # # # # 7 | # # # # # # # # # ## # ## # 8 | # ##### ##### # ### # # # # ### 9 | # ===================================================================== 10 | # 11 | # SimulaMet OpenAirInterface Evolved Packet Core VNF and NS 12 | # Copyright (C) 2019-2023 by Thomas Dreibholz 13 | # 14 | # This program is free software: you can redistribute it and/or modify 15 | # it under the terms of the GNU General Public License as published by 16 | # the Free Software Foundation, either version 3 of the License, or 17 | # (at your option) any later version. 18 | # 19 | # This program is distributed in the hope that it will be useful, 20 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | # GNU General Public License for more details. 23 | # 24 | # You should have received a copy of the GNU General Public License 25 | # along with this program. If not, see . 26 | # 27 | # Contact: dreibh@simula.no 28 | 29 | prepare-spgwu-build: 30 | description: Prepares SPGW-U sources 31 | params: 32 | spgwu-git-repository: 33 | description: SPGW-U Git repository 34 | type: string 35 | default: https://github.com/OPENAIRINTERFACE/openair-cn-cups.git 36 | spgwu-git-commit: 37 | description: SPGW-U Git commit 38 | type: string 39 | default: develop 40 | spgwu-S1U-ipv4-interface: 41 | description: SPGW-U S1U IPv4 interface 42 | type: string 43 | default: 192.168.248.159/24 44 | spgwu-S1U-ipv4-gateway: 45 | description: SPGW-U S1U IPv4 gateway 46 | type: string 47 | default: '' 48 | spgwu-SGi-ipv4-interface: 49 | description: SPGW-U SGi IPv4 interface 50 | type: string 51 | default: 10.132.12.230/24 52 | spgwu-SGi-ipv4-gateway: 53 | description: SPGW-U SGi IPv4 gateway 54 | type: string 55 | default: 10.132.12.1 56 | spgwu-SGi-ipv6-interface: 57 | description: SPGW-U SGi IPv6 interface 58 | type: string 59 | default: 3ffe::2/64 60 | spgwu-SGi-ipv6-gateway: 61 | description: SPGW-U SGi IPv6 gateway 62 | type: string 63 | default: 3ffe::1 64 | git-name: 65 | description: Git name 66 | type: string 67 | default: Thomas Dreibholz 68 | git-email: 69 | description: Git E-mail 70 | type: string 71 | default: dreibh@simula.no 72 | required: 73 | - spgwu-git-repository 74 | - spgwu-git-commit 75 | - spgwu-S1U-ipv4-interface 76 | - spgwu-S1U-ipv4-gateway 77 | - spgwu-SGi-ipv4-interface 78 | - spgwu-SGi-ipv4-gateway 79 | - spgwu-SGi-ipv6-interface 80 | - spgwu-SGi-ipv6-gateway 81 | 82 | configure-spgwu: 83 | description: Configures the SPGW-U 84 | params: 85 | spgwu-spgwc-list: 86 | description: SPGW-U SPGW-C list (comma-separated) 87 | type: string 88 | default: 172.55.55.101 89 | required: 90 | - spgwu-spgwc-list 91 | 92 | restart-spgwu: 93 | description: Restarts the SPGW-U 94 | -------------------------------------------------------------------------------- /tests/reinstall-spgwc: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | 3 | sudo service spgwc stop 4 | 5 | sudo rm -rf /usr/local 6 | sudo mkdir -p /usr/local/bin 7 | 8 | sudo apt install -fy 9 | sudo updatedb 10 | 11 | 12 | # ------ Fetching Git repository openair-spgwc ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 13 | time bash -c "cd /home/nornetpp/src && \ 14 | if [ ! -d \"openair-spgwc\" ] ; then git clone --quiet https://github.com/simula/openairinterface-openair-spgwc.git openair-spgwc && cd openair-spgwc ; else cd openair-spgwc && git pull ; fi && \ 15 | git checkout 2020.w36" 16 | # ------ Building SPGW-C dependencies ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 17 | time bash -c "echo \"ZXhwb3J0IE1BS0VGTEFHUz0iLWpgbnByb2NgIiAmJiBcCmNkIC9ob21lL25vcm5ldHBwL3NyYy9vcGVuYWlyLXNwZ3djL2J1aWxkL3NjcmlwdHMgJiYgXApta2RpciAtcCBsb2dzICYmIFwKLi9idWlsZF9zcGd3YyAtSSAtZiA+bG9ncy9idWlsZF9zcGd3Yy0xLmxvZyAyPiYxCg==\" | base64 -d | /bin/bash -x" 18 | # ------ Building SPGW-C itself ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 19 | time bash -c "echo \"ZXhwb3J0IE1BS0VGTEFHUz0iLWpgbnByb2NgIiAmJiBcCmNkIC9ob21lL25vcm5ldHBwL3NyYy9vcGVuYWlyLXNwZ3djL2J1aWxkL3NjcmlwdHMgJiYgXAouL2J1aWxkX3NwZ3djIC1jIC1WIC1iIERlYnVnIC1qID5sb2dzL2J1aWxkX3NwZ3djLTIubG9nIDI+JjEK\" | base64 -d | /bin/bash -x" 20 | # ------ Configuring SPGW-C -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 21 | time bash -c "echo \"Y2QgL2hvbWUvbm9ybmV0cHAvc3JjL29wZW5haXItc3Bnd2MvYnVpbGQvc2NyaXB0cyAmJiBcCklOU1RBTkNFPTEgJiYgXApQUkVGSVg9Jy91c3IvbG9jYWwvZXRjL29haScgJiYgXApzdWRvIG1rZGlyIC1tIDA3NzcgLXAgJFBSRUZJWCAmJiBcCnN1ZG8gY3AgLi4vLi4vZXRjL3NwZ3dfYy5jb25mICRQUkVGSVggJiYgXApkZWNsYXJlIC1BIFNQR1dDX0NPTkYgJiYgXApTUEdXQ19DT05GW0BJTlNUQU5DRUBdPSRJTlNUQU5DRSAmJiBcClNQR1dDX0NPTkZbQFBSRUZJWEBdPSRQUkVGSVggJiYgXApTUEdXQ19DT05GW0BQSURfRElSRUNUT1JZQF09Jy92YXIvcnVuJyAmJiBcClNQR1dDX0NPTkZbQFNHV19JTlRFUkZBQ0VfTkFNRV9GT1JfUzExQF09J2VuczUnICYmIFwKU1BHV0NfQ09ORltAU0dXX0lOVEVSRkFDRV9OQU1FX0ZPUl9TNV9TOF9DUEBdPSdkdW1teTAnICYmIFwKU1BHV0NfQ09ORltAU0dXX0lQX0ZPUl9TNV9TOF9DUEBdPScxNzIuNTguNTguMTAyJyAmJiBcClNQR1dDX0NPTkZbQFBHV19JTlRFUkZBQ0VfTkFNRV9GT1JfUzVfUzhfQ1BAXT0nZHVtbXkxJyAmJiBcClNQR1dDX0NPTkZbQFBHV19JUF9GT1JfUzVfUzhfQ1BAXT0nMTcyLjU4LjU4LjEwMScgJiYgXApTUEdXQ19DT05GW0BQR1dfSU5URVJGQUNFX05BTUVfRk9SX1NYQF09J2VuczQnICYmIFwKU1BHV0NfQ09ORltAVUVfSVBfQUREUkVTU19QT09MQF09JzEyLjEuMS4yIC0gMTIuMS4xLjEyOCcgJiYgXApTUEdXQ19DT05GW0BQVVNIX1BST1RPQ09MX09QVElPTkBdPSdubycgJiYgXApTUEdXQ19DT05GW0BERUZBVUxUX0ROU19JUFY0X0FERFJFU1NAXT0nMTAuMS4xLjEnICYmIFwKU1BHV0NfQ09ORltAREVGQVVMVF9ETlNfU0VDX0lQVjRfQUREUkVTU0BdPScxMC4xLjIuMScgJiYgXApTUEdXQ19DT05GW0BERUZBVUxUX0FQTkBdPSdkZWZhdWx0LnNpbXVsYS5ub3JuZXQnICYmIFwKZm9yIEsgaW4gIiR7IVNQR1dDX0NPTkZbQF19IjsgZG8gc3VkbyBlZ3JlcCAtbFJaICIkSyIgJFBSRUZJWCB8IHhhcmdzIC0wIC1sIHN1ZG8gc2VkIC1pIC1lICJzfCRLfCR7U1BHV0NfQ09ORlskS119fGciIDsgcmV0PSQ/O1tbIHJldCAtbmUgMCBdXSAmJiBlY2hvICJUcmllZCB0byByZXBsYWNlICRLIHdpdGggJHtTUEdXQ19DT05GWyRLXX0iIHx8IHRydWUgOyBkb25lICYmIFwKc3VkbyBzZWQgLWUgInMvQVBOX05JID0gXCJkZWZhdWx0XCIvQVBOX05JID0gXCJkZWZhdWx0LnNpbXVsYS5ub3JuZXRcIi9nIiAtaSAvdXNyL2xvY2FsL2V0Yy9vYWkvc3Bnd19jLmNvbmYgJiYgXApzdWRvIHNlZCAtZSAicy9BUE5fTkkgPSBcImFwbjFcIi9BUE5fTkkgPSBcImludGVybmV0LnNpbXVsYS5ub3JuZXRcIi9nIiAtaSAvdXNyL2xvY2FsL2V0Yy9vYWkvc3Bnd19jLmNvbmYK\" | base64 -d | /bin/bash -x" 22 | -------------------------------------------------------------------------------- /juju/hsscharm/actions.yaml: -------------------------------------------------------------------------------- 1 | # ===================================================================== 2 | # ####### ##### # # ### # # # # ### 3 | # # # # # # # ## # ## # # 4 | # # # # # # # # # # # # # 5 | # ##### # #### ##### # # # # # # # # # # 6 | # # # # # # # # # # # # # # 7 | # # # # # # # # # ## # ## # 8 | # ##### ##### # ### # # # # ### 9 | # ===================================================================== 10 | # 11 | # SimulaMet OpenAirInterface Evolved Packet Core VNF and NS 12 | # Copyright (C) 2019-2023 by Thomas Dreibholz 13 | # 14 | # This program is free software: you can redistribute it and/or modify 15 | # it under the terms of the GNU General Public License as published by 16 | # the Free Software Foundation, either version 3 of the License, or 17 | # (at your option) any later version. 18 | # 19 | # This program is distributed in the hope that it will be useful, 20 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | # GNU General Public License for more details. 23 | # 24 | # You should have received a copy of the GNU General Public License 25 | # along with this program. If not, see . 26 | # 27 | # Contact: dreibh@simula.no 28 | 29 | prepare-cassandra-hss-build: 30 | description: Prepares Cassandra and HSS sources 31 | params: 32 | hss-git-repository: 33 | description: HSS Git repository 34 | type: string 35 | default: https://github.com/OPENAIRINTERFACE/openair-cn.git 36 | hss-git-commit: 37 | description: HSS Git commit 38 | type: string 39 | default: develop 40 | git-name: 41 | description: Git name 42 | type: string 43 | default: Thomas Dreibholz 44 | git-email: 45 | description: Git E-mail 46 | type: string 47 | default: dreibh@simula.no 48 | required: 49 | - hss-git-repository 50 | - hss-git-commit 51 | 52 | configure-cassandra: 53 | description: Configures Cassandra 54 | params: 55 | cassandra-server-ip: 56 | description: Cassandra Server IP 57 | type: string 58 | default: 172.16.6.129 59 | required: 60 | - cassandra-server-ip 61 | 62 | configure-hss: 63 | description: Configures the HSS 64 | params: 65 | cassandra-server-ip: 66 | description: Cassandra Server IP 67 | type: string 68 | default: 172.16.6.129 69 | hss-S6a-address: 70 | description: HSS S6A IPv4 Interface 71 | type: string 72 | default: 172.16.6.129 73 | mme-S6a-address: 74 | description: MME S6A IPv4 Interface 75 | type: string 76 | default: 172.16.6.2 77 | network-realm: 78 | description: Network realm 79 | type: string 80 | default: simula.nornet 81 | network-op: 82 | description: OP 83 | type: string 84 | default: '1006020f0a478bf6b699f15c062e42b3' 85 | network-k: 86 | description: K 87 | type: string 88 | default: '449c4b91aeacd0ace182cf3a5a72bfa1' 89 | network-imsi-first: 90 | description: First IMSI 91 | type: string 92 | default: '242881234500000' 93 | network-msisdn-first: 94 | description: First MSISDN 95 | type: string 96 | default: '24288880000000' 97 | network-users: 98 | description: Number of users 99 | type: string 100 | default: '1024' 101 | required: 102 | - cassandra-server-ip 103 | - hss-S6a-address 104 | - mme-S6a-address 105 | - network-realm 106 | - network-op 107 | - network-k 108 | - network-imsi-first 109 | - network-msisdn-first 110 | - network-users 111 | 112 | restart-hss: 113 | description: Restarts the HSS 114 | -------------------------------------------------------------------------------- /juju/flexrancharm/metrics.yaml: -------------------------------------------------------------------------------- 1 | metrics: 2 | # ====== System metrics ================================================== 3 | system_random: 4 | type: gauge 5 | description: "just a random byte" 6 | command: od -A n -t d -N 1 /dev/urandom 7 | system_uptime: 8 | type: gauge 9 | description: "Uptime in h" 10 | command: cat /proc/uptime | gawk '{ uptime_h=$1/3600.0 } END { print uptime_h }' 11 | system_users: 12 | type: gauge 13 | description: "Number of users" 14 | command: who|wc -l 15 | 16 | # ====== CPU metrics ===================================================== 17 | cpu_processes: 18 | type: gauge 19 | description: "Number of processes" 20 | command: ps ax | wc -l 21 | cpu_load_1min: 22 | type: gauge 23 | description: "1 minute load average in percent" 24 | command: cat /proc/loadavg | gawk '{ load1min_pct=100.0*$1 } END { print load1min_pct }' 25 | cpu_load_5min: 26 | type: gauge 27 | description: "5 minute load average in percent" 28 | command: cat /proc/loadavg | gawk '{ load5min_pct=100.0*$2 } END { print load5min_pct }' 29 | cpu_load_15min: 30 | type: gauge 31 | description: "15 minute load average in percent" 32 | command: cat /proc/loadavg | gawk '{ load15min_pct=100.0*$3 } END { print load15min_pct }' 33 | 34 | # ====== Memory metrics ================================================== 35 | memory_ram_usage: 36 | type: gauge 37 | description: "RAM memory usage in percent" 38 | command: cat /proc/meminfo | gawk '/^MemTotal:/ { total=$2 } /^MemAvailable:/ { available=$2 } END { print 100.0*(total-available)/total }' 39 | memory_swap_usage: 40 | type: gauge 41 | description: "Swap memory usage in percent" 42 | command: cat /proc/meminfo | gawk '/^SwapTotal:/ { total=$2 } /^SwapFree:/ { available=$2 } END { print 100.0*(total-available)/total }' 43 | 44 | # ====== Disk metrics ==================================================== 45 | disk_usage: 46 | type: gauge 47 | description: "Disk usage for / in percent" 48 | command: df / | tail -n1 | gawk '{ total=$2 ; used=$3 ; available=$4 ; print 100.0*(total-available)/total }' 49 | 50 | # ====== Network metrics ================================================= 51 | network_mgmt_bytes_in: 52 | type: gauge 53 | description: "Bytes received on mgmt interface ens3" 54 | command: cat /proc/net/dev | gawk '/ens3:/ { inB=$2 ; inP=$3 ; outB=$10 ; outP=$11 ; print inB }' 55 | network_mgmt_packets_in: 56 | type: gauge 57 | description: "Packets received on mgmt interface ens3" 58 | command: cat /proc/net/dev | gawk '/ens3:/ { inB=$2 ; inP=$3 ; outB=$10 ; outP=$11 ; print inP }' 59 | network_mgmt_bytes_out: 60 | type: gauge 61 | description: "Bytes sent on mgmt interface ens3" 62 | command: cat /proc/net/dev | gawk '/ens3:/ { inB=$2 ; inP=$3 ; outB=$10 ; outP=$11 ; print outB }' 63 | network_mgmt_packets_out: 64 | type: gauge 65 | description: "Packets sent on mgmt interface ens3" 66 | command: cat /proc/net/dev | gawk '/ens3:/ { inB=$2 ; inP=$3 ; outB=$10 ; outP=$11 ; print outP }' 67 | 68 | network_service_bytes_in: 69 | type: gauge 70 | description: "Bytes received on service interface ens4" 71 | command: cat /proc/net/dev | gawk '/ens4:/ { inB=$2 ; inP=$3 ; outB=$10 ; outP=$11 ; print inB }' 72 | network_service_packets_in: 73 | type: gauge 74 | description: "Packets received on service interface ens4" 75 | command: cat /proc/net/dev | gawk '/ens4:/ { inB=$2 ; inP=$3 ; outB=$10 ; outP=$11 ; print inP }' 76 | network_service_bytes_out: 77 | type: gauge 78 | description: "Bytes sent on service interface ens4" 79 | command: cat /proc/net/dev | gawk '/ens4:/ { inB=$2 ; inP=$3 ; outB=$10 ; outP=$11 ; print outB }' 80 | network_service_packets_out: 81 | type: gauge 82 | description: "Packets sent on service interface ens4" 83 | command: cat /proc/net/dev | gawk '/ens4:/ { inB=$2 ; inP=$3 ; outB=$10 ; outP=$11 ; print outP }' 84 | -------------------------------------------------------------------------------- /juju/oai5gdockercharm/metrics.yaml: -------------------------------------------------------------------------------- 1 | metrics: 2 | # ====== System metrics ================================================== 3 | system_random: 4 | type: gauge 5 | description: "just a random byte" 6 | command: od -A n -t d -N 1 /dev/urandom 7 | system_uptime: 8 | type: gauge 9 | description: "Uptime in h" 10 | command: cat /proc/uptime | gawk '{ uptime_h=$1/3600.0 } END { print uptime_h }' 11 | system_users: 12 | type: gauge 13 | description: "Number of users" 14 | command: who|wc -l 15 | 16 | # ====== CPU metrics ===================================================== 17 | cpu_processes: 18 | type: gauge 19 | description: "Number of processes" 20 | command: ps ax | wc -l 21 | cpu_load_1min: 22 | type: gauge 23 | description: "1 minute load average in percent" 24 | command: cat /proc/loadavg | gawk '{ load1min_pct=100.0*$1 } END { print load1min_pct }' 25 | cpu_load_5min: 26 | type: gauge 27 | description: "5 minute load average in percent" 28 | command: cat /proc/loadavg | gawk '{ load5min_pct=100.0*$2 } END { print load5min_pct }' 29 | cpu_load_15min: 30 | type: gauge 31 | description: "15 minute load average in percent" 32 | command: cat /proc/loadavg | gawk '{ load15min_pct=100.0*$3 } END { print load15min_pct }' 33 | 34 | # ====== Memory metrics ================================================== 35 | memory_ram_usage: 36 | type: gauge 37 | description: "RAM memory usage in percent" 38 | command: cat /proc/meminfo | gawk '/^MemTotal:/ { total=$2 } /^MemAvailable:/ { available=$2 } END { print 100.0*(total-available)/total }' 39 | memory_swap_usage: 40 | type: gauge 41 | description: "Swap memory usage in percent" 42 | command: cat /proc/meminfo | gawk '/^SwapTotal:/ { total=$2 } /^SwapFree:/ { available=$2 } END { print 100.0*(total-available)/total }' 43 | 44 | # ====== Disk metrics ==================================================== 45 | disk_usage: 46 | type: gauge 47 | description: "Disk usage for / in percent" 48 | command: df / | tail -n1 | gawk '{ total=$2 ; used=$3 ; available=$4 ; print 100.0*(total-available)/total }' 49 | 50 | # ====== Network metrics ================================================= 51 | network_mgmt_bytes_in: 52 | type: gauge 53 | description: "Bytes received on mgmt interface ens3" 54 | command: cat /proc/net/dev | gawk '/ens3:/ { inB=$2 ; inP=$3 ; outB=$10 ; outP=$11 ; print inB }' 55 | network_mgmt_packets_in: 56 | type: gauge 57 | description: "Packets received on mgmt interface ens3" 58 | command: cat /proc/net/dev | gawk '/ens3:/ { inB=$2 ; inP=$3 ; outB=$10 ; outP=$11 ; print inP }' 59 | network_mgmt_bytes_out: 60 | type: gauge 61 | description: "Bytes sent on mgmt interface ens3" 62 | command: cat /proc/net/dev | gawk '/ens3:/ { inB=$2 ; inP=$3 ; outB=$10 ; outP=$11 ; print outB }' 63 | network_mgmt_packets_out: 64 | type: gauge 65 | description: "Packets sent on mgmt interface ens3" 66 | command: cat /proc/net/dev | gawk '/ens3:/ { inB=$2 ; inP=$3 ; outB=$10 ; outP=$11 ; print outP }' 67 | 68 | network_service_bytes_in: 69 | type: gauge 70 | description: "Bytes received on service interface ens4" 71 | command: cat /proc/net/dev | gawk '/ens4:/ { inB=$2 ; inP=$3 ; outB=$10 ; outP=$11 ; print inB }' 72 | network_service_packets_in: 73 | type: gauge 74 | description: "Packets received on service interface ens4" 75 | command: cat /proc/net/dev | gawk '/ens4:/ { inB=$2 ; inP=$3 ; outB=$10 ; outP=$11 ; print inP }' 76 | network_service_bytes_out: 77 | type: gauge 78 | description: "Bytes sent on service interface ens4" 79 | command: cat /proc/net/dev | gawk '/ens4:/ { inB=$2 ; inP=$3 ; outB=$10 ; outP=$11 ; print outB }' 80 | network_service_packets_out: 81 | type: gauge 82 | description: "Packets sent on service interface ens4" 83 | command: cat /proc/net/dev | gawk '/ens4:/ { inB=$2 ; inP=$3 ; outB=$10 ; outP=$11 ; print outP }' 84 | -------------------------------------------------------------------------------- /juju/mmecharm/actions.yaml: -------------------------------------------------------------------------------- 1 | # ===================================================================== 2 | # ####### ##### # # ### # # # # ### 3 | # # # # # # # ## # ## # # 4 | # # # # # # # # # # # # # 5 | # ##### # #### ##### # # # # # # # # # # 6 | # # # # # # # # # # # # # # 7 | # # # # # # # # # ## # ## # 8 | # ##### ##### # ### # # # # ### 9 | # ===================================================================== 10 | # 11 | # SimulaMet OpenAirInterface Evolved Packet Core VNF and NS 12 | # Copyright (C) 2019-2023 by Thomas Dreibholz 13 | # 14 | # This program is free software: you can redistribute it and/or modify 15 | # it under the terms of the GNU General Public License as published by 16 | # the Free Software Foundation, either version 3 of the License, or 17 | # (at your option) any later version. 18 | # 19 | # This program is distributed in the hope that it will be useful, 20 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | # GNU General Public License for more details. 23 | # 24 | # You should have received a copy of the GNU General Public License 25 | # along with this program. If not, see . 26 | # 27 | # Contact: dreibh@simula.no 28 | 29 | prepare-mme-build: 30 | description: Prepares MME sources 31 | params: 32 | mme-git-repository: 33 | description: MME Git repository 34 | type: string 35 | default: https://github.com/OPENAIRINTERFACE/openair-cn.git 36 | mme-git-commit: 37 | description: MME Git commit 38 | type: string 39 | default: develop 40 | mme-S1C-ipv4-interface: 41 | description: MME S1C IPv4 interface 42 | type: string 43 | default: 192.168.247.102/24 44 | mme-S1C-ipv4-gateway: 45 | description: MME S1C IPv4 gateway 46 | type: string 47 | default: '' 48 | mme-S1C-ipv6-interface: 49 | description: MME S1C IPv6 interface 50 | type: string 51 | default: '' 52 | mme-S1C-ipv6-gateway: 53 | description: MME S1C IPv6 gateway 54 | type: string 55 | default: '' 56 | git-name: 57 | description: Git name 58 | type: string 59 | default: Thomas Dreibholz 60 | git-email: 61 | description: Git E-mail 62 | type: string 63 | default: dreibh@simula.no 64 | required: 65 | - mme-git-repository 66 | - mme-git-commit 67 | - mme-S1C-ipv4-interface 68 | - mme-S1C-ipv4-gateway 69 | - mme-S1C-ipv6-interface 70 | - mme-S1C-ipv6-gateway 71 | 72 | configure-mme: 73 | description: Configures the MME 74 | params: 75 | mme-S1C-ipv4-interface: 76 | description: MME S1C IPv4 interface 77 | type: string 78 | default: 192.168.247.102/24 79 | mme-S11-ipv4-interface: 80 | description: MME S11 IPv4 interface 81 | type: string 82 | default: 172.16.1.102/24 83 | spgwc-S11-ipv4-interface: 84 | description: SPGW-C S11 IPv4 interface 85 | type: string 86 | default: 172.16.1.104/24 87 | hss-S6a-address: 88 | description: HSS S6A IPv4 Interface 89 | type: string 90 | default: 172.16.6.129 91 | network-realm: 92 | description: Network realm 93 | type: string 94 | default: simula.nornet 95 | network-mcc: 96 | description: Mobile Country Code (MCC) 97 | data-type: string 98 | default: '242' 99 | network-mnc: 100 | description: Mobile Network Code (MNC) 101 | data-type: string 102 | default: '88' 103 | required: 104 | - mme-S1C-ipv4-interface 105 | - mme-S11-ipv4-interface 106 | - spgwc-S11-ipv4-interface 107 | - hss-S6a-address 108 | - network-realm 109 | - network-mcc 110 | - network-mnc 111 | 112 | restart-mme: 113 | description: Restarts the MME 114 | -------------------------------------------------------------------------------- /tests/clone-mosaic5g-repositories: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | # ================================================================= 3 | # # # # # 4 | # ## # #### ##### ## # ###### ##### 5 | # # # # # # # # # # # # # 6 | # # # # # # # # # # # ##### # 7 | # # # # # # ##### # # # # # 8 | # # ## # # # # # ## # # 9 | # # # #### # # # # ###### # 10 | # 11 | # --- The NorNet Testbed for Multi-Homed Systems --- 12 | # https://www.nntb.no 13 | # ================================================================= 14 | # 15 | # Copy Mosaic5G repositories 16 | # Copyright (C) 2019-2023 by Thomas Dreibholz 17 | # 18 | # This program is free software: you can redistribute it and/or modify 19 | # it under the terms of the GNU General Public License as published by 20 | # the Free Software Foundation, either version 3 of the License, or 21 | # (at your option) any later version. 22 | # 23 | # This program is distributed in the hope that it will be useful, 24 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 25 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 26 | # GNU General Public License for more details. 27 | # 28 | # You should have received a copy of the GNU General Public License 29 | # along with this program. If not, see . 30 | # 31 | # Contact: dreibh@simula.no 32 | 33 | OLD_SERVER="https://gitlab.eurecom.fr/" 34 | NEW_SERVER_GIT="git@github.com:simula/mosaic5g-" 35 | NEW_SERVER_HTTPS="https://github.com/simula/mosaic5g-" 36 | NEW_OAI_SERVER_GIT="git@bitbucket.org:dreibh/mosaic5g-" 37 | NEW_OAI_SERVER_HTTPS="https://bitbucket.org/dreibh/mosaic5g-" 38 | REPOSITORIES="mosaic5g/mosaic5g flexran/flexran-rtc mosaic5g/jox mosaic5g/kube5g mosaic5g/ll-mec oai/openair-cn oai/openairinterface5g mosaic5g/store mosaic5g/ll-mec-ovs" 39 | 40 | WORKDIR=`pwd`/repositories 41 | mkdir -p ${WORKDIR} 42 | 43 | cd ${WORKDIR} 44 | mkdir -p flexran mosaic5g oai 45 | 46 | 47 | # ====== Mirror all repositories ============================================ 48 | for repository in ${REPOSITORIES} ; do 49 | echo "" 50 | echo "###### ${repository} ######" 51 | 52 | if [ ! -e ${repository}.mirror ] ; then 53 | git clone -q --mirror ${OLD_SERVER}${repository}.git ${repository}.mirror 54 | else 55 | cd ${repository}.mirror 56 | git fetch -q --all 57 | cd ${WORKDIR} 58 | fi 59 | 60 | cd ${repository}.mirror 61 | 62 | echo "==== Updating repository URL ====" 63 | newRepository=`echo "${repository}" | sed -e "s#.*/##g"` 64 | if [[ "${repository}" =~ ^oai/openairinterface5g$ ]] ; then 65 | git remote set-url origin ${NEW_OAI_SERVER_GIT}${newRepository}.git 66 | else 67 | git remote set-url origin ${NEW_SERVER_GIT}${newRepository}.git 68 | fi 69 | 70 | echo "==== Push ====" 71 | git push --mirror || true 72 | 73 | cd ${WORKDIR} 74 | done 75 | 76 | 77 | # ====== Update submodule URLs in main repository =========================== 78 | for repository in mosaic5g/mosaic5g ; do 79 | echo "" 80 | echo "###### ${repository} ######" 81 | 82 | if [ ! -e ${repository} ] ; then 83 | newRepository=`echo "${repository}" | sed -e "s#.*/##g"` 84 | git clone -q ${NEW_SERVER_GIT}${newRepository}.git ${repository} 85 | else 86 | cd ${repository} 87 | git fetch -q --all 88 | cd ${WORKDIR} 89 | fi 90 | 91 | cd ${repository} 92 | 93 | if [ -e .gitmodules ] ; then 94 | echo "==== Updating submodule URLs ====" 95 | sed -e "s#url = ${OLD_SERVER}\(oai/openairinterface5g\)#url = ${NEW_OAI_SERVER_HTTPS}openairinterface5g#g" \ 96 | -e "s#url = ${OLD_SERVER}\(mosaic5g/\|oai/\|flexran/\)#url = ${NEW_SERVER_HTTPS}#g" \ 97 | -i .gitmodules && \ 98 | git commit -m "Updated submodule URLs" .gitmodules && \ 99 | git push 100 | fi 101 | 102 | cd ${WORKDIR} 103 | done 104 | 105 | 106 | echo "" 107 | echo "***** Cloning finished successfully! *****" 108 | echo "" 109 | -------------------------------------------------------------------------------- /juju/hsscharm/metrics.yaml: -------------------------------------------------------------------------------- 1 | metrics: 2 | # ====== System metrics ================================================== 3 | system_random: 4 | type: gauge 5 | description: "just a random byte" 6 | command: od -A n -t d -N 1 /dev/urandom 7 | system_uptime: 8 | type: gauge 9 | description: "Uptime in h" 10 | command: cat /proc/uptime | gawk '{ uptime_h=$1/3600.0 } END { print uptime_h }' 11 | system_users: 12 | type: gauge 13 | description: "Number of users" 14 | command: who|wc -l 15 | 16 | # ====== CPU metrics ===================================================== 17 | cpu_processes: 18 | type: gauge 19 | description: "Number of processes" 20 | command: ps ax | wc -l 21 | cpu_load_current: 22 | type: gauge 23 | description: "current load in percent" 24 | command: env LANG=C top -b -n 2 | grep '^%Cpu' | tail -n1 | sed -e 's#^.* \([0-9]*\)[\.,]\([0-9]*[ \t]*\) id.*$#100.0-\1.\2#g' | bc 25 | cpu_load_1min: 26 | type: gauge 27 | description: "1 minute load average in percent" 28 | command: cat /proc/loadavg | gawk '{ load1min_pct=100.0*$1 } END { print load1min_pct }' 29 | cpu_load_5min: 30 | type: gauge 31 | description: "5 minute load average in percent" 32 | command: cat /proc/loadavg | gawk '{ load5min_pct=100.0*$2 } END { print load5min_pct }' 33 | cpu_load_15min: 34 | type: gauge 35 | description: "15 minute load average in percent" 36 | command: cat /proc/loadavg | gawk '{ load15min_pct=100.0*$3 } END { print load15min_pct }' 37 | 38 | # ====== Memory metrics ================================================== 39 | memory_ram_usage: 40 | type: gauge 41 | description: "RAM memory usage in percent" 42 | command: cat /proc/meminfo | gawk '/^MemTotal:/ { total=$2 } /^MemAvailable:/ { available=$2 } END { print 100.0*(total-available)/total }' 43 | memory_swap_usage: 44 | type: gauge 45 | description: "Swap memory usage in percent" 46 | command: cat /proc/meminfo | gawk '/^SwapTotal:/ { total=$2 } /^SwapFree:/ { available=$2 } END { print 100.0*(total-available)/total }' 47 | 48 | # ====== Disk metrics ==================================================== 49 | disk_usage: 50 | type: gauge 51 | description: "Disk usage for / in percent" 52 | command: df / | tail -n1 | gawk '{ total=$2 ; used=$3 ; available=$4 ; print 100.0*(total-available)/total }' 53 | 54 | # ====== Network metrics ================================================= 55 | network_mgmt_bytes_in: 56 | type: gauge 57 | description: "Bytes received on mgmt interface ens3" 58 | command: cat /proc/net/dev | gawk '/ens3:/ { inB=$2 ; inP=$3 ; outB=$10 ; outP=$11 ; print inB }' 59 | network_mgmt_packets_in: 60 | type: gauge 61 | description: "Packets received on mgmt interface ens3" 62 | command: cat /proc/net/dev | gawk '/ens3:/ { inB=$2 ; inP=$3 ; outB=$10 ; outP=$11 ; print inP }' 63 | network_mgmt_bytes_out: 64 | type: gauge 65 | description: "Bytes sent on mgmt interface ens3" 66 | command: cat /proc/net/dev | gawk '/ens3:/ { inB=$2 ; inP=$3 ; outB=$10 ; outP=$11 ; print outB }' 67 | network_mgmt_packets_out: 68 | type: gauge 69 | description: "Packets sent on mgmt interface ens3" 70 | command: cat /proc/net/dev | gawk '/ens3:/ { inB=$2 ; inP=$3 ; outB=$10 ; outP=$11 ; print outP }' 71 | 72 | network_S6a_bytes_in: 73 | type: gauge 74 | description: "Bytes received on S6a interface ens4" 75 | command: cat /proc/net/dev | gawk '/ens4:/ { inB=$2 ; inP=$3 ; outB=$10 ; outP=$11 ; print inB }' 76 | network_S6a_packets_in: 77 | type: gauge 78 | description: "Packets received on S6a interface ens4" 79 | command: cat /proc/net/dev | gawk '/ens4:/ { inB=$2 ; inP=$3 ; outB=$10 ; outP=$11 ; print inP }' 80 | network_S6a_bytes_out: 81 | type: gauge 82 | description: "Bytes sent on S6a interface ens4" 83 | command: cat /proc/net/dev | gawk '/ens4:/ { inB=$2 ; inP=$3 ; outB=$10 ; outP=$11 ; print outB }' 84 | network_S6a_packets_out: 85 | type: gauge 86 | description: "Packets sent on S6a interface ens4" 87 | command: cat /proc/net/dev | gawk '/ens4:/ { inB=$2 ; inP=$3 ; outB=$10 ; outP=$11 ; print outP }' 88 | -------------------------------------------------------------------------------- /evaluation/Run-MeasurementM2EC2020: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | # ===================================================================== 3 | # ####### ##### # # ### # # # # ### 4 | # # # # # # # ## # ## # # 5 | # # # # # # # # # # # # # 6 | # ##### # #### ##### # # # # # # # # # # 7 | # # # # # # # # # # # # # # 8 | # # # # # # # # # ## # ## # 9 | # ##### ##### # ### # # # # ### 10 | # ===================================================================== 11 | # 12 | # SimulaMet OpenAirInterface Evolved Packet Core VNF and NS 13 | # Copyright (C) 2019-2023 by Thomas Dreibholz 14 | # 15 | # This program is free software: you can redistribute it and/or modify 16 | # it under the terms of the GNU General Public License as published by 17 | # the Free Software Foundation, either version 3 of the License, or 18 | # (at your option) any later version. 19 | # 20 | # This program is distributed in the hope that it will be useful, 21 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 22 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 23 | # GNU General Public License for more details. 24 | # 25 | # You should have received a copy of the GNU General Public License 26 | # along with this program. If not, see . 27 | # 28 | # Contact: dreibh@simula.no 29 | 30 | 31 | DIRECTORY="MeasurementM2EC2020" 32 | DESTINATION="10.1.1.249:9000" 33 | INTERFACE="any" 34 | # DESTINATION="localhost" 35 | # INTERFACE="lo" 36 | RUNTIME=20 37 | 38 | 39 | # ====== Initialise ========================================================= 40 | if [ "${SUDO_UID}:${SUDO_GID}" == ":" ] ; then 41 | echo >&2 "ERROR: Run this script with sudo, since it has to enable ECN and start tcpdump!" 42 | exit 1 43 | fi 44 | 45 | sudo sysctl net.ipv4.tcp_ecn=1 46 | 47 | sudo -u#${SUDO_UID} -g#${SUDO_GID} mkdir -p ${DIRECTORY} 48 | SUMMARY_OLD="${DIRECTORY}/results.summary" 49 | SUMMARY_NEW="${DIRECTORY}/results.summary.new" 50 | SUMMARY_UPDATED="${DIRECTORY}/results.summary.updated" 51 | ( 52 | echo "--varnames=\"TimeStamp Scenario Protocol Runtime FlowParameters\"" 53 | echo "--resultsdirectory=${DIRECTORY}" 54 | ) >${SUMMARY_NEW} 55 | 56 | 57 | # ====== Run measurements =================================================== 58 | for scenario in Upload Download Bidirectional ; do # Bidirectional 59 | for protocol in tcp sctp ; do 60 | if [ "${scenario}" == "Bidirectional" ] ; then 61 | flowParameters="const0:const1400:const0:const1400:sndbuf=0,rcvbuf=0" 62 | elif [ "${scenario}" == "Upload" ] ; then 63 | flowParameters="const0:const1400:const0:const0:sndbuf=0,rcvbuf=0" 64 | elif [ "${scenario}" == "Download" ] ; then 65 | flowParameters="const0:const0:const0:const1400:sndbuf=0,rcvbuf=0" 66 | else 67 | echo >&2 "ERROR: Bad scenario ${scenario}!" 68 | exit 1 69 | fi 70 | 71 | now=`date +%FT%H:%M:%S.%N` 72 | echo "" 73 | echo "====== ${now}: ${protocol^^}, ${flowParameters} ======" 74 | 75 | values="${now} ${scenario} ${protocol^^} ${RUNTIME} ${flowParameters}" 76 | id=`echo "${now}: ${values}" | sha256 -x` 77 | scalarFile="${DIRECTORY}/${id}.sca" 78 | scalarFileA="${DIRECTORY}/${id}-active.sca" 79 | scalarFileP="${DIRECTORY}/${id}-passive.sca" 80 | vectorFile="${DIRECTORY}/${id}.vec" 81 | pcapFile="${DIRECTORY}/${id}.pcap" 82 | 83 | ( 84 | echo "--values=${values}" 85 | echo "--input=${scalarFileA}" 86 | echo "--values=${values}" 87 | echo "--input=${scalarFileP}" 88 | ) >>${SUMMARY_NEW} 89 | 90 | 91 | echo "Starting tcpdump ..." 92 | tcpdump -i ${INTERFACE} -w "${pcapFile}" -s 65536 & 93 | 94 | echo "Starting NetPerfMeter ..." 95 | sudo -u#${SUDO_UID} -g#${SUDO_GID} netperfmeter ${DESTINATION} \ 96 | -quiet -runtime=${RUNTIME} \ 97 | -vector="${vectorFile}" -scalar="${scalarFile}" \ 98 | -${protocol} ${flowParameters} 99 | 100 | echo "Stopping tcpdump ..." 101 | killall tcpdump 102 | wait 103 | 104 | chown ${SUDO_UID}:${SUDO_GID} ${DIRECTORY}/${id}* 105 | xz -T0 "${pcapFile}" 106 | done 107 | done 108 | 109 | 110 | # ====== Prepare results ==================================================== 111 | cat ${SUMMARY_NEW} >${SUMMARY_UPDATED} 112 | if [ -e "${SUMMARY_OLD}" ] ; then 113 | grep -v ^--varnames= ${SUMMARY_OLD} | grep -v ^--resultsdirectory= >>${SUMMARY_UPDATED} 114 | fi 115 | mv ${SUMMARY_UPDATED} ${SUMMARY_OLD} 116 | chown ${SUDO_UID}:${SUDO_GID} ${SUMMARY_OLD} ${SUMMARY_NEW} 117 | 118 | sudo -u#${SUDO_UID} -g#${SUDO_GID} createsummary xy -ignore-scalar-file-errors <${SUMMARY_OLD} 119 | -------------------------------------------------------------------------------- /evaluation/plot-MeasurementM2EC2020.R: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | # -*- coding: utf-8 -*- 3 | # 4 | # ===================================================================== 5 | # ####### ##### # # ### # # # # ### 6 | # # # # # # # ## # ## # # 7 | # # # # # # # # # # # # # 8 | # ##### # #### ##### # # # # # # # # # # 9 | # # # # # # # # # # # # # # 10 | # # # # # # # # # ## # ## # 11 | # ##### ##### # ### # # # # ### 12 | # ===================================================================== 13 | # 14 | # SimulaMet OpenAirInterface Evolved Packet Core VNF and NS 15 | # Copyright (C) 2019-2023 by Thomas Dreibholz 16 | # 17 | # This program is free software: you can redistribute it and/or modify 18 | # it under the terms of the GNU General Public License as published by 19 | # the Free Software Foundation, either version 3 of the License, or 20 | # (at your option) any later version. 21 | # 22 | # This program is distributed in the hope that it will be useful, 23 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 24 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 25 | # GNU General Public License for more details. 26 | # 27 | # You should have received a copy of the GNU General Public License 28 | # along with this program. If not, see . 29 | # 30 | # Contact: dreibh@simula.no 31 | 32 | library(ggplot2) 33 | library(Hmisc) 34 | 35 | source("/usr/share/netperfmeter/plotter.R") 36 | 37 | 38 | name <- "MeasurementM2EC2020" 39 | 40 | 41 | 42 | # Colours: 43 | # colorsFiber <- c("orange","salmon") 44 | # colorsADSL <- c("green","forest green","royal blue","blue") 45 | # plotColours <- topo.colors(2) 46 | # c("royal blue", "blue", 47 | # "orange","salmon", "red", "black", "gray") 48 | plotColours <- c("royal blue", "orange", "gray") 49 | 50 | 51 | 52 | makePlot <- function(node) 53 | { 54 | if(node == "passive") { 55 | allResults <- loadResults(paste(sep="", name, "/passive.flow-ReceivedBitRate.data.bz2")) 56 | } 57 | else { 58 | allResults <- loadResults(paste(sep="", name, "/active.flow-ReceivedBitRate.data.bz2")) 59 | } 60 | 61 | pdf(paste(sep="", "Results-", name, "-", node, ".pdf"), 62 | width=20, height=10, family="Helvetica", pointsize=22) 63 | 64 | numberOfRuns <- length(levels(factor(allResults$Protocol))) 65 | title <- node 66 | 67 | pSet <- allResults$Protocol 68 | pTitle <- "Protocol" 69 | 70 | xTitle <- "Transport Protocol" 71 | 72 | if(node == "passive") { 73 | ySet <- allResults$passive.flow.ReceivedBitRate / 1000000 74 | } 75 | else { 76 | ySet <- allResults$active.flow.ReceivedBitRate / 1000000 77 | } 78 | yTitle <- "Application Payload Throughput [Mbit/s]" 79 | 80 | zSet <- allResults$Scenario 81 | zTitle <- "Scenario" 82 | 83 | hset<-data.frame(PathMgrCC=pSet, ReceivedBitRate=ySet, Path=zSet) 84 | 85 | p <- ggplot(hset, 86 | aes(x=PathMgrCC,y=ReceivedBitRate,fill=PathMgrCC)) + 87 | scale_fill_manual(values = plotColours) 88 | p <- p + labs(title=title, 89 | fill=zTitle, 90 | x=xTitle, 91 | y=yTitle) 92 | # Theme (see http://docs.ggplot2.org/0.9.2.1/theme.html for options): 93 | p <- p + theme(title = element_text(size=16), 94 | axis.title = element_text(size=16), 95 | strip.text = element_text(size=16, face="bold"), 96 | axis.text.x = element_text(size=14, angle=90, face="bold", colour="black"), 97 | axis.text.y = element_text(size=14, angle=90, hjust=0.5, colour="black"), 98 | legend.title = element_blank(), 99 | #legend.position = c(1,1), 100 | #legend.justification = c(1,1), 101 | legend.background = element_rect(colour = "blue", fill = "#ffffff", size=1) 102 | ) 103 | p <- p + facet_grid(~Path) + 104 | stat_summary(fun.y=mean, geom='bar', size=3) 105 | 106 | # Add confidence intervals: 107 | # NOTE: Needs at least 2 (*two*) runs to work! 108 | if(numberOfRuns >= 2) { 109 | p <- p + stat_summary(fun.data=mean_cl_boot, geom='pointrange', colour="red") 110 | } 111 | 112 | # All values as text: 113 | # p <- p + geom_text(aes(label=sprintf("%1.1f", ReceivedBitRate)), 114 | # vjust=1.5,colour='blue',position=position_dodge(.9),size=6) 115 | # Only mean value as text: 116 | p <- p + stat_summary(aes(label=round(..y..,1)), fun.y=mean, geom="text", 117 | colour='blue', size=5, vjust = -0.5) 118 | 119 | print(p) 120 | 121 | dev.off() 122 | } 123 | 124 | makePlot("passive") 125 | makePlot("active") 126 | -------------------------------------------------------------------------------- /evaluation/plot-MeasurementEuCNC1.R: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | # -*- coding: utf-8 -*- 3 | # 4 | # ===================================================================== 5 | # ####### ##### # # ### # # # # ### 6 | # # # # # # # ## # ## # # 7 | # # # # # # # # # # # # # 8 | # ##### # #### ##### # # # # # # # # # # 9 | # # # # # # # # # # # # # # 10 | # # # # # # # # # ## # ## # 11 | # ##### ##### # ### # # # # ### 12 | # ===================================================================== 13 | # 14 | # SimulaMet OpenAirInterface Evolved Packet Core VNF and NS 15 | # Copyright (C) 2019-2023 by Thomas Dreibholz 16 | # 17 | # This program is free software: you can redistribute it and/or modify 18 | # it under the terms of the GNU General Public License as published by 19 | # the Free Software Foundation, either version 3 of the License, or 20 | # (at your option) any later version. 21 | # 22 | # This program is distributed in the hope that it will be useful, 23 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 24 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 25 | # GNU General Public License for more details. 26 | # 27 | # You should have received a copy of the GNU General Public License 28 | # along with this program. If not, see . 29 | # 30 | # Contact: dreibh@simula.no 31 | 32 | library(ggplot2) 33 | library(Hmisc) 34 | 35 | source("/usr/share/netperfmeter/plotter.R") 36 | 37 | 38 | name <- "MeasurementEuCNC1" 39 | 40 | 41 | 42 | # Colours: 43 | # colorsFiber <- c("orange","salmon") 44 | # colorsADSL <- c("green","forest green","royal blue","blue") 45 | # plotColours <- topo.colors(2) 46 | # c("royal blue", "blue", 47 | # "orange","salmon", "red", "black", "gray") 48 | plotColours <- c("royal blue", "orange", "gray") 49 | 50 | 51 | 52 | makePlot <- function(node) 53 | { 54 | if(node == "passive") { 55 | allResults <- loadResults(paste(sep="", name, "/passive.flow-ReceivedBitRate.data.bz2")) 56 | } 57 | else { 58 | allResults <- loadResults(paste(sep="", name, "/active.flow-ReceivedBitRate.data.bz2")) 59 | } 60 | 61 | numberOfRuns <- length(levels(factor(allResults$Protocol))) 62 | title <- node 63 | 64 | pdf(paste(sep="", "Results-", name, "-", node, ".pdf"), 65 | title=title, 66 | width=20, height=10, family="Helvetica", pointsize=22) 67 | 68 | pSet <- allResults$Protocol 69 | pTitle <- "Protocol" 70 | 71 | xTitle <- "Transport Protocol" 72 | 73 | if(node == "passive") { 74 | ySet <- allResults$passive.flow.ReceivedBitRate / 1000000 75 | } 76 | else { 77 | ySet <- allResults$active.flow.ReceivedBitRate / 1000000 78 | } 79 | yTitle <- "Application Payload Throughput [Mbit/s]" 80 | 81 | zSet <- allResults$Scenario 82 | zTitle <- "Scenario" 83 | 84 | hset<-data.frame(PathMgrCC=pSet, ReceivedBitRate=ySet, Path=zSet) 85 | 86 | p <- ggplot(hset, 87 | aes(x=PathMgrCC,y=ReceivedBitRate,fill=PathMgrCC)) + 88 | scale_fill_manual(values = plotColours) 89 | p <- p + labs(title=title, 90 | fill=zTitle, 91 | x=xTitle, 92 | y=yTitle) 93 | # Theme (see http://docs.ggplot2.org/0.9.2.1/theme.html for options): 94 | p <- p + theme(title = element_text(size=16), 95 | axis.title = element_text(size=16), 96 | strip.text = element_text(size=16, face="bold"), 97 | axis.text.x = element_text(size=14, angle=90, face="bold", colour="black"), 98 | axis.text.y = element_text(size=14, angle=90, hjust=0.5, colour="black"), 99 | legend.title = element_blank(), 100 | #legend.position = c(1,1), 101 | #legend.justification = c(1,1), 102 | legend.background = element_rect(colour = "blue", fill = "#ffffff", size=1) 103 | ) 104 | p <- p + facet_grid(~Path) + 105 | stat_summary(fun.y=mean, geom='bar', size=3) 106 | 107 | # Add confidence intervals: 108 | # NOTE: Needs at least 2 (*two*) runs to work! 109 | if(numberOfRuns >= 2) { 110 | p <- p + stat_summary(fun.data=mean_cl_boot, geom='pointrange', colour="red") 111 | } 112 | 113 | # All values as text: 114 | # p <- p + geom_text(aes(label=sprintf("%1.1f", ReceivedBitRate)), 115 | # vjust=1.5,colour='blue',position=position_dodge(.9),size=6) 116 | # Only mean value as text: 117 | p <- p + stat_summary(aes(label=round(..y..,1)), fun.y=mean, geom="text", 118 | colour='blue', size=5, vjust = -0.5) 119 | 120 | print(p) 121 | 122 | dev.off() 123 | } 124 | 125 | makePlot("passive") 126 | makePlot("active") 127 | -------------------------------------------------------------------------------- /tests/reinstall-mme: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | 3 | sudo service mme stop 4 | 5 | sudo rm -rf /usr/local 6 | sudo mkdir -p /usr/local/bin 7 | 8 | sudo apt install -fy 9 | sudo updatedb 10 | 11 | 12 | # ------ Fetching Git repository openair-mme --------------------------------------------------------------------------------------------------------------------------------------------------------------- 13 | time bash -c "cd /home/nornetpp/src && \ 14 | if [ ! -d \"openair-mme\" ] ; then git clone --quiet https://github.com/simula/openairinterface-openair-mme.git openair-mme && cd openair-mme ; else cd openair-mme && git pull ; fi && \ 15 | git checkout dreibh/asn1c-url-fix-14Oct2020" 16 | # ------ Building MME dependencies ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 17 | time bash -c "echo \"ZXhwb3J0IE1BS0VGTEFHUz0iLWpgbnByb2NgIiAmJiBcCmNkIC9ob21lL25vcm5ldHBwL3NyYy9vcGVuYWlyLW1tZS9zY3JpcHRzICYmIFwKbWtkaXIgLXAgbG9ncyAmJiBcCi4vYnVpbGRfbW1lIC0tY2hlY2staW5zdGFsbGVkLXNvZnR3YXJlIC0tZm9yY2UgPmxvZ3MvYnVpbGRfbW1lLTEubG9nIDI+JjEK\" | base64 -d | /bin/bash -x" 18 | # ------ Building MME itself ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 19 | time bash -c "echo \"ZXhwb3J0IE1BS0VGTEFHUz0iLWpgbnByb2NgIiAmJiBcCmNkIC9ob21lL25vcm5ldHBwL3NyYy9vcGVuYWlyLW1tZS9zY3JpcHRzICYmIFwKLi9idWlsZF9tbWUgLS1jbGVhbiA+bG9ncy9idWlsZF9tbWUtMi5sb2cgMj4mMQo=\" | base64 -d | /bin/bash -x" 20 | # ------ Configuring MME ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 21 | time bash -c "echo \"ZXhwb3J0IE1BS0VGTEFHUz0iLWpgbnByb2NgIiAmJiBcCmNkIC9ob21lL25vcm5ldHBwL3NyYy9vcGVuYWlyLW1tZS9zY3JpcHRzICYmIFwKZWNobyAiMTI3LjAuMS4xICAgICAgICBtbWUuc2ltdWxhLm5vcm5ldCBtbWUiIHwgc3VkbyB0ZWUgLWEgL2V0Yy9ob3N0cyAmJiBcCmVjaG8gIjE3Mi4xNi42LjEyOSAgICAgaHNzLnNpbXVsYS5ub3JuZXQgaHNzIiB8IHN1ZG8gdGVlIC1hIC9ldGMvaG9zdHMgJiYgXApvcGVuc3NsIHJhbmQgLW91dCAkSE9NRS8ucm5kIDEyOCAmJiBcCklOU1RBTkNFPTEgJiYgXApQUkVGSVg9Jy91c3IvbG9jYWwvZXRjL29haScgJiYgXApzdWRvIG1rZGlyIC1tIDA3NzcgLXAgJFBSRUZJWCAmJiBcCnN1ZG8gbWtkaXIgLW0gMDc3NyAtcCAkUFJFRklYL2ZyZWVEaWFtZXRlciAmJiBcCnN1ZG8gY3AgLi4vZXRjL21tZV9mZC5zcHJpbnQuY29uZiAgJFBSRUZJWC9mcmVlRGlhbWV0ZXIvbW1lX2ZkLmNvbmYgJiYgXApzdWRvIGNwIC4uL2V0Yy9tbWUuY29uZiAgJFBSRUZJWCAmJiBcCmRlY2xhcmUgLUEgTU1FX0NPTkYgJiYgXApNTUVfQ09ORltATU1FX1M2QV9JUF9BRERSQF09IjEyNy4wLjAuMTEiICYmIFwKTU1FX0NPTkZbQElOU1RBTkNFQF09JElOU1RBTkNFICYmIFwKTU1FX0NPTkZbQFBSRUZJWEBdPSRQUkVGSVggJiYgXApNTUVfQ09ORltAUkVBTE1AXT0nc2ltdWxhLm5vcm5ldCcgJiYgXApNTUVfQ09ORltAUElEX0RJUkVDVE9SWUBdPScvdmFyL3J1bicgJiYgXApNTUVfQ09ORltATU1FX0ZRRE5AXT0ibW1lLnNpbXVsYS5ub3JuZXQiICYmIFwKTU1FX0NPTkZbQEhTU19IT1NUTkFNRUBdPSdoc3MnICYmIFwKTU1FX0NPTkZbQEhTU19GUUROQF09Imhzcy5zaW11bGEubm9ybmV0IiAmJiBcCk1NRV9DT05GW0BIU1NfSVBfQUREUkBdPScxNzIuMTYuNi4xMjknICYmIFwKTU1FX0NPTkZbQE1DQ0BdPScyNDInICYmIFwKTU1FX0NPTkZbQE1OQ0BdPSc4OCcgJiYgXApNTUVfQ09ORltATU1FX0dJREBdPSczMjc2OCcgJiYgXApNTUVfQ09ORltATU1FX0NPREVAXT0nMycgJiYgXApNTUVfQ09ORltAVEFDXzBAXT0nNjAwJyAmJiBcCk1NRV9DT05GW0BUQUNfMUBdPSc2MDEnICYmIFwKTU1FX0NPTkZbQFRBQ18yQF09JzYwMicgJiYgXApNTUVfQ09ORltATU1FX0lOVEVSRkFDRV9OQU1FX0ZPUl9TMV9NTUVAXT0nZW5zNicgJiYgXApNTUVfQ09ORltATU1FX0lQVjRfQUREUkVTU19GT1JfUzFfTU1FQF09JzE5Mi4xNjguMjQ3LjExMi8yNCcgJiYgXApNTUVfQ09ORltATU1FX0lOVEVSRkFDRV9OQU1FX0ZPUl9TMTFAXT0nZW5zNScgJiYgXApNTUVfQ09ORltATU1FX0lQVjRfQUREUkVTU19GT1JfUzExQF09JzE3Mi4xNi4xLjEwMi8yNCcgJiYgXApNTUVfQ09ORltATU1FX0lOVEVSRkFDRV9OQU1FX0ZPUl9TMTBAXT0nZHVtbXkwJyAmJiBcCk1NRV9DT05GW0BNTUVfSVBWNF9BRERSRVNTX0ZPUl9TMTBAXT0nMTkyLjE2OC4xMC4xMTAvMjQnICYmIFwKTU1FX0NPTkZbQE9VVFBVVEBdPSdDT05TT0xFJyAmJiBcCk1NRV9DT05GW0BTR1dfSVBWNF9BRERSRVNTX0ZPUl9TMTFfVEVTVF8wQF09JzE3Mi4xNi4xLjEwNCcgJiYgXApNTUVfQ09ORltAU0dXX0lQVjRfQUREUkVTU19GT1JfUzExXzBAXT0nMTcyLjE2LjEuMTA0JyAmJiBcCk1NRV9DT05GW0BQRUVSX01NRV9JUFY0X0FERFJFU1NfRk9SX1MxMF8wQF09JzAuMC4wLjAvMjQnICYmIFwKTU1FX0NPTkZbQFBFRVJfTU1FX0lQVjRfQUREUkVTU19GT1JfUzEwXzFAXT0nMC4wLjAuMC8yNCcgJiYgXApNTUVfQ09ORltAVEFDLUxCX1NHV19URVNUXzBAXT0wNyAmJiBcCk1NRV9DT05GW0BUQUMtSEJfU0dXX1RFU1RfMEBdPTAwICYmIFwKTU1FX0NPTkZbQE1DQ19TR1dfMEBdPTI0MiAmJiBcCk1NRV9DT05GW0BNTkMzX1NHV18wQF09MDg4ICYmIFwKTU1FX0NPTkZbQFRBQy1MQl9TR1dfMEBdPTU4ICYmIFwKTU1FX0NPTkZbQFRBQy1IQl9TR1dfMEBdPTAyICYmIFwKTU1FX0NPTkZbQE1DQ19NTUVfMEBdPTI0MiAmJiBcCk1NRV9DT05GW0BNTkMzX01NRV8wQF09MDg4ICYmIFwKTU1FX0NPTkZbQFRBQy1MQl9NTUVfMEBdPTU5ICYmIFwKTU1FX0NPTkZbQFRBQy1IQl9NTUVfMEBdPTAyICYmIFwKTU1FX0NPTkZbQE1DQ19NTUVfMUBdPTI0MiAmJiBcCk1NRV9DT05GW0BNTkMzX01NRV8xQF09MDg4ICYmIFwKTU1FX0NPTkZbQFRBQy1MQl9NTUVfMUBdPTVhICYmIFwKTU1FX0NPTkZbQFRBQy1IQl9NTUVfMUBdPTAyICYmIFwKZm9yIEsgaW4gIiR7IU1NRV9DT05GW0BdfSI7IGRvIHN1ZG8gZWdyZXAgLWxSWiAiJEsiICRQUkVGSVggfCB4YXJncyAtMCAtbCBzdWRvIHNlZCAtaSAtZSAic3wkS3wke01NRV9DT05GWyRLXX18ZyIgOyByZXQ9JD87W1sgcmV0IC1uZSAwIF1dICYmIGVjaG8gIlRyaWVkIHRvIHJlcGxhY2UgJEsgd2l0aCAke01NRV9DT05GWyRLXX0iIHx8IHRydWUgOyBkb25lICYmIFwKc3VkbyAuL2NoZWNrX21tZV9zNmFfY2VydGlmaWNhdGUgJFBSRUZJWC9mcmVlRGlhbWV0ZXIgbW1lLnNpbXVsYS5ub3JuZXQgPmxvZ3MvY2hlY2tfbW1lX3M2YV9jZXJ0aWZpY2F0ZS5sb2cgMj4mMQo=\" | base64 -d | /bin/bash -x" 22 | -------------------------------------------------------------------------------- /evaluation/plot-Measurement4.R: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | # -*- coding: utf-8 -*- 3 | # 4 | # ===================================================================== 5 | # ####### ##### # # ### # # # # ### 6 | # # # # # # # ## # ## # # 7 | # # # # # # # # # # # # # 8 | # ##### # #### ##### # # # # # # # # # # 9 | # # # # # # # # # # # # # # 10 | # # # # # # # # # ## # ## # 11 | # ##### ##### # ### # # # # ### 12 | # ===================================================================== 13 | # 14 | # SimulaMet OpenAirInterface Evolved Packet Core VNF and NS 15 | # Copyright (C) 2019-2023 by Thomas Dreibholz 16 | # 17 | # This program is free software: you can redistribute it and/or modify 18 | # it under the terms of the GNU General Public License as published by 19 | # the Free Software Foundation, either version 3 of the License, or 20 | # (at your option) any later version. 21 | # 22 | # This program is distributed in the hope that it will be useful, 23 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 24 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 25 | # GNU General Public License for more details. 26 | # 27 | # You should have received a copy of the GNU General Public License 28 | # along with this program. If not, see . 29 | # 30 | # Contact: dreibh@simula.no 31 | 32 | library(ggplot2) 33 | library(Hmisc) 34 | 35 | source("/usr/share/netperfmeter/plotter.R") 36 | 37 | 38 | name <- "Measurement4-0003" 39 | 40 | 41 | 42 | # Colours: 43 | # colorsFiber <- c("orange","salmon") 44 | # colorsADSL <- c("green","forest green","royal blue","blue") 45 | # plotColours <- topo.colors(2) 46 | # c("royal blue", "blue", 47 | # "orange","salmon", "red", "black", "gray") 48 | plotColours <- c("royal blue", "orange", "gray") 49 | 50 | 51 | 52 | makePlot <- function(node) 53 | { 54 | if(node == "passive") { 55 | allResults <- loadResults(paste(sep="", name, "/passive.flow-ReceivedBitRate.data.bz2")) 56 | } 57 | else { 58 | allResults <- loadResults(paste(sep="", name, "/active.flow-ReceivedBitRate.data.bz2")) 59 | } 60 | 61 | numberOfRuns <- length(levels(factor(allResults$Protocol))) 62 | title <- node 63 | 64 | pdf(paste(sep="", "Results-", name, "-", node, ".pdf"), 65 | title=title, 66 | width=20, height=10, family="Helvetica", pointsize=22) 67 | 68 | pSet <- allResults$Protocol 69 | pTitle <- "Protocol" 70 | 71 | xTitle <- "Transport Protocol" 72 | 73 | if(node == "passive") { 74 | ySet <- allResults$passive.flow.ReceivedBitRate / 1000000 75 | } 76 | else { 77 | ySet <- allResults$active.flow.ReceivedBitRate / 1000000 78 | } 79 | yTitle <- "Application Payload Throughput [Mbit/s]" 80 | 81 | zSet <- allResults$Scenario 82 | zTitle <- "Scenario" 83 | 84 | ScenarioBandwdith <- paste(sep="", allResults$Scenario, allResults$QoSBandwidth) 85 | 86 | 87 | hset<-data.frame(TransportProtocol=pSet, ReceivedBitRate=ySet, ScenarioBandwdith=ScenarioBandwdith) 88 | 89 | p <- ggplot(hset, 90 | aes(x=TransportProtocol,y=ReceivedBitRate,fill=TransportProtocol)) + 91 | scale_fill_manual(values = plotColours) 92 | p <- p + labs(title=title, 93 | fill=zTitle, 94 | x=xTitle, 95 | y=yTitle) 96 | # Theme (see http://docs.ggplot2.org/0.9.2.1/theme.html for options): 97 | p <- p + theme(title = element_text(size=16), 98 | axis.title = element_text(size=16), 99 | strip.text = element_text(size=16, face="bold"), 100 | axis.text.x = element_text(size=14, angle=90, face="bold", colour="black"), 101 | axis.text.y = element_text(size=14, angle=90, hjust=0.5, colour="black"), 102 | legend.title = element_blank(), 103 | #legend.position = c(1,1), 104 | #legend.justification = c(1,1), 105 | legend.background = element_rect(colour = "blue", fill = "#ffffff", size=1) 106 | ) 107 | p <- p + facet_grid(~ScenarioBandwdith) + 108 | stat_summary(fun=mean, geom='bar', size=3) 109 | 110 | # Add confidence intervals: 111 | # NOTE: Needs at least 2 (*two*) runs to work! 112 | if(numberOfRuns >= 2) { 113 | p <- p + stat_summary(fun.data=mean_cl_boot, geom='pointrange', colour="red") 114 | } 115 | 116 | # All values as text: 117 | # p <- p + geom_text(aes(label=sprintf("%1.1f", ReceivedBitRate)), 118 | # vjust=1.5,colour='blue',position=position_dodge(.9),size=6) 119 | # Only mean value as text: 120 | p <- p + stat_summary(aes(label=round(..y..,1)), fun=mean, geom="text", 121 | colour='blue', size=5, vjust = -0.5) 122 | 123 | print(p) 124 | 125 | dev.off() 126 | } 127 | 128 | makePlot("passive") 129 | makePlot("active") 130 | -------------------------------------------------------------------------------- /evaluation/plot-Measurement5.R: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | # -*- coding: utf-8 -*- 3 | # 4 | # ===================================================================== 5 | # ####### ##### # # ### # # # # ### 6 | # # # # # # # ## # ## # # 7 | # # # # # # # # # # # # # 8 | # ##### # #### ##### # # # # # # # # # # 9 | # # # # # # # # # # # # # # 10 | # # # # # # # # # ## # ## # 11 | # ##### ##### # ### # # # # ### 12 | # ===================================================================== 13 | # 14 | # SimulaMet OpenAirInterface Evolved Packet Core VNF and NS 15 | # Copyright (C) 2019-2023 by Thomas Dreibholz 16 | # 17 | # This program is free software: you can redistribute it and/or modify 18 | # it under the terms of the GNU General Public License as published by 19 | # the Free Software Foundation, either version 3 of the License, or 20 | # (at your option) any later version. 21 | # 22 | # This program is distributed in the hope that it will be useful, 23 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 24 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 25 | # GNU General Public License for more details. 26 | # 27 | # You should have received a copy of the GNU General Public License 28 | # along with this program. If not, see . 29 | # 30 | # Contact: dreibh@simula.no 31 | 32 | library(ggplot2) 33 | library(Hmisc) 34 | 35 | source("/usr/share/netperfmeter/plotter.R") 36 | 37 | 38 | name <- "Measurement5" 39 | 40 | 41 | 42 | # Colours: 43 | # colorsFiber <- c("orange","salmon") 44 | # colorsADSL <- c("green","forest green","royal blue","blue") 45 | # plotColours <- topo.colors(2) 46 | # c("royal blue", "blue", 47 | # "orange","salmon", "red", "black", "gray") 48 | plotColours <- c("royal blue", "orange", "gray") 49 | 50 | 51 | 52 | makePlot <- function(node) 53 | { 54 | if(node == "passive") { 55 | allResults <- loadResults(paste(sep="", name, "/passive.flow-ReceivedBitRate.data.bz2")) 56 | pSet <- factor(allResults$passive.flow) 57 | pTitle <- "Flow" 58 | } 59 | else { 60 | allResults <- loadResults(paste(sep="", name, "/active.flow-ReceivedBitRate.data.bz2")) 61 | pSet <- factor(allResults$active.flow) 62 | pTitle <- "Flow" 63 | } 64 | 65 | numberOfRuns <- length(levels(factor(allResults$Protocol))) 66 | title <- node 67 | 68 | pdf(paste(sep="", "Results-", name, "-", node, ".pdf"), 69 | title=title, 70 | width=20, height=10, family="Helvetica", pointsize=22) 71 | 72 | xTitle <- "Flow #" 73 | 74 | if(node == "passive") { 75 | ySet <- allResults$passive.flow.ReceivedBitRate / 1000000 76 | } 77 | else { 78 | ySet <- allResults$active.flow.ReceivedBitRate / 1000000 79 | } 80 | yTitle <- "Application Payload Throughput [Mbit/s]" 81 | 82 | zSet <- allResults$Scenario 83 | zTitle <- "Scenario" 84 | 85 | ScenarioBandwdith <- paste(sep="", allResults$Scenario, allResults$QoSBandwidth) 86 | 87 | 88 | hset<-data.frame(Flow=pSet, ReceivedBitRate=ySet, ScenarioBandwdith=ScenarioBandwdith) 89 | 90 | p <- ggplot(hset, 91 | aes(x=Flow,y=ReceivedBitRate,fill=Flow)) + 92 | scale_fill_manual(values = plotColours) 93 | p <- p + labs(title=title, 94 | fill=zTitle, 95 | x=xTitle, 96 | y=yTitle) 97 | # Theme (see http://docs.ggplot2.org/0.9.2.1/theme.html for options): 98 | p <- p + theme(title = element_text(size=16), 99 | axis.title = element_text(size=16), 100 | strip.text = element_text(size=16, face="bold"), 101 | axis.text.x = element_text(size=14, angle=90, face="bold", colour="black"), 102 | axis.text.y = element_text(size=14, angle=90, hjust=0.5, colour="black"), 103 | legend.title = element_blank(), 104 | #legend.position = c(1,1), 105 | #legend.justification = c(1,1), 106 | legend.background = element_rect(colour = "blue", fill = "#ffffff", size=1) 107 | ) 108 | p <- p + facet_grid(~ScenarioBandwdith) + 109 | stat_summary(fun=mean, geom='bar', size=3) 110 | 111 | # Add confidence intervals: 112 | # NOTE: Needs at least 2 (*two*) runs to work! 113 | if(numberOfRuns >= 2) { 114 | p <- p + stat_summary(fun.data=mean_cl_boot, geom='pointrange', colour="red") 115 | } 116 | 117 | # All values as text: 118 | # p <- p + geom_text(aes(label=sprintf("%1.1f", ReceivedBitRate)), 119 | # vjust=1.5,colour='blue',position=position_dodge(.9),size=6) 120 | # Only mean value as text: 121 | p <- p + stat_summary(aes(label=round(..y..,1)), fun=mean, geom="text", 122 | colour='blue', size=5, vjust = -0.5) 123 | 124 | print(p) 125 | 126 | dev.off() 127 | } 128 | 129 | makePlot("passive") 130 | makePlot("active") 131 | -------------------------------------------------------------------------------- /evaluation/plot-Measurement6.R: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | # -*- coding: utf-8 -*- 3 | # 4 | # ===================================================================== 5 | # ####### ##### # # ### # # # # ### 6 | # # # # # # # ## # ## # # 7 | # # # # # # # # # # # # # 8 | # ##### # #### ##### # # # # # # # # # # 9 | # # # # # # # # # # # # # # 10 | # # # # # # # # # ## # ## # 11 | # ##### ##### # ### # # # # ### 12 | # ===================================================================== 13 | # 14 | # SimulaMet OpenAirInterface Evolved Packet Core VNF and NS 15 | # Copyright (C) 2019-2023 by Thomas Dreibholz 16 | # 17 | # This program is free software: you can redistribute it and/or modify 18 | # it under the terms of the GNU General Public License as published by 19 | # the Free Software Foundation, either version 3 of the License, or 20 | # (at your option) any later version. 21 | # 22 | # This program is distributed in the hope that it will be useful, 23 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 24 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 25 | # GNU General Public License for more details. 26 | # 27 | # You should have received a copy of the GNU General Public License 28 | # along with this program. If not, see . 29 | # 30 | # Contact: dreibh@simula.no 31 | 32 | library(ggplot2) 33 | library(Hmisc) 34 | 35 | source("/usr/share/netperfmeter/plotter.R") 36 | 37 | 38 | name <- "Measurement6" 39 | 40 | 41 | 42 | # Colours: 43 | # colorsFiber <- c("orange","salmon") 44 | # colorsADSL <- c("green","forest green","royal blue","blue") 45 | # plotColours <- topo.colors(2) 46 | # c("royal blue", "blue", 47 | # "orange","salmon", "red", "black", "gray") 48 | plotColours <- c("royal blue", "orange", "gray") 49 | 50 | 51 | 52 | makePlot <- function(node) 53 | { 54 | if(node == "passive") { 55 | allResults <- loadResults(paste(sep="", name, "/passive.flow-ReceivedBitRate.data.bz2")) 56 | pSet <- factor(allResults$passive.flow) 57 | pTitle <- "Flow" 58 | } 59 | else { 60 | allResults <- loadResults(paste(sep="", name, "/active.flow-ReceivedBitRate.data.bz2")) 61 | pSet <- factor(allResults$active.flow) 62 | pTitle <- "Flow" 63 | } 64 | 65 | numberOfRuns <- length(levels(factor(allResults$Protocol))) 66 | title <- node 67 | 68 | pdf(paste(sep="", "Results-", name, "-", node, ".pdf"), 69 | title=title, 70 | width=20, height=10, family="Helvetica", pointsize=22) 71 | 72 | xTitle <- "Flow #" 73 | 74 | if(node == "passive") { 75 | ySet <- allResults$passive.flow.ReceivedBitRate / 1000000 76 | } 77 | else { 78 | ySet <- allResults$active.flow.ReceivedBitRate / 1000000 79 | } 80 | yTitle <- "Application Payload Throughput [Mbit/s]" 81 | 82 | zSet <- allResults$Scenario 83 | zTitle <- "Scenario" 84 | 85 | ScenarioBandwdith <- paste(sep="", allResults$Scenario, allResults$QoSBandwidth) 86 | 87 | 88 | hset<-data.frame(Flow=pSet, ReceivedBitRate=ySet, ScenarioBandwdith=ScenarioBandwdith) 89 | 90 | p <- ggplot(hset, 91 | aes(x=Flow,y=ReceivedBitRate,fill=Flow)) + 92 | scale_fill_manual(values = plotColours) 93 | p <- p + labs(title=title, 94 | fill=zTitle, 95 | x=xTitle, 96 | y=yTitle) 97 | # Theme (see http://docs.ggplot2.org/0.9.2.1/theme.html for options): 98 | p <- p + theme(title = element_text(size=16), 99 | axis.title = element_text(size=16), 100 | strip.text = element_text(size=16, face="bold"), 101 | axis.text.x = element_text(size=14, angle=90, face="bold", colour="black"), 102 | axis.text.y = element_text(size=14, angle=90, hjust=0.5, colour="black"), 103 | legend.title = element_blank(), 104 | #legend.position = c(1,1), 105 | #legend.justification = c(1,1), 106 | legend.background = element_rect(colour = "blue", fill = "#ffffff", size=1) 107 | ) 108 | p <- p + facet_grid(~ScenarioBandwdith) + 109 | stat_summary(fun=mean, geom='bar', size=3) 110 | 111 | # Add confidence intervals: 112 | # NOTE: Needs at least 2 (*two*) runs to work! 113 | if(numberOfRuns >= 2) { 114 | p <- p + stat_summary(fun.data=mean_cl_boot, geom='pointrange', colour="red") 115 | } 116 | 117 | # All values as text: 118 | # p <- p + geom_text(aes(label=sprintf("%1.1f", ReceivedBitRate)), 119 | # vjust=1.5,colour='blue',position=position_dodge(.9),size=6) 120 | # Only mean value as text: 121 | p <- p + stat_summary(aes(label=round(..y..,1)), fun=mean, geom="text", 122 | colour='blue', size=5, vjust = -0.5) 123 | 124 | print(p) 125 | 126 | dev.off() 127 | } 128 | 129 | makePlot("passive") 130 | makePlot("active") 131 | --------------------------------------------------------------------------------