Open5GS and srsLTE
4G end to end communication demo with Open5GS and srsRAN.
This setup uses 2 helm charts generated by Gradiant: open5gs
and srs-lte
. These charts are packaged and available at Gradiant’s DockerHub repo: https://hub.docker.com/u/gradiant
If you want to have the repo in local you can pull it:
helm pull oci://registry-1.docker.io/gradiant/open5gs --version 2.0.8
helm pull oci://registry-1.docker.io/gradiant/srs-lte --version 0.1.3
Deployment EPC and registration of subscribers
First, deploy the EPC (open5gs) using the epc-values.yaml
file provided in order to overwrite some of the default values of the Open5GS chart:
helm install open5gs oci://registry-1.docker.io/gradiant/open5gs --version 2.0.8 --values https://gradiant.github.io/5g-charts/docs/open5gs-srslte/epc-values.yaml
These new values will:
- Disable the Open5gs NGC, deploying only the components of the Open5gs 4G/5G NSA Core.
- Set the MCC, MNC and TAC to be used by the MME.
- Disable the Ingress for accessing the Open5GS WebUI.
- Enable the populate option, which will create a Deployment using the
gradiant/open5gs-dbctl
image. This will provide an easy way to manage the subscribers. In addition, the initCommands specified will register an initial subscriber in the EPC, with the imsi, key, opc and apn provided.
Once this deployment has been completed, the subscriber’s registration can be verified following 2 different approaches:
- Directly through MongoDB
kubectl exec deployment/open5gs-mongodb -ti -- bash
mongo
use open5gs
db.subscribers.find().pretty()
- Using the Open5GS WebUI: forward a local port to a port on the corresponding Pod by specifying the WebUI Service. Then, the Open5GS WebUI will be available at
localhost:3000
. To do this, execute:kubectl port-forward svc/open5gs-webui 3000:3000
Deployment RAN
Now, deploy the RAN (srs-lte) using the lte-values.yaml
file provided in order to overwrite some of the default values of the srs-lte chart:
helm install srs-lte oci://registry-1.docker.io/gradiant/srs-lte --version 0.1.3 --values https://gradiant.github.io/5g-charts/docs/open5gs-srslte/lte-values.yaml
Thus, this deployment will not only launch the eNodeB and connect it to the Open5GS EPC, but it will also enable the launching of 1 UE.
It is important to notice that the default values of MCC, MNC, and TAC set for the eNB match those configured in the open5gs chart. Also, the IMSI, KI and OPc given for the UE match the ones provided in the open5gs-dbctl
command.
In addition, take into account that the value given for enb.mme must match the name of the corresponding MME service deployed by the open5gs chart. Therefore, in case you use a differente release name for the open5gs chart, make sure that this value is set accordingly.
Verify deployment
Connection between PGW-C and PGW-U (C-Plane and U-Plane of EPC)
Check that the PGW-C (SMF component) gets associated with the PGW-U’s (UPF component) address:
kubectl logs deployment/open5gs-smf -f
Connection between MME and eNodeB
Check that the MME accepts and adds the eNodeB:
kubectl logs deployment/open5gs-mme -f
UE’s connectivity
Check that the eNodeB senses UE’s presence and the UE gets connected to the network:
kubectl logs srs-lte-srs-lte-0 enb -f
Check that the UE got successfully attached to the network:
kubectl logs srs-lte-srs-lte-0 ue -f
Hence, check that the UE created a tunnel interface (tun_srsue
):
kubectl exec srs-lte-srs-lte-0 -c ue -ti -- bash
ip addr
Check that the UE has connectivity through this interface:
ping gradiant.org -I tun_srsue
Moreover, if using traceroute
, check that the first hop is 10.45.0.1
(PGW-U’s side of the tunnel created):
traceroute google.com -i tun_srsue
Therefore, the UE’s traffic can be captured in the PGW-U (UPF). The installation of tcpdump in the corresponding pod is needed in order to complete this check:
kubectl exec deployment/open5gs-upf -ti -- bash
apt update && apt install tcpdump
tcpdump -i ogstun
Clean
Clean the deployment for this demo by uninstalling the 2 helm charts previously installed:
helm uninstall srs-lte
helm uninstall open5gs