From cd731f73dbe8bcdbade349b7398ec6ef3945cd63 Mon Sep 17 00:00:00 2001 From: herlesupreeth Date: Fri, 17 Jan 2025 20:11:33 +0100 Subject: [PATCH] Include slicing under custom deployment scenarios --- custom_deployments/slicing/.custom_env | 156 +++++++ custom_deployments/slicing/README.md | 45 ++ custom_deployments/slicing/amf/amf.yaml | 62 +++ custom_deployments/slicing/amf/amf_init.sh | 38 ++ custom_deployments/slicing/nr-gnb.yaml | 29 ++ custom_deployments/slicing/nr-ue.yaml | 27 ++ custom_deployments/slicing/nr-ue2.yaml | 27 ++ custom_deployments/slicing/nssf/nssf.yaml | 34 ++ custom_deployments/slicing/nssf/nssf_init.sh | 37 ++ custom_deployments/slicing/sa-deploy.yaml | 403 ++++++++++++++++++ custom_deployments/slicing/smf/ip_utils.py | 70 +++ custom_deployments/slicing/smf/smf.yaml | 64 +++ custom_deployments/slicing/smf/smf2.yaml | 64 +++ custom_deployments/slicing/smf/smf2_init.sh | 57 +++ custom_deployments/slicing/smf/smf_init.sh | 60 +++ .../slicing/ueransim/ueransim-gnb.yaml | 25 ++ .../slicing/ueransim/ueransim-gnb_init.sh | 39 ++ .../slicing/ueransim/ueransim-ue.yaml | 72 ++++ .../slicing/ueransim/ueransim-ue2.yaml | 72 ++++ .../slicing/ueransim/ueransim-ue2_init.sh | 44 ++ .../slicing/ueransim/ueransim-ue_init.sh | 44 ++ custom_deployments/slicing/upf/ip_utils.py | 70 +++ custom_deployments/slicing/upf/tun_if.py | 108 +++++ custom_deployments/slicing/upf/upf.yaml | 32 ++ custom_deployments/slicing/upf/upf2.yaml | 33 ++ custom_deployments/slicing/upf/upf2_init.sh | 48 +++ custom_deployments/slicing/upf/upf_init.sh | 49 +++ 27 files changed, 1809 insertions(+) create mode 100644 custom_deployments/slicing/.custom_env create mode 100644 custom_deployments/slicing/README.md create mode 100644 custom_deployments/slicing/amf/amf.yaml create mode 100755 custom_deployments/slicing/amf/amf_init.sh create mode 100644 custom_deployments/slicing/nr-gnb.yaml create mode 100644 custom_deployments/slicing/nr-ue.yaml create mode 100644 custom_deployments/slicing/nr-ue2.yaml create mode 100644 custom_deployments/slicing/nssf/nssf.yaml create mode 100755 custom_deployments/slicing/nssf/nssf_init.sh create mode 100644 custom_deployments/slicing/sa-deploy.yaml create mode 100755 custom_deployments/slicing/smf/ip_utils.py create mode 100644 custom_deployments/slicing/smf/smf.yaml create mode 100644 custom_deployments/slicing/smf/smf2.yaml create mode 100755 custom_deployments/slicing/smf/smf2_init.sh create mode 100755 custom_deployments/slicing/smf/smf_init.sh create mode 100644 custom_deployments/slicing/ueransim/ueransim-gnb.yaml create mode 100755 custom_deployments/slicing/ueransim/ueransim-gnb_init.sh create mode 100644 custom_deployments/slicing/ueransim/ueransim-ue.yaml create mode 100644 custom_deployments/slicing/ueransim/ueransim-ue2.yaml create mode 100755 custom_deployments/slicing/ueransim/ueransim-ue2_init.sh create mode 100755 custom_deployments/slicing/ueransim/ueransim-ue_init.sh create mode 100755 custom_deployments/slicing/upf/ip_utils.py create mode 100755 custom_deployments/slicing/upf/tun_if.py create mode 100644 custom_deployments/slicing/upf/upf.yaml create mode 100644 custom_deployments/slicing/upf/upf2.yaml create mode 100755 custom_deployments/slicing/upf/upf2_init.sh create mode 100755 custom_deployments/slicing/upf/upf_init.sh diff --git a/custom_deployments/slicing/.custom_env b/custom_deployments/slicing/.custom_env new file mode 100644 index 0000000..15e49bf --- /dev/null +++ b/custom_deployments/slicing/.custom_env @@ -0,0 +1,156 @@ +# Set proper timezone to sync times between docker host and containers +#TZ=Europe/Berlin + +MCC=001 +MNC=01 + +TEST_NETWORK=172.22.0.0/24 +DOCKER_HOST_IP=192.168.1.223 + +# MONGODB +MONGO_IP=172.22.0.2 + +# HSS - open5gs +HSS_IP=172.22.0.3 + +# PCRF +PCRF_IP=172.22.0.4 +PCRF_BIND_PORT=3873 + +# SGW +SGWC_IP=172.22.0.5 +SGWU_IP=172.22.0.6 +SGWU_ADVERTISE_IP=172.22.0.6 + +# SMF +SMF_IP=172.22.0.7 +SMF_DNS1=8.8.8.8 +SMF_DNS2=8.8.4.4 +SMF2_IP=172.22.0.100 + +# UPF +UPF_IP=172.22.0.8 +UPF_ADVERTISE_IP=172.22.0.8 +UPF2_IP=172.22.0.90 +UPF2_ADVERTISE_IP=172.22.0.90 + +# MME +MME_IP=172.22.0.9 + +# AMF +AMF_IP=172.22.0.10 + +# AUSF +AUSF_IP=172.22.0.11 + +# NRF +NRF_IP=172.22.0.12 + +# UDM +UDM_IP=172.22.0.13 + +# UDR +UDR_IP=172.22.0.14 + +# IMS DNS +DNS_IP=172.22.0.15 + +# RTPENGINE +RTPENGINE_IP=172.22.0.16 + +# MYSQL +MYSQL_IP=172.22.0.17 + +# PYHSS +PYHSS_IP=172.22.0.18 +PYHSS_BIND_PORT=3875 + +# ICSCF +ICSCF_IP=172.22.0.19 +ICSCF_BIND_PORT=3869 + +# SCSCF +SCSCF_IP=172.22.0.20 +SCSCF_BIND_PORT=3870 + +# PCSCF +PCSCF_IP=172.22.0.21 +PCSCF_BIND_PORT=3871 + +# SRSLTE ENB +SRS_ENB_IP=172.22.0.22 + +# UERANSIM +NR_GNB_IP=172.22.0.23 +NR_UE_IP=172.22.0.24 +NR_UE2_IP=172.22.0.91 + +UE1_IMEI=356938035643803 +UE1_IMEISV=4370816125816151 +UE1_IMSI=001011224567895 +UE1_KI=8baf473f2f8fd09487cccbd7097c6862 +UE1_OP=11111111111111111111111111111111 +UE1_AMF=8000 + +UE2_IMEI=356938035643804 +UE2_IMEISV=4370816125816152 +UE2_IMSI=001011224567896 +UE2_KI=8baf473f2f8fd09487cccbd7097c6862 +UE2_OP=11111111111111111111111111111111 +UE2_AMF=8000 + +# OAI ENB +OAI_ENB_IP=172.22.0.25 + +# OPEN5GS WEBUI +WEBUI_IP=172.22.0.26 + +# PCF +PCF_IP=172.22.0.27 + +# NSSF +NSSF_IP=172.22.0.28 + +# BSF +BSF_IP=172.22.0.29 + +# ENTITLEMENT SERVER +ENTITLEMENT_SERVER_IP=172.22.0.30 + +# OSMOMSC +OSMOMSC_IP=172.22.0.31 + +# OSMOHLR +OSMOHLR_IP=172.22.0.32 + +# SMSC +SMSC_IP=172.22.0.33 + +# SRSLTE UE +SRS_UE_IP=172.22.0.34 + +# SCP +SCP_IP=172.22.0.35 + +# METRICS +METRICS_IP=172.22.0.36 + +# SRSRAN GNB +SRS_GNB_IP=172.22.0.37 + +# GRAFANA +GRAFANA_IP=172.22.0.39 +GRAFANA_USERNAME=open5gs +GRAFANA_PASSWORD=open5gs + +# UE IPv4 Subnet Range for APN=internet +UE_IPV4_INTERNET=192.168.100.0/24 + +# UE IPv4 Subnet Range for APN=ims +UE_IPV4_IMS=192.168.101.0/24 + +# UE IPv4 Subnet Range for APN=private +UE_IPV4_PRIVATE=192.168.101.0/24 + +# Maximum Number of UEs +MAX_NUM_UE=1024 diff --git a/custom_deployments/slicing/README.md b/custom_deployments/slicing/README.md new file mode 100644 index 0000000..4755b75 --- /dev/null +++ b/custom_deployments/slicing/README.md @@ -0,0 +1,45 @@ +## Deployment description + +This custom deployment showcases a slicing scenario by deploying two instances of open5gs SMF and UPF each handling an individual slice configuration. + +## Additional steps + +Most of the steps to be followed are similar to the steps mentioned in the [README in the root folder](../../README.md). However, additional steps mentioned below must be taken into account while deploying this custom deployment scenario. + +### Loading environmental variables for custom deployment + +**Warning** +For custom deployments, you must modify/use only the [**.custom_env**](.custom_env) file rather than the [**.env** in the root folder](../../.env). + +``` +set -a +source .custom_env +set +a +``` + +### Scenario deployment + +Deploy the 5G SA network consisting of two slices. + +``` +cd custom_deployments/slicing +docker compose -f sa-deploy.yaml up +``` + +Deploy UERANSIM gNB (RF simulated). + +``` +docker compose -f nr-gnb.yaml up -d && docker container attach nr_gnb +``` + +Deploy UERANSIM NR-UE (RF simulated) for first slice. + +``` +docker compose -f nr-ue.yaml up -d && docker container attach nr_ue +``` + +Deploy UERANSIM NR-UE (RF simulated) for second slice. + +``` +docker compose -f nr-ue2.yaml up -d && docker container attach nr_ue2 +``` diff --git a/custom_deployments/slicing/amf/amf.yaml b/custom_deployments/slicing/amf/amf.yaml new file mode 100644 index 0000000..dc4fa1c --- /dev/null +++ b/custom_deployments/slicing/amf/amf.yaml @@ -0,0 +1,62 @@ +logger: + file: + path: /open5gs/install/var/log/open5gs/amf.log + +sbi: + server: + no_tls: true + client: + no_tls: true + +global: + max: + ue: MAX_NUM_UE + +amf: + sbi: + server: + - address: AMF_IP + port: 7777 + client: + nrf: + - uri: http://NRF_IP:7777 + scp: + - uri: http://SCP_IP:7777 + ngap: + server: + - address: AMF_IP + guami: + - plmn_id: + mcc: MCC + mnc: MNC + amf_id: + region: 2 + set: 1 + tai: + - plmn_id: + mcc: MCC + mnc: MNC + tac: 1 + plmn_support: + - plmn_id: + mcc: MCC + mnc: MNC + s_nssai: + - sst: 1 + sd: 000001 + - sst: 1 + sd: 000002 + security: + integrity_order : [ NIA2, NIA1, NIA0 ] + ciphering_order : [ NEA0, NEA1, NEA2 ] + network_name: + full: Open5GS + amf_name: open5gs-amf0 + metrics: + server: + - address: AMF_IP + port: 9091 + time: + t3512: + value: 540 + diff --git a/custom_deployments/slicing/amf/amf_init.sh b/custom_deployments/slicing/amf/amf_init.sh new file mode 100755 index 0000000..5a457f5 --- /dev/null +++ b/custom_deployments/slicing/amf/amf_init.sh @@ -0,0 +1,38 @@ +#!/bin/bash + +# BSD 2-Clause License + +# Copyright (c) 2020, Supreeth Herle +# All rights reserved. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: + +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. + +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. + +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +cp /mnt/amf/amf.yaml install/etc/open5gs +sed -i 's|AMF_IP|'$AMF_IP'|g' install/etc/open5gs/amf.yaml +sed -i 's|SCP_IP|'$SCP_IP'|g' install/etc/open5gs/amf.yaml +sed -i 's|NRF_IP|'$NRF_IP'|g' install/etc/open5gs/amf.yaml +sed -i 's|MNC|'$MNC'|g' install/etc/open5gs/amf.yaml +sed -i 's|MCC|'$MCC'|g' install/etc/open5gs/amf.yaml +sed -i 's|MAX_NUM_UE|'$MAX_NUM_UE'|g' install/etc/open5gs/amf.yaml + +# Sync docker time +#ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone diff --git a/custom_deployments/slicing/nr-gnb.yaml b/custom_deployments/slicing/nr-gnb.yaml new file mode 100644 index 0000000..72a1723 --- /dev/null +++ b/custom_deployments/slicing/nr-gnb.yaml @@ -0,0 +1,29 @@ +version: '3' +services: + nr_gnb: + image: docker_ueransim + container_name: nr_gnb + stdin_open: true + tty: true + volumes: + - ./ueransim:/mnt/ueransim + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + env_file: + - .custom_env + environment: + - COMPONENT_NAME=ueransim-gnb + expose: + - "38412/sctp" + - "2152/udp" + - "4997/udp" + cap_add: + - NET_ADMIN + privileged: true + networks: + default: + ipv4_address: ${NR_GNB_IP} +networks: + default: + external: + name: docker_open5gs_default diff --git a/custom_deployments/slicing/nr-ue.yaml b/custom_deployments/slicing/nr-ue.yaml new file mode 100644 index 0000000..1a99017 --- /dev/null +++ b/custom_deployments/slicing/nr-ue.yaml @@ -0,0 +1,27 @@ +version: '3' +services: + nr_ue: + image: docker_ueransim + container_name: nr_ue + stdin_open: true + tty: true + volumes: + - ./ueransim:/mnt/ueransim + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + env_file: + - .custom_env + environment: + - COMPONENT_NAME=ueransim-ue + expose: + - "4997/udp" + cap_add: + - NET_ADMIN + privileged: true + networks: + default: + ipv4_address: ${NR_UE_IP} +networks: + default: + external: + name: docker_open5gs_default diff --git a/custom_deployments/slicing/nr-ue2.yaml b/custom_deployments/slicing/nr-ue2.yaml new file mode 100644 index 0000000..0d412f1 --- /dev/null +++ b/custom_deployments/slicing/nr-ue2.yaml @@ -0,0 +1,27 @@ +version: '3' +services: + nr_ue2: + image: docker_ueransim + container_name: nr_ue2 + stdin_open: true + tty: true + volumes: + - ./ueransim:/mnt/ueransim + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + env_file: + - .custom_env + environment: + - COMPONENT_NAME=ueransim-ue2 + expose: + - "4997/udp" + cap_add: + - NET_ADMIN + privileged: true + networks: + default: + ipv4_address: ${NR_UE2_IP} +networks: + default: + external: + name: docker_open5gs_default diff --git a/custom_deployments/slicing/nssf/nssf.yaml b/custom_deployments/slicing/nssf/nssf.yaml new file mode 100644 index 0000000..1c40f81 --- /dev/null +++ b/custom_deployments/slicing/nssf/nssf.yaml @@ -0,0 +1,34 @@ +logger: + file: + path: /open5gs/install/var/log/open5gs/nssf.log + +sbi: + server: + no_tls: true + client: + no_tls: true + +global: + max: + ue: MAX_NUM_UE + +nssf: + sbi: + server: + - address: NSSF_IP + port: 7777 + client: + nrf: + - uri: http://NRF_IP:7777 + scp: + - uri: http://SCP_IP:7777 + nsi: + - uri: http://NRF_IP:7777 + s_nssai: + sst: 1 + sd: 000001 + - uri: http://NRF_IP:7777 + s_nssai: + sst: 1 + sd: 000002 + diff --git a/custom_deployments/slicing/nssf/nssf_init.sh b/custom_deployments/slicing/nssf/nssf_init.sh new file mode 100755 index 0000000..3417de4 --- /dev/null +++ b/custom_deployments/slicing/nssf/nssf_init.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +# BSD 2-Clause License + +# Copyright (c) 2020, Supreeth Herle +# All rights reserved. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: + +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. + +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. + +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +cp /mnt/nssf/nssf.yaml install/etc/open5gs +sed -i 's|NSSF_IP|'$NSSF_IP'|g' install/etc/open5gs/nssf.yaml +sed -i 's|NRF_IP|'$NRF_IP'|g' install/etc/open5gs/nssf.yaml +sed -i 's|SCP_IP|'$SCP_IP'|g' install/etc/open5gs/nssf.yaml +sed -i 's|NRF_IP|'$NRF_IP'|g' install/etc/open5gs/nssf.yaml +sed -i 's|MAX_NUM_UE|'$MAX_NUM_UE'|g' install/etc/open5gs/nssf.yaml + +# Sync docker time +#ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone diff --git a/custom_deployments/slicing/sa-deploy.yaml b/custom_deployments/slicing/sa-deploy.yaml new file mode 100644 index 0000000..da11b6f --- /dev/null +++ b/custom_deployments/slicing/sa-deploy.yaml @@ -0,0 +1,403 @@ +services: + mongo: + image: mongo:6.0 + container_name: mongo + command: --bind_ip 0.0.0.0 + env_file: + - .custom_env + volumes: + - mongodbdata:/data/db + - mongodbdata:/data/configdb + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + expose: + - "27017/udp" + - "27017/tcp" + networks: + default: + ipv4_address: ${MONGO_IP} + webui: + image: docker_open5gs + container_name: webui + depends_on: + - mongo + env_file: + - .custom_env + environment: + - COMPONENT_NAME=webui + volumes: + - ../../webui:/mnt/webui + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + expose: + - "9999/tcp" + ports: + - "9999:9999/tcp" + networks: + default: + ipv4_address: ${WEBUI_IP} + nrf: + image: docker_open5gs + container_name: nrf + env_file: + - .custom_env + environment: + - COMPONENT_NAME=nrf + volumes: + - ../../nrf:/mnt/nrf + - ../../log:/open5gs/install/var/log/open5gs + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + expose: + - "7777/tcp" + networks: + default: + ipv4_address: ${NRF_IP} + scp: + image: docker_open5gs + container_name: scp + env_file: + - .custom_env + environment: + - COMPONENT_NAME=scp + volumes: + - ../../scp:/mnt/scp + - ../../log:/open5gs/install/var/log/open5gs + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + expose: + - "7777/tcp" + networks: + default: + ipv4_address: ${SCP_IP} + ausf: + image: docker_open5gs + depends_on: + - nrf + - scp + container_name: ausf + env_file: + - .custom_env + environment: + - COMPONENT_NAME=ausf + volumes: + - ../../ausf:/mnt/ausf + - ../../log:/open5gs/install/var/log/open5gs + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + expose: + - "7777/tcp" + networks: + default: + ipv4_address: ${AUSF_IP} + udr: + image: docker_open5gs + depends_on: + - nrf + - scp + - mongo + container_name: udr + env_file: + - .custom_env + environment: + - COMPONENT_NAME=udr + volumes: + - ../../udr:/mnt/udr + - ../../log:/open5gs/install/var/log/open5gs + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + expose: + - "7777/tcp" + networks: + default: + ipv4_address: ${UDR_IP} + udm: + image: docker_open5gs + depends_on: + - nrf + - scp + container_name: udm + env_file: + - .custom_env + environment: + - COMPONENT_NAME=udm + volumes: + - ../../udm:/mnt/udm + - ../../log:/open5gs/install/var/log/open5gs + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + expose: + - "7777/tcp" + networks: + default: + ipv4_address: ${UDM_IP} + smf: + image: docker_open5gs + depends_on: + - nrf + - scp + - amf + container_name: smf + env_file: + - .custom_env + environment: + - COMPONENT_NAME=smf + - DEPLOY_MODE=5G + volumes: + - ./smf:/mnt/smf + - ./log:/open5gs/install/var/log/open5gs + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + expose: + - "3868/udp" + - "3868/tcp" + - "3868/sctp" + - "5868/udp" + - "5868/tcp" + - "5868/sctp" + - "8805/udp" + - "2123/udp" + - "7777/tcp" + - "9091/tcp" + networks: + default: + ipv4_address: ${SMF_IP} + smf2: + image: docker_open5gs + depends_on: + - nrf + - scp + - amf + container_name: smf2 + env_file: + - .custom_env + environment: + - COMPONENT_NAME=smf2 + - DEPLOY_MODE=5G + volumes: + - ./smf:/mnt/smf + - ./log:/open5gs/install/var/log/open5gs + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + expose: + - "3868/udp" + - "3868/tcp" + - "3868/sctp" + - "5868/udp" + - "5868/tcp" + - "5868/sctp" + - "8805/udp" + - "2123/udp" + - "7777/tcp" + - "9091/tcp" + networks: + default: + ipv4_address: ${SMF2_IP} + upf: + image: docker_open5gs + depends_on: + - nrf + - scp + - smf + container_name: upf + env_file: + - .custom_env + environment: + - COMPONENT_NAME=upf + volumes: + - ./upf:/mnt/upf + - ./log:/open5gs/install/var/log/open5gs + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + expose: + - "2152/udp" + - "8805/udp" + - "9091/tcp" + # ports: + # - "2152:2152/udp" + cap_add: + - NET_ADMIN + privileged: true + sysctls: + - net.ipv4.ip_forward=1 + #- net.ipv6.conf.all.disable_ipv6=0 + networks: + default: + ipv4_address: ${UPF_IP} + upf2: + image: docker_open5gs + depends_on: + - nrf + - scp + - smf2 + container_name: upf2 + env_file: + - .custom_env + environment: + - COMPONENT_NAME=upf2 + volumes: + - ./upf:/mnt/upf + - ./log:/open5gs/install/var/log/open5gs + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + expose: + - "2152/udp" + - "8805/udp" + - "9091/tcp" + # ports: + # - "2152:2152/udp" + cap_add: + - NET_ADMIN + privileged: true + sysctls: + - net.ipv4.ip_forward=1 + #- net.ipv6.conf.all.disable_ipv6=0 + networks: + default: + ipv4_address: ${UPF2_IP} + amf: + image: docker_open5gs + depends_on: + - nrf + - scp + - ausf + - udm + - udr + - pcf + - bsf + container_name: amf + env_file: + - .custom_env + environment: + - COMPONENT_NAME=amf + volumes: + - ./amf:/mnt/amf + - ./log:/open5gs/install/var/log/open5gs + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + expose: + - "38412/sctp" + - "7777/tcp" + - "9091/tcp" + # ports: + # - "38412:38412/sctp" + networks: + default: + ipv4_address: ${AMF_IP} + pcf: + image: docker_open5gs + depends_on: + - nrf + - scp + - mongo + container_name: pcf + env_file: + - .custom_env + environment: + - COMPONENT_NAME=pcf + volumes: + - ../../pcf:/mnt/pcf + - ../../log:/open5gs/install/var/log/open5gs + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + expose: + - "7777/tcp" + - "9091/tcp" + networks: + default: + ipv4_address: ${PCF_IP} + bsf: + image: docker_open5gs + depends_on: + - nrf + - scp + - mongo + container_name: bsf + env_file: + - .custom_env + environment: + - COMPONENT_NAME=bsf + volumes: + - ../../bsf:/mnt/bsf + - ../../log:/open5gs/install/var/log/open5gs + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + expose: + - "7777/tcp" + networks: + default: + ipv4_address: ${BSF_IP} + nssf: + image: docker_open5gs + depends_on: + - nrf + - scp + - mongo + container_name: nssf + env_file: + - .custom_env + environment: + - COMPONENT_NAME=nssf + volumes: + - ./nssf:/mnt/nssf + - ./log:/open5gs/install/var/log/open5gs + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + expose: + - "7777/tcp" + networks: + default: + ipv4_address: ${NSSF_IP} + metrics: + build: ./metrics + image: docker_metrics + container_name: metrics + env_file: + - .custom_env + volumes: + - ../../metrics:/mnt/metrics + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + expose: + - "9090/tcp" + ports: + - "9090:9090/tcp" + networks: + default: + ipv4_address: ${METRICS_IP} + grafana: + image: grafana/grafana:11.3.0 + container_name: grafana + env_file: + - .custom_env + volumes: + - grafana_data:/var/lib/grafana + - ../../grafana/:/etc/grafana/provisioning/ + - ../../grafana:/mnt/grafana + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + environment: + - GF_SECURITY_ADMIN_USER=${GRAFANA_USERNAME} + - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD} + #- GF_INSTALL_PLUGINS=${GRAFANA_INSTALL_PLUGINS} + - GF_PATHS_PROVISIONING=/etc/grafana/provisioning + - GF_PATHS_DATA=/var/lib/grafana + - METRICS_IP=${METRICS_IP} + expose: + - "3000/tcp" + ports: + - "3000:3000/tcp" + networks: + default: + ipv4_address: ${GRAFANA_IP} +networks: + default: + name: docker_open5gs_default + ipam: + config: + - subnet: ${TEST_NETWORK} +volumes: + grafana_data: + name: grafana_data + mongodbdata: + name: docker_open5gs_mongodbdata diff --git a/custom_deployments/slicing/smf/ip_utils.py b/custom_deployments/slicing/smf/ip_utils.py new file mode 100755 index 0000000..576535d --- /dev/null +++ b/custom_deployments/slicing/smf/ip_utils.py @@ -0,0 +1,70 @@ +# BSD 2-Clause License + +# Copyright (c) 2020, Supreeth Herle +# All rights reserved. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: + +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. + +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. + +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +import click +import sys +import ipaddress + +""" +Script used to fetch first IP address in a given IP range. i.e. the calling bash script reads the std output + +Usage in command line: +e.g: +$ python3 ip_utils.py --ip_range 192.168.100.0/24 +$ python3 ip_utils.py --ip_range 2001:230:cafe::/48 +""" + + +def validate_ip_net(ctx, param, value): + try: + ip_net = ipaddress.ip_network(value) + return ip_net + except ValueError: + raise click.BadParameter( + 'Value does not represent a valid IPv4/IPv6 range') + + +@click.command() +@click.option('--ip_range', + required=True, + callback=validate_ip_net, + help='UE IPv4/IPv6 Address range in CIDR format e.g. 192.168.100.0/24 or 2001:230:cafe::/48') +def start(ip_range): + + # Get the first IP address in the IP range and netmask prefix length + first_ip_addr = next(ip_range.hosts(), None) + if not first_ip_addr: + raise ValueError('Invalid UE IPv4 range. Only one IP given') + else: + first_ip_addr = first_ip_addr.exploded + print(str(first_ip_addr)) + +if __name__ == '__main__': + try: + start() + sys.exit(0) + except ValueError: + sys.exit(1) diff --git a/custom_deployments/slicing/smf/smf.yaml b/custom_deployments/slicing/smf/smf.yaml new file mode 100644 index 0000000..7fe88b7 --- /dev/null +++ b/custom_deployments/slicing/smf/smf.yaml @@ -0,0 +1,64 @@ +logger: + file: + path: /open5gs/install/var/log/open5gs/smf.log + +sbi: + server: + no_tls: true + client: + no_tls: true + +global: + max: + ue: MAX_NUM_UE + parameter: + no_ipv4v6_local_addr_in_packet_filter: true + +smf: + info: + - s_nssai: + - sst: 1 + sd: 000001 + dnn: + - internet + sbi: + server: + - address: SMF_IP + port: 7777 + client: + nrf: + - uri: http://NRF_IP:7777 + scp: + - uri: http://SCP_IP:7777 + gtpc: + server: + - address: SMF_IP + gtpu: + server: + - address: SMF_IP + pfcp: + server: + - address: SMF_IP + client: + upf: + - address: UPF_IP + dnn: internet + session: + - subnet: UE_IPV4_INTERNET_SUBNET + gateway: UE_IPV4_INTERNET_TUN_IP + dnn: internet + - subnet: 2001:230:cafe::/48 + gateway: 2001:230:cafe::1 + dnn: internet + dns: + - SMF_DNS1 + - SMF_DNS2 + - 2001:4860:4860::8888 + - 2001:4860:4860::8844 + p-cscf: + - PCSCF_IP + mtu: 1450 + metrics: + server: + - address: SMF_IP + port: 9091 diff --git a/custom_deployments/slicing/smf/smf2.yaml b/custom_deployments/slicing/smf/smf2.yaml new file mode 100644 index 0000000..44d3714 --- /dev/null +++ b/custom_deployments/slicing/smf/smf2.yaml @@ -0,0 +1,64 @@ +logger: + file: + path: /open5gs/install/var/log/open5gs/smf2.log + +sbi: + server: + no_tls: true + client: + no_tls: true + +global: + max: + ue: MAX_NUM_UE + parameter: + no_ipv4v6_local_addr_in_packet_filter: true + +smf: + info: + - s_nssai: + - sst: 1 + sd: 000002 + dnn: + - private + sbi: + server: + - address: SMF2_IP + port: 7777 + client: + nrf: + - uri: http://NRF_IP:7777 + scp: + - uri: http://SCP_IP:7777 + gtpc: + server: + - address: SMF2_IP + gtpu: + server: + - address: SMF2_IP + pfcp: + server: + - address: SMF2_IP + client: + upf: + - address: UPF2_IP + dnn: private + session: + - subnet: UE_IPV4_PRIVATE_SUBNET + gateway: UE_IPV4_PRIVATE_TUN_IP + dnn: private + - subnet: 2001:230:fafe::/48 + gateway: 2001:230:fafe::1 + dnn: private + dns: + - SMF_DNS1 + - SMF_DNS2 + - 2001:4860:4860::8888 + - 2001:4860:4860::8844 + p-cscf: + - PCSCF_IP + mtu: 1450 + metrics: + server: + - address: SMF2_IP + port: 9091 diff --git a/custom_deployments/slicing/smf/smf2_init.sh b/custom_deployments/slicing/smf/smf2_init.sh new file mode 100755 index 0000000..14a4315 --- /dev/null +++ b/custom_deployments/slicing/smf/smf2_init.sh @@ -0,0 +1,57 @@ +#!/bin/bash + +# BSD 2-Clause License + +# Copyright (c) 2020, Supreeth Herle +# All rights reserved. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: + +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. + +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. + +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +export LC_ALL=C.UTF-8 +export LANG=C.UTF-8 +export IP_ADDR=$(awk 'END{print $1}' /etc/hosts) +export IF_NAME=$(ip r | awk '/default/ { print $5 }') + +[ ${#MNC} == 3 ] && EPC_DOMAIN="epc.mnc${MNC}.mcc${MCC}.3gppnetwork.org" || EPC_DOMAIN="epc.mnc0${MNC}.mcc${MCC}.3gppnetwork.org" + +UE_IPV4_PRIVATE_TUN_IP=$(python3 /mnt/smf/ip_utils.py --ip_range $UE_IPV4_PRIVATE) + +cp /mnt/smf/smf2.yaml install/etc/open5gs/smf.yaml +if [[ ${DEPLOY_MODE} == 4G ]]; +then + echo "Error: Invalid deployment mode for SMF: '$DEPLOY_MODE'" + exit 1 +fi + +sed -i 's|SMF2_IP|'$SMF2_IP'|g' install/etc/open5gs/smf.yaml +sed -i 's|SCP_IP|'$SCP_IP'|g' install/etc/open5gs/smf.yaml +sed -i 's|NRF_IP|'$NRF_IP'|g' install/etc/open5gs/smf.yaml +sed -i 's|UPF2_IP|'$UPF2_IP'|g' install/etc/open5gs/smf.yaml +sed -i 's|SMF_DNS1|'$SMF_DNS1'|g' install/etc/open5gs/smf.yaml +sed -i 's|SMF_DNS2|'$SMF_DNS2'|g' install/etc/open5gs/smf.yaml +sed -i 's|UE_IPV4_PRIVATE_TUN_IP|'$UE_IPV4_PRIVATE_TUN_IP'|g' install/etc/open5gs/smf.yaml +sed -i 's|UE_IPV4_PRIVATE_SUBNET|'$UE_IPV4_PRIVATE'|g' install/etc/open5gs/smf.yaml +sed -i 's|PCSCF_IP|'$PCSCF_IP'|g' install/etc/open5gs/smf.yaml +sed -i 's|MAX_NUM_UE|'$MAX_NUM_UE'|g' install/etc/open5gs/smf.yaml + +# Sync docker time +#ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone diff --git a/custom_deployments/slicing/smf/smf_init.sh b/custom_deployments/slicing/smf/smf_init.sh new file mode 100755 index 0000000..bd95b06 --- /dev/null +++ b/custom_deployments/slicing/smf/smf_init.sh @@ -0,0 +1,60 @@ +#!/bin/bash + +# BSD 2-Clause License + +# Copyright (c) 2020, Supreeth Herle +# All rights reserved. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: + +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. + +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. + +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +export LC_ALL=C.UTF-8 +export LANG=C.UTF-8 +export IP_ADDR=$(awk 'END{print $1}' /etc/hosts) +export IF_NAME=$(ip r | awk '/default/ { print $5 }') + +[ ${#MNC} == 3 ] && EPC_DOMAIN="epc.mnc${MNC}.mcc${MCC}.3gppnetwork.org" || EPC_DOMAIN="epc.mnc0${MNC}.mcc${MCC}.3gppnetwork.org" + +UE_IPV4_INTERNET_TUN_IP=$(python3 /mnt/smf/ip_utils.py --ip_range $UE_IPV4_INTERNET) +UE_IPV4_IMS_TUN_IP=$(python3 /mnt/smf/ip_utils.py --ip_range $UE_IPV4_IMS) + +cp /mnt/smf/smf.yaml install/etc/open5gs +if [[ ${DEPLOY_MODE} == 4G ]]; +then + echo "Error: Invalid deployment mode for SMF: '$DEPLOY_MODE'" + exit 1 +fi + +sed -i 's|SMF_IP|'$SMF_IP'|g' install/etc/open5gs/smf.yaml +sed -i 's|SCP_IP|'$SCP_IP'|g' install/etc/open5gs/smf.yaml +sed -i 's|NRF_IP|'$NRF_IP'|g' install/etc/open5gs/smf.yaml +sed -i 's|UPF_IP|'$UPF_IP'|g' install/etc/open5gs/smf.yaml +sed -i 's|SMF_DNS1|'$SMF_DNS1'|g' install/etc/open5gs/smf.yaml +sed -i 's|SMF_DNS2|'$SMF_DNS2'|g' install/etc/open5gs/smf.yaml +sed -i 's|UE_IPV4_INTERNET_TUN_IP|'$UE_IPV4_INTERNET_TUN_IP'|g' install/etc/open5gs/smf.yaml +sed -i 's|UE_IPV4_INTERNET_SUBNET|'$UE_IPV4_INTERNET'|g' install/etc/open5gs/smf.yaml +sed -i 's|UE_IPV4_IMS_TUN_IP|'$UE_IPV4_IMS_TUN_IP'|g' install/etc/open5gs/smf.yaml +sed -i 's|UE_IPV4_IMS_SUBNET|'$UE_IPV4_IMS'|g' install/etc/open5gs/smf.yaml +sed -i 's|PCSCF_IP|'$PCSCF_IP'|g' install/etc/open5gs/smf.yaml +sed -i 's|MAX_NUM_UE|'$MAX_NUM_UE'|g' install/etc/open5gs/smf.yaml + +# Sync docker time +#ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone diff --git a/custom_deployments/slicing/ueransim/ueransim-gnb.yaml b/custom_deployments/slicing/ueransim/ueransim-gnb.yaml new file mode 100644 index 0000000..6f1933d --- /dev/null +++ b/custom_deployments/slicing/ueransim/ueransim-gnb.yaml @@ -0,0 +1,25 @@ +mcc: 'MCC' # Mobile Country Code value +mnc: 'MNC' # Mobile Network Code value (2 or 3 digits) + +nci: '0x000000010' # NR Cell Identity (36-bit) +idLength: 32 # NR gNB ID length in bits [22...32] +tac: 1 # Tracking Area Code + +linkIp: NR_GNB_IP # gNB's local IP address for Radio Link Simulation (Usually same with local IP) +ngapIp: NR_GNB_IP # gNB's local IP address for N2 Interface (Usually same with local IP) +gtpIp: NR_GNB_IP # gNB's local IP address for N3 Interface (Usually same with local IP) + +# List of AMF address information +amfConfigs: + - address: AMF_IP + port: 38412 + +# List of supported S-NSSAIs by this gNB +slices: + - sst: 1 + sd: 0x000001 + - sst: 1 + sd: 0x000002 + +# Indicates whether or not SCTP stream number errors should be ignored. +ignoreStreamIds: true diff --git a/custom_deployments/slicing/ueransim/ueransim-gnb_init.sh b/custom_deployments/slicing/ueransim/ueransim-gnb_init.sh new file mode 100755 index 0000000..227a83f --- /dev/null +++ b/custom_deployments/slicing/ueransim/ueransim-gnb_init.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +# BSD 2-Clause License + +# Copyright (c) 2020, Supreeth Herle +# All rights reserved. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: + +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. + +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. + +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +export IP_ADDR=$(awk 'END{print $1}' /etc/hosts) + +cp /mnt/ueransim/${COMPONENT_NAME}.yaml /UERANSIM/config/${COMPONENT_NAME}.yaml + +sed -i 's|MNC|'$MNC'|g' /UERANSIM/config/${COMPONENT_NAME}.yaml +sed -i 's|MCC|'$MCC'|g' /UERANSIM/config/${COMPONENT_NAME}.yaml +sed -i 's|NR_GNB_IP|'$NR_GNB_IP'|g' /UERANSIM/config/${COMPONENT_NAME}.yaml +sed -i 's|AMF_IP|'$AMF_IP'|g' /UERANSIM/config/${COMPONENT_NAME}.yaml + +# Sync docker time +#ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone diff --git a/custom_deployments/slicing/ueransim/ueransim-ue.yaml b/custom_deployments/slicing/ueransim/ueransim-ue.yaml new file mode 100644 index 0000000..dae3bea --- /dev/null +++ b/custom_deployments/slicing/ueransim/ueransim-ue.yaml @@ -0,0 +1,72 @@ +# IMSI number of the UE. IMSI = [MCC|MNC|MSISDN] (In total 15 or 16 digits) +supi: 'imsi-UE1_IMSI' +# Mobile Country Code value of HPLMN +mcc: 'MCC' +# Mobile Network Code value of HPLMN (2 or 3 digits) +mnc: 'MNC' + +# Permanent subscription key +key: 'UE1_KI' +# Operator code (OP or OPC) of the UE +op: 'UE1_OP' +# This value specifies the OP type and it can be either 'OP' or 'OPC' +opType: 'OP' +# Authentication Management Field (AMF) value +amf: 'UE1_AMF' +# IMEI number of the device. It is used if no SUPI is provided +imei: 'UE1_IMEI' +# IMEISV number of the device. It is used if no SUPI and IMEI is provided +imeiSv: 'UE1_IMEISV' + +# List of gNB IP addresses for Radio Link Simulation +gnbSearchList: + - NR_GNB_IP + +# UAC Access Identities Configuration +uacAic: + mps: false + mcs: false + +# UAC Access Control Class +uacAcc: + normalClass: 0 + class11: false + class12: false + class13: false + class14: false + class15: false + +# Initial PDU sessions to be established +sessions: + - type: 'IPv4' + apn: 'internet' + slice: + sst: 1 + sd: 0x000001 + +# Configured NSSAI for this UE by HPLMN +configured-nssai: + - sst: 1 + sd: 0x000001 + +# Default Configured NSSAI for this UE +default-nssai: + - sst: 1 + sd: 0x000001 + +# Supported encryption algorithms by this UE +integrity: + IA1: true + IA2: true + IA3: true + +# Supported integrity algorithms by this UE +ciphering: + EA1: true + EA2: true + EA3: true + +# Integrity protection maximum data rate for user plane +integrityMaxRate: + uplink: 'full' + downlink: 'full' diff --git a/custom_deployments/slicing/ueransim/ueransim-ue2.yaml b/custom_deployments/slicing/ueransim/ueransim-ue2.yaml new file mode 100644 index 0000000..f1e0a57 --- /dev/null +++ b/custom_deployments/slicing/ueransim/ueransim-ue2.yaml @@ -0,0 +1,72 @@ +# IMSI number of the UE. IMSI = [MCC|MNC|MSISDN] (In total 15 or 16 digits) +supi: 'imsi-UE2_IMSI' +# Mobile Country Code value of HPLMN +mcc: 'MCC' +# Mobile Network Code value of HPLMN (2 or 3 digits) +mnc: 'MNC' + +# Permanent subscription key +key: 'UE2_KI' +# Operator code (OP or OPC) of the UE +op: 'UE2_OP' +# This value specifies the OP type and it can be either 'OP' or 'OPC' +opType: 'OP' +# Authentication Management Field (AMF) value +amf: 'UE2_AMF' +# IMEI number of the device. It is used if no SUPI is provided +imei: 'UE2_IMEI' +# IMEISV number of the device. It is used if no SUPI and IMEI is provided +imeiSv: 'UE2_IMEISV' + +# List of gNB IP addresses for Radio Link Simulation +gnbSearchList: + - NR_GNB_IP + +# UAC Access Identities Configuration +uacAic: + mps: false + mcs: false + +# UAC Access Control Class +uacAcc: + normalClass: 0 + class11: false + class12: false + class13: false + class14: false + class15: false + +# Initial PDU sessions to be established +sessions: + - type: 'IPv4' + apn: 'private' + slice: + sst: 1 + sd: 0x000002 + +# Configured NSSAI for this UE by HPLMN +configured-nssai: + - sst: 1 + sd: 0x000002 + +# Default Configured NSSAI for this UE +default-nssai: + - sst: 1 + sd: 0x000002 + +# Supported encryption algorithms by this UE +integrity: + IA1: true + IA2: true + IA3: true + +# Supported integrity algorithms by this UE +ciphering: + EA1: true + EA2: true + EA3: true + +# Integrity protection maximum data rate for user plane +integrityMaxRate: + uplink: 'full' + downlink: 'full' diff --git a/custom_deployments/slicing/ueransim/ueransim-ue2_init.sh b/custom_deployments/slicing/ueransim/ueransim-ue2_init.sh new file mode 100755 index 0000000..9245043 --- /dev/null +++ b/custom_deployments/slicing/ueransim/ueransim-ue2_init.sh @@ -0,0 +1,44 @@ +#!/bin/bash + +# BSD 2-Clause License + +# Copyright (c) 2020, Supreeth Herle +# All rights reserved. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: + +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. + +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. + +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +export IP_ADDR=$(awk 'END{print $1}' /etc/hosts) + +cp /mnt/ueransim/${COMPONENT_NAME}.yaml /UERANSIM/config/${COMPONENT_NAME}.yaml +sed -i 's|MNC|'$MNC'|g' /UERANSIM/config/${COMPONENT_NAME}.yaml +sed -i 's|MCC|'$MCC'|g' /UERANSIM/config/${COMPONENT_NAME}.yaml + +sed -i 's|UE2_KI|'$UE2_KI'|g' /UERANSIM/config/${COMPONENT_NAME}.yaml +sed -i 's|UE2_OP|'$UE2_OP'|g' /UERANSIM/config/${COMPONENT_NAME}.yaml +sed -i 's|UE2_AMF|'$UE2_AMF'|g' /UERANSIM/config/${COMPONENT_NAME}.yaml +sed -i 's|UE2_IMEISV|'$UE2_IMEISV'|g' /UERANSIM/config/${COMPONENT_NAME}.yaml +sed -i 's|UE2_IMEI|'$UE2_IMEI'|g' /UERANSIM/config/${COMPONENT_NAME}.yaml +sed -i 's|UE2_IMSI|'$UE2_IMSI'|g' /UERANSIM/config/${COMPONENT_NAME}.yaml +sed -i 's|NR_GNB_IP|'$NR_GNB_IP'|g' /UERANSIM/config/${COMPONENT_NAME}.yaml + +# Sync docker time +#ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone diff --git a/custom_deployments/slicing/ueransim/ueransim-ue_init.sh b/custom_deployments/slicing/ueransim/ueransim-ue_init.sh new file mode 100755 index 0000000..a11ecca --- /dev/null +++ b/custom_deployments/slicing/ueransim/ueransim-ue_init.sh @@ -0,0 +1,44 @@ +#!/bin/bash + +# BSD 2-Clause License + +# Copyright (c) 2020, Supreeth Herle +# All rights reserved. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: + +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. + +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. + +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +export IP_ADDR=$(awk 'END{print $1}' /etc/hosts) + +cp /mnt/ueransim/${COMPONENT_NAME}.yaml /UERANSIM/config/${COMPONENT_NAME}.yaml +sed -i 's|MNC|'$MNC'|g' /UERANSIM/config/${COMPONENT_NAME}.yaml +sed -i 's|MCC|'$MCC'|g' /UERANSIM/config/${COMPONENT_NAME}.yaml + +sed -i 's|UE1_KI|'$UE1_KI'|g' /UERANSIM/config/${COMPONENT_NAME}.yaml +sed -i 's|UE1_OP|'$UE1_OP'|g' /UERANSIM/config/${COMPONENT_NAME}.yaml +sed -i 's|UE1_AMF|'$UE1_AMF'|g' /UERANSIM/config/${COMPONENT_NAME}.yaml +sed -i 's|UE1_IMEISV|'$UE1_IMEISV'|g' /UERANSIM/config/${COMPONENT_NAME}.yaml +sed -i 's|UE1_IMEI|'$UE1_IMEI'|g' /UERANSIM/config/${COMPONENT_NAME}.yaml +sed -i 's|UE1_IMSI|'$UE1_IMSI'|g' /UERANSIM/config/${COMPONENT_NAME}.yaml +sed -i 's|NR_GNB_IP|'$NR_GNB_IP'|g' /UERANSIM/config/${COMPONENT_NAME}.yaml + +# Sync docker time +#ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone diff --git a/custom_deployments/slicing/upf/ip_utils.py b/custom_deployments/slicing/upf/ip_utils.py new file mode 100755 index 0000000..576535d --- /dev/null +++ b/custom_deployments/slicing/upf/ip_utils.py @@ -0,0 +1,70 @@ +# BSD 2-Clause License + +# Copyright (c) 2020, Supreeth Herle +# All rights reserved. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: + +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. + +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. + +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +import click +import sys +import ipaddress + +""" +Script used to fetch first IP address in a given IP range. i.e. the calling bash script reads the std output + +Usage in command line: +e.g: +$ python3 ip_utils.py --ip_range 192.168.100.0/24 +$ python3 ip_utils.py --ip_range 2001:230:cafe::/48 +""" + + +def validate_ip_net(ctx, param, value): + try: + ip_net = ipaddress.ip_network(value) + return ip_net + except ValueError: + raise click.BadParameter( + 'Value does not represent a valid IPv4/IPv6 range') + + +@click.command() +@click.option('--ip_range', + required=True, + callback=validate_ip_net, + help='UE IPv4/IPv6 Address range in CIDR format e.g. 192.168.100.0/24 or 2001:230:cafe::/48') +def start(ip_range): + + # Get the first IP address in the IP range and netmask prefix length + first_ip_addr = next(ip_range.hosts(), None) + if not first_ip_addr: + raise ValueError('Invalid UE IPv4 range. Only one IP given') + else: + first_ip_addr = first_ip_addr.exploded + print(str(first_ip_addr)) + +if __name__ == '__main__': + try: + start() + sys.exit(0) + except ValueError: + sys.exit(1) diff --git a/custom_deployments/slicing/upf/tun_if.py b/custom_deployments/slicing/upf/tun_if.py new file mode 100755 index 0000000..d39d649 --- /dev/null +++ b/custom_deployments/slicing/upf/tun_if.py @@ -0,0 +1,108 @@ +# BSD 2-Clause License + +# Copyright (c) 2020, Supreeth Herle +# All rights reserved. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: + +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. + +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. + +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +import click +import subprocess +import ipaddress + +""" +Usage in command line: +e.g: +$ python3 tun_if.py --tun_ifname ogstun --ipv4_range 192.168.100.0/24 --ipv6_range 2001:230:cafe::/48 +""" + + +def validate_ip_net(ctx, param, value): + try: + ip_net = ipaddress.ip_network(value) + return ip_net + except ValueError: + raise click.BadParameter( + 'Value does not represent a valid IPv4/IPv6 range') + + +@click.command() +@click.option('--tun_ifname', + required=True, + help='TUN interface name e.g. ogstun') +@click.option('--ipv4_range', + required=True, + callback=validate_ip_net, + help='UE IPv4 Address range in CIDR format e.g. 192.168.100.0/24') +@click.option('--ipv6_range', + required=True, + callback=validate_ip_net, + help='UE IPv6 Address range in CIDR format e.g. 2001:230:cafe::/48') +@click.option('--nat_rule', + default='yes', + help='Option specifying whether to add NATing iptables rule or not') +def start(tun_ifname, + ipv4_range, + ipv6_range, + nat_rule): + + # Get the first IP address in the IP range and netmask prefix length + first_ipv4_addr = next(ipv4_range.hosts(), None) + if not first_ipv4_addr: + raise ValueError('Invalid UE IPv4 range. Only one IP given') + else: + first_ipv4_addr = first_ipv4_addr.exploded + first_ipv6_addr = next(ipv6_range.hosts(), None) + if not first_ipv6_addr: + raise ValueError('Invalid UE IPv6 range. Only one IP given') + else: + first_ipv6_addr = first_ipv6_addr.exploded + + ipv4_netmask_prefix = ipv4_range.prefixlen + ipv6_netmask_prefix = ipv6_range.prefixlen + + # Setup the TUN interface, set IP address and setup IPtables + # if ls /sys/class/net | grep "ogstun" ; then ip link delete ogstun; fi + execute_bash_cmd('ip tuntap add name ' + tun_ifname + ' mode tun') + execute_bash_cmd('ip addr add ' + first_ipv4_addr + '/' + + str(ipv4_netmask_prefix) + ' dev ' + tun_ifname) + execute_bash_cmd('ip addr add ' + first_ipv6_addr + '/' + + str(ipv6_netmask_prefix) + ' dev ' + tun_ifname) + execute_bash_cmd('ip link set ' + tun_ifname + ' mtu 1450') + execute_bash_cmd('ip link set ' + tun_ifname + ' up') + if nat_rule == 'yes': + execute_bash_cmd('if ! iptables-save | grep -- \"-A POSTROUTING -s ' + ipv4_range.with_prefixlen + ' ! -o ' + tun_ifname + ' -j MASQUERADE\" ; then ' + + 'iptables -t nat -A POSTROUTING -s ' + ipv4_range.with_prefixlen + ' ! -o ' + tun_ifname + ' -j MASQUERADE; fi') + execute_bash_cmd('if ! ip6tables-save | grep -- \"-A POSTROUTING -s ' + ipv6_range.with_prefixlen + ' ! -o ' + tun_ifname + ' -j MASQUERADE\" ; then ' + + 'ip6tables -t nat -A POSTROUTING -s ' + ipv6_range.with_prefixlen + ' ! -o ' + tun_ifname + ' -j MASQUERADE; fi') + execute_bash_cmd('if ! iptables-save | grep -- \"-A INPUT -i ' + tun_ifname + ' -j ACCEPT\" ; then ' + + 'iptables -A INPUT -i ' + tun_ifname + ' -j ACCEPT; fi') + execute_bash_cmd('if ! ip6tables-save | grep -- \"-A INPUT -i ' + tun_ifname + ' -j ACCEPT\" ; then ' + + 'ip6tables -A INPUT -i ' + tun_ifname + ' -j ACCEPT; fi') + + +def execute_bash_cmd(bash_cmd): + # print("Executing: /bin/bash -c " + bash_cmd) + return subprocess.run(bash_cmd, stdout=subprocess.PIPE, shell=True) + + +if __name__ == '__main__': + start() diff --git a/custom_deployments/slicing/upf/upf.yaml b/custom_deployments/slicing/upf/upf.yaml new file mode 100644 index 0000000..c56d864 --- /dev/null +++ b/custom_deployments/slicing/upf/upf.yaml @@ -0,0 +1,32 @@ +logger: + file: + path: /open5gs/install/var/log/open5gs/upf.log + +global: + max: + ue: MAX_NUM_UE + +upf: + pfcp: + server: + - address: UPF_IP + client: + smf: + - address: SMF_IP + dnn: internet + gtpu: + server: + - address: UPF_IP + advertise: UPF_ADVERTISE_IP + session: + - subnet: UE_IPV4_INTERNET_SUBNET + gateway: UE_IPV4_INTERNET_TUN_IP + dnn: internet + dev: ogstun + - subnet: 2001:230:cafe::/48 + gateway: 2001:230:cafe::1 + dnn: internet + metrics: + server: + - address: UPF_IP + port: 9091 diff --git a/custom_deployments/slicing/upf/upf2.yaml b/custom_deployments/slicing/upf/upf2.yaml new file mode 100644 index 0000000..092c531 --- /dev/null +++ b/custom_deployments/slicing/upf/upf2.yaml @@ -0,0 +1,33 @@ +logger: + file: + path: /open5gs/install/var/log/open5gs/upf2.log + +global: + max: + ue: MAX_NUM_UE + +upf: + pfcp: + server: + - address: UPF2_IP + client: + smf: + - address: SMF2_IP + dnn: private + gtpu: + server: + - address: UPF2_IP + advertise: UPF2_ADVERTISE_IP + session: + - subnet: UE_IPV4_PRIVATE_SUBNET + gateway: UE_IPV4_PRIVATE_TUN_IP + dnn: private + dev: ogstun + - subnet: 2001:230:fafe::/48 + gateway: 2001:230:fafe::1 + dnn: private + dev: ogstun + metrics: + server: + - address: UPF2_IP + port: 9091 diff --git a/custom_deployments/slicing/upf/upf2_init.sh b/custom_deployments/slicing/upf/upf2_init.sh new file mode 100755 index 0000000..a04babc --- /dev/null +++ b/custom_deployments/slicing/upf/upf2_init.sh @@ -0,0 +1,48 @@ +#!/bin/bash + +# BSD 2-Clause License + +# Copyright (c) 2020, Supreeth Herle +# All rights reserved. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: + +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. + +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. + +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +export LC_ALL=C.UTF-8 +export LANG=C.UTF-8 +export IP_ADDR=$(awk 'END{print $1}' /etc/hosts) +export IF_NAME=$(ip r | awk '/default/ { print $5 }') + +python3 /mnt/upf/tun_if.py --tun_ifname ogstun --ipv4_range $UE_IPV4_PRIVATE --ipv6_range 2001:230:fafe::/48 + +UE_IPV4_PRIVATE_TUN_IP=$(python3 /mnt/upf/ip_utils.py --ip_range $UE_IPV4_PRIVATE) + +cp /mnt/upf/upf2.yaml install/etc/open5gs/upf.yaml + +sed -i 's|UPF2_IP|'$UPF2_IP'|g' install/etc/open5gs/upf.yaml +sed -i 's|SMF2_IP|'$SMF2_IP'|g' install/etc/open5gs/upf.yaml +sed -i 's|UE_IPV4_PRIVATE_TUN_IP|'$UE_IPV4_PRIVATE_TUN_IP'|g' install/etc/open5gs/upf.yaml +sed -i 's|UE_IPV4_PRIVATE_SUBNET|'$UE_IPV4_PRIVATE'|g' install/etc/open5gs/upf.yaml +sed -i 's|UPF2_ADVERTISE_IP|'$UPF2_ADVERTISE_IP'|g' install/etc/open5gs/upf.yaml +sed -i 's|MAX_NUM_UE|'$MAX_NUM_UE'|g' install/etc/open5gs/upf.yaml + +# Sync docker time +#ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone diff --git a/custom_deployments/slicing/upf/upf_init.sh b/custom_deployments/slicing/upf/upf_init.sh new file mode 100755 index 0000000..5cbbc5a --- /dev/null +++ b/custom_deployments/slicing/upf/upf_init.sh @@ -0,0 +1,49 @@ +#!/bin/bash + +# BSD 2-Clause License + +# Copyright (c) 2020, Supreeth Herle +# All rights reserved. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: + +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. + +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. + +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +export LC_ALL=C.UTF-8 +export LANG=C.UTF-8 +export IP_ADDR=$(awk 'END{print $1}' /etc/hosts) +export IF_NAME=$(ip r | awk '/default/ { print $5 }') + +python3 /mnt/upf/tun_if.py --tun_ifname ogstun --ipv4_range $UE_IPV4_INTERNET --ipv6_range 2001:230:cafe::/48 + +UE_IPV4_INTERNET_TUN_IP=$(python3 /mnt/upf/ip_utils.py --ip_range $UE_IPV4_INTERNET) + +cp /mnt/upf/upf.yaml install/etc/open5gs +sed -i 's|UPF_IP|'$UPF_IP'|g' install/etc/open5gs/upf.yaml +sed -i 's|SMF_IP|'$SMF_IP'|g' install/etc/open5gs/upf.yaml +sed -i 's|UE_IPV4_INTERNET_TUN_IP|'$UE_IPV4_INTERNET_TUN_IP'|g' install/etc/open5gs/upf.yaml +sed -i 's|UE_IPV4_INTERNET_SUBNET|'$UE_IPV4_INTERNET'|g' install/etc/open5gs/upf.yaml +sed -i 's|UE_IPV4_IMS_TUN_IP|'$UE_IPV4_IMS_TUN_IP'|g' install/etc/open5gs/upf.yaml +sed -i 's|UE_IPV4_IMS_SUBNET|'$UE_IPV4_IMS'|g' install/etc/open5gs/upf.yaml +sed -i 's|UPF_ADVERTISE_IP|'$UPF_ADVERTISE_IP'|g' install/etc/open5gs/upf.yaml +sed -i 's|MAX_NUM_UE|'$MAX_NUM_UE'|g' install/etc/open5gs/upf.yaml + +# Sync docker time +#ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone