git clone [<https://gitlab.eurecom.fr/oai/cn5g/oai-cn5g-fed.git>](<https://gitlab.eurecom.fr/oai/cn5g/oai-cn5g-fed.git>) ~/oai-v210OAI-5G-CORE
~/oai-v210/charts/oai-5g-core/oai-5g-basic1. Perform a dependency update whenever you change anything in the sub-charts or if you have recently clone the repository.
cd ~/oai-v210/charts/oai-5g-core/oai-5g-basic helm dependency update
2. Then jump to configuration step
3. After configuration, install the parent charts using
helm install oai-5g-basic . -n oai
above part are kept default
-------------
oai-amf:
enabled: true
nfimage: # image name either locally present or in a public/private repository
repository: docker.io/oaisoftwarealliance/oai-amf ## The image will be pulled from dockerhub
version: v2.1.0 ## The branch to be used to pull from dockerhub
# pullPolicy: IfNotPresent or Never or Always
pullPolicy: IfNotPresent
includeTcpDumpContainer: false #only for taking pcaps inside network function pod
## Only if you want to store all pcaps in persistent volume
persistent:
sharedvolume: false
start:
amf: true #If false the network function container will run in sleep mode for manually testing
tcpdump: false
imagePullSecrets:
- name: "regcred"
multus:
## If you don't want to add a default route in your pod then replace this field with ""
defaultGateway: ""
n2Interface:
create: true #false
ipAdd: 10.1.2.16 #"172.21.6.94"
netmask: "22"
name: "n2"
## If you do not have a gateway leave the field empty
gateway:
## If you do not want to add any routes in your pod then leave this field empty
routes: #[{'dst': '10.8.0.0/24','gw': '172.21.7.254'}]
hostInterface: "enp2s0" # Interface of the host machine on which this pod will be scheduled
nodeSelector: {}
oai-upf:
enabled: true
nfimage: # image name either locally present or in a public/private repository
repository: docker.io/oaisoftwarealliance/oai-upf ## The image will be pulled from dockerhub
version: v2.1.0 ## The branch to be used to pull from dockerhub
# pullPolicy: IfNotPresent or Never or Always
pullPolicy: IfNotPresent
includeTcpDumpContainer: false #only for taking pcaps inside network function pod
## Only if you want to store all pcaps in persistent volume
persistent:
sharedvolume: false
start:
upf: true #If false the network function container will run in sleep mode for manually testing
tcpdump: false
imagePullSecrets:
- name: "regcred"
# create an extra interface for N3 incase the gNB is outside the cluster network or there is a need to have dedicated interface for N3
## Change these ip-addresses according to your environment
## N4, N6 are optional only if you want that UPF uses different subnets for different 3gpp interfaces.
multus:
## If you don't want to add a default route in your pod then replace this field with ""
defaultGateway: ""
n3Interface:
create: true #false
ipAdd: 10.1.3.18 #"172.21.8.95"
netmask: "22"
name: "n3"
## If you do not have a gateway leave the field empty
gateway: ""
## If you don't want to add a default route in your pod then replace this field with ""
routes: "" #[{'dst': '10.8.0.0/24','gw': '172.21.11.254'}, {'dst': '10.9.0.0/24','gw': '172.21.11.254'}]
hostInterface: "enp2s0"
## For n4 it is better to re-use eth0 interface inside the pod (primary CNI of Kubernetes)
n4Interface:
create: true #false
ipAdd: "192.168.24.2"
netmask: "24"
name: "n4"
## If you do not have a gateway leave the field empty
gateway: ""
## If you do not want to add any routes in your pod then leave this field empty
routes: ""
hostInterface: "enp2s0"
n6Interface:
create: true #false
ipAdd: "192.168.22.2"
name: "n6"
netmask: "24"
## If you do not have a gateway leave the field empty
gateway: ""
## If you do not want to add any routes in your pod then leave this field empty
routes: ""
hostInterface: "enp2s0"
#NOTE: If the interface you selected for n6If is wrong then traffic will not be routed towards internet
nodeSelector: {}
oai-traffic-server:
enabled: true
trafficServer:
repository: docker.io/oaisoftwarealliance/trf-gen-cn5g
version: latest
#pullPolicy: IfNotPresent or Never or Always
pullPolicy: IfNotPresent
multus:
create: false
ipAdd: "172.21.6.12"
netmask: "22"
defaultGateway: "172.21.7.254"
hostInterface: "enp2s0" # Interface of the host machine on which this pod will be scheduled
config:
ueroute: 12.1.1.0/24
upfHost: oai-upf
routeInterface: eth0
noOfIperf3Server: 2
resources:
define: false
limits:
cpu: 100m
memory: 128Mi
requests:
cpu: 100m
memory: 128Mi
nodeSelector: {}
nodeName: ""
oai-smf:
enabled: true
nfimage: # image name either locally present or in a public/private repository
repository: docker.io/oaisoftwarealliance/oai-smf ## The image will be pulled from dockerhub
version: v2.1.0 ## The branch to be used to pull from dockerhub
# pullPolicy: IfNotPresent or Never or Always
pullPolicy: IfNotPresent
includeTcpDumpContainer: false #only for taking pcaps inside network function pod
## Only if you want to store all pcaps in persistent volume
persistent:
sharedvolume: false
start:
smf: true #If false the network function container will run in sleep mode for manually testing
tcpdump: false
multus:
## If you don't want to add a default route in your pod then replace this field with ""
defaultGateway: ""
n4Interface:
create: true #false
ipAdd: "192.168.24.3"
netmask: "24"
name: "n4"
## If you do not have a gateway leave the field empty
gateway: ""
## If you do not want to add any routes in your pod then leave this field empty
#routes: [{'dst': '10.8.0.0/24','gw': '172.21.7.254'}, {'dst': '10.9.0.0/24','gw': '172.21.7.254'}]
hostInterface: "enp2s0"
nodeSelector: {}
imagePullSecrets:
- name: "regcred"
nodeSelector: {}
############## SBI Interfaces
### Each NF takes its local SBI interfaces and remote interfaces from here, unless it gets them using NRF discovery mechanisms
nfs:
amf:
host: oai-amf
sbi:
port: 80
api_version: v1
interface_name: eth0
n2:
interface_name: n2
port: 38412
smf:
host: oai-smf
sbi:
port: 80
api_version: v1
interface_name: eth0
n4:
interface_name: n4
port: 8805
upf:
host: oai-upf
sbi:
port: 80
api_version: v1
interface_name: eth0
n3:
interface_name: n3
port: 2152
n4:
interface_name: n4
port: 8805
n6:
interface_name: n6
n9:
interface_name: eth0
port: 2152
udm:
host: oai-udm
sbi:
port: 80
api_version: v1
interface_name: eth0
udr:
host: oai-udr
sbi:
port: 80
api_version: v1
interface_name: eth0
lmf:
host: oai-lmf
sbi:
port: 80
api_version: v1
interface_name: eth0
ausf:
host: oai-ausf
sbi:
port: 80
api_version: v1
interface_name: eth0
nrf:
host: oai-nrf
sbi:
port: 80
api_version: v1
interface_name: eth0
O-RAN - oai-cu-cp, oai-cu-up, oai-du and UE
Using helm to install deployment after configurations
cd ~/oai-v210/charts/oai-5g-ran/oai-cu-cp helm install oai-cu-cp .
wait for cu-cp to start
helm install oai-cu-up ../oai-cu-up helm install oai-du ../oai-du helm install oai-nr-ue ../oai-nr-ue
Configuring value.yaml:
kubernetesDistribution: Vanilla #Vanilla for community kubernetes distribution else Openshift for Openshift
## In case of using these charts on Openshift then please use UBI images
## To know more about them follow this tutorial <https://gitlab.eurecom.fr/oai/cn5g/oai-cn5g-fed/-/tree/master/openshift>
nfimage: # image name either locally present or in a public/private repository
repository: docker.io/oaisoftwarealliance/oai-gnb ## dockerhub oaisoftwarealliance/oai-gnb
version: 2024.w32 # image tag or develop
# pullPolicy: IfNotPresent or Never or Always
pullPolicy: IfNotPresent
## good to use when pulling images from docker-hub mention
imagePullSecrets:
- name: "regcred"
serviceAccount:
# Specifies whether a service account should be created
create: true
# Annotations to add to the service account
annotations: {}
# The name of the service account to use.
# If not set and create is true, a name is generated using the fullname template
name: "oai-cu-cp-sa"
# oai-cu-cp can be configured with multiple interface which may correspond to 3GPP logical interfaces. There can be one to one or one to many.
# In case of one to one mapping e1,f1c,n2 all can have separate virtual interfaces.
# In one to many mapping e1,f1c and n2 all can be mapped to one virtual interface.
# Interface mapping is strictly based on your networking environment
## Change these ip-addresses according to your environment
multus:
# to remove the default gateway change it with ""
defaultGateway: ""
e1Interface: # use this interface if using one interface for all 3GPP interfaces
create: true #false
ipAdd: "10.2.1.16" #"192.168.18.12"
netmask: "24"
name: "e1"
# if gatway is empty then it will be removed
#gateway: ""
#routes: [{'dst': '10.8.0.0/24','gw': '172.21.7.254'}, {'dst': '10.9.0.0/24','gw': '172.21.7.254'}]
hostInterface: "enp2s0" # Interface of the host machine on which this pod will be scheduled
n2Interface:
create: true #false
ipAdd: "10.1.2.18" #"172.21.6.98"
netmask: "22"
name: "n2"
# if gatway is empty then it will be removed
#gateway: ""
#routes:
hostInterface: "enp2s0" # Interface of the host machine on which this pod will be scheduled
f1cInterface:
create: true #false
ipAdd: "10.2.5.16" #"172.21.16.92"
netmask: "22"
name: "f1c"
# if gatway is empty then it will be removed
#gateway: ""
#routes:
hostInterface: "enp2s0" # Interface of the host machine on which this pod will be scheduled
## configuration file is in template/config.yaml
## It is taken from <https://gitlab.eurecom.fr/oai/openairinterface5g/-/blob/develop/ci-scripts/conf_files/gnb-cucp.sa.f1.conf>
config:
timeZone: "Europe/Paris"
useAdditionalOptions: "--sa --log_config.global_log_options level,nocolor,time"
cucpName: "oai-cu-cp"
mcc: "001" # check the information with AMF, SMF, UPF
mnc: "01" # check the information with AMF, SMF, UPF
tac: "0x0001" # check the information with AMF
sst: "1" #currently only 4 standard values are allowed 1,2,3,4
# sd: "16777215"
amfhost: "10.1.2.16" #"oai-amf" # amf ip-address or service-name oai-amf-svc or 172.21.6.94
n2IfName: "n2" # if multus.n2Interface.create is true then use n2
f1IfName: "f1c" #if multus.f1Interface.create is true then use f1
e1IfName: "e1" #if multus.f1Interface.create is true then use e1
f1cuPort: "2152" #2153 if using same interface for f1 and n2 else standard port 2152 should be use if f1 and n3 interface are different
f1duPort: "2152" #2153 if using same interface for f1 and n2 else standard port 2152 should be use if f1 and n3 interface are different
# Debugging section
podSecurityContext:
runAsUser: 0
runAsGroup: 0
securityContext:
privileged: false
start:
oaicucp: true
tcpdump: false
includeTcpDumpContainer: false #If true it will add a tcpdump container inside network function pod for debugging
tcpdumpimage:
repository: docker.io/oaisoftwarealliance/oai-tcpdump-init
version: alpine-3.20
#pullPolicy: IfNotPresent or Never or Always
pullPolicy: IfNotPresent
## NF is the network function and tcpdump is the tcpdump container.
## To know more about request and limit it is better to understand that how Kubernetes QoS works.
## <https://kubernetes.io/docs/concepts/configuration/manage-resources-containers>
## <https://kubernetes.io/docs/concepts/workloads/pods/pod-qos>
resources:
define: false
limits:
nf:
cpu: 100m
memory: 128Mi
#If tcpdump container is disabled this value will not be used
tcpdump:
cpu: 100m
memory: 128Mi
requests:
nf:
cpu: 100m
memory: 128Mi
#If tcpdump container is disabled this value will not be used
tcpdump:
cpu: 100m
memory: 128Mi
tolerations: []
affinity: {}
terminationGracePeriodSeconds: 5
nodeSelector: {}
nodeName:
kubernetesDistribution: Vanilla #Vanilla for community kubernetes distribution else Openshift for Openshift
## In case of using these charts on Openshift then please use UBI images
## To know more about them follow this tutorial <https://gitlab.eurecom.fr/oai/cn5g/oai-cn5g-fed/-/tree/master/openshift>
nfimage: # image name either locally present or in a public/private repository
repository: docker.io/oaisoftwarealliance/oai-nr-cuup ## dockerhub oaisoftwarealliance/oai-gnb
version: 2024.w32 # image tag or develop
# pullPolicy: IfNotPresent or Never or Always
pullPolicy: IfNotPresent
## good to use when pulling images from docker-hub mention
imagePullSecrets:
- name: "regcred"
serviceAccount:
# Specifies whether a service account should be created
create: true
# Annotations to add to the service account
annotations: {}
# The name of the service account to use.
# If not set and create is true, a name is generated using the fullname template
name: "oai-cu-up-sa"
# oai-cu-up can be configured with multiple interface which may correspond to 3GPP logical interfaces. There can be one to one or one to many.
# In case of one to one mapping e1,f1u,n3 all can have separate virtual interfaces.
# In one to many mapping e1,f1u and n3 all can be mapped to one virtual interface.
# Interface mapping is strictly based on your networking environment
## Change these ip-addresses according to your environment
multus:
# to remove the default gateway change it with ""
defaultGateway: ""
e1Interface: # use this interface if using one interface for all 3GPP interfaces
create: true #false
ipAdd: "10.2.1.17" #"192.168.18.13"
netmask: "24"
name: "e1"
# if gatway is empty then it will be removed
#gateway: ""
#routes: [{'dst': '10.8.0.0/24','gw': '172.21.7.254'}, {'dst': '10.9.0.0/24','gw': '172.21.7.254'}]
hostInterface: "enp2s0" # Interface of the host machine on which this pod will be scheduled
n3Interface:
create: true #false
ipAdd: "10.1.3.17" #"172.21.8.97"
netmask: "22"
name: "n3"
# if gatway is empty then it will be removed
#gateway: ""
#routes: []
hostInterface: "enp2s0" # Interface of the host machine on which this pod will be scheduled
f1uInterface:
create: true #false
ipAdd: "10.2.5.17" #"172.21.16.93"
netmask: "22"
name: "f1u"
# if gatway is empty then it will be removed
#gateway: ""
#routes: []
hostInterface: "enp2s0" # Interface of the host machine on which this pod will be scheduled
## configuration file is in template/config.yaml
## It is taken from <https://gitlab.eurecom.fr/oai/openairinterface5g/-/blob/develop/ci-scripts/conf_files/gnb-cuup.sa.f1.conf>
config:
timeZone: "Europe/Paris"
useAdditionalOptions: "--sa"
cuupName: "oai-cuup"
mcc: "001" # check the information with AMF, SMF, UPF
mnc: "01" # check the information with AMF, SMF, UPF
tac: "0x0001" # check the information with AMF
sst: "1" #currently only 4 standard values are allowed 1,2,3,4
cuCpHost: "10.2.1.16" #"oai-cu" #
n3IfName: "n3" #if multus.n3Interface.create is true then use n3 or you can only use 1 interface n3 or eth0
f1IfName: "f1u" #if multus.f1uInterface.create is true then use f1 or you can only use 1 interface n3 or eth0
e1IfName: "e1" #if multus.e1Interface.create is true then use e1 or you can only use 1 interface n3 or eth0
f1cuPort: "2152" #2153 if using same interface for f1 and n3 else standard port 2152 should be use if f1 and n3 interface are different
f1duPort: "2152" #2153 if using same interface for f1 and n3 else standard port 2152 should be use if f1 and n3 interface are different
## Debugging section
podSecurityContext:
runAsUser: 0
runAsGroup: 0
securityContext:
privileged: false
start:
oaicuup: true #If false the network function container will run in sleep mode for manually testing
tcpdump: false
includeTcpDumpContainer: false #If true it will add a tcpdump container inside network function pod for debugging
tcpdumpimage:
repository: docker.io/oaisoftwarealliance/oai-tcpdump-init
version: alpine-3.20
#pullPolicy: IfNotPresent or Never or Always
pullPolicy: IfNotPresent
## NF is the network function and tcpdump is the tcpdump container.
## To know more about request and limit it is better to understand that how Kubernetes QoS works.
## <https://kubernetes.io/docs/concepts/configuration/manage-resources-containers>
## <https://kubernetes.io/docs/concepts/workloads/pods/pod-qos>
resources:
define: false
limits:
nf:
cpu: 100m
memory: 128Mi
#If tcpdump container is disabled this value will not be used
tcpdump:
cpu: 100m
memory: 128Mi
requests:
nf:
cpu: 100m
memory: 128Mi
#If tcpdump container is disabled this value will not be used
tcpdump:
cpu: 100m
memory: 128Mi
tolerations: []
affinity: {}
terminationGracePeriodSeconds: 5
nodeSelector: {}
nodeName:
kubernetesDistribution: Vanilla #Vanilla for community kubernetes distribution else Openshift for Openshift
## In case of using these charts on Openshift then please use UBI images
## To know more about them follow this tutorial <https://gitlab.eurecom.fr/oai/cn5g/oai-cn5g-fed/-/tree/master/openshift>
nfimage: # image name either locally present or in a public/private repository
repository: docker.io/oaisoftwarealliance/oai-gnb ## dockerhub oaisoftwarealliance/oai-gnb
version: 2024.w32 # image tag or develop
# pullPolicy: IfNotPresent or Never or Always
pullPolicy: IfNotPresent
## good to use when pulling images from docker-hub mention
imagePullSecrets:
- name: "regcred"
serviceAccount:
# Specifies whether a service account should be created
create: true
# Annotations to add to the service account
annotations: {}
# The name of the service account to use.
# If not set and create is true, a name is generated using the fullname template
name: "oai-du-sa"
# oai-du helm-charts can be used in RFSimulated mode which does not require multiple interaces.
# In case you use the charts with a RU/USRP you need a dedicated interface with the RU.
## Change these ip-addresses according to your environment
multus:
# if default gateway is left blank then it will be removed
defaultGateway: ""
f1Interface: # use this interface if using one interface for all 3GPP interfaces
create: true #false
ipAdd: "10.2.5.18" #"172.21.16.100"
netmask: "22"
name: "f1"
# if gatway is empty then it will be removed
#gateway: "172.21.7.254"
#routes: [{'dst': '10.8.0.0/24','gw': '172.21.7.254'}, {'dst': '10.9.0.0/24','gw': '172.21.7.254'}]
hostInterface: "enp2s0" # Interface of the host machine on which this pod will be scheduled
ruInterface: #Only needed if using a ethernet based RU/USRP
create: true #false
ipAdd: "10.2.6.16" #"192.168.80.90"
netmask: "24"
name: "ru"
# if gatway is commented then it will be remove
#gateway: "192.168.80.1" #In case you don't have a gateway remove it from here
## The value must be [0, master's MTU]. If commented it will masters MTU
#mtu: 9000
hostInterface: "enp2s0" # Interface of the host machine on which this pod will be scheduled
## If you want to change more configuration parameters then you should mount the config file
# in templates/configmap.yaml
# Example config files --> <https://gitlab.eurecom.fr/oai/openairinterface5g/-/tree/develop/targets/PROJECTS/GENERIC-NR-5GC/CONF>
config:
timeZone: "Europe/Paris"
useAdditionalOptions: "--sa --rfsim --log_config.global_log_options level,nocolor,time"
duName: "oai-du-rfsim"
mcc: "001" # check the information with AMF, SMF, UPF
mnc: "01" # check the information with AMF, SMF, UPF
tac: "0x0001" # check the information with AMF
sst: "1" #currently only 4 standard values are allowed 1,2,3,4
usrp: rfsim #allowed values rfsim, b2xx, n3xx or x3xx
f1IfName: "f1" #if multus.f1Interface.create is true then use f1
cuHost: "10.2.5.16" ## Ip-address or hostname
f1cuPort: "2152" #2153 if using same interface for f1 and n3 else standard port 2152 should be use if f1 and n3 interface are different
f1duPort: "2152" #2153 if using same interface for f1 and n3 else standard port 2152 should be use if f1 and n3 interface are different
## Debugging section
podSecurityContext:
runAsUser: 0
runAsGroup: 0
securityContext:
privileged: false
start:
gnbdu: true #If false the network function container will run in sleep mode for manually testing
tcpdump: false
includeTcpDumpContainer: false #If true it will add a tcpdump container inside network function pod for debugging
tcpdumpimage:
repository: docker.io/oaisoftwarealliance/oai-tcpdump-init
version: alpine-3.20
#pullPolicy: IfNotPresent or Never or Always
pullPolicy: IfNotPresent
## NF is the network function and tcpdump is the tcpdump container.
## To know more about request and limit it is better to understand that how Kubernetes QoS works.
## <https://kubernetes.io/docs/concepts/configuration/manage-resources-containers>
## <https://kubernetes.io/docs/concepts/workloads/pods/pod-qos>
resources:
define: false
limits:
nf:
cpu: 2000m
memory: 2Gi
#If tcpdump container is disabled this value will not be used
tcpdump:
cpu: 200m
memory: 128Mi
requests:
nf:
cpu: 2000m
memory: 2Gi
#If tcpdump container is disabled this value will not be used
tcpdump:
cpu: 100m
memory: 128Mi
tolerations: []
affinity: {}
terminationGracePeriodSeconds: 5
nodeSelector: {}
nodeName:
kubectl exec -it <oai-nr-ue-pod-name> -- bash
#ping towards spgwu/upf
ping -I oaitun_ue1 12.1.1.1
#ping towards google dns
ping -I oaitun_ue1 8.8.8.8