.. SPDX-FileCopyrightText: © 2022 Open Networking Foundation SPDX-License-Identifier: Apache-2.0 .. _deployment_gnbsim_guide: gNBSim Deployment Guide ======================== gNBSim in AIAB mode with 2 interfaces ``````````````````````````````````````` - This is default mode of deployment for gNB Simulator - Multus cni needs to be enabled on cluster. Required for bess-upf & gNBSim - `make 5gc` will by default deploy gNB Simulator in this mode - One interface is used for user plane traffic towards UPF - Second interface is used to send traffic towards control plane (i.e. AMF). - UPF network & default gateway is provided in the override values. - Route to UPF network is added when POD comes up - defaultAs is configured per profile. This address is used to send data traffic during test .. note:: Multiple gNB's in one simulator instance need more changes in helm chart. This is pending work. To add UPF routes. Following is example of override values :: config: gnbsim: gnb: ip: 192.168.251.5/24 #user plane IP at gnb if 2 separate interface provided singleInterface: false networkTopo: - upfAddr: "192.168.252.3/32" upfGw: "192.168.251.1" .. image:: ../_static/images/Single-cluster_2_interface.jpg :width: 700px gNB simulator running standalone with single interface `````````````````````````````````````````````````````` - Install gNB Simulator on any K8s cluster - Multus cni needs to be enabled for the K8s cluster where bess-upf runs - Make sure gNB Simulator can communicate with AMF & UPF - *TODO* - New Makefile target will deploy just 5G control plane - *TODO* - New Makefile target will deploy only gNB Simulator - Single interface is used for user plane traffic towards UPF & as well traffic towards AMF - defaultAs is configured per profile. This address is used to send data traffic during test - configure AMF address or FQDN appropriately .. note:: Multiple gNB's can not be simulated since only 1 gNB will be able to use 2152 port Following is example of override values :: config: gnbsim: singleInterface: true yamlCfgFiles: gnb.conf: configuration: gnbs: # pool of gNodeBs gnb1: n3IpAddr: "POD_IP" # set if singleInterface is true .. image:: ../_static/images/Separate-cluster_Single_interface.jpg :width: 700px gNBSim running standalone with 2 or more interfaces ``````````````````````````````````````````````````` - Install gNB Simulator on any K8s cluster - Multus cni needs to be enabled on cluster. Required for bess-upf & gNB - Make sure gNB Simulator can communicate with AMF & UPF - *TODO* - New Makefile target will deploy just 5G control plane - *TODO* - New Makefile target will deploy only gNB Simulator - One interface is used for user plane traffic towards UPF - Second interface is used to send traffic towards control plane (i.e. AMF). - UPF network & default gateway is provided in the override values. - Route to UPF network is added when POD comes up - defaultAs is configured per profile. This address is used to send data traffic during test - configure AMF address or FQDN appropriately .. note:: Multiple gNB's in one simulator instance need more changes in helm chart. This is pending work. To add UPF routes. Following is example of override values :: config: gnbsim: gnb: ip: 192.168.251.5/24 #user plane IP at gnb if 2 separate interface provided singleInterface: false networkTopo: - upfAddr: "192.168.252.3/32" upfGw: "192.168.251.1" .. image:: ../_static/images/Separate-cluster_2_interface.jpg :width: 700px Running gNBSim Standalone Application in or out of a Docker ``````````````````````````````````````````````````````````` .. image:: ../_static/images/Standalone_gnbsim_1_interface.jpg :width: 1000px Note that ``DATA-IFACE`` is ens1f0, this interface to be used for both control and data traffic We need two VMs, in this example we call one is SD-Core VM, other one is Simulator VM * SD-Core VM: to Deploy AIAB * Simulator VM: to Run gnbsim process in or out of Docker SD-Core VM Preparation: - To Expose External IP and Port of amf service, update sd-core-5g-values.yaml :: amf: # use externalIP if you need to access your AMF from remote setup and you don't # want setup NodePort Service Type ngapp: externalIp: nodePort: 38412 - Deploy 5g core with options DATA_IFACE=ens1f0 and ENABLE_GNBSIM=false, sample command:: $ ENABLE_GNBSIM=false DATA_IFACE=ens1f0 CHARTS=release-2.0 make 5g-core - Make sure that ``DATA_IFACE`` connected with Simulator VM Simulator VM Preparation - Single interface is used for user plane traffic towards UPF - Single interface is used to send traffic towards control plane (i.e. AMF). - Checkout gnbsim code using the following command:: $ git clone https://github.com/omec-project/gnbsim.git - Install 'go' if you want to run with local executable :: $ wget https://go.dev/dl/go1.19.linux-amd64.tar.gz $ sudo tar -xvf go1.19.linux-amd64.tar.gz $ mv go /usr/local $ export PATH=$PATH:/usr/local/go/bin - To Compile the code locally, you can use below commands:: $ ``go build`` or ``make docker-build`` - Add following route in routing table for sending traffic over ``DATA_IFACE`` interface :: $ ip route add 192.168.252.3 via - Just to Make sure the data connectivity, ping UPF IP from ``DATA_IFACE``:: $ ping 192.168.252.3 -I - configure correct n2 and n3 addresses in config/gnbsim.yaml :: configuration: singleInterface: false #default value execInParallel: false #run all profiles in parallel gnbs: # pool of gNodeBs gnb1: n2IpAddr: ># gNB N2 interface IP address used to connect to AMF n2Port: 9487 # gNB N2 Port used to connect to AMF n3IpAddr: # gNB N3 interface IP address used to connect to UPF. when singleInterface mode is false n3Port: 2152 # gNB N3 Port used to connect to UPF name: gnb1 # gNB name that uniquely identify a gNB within application - configure AMF address or FQDN appropriately in gnbsim.yaml :: configuration: singleInterface: false #default value execInParallel: false #run all profiles in parallel gnbs: # pool of gNodeBs gnb1: defaultAmf: hostName: # Host name of AMF ipAddr: ># AMF Service external IP address in SD-Core VM port: 38412 # AMF port - Run gnbsim application using the following command:: $ ./gnbsim -cfg config/gnbsim.yaml (or) - Install Docker and run gnbsim inside a Docker with Docker hub Image or locally created Image :: $ docker run --privileged -it -v ~/gnbsim/config:/gnbsim/config --net=host bash $ ./gnbsim -cfg config/gnbsim.yaml Note: gnbsim docker images found at https://hub.docker.com/r/omecproject/5gc-gnbsim/tags