Compare commits

...

14 Commits

Author SHA1 Message Date
Raphael Defosseux
6a82fadd39 chore(ci): pushing the oai-gnb-fhi72 to docker-hub
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2024-07-04 13:17:01 +02:00
Raphael Defosseux
0d086609c2 chore(ci): adding fhi UBI build to CI pipeline
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2024-07-04 10:34:29 +02:00
Raphael Defosseux
2c56fb5a54 fix(build): aligning names on dockerfiles and openshift buildconfigs
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2024-07-04 09:54:17 +02:00
Raphael Defosseux
f8b6fc5447 Merge remote-tracking branch 'origin/hot-fix-T-dependencies' into fhi-container-test 2024-06-27 17:18:52 +02:00
arora
730a4dec8e Correcting typo and reducing column length 2024-06-27 16:21:42 +02:00
Raphael Defosseux
0b42d04c06 chore(ci): adding FH7.2 Ubuntu images to the CI build
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2024-06-26 16:12:53 +02:00
Raphael Defosseux
ee00bcac55 Merge remote-tracking branch 'origin/develop' into fhi-container 2024-06-26 16:11:40 +02:00
arora
2c126e3f5b Remove compilation of swig it is not needed for E2SM 2024-06-13 16:45:14 +02:00
arora
528a319a6e Updating benetel 650 configuration file for peafowl macvlan 2024-06-13 12:14:33 +02:00
arora
4921805172 Updating the documentation and adding manifests for fhi72 build on openshift
- Updated docker-compose documentation
- Openshift Readme
2024-06-13 12:11:36 +02:00
arora
44a87ecc4f UBI9 docker images and updated ubuntu images with E2 SM models 2024-06-13 01:44:11 +02:00
arora
2857240f7f Updating the name of the dockerfiles 2024-06-11 13:23:44 +02:00
arora
87d3e26a00 Correcting the path for the image and conf file 2024-06-11 13:23:40 +02:00
arora
65036309d8 Adding 7.2 containerfiles and docker-compose
Signed-off-by: arora <sagar.arora@eurecom.fr>
2024-06-11 13:23:32 +02:00
20 changed files with 971 additions and 34 deletions

View File

@@ -76,7 +76,7 @@ pipeline {
withCredentials([
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.DH_Credentials}", usernameVariable: 'DH_Username', passwordVariable: 'DH_Password']
]) {
def listOfImages = ["oai-enb", "oai-gnb", "oai-lte-ue", "oai-nr-ue", "oai-nr-cuup"]
def listOfImages = ["oai-enb", "oai-gnb", "oai-lte-ue", "oai-nr-ue", "oai-nr-cuup", "oai-gnb-fhi72"]
// Logging in on both registries
sh "docker login -u ${DH_Username} -p ${DH_Password} > /dev/null 2>&1"
sh "docker login -u oaicicd -p oaicicd porcepix.sboai.cs.eurecom.fr > /dev/null 2>&1"

View File

@@ -462,6 +462,34 @@ class Cluster:
self.cmd.run(f'oc logs {nrue_job} &> cmake_targets/log/oai-nr-ue.log')
self.cmd.run(f'oc get pods.metrics.k8s.io &>> cmake_targets/log/build-metrics.log', '\$', 10)
if status:
self._recreate_is_tag('ran-build-fhi72', imageTag, 'openshift/ran-build-fhi72-is.yaml')
self._recreate_bc('ran-build-fhi72', imageTag, 'openshift/ran-build-fhi72-bc.yaml')
self._retag_image_statement('ran-base', 'image-registry.openshift-image-registry.svc:5000/oaicicd-ran/ran-base', baseTag, 'docker/Dockerfile.build.fhi72.rhel9')
ranbuildfhi72_job = self._start_build('ran-build-fhi72')
attemptedImages += ['ran-build-fhi72']
wait = ranbuildfhi72_job is not None and self._wait_build_end([ranbuildfhi72_job], 1200)
if not wait: logging.error('error during build of ranbuildfhi72_job')
status = status and wait
self.cmd.run(f'oc logs {ranbuildfhi72_job} &> cmake_targets/log/ran-build-fhi72.log')
self.cmd.run(f'oc get pods.metrics.k8s.io &>> cmake_targets/log/build-metrics.log', '\$', 10)
if status:
self._recreate_is_tag('oai-gnb-fhi72', imageTag, 'openshift/oai-gnb-fhi72-is.yaml')
self._recreate_bc('oai-gnb-fhi72', imageTag, 'openshift/oai-gnb-fhi72-bc.yaml')
self._retag_image_statement('ran-base', 'image-registry.openshift-image-registry.svc:5000/oaicicd-ran/ran-base', baseTag, 'docker/Dockerfile.gNB.fhi72.rhel9')
self._retag_image_statement('ran-build-fhi72', 'image-registry.openshift-image-registry.svc:5000/oaicicd-ran/ran-build-fhi72', imageTag, 'docker/Dockerfile.gNB.fhi72.rhel9')
gnb_fhi72_job = self._start_build('oai-gnb-fhi72')
attemptedImages += ['oai-gnb-fhi72']
wait = gnb_fhi72_job is not None and self._wait_build_end([gnb_fhi72_job], 600)
if not wait: logging.error('error during build of gNB-fhi72')
status = status and wait
# recover logs
self.cmd.run(f'oc logs {gnb_fhi72_job} &> cmake_targets/log/oai-gnb-fhi72.log')
self.cmd.run(f'oc get pods.metrics.k8s.io &>> cmake_targets/log/build-metrics.log', '\$', 10)
# split and analyze logs
imageSize = {}
for image in attemptedImages:

View File

@@ -58,7 +58,7 @@ import cls_oaicitest
# Helper functions used here and in other classes
# (e.g., cls_cluster.py)
#-----------------------------------------------------------
IMAGES = ['oai-enb', 'oai-lte-ru', 'oai-lte-ue', 'oai-gnb', 'oai-nr-cuup', 'oai-gnb-aw2s', 'oai-nr-ue', 'oai-gnb-asan', 'oai-nr-ue-asan', 'oai-nr-cuup-asan', 'oai-gnb-aerial']
IMAGES = ['oai-enb', 'oai-lte-ru', 'oai-lte-ue', 'oai-gnb', 'oai-nr-cuup', 'oai-gnb-aw2s', 'oai-nr-ue', 'oai-gnb-asan', 'oai-nr-ue-asan', 'oai-nr-cuup-asan', 'oai-gnb-aerial', 'oai-gnb-fhi72']
def CreateWorkspace(sshSession, sourcePath, ranRepository, ranCommitID, ranTargetBranch, ranAllowMerge):
if ranCommitID == '':
@@ -319,6 +319,8 @@ class Containerize():
imageNames.append(('oai-gnb', 'gNB', 'oai-gnb-asan', '--build-arg "BUILD_OPTION=--sanitize"'))
imageNames.append(('oai-nr-ue', 'nrUE', 'oai-nr-ue-asan', '--build-arg "BUILD_OPTION=--sanitize"'))
imageNames.append(('oai-nr-cuup', 'nr-cuup', 'oai-nr-cuup-asan', '--build-arg "BUILD_OPTION=--sanitize"'))
imageNames.append(('ran-build-fhi72', 'build.fhi72', 'ran-build-fhi72', ''))
imageNames.append(('oai-gnb', 'gNB.fhi72', 'oai-gnb-fhi72', ''))
result = re.search('build_cross_arm64', self.imageKind)
if result is not None:
self.dockerfileprefix = '.ubuntu22.cross-arm64'
@@ -409,6 +411,8 @@ class Containerize():
# target images should use the proper ran-build image
if image != 'ran-build' and "-asan" in name:
cmd.run(f'sed -i -e "s#ran-build:latest#ran-build-asan:{imageTag}#" docker/Dockerfile.{pattern}{self.dockerfileprefix}')
elif "fhi72" in name:
cmd.run(f'sed -i -e "s#ran-build-fhi72:latest#ran-build-fhi72:{imageTag}#" docker/Dockerfile.{pattern}{self.dockerfileprefix}')
elif image != 'ran-build':
cmd.run(f'sed -i -e "s#ran-build:latest#ran-build:{imageTag}#" docker/Dockerfile.{pattern}{self.dockerfileprefix}')
if image == 'oai-gnb-aerial':
@@ -445,7 +449,7 @@ class Containerize():
cmd.run(f"{self.cli} image prune --force")
# Remove all intermediate build images and clean up
cmd.run(f"{self.cli} image rm ran-build:{imageTag} ran-build-asan:{imageTag}")
cmd.run(f"{self.cli} image rm ran-build:{imageTag} ran-build-asan:{imageTag} ran-build-fhi72:{imageTag} || true")
cmd.run(f"{self.cli} volume prune --force")
# Remove some cached artifacts to prevent out of diskspace problem

View File

@@ -0,0 +1,110 @@
<table style="border-collapse: collapse; border: none;">
<tr style="border-collapse: collapse; border: none;">
<td style="border-collapse: collapse; border: none;">
<a href="http://www.openairinterface.org/">
<img src="../../../doc/images/oai_final_logo.png" alt="" border=3 height=50 width=150>
</img>
</a>
</td>
<td style="border-collapse: collapse; border: none; vertical-align: center;">
<b><font size = "5">OAI O-RAN 7.2 Front-haul Docker Compose</font></b>
</td>
</tr>
</table>
![Docker deploy 7.2](../../../doc/images/docker-deploy-oai-7-2.png)
This docker-compose is designed to use `OAI-gNB` with a 7.2 compatible Radio Unit.
Before using this docker compose you have to configure
the host machine as per the [ORAN_FHI7.2_Tutorial](../../../doc/ORAN_FHI7.2_Tutorial.md).
The container image used by the docker compose file is tested only on `Ubuntu 22.04` docker host.
## Build Image (Optional)
If you wish to make your own image after modification or from a specific branch then you can build it manually,
### Ubuntu base image
```bash
cd ../../../
docker build -f docker/Dockerfile.base.ubuntu22 -t ran-base:latest .
docker build -f docker/Dockerfile.build.fhi72.ubuntu22 -t ran-build-fhi72:latest .
docker build -f docker/Dockerfile.gNB.fhi72.ubuntu22 -t oai-gnb-fhi72:<your-image-tag> .
```
### UBI base image
```bash
cd ../../../
podman build -f docker/Dockerfile.base.rhel9 -t ran:base:latest .
podman build -f docker/Dockerfile.build.fhi72.rhel9 -t ran-build-fhi72:latest .
podman build -f docker/Dockerfile.gNB.fhi72.rhel9 -t oai-gnb-fhi72:<your-image-tag> .
```
The new image will be `oai-gnb-fhi72:<your-image-tag>`.
You will have to replace this new image with `oai-gnb-fhi72:latest`.
## Configure Networking
### SR-IOV Virtual Functions (VFs)
In docker-compose environment there is no automated method
to configure the VFs on the fly. The user will have to manually configure
C/U plane VFs before starting the container `OAI-gNB`.
You can follow the step
[configure-network-interfaces-and-dpdk-vfs](../../../doc/ORAN_FHI7.2_Tutorial.md#configure-network-interfaces-and-dpdk-vfs).
### Interface towards AMF (N2)
For `N2` interface we are using `macvlan` driver of docker.
You can use the `bridge` driver, in situation
- When the core network is running on the same machine
- or different machine but you have configured
needed `ip route` and forwarding to access the core network from RAN host.
To configure docker `macvlan` network
you need to choose `ipam.config` and `driver_opts.parent` are per your environment
```
oai-net:
driver: macvlan
name: oai-net
ipam:
config:
- subnet: "172.21.16.0/22"
ip_range: "172.21.18.20/32"
gateway: "172.21.19.254"
driver_opts:
com.docker.network.bridge.name: "oai-net"
parent: enp193s0f0
```
To configure `bridge` network you need to choose `ipam.config.subnet` as per your environment.
```
oai-net:
driver: bridge
name: oai-net
ipam:
config:
- subnet: 192.168.72.128/26
driver_opts:
com.docker.network.bridge.name: "oai-net"
```
## Deploy OAI-gNB Container
The [configuration file](../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.273prb.fhi72.4x4-benetel650.conf) used by docker compose is configured for Benetel 650 RU (RAN650-1v1.0.4-dda1bf5).
```bash
docker-compose up -d
```
To check the logs
```bash
docker logs oai-gnb -f
```

View File

@@ -0,0 +1,34 @@
services:
oai-gnb:
image: oai-gnb-fhi72:latest
privileged: true
container_name: oai-gnb
environment:
TZ: Europe/Paris
USE_ADDITIONAL_OPTIONS: --sa --thread-pool 13,14,15,16,17,18
devices:
- /dev/vfio:/dev/vfio/
volumes:
- ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.273prb.fhi72.4x4-benetel650.conf:/opt/oai-gnb/etc/gnb.conf
- /dev/hugepages:/dev/hugepages
cpuset: "0,1,2,8,9,10,13,14,15,16,17,18"
networks:
oai-net:
ipv4_address: 172.21.18.20
healthcheck:
test: /bin/bash -c "pgrep nr-softmodem"
interval: 10s
timeout: 5s
retries: 5
networks:
oai-net:
driver: macvlan
name: oai-net
ipam:
config:
- subnet: "172.21.16.0/22"
ip_range: "172.21.18.20/32"
gateway: "172.21.19.254"
driver_opts:
com.docker.network.bridge.name: "oai-net"
parent: enp193s0f0

View File

@@ -0,0 +1,214 @@
<?xml version="1.0" encoding="UTF-8"?>
<mxfile host="app.diagrams.net" modified="2024-05-27T11:27:32.381Z" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36" version="24.4.8" etag="Tu2LWHXXymc2V8xZ0cDf" type="google">
<diagram name="Page-1" id="OGevCmJqFMRY4jlIOEzr">
<mxGraphModel dx="1434" dy="759" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="2" value="" style="rounded=0;whiteSpace=wrap;html=1;rotation=90;fillColor=#4473c5;strokeColor=#FFFFFF;fontFamily=Helvetica;fontSize=12;" vertex="1" parent="1">
<mxGeometry x="536.82" y="81.77" width="406.06" height="540.1" as="geometry" />
</mxCell>
<mxCell id="3" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="190" y="299.61" width="150" height="90" as="geometry" />
</mxCell>
<mxCell id="4" value="OAI-gNB" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="225" y="309.61" width="80" height="40" as="geometry" />
</mxCell>
<mxCell id="5" value="OAI-gNB Host Machine" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="200" y="269.61" width="140" height="30" as="geometry" />
</mxCell>
<mxCell id="6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;startArrow=none;startFill=0;strokeColor=#FFFFFF;endArrow=oval;endFill=1;" edge="1" source="7" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="676.4549999999999" y="347.52" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="7" value="&lt;font style=&quot;font-size: 14px;&quot;&gt;AMF&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;fontFamily=Helvetica;fontSize=14;strokeColor=#6c8ebf;" vertex="1" parent="1">
<mxGeometry x="635.8999999999999" y="454.3100000000002" width="81.11" height="40" as="geometry" />
</mxCell>
<mxCell id="8" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jumpSize=10;orthogonalLoop=1;jettySize=auto;html=1;startArrow=none;startFill=0;endArrow=oval;endFill=1;strokeColor=#FFFFFF;fillColor=#FFFFFF;fontFamily=Helvetica;fontSize=12;" edge="1" source="9" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="770.51" y="347.52" as="targetPoint" />
<Array as="points">
<mxPoint x="772.51" y="347.52" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="9" value="SMF" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;fontFamily=Helvetica;fontSize=14;strokeColor=#6c8ebf;" vertex="1" parent="1">
<mxGeometry x="731.29" y="456.30999999999995" width="78.22" height="40" as="geometry" />
</mxCell>
<mxCell id="10" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jumpSize=10;orthogonalLoop=1;jettySize=auto;html=1;startArrow=none;startFill=0;endArrow=oval;endFill=1;strokeColor=#FFFFFF;fillColor=#FFFFFF;fontFamily=Helvetica;fontSize=12;" edge="1" source="11" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="867.5100000000001" y="345" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="11" value="&lt;font style=&quot;font-size: 14px;&quot;&gt;NRF&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;fontFamily=Helvetica;fontSize=14;strokeColor=#6c8ebf;" vertex="1" parent="1">
<mxGeometry x="829.7299999999998" y="208.37000000000023" width="76.66" height="40" as="geometry" />
</mxCell>
<mxCell id="12" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=oval;endFill=1;strokeColor=#FFFFFF;fontFamily=Helvetica;fontSize=12;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" source="13" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="578.51" y="345" as="targetPoint" />
<mxPoint x="505.7299999999998" y="406.68000000000006" as="sourcePoint" />
<Array as="points">
<mxPoint x="578.51" y="305.0000000000001" />
<mxPoint x="578.51" y="305.0000000000001" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="13" value="&lt;font style=&quot;font-size: 14px;&quot;&gt;Database&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Helvetica;fontSize=14;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
<mxGeometry x="544.46" y="262.37" width="68.05" height="40" as="geometry" />
</mxCell>
<mxCell id="14" value="" style="endArrow=none;html=1;fillColor=#B266FF;strokeColor=#FFFFFF;startArrow=none;startFill=0;jumpSize=10;endFill=0;fontFamily=Helvetica;fontSize=12;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="540.8399999999999" y="345.68000000000006" as="sourcePoint" />
<mxPoint x="932.5100000000002" y="346" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="15" value="&lt;span style=&quot;font-style: normal; letter-spacing: normal; text-align: center; text-indent: 0px; text-transform: none; word-spacing: 0px; background-color: rgb(68, 115, 197); font-size: 12px;&quot;&gt;&lt;font color=&quot;#ffffff&quot; style=&quot;font-size: 12px;&quot;&gt;Namf&lt;/font&gt;&lt;/span&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1;fontFamily=Helvetica;fontSize=12;" vertex="1" parent="1">
<mxGeometry x="679.5" y="386.68000000000006" width="39.51" height="20" as="geometry" />
</mxCell>
<mxCell id="16" value="&lt;span style=&quot;font-style: normal; letter-spacing: normal; text-align: center; text-indent: 0px; text-transform: none; word-spacing: 0px; background-color: rgb(68, 115, 197); font-size: 12px;&quot;&gt;&lt;font color=&quot;#ffffff&quot; style=&quot;font-size: 12px;&quot;&gt;Nsmf&lt;/font&gt;&lt;/span&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1;fontFamily=Helvetica;fontSize=12;" vertex="1" parent="1">
<mxGeometry x="774.9799999999999" y="385.37000000000006" width="60" height="20" as="geometry" />
</mxCell>
<mxCell id="17" value="&lt;span style=&quot;font-style: normal; letter-spacing: normal; text-align: center; text-indent: 0px; text-transform: none; word-spacing: 0px; background-color: rgb(68, 115, 197); font-size: 12px;&quot;&gt;&lt;font color=&quot;#ffffff&quot; style=&quot;font-size: 12px;&quot;&gt;Nnrf&lt;/font&gt;&lt;/span&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1;fontFamily=Helvetica;fontSize=12;" vertex="1" parent="1">
<mxGeometry x="874.5599999999998" y="306.19000000000017" width="60" height="20" as="geometry" />
</mxCell>
<mxCell id="18" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#FFFFFF;endArrow=oval;endFill=1;fontFamily=Helvetica;fontSize=12;" edge="1" source="19" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="702.51" y="345" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="19" value="&lt;font style=&quot;font-size: 14px;&quot;&gt;AUSF&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;fontFamily=Helvetica;fontSize=14;strokeColor=#6c8ebf;" vertex="1" parent="1">
<mxGeometry x="668.8299999999999" y="251.68000000000018" width="68.34" height="40" as="geometry" />
</mxCell>
<mxCell id="20" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=oval;endFill=1;strokeColor=#FFFFFF;fontFamily=Helvetica;fontSize=12;" edge="1" source="21" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="789.51" y="345" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="21" value="&lt;font style=&quot;font-size: 14px;&quot;&gt;UDM&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;fontFamily=Helvetica;fontSize=14;strokeColor=#6c8ebf;" vertex="1" parent="1">
<mxGeometry x="755.76" y="251.68000000000018" width="66.75" height="40" as="geometry" />
</mxCell>
<mxCell id="22" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=oval;endFill=1;strokeColor=#FFFFFF;fontFamily=Helvetica;fontSize=12;" edge="1" source="23" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="622.51" y="345" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="23" value="UDR" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;fontFamily=Helvetica;fontSize=14;strokeColor=#6c8ebf;" vertex="1" parent="1">
<mxGeometry x="587.4499999999998" y="208.37000000000023" width="70" height="40" as="geometry" />
</mxCell>
<mxCell id="24" value="&lt;span style=&quot;font-style: normal; letter-spacing: normal; text-align: center; text-indent: 0px; text-transform: none; word-spacing: 0px; background-color: rgb(68, 115, 197); font-size: 12px;&quot;&gt;&lt;font color=&quot;#ffffff&quot; style=&quot;font-size: 12px;&quot;&gt;Nausf&lt;/font&gt;&lt;/span&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1;fontFamily=Helvetica;fontSize=12;" vertex="1" parent="1">
<mxGeometry x="704.4599999999998" y="319.61000000000024" width="60" height="20" as="geometry" />
</mxCell>
<mxCell id="25" value="&lt;span style=&quot;font-style: normal; letter-spacing: normal; text-align: center; text-indent: 0px; text-transform: none; word-spacing: 0px; background-color: rgb(68, 115, 197); font-size: 12px;&quot;&gt;&lt;font color=&quot;#ffffff&quot; style=&quot;font-size: 12px;&quot;&gt;Nudm&lt;/font&gt;&lt;/span&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1;fontFamily=Helvetica;fontSize=12;" vertex="1" parent="1">
<mxGeometry x="793.6899999999998" y="311.6800000000002" width="60" height="20" as="geometry" />
</mxCell>
<mxCell id="26" value="&lt;span style=&quot;font-style: normal; letter-spacing: normal; text-align: center; text-indent: 0px; text-transform: none; word-spacing: 0px; background-color: rgb(68, 115, 197); font-size: 12px;&quot;&gt;&lt;font color=&quot;#ffffff&quot; style=&quot;font-size: 12px;&quot;&gt;Nudr&lt;/font&gt;&lt;/span&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1;fontFamily=Helvetica;fontSize=12;" vertex="1" parent="1">
<mxGeometry x="622.51" y="315.37000000000023" width="60" height="20" as="geometry" />
</mxCell>
<mxCell id="27" value="&lt;span style=&quot;font-style: normal ; letter-spacing: normal ; text-align: center ; text-indent: 0px ; text-transform: none ; word-spacing: 0px ; background-color: rgb(68 , 115 , 197) ; font-size: 12px&quot;&gt;&lt;font color=&quot;#ffffff&quot; style=&quot;font-size: 12px&quot;&gt;Service Base Network&lt;/font&gt;&lt;/span&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1;fontFamily=Helvetica;fontSize=12;" vertex="1" parent="1">
<mxGeometry x="944.06" y="336.6099999999999" width="68.45" height="20" as="geometry" />
</mxCell>
<mxCell id="28" value="" style="endArrow=none;html=1;strokeWidth=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;strokeColor=#FFFFFF;fontFamily=Helvetica;exitX=0.798;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" source="2" target="7" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="480" y="473.70000000000005" as="sourcePoint" />
<mxPoint x="656.4099999999999" y="436.68000000000006" as="targetPoint" />
<Array as="points">
<mxPoint x="591.51" y="474" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="29" value="&lt;span style=&quot;font-style: normal; letter-spacing: normal; text-align: center; text-indent: 0px; text-transform: none; word-spacing: 0px; background-color: rgb(68, 115, 197); font-size: 12px;&quot;&gt;&lt;font color=&quot;#ffffff&quot; style=&quot;font-size: 12px;&quot;&gt;N2: 172.21.6.200&lt;/font&gt;&lt;/span&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1;fontFamily=Helvetica;fontSize=12;" vertex="1" parent="1">
<mxGeometry x="527.7499999999999" y="446.3100000000004" width="113.68" height="20" as="geometry" />
</mxCell>
<mxCell id="30" value="&lt;font color=&quot;#ffffff&quot;&gt;&lt;span style=&quot;background-color: rgb(68, 115, 197);&quot;&gt;Openshift Cluster&lt;br&gt;&lt;/span&gt;&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1;fontFamily=Helvetica;fontSize=16;" vertex="1" parent="1">
<mxGeometry x="658.2" y="160" width="176.78" height="30" as="geometry" />
</mxCell>
<mxCell id="31" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=oval;endFill=1;strokeColor=#FFFFFF;" edge="1" source="32" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="902.5100000000001" y="347.52" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="32" value="&lt;font style=&quot;font-size: 14px;&quot;&gt;UPF&lt;br&gt;&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;fontFamily=Helvetica;fontSize=14;strokeColor=#6c8ebf;" vertex="1" parent="1">
<mxGeometry x="859.2900000000001" y="456.30999999999995" width="88.22" height="40" as="geometry" />
</mxCell>
<mxCell id="33" value="&lt;span style=&quot;font-style: normal; letter-spacing: normal; text-align: center; text-indent: 0px; text-transform: none; word-spacing: 0px; background-color: rgb(68, 115, 197); font-size: 12px;&quot;&gt;&lt;font color=&quot;#ffffff&quot; style=&quot;font-size: 12px;&quot;&gt;N3 172.21.6.201&lt;/font&gt;&lt;/span&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1;fontFamily=Helvetica;fontSize=12;" vertex="1" parent="1">
<mxGeometry x="704.4599999999999" y="530.0000000000003" width="113.68" height="20" as="geometry" />
</mxCell>
<mxCell id="34" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.828;entryY=1;entryDx=0;entryDy=0;entryPerimeter=0;strokeColor=#FFFFFF;endArrow=none;endFill=0;" edge="1" source="32" target="2" parent="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="903" y="523" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="35" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" source="37" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="312.5" y="389.6100000000001" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="36" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" source="37" target="2" parent="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="37" value="Midhaul/&lt;br&gt;Backhaul&lt;br&gt;Switch" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="1">
<mxGeometry x="340" y="450" width="80" height="80" as="geometry" />
</mxCell>
<mxCell id="38" value="Fronthaul&lt;br&gt;PTP Aware&lt;br&gt;Switch" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="1">
<mxGeometry x="118" y="446.31" width="80" height="80" as="geometry" />
</mxCell>
<mxCell id="39" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" source="40" target="38" parent="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="218" y="486" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="40" value="" style="whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="1">
<mxGeometry x="200" y="360" width="29.61" height="29.61" as="geometry" />
</mxCell>
<mxCell id="41" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
<mxGeometry x="200" y="378.61" width="10" height="10" as="geometry" />
</mxCell>
<mxCell id="42" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="220" y="378.61" width="10" height="10" as="geometry" />
</mxCell>
<mxCell id="43" value="" style="whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="1">
<mxGeometry x="300" y="360" width="29.61" height="29.61" as="geometry" />
</mxCell>
<mxCell id="44" value="O-RU" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="40" y="320.45" width="60" height="39.55" as="geometry" />
</mxCell>
<mxCell id="45" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.013;entryY=0.421;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" source="44" target="38" parent="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="70" y="480" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="46" value="VF-C" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="221" y="392.61" width="35" height="20.39" as="geometry" />
</mxCell>
<mxCell id="47" value="VF-U" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
<mxGeometry x="178" y="392.61" width="35" height="20.39" as="geometry" />
</mxCell>
<mxCell id="48" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
<mxGeometry x="200" y="120.00000000000001" width="10" height="10" as="geometry" />
</mxCell>
<mxCell id="49" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="200" y="150" width="10" height="10" as="geometry" />
</mxCell>
<mxCell id="50" value="Virtual Function U Plane" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="237" y="110" width="140" height="30" as="geometry" />
</mxCell>
<mxCell id="51" value="Virtual Function C Plane" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="237" y="140" width="140" height="30" as="geometry" />
</mxCell>
<mxCell id="52" value="" style="whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="1">
<mxGeometry x="201" y="180" width="20" height="20" as="geometry" />
</mxCell>
<mxCell id="53" value="Physical Interface" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="237" y="175" width="140" height="30" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

View File

@@ -21,12 +21,13 @@
#---------------------------------------------------------------------
#
# Dockerfile for the Open-Air-Interface BUILD service
# Valid for RHEL9
# Valid for UBI9
#
#---------------------------------------------------------------------
FROM registry.access.redhat.com/ubi9/ubi:latest AS ran-base
LABEL MAINTAINER OpenAirInterface <contact@openairinterface.org>
ARG NEEDED_GIT_PROXY
ENV TZ=Europe/Paris
ENV BUILD_UHD_FROM_SOURCE=True
@@ -35,10 +36,6 @@ ENV UHD_VERSION=4.4.0.0
# Copy the entitlements
COPY ./etc-pki-entitlement /etc/pki/entitlement
# Copy the subscription manager configurations
COPY ./rhsm-conf /etc/rhsm
COPY ./rhsm-ca /etc/rhsm/ca
ENV SMDEV_CONTAINER_OFF=1
#install developers pkg/repo
RUN rm -f /etc/rhsm-host && \
@@ -47,11 +44,21 @@ RUN rm -f /etc/rhsm-host && \
cat /etc/os-release && \
dnf install -y \
#gcc needed for build_oai
gcc gcc-c++ \
diffutils \
file \
psmisc \
git \
meson \
wget \
xz \
pkg-config \
pcre2-devel \
m4 \
python3-devel \
numactl-libs \
numactl-devel \
gcc-toolset-12-gcc \
gcc-toolset-12-gcc-c++ \
# python3-pip and pyyaml are used for conf template generation
python3-pip && \
pip3 install --ignore-installed pyyaml && \
@@ -80,8 +87,9 @@ WORKDIR /oai-ran
COPY oaienv .
#run build_oai -I to get the builder image
RUN /bin/sh oaienv && \
RUN /bin/sh oaienv && \
cd cmake_targets && \
mkdir -p log && \
./build_oai -I --install-optional-packages -w USRP && \
scl enable gcc-toolset-12 "\
./build_oai -I --install-optional-packages -w USRP" && \
rm /etc/pki/entitlement/*pem

View File

@@ -45,6 +45,11 @@ RUN apt-get update && \
gcc-12 \
g++-12 \
xxd \
libpcre2-dev \
python3-dev \
bison \
flex \
m4 \
# python3-pip for conf template generation
python3-pip && \
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 100 --slave /usr/bin/g++ g++ /usr/bin/g++-12 && \

View File

@@ -0,0 +1,81 @@
#/*
# * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
# * contributor license agreements. See the NOTICE file distributed with
# * this work for additional information regarding copyright ownership.
# * The OpenAirInterface Software Alliance licenses this file to You under
# * the OAI Public License, Version 1.1 (the "License"); you may not use this file
# * except in compliance with the License.
# * You may obtain a copy of the License at
# *
# * http://www.openairinterface.org/?page_id=698
# *
# * Unless required by applicable law or agreed to in writing, software
# * distributed under the License is distributed on an "AS IS" BASIS,
# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# * See the License for the specific language governing permissions and
# * limitations under the License.
# *-------------------------------------------------------------------------------
# * For more information about the OpenAirInterface (OAI) Software Alliance:
# * contact@openairinterface.org
# */
#---------------------------------------------------------------------
#
# Dockerfile for the Open-Air-Interface RAN Build for FHI 7.2
# Valid for UBI9
#
#---------------------------------------------------------------------
FROM ran-base:latest as ran-base
ENV TZ=Europe
RUN rm -Rf /oai-ran
WORKDIR /oai-ran
COPY . .
## Download and build DPDK
RUN wget http://fast.dpdk.org/rel/dpdk-20.11.9.tar.xz && \
tar -xvf dpdk-20.11.9.tar.xz && \
cd dpdk-stable-20.11.9 && \
meson build && \
ninja -C build && \
ninja install -C build
## Build Fronthaul library
RUN git clone https://gerrit.o-ran-sc.org/r/o-du/phy.git /opt/phy && \
cd /opt/phy && \
git checkout oran_e_maintenance_release_v1.0 &&\
git apply /oai-ran/cmake_targets/tools/oran_fhi_integration_patches/E/oaioran_E.patch && \
cd /opt/phy/fhi_lib/lib && \
RTE_SDK=/oai-ran/dpdk-stable-20.11.9/ XRAN_DIR=/opt/phy/fhi_lib make XRAN_LIB_SO=1
FROM ran-base as ran-build-fhi72
ARG E2AP_VERSION=E2AP_V3
ARG KPM_VERSION=KPM_V3_00
## Build and install OAI
RUN /bin/sh oaienv && \
cd cmake_targets && \
mkdir -p log && \
scl enable gcc-toolset-12 "\
./build_oai \
--gNB \
--build-lib 'telnetsrv enbscope uescope nrscope' \
-t oran_fhlib_5g --cmake-opt -Dxran_LOCATION=/opt/phy/fhi_lib/lib \
--build-e2 --cmake-opt -DXAPP_MULTILANGUAGE=OFF --cmake-opt -DKPM_VERSION=$KPM_VERSION --cmake-opt -DE2AP_VERSION=$E2AP_VERSION" &&\
# Mainly to see if the sanitize option was perfectly executed
ldd ran_build/build/nr-softmodem && \
ldd ran_build/build/liboran_fhlib_5g.so && \
ldd /opt/phy/fhi_lib/lib/build/libxran.so
## Build FlexRIC for SM Models
RUN mkdir -p openair2/E2AP/flexric/build && \
cd openair2/E2AP/flexric/build && \
scl enable gcc-toolset-12 "\
cmake -GNinja -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_FLAGS_RELEASE="-O3" \
-DXAPP_MULTILANGUAGE=OFF \
-DKPM_VERSION=$KPM_VERSION \
-DE2AP_VERSION=$E2AP_VERSION \
-DCMAKE_CXX_FLAGS_RELEASE="-O3" .. &&\
ninja && \
ninja install"

View File

@@ -0,0 +1,93 @@
#/*
# * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
# * contributor license agreements. See the NOTICE file distributed with
# * this work for additional information regarding copyright ownership.
# * The OpenAirInterface Software Alliance licenses this file to You under
# * the OAI Public License, Version 1.1 (the "License"); you may not use this file
# * except in compliance with the License.
# * You may obtain a copy of the License at
# *
# * http://www.openairinterface.org/?page_id=698
# *
# * Unless required by applicable law or agreed to in writing, software
# * distributed under the License is distributed on an "AS IS" BASIS,
# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# * See the License for the specific language governing permissions and
# * limitations under the License.
# *-------------------------------------------------------------------------------
# * For more information about the OpenAirInterface (OAI) Software Alliance:
# * contact@openairinterface.org
# */
#---------------------------------------------------------------------
#
# Dockerfile for the Open-Air-Interface RAN Build for FHI 7.2
# Valid for UBUNTU 22.04
#
#---------------------------------------------------------------------
FROM ran-base:latest as ran-base
ARG E2AP_VERSION=E2AP_V3
ARG KPM_VERSION=KPM_V3_00
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Europe
RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get upgrade --yes && \
DEBIAN_FRONTEND=noninteractive apt-get install --yes \
meson \
wget \
xz-utils \
pkg-config \
libnuma-dev && \
rm -rf /var/lib/apt/lists/*
RUN rm -Rf /oai-ran
WORKDIR /oai-ran
COPY . .
## Download and build DPDK
RUN wget http://fast.dpdk.org/rel/dpdk-20.11.9.tar.xz && \
tar -xvf dpdk-20.11.9.tar.xz && \
cd dpdk-stable-20.11.9 && \
meson build && \
ninja -C build && \
ninja install -C build
## Build Fronthaul library
RUN git clone https://gerrit.o-ran-sc.org/r/o-du/phy.git /opt/phy && \
cd /opt/phy && \
git checkout oran_e_maintenance_release_v1.0 &&\
git apply /oai-ran/cmake_targets/tools/oran_fhi_integration_patches/E/oaioran_E.patch && \
cd /opt/phy/fhi_lib/lib && \
RTE_SDK=/oai-ran/dpdk-stable-20.11.9/ XRAN_DIR=/opt/phy/fhi_lib make XRAN_LIB_SO=1
FROM ran-base as ran-build-fhi72
## Build and install OAI
#run build_oai to build the target image
RUN /bin/sh oaienv && \
cd cmake_targets && \
mkdir -p log && \
./build_oai \
--gNB \
--build-lib "telnetsrv enbscope uescope nrscope nrqtscope" \
-t oran_fhlib_5g --cmake-opt -Dxran_LOCATION=/opt/phy/fhi_lib/lib \
--build-e2 --cmake-opt -DXAPP_MULTILANGUAGE=OFF --cmake-opt -DKPM_VERSION=$KPM_VERSION --cmake-opt -DE2AP_VERSION=$E2AP_VERSION && \
$BUILD_OPTION && \
# Mainly to see if the sanitize option was perfectly executed
ldd ran_build/build/nr-softmodem && \
ldd ran_build/build/liboran_fhlib_5g.so && \
ldd /opt/phy/fhi_lib/lib/build/libxran.so
## Build FlexRIC for SM Models
RUN mkdir -p openair2/E2AP/flexric/build && \
cd openair2/E2AP/flexric/build && \
cmake -GNinja -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_FLAGS_RELEASE="-O3" \
-DXAPP_MULTILANGUAGE=OFF \
-DKPM_VERSION=$KPM_VERSION \
-DE2AP_VERSION=$E2AP_VERSION \
-DCMAKE_CXX_FLAGS_RELEASE="-O3" \
-DCMAKE_C_COMPILER=gcc-12 \
-DCMAKE_CXX_COMPILER=g++-12 .. && \
ninja && \
ninja install

View File

@@ -0,0 +1,113 @@
#/*
# * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
# * contributor license agreements. See the NOTICE file distributed with
# * this work for additional information regarding copyright ownership.
# * The OpenAirInterface Software Alliance licenses this file to You under
# * the OAI Public License, Version 1.1 (the "License"); you may not use this file
# * except in compliance with the License.
# * You may obtain a copy of the License at
# *
# * http://www.openairinterface.org/?page_id=698
# *
# * Unless required by applicable law or agreed to in writing, software
# * distributed under the License is distributed on an "AS IS" BASIS,
# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# * See the License for the specific language governing permissions and
# * limitations under the License.
# *-------------------------------------------------------------------------------
# * For more information about the OpenAirInterface (OAI) Software Alliance:
# * contact@openairinterface.org
# */
#---------------------------------------------------------------------
#
# Dockerfile for the Open-Air-Interface 7.2 Fronthaul
# Valid for UBI9
#
#---------------------------------------------------------------------
FROM ran-base:latest AS gnb-base
FROM ran-build-fhi72:latest AS gnb-build
#start from scratch for target executable
FROM registry.access.redhat.com/ubi9/ubi:latest as oai-gnb-fhi72
ENV TZ=Europe/Paris
# Copy the entitlements
COPY ./etc-pki-entitlement /etc/pki/entitlement
RUN rm -f /etc/rhsm-host && \
subscription-manager repos --enable codeready-builder-for-rhel-9-x86_64-rpms && \
dnf update -y && \
cat /etc/os-release && \
dnf install -y \
procps-ng \
libXpm \
libX11 \
atlas \
lksctp-tools \
xz \
numactl-libs \
numactl-devel \
pkg-config \
pciutils \
tzdata \
gdb \
python3 \
python3-pip \
net-tools \
iputils && \
pip3 install six && \
pip3 install requests && \
echo "/usr/local/lib" > /etc/ld.so.conf.d/local-lib.conf && \
echo "/usr/local/lib64" >> /etc/ld.so.conf.d/local-lib.conf && \
subscription-manager repos --disable codeready-builder-for-rhel-9-x86_64-rpms && \
rm -rf /etc/pki/entitlement
WORKDIR /opt/oai-gnb/bin
COPY --from=gnb-build \
/oai-ran/cmake_targets/ran_build/build/nr-softmodem ./
COPY ./docker/scripts/gnb_entrypoint.sh ./entrypoint.sh
COPY --from=gnb-build \
/oai-ran/cmake_targets/ran_build/build/librfsimulator.so \
/oai-ran/cmake_targets/ran_build/build/liboran_fhlib_5g.so \
/oai-ran/cmake_targets/ran_build/build/liboai_transpro.so \
/oai-ran/cmake_targets/ran_build/build/libcoding.so \
/oai-ran/cmake_targets/ran_build/build/libparams_libconfig.so \
/oai-ran/cmake_targets/ran_build/build/libdfts.so \
/oai-ran/cmake_targets/ran_build/build/libldpc*.so \
/oai-ran/cmake_targets/ran_build/build/libtelnetsrv.so \
/oai-ran/cmake_targets/ran_build/build/libtelnetsrv_ci.so \
/usr/local/lib/
## Libxran library
COPY --from=gnb-build \
/opt/phy/fhi_lib/lib/build/libxran.so \
/opt/phy/fhi_lib/lib/build/
## Copy all DPDK libraries as liboran_fhlib_5g.so require most of them
COPY --from=gnb-build /usr/local/lib64/ /usr/local/lib64/
## Copy E2 SM models
COPY --from=gnb-build /usr/local/lib64/flexric /usr/local/lib64/flexric
# Copying file for configuration module
COPY --from=gnb-base \
/lib64/libconfig.so.11 \
/lib64/libforms.so.2 \
/lib64/libblas.so.3 \
/lib64/libcblas.so.3 \
/lib64/liblapack.so.3 \
/lib64/liblapacke.so.3 \
/lib64/libicudata.so.67 \
/lib64/libicui18n.so.67 \
/lib64/libicuuc.so.67 \
/lib64/
RUN ldconfig
WORKDIR /opt/oai-gnb
COPY --from=gnb-base /tini /tini
ENTRYPOINT ["/tini", "-v", "--", "/opt/oai-gnb/bin/entrypoint.sh"]
CMD ["/opt/oai-gnb/bin/nr-softmodem", "-O", "/opt/oai-gnb/etc/gnb.conf"]

View File

@@ -0,0 +1,103 @@
#/*
# * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
# * contributor license agreements. See the NOTICE file distributed with
# * this work for additional information regarding copyright ownership.
# * The OpenAirInterface Software Alliance licenses this file to You under
# * the OAI Public License, Version 1.1 (the "License"); you may not use this file
# * except in compliance with the License.
# * You may obtain a copy of the License at
# *
# * http://www.openairinterface.org/?page_id=698
# *
# * Unless required by applicable law or agreed to in writing, software
# * distributed under the License is distributed on an "AS IS" BASIS,
# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# * See the License for the specific language governing permissions and
# * limitations under the License.
# *-------------------------------------------------------------------------------
# * For more information about the OpenAirInterface (OAI) Software Alliance:
# * contact@openairinterface.org
# */
#---------------------------------------------------------------------
#
# Dockerfile for the Open-Air-Interface 7.2 Fronthaul
# Valid for Ubuntu22.04
#
#---------------------------------------------------------------------
FROM ran-base:latest as gnb-base
FROM ran-build-fhi72:latest AS gnb-build
#start from scratch for target executable
FROM ubuntu:jammy as oai-gnb
ARG BUILD_OPTION
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Europe
RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get upgrade --yes && \
DEBIAN_FRONTEND=noninteractive apt-get install --yes \
software-properties-common \
procps \
pkg-config \
libsctp1 \
tzdata \
libblas3 \
libatlas3-base \
libconfig9 \
openssl \
net-tools \
iperf \
iproute2 \
iputils-ping \
gdb \
pciutils \
libpcap-dev \
xz-utils \
libnuma-dev \
python3 \
python3-six \
python3-requests &&\
# if the --sanitize option was used to build, additional packages are required
/bin/bash -c 'if [[ "$BUILD_OPTION" = "--sanitize" ]]; then DEBIAN_FRONTEND=noninteractive apt-get install --yes \
libasan5 \
libubsan1 \
liblapacke; fi' && \
rm -rf /var/lib/apt/lists/*
WORKDIR /opt/oai-gnb/bin
COPY --from=gnb-build \
/oai-ran/cmake_targets/ran_build/build/nr-softmodem ./
COPY ./docker/scripts/gnb_entrypoint.sh ./entrypoint.sh
COPY --from=gnb-build \
/oai-ran/cmake_targets/ran_build/build/librfsimulator.so \
/oai-ran/cmake_targets/ran_build/build/liboai_transpro.so \
/oai-ran/cmake_targets/ran_build/build/libcoding.so \
/oai-ran/cmake_targets/ran_build/build/libparams_libconfig.so \
/oai-ran/cmake_targets/ran_build/build/libdfts.so \
/oai-ran/cmake_targets/ran_build/build/libldpc*.so \
/oai-ran/cmake_targets/ran_build/build/libtelnetsrv.so \
/oai-ran/cmake_targets/ran_build/build/libtelnetsrv_ci.so \
/usr/local/lib/
## Libxran library
COPY --from=gnb-build \
/opt/phy/fhi_lib/lib/build/libxran.so \
/opt/phy/fhi_lib/lib/build/
## Copy all DPDK libraries as liboran_fhlib_5g.so require most of them
COPY --from=gnb-build /usr/local/lib/x86_64-linux-gnu /usr/local/lib/x86_64-linux-gnu/
## Copy E2 SM models
COPY --from=gnb-build /usr/local/lib/flexric /usr/local/lib/flexric
RUN ldconfig && \
ldd /opt/oai-gnb/bin/nr-softmodem
WORKDIR /opt/oai-gnb
COPY --from=gnb-base /tini /tini
ENTRYPOINT ["/tini", "-v", "--", "/opt/oai-gnb/bin/entrypoint.sh"]
CMD ["/opt/oai-gnb/bin/nr-softmodem", "-O", "/opt/oai-gnb/etc/gnb.conf"]

View File

@@ -27,36 +27,33 @@ the ran-build image. If you reinstalled dependencies, you have to restart from
ran-base.
You first need to login. Do:
```bash
oc login -u <username> -p <password> --server <url>
```
## RHEL8 Entitlements
Create a project/namespace where you will create your images
To build the RAN images, we use the `codeready-builder-for-rhel-8-x86_64-rpms` repository with all the proper development libraries.
This repository is not directly accessible from the UBI RHEL8 image (`registry.access.redhat.com/ubi8/ubi:latest`).
Therefore, we need to copy certificates and subscription manager configuration files from a registered RHEL8 machine.
```bash
oc new-project oaicicd-ran
```
on a `RHEL8` physical machine (or a virtual machine) connected to the OpenShift Cluster, recover the entitlement and the RH subscription manager configs:
**NOTE**: If you change the project name then you have to change it in all the `yaml` files.
## RHEL9 Entitlements
To build the RAN images, we use the `codeready-builder-for-rhel-9-x86_64-rpms` repository with all the proper development libraries. To access the library you will need `etc-pki-entitlement` inside the container image.
To import `etc-pki-entitlement` in your project follow this [guide](https://docs.openshift.com/container-platform/4.14/cicd/builds/running-entitled-builds.html#builds-source-secrets-entitlements_running-entitled-builds)
In case you have difficulties in following it then you can copy the certificates from an RHEL9 host
```bash
oc create configmap rhsm-conf --from-file /etc/rhsm/rhsm.conf
oc create configmap rhsm-ca --from-file /etc/rhsm/ca/redhat-uep.pem
oc create secret generic etc-pki-entitlement --from-file /etc/pki/entitlement/{NUMBER_ON_YOUR_COMPUTER}.pem --from-file /etc/pki/entitlement/{NUMBER_ON_YOUR_COMPUTER}-key.pem
```
These configmaps and secret will be shared by all the build configs in your OC
project. No need to do it each time. However, these files expire every month
or so. If you have done a build on your OC project and try again a few weeks
later, you may need to re-copy them. (The CI recopies them every time.)
```bash
oc delete secret etc-pki-entitlement
oc delete cm rhsm-conf
oc delete cm rhsm-ca
```
# 2. Build of `base` shared image
Create an image stream and build config that specify image properties and build parameters, then start the build:

View File

@@ -0,0 +1,48 @@
#/*
# * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
# * contributor license agreements. See the NOTICE file distributed with
# * this work for additional information regarding copyright ownership.
# * The OpenAirInterface Software Alliance licenses this file to You under
# * the OAI Public License, Version 1.1 (the "License"); you may not use this file
# * except in compliance with the License.
# * You may obtain a copy of the License at
# *
# * http://www.openairinterface.org/?page_id=698
# *
# * Unless required by applicable law or agreed to in writing, software
# * distributed under the License is distributed on an "AS IS" BASIS,
# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# * See the License for the specific language governing permissions and
# * limitations under the License.
# *-------------------------------------------------------------------------------
# * For more information about the OpenAirInterface (OAI) Software Alliance:
# * contact@openairinterface.org
# */
#---------------------------------------------------------------------
#
kind: BuildConfig
apiVersion: build.openshift.io/v1
metadata:
name: "oai-gnb-fhi72"
spec:
runPolicy: "Serial"
source:
type: "Binary"
secrets:
- secret:
name: etc-pki-entitlement
destinationDir: etc-pki-entitlement
configMaps:
- configMap:
name: rhsm-conf
destinationDir: rhsm-conf
- configMap:
name: rhsm-ca
destinationDir: rhsm-ca
strategy:
dockerStrategy:
dockerfilePath: "docker/Dockerfile.gNB.fhi72.rhel9"
output:
to:
kind: "ImageStreamTag"
name: "oai-gnb-fhi72:latest"

View File

@@ -0,0 +1,30 @@
#/*
# * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
# * contributor license agreements. See the NOTICE file distributed with
# * this work for additional information regarding copyright ownership.
# * The OpenAirInterface Software Alliance licenses this file to You under
# * the OAI Public License, Version 1.1 (the "License"); you may not use this file
# * except in compliance with the License.
# * You may obtain a copy of the License at
# *
# * http://www.openairinterface.org/?page_id=698
# *
# * Unless required by applicable law or agreed to in writing, software
# * distributed under the License is distributed on an "AS IS" BASIS,
# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# * See the License for the specific language governing permissions and
# * limitations under the License.
# *-------------------------------------------------------------------------------
# * For more information about the OpenAirInterface (OAI) Software Alliance:
# * contact@openairinterface.org
# */
#---------------------------------------------------------------------
#
apiVersion: image.openshift.io/v1
kind: ImageStream
metadata:
name: oai-gnb-fhi72
namespace: oaicicd-ran
spec:
lookupPolicy:
local: true

View File

@@ -0,0 +1,39 @@
#/*
# * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
# * contributor license agreements. See the NOTICE file distributed with
# * this work for additional information regarding copyright ownership.
# * The OpenAirInterface Software Alliance licenses this file to You under
# * the OAI Public License, Version 1.1 (the "License"); you may not use this file
# * except in compliance with the License.
# * You may obtain a copy of the License at
# *
# * http://www.openairinterface.org/?page_id=698
# *
# * Unless required by applicable law or agreed to in writing, software
# * distributed under the License is distributed on an "AS IS" BASIS,
# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# * See the License for the specific language governing permissions and
# * limitations under the License.
# *-------------------------------------------------------------------------------
# * For more information about the OpenAirInterface (OAI) Software Alliance:
# * contact@openairinterface.org
# */
#---------------------------------------------------------------------
#
kind: BuildConfig
apiVersion: build.openshift.io/v1
metadata:
name: "ran-build-fhi72"
spec:
runPolicy: "Serial"
nodeSelector:
kubernetes.io/hostname: demophon
source:
type: "Binary"
strategy:
dockerStrategy:
dockerfilePath: "docker/Dockerfile.build.fhi72.rhel9"
output:
to:
kind: "ImageStreamTag"
name: "ran-build-fhi72:latest"

View File

@@ -0,0 +1,30 @@
#/*
# * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
# * contributor license agreements. See the NOTICE file distributed with
# * this work for additional information regarding copyright ownership.
# * The OpenAirInterface Software Alliance licenses this file to You under
# * the OAI Public License, Version 1.1 (the "License"); you may not use this file
# * except in compliance with the License.
# * You may obtain a copy of the License at
# *
# * http://www.openairinterface.org/?page_id=698
# *
# * Unless required by applicable law or agreed to in writing, software
# * distributed under the License is distributed on an "AS IS" BASIS,
# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# * See the License for the specific language governing permissions and
# * limitations under the License.
# *-------------------------------------------------------------------------------
# * For more information about the OpenAirInterface (OAI) Software Alliance:
# * contact@openairinterface.org
# */
#---------------------------------------------------------------------
#
apiVersion: image.openshift.io/v1
kind: ImageStream
metadata:
name: ran-build-fhi72
namespace: oaicicd-ran
spec:
lookupPolicy:
local: true

View File

@@ -177,8 +177,8 @@ gNBs =
NETWORK_INTERFACES :
{
GNB_IPV4_ADDRESS_FOR_NG_AMF = "172.21.16.108/22";
GNB_IPV4_ADDRESS_FOR_NGU = "172.21.16.108/22";
GNB_IPV4_ADDRESS_FOR_NG_AMF = "172.21.18.20/22";
GNB_IPV4_ADDRESS_FOR_NGU = "172.21.18.20/22";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};
}
@@ -226,7 +226,7 @@ RUs = (
max_rxgain = 75;
sf_extension = 0;
eNB_instances = [0];
ru_thread_core = 6;
ru_thread_core = 9;
sl_ahead = 5;
##beamforming 1x2 matrix: 1 layer x 2 antennas
bf_weights = [0x00007fff, 0x0000,0x00007fff, 0x0000];
@@ -277,7 +277,7 @@ log_config : {
fhi_72 = {
dpdk_devices = ("0000:31:06.0", "0000:31:06.1");
system_core = 0;
io_core = 4;
io_core = 1;
worker_cores = (2);
du_addr = ("76:76:64:6e:00:01", "76:76:64:6e:00:01");
ru_addr = ("98:ae:71:01:c5:eb", "98:ae:71:01:c5:eb");

View File

@@ -176,8 +176,8 @@ gNBs =
NETWORK_INTERFACES :
{
GNB_IPV4_ADDRESS_FOR_NG_AMF = "172.21.16.51";
GNB_IPV4_ADDRESS_FOR_NGU = "172.21.16.51";
GNB_IPV4_ADDRESS_FOR_NG_AMF = "172.21.18.20";
GNB_IPV4_ADDRESS_FOR_NGU = "172.21.18.20";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};
}