mirror of
https://gitlab.eurecom.fr/oai/openairinterface5g.git
synced 2026-07-13 12:40:28 +00:00
Compare commits
26 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ade2038a9c | ||
|
|
23ced31bf4 | ||
|
|
9d782dfa9e | ||
|
|
f1e9ce910b | ||
|
|
3cf853e129 | ||
|
|
8c58a34172 | ||
|
|
703d8bf723 | ||
|
|
9852c4c90b | ||
|
|
75ae2d2232 | ||
|
|
ccd22fc5bc | ||
|
|
71766c21a7 | ||
|
|
c5cd52397c | ||
|
|
a02e420bd2 | ||
|
|
f3ab9e3ae1 | ||
|
|
5c9a73304d | ||
|
|
93ef3a0d60 | ||
|
|
a51770341e | ||
|
|
9a6b332912 | ||
|
|
c574fa68c5 | ||
|
|
ad85919ba7 | ||
|
|
5cd9d6206e | ||
|
|
1c4c8d3e1b | ||
|
|
347dda4dc5 | ||
|
|
a8cb7d807c | ||
|
|
18f2ff3608 | ||
|
|
1dfb4fc4c3 |
@@ -5,4 +5,3 @@ common/utils/T/T_IDs.h
|
||||
common/utils/T/T_messages.txt.h
|
||||
common/utils/T/genids
|
||||
common/utils/T/genids.o
|
||||
build/
|
||||
|
||||
190
.github/workflows/jenkins-dispatch.yml
vendored
190
.github/workflows/jenkins-dispatch.yml
vendored
@@ -1,190 +0,0 @@
|
||||
name: Duranta Jenkins Dispatch
|
||||
|
||||
on:
|
||||
pull_request_target:
|
||||
types: [opened, synchronize, reopened, labeled]
|
||||
branches: [develop]
|
||||
push:
|
||||
branches:
|
||||
- develop
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.event_name }}-${{ github.event.action }}-${{ github.event.pull_request.number || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: write
|
||||
|
||||
jobs:
|
||||
verify-signed-commits:
|
||||
runs-on: ubuntu-24.04
|
||||
|
||||
if: github.event_name == 'pull_request_target'
|
||||
|
||||
steps:
|
||||
- name: Check all commits are signed
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
UNSIGNED=$(gh api repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}/commits \
|
||||
--paginate --jq '[.[] | select(.commit.verification.verified == false) | .sha[:7]] | join(", ")')
|
||||
|
||||
if [ -n "$UNSIGNED" ]; then
|
||||
echo -e "$UNSIGNED commits are missing signature"
|
||||
gh pr comment ${{ github.event.pull_request.number }} --repo ${{ github.repository }} --body "$(cat <<EOF
|
||||
**Validation:**
|
||||
The following commit(s) are missing signature:
|
||||
|
||||
$UNSIGNED
|
||||
|
||||
Please use 'git commit -S' to sign your commits.
|
||||
For detailed instructions, refer to the [CONTRIBUTING.md](https://github.com/duranta-project/openairinterface5g/blob/develop/CONTRIBUTING.md) file at the root of this repository or [GitHub Docs](https://docs.github.com/en/authentication/managing-commit-signature-verification/about-commit-signature-verification)
|
||||
EOF
|
||||
)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
check-labels:
|
||||
needs: verify-signed-commits
|
||||
runs-on: ubuntu-24.04
|
||||
|
||||
if: github.event_name == 'pull_request_target'
|
||||
|
||||
steps:
|
||||
- name: Check for mandatory CI label
|
||||
run: |
|
||||
PR_LABELS=$(echo '${{ toJson(github.event.pull_request.labels) }}' | jq -r '.[].name')
|
||||
|
||||
for label in \
|
||||
"${{ vars.BUILD_ONLY_LABEL }}" \
|
||||
"${{ vars.DOC_LABEL }}" \
|
||||
"${{ vars.NR_LABEL }}" \
|
||||
"${{ vars.NRUE_LABEL }}" \
|
||||
"${{ vars.LTE_LABEL }}" \
|
||||
"${{ vars.CI_LABEL }}" \
|
||||
"${{ vars.RETRIGGER_CI_LABEL }}"; do
|
||||
if echo "$PR_LABELS" | grep -qxF "$label"; then
|
||||
exit 0
|
||||
fi
|
||||
done
|
||||
|
||||
exit 1
|
||||
|
||||
detect-changes:
|
||||
needs: check-labels
|
||||
runs-on: ubuntu-24.04
|
||||
|
||||
if: |
|
||||
always() && (
|
||||
github.event_name == 'push' ||
|
||||
needs.check-labels.result == 'success'
|
||||
) && (
|
||||
github.event.action != 'labeled' ||
|
||||
github.event.label.name == vars.RETRIGGER_CI_LABEL
|
||||
)
|
||||
|
||||
outputs:
|
||||
protected_files_changed: ${{ steps.filter.outputs.protected }}
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Check changed files
|
||||
uses: dorny/paths-filter@v3
|
||||
id: filter
|
||||
with:
|
||||
filters: |
|
||||
protected:
|
||||
- 'ci-scripts/**'
|
||||
- '.github/workflows/**'
|
||||
- '.github/actions/**'
|
||||
- 'docker/**'
|
||||
- 'charts/**'
|
||||
- 'openshift/**'
|
||||
- 'cmake_targets/build_oai'
|
||||
- 'cmake_targets/tools/build_helper'
|
||||
|
||||
require-maintainer-approval:
|
||||
needs: detect-changes
|
||||
|
||||
if: |
|
||||
always() &&
|
||||
needs.detect-changes.outputs.protected_files_changed == 'true'
|
||||
runs-on: ubuntu-24.04
|
||||
|
||||
environment:
|
||||
name: ci-approval
|
||||
|
||||
steps:
|
||||
- run: echo "Maintainer has approved the changes"
|
||||
|
||||
trigger-jenkins:
|
||||
needs:
|
||||
- check-labels
|
||||
- detect-changes
|
||||
- require-maintainer-approval
|
||||
|
||||
if: |
|
||||
always() &&
|
||||
(
|
||||
needs.detect-changes.outputs.protected_files_changed == 'false' ||
|
||||
needs.require-maintainer-approval.result == 'success'
|
||||
)
|
||||
|
||||
runs-on: ubuntu-24.04
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha || github.ref }}
|
||||
|
||||
- name: Trigger Jenkins
|
||||
run: |
|
||||
# Write payload to a temp file to avoid shell escaping issues
|
||||
cat << 'EOF' > /tmp/payload.json
|
||||
${{ toJson(github.event) }}
|
||||
EOF
|
||||
|
||||
# Filter and send
|
||||
jq -c 'del(.pull_request.body)' /tmp/payload.json > /tmp/filtered_payload.json
|
||||
|
||||
# Remap pull_request_target -> pull_request for Jenkins compatibility
|
||||
EVENT_NAME="${{ github.event_name }}"
|
||||
if [ "$EVENT_NAME" = "pull_request_target" ]; then
|
||||
EVENT_NAME="pull_request"
|
||||
fi
|
||||
|
||||
curl -X POST "https://${{ secrets.J_USER }}:${{ secrets.J_PASS }}@${{ secrets.J_URL }}" \
|
||||
-H "Accept: */*" \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "User-Agent: GitHub-Hookshot/${{ secrets.H_AGENT }}" \
|
||||
-H "X-Github-Delivery: ${{ secrets.GITHUB_TOKEN }}" \
|
||||
-H "X-Github-Event: $EVENT_NAME" \
|
||||
-H "X-Github-Hook-Id: ${{ secrets.H_ID }}" \
|
||||
-H "X-Github-Hook-Installation-Target-Id: ${{ secrets.H_TARGET }}" \
|
||||
-H "X-Github-Hook-Installation-Target-Type: repository" \
|
||||
--data @/tmp/filtered_payload.json
|
||||
|
||||
cleanup:
|
||||
needs:
|
||||
- verify-signed-commits
|
||||
- check-labels
|
||||
- detect-changes
|
||||
- require-maintainer-approval
|
||||
- trigger-jenkins
|
||||
|
||||
if: always() && github.event_name == 'pull_request_target'
|
||||
|
||||
runs-on: ubuntu-24.04
|
||||
|
||||
steps:
|
||||
- name: Remove retrigger-ci label
|
||||
run: |
|
||||
PR_LABELS=$(echo '${{ toJson(github.event.pull_request.labels) }}' | jq -r '.[].name')
|
||||
if echo "$PR_LABELS" | grep -qxF "${{ vars.RETRIGGER_CI_LABEL }}"; then
|
||||
gh pr edit ${{ github.event.pull_request.number }} --remove-label "${{ vars.RETRIGGER_CI_LABEL }}" --repo ${{ github.repository }}
|
||||
fi
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
26
CHANGELOG.md
26
CHANGELOG.md
@@ -2,7 +2,7 @@
|
||||
|
||||
# RELEASE NOTES: #
|
||||
|
||||
## [v2.4.0](https://github.com/duranta-project/openairinterface5g/releases/tag/v2.4.0) -> December 2025. ##
|
||||
## [v2.4.0](https://gitlab.eurecom.fr/oai/openairinterface5g/-/tags/v2.4.0) -> December 2025. ##
|
||||
|
||||
General new features and improvements (both RAN and UE):
|
||||
- Rework LDPC BBdev/AAL interface and support both AMD T2/Intel vRAN Boost
|
||||
@@ -68,7 +68,7 @@ Configuration file changes:
|
||||
should be removed
|
||||
- `MACRLCs.[0].stats_max_ue` has been added
|
||||
|
||||
## [v2.3.0](https://github.com/duranta-project/openairinterface5g/releases/tag/v2.3.0) -> July 2025. ##
|
||||
## [v2.3.0](https://gitlab.eurecom.fr/oai/openairinterface5g/-/tags/v2.3.0) -> July 2025. ##
|
||||
|
||||
General new features and improvements (both RAN and UE):
|
||||
- Preliminary support for RedCap UEs
|
||||
@@ -114,7 +114,7 @@ nrUE changes:
|
||||
Regression:
|
||||
- Multiple BWPs do not work reliably on gNB; use tag 2025.w17
|
||||
|
||||
## [v2.2.0](https://github.com/duranta-project/openairinterface5g/releases/tag/v2.2.0) -> November 2024. ##
|
||||
## [v2.2.0](https://gitlab.eurecom.fr/oai/openairinterface5g/-/tags/v2.2.0) -> November 2024. ##
|
||||
|
||||
General 5G improvements (both gNB and UE):
|
||||
- Make standalone mode (SA) the default (see [`RUNMODEM.md`](doc/RUNMODEM.md))
|
||||
@@ -170,7 +170,7 @@ General 5G improvements (both gNB and UE):
|
||||
This release also includes many fixes and documentation updates. See
|
||||
`doc/README.md` in the repository for an overview of documentation.
|
||||
|
||||
## [v2.1.0](https://github.com/duranta-project/openairinterface5g/releases/tag/v2.1.0) -> February 2024. ##
|
||||
## [v2.1.0](https://gitlab.eurecom.fr/oai/openairinterface5g/-/tags/v2.1.0) -> February 2024. ##
|
||||
|
||||
This release improves existing 5G support and adds various new features.
|
||||
|
||||
@@ -197,7 +197,7 @@ interoperability is under testing.
|
||||
|
||||
This release also includes many fixes and documentation updates.
|
||||
|
||||
## [v2.0.0](https://github.com/duranta-project/openairinterface5g/releases/tag/v2.0.0) -> August 2023. ##
|
||||
## [v2.0.0](https://gitlab.eurecom.fr/oai/openairinterface5g/-/tags/v2.0.0) -> August 2023. ##
|
||||
|
||||
This release adds support for 5G and maintains previous features:
|
||||
* 5G SA in gNB
|
||||
@@ -226,11 +226,11 @@ This release adds support for 5G and maintains previous features:
|
||||
|
||||
For more information on supported features, please refer to the [feature set](doc/FEATURE_SET.md).
|
||||
|
||||
## [v1.2.1](https://github.com/duranta-project/openairinterface5g/releases/tag/v1.2.1) -> February 2020. ##
|
||||
## [v1.2.1](https://gitlab.eurecom.fr/oai/openairinterface5g/-/tags/v1.2.1) -> February 2020. ##
|
||||
|
||||
* Bug fix for mutex lock for wake-up signal
|
||||
|
||||
## [v1.2.0](https://github.com/duranta-project/openairinterface5g/releases/tag/v1.2.0) -> January 2020. ##
|
||||
## [v1.2.0](https://gitlab.eurecom.fr/oai/openairinterface5g/-/tags/v1.2.0) -> January 2020. ##
|
||||
|
||||
This version adds the following implemented features:
|
||||
|
||||
@@ -246,11 +246,11 @@ This version also has an improved code quality:
|
||||
* Better Test Coverage in Continuous Integration:
|
||||
- Initial framework to do long-run testing at R2LAB
|
||||
|
||||
## [v1.1.1](https://github.com/duranta-project/openairinterface5g/releases/tag/v1.1.1) -> November 2019. ##
|
||||
## [v1.1.1](https://gitlab.eurecom.fr/oai/openairinterface5g/-/tags/v1.1.1) -> November 2019. ##
|
||||
|
||||
- Bug fix in the TDD Fair Round-Robin scheduler
|
||||
|
||||
## [v1.1.0](https://github.com/duranta-project/openairinterface5g/releases/tag/v1.1.0) -> July 2019. ##
|
||||
## [v1.1.0](https://gitlab.eurecom.fr/oai/openairinterface5g/-/tags/v1.1.0) -> July 2019. ##
|
||||
|
||||
This version adds the following implemented features:
|
||||
|
||||
@@ -282,19 +282,19 @@ This version has an improved code quality:
|
||||
- Multi-RRU TDD mode
|
||||
- X2 Handover in FDD mode
|
||||
|
||||
## [v1.0.3](https://github.com/duranta-project/openairinterface5g/releases/tag/v1.0.3) -> June 2019. ##
|
||||
## [v1.0.3](https://gitlab.eurecom.fr/oai/openairinterface5g/-/tags/v1.0.3) -> June 2019. ##
|
||||
|
||||
- Bug fix for LimeSuite v19.04.0 API
|
||||
|
||||
## [v1.0.2](https://github.com/duranta-project/openairinterface5g/releases/tag/v1.0.2) -> February 2019. ##
|
||||
## [v1.0.2](https://gitlab.eurecom.fr/oai/openairinterface5g/-/tags/v1.0.2) -> February 2019. ##
|
||||
|
||||
- Full OAI support for 3.13.1 UHD
|
||||
|
||||
## [v1.0.1](https://github.com/duranta-project/openairinterface5g/releases/tag/v1.0.1) -> February 2019. ##
|
||||
## [v1.0.1](https://gitlab.eurecom.fr/oai/openairinterface5g/-/tags/v1.0.1) -> February 2019. ##
|
||||
|
||||
- Bug fix for the UE L1 simulator.
|
||||
|
||||
## [v1.0.0](https://github.com/duranta-project/openairinterface5g/releases/tag/v1.0.0) -> January 2019. ##
|
||||
## [v1.0.0](https://gitlab.eurecom.fr/oai/openairinterface5g/-/tags/v1.0.0) -> January 2019. ##
|
||||
|
||||
This version first implements the architectural split described in the following picture.
|
||||
|
||||
|
||||
207
CMakeLists.txt
207
CMakeLists.txt
@@ -3,7 +3,6 @@
|
||||
cmake_minimum_required (VERSION 3.19)
|
||||
project (OpenAirInterface LANGUAGES C CXX)
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
set(OAI_VERSION 2.4.0)
|
||||
|
||||
option(ENABLE_CHANNEL_SIM_CUDA "Enable CUDA accelerated channel simulation" OFF)
|
||||
@@ -234,9 +233,16 @@ if(CMAKE_C_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang
|
||||
set(commonOpts "${commonOpts} -Wno-unused-command-line-argument -Wno-default-const-init-field-unsafe")
|
||||
endif()
|
||||
|
||||
if (ENABLE_LDPC_CUDA)
|
||||
# TODO only on specific targets!!
|
||||
set(commonOpts "${commonOpts} -DLDPC_CUDA")
|
||||
endif()
|
||||
|
||||
set(CMAKE_C_FLAGS
|
||||
"${C_FLAGS_PROCESSOR} ${commonOpts} -std=gnu11 -funroll-loops ${CMAKE_C_FLAGS}")
|
||||
set(CMAKE_CXX_FLAGS "${C_FLAGS_PROCESSOR} ${commonOpts} ${CMAKE_CXX_FLAGS}")
|
||||
set(CMAKE_CXX_FLAGS
|
||||
"${C_FLAGS_PROCESSOR} ${commonOpts} -std=c++11 ${CMAKE_CXX_FLAGS}")
|
||||
|
||||
|
||||
add_boolean_option(SANITIZE_ADDRESS OFF "enable the address sanitizer (ASan)" ON)
|
||||
if (SANITIZE_ADDRESS)
|
||||
@@ -383,12 +389,6 @@ endif()
|
||||
add_boolean_option(ENABLE_IMSCOPE OFF "Enable phy scope based on imgui" OFF)
|
||||
add_boolean_option(ENABLE_IMSCOPE_RECORD OFF "Enable recording IQ data for imscope" OFF)
|
||||
|
||||
#########################
|
||||
##### E3 AGENT
|
||||
#########################
|
||||
set(E3_AGENT "OFF" CACHE STRING "O-RAN nGRG E3 Agent for dApps")
|
||||
set_property(CACHE E3_AGENT PROPERTY STRINGS "ON" "OFF")
|
||||
|
||||
##################################################
|
||||
# ASN.1 grammar C code generation & dependencies #
|
||||
##################################################
|
||||
@@ -629,6 +629,12 @@ include_directories("${OPENAIR2_DIR}/COMMON")
|
||||
include_directories("${OPENAIR2_DIR}/UTIL")
|
||||
include_directories("${OPENAIR3_DIR}/COMMON")
|
||||
include_directories("${OPENAIR3_DIR}/UTILS")
|
||||
include_directories("${NFAPI_DIR}/nfapi/public_inc")
|
||||
include_directories("${NFAPI_DIR}/common/public_inc")
|
||||
include_directories("${NFAPI_DIR}/pnf/public_inc")
|
||||
include_directories("${NFAPI_DIR}/nfapi/inc")
|
||||
include_directories("${NFAPI_DIR}/sim_common/inc")
|
||||
include_directories("${NFAPI_DIR}/pnf_sim/inc")
|
||||
include_directories("${OPENAIR1_DIR}")
|
||||
include_directories("${OPENAIR2_DIR}")
|
||||
include_directories("${OPENAIR3_DIR}/NAS/TOOLS")
|
||||
@@ -725,7 +731,6 @@ set(SCHED_SRC
|
||||
)
|
||||
add_library(SCHED_LIB ${SCHED_SRC})
|
||||
target_link_libraries(SCHED_LIB PRIVATE asn1_lte_rrc_hdrs)
|
||||
target_link_libraries(SCHED_LIB PRIVATE nfapi_pnf_lib)
|
||||
|
||||
set(SCHED_NR_SRC
|
||||
${OPENAIR1_DIR}/SCHED_NR/phy_procedures_nr_gNB.c
|
||||
@@ -735,14 +740,14 @@ set(SCHED_NR_SRC
|
||||
)
|
||||
add_library(SCHED_NR_LIB ${SCHED_NR_SRC})
|
||||
target_link_libraries(SCHED_NR_LIB PRIVATE asn1_nr_rrc_hdrs UTIL)
|
||||
target_link_libraries(SCHED_NR_LIB PRIVATE nfapi_nr_lib nfapi_user_lib) # some FAPI messages pack "subPDUs"
|
||||
target_link_libraries(SCHED_NR_LIB PRIVATE NFAPI_LIB) # some FAPI messages pack "subPDUs"
|
||||
|
||||
set(SCHED_SRC_RU
|
||||
${OPENAIR1_DIR}/SCHED/ru_procedures.c
|
||||
${OPENAIR1_DIR}/SCHED/prach_procedures.c
|
||||
)
|
||||
add_library(SCHED_RU_LIB ${SCHED_SRC_RU})
|
||||
target_link_libraries(SCHED_RU_LIB PRIVATE asn1_lte_rrc_hdrs nfapi_user_lib)
|
||||
target_link_libraries(SCHED_RU_LIB PRIVATE asn1_lte_rrc_hdrs)
|
||||
|
||||
set(SCHED_SRC_UE
|
||||
${OPENAIR1_DIR}/SCHED_UE/phy_procedures_lte_ue.c
|
||||
@@ -764,6 +769,80 @@ set(SCHED_SRC_NR_UE
|
||||
add_library(SCHED_NR_UE_LIB ${SCHED_SRC_NR_UE})
|
||||
target_link_libraries(SCHED_NR_UE_LIB PRIVATE asn1_lte_rrc_hdrs asn1_nr_rrc_hdrs UTIL)
|
||||
|
||||
# nFAPI
|
||||
#################################
|
||||
set(NFAPI_SRC
|
||||
${NFAPI_DIR}/nfapi/src/nfapi_p4.c
|
||||
${NFAPI_DIR}/nfapi/src/nfapi_p5.c
|
||||
${NFAPI_DIR}/nfapi/src/nfapi_p7.c
|
||||
)
|
||||
add_library(NFAPI_LIB ${NFAPI_SRC})
|
||||
target_link_libraries(NFAPI_LIB PUBLIC nfapi_common)
|
||||
target_link_libraries(NFAPI_LIB PUBLIC nr_fapi_p5 nr_fapi_p7)
|
||||
target_link_libraries(NFAPI_LIB PRIVATE z)
|
||||
|
||||
if(OAI_WLS)
|
||||
target_compile_definitions(NFAPI_LIB PRIVATE ENABLE_WLS)
|
||||
else()
|
||||
target_compile_definitions(NFAPI_LIB PRIVATE ENABLE_SOCKET)
|
||||
endif()
|
||||
include_directories(${NFAPI_DIR}/nfapi/public_inc)
|
||||
include_directories(${NFAPI_DIR}/nfapi/inc)
|
||||
|
||||
set(NFAPI_PNF_SRC
|
||||
${NFAPI_DIR}/pnf/src/pnf.c
|
||||
${NFAPI_DIR}/pnf/src/pnf_interface.c
|
||||
${NFAPI_DIR}/pnf/src/pnf_p7.c
|
||||
${NFAPI_DIR}/pnf/src/pnf_p7_interface.c
|
||||
)
|
||||
add_library(NFAPI_PNF_LIB ${NFAPI_PNF_SRC})
|
||||
target_link_libraries(NFAPI_PNF_LIB PRIVATE asn1_lte_rrc_hdrs asn1_nr_rrc_hdrs)
|
||||
target_link_libraries(NFAPI_PNF_LIB PUBLIC nr_fapi_p7)
|
||||
|
||||
if(OAI_WLS)
|
||||
target_compile_definitions(NFAPI_PNF_LIB PRIVATE ENABLE_WLS)
|
||||
endif()
|
||||
include_directories(${NFAPI_DIR}/pnf/public_inc)
|
||||
include_directories(${NFAPI_DIR}/pnf/inc)
|
||||
|
||||
set(NFAPI_VNF_SRC
|
||||
${NFAPI_DIR}/vnf/src/vnf.c
|
||||
${NFAPI_DIR}/vnf/src/vnf_interface.c
|
||||
${NFAPI_DIR}/vnf/src/vnf_p7.c
|
||||
${NFAPI_DIR}/vnf/src/vnf_p7_interface.c
|
||||
)
|
||||
add_library(NFAPI_VNF_LIB ${NFAPI_VNF_SRC})
|
||||
target_link_libraries(NFAPI_VNF_LIB PRIVATE asn1_lte_rrc_hdrs asn1_nr_rrc_hdrs)
|
||||
target_link_libraries(NFAPI_VNF_LIB PRIVATE nr_fapi_p5 nr_fapi_p7)
|
||||
if(OAI_AERIAL)
|
||||
target_compile_definitions(NFAPI_VNF_LIB PRIVATE ENABLE_AERIAL)
|
||||
endif()
|
||||
include_directories(${NFAPI_DIR}/vnf/public_inc)
|
||||
include_directories(${NFAPI_DIR}/vnf/inc)
|
||||
|
||||
if(OAI_WLS)
|
||||
target_compile_definitions(NFAPI_VNF_LIB PRIVATE ENABLE_WLS)
|
||||
endif()
|
||||
# nFAPI user defined code
|
||||
#############################
|
||||
set(NFAPI_USER_SRC
|
||||
${NFAPI_USER_DIR}/nfapi.c
|
||||
${NFAPI_USER_DIR}/nfapi_pnf.c
|
||||
${NFAPI_USER_DIR}/nfapi_vnf.c
|
||||
${NFAPI_USER_DIR}/gnb_ind_vars.c
|
||||
)
|
||||
add_library(NFAPI_USER_LIB ${NFAPI_USER_SRC})
|
||||
if(OAI_WLS)
|
||||
target_compile_definitions(NFAPI_USER_LIB PRIVATE ENABLE_WLS)
|
||||
elseif (OAI_AERIAL)
|
||||
target_compile_definitions(NFAPI_USER_LIB PRIVATE ENABLE_AERIAL)
|
||||
else()
|
||||
target_compile_definitions(NFAPI_USER_LIB PRIVATE ENABLE_SOCKET)
|
||||
endif()
|
||||
target_link_libraries(NFAPI_USER_LIB PRIVATE asn1_lte_rrc_hdrs asn1_nr_rrc_hdrs UTIL)
|
||||
target_link_libraries(NFAPI_USER_LIB PRIVATE nr_fapi_p7)
|
||||
include_directories(${NFAPI_USER_DIR})
|
||||
|
||||
# Layer 1
|
||||
#############################
|
||||
set(PHY_TURBOIF
|
||||
@@ -861,6 +940,7 @@ set(NR_PHY_SRC_RU
|
||||
${OPENAIR1_DIR}/PHY/MODULATION/nr_beamforming.c
|
||||
${OPENAIR1_DIR}/PHY/MODULATION/slot_fep_nr.c
|
||||
${OPENAIR1_DIR}/PHY/INIT/nr_init_ru.c
|
||||
${OPENAIR1_DIR}/PHY/if4_tools.c
|
||||
)
|
||||
|
||||
set(PHY_SRC_UE
|
||||
@@ -929,6 +1009,7 @@ set(PHY_SRC_UE
|
||||
${OPENAIR1_DIR}/PHY/NR_TRANSPORT/nr_ulsch.c
|
||||
${OPENAIR1_DIR}/PHY/NR_TRANSPORT/nr_sch_dmrs.c
|
||||
${OPENAIR1_DIR}/PHY/NR_TRANSPORT/nr_prach.c
|
||||
${OPENAIR1_DIR}/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c
|
||||
${OPENAIR1_DIR}/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c
|
||||
${OPENAIR1_DIR}/PHY/NR_REFSIG/ul_ref_seq_nr.c
|
||||
${OPENAIR1_DIR}/PHY/NR_REFSIG/nr_dmrs_rx.c
|
||||
@@ -1018,15 +1099,30 @@ target_link_libraries(PHY_UE PRIVATE asn1_lte_rrc_hdrs asn1_nr_rrc_hdrs UTIL)
|
||||
add_library(PHY_NR_COMMON ${PHY_NR_SRC_COMMON})
|
||||
target_link_libraries(PHY_NR_COMMON PUBLIC UTIL)
|
||||
|
||||
add_library(PHY_NR ${PHY_NR_SRC})
|
||||
if (ENABLE_LDPC_CUDA)
|
||||
find_package(CUDA REQUIRED)
|
||||
if (NOT CUDA_FOUND)
|
||||
message(FATAL_ERROR "no CUDA found")
|
||||
endif()
|
||||
#SET(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS};-arch=sm_80 -g -ggdb") # A100
|
||||
#SET(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS};-arch=sm_90") # GH200
|
||||
#SET(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS};-arch=sm_87") # Jetson
|
||||
#SET(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS};-arch=sm_89") # L40S
|
||||
SET(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS};-arch=sm_121") # GB10
|
||||
set(CUDA_VERBOS_BUILD_ON)
|
||||
cuda_add_library(PHY_NR ${PHY_NR_SRC} ${PHY_NR_SRC_CU})
|
||||
cuda_add_library(PHY_NR_UE ${PHY_NR_UE_SRC} ${PHY_NR_UE_SRC_CU})
|
||||
else()
|
||||
add_library(PHY_NR ${PHY_NR_SRC})
|
||||
add_library(PHY_NR_UE ${PHY_NR_UE_SRC})
|
||||
endif()
|
||||
target_link_libraries(PHY_NR nr_phy_common nr_common nr_fapi_p5 polar smallblock ds)
|
||||
|
||||
add_library(PHY_NR_NO_AVX_256 ${PHY_NR_SRC})
|
||||
target_link_libraries(PHY_NR_NO_AVX_256 nr_phy_common nr_common)
|
||||
target_compile_definitions(PHY_NR_NO_AVX_256 PUBLIC USE_128BIT)
|
||||
|
||||
add_library(PHY_NR_UE ${PHY_NR_UE_SRC})
|
||||
target_link_libraries(PHY_NR_UE PRIVATE asn1_nr_rrc_hdrs nr_phy_common nr_common UTIL polar smallblock)
|
||||
target_link_libraries(PHY_NR_UE asn1_nr_rrc_hdrs nr_phy_common nr_common UTIL polar smallblock)
|
||||
|
||||
add_library(PHY_RU ${PHY_SRC_RU})
|
||||
target_link_libraries(PHY_RU PRIVATE asn1_lte_rrc_hdrs UTIL)
|
||||
@@ -1211,7 +1307,6 @@ set (MAC_NR_SRC
|
||||
${NR_GNB_MAC_DIR}/gNB_scheduler_uci.c
|
||||
${NR_GNB_MAC_DIR}/gNB_scheduler_srs.c
|
||||
${NR_GNB_MAC_DIR}/gNB_scheduler_RA.c
|
||||
${NR_GNB_MAC_DIR}/gNB_scheduler_pcch.c
|
||||
${NR_GNB_MAC_DIR}/mac_rrc_dl_handler.c
|
||||
${NR_GNB_MAC_DIR}/mac_rrc_ul_direct.c
|
||||
${NR_GNB_MAC_DIR}/mac_rrc_ul_f1ap.c
|
||||
@@ -1269,7 +1364,6 @@ set (MISC_NFAPI_LTE
|
||||
)
|
||||
|
||||
add_library(MISC_NFAPI_LTE_LIB ${MISC_NFAPI_LTE})
|
||||
target_link_libraries(MISC_NFAPI_LTE_LIB PRIVATE nfapi_vnf_lib nfapi_pnf_lib)
|
||||
|
||||
add_library(L2
|
||||
${L2_SRC}
|
||||
@@ -1279,7 +1373,6 @@ add_library(L2
|
||||
)
|
||||
target_link_libraries(L2 PRIVATE x2ap s1ap lte_rrc m2ap)
|
||||
target_link_libraries(L2 PRIVATE asn1_lte_rrc_hdrs asn1_nr_rrc_hdrs)
|
||||
target_link_libraries(L2 PRIVATE nfapi_vnf_lib nfapi_pnf_lib)
|
||||
if(E2_AGENT)
|
||||
target_compile_definitions(L2 PRIVATE ${E2AP_VERSION} ${KPM_VERSION} E2_AGENT)
|
||||
endif()
|
||||
@@ -1297,7 +1390,6 @@ add_library(L2_NR
|
||||
)
|
||||
target_link_libraries(L2_NR PRIVATE ds alg)
|
||||
target_link_libraries(L2_NR PRIVATE f1ap_lib)
|
||||
target_link_libraries(L2_NR PRIVATE nfapi_vnf_lib)
|
||||
target_include_directories(L2_NR PRIVATE ${F1AP_DIR}/lib)
|
||||
if(E2_AGENT)
|
||||
target_compile_definitions(L2_NR PRIVATE ${E2AP_VERSION} ${KPM_VERSION} E2_AGENT)
|
||||
@@ -1322,7 +1414,6 @@ add_library(L2_LTE_NR
|
||||
)
|
||||
|
||||
target_link_libraries(L2_LTE_NR PRIVATE f1ap s1ap nr_rrc)
|
||||
target_link_libraries(L2_LTE_NR PRIVATE nfapi_vnf_lib)
|
||||
|
||||
add_library(L2_UE
|
||||
${L2_SRC_UE}
|
||||
@@ -1330,7 +1421,6 @@ add_library(L2_UE
|
||||
)
|
||||
target_link_libraries(L2_UE PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs)
|
||||
target_link_libraries(L2_UE PRIVATE GTPV1U)
|
||||
target_link_libraries(L2_UE PRIVATE nfapi_pnf_lib)
|
||||
|
||||
target_link_libraries(L2_UE PRIVATE asn1_lte_rrc_hdrs)
|
||||
|
||||
@@ -1364,7 +1454,6 @@ set (MME_APP_SRC
|
||||
add_library(MME_APP ${MME_APP_SRC})
|
||||
target_link_libraries(MME_APP PRIVATE m2ap m3ap)
|
||||
target_link_libraries(MME_APP PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs)
|
||||
target_link_libraries(MME_APP PRIVATE nfapi_vnf_lib nfapi_user_lib)
|
||||
|
||||
find_package(sctp REQUIRED)
|
||||
set(SCTP_SRC
|
||||
@@ -1668,6 +1757,7 @@ endif()
|
||||
|
||||
include_directories("${NFAPI_DIR}/nfapi/public_inc")
|
||||
include_directories("${NFAPI_DIR}/common/public_inc")
|
||||
include_directories("${NFAPI_DIR}/pnf/public_inc")
|
||||
include_directories("${NFAPI_DIR}/nfapi/inc")
|
||||
include_directories("${NFAPI_DIR}/sim_common/inc")
|
||||
include_directories("${NFAPI_DIR}/pnf_sim/inc")
|
||||
@@ -1709,7 +1799,7 @@ add_dependencies(lte-softmodem oai_iqplayer)
|
||||
target_link_libraries(lte-softmodem PRIVATE
|
||||
-Wl,--start-group
|
||||
lte_rrc nr_rrc s1ap m2ap x2ap m3ap GTPV1U SECURITY UTIL SCTP_CLIENT MME_APP SCHED_LIB SCHED_RU_LIB
|
||||
PHY_COMMON PHY PHY_RU L2 L2_LTE nfapi_vnf_lib nfapi_pnf_lib nfapi_user_lib MISC_NFAPI_LTE_LIB
|
||||
PHY_COMMON PHY PHY_RU L2 L2_LTE NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB MISC_NFAPI_LTE_LIB
|
||||
${NAS_UE_LIB} ITTI SIMU radio_common softmodem_common
|
||||
-Wl,--end-group dl)
|
||||
|
||||
@@ -1763,7 +1853,7 @@ target_link_libraries(lte-uesoftmodem PRIVATE
|
||||
-Wl,--start-group
|
||||
lte_rrc nr_rrc s1ap x2ap m2ap m3ap
|
||||
SECURITY UTIL SCTP_CLIENT MME_APP SCHED_RU_LIB SCHED_UE_LIB PHY_COMMON
|
||||
PHY_UE PHY_RU L2_UE L2_LTE SIMU nfapi_pnf_lib nfapi_user_lib MISC_NFAPI_LTE_LIB
|
||||
PHY_UE PHY_RU L2_UE L2_LTE SIMU NFAPI_LIB NFAPI_PNF_LIB NFAPI_USER_LIB MISC_NFAPI_LTE_LIB
|
||||
${NAS_UE_LIB} ITTI radio_common softmodem_common
|
||||
-Wl,--end-group dl)
|
||||
|
||||
@@ -1775,24 +1865,23 @@ target_link_libraries(lte-uesoftmodem PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs
|
||||
target_link_libraries(lte-uesoftmodem PRIVATE
|
||||
asn1_lte_rrc asn1_s1ap asn1_m2ap asn1_m3ap asn1_x2ap)
|
||||
|
||||
if (OAI_RU_FRONTHAUL)
|
||||
add_executable(nr-oru
|
||||
${OPENAIR_DIR}/executables/nr-ru.c
|
||||
${OPENAIR_DIR}/openair1/PHY/INIT/nr_parms.c
|
||||
${OPENAIR_DIR}/openair1/SCHED_NR/phy_frame_config_nr.c
|
||||
${OPENAIR_DIR}/openair1/SCHED_NR/nr_prach_procedures.c
|
||||
${OPENAIR_DIR}/openair1/SCHED_NR/nr_ru_procedures.c
|
||||
${OPENAIR_DIR}/openair1/SCHED/phy_procedures_lte_common.c
|
||||
${OPENAIR_DIR}/executables/main_nr_ru.c
|
||||
${OPENAIR_DIR}/executables/nr-oru.c
|
||||
)
|
||||
target_link_libraries(nr-oru PRIVATE
|
||||
UTIL NR_PHY_RU PHY_NR shlib_loader dl oru_fh MAC_NR_COMMON
|
||||
radio_common softmodem_common nfapi_pnf_lib)
|
||||
target_link_libraries(nr-oru PRIVATE pthread m CONFIG_LIB rt ${T_LIB} utils
|
||||
barrier actor nfapi_user_lib)
|
||||
target_link_libraries(nr-oru PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs nr_phy_common time_management)
|
||||
endif()
|
||||
# nr RRU
|
||||
add_executable(nr-oru
|
||||
${OPENAIR_DIR}/executables/nr-ru.c
|
||||
${OPENAIR_DIR}/openair1/PHY/INIT/nr_parms.c
|
||||
${OPENAIR_DIR}/openair1/SCHED_NR/phy_frame_config_nr.c
|
||||
${OPENAIR_DIR}/openair1/SCHED_NR/nr_prach_procedures.c
|
||||
${OPENAIR_DIR}/openair1/SCHED_NR/nr_ru_procedures.c
|
||||
${OPENAIR_DIR}/openair1/SCHED/phy_procedures_lte_common.c
|
||||
${OPENAIR_DIR}/executables/main_nr_ru.c
|
||||
)
|
||||
target_link_libraries(nr-oru PRIVATE
|
||||
UTIL NR_PHY_RU PHY_NR shlib_loader dl
|
||||
radio_common softmodem_common)
|
||||
target_link_libraries(nr-oru PRIVATE pthread m CONFIG_LIB rt ${T_LIB} utils
|
||||
barrier actor)
|
||||
target_link_libraries(nr-oru PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs nr_phy_common time_management)
|
||||
|
||||
# nr-softmodem
|
||||
###################################################
|
||||
|
||||
@@ -1813,7 +1902,7 @@ target_link_libraries(nr-softmodem PRIVATE
|
||||
-Wl,--start-group
|
||||
UTIL SCTP_CLIENT SCHED_LIB SCHED_NR_LIB PHY_NR PHY PHY_NR_COMMON NR_PHY_RU GTPV1U SECURITY
|
||||
ITTI ${NAS_UE_LIB} nr_rrc
|
||||
ngap s1ap L2_LTE_NR L2_NR MAC_NR_COMMON nfapi_vnf_lib nfapi_pnf_lib nfapi_user_lib SIMU
|
||||
ngap s1ap L2_LTE_NR L2_NR MAC_NR_COMMON NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB SIMU
|
||||
x2ap f1ap m2ap m3ap e1ap radio_common
|
||||
time_management softmodem_common
|
||||
-Wl,--end-group dl)
|
||||
@@ -1823,25 +1912,21 @@ target_link_libraries(nr-softmodem PRIVATE ${T_LIB})
|
||||
target_link_libraries(nr-softmodem PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs)
|
||||
target_link_libraries(nr-softmodem PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs)
|
||||
add_boolean_option(OAI_WLS OFF "Activate OAI's WLS driver" OFF)
|
||||
add_boolean_option(OAI_AERIAL OFF "Activate OAI's AERIAL driver" OFF)
|
||||
if (OAI_WLS)
|
||||
target_link_libraries(nr-softmodem PUBLIC wls_integration_lib)
|
||||
elseif (OAI_AERIAL)
|
||||
target_compile_definitions(nr-softmodem PUBLIC ENABLE_AERIAL)
|
||||
target_link_libraries(nr-softmodem PUBLIC aerial_lib)
|
||||
else()
|
||||
target_link_libraries(nr-softmodem PUBLIC nfapi_socket_lib)
|
||||
endif()
|
||||
add_boolean_option(OAI_AERIAL OFF "Activate OAI's AERIAL driver" OFF)
|
||||
if (OAI_AERIAL)
|
||||
target_compile_definitions(nr-softmodem PUBLIC ENABLE_AERIAL)
|
||||
target_link_libraries(nr-softmodem PUBLIC aerial_lib)
|
||||
endif()
|
||||
if(E2_AGENT)
|
||||
target_link_libraries(nr-softmodem PUBLIC e2_agent e2_agent_arg e2_ran_func_du_cucp_cuup)
|
||||
target_compile_definitions(nr-softmodem PRIVATE ${E2AP_VERSION} ${KPM_VERSION} E2_AGENT)
|
||||
endif()
|
||||
|
||||
if (E3_AGENT)
|
||||
target_link_libraries(nr-softmodem PRIVATE e3ap)
|
||||
target_compile_definitions(nr-softmodem PRIVATE E3_AGENT)
|
||||
endif()
|
||||
|
||||
|
||||
# force the generation of ASN.1 so that we don't need to wait during the build
|
||||
target_link_libraries(nr-softmodem PRIVATE
|
||||
@@ -1886,7 +1971,7 @@ add_executable(nr-uesoftmodem
|
||||
target_link_libraries(nr-uesoftmodem PRIVATE
|
||||
-Wl,--start-group
|
||||
nr_rrc SECURITY UTIL SCHED_NR_UE_LIB
|
||||
PHY_NR_COMMON PHY_NR_UE NR_L2_UE MAC_NR_COMMON nfapi_nr_lib
|
||||
PHY_NR_COMMON PHY_NR_UE NR_L2_UE MAC_NR_COMMON NFAPI_LIB
|
||||
ITTI SIMU radio_common
|
||||
time_management softmodem_common
|
||||
-Wl,--end-group dl)
|
||||
@@ -1951,12 +2036,19 @@ add_executable(ldpctest
|
||||
)
|
||||
target_link_libraries(ldpctest PRIVATE
|
||||
-Wl,--start-group UTIL SIMU PHY_COMMON PHY_NR_COMMON -Wl,--end-group
|
||||
m pthread dl ${T_LIB}
|
||||
m pthread dl ${T_LIB} ${CUDA_LIBRARIES}
|
||||
# link 'check_crc' to make it resolved in the LDPC coding libraries
|
||||
# 'check_crc' is not used in ldpctest so it is not linked in the executable by default
|
||||
# --whole-archive links 'check_crc' in the executable even though it is note used, see 'man ld'
|
||||
-Wl,--whole-archive crc_byte -Wl,--no-whole-archive
|
||||
)
|
||||
if (ENABLE_LDPC_CUDA)
|
||||
# ldpctest.c uses cudaHostAlloc(), so include dir/link libr to make available
|
||||
# TODO don't write it directly into ldpctest, but separate compilation unit?
|
||||
find_package(CUDA REQUIRED)
|
||||
target_link_libraries(ldpctest PRIVATE ${CUDA_LIBRARIES})
|
||||
target_include_directories(ldpctest PRIVATE ${CUDA_INCLUDE_DIRS})
|
||||
endif()
|
||||
|
||||
add_library(physim_common OBJECT ${OPENAIR1_DIR}/SIMULATION/NR_PHY/nr_unitary_common.c)
|
||||
target_link_libraries(physim_common PRIVATE UTIL)
|
||||
@@ -2106,7 +2198,7 @@ if (${T_TRACER})
|
||||
params_libconfig
|
||||
oai_eth_transpro UTIL
|
||||
SECURITY SCHED_LIB SCHED_NR_LIB SCHED_RU_LIB SCHED_UE_LIB SCHED_NR_UE_LIB
|
||||
nfapi_lte_lib nfapi_nr_lib nfapi_pnf_lib nfapi_vnf_lib nfapi_user_lib
|
||||
NFAPI_LIB NFAPI_PNF_LIB NFAPI_VNF_LIB NFAPI_USER_LIB
|
||||
MISC_NFAPI_LTE_LIB
|
||||
PHY_COMMON PHY PHY_UE PHY_NR PHY_NR_COMMON PHY_NR_UE PHY_RU NR_PHY_RU
|
||||
L2 L2_LTE L2_NR L2_LTE_NR L2_UE NR_L2_UE MAC_NR_COMMON MAC_UE_NR ngap
|
||||
@@ -2151,7 +2243,7 @@ if(ENABLE_TESTS)
|
||||
NAME benchmark
|
||||
GITHUB_REPOSITORY google/benchmark
|
||||
VERSION 1.9.0
|
||||
OPTIONS "BENCHMARK_ENABLE_TESTING OFF" "BENCHMARK_ENABLE_WERROR OFF"
|
||||
OPTIONS "BENCHMARK_ENABLE_TESTING OFF"
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
@@ -2166,11 +2258,6 @@ add_subdirectory(openair3)
|
||||
add_subdirectory(radio)
|
||||
add_subdirectory(tests)
|
||||
|
||||
add_boolean_option(OAI_RU_FRONTHAUL OFF "Whether to configure OAI fronthaul library" OFF)
|
||||
if(OAI_RU_FRONTHAUL)
|
||||
add_subdirectory(fronthaul)
|
||||
endif()
|
||||
|
||||
if(TARGET oai_cuda_lib)
|
||||
message(STATUS "CUDA library 'oai_cuda_lib' found, linking to targets...")
|
||||
target_link_libraries(nr_dlsim PRIVATE oai_cuda_lib)
|
||||
|
||||
@@ -1,47 +1,68 @@
|
||||
<!-- SPDX-License-Identifier: CC-BY-4.0 -->
|
||||
|
||||
# Contributing to Duranta
|
||||
# Contributing to OpenAirInterface
|
||||
|
||||
We want to make contributing to this project as easy and transparent as possible.
|
||||
|
||||
1. Create an account on [GitHub](https://github.com/). Only contributions
|
||||
against [`duranta-project/openairinterface5g/`](https://github.com/duranta-project/openairinterface5g/)
|
||||
are accepted.
|
||||
2. Fork the repository, and open pull requests for your contributions from your
|
||||
fork.
|
||||
3. The contributing policies are described in the [corresponding documentation
|
||||
Please refer to the steps described on our website: [How to contribute to OAI](https://www.openairinterface.org/?page_id=112).
|
||||
|
||||
1. Sign and return a Contributor License Agreement to OAI team.
|
||||
2. Register on [Eurecom GitLab Server](https://gitlab.eurecom.fr/users/sign_up)
|
||||
if you do not have any.
|
||||
- We recommend that you register with a professional or student email address.
|
||||
- If your email domain (`@domain.com`) is not whitelisted, please contact us
|
||||
(mailto:oaicicdteam@openairinterface.org).
|
||||
- Eurecom GitLab does NOT accept public email domains.
|
||||
3. Provide the OAI team with the **username** of this account to
|
||||
(mailto:oaicicdteam@openairinterface.org) ; we will give you the developer
|
||||
rights on this repository.
|
||||
4. The contributing policies are described in the [corresponding documentation
|
||||
page](doc/code-style-contrib.md).
|
||||
4. [Sign the CLA](https://github.com/duranta-project/governance/blob/main/docs/easy_cla_process.md)
|
||||
either before doing making your first pull request or after submitting the
|
||||
pull request.
|
||||
- PLEASE DO NOT FORK the OAI repository on your own Eurecom GitLab account.
|
||||
It just eats up space on our servers.
|
||||
- You can fork onto another hosting system. But we will NOT accept a merge
|
||||
request from a forked repository.
|
||||
* This decision was made for the license reasons.
|
||||
* The Continuous Integration will reject your merge request.
|
||||
5. Mandatory signing of all the commits using the email address used for CLA.
|
||||
|
||||
## Commit Guidelines
|
||||
|
||||
Every pull request must pass two CI checks before it can be merged:
|
||||
|
||||
1. **[Developer Certificate of Origin (DCO)](https://en.wikipedia.org/wiki/Developer_Certificate_of_Origin)**:
|
||||
Each commit must include a `Signed-off-by:` trailer in the commit message.
|
||||
Use `git commit -s` (or `--signoff`).
|
||||
|
||||
2. **[Verified commits](https://docs.github.com/en/authentication/managing-commit-signature-verification/about-commit-signature-verification)**:
|
||||
Each commit must be cryptographically signed using SSH or GPG keys to confirm
|
||||
its origin.
|
||||
|
||||
### Signing Commits
|
||||
|
||||
GitHub supports commit signing using either SSH keys or GPG keys. For the
|
||||
step-by-step setup (key generation, Git configuration, registering the key on
|
||||
GitHub, and verifying signatures locally), see the
|
||||
[commit signing section of the Git guide](doc/git-guide.md#setting-up-commit-signing).
|
||||
To sign commits:
|
||||
|
||||
You can also get the verified label
|
||||
on your commits via using [SSH KEYS or GPG KEYS](https://docs.gitlab.com/user/project/repository/signed_commits/)
|
||||
|
||||
```
|
||||
# Edit .git/config in the git repository you are working on
|
||||
# Add the user section
|
||||
[user]
|
||||
name = YOUR NAME
|
||||
email = YOUR EMAIL ADDRESS
|
||||
|
||||
# If you use a signing key, use the below configuration instead
|
||||
[user]
|
||||
name = YOUR NAME
|
||||
email = YOUR EMAIL ADDRESS
|
||||
signingkey = LOCATION OF SSH KEYS or GPG KEY
|
||||
|
||||
[gpg]
|
||||
format = ssh
|
||||
|
||||
[commit]
|
||||
gpgsign = true
|
||||
```
|
||||
|
||||
> **NOTE:** If your commits are not signed the CI framework will not accept the MR.
|
||||
|
||||
> **NOTE:** If your commits are not signed, the CI framework will not accept the PR.
|
||||
For more information regarding contribution guidelines
|
||||
please check [this document](doc/code-style-contrib.md)
|
||||
|
||||
## License
|
||||
|
||||
By contributing to Duranta, you agree that your contributions will be
|
||||
By contributing to OpenAirInterface, you agree that your contributions will be
|
||||
licensed under
|
||||
|
||||
1. [CSSL v1.0 license](LICENSES/preferred/CSSL-v1.0.txt): for RAN and UE
|
||||
|
||||
37
README.md
37
README.md
@@ -1,21 +1,25 @@
|
||||
<!-- SPDX-License-Identifier: CC-BY-4.0 -->
|
||||
|
||||
<h1 align="center">
|
||||
<a href="https://lfnetworking.org/projects/duranta/"><img src="https://raw.githubusercontent.com/duranta-project/governance/main/logos/Duranta-Logo-Color.png" alt="Duranta OAI" width="550"></a>
|
||||
<a href="https://openairinterface.org/"><img src="https://openairinterface.org/wp-content/uploads/2015/06/cropped-oai_final_logo.png" alt="OAI" width="550"></a>
|
||||
</h1>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://github.com/duranta-project/openairinterface5g/blob/develop/LICENSE"><img src="https://img.shields.io/badge/license-CSSL--v1.0-blue" alt="License"></a>
|
||||
<a href="https://gitlab.eurecom.fr/oai/openairinterface5g/-/blob/master/LICENSE"><img src="https://img.shields.io/badge/license-CSSL--v1.0-blue" alt="License"></a>
|
||||
<a href="https://releases.ubuntu.com/22.04/"><img src="https://img.shields.io/badge/OS-Ubuntu22-Green" alt="Supported OS Ubuntu 22"></a>
|
||||
<a href="https://releases.ubuntu.com/24.04/"><img src="https://img.shields.io/badge/OS-Ubuntu24-Green" alt="Supported OS Ubuntu 24"></a>
|
||||
<a href="https://releases.ubuntu.com/26.04/"><img src="https://img.shields.io/badge/OS-Ubuntu26-Green" alt="Supported OS Ubuntu 26"></a>
|
||||
<a href="https://www.redhat.com/en/technologies/linux-platforms/enterprise-linux"><img src="https://img.shields.io/badge/OS-RHEL9-Green" alt="Supported OS RHEL9"></a>
|
||||
<a href="https://getfedora.org/en/workstation/"><img src="https://img.shields.io/badge/OS-Fedora44-Green" alt="Supported OS Fedora 44"></a>
|
||||
<a href="https://getfedora.org/en/workstation/"><img src="https://img.shields.io/badge/OS-Fedore44-Green" alt="Supported OS Fedora 44"></a>
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://jenkins-oai.eurecom.fr/job/RAN-Ubuntu-Image-Builder/"><img src="https://img.shields.io/jenkins/build?jobUrl=https%3A%2F%2Fjenkins-oai.eurecom.fr%2Fjob%2FRAN-Ubuntu-Image-Builder%2F&label=build-Ubuntu-x86%20Images"></a>
|
||||
<a href="https://jenkins-oai.eurecom.fr/job/RAN-RHEL-Cluster-Image-Builder/"><img src="https://img.shields.io/jenkins/build?jobUrl=https%3A%2F%2Fjenkins-oai.eurecom.fr%2Fjob%2FRAN-RHEL-Cluster-Image-Builder%2F&label=build-RHEL-Cluster%20Images"></a>
|
||||
<a href="https://gitlab.eurecom.fr/oai/openairinterface5g/-/releases"><img alt="GitLab Release (custom instance)" src="https://img.shields.io/gitlab/v/release/oai/openairinterface5g?gitlab_url=https%3A%2F%2Fgitlab.eurecom.fr&include_prereleases&sort=semver"></a>
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://jenkins-oai.eurecom.fr/job/RAN-Ubuntu18-Image-Builder/"><img src="https://img.shields.io/jenkins/build?jobUrl=https%3A%2F%2Fjenkins-oai.eurecom.fr%2Fjob%2FRAN-Ubuntu18-Image-Builder%2F&label=build-Ubuntu-x86%20Images"></a>
|
||||
<a href="https://jenkins-oai.eurecom.fr/job/RAN-RHEL8-Cluster-Image-Builder/"><img src="https://img.shields.io/jenkins/build?jobUrl=https%3A%2F%2Fjenkins-oai.eurecom.fr%2Fjob%2FRAN-RHEL8-Cluster-Image-Builder%2F&label=build-UBI-x86%20Images"></a>
|
||||
<a href="https://jenkins-oai.eurecom.fr/job/RAN-Ubuntu-ARM-Image-Builder/"><img src="https://img.shields.io/jenkins/build?jobUrl=https%3A%2F%2Fjenkins-oai.eurecom.fr%2Fjob%2FRAN-Ubuntu-ARM-Image-Builder%2F&label=build-Ubuntu-ARM%20Images"></a>
|
||||
</p>
|
||||
|
||||
@@ -27,23 +31,14 @@
|
||||
<a href="https://hub.docker.com/r/oaisoftwarealliance/oai-nr-cuup"><img alt="Docker Pulls" src="https://img.shields.io/docker/pulls/oaisoftwarealliance/oai-nr-cuup?label=NR-CUUP%20docker%20pulls"></a>
|
||||
</p>
|
||||
|
||||
# Duranta - OpenAirInterface
|
||||
|
||||
Duranta OpenAirInterface RAN delivers and maintains an open-source cellular
|
||||
wireless software stack for 4G, 5G and future networking technologies. It
|
||||
supports simulation, prototyping, and end-to-end deployments on
|
||||
Commercial-Off-The-Shelf (COTS) hardware. Built for research and
|
||||
experimentation, it provides standard-compliant interfaces and is released
|
||||
under the Collaborative Standards Software License (CSSL).
|
||||
|
||||
## License
|
||||
# OpenAirInterface License #
|
||||
|
||||
* [OAI License Model](http://www.openairinterface.org/?page_id=101)
|
||||
* [CSSL v1.0](http://www.openairinterface.org/?page_id=698)
|
||||
|
||||
The source code is distributed under [**CSSL v1.0**](LICENSE).
|
||||
Some files, such as for orchestration, are distributed under
|
||||
[MIT license](./LICENSES/preferred/MIT.txt). Documentation is distributed under
|
||||
[MIT license](preferred)(MIT.txt). Documentation is distributed under
|
||||
[Creative Commons Attribution 4.0 International license](LICENSES/preferred/CC-BY-4.0.txt).
|
||||
|
||||
All the files without an explicit copyright header have an implicit "Copyright
|
||||
@@ -59,7 +54,7 @@ history:
|
||||
3. OAI Public License v1.0: starting tag v.04 till v1.0
|
||||
4. GPL 3: starting tag v.0 till v.04 (only initial implementation of 4G)
|
||||
|
||||
## Where to Start
|
||||
# Where to Start #
|
||||
|
||||
* [General overview of documentation](./doc/README.md)
|
||||
* [The implemented features](./doc/FEATURE_SET.md)
|
||||
@@ -75,7 +70,7 @@ To find all READMEs, this command might be handy:
|
||||
find . -iname "readme*"
|
||||
```
|
||||
|
||||
## RAN repository structure
|
||||
# RAN repository structure #
|
||||
|
||||
The OpenAirInterface (OAI) software is composed of the following parts:
|
||||
|
||||
@@ -100,9 +95,9 @@ openairinterface5g
|
||||
└── tools : Tools for use by the developers/ci machines: code analysis and formatting
|
||||
```
|
||||
|
||||
## How to get support from the Community
|
||||
# How to get support from the OAI Community #
|
||||
|
||||
You can ask your question on the [mailing lists](https://github.com/duranta-project/openairinterface5g/wiki/MailingList).
|
||||
You can ask your question on the [mailing lists](https://gitlab.eurecom.fr/oai/openairinterface5g/-/wikis/MailingList).
|
||||
|
||||
Your email should contain below information:
|
||||
|
||||
@@ -113,6 +108,6 @@ Your email should contain below information:
|
||||
- OAI gNB/DU/CU/CU-CP/CU-UP configuration file in `.conf` format only.
|
||||
- Logs of OAI gNB/DU/CU/CU-CP/CU-UP in `.log` or `.txt` format only.
|
||||
- In case your question is related to performance, include a small description of the machine (Operating System, Kernel version, CPU, RAM and networking card) and diagram of your testing environment.
|
||||
- Known/open issues are present on [Github](https://github.com/duranta-project/openairinterface5g/issues), so keep checking.
|
||||
- Known/open issues are present on [GitLab](https://gitlab.eurecom.fr/oai/openairinterface5g/-/issues), so keep checking.
|
||||
|
||||
Always remember a structured email will help us understand your issues quickly.
|
||||
|
||||
61
ROADMAP.md
61
ROADMAP.md
@@ -1,61 +0,0 @@
|
||||
# Duranta-OpenAirInterface Roadmap
|
||||
|
||||
## RAN Roadmap
|
||||
|
||||
### Q2 2026
|
||||
|
||||
- GPU LDPC Accelerator
|
||||
- NR-DC Support
|
||||
- CN Paging procedures
|
||||
- Support for 64 UEs with E2E throughput validation
|
||||
- Basic Cat-A OAI O-RU (simulated radio)
|
||||
|
||||
### Q3 2026
|
||||
|
||||
- QoS-enforcing scheduler
|
||||
- Xn Handover Support
|
||||
- UL MU-MIMO
|
||||
- Aperiodic UL channels (SRS/CSI reporting)
|
||||
- NR user plane protocol
|
||||
- Multi-cell support in L2
|
||||
- Support for 128 UEs with E2E throughput validation
|
||||
|
||||
### Q4 2026
|
||||
|
||||
- Cat-B Support for FHI 7.2 at RU/DU
|
||||
- RAN Paging
|
||||
- Support of 5G RAN Slicing
|
||||
- Multi-cell performance evaluation (with at-least 3 cells)
|
||||
|
||||
### Q1 2027
|
||||
|
||||
- Digital Beamforming Support
|
||||
- DL MU-MIMO at L1
|
||||
|
||||
---
|
||||
|
||||
## UE Roadmap
|
||||
|
||||
### Q2 2026
|
||||
|
||||
- Support for Handover Procedures
|
||||
- Basic Sidelink Procedures (PSSCH, PSCCH)
|
||||
- PUCCH formats 1&3
|
||||
|
||||
### Q3 2026
|
||||
|
||||
- Support for 2 UL layers
|
||||
- Support for 2 DL layers
|
||||
- RU sharing
|
||||
|
||||
### Q4 2026
|
||||
|
||||
- Reduce feedback time
|
||||
- AT command interface
|
||||
- DL KPI Improvements
|
||||
- UL KPI Improvements
|
||||
|
||||
### Q1 2027
|
||||
|
||||
- Scan carrier
|
||||
- Power control procedures for outdoor operation
|
||||
@@ -14,7 +14,7 @@ description: A Helm chart for physical simulators network function
|
||||
# pipeline. Library charts do not define any templates and therefore cannot be deployed.
|
||||
type: application
|
||||
|
||||
icon: https://raw.githubusercontent.com/duranta-project/governance/main/logos/Duranta-Logo-Color.png
|
||||
icon: http://www.openairinterface.org/wp-content/uploads/2015/06/cropped-oai_final_logo.png
|
||||
|
||||
# This is the chart version. This version number should be incremented each time you make changes
|
||||
# to the chart and its templates, including the app version.
|
||||
@@ -31,8 +31,8 @@ keywords:
|
||||
- 5G
|
||||
|
||||
sources:
|
||||
- https://github.com/duranta-project/openairinterface5g
|
||||
- https://gitlab.eurecom.fr/oai/openairinterface5g
|
||||
|
||||
maintainers:
|
||||
- name: OPENAIRINTERFACE
|
||||
email: oaicicdteam@openairinterface.org
|
||||
email: contact@openairinterface.org
|
||||
|
||||
@@ -14,7 +14,7 @@ description: A Helm subchart for 4G physims network function
|
||||
# pipeline. Library charts do not define any templates and therefore cannot be deployed.
|
||||
type: application
|
||||
|
||||
icon: https://raw.githubusercontent.com/duranta-project/governance/main/logos/Duranta-Logo-Color.png
|
||||
icon: http://www.openairinterface.org/wp-content/uploads/2015/06/cropped-oai_final_logo.png
|
||||
|
||||
# This is the chart version. This version number should be incremented each time you make changes
|
||||
# to the chart and its templates, including the app version.
|
||||
@@ -30,8 +30,8 @@ keywords:
|
||||
- 4G
|
||||
|
||||
sources:
|
||||
- https://github.com/duranta-project/openairinterface5g
|
||||
- https://gitlab.eurecom.fr/oai/openairinterface5g
|
||||
|
||||
maintainers:
|
||||
- name: OPENAIRINTERFACE
|
||||
email: oaicicdteam@openairinterface.org
|
||||
email: contact@openairinterface.org
|
||||
|
||||
@@ -14,7 +14,7 @@ description: A Helm chart for physical simulators network function
|
||||
# pipeline. Library charts do not define any templates and therefore cannot be deployed.
|
||||
type: application
|
||||
|
||||
icon: https://raw.githubusercontent.com/duranta-project/governance/main/logos/Duranta-Logo-Color.png
|
||||
icon: http://www.openairinterface.org/wp-content/uploads/2015/06/cropped-oai_final_logo.png
|
||||
|
||||
# This is the chart version. This version number should be incremented each time you make changes
|
||||
# to the chart and its templates, including the app version.
|
||||
@@ -31,8 +31,8 @@ keywords:
|
||||
- 5G
|
||||
|
||||
sources:
|
||||
- https://github.com/duranta-project/openairinterface5g
|
||||
- https://gitlab.eurecom.fr/oai/openairinterface5g
|
||||
|
||||
maintainers:
|
||||
- name: OPENAIRINTERFACE
|
||||
email: oaicicdteam@openairinterface.org
|
||||
email: contact@openairinterface.org
|
||||
|
||||
@@ -14,7 +14,7 @@ description: A Helm subchart for 5G physims network function
|
||||
# pipeline. Library charts do not define any templates and therefore cannot be deployed.
|
||||
type: application
|
||||
|
||||
icon: https://raw.githubusercontent.com/duranta-project/governance/main/logos/Duranta-Logo-Color.png
|
||||
icon: http://www.openairinterface.org/wp-content/uploads/2015/06/cropped-oai_final_logo.png
|
||||
|
||||
# This is the chart version. This version number should be incremented each time you make changes
|
||||
# to the chart and its templates, including the app version.
|
||||
@@ -30,8 +30,8 @@ keywords:
|
||||
- 5G
|
||||
|
||||
sources:
|
||||
- https://github.com/duranta-project/openairinterface5g
|
||||
- https://gitlab.eurecom.fr/oai/openairinterface5g
|
||||
|
||||
maintainers:
|
||||
- name: OPENAIRINTERFACE
|
||||
email: oaicicdteam@openairinterface.org
|
||||
email: contact@openairinterface.org
|
||||
|
||||
17
ci-scripts/Jenkinsfile
vendored
17
ci-scripts/Jenkinsfile
vendored
@@ -20,11 +20,13 @@ if (params.LockResources != null && params.LockResources.trim().length() > 0)
|
||||
// Global Parameters. Normally they should be populated when the master job
|
||||
// triggers the slave job with parameters
|
||||
|
||||
def INTERNAL_REPO = "asterix:/home/git/openairinterface5g.git"
|
||||
def sourceBranch = params.sourceBranch ?: env.GIT_BRANCH
|
||||
def targetBranch = params.targetBranch ?: 'develop'
|
||||
def testRepository = params.repository ?: 'git@asterix:/home/git/openairinterface5g.git'
|
||||
def testBranch = params.branch ?: 'develop'
|
||||
def commitID = params.sourceCommit ?: env.GIT_COMMIT
|
||||
def testRepository = params.customRepository ?: INTERNAL_REPO
|
||||
def testBranch = params.customBranch ?: "${sourceBranch}-${commitID}"
|
||||
def mergeWithTarget = params.mergeWithTarget ?: false
|
||||
def sourceBranch = params.sourceBranch ?: testBranch
|
||||
|
||||
def flexricOption = ""
|
||||
def runWithOC = false
|
||||
@@ -39,17 +41,11 @@ pipeline {
|
||||
timestamps()
|
||||
ansiColor('xterm')
|
||||
lock(extra: lockResources)
|
||||
skipDefaultCheckout()
|
||||
}
|
||||
|
||||
stages {
|
||||
stage("Build Init") {
|
||||
steps {
|
||||
checkout(
|
||||
scmGit(branches: [[name: "${branch}"]],
|
||||
userRemoteConfigs: [[url: "${repository}"]],
|
||||
extensions: [cleanBeforeCheckout()])
|
||||
)
|
||||
script {
|
||||
echo '\u2705 \u001B[94mBuild Init\u001B[0m'
|
||||
JOB_TIMESTAMP = sh(returnStdout: true, script: 'date --utc --rfc-3339=seconds | sed -e "s#+00:00##"').trim()
|
||||
@@ -117,7 +113,8 @@ pipeline {
|
||||
}
|
||||
sh """
|
||||
python3 main.py --mode=InitiateHtml --repository=${testRepository} \
|
||||
--branch=${testBranch} ${mainPythonAllXmlFiles}
|
||||
--branch=${testBranch} --commitID=${commitID} \
|
||||
${mainPythonAllXmlFiles}
|
||||
"""
|
||||
if (runWithOC) {
|
||||
withCredentials([usernamePassword(credentialsId: "${params.OC_Credentials}", usernameVariable: 'OC_Username', passwordVariable: 'OC_Password')]) {
|
||||
|
||||
@@ -3,12 +3,6 @@
|
||||
* SPDX-License-Identifier: LicenseRef-CSSL-1.0
|
||||
*/
|
||||
|
||||
import groovy.transform.Field
|
||||
|
||||
@Field def branch = ''
|
||||
@Field def gitLocalBranch = ''
|
||||
@Field def downstreamResults = [:]
|
||||
|
||||
// Location of the executor node
|
||||
def nodeExecutor = params.nodeExecutor
|
||||
|
||||
@@ -18,43 +12,13 @@ def do4Gtest = false
|
||||
def do5Gtest = false
|
||||
def do5GUeTest = false
|
||||
|
||||
//
|
||||
def gitCommitAuthorEmailAddr
|
||||
|
||||
// list of failing stages
|
||||
def failingStages = ""
|
||||
def mrValidationWarning = ""
|
||||
|
||||
// Globally scoped status result variables for downstream jobs.
|
||||
def ubuntuBuildStatus = ''
|
||||
def ubuntuArmBuildStatus = ''
|
||||
def ubuntuJetsonBuildStatus = ''
|
||||
def rhelBuildStatus = ''
|
||||
def armBuildStatus = ''
|
||||
|
||||
def physim5GStatus = ''
|
||||
def physimGH5GStatus = ''
|
||||
def channelSimStatus = ''
|
||||
def vrtSim5GStatus = ''
|
||||
def rfSim5GStatus = ''
|
||||
def flexricRAN5GStatus = ''
|
||||
|
||||
def physim4GStatus = ''
|
||||
def rfSim4GStatus = ''
|
||||
def l2Sim4GStatus = ''
|
||||
def lteTDDB200Status = ''
|
||||
def lteFDDB200OAIUEStatus = ''
|
||||
def lteFDDB200Status = ''
|
||||
def lteTDD2x2N3xxStatus = ''
|
||||
|
||||
def nsaTDDB200Status = ''
|
||||
def saTDDB200Status = ''
|
||||
def phytestLDPCoffloadStatus = ''
|
||||
def saAW2SStatus = ''
|
||||
def saAERIALStatus = ''
|
||||
def saMultiAntennaStatus = ''
|
||||
def saFHI72Status = ''
|
||||
def saFHI72MplaneStatus = ''
|
||||
def saHandoverStatus = ''
|
||||
def saAERIALOAIUEStatus = ''
|
||||
def saOAIUEStatus = ''
|
||||
OAI_Registry = "gracehopper3-oai.sboai.cs.eurecom.fr"
|
||||
|
||||
pipeline {
|
||||
agent {
|
||||
@@ -62,100 +26,77 @@ pipeline {
|
||||
}
|
||||
options {
|
||||
timestamps()
|
||||
gitLabConnection('OAI GitLab')
|
||||
ansiColor('xterm')
|
||||
}
|
||||
|
||||
stages {
|
||||
stage ("Get Parameters") {
|
||||
stage ("Verify Parameters") {
|
||||
steps {
|
||||
script {
|
||||
echo '\u2705 \u001B[32mGet Parameters\u001B[0m'
|
||||
// GIT_BRANCH is prefixed with "origin/" by Jenkins - stripped version for use in tags and params in case of PUSH event
|
||||
gitLocalBranch = env.GIT_BRANCH.replace('origin/', '')
|
||||
if (env.GITHUB_PR_NUMBER) {
|
||||
echo "PR number : ${env.GITHUB_PR_NUMBER}"
|
||||
echo "Source Repository : ${env.GITHUB_PR_URL}"
|
||||
echo "Source Branch : ${env.GITHUB_PR_SOURCE_BRANCH}"
|
||||
echo "Commit ID : ${env.GITHUB_PR_HEAD_SHA}"
|
||||
echo "Target Repo : ${env.GIT_URL}"
|
||||
echo "Target Branch : ${env.GITHUB_PR_TARGET_BRANCH}"
|
||||
echo "Label : ${env.GITHUB_PR_LABELS}"
|
||||
branch = "${env.GITHUB_PR_SOURCE_BRANCH.replace('/', '-').replace('+', '-')}-${env.GITHUB_PR_HEAD_SHA}"
|
||||
} else {
|
||||
echo "Branch : ${gitLocalBranch}"
|
||||
echo "Commit ID : ${env.GIT_COMMIT}"
|
||||
branch = "${gitLocalBranch}-${env.GIT_COMMIT}"
|
||||
}
|
||||
env.JOB_TIMESTAMP = sh(returnStdout: true, script: 'date --utc --rfc-3339=seconds | sed -e "s#+00:00##"').trim()
|
||||
}
|
||||
}
|
||||
}
|
||||
stage ("Verify Labels") {
|
||||
steps {
|
||||
echo '\u2705 \u001B[32mVerify Labels\u001B[0m'
|
||||
script {
|
||||
if (env.GITHUB_PR_NUMBER) {
|
||||
if (!(env.GITHUB_PR_LABELS)) {
|
||||
def gitBaseUrl = env.GIT_URL.trim().replace('.git', '')
|
||||
def message = "**CI Build:** [#${env.BUILD_NUMBER}](${BUILD_URL}) | Not performing CI due to the absence of one of the following mandatory labels:\n"
|
||||
message += "- ${gitBaseUrl}/labels/documentation (don't perform any stages)\n"
|
||||
message += "- ${gitBaseUrl}/labels/BUILD-ONLY (execute only build stages)\n"
|
||||
message += "- ${gitBaseUrl}/labels/4G-LTE (perform 4G tests)\n"
|
||||
message += "- ${gitBaseUrl}/labels/5G-NR (perform 5G tests)\n"
|
||||
message += "- ${gitBaseUrl}/labels/nrUE (perform only 5G-UE related tests including physims excluding LDPC tests)\n"
|
||||
message += "- ${gitBaseUrl}/labels/CI (perform both 4G and 5G tests)\n"
|
||||
githubPRComment comment: githubPRMessage(message)
|
||||
error('Not performing CI due to lack of mandatory labels')
|
||||
}
|
||||
if (env.GITHUB_PR_LABELS.contains('CI')) {
|
||||
echo '\u2705 \u001B[32mVerify Parameters\u001B[0m'
|
||||
def allParametersPresent = true
|
||||
|
||||
echo '\u2705 \u001B[32mVerify Labels\u001B[0m'
|
||||
if ("MERGE".equals(env.gitlabActionType)) {
|
||||
LABEL_CHECK = sh returnStdout: true, script: 'ci-scripts/checkGitLabMergeRequestLabels.sh --mr-id ' + env.gitlabMergeRequestIid
|
||||
LABEL_CHECK = LABEL_CHECK.trim()
|
||||
if (LABEL_CHECK == 'NONE') {
|
||||
def message = "OAI " + JOB_NAME + " build (" + BUILD_ID + "): Your merge request should have one of the mandatory labels:\n\n"
|
||||
message += " - ~documentation (don't perform any stages)\n"
|
||||
message += " - ~BUILD-ONLY (execute only build stages)\n"
|
||||
message += " - ~4G-LTE (perform 4G tests)\n"
|
||||
message += " - ~5G-NR (perform 5G tests)\n"
|
||||
message += " - ~CI (perform both 4G and 5G tests)\n"
|
||||
message += " - ~nrUE (perform only 5G-UE related tests including physims excluding LDPC tests)\n\n"
|
||||
message += "Not performing CI due to lack of labels"
|
||||
addGitLabMRComment comment: message
|
||||
error('Not performing CI due to lack of labels')
|
||||
} else if (LABEL_CHECK == 'FULL') {
|
||||
do4Gtest = true
|
||||
do5Gtest = true
|
||||
do5GUeTest = true
|
||||
}
|
||||
if (env.GITHUB_PR_LABELS.contains('4G-LTE')) {
|
||||
} else if (LABEL_CHECK == "SHORTEN-4G") {
|
||||
do4Gtest = true
|
||||
}
|
||||
if (env.GITHUB_PR_LABELS.contains('5G-NR')) {
|
||||
} else if (LABEL_CHECK == 'SHORTEN-5G') {
|
||||
do5Gtest = true
|
||||
}
|
||||
if (env.GITHUB_PR_LABELS.contains('nrUE')) {
|
||||
} else if (LABEL_CHECK == 'SHORTEN-5G-UE') {
|
||||
do5GUeTest = true
|
||||
}
|
||||
if (env.GITHUB_PR_LABELS.contains('documentation')) {
|
||||
} else if (LABEL_CHECK == 'SHORTEN-4G-5G-UE') {
|
||||
do4Gtest = true
|
||||
do5GUeTest = true
|
||||
} else if (LABEL_CHECK == 'documentation') {
|
||||
doBuild = false
|
||||
} else {
|
||||
// is "BUILD-ONLY", will only build
|
||||
}
|
||||
} else {
|
||||
// PUSH event
|
||||
do4Gtest = true
|
||||
do5Gtest = true
|
||||
}
|
||||
echo """
|
||||
CI decision summary:
|
||||
doBuild = ${doBuild}
|
||||
do4Gtest = ${do4Gtest}
|
||||
do5Gtest = ${do5Gtest}
|
||||
do5GUeTest = ${do5GUeTest}
|
||||
"""
|
||||
}
|
||||
}
|
||||
}
|
||||
stage ("Verify Guidelines") {
|
||||
steps {
|
||||
echo "Git URL is ${GIT_URL}"
|
||||
echo "Job Name is ${JOB_NAME}"
|
||||
echo "Build Id is ${BUILD_ID}"
|
||||
echo "Git URL is ${GIT_URL}"
|
||||
echo "GitLab Act is ${env.gitlabActionType}"
|
||||
script {
|
||||
if (env.GITHUB_PR_NUMBER) {
|
||||
if ("MERGE".equals(env.gitlabActionType)) {
|
||||
// since a bit, in push events, gitlabUserEmail is not populated
|
||||
gitCommitAuthorEmailAddr = env.gitlabUserEmail
|
||||
echo "GitLab Usermail is ${gitCommitAuthorEmailAddr}"
|
||||
// Validate MR commits: checks for missing Signed-off-by and merge commits
|
||||
def mrValidationLog = "signedCommit_${env.BUILD_NUMBER}.log"
|
||||
def mrValidationExitCode = sh(
|
||||
script: "bash ./ci-scripts/pre-ci-check.sh -s ${env.GITHUB_PR_HEAD_SHA} -t origin/${env.GITHUB_PR_TARGET_BRANCH} > ${mrValidationLog} 2>&1",
|
||||
script: "bash ./ci-scripts/pre-ci-check.sh -s origin/${env.gitlabSourceBranch} -t origin/${env.gitlabTargetBranch} > ${mrValidationLog} 2>&1",
|
||||
returnStatus: true
|
||||
)
|
||||
def mrValidationMessage = readFile(mrValidationLog).trim()
|
||||
sh "rm -f ${mrValidationLog}"
|
||||
if (mrValidationExitCode >= 1) {
|
||||
mrValidationWarning = mrValidationMessage
|
||||
addGitLabMRComment comment: "${mrValidationMessage}"
|
||||
}
|
||||
if (mrValidationExitCode >= 2) {
|
||||
error("${mrValidationMessage}")
|
||||
@@ -163,21 +104,26 @@ pipeline {
|
||||
} else {
|
||||
echo "Git Branch is ${GIT_BRANCH}"
|
||||
echo "Git Commit is ${GIT_COMMIT}"
|
||||
// since a bit, in push events, gitlabUserEmail is not populated
|
||||
gitCommitAuthorEmailAddr = sh returnStdout: true, script: 'git log -n1 --pretty=format:%ae ${GIT_COMMIT}'
|
||||
gitCommitAuthorEmailAddr = gitCommitAuthorEmailAddr.trim()
|
||||
echo "GitLab Usermail is ${gitCommitAuthorEmailAddr}"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage ("Internal-Repo-Push") {
|
||||
stage ("Local-Repo-Push") {
|
||||
steps {
|
||||
script {
|
||||
triggerDownstreamJob ('RAN-Internal-Repo-Push')
|
||||
triggerSlaveJob ('RAN-Local-Repo-Push', 'Local-Repo-Push')
|
||||
}
|
||||
}
|
||||
post {
|
||||
failure {
|
||||
script {
|
||||
def message = "OAI " + JOB_NAME + " build (" + BUILD_ID + "): Cannot perform CI - merge validation failed (merge conflict, git operation failure, or internal CI error)."
|
||||
addGitLabMRComment comment: message
|
||||
currentBuild.result = 'FAILURE'
|
||||
failingStages += '\n * Internal-Repo-Push - merge validation failed (merge conflict, git operation failure, or internal CI error)'
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -189,7 +135,7 @@ pipeline {
|
||||
stage ("Ubuntu-Image-Builder") {
|
||||
steps {
|
||||
script {
|
||||
triggerDownstreamJob ('RAN-Ubuntu-Image-Builder')
|
||||
triggerSlaveJob ('RAN-Ubuntu18-Image-Builder', 'Ubuntu-Image-Builder')
|
||||
}
|
||||
}
|
||||
post {
|
||||
@@ -197,7 +143,7 @@ pipeline {
|
||||
script {
|
||||
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||
// due to parallel-time concurrency
|
||||
ubuntuBuildStatus = finalizeDownstreamJob('RAN-Ubuntu-Image-Builder')
|
||||
ubuntuBuildStatus = finalizeSlaveJob('RAN-Ubuntu18-Image-Builder')
|
||||
}
|
||||
}
|
||||
failure {
|
||||
@@ -211,7 +157,7 @@ pipeline {
|
||||
stage ("Ubuntu-ARM-Image-Builder") {
|
||||
steps {
|
||||
script {
|
||||
triggerDownstreamJob ('RAN-Ubuntu-ARM-Image-Builder')
|
||||
triggerSlaveJob ('RAN-Ubuntu-ARM-Image-Builder', 'Ubuntu-ARM-Image-Builder')
|
||||
}
|
||||
}
|
||||
post {
|
||||
@@ -219,7 +165,7 @@ pipeline {
|
||||
script {
|
||||
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||
// due to parallel-time concurrency
|
||||
ubuntuArmBuildStatus = finalizeDownstreamJob('RAN-Ubuntu-ARM-Image-Builder')
|
||||
ubuntuArmBuildStatus = finalizeSlaveJob('RAN-Ubuntu-ARM-Image-Builder')
|
||||
}
|
||||
}
|
||||
failure {
|
||||
@@ -233,7 +179,7 @@ pipeline {
|
||||
stage ("Ubuntu-Jetson-Image-Builder") {
|
||||
steps {
|
||||
script {
|
||||
triggerDownstreamJob ('RAN-Ubuntu-Jetson-Image-Builder')
|
||||
triggerSlaveJob ('RAN-Ubuntu-Jetson-Image-Builder', 'Ubuntu-Jetson-Image-Builder')
|
||||
}
|
||||
}
|
||||
post {
|
||||
@@ -241,7 +187,7 @@ pipeline {
|
||||
script {
|
||||
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||
// due to parallel-time concurrency
|
||||
ubuntuJetsonBuildStatus = finalizeDownstreamJob('RAN-Ubuntu-Jetson-Image-Builder')
|
||||
ubuntuJetsonBuildStatus = finalizeSlaveJob('RAN-Ubuntu-Jetson-Image-Builder')
|
||||
}
|
||||
}
|
||||
failure {
|
||||
@@ -255,7 +201,7 @@ pipeline {
|
||||
stage ("RHEL-Cluster-Image-Builder") {
|
||||
steps {
|
||||
script {
|
||||
triggerDownstreamJob ('RAN-RHEL-Cluster-Image-Builder')
|
||||
triggerSlaveJob ('RAN-RHEL8-Cluster-Image-Builder', 'RHEL-Cluster-Image-Builder')
|
||||
}
|
||||
}
|
||||
post {
|
||||
@@ -263,7 +209,7 @@ pipeline {
|
||||
script {
|
||||
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||
// due to parallel-time concurrency
|
||||
rhelBuildStatus = finalizeDownstreamJob('RAN-RHEL-Cluster-Image-Builder')
|
||||
rhelBuildStatus = finalizeSlaveJob('RAN-RHEL8-Cluster-Image-Builder')
|
||||
}
|
||||
}
|
||||
failure {
|
||||
@@ -277,7 +223,7 @@ pipeline {
|
||||
stage ("ARM-Cross-Compile") {
|
||||
steps {
|
||||
script {
|
||||
triggerDownstreamJob ('RAN-ARM-Cross-Compile-Builder')
|
||||
triggerSlaveJob ('RAN-ARM-Cross-Compile-Builder', 'ARM-Cross-Compilation')
|
||||
}
|
||||
}
|
||||
post {
|
||||
@@ -285,7 +231,7 @@ pipeline {
|
||||
script {
|
||||
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||
// due to parallel-time concurrency
|
||||
armBuildStatus = finalizeDownstreamJob('RAN-ARM-Cross-Compile-Builder')
|
||||
armBuildStatus = finalizeSlaveJob('RAN-ARM-Cross-Compile-Builder')
|
||||
}
|
||||
}
|
||||
failure {
|
||||
@@ -299,11 +245,11 @@ pipeline {
|
||||
}
|
||||
}
|
||||
stage ("DockerHub-Push") {
|
||||
when { expression {doBuild && !(env.GITHUB_PR_NUMBER)} }
|
||||
when { expression {doBuild && "PUSH".equals(env.gitlabActionType)} }
|
||||
steps {
|
||||
script {
|
||||
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
|
||||
triggerDownstreamJob ('RAN-DockerHub-Push')
|
||||
triggerSlaveJob ('RAN-DockerHub-Push', 'DockerHub-Push')
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -323,7 +269,7 @@ pipeline {
|
||||
when { expression {do5Gtest || do5GUeTest} }
|
||||
steps {
|
||||
script {
|
||||
triggerDownstreamJob ('RAN-PhySim-Cluster-5G')
|
||||
triggerSlaveJob ('RAN-PhySim-Cluster-5G', 'PhySim-Cluster-5G')
|
||||
}
|
||||
}
|
||||
post {
|
||||
@@ -331,7 +277,7 @@ pipeline {
|
||||
script {
|
||||
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||
// due to parallel-time concurrency
|
||||
physim5GStatus = finalizeDownstreamJob('RAN-PhySim-Cluster-5G')
|
||||
physim5GStatus = finalizeSlaveJob('RAN-PhySim-Cluster-5G')
|
||||
}
|
||||
}
|
||||
failure {
|
||||
@@ -346,7 +292,7 @@ pipeline {
|
||||
when { expression {do5Gtest || do5GUeTest} }
|
||||
steps {
|
||||
script {
|
||||
triggerDownstreamJob ('RAN-PhySim-GraceHopper-5G')
|
||||
triggerSlaveJob ('RAN-PhySim-GraceHopper-5G', 'PhySim-GraceHopper-5G')
|
||||
}
|
||||
}
|
||||
post {
|
||||
@@ -354,7 +300,7 @@ pipeline {
|
||||
script {
|
||||
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||
// due to parallel-time concurrency
|
||||
physimGH5GStatus = finalizeDownstreamJob('RAN-PhySim-GraceHopper-5G')
|
||||
physimGH5GStatus = finalizeSlaveJob('RAN-PhySim-GraceHopper-5G')
|
||||
}
|
||||
}
|
||||
failure {
|
||||
@@ -369,7 +315,7 @@ pipeline {
|
||||
when { expression {do5Gtest || do5GUeTest} }
|
||||
steps {
|
||||
script {
|
||||
triggerDownstreamJob ('RAN-Channel-Simulation')
|
||||
triggerSlaveJob ('RAN-Channel-Simulation', 'Channel-Simulation')
|
||||
}
|
||||
}
|
||||
post {
|
||||
@@ -377,7 +323,7 @@ pipeline {
|
||||
script {
|
||||
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||
// due to parallel-time concurrency
|
||||
channelSimStatus = finalizeDownstreamJob('RAN-Channel-Simulation')
|
||||
channelSimStatus = finalizeSlaveJob('RAN-Channel-Simulation')
|
||||
}
|
||||
}
|
||||
failure {
|
||||
@@ -392,7 +338,7 @@ pipeline {
|
||||
when { expression {do4Gtest} }
|
||||
steps {
|
||||
script {
|
||||
triggerDownstreamJob ('RAN-PhySim-Cluster-4G')
|
||||
triggerSlaveJob ('RAN-PhySim-Cluster-4G', 'PhySim-Cluster-4G')
|
||||
}
|
||||
}
|
||||
post {
|
||||
@@ -400,7 +346,7 @@ pipeline {
|
||||
script {
|
||||
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||
// due to parallel-time concurrency
|
||||
physim4GStatus = finalizeDownstreamJob('RAN-PhySim-Cluster-4G')
|
||||
physim4GStatus = finalizeSlaveJob('RAN-PhySim-Cluster-4G')
|
||||
}
|
||||
}
|
||||
failure {
|
||||
@@ -415,7 +361,7 @@ pipeline {
|
||||
when { expression {do4Gtest} }
|
||||
steps {
|
||||
script {
|
||||
triggerDownstreamJob ('RAN-RF-Sim-Test-4G')
|
||||
triggerSlaveJob ('RAN-RF-Sim-Test-4G', 'RF-Sim-Test-4G')
|
||||
}
|
||||
}
|
||||
post {
|
||||
@@ -423,7 +369,7 @@ pipeline {
|
||||
script {
|
||||
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||
// due to parallel-time concurrency
|
||||
rfSim4GStatus = finalizeDownstreamJob('RAN-RF-Sim-Test-4G')
|
||||
rfSim4GStatus = finalizeSlaveJob('RAN-RF-Sim-Test-4G')
|
||||
}
|
||||
}
|
||||
failure {
|
||||
@@ -438,7 +384,7 @@ pipeline {
|
||||
when { expression {do5Gtest || do5GUeTest} }
|
||||
steps {
|
||||
script {
|
||||
triggerDownstreamJob ('RAN-VRT-Sim-Test-5G')
|
||||
triggerSlaveJob ('RAN-VRT-Sim-Test-5G', 'VRT-Sim-Test-5G')
|
||||
}
|
||||
}
|
||||
post {
|
||||
@@ -446,7 +392,7 @@ pipeline {
|
||||
script {
|
||||
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||
// due to parallel-time concurrency
|
||||
vrtSim5GStatus = finalizeDownstreamJob('RAN-VRT-Sim-Test-5G')
|
||||
vrtSim5GStatus = finalizeSlaveJob('RAN-VRT-Sim-Test-5G')
|
||||
}
|
||||
}
|
||||
failure {
|
||||
@@ -461,7 +407,7 @@ pipeline {
|
||||
when { expression {do5Gtest || do5GUeTest} }
|
||||
steps {
|
||||
script {
|
||||
triggerDownstreamJob ('RAN-RF-Sim-Test-5G')
|
||||
triggerSlaveJob ('RAN-RF-Sim-Test-5G', 'RF-Sim-Test-5G')
|
||||
}
|
||||
}
|
||||
post {
|
||||
@@ -469,7 +415,7 @@ pipeline {
|
||||
script {
|
||||
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||
// due to parallel-time concurrency
|
||||
rfSim5GStatus = finalizeDownstreamJob('RAN-RF-Sim-Test-5G')
|
||||
rfSim5GStatus = finalizeSlaveJob('RAN-RF-Sim-Test-5G')
|
||||
}
|
||||
}
|
||||
failure {
|
||||
@@ -484,7 +430,7 @@ pipeline {
|
||||
when { expression {do5Gtest || do5GUeTest} }
|
||||
steps {
|
||||
script {
|
||||
triggerDownstreamJob ('OAI-FLEXRIC-RAN-Integration-Test')
|
||||
triggerSlaveJob ('OAI-FLEXRIC-RAN-Integration-Test', 'OAI-FLEXRIC-RAN-Integration-Test')
|
||||
}
|
||||
}
|
||||
post {
|
||||
@@ -492,7 +438,7 @@ pipeline {
|
||||
script {
|
||||
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||
// due to parallel-time concurrency
|
||||
flexricRAN5GStatus = finalizeDownstreamJob('OAI-FLEXRIC-RAN-Integration-Test')
|
||||
flexricRAN5GStatus = finalizeSlaveJob('OAI-FLEXRIC-RAN-Integration-Test')
|
||||
}
|
||||
}
|
||||
failure {
|
||||
@@ -507,7 +453,7 @@ pipeline {
|
||||
when { expression {do4Gtest} }
|
||||
steps {
|
||||
script {
|
||||
triggerDownstreamJob ('RAN-L2-Sim-Test-4G')
|
||||
triggerSlaveJob ('RAN-L2-Sim-Test-4G', 'L2-Sim-Test-4G')
|
||||
}
|
||||
}
|
||||
post {
|
||||
@@ -515,7 +461,7 @@ pipeline {
|
||||
script {
|
||||
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||
// due to parallel-time concurrency
|
||||
l2Sim4GStatus = finalizeDownstreamJob('RAN-L2-Sim-Test-4G')
|
||||
l2Sim4GStatus = finalizeSlaveJob('RAN-L2-Sim-Test-4G')
|
||||
}
|
||||
}
|
||||
failure {
|
||||
@@ -530,7 +476,7 @@ pipeline {
|
||||
when { expression {do4Gtest} }
|
||||
steps {
|
||||
script {
|
||||
triggerDownstreamJob ('RAN-LTE-FDD-LTEBOX-Container')
|
||||
triggerSlaveJob ('RAN-LTE-FDD-LTEBOX-Container', 'LTE-FDD-LTEBOX-Container')
|
||||
}
|
||||
}
|
||||
post {
|
||||
@@ -538,13 +484,13 @@ pipeline {
|
||||
script {
|
||||
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||
// due to parallel-time concurrency
|
||||
lteFDDB200Status = finalizeDownstreamJob('RAN-LTE-FDD-LTEBOX-Container')
|
||||
lteTDDB200Status = finalizeSlaveJob('RAN-LTE-FDD-LTEBOX-Container')
|
||||
}
|
||||
}
|
||||
failure {
|
||||
script {
|
||||
currentBuild.result = 'FAILURE'
|
||||
failingStages += lteFDDB200Status
|
||||
failingStages += lteTDDB200Status
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -554,7 +500,7 @@ pipeline {
|
||||
when { expression {do4Gtest} }
|
||||
steps {
|
||||
script {
|
||||
triggerDownstreamJob ('RAN-LTE-FDD-OAIUE-OAICN4G-Container')
|
||||
triggerSlaveJob ('RAN-LTE-FDD-OAIUE-OAICN4G-Container', 'LTE-FDD-OAIUE-OAICN4G-Container')
|
||||
}
|
||||
}
|
||||
post {
|
||||
@@ -562,7 +508,7 @@ pipeline {
|
||||
script {
|
||||
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||
// due to parallel-time concurrency
|
||||
lteFDDB200OAIUEStatus = finalizeDownstreamJob('RAN-LTE-FDD-OAIUE-OAICN4G-Container')
|
||||
lteFDDB200OAIUEStatus = finalizeSlaveJob('RAN-LTE-FDD-OAIUE-OAICN4G-Container')
|
||||
}
|
||||
}
|
||||
failure {
|
||||
@@ -577,7 +523,7 @@ pipeline {
|
||||
when { expression {do4Gtest} }
|
||||
steps {
|
||||
script {
|
||||
triggerDownstreamJob ('RAN-LTE-TDD-LTEBOX-Container')
|
||||
triggerSlaveJob ('RAN-LTE-TDD-LTEBOX-Container', 'LTE-TDD-LTEBOX-Container')
|
||||
}
|
||||
}
|
||||
post {
|
||||
@@ -585,13 +531,13 @@ pipeline {
|
||||
script {
|
||||
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||
// due to parallel-time concurrency
|
||||
lteTDDB200Status = finalizeDownstreamJob('RAN-LTE-TDD-LTEBOX-Container')
|
||||
lteFDDB200Status = finalizeSlaveJob('RAN-LTE-TDD-LTEBOX-Container')
|
||||
}
|
||||
}
|
||||
failure {
|
||||
script {
|
||||
currentBuild.result = 'FAILURE'
|
||||
failingStages += lteTDDB200Status
|
||||
failingStages += lteFDDB200Status
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -600,7 +546,7 @@ pipeline {
|
||||
when { expression {do4Gtest || do5Gtest} }
|
||||
steps {
|
||||
script {
|
||||
triggerDownstreamJob ('RAN-NSA-B200-Module-LTEBOX-Container')
|
||||
triggerSlaveJob ('RAN-NSA-B200-Module-LTEBOX-Container', 'NSA-B200-Module-LTEBOX-Container')
|
||||
}
|
||||
}
|
||||
post {
|
||||
@@ -608,7 +554,7 @@ pipeline {
|
||||
script {
|
||||
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||
// due to parallel-time concurrency
|
||||
nsaTDDB200Status = finalizeDownstreamJob('RAN-NSA-B200-Module-LTEBOX-Container')
|
||||
nsaTDDB200Status = finalizeSlaveJob('RAN-NSA-B200-Module-LTEBOX-Container')
|
||||
}
|
||||
}
|
||||
failure {
|
||||
@@ -623,7 +569,7 @@ pipeline {
|
||||
when { expression {do5Gtest} }
|
||||
steps {
|
||||
script {
|
||||
triggerDownstreamJob ('RAN-SA-B200-Module-SABOX-Container')
|
||||
triggerSlaveJob ('RAN-SA-B200-Module-SABOX-Container', 'SA-B200-Module-SABOX-Container')
|
||||
}
|
||||
}
|
||||
post {
|
||||
@@ -631,7 +577,7 @@ pipeline {
|
||||
script {
|
||||
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||
// due to parallel-time concurrency
|
||||
saTDDB200Status = finalizeDownstreamJob('RAN-SA-B200-Module-SABOX-Container')
|
||||
saTDDB200Status = finalizeSlaveJob('RAN-SA-B200-Module-SABOX-Container')
|
||||
}
|
||||
}
|
||||
failure {
|
||||
@@ -646,7 +592,7 @@ pipeline {
|
||||
when { expression {do5Gtest} }
|
||||
steps {
|
||||
script {
|
||||
triggerDownstreamJob ('RAN-gNB-N300-Timing-Phytest-LDPC')
|
||||
triggerSlaveJob ('RAN-gNB-N300-Timing-Phytest-LDPC', 'gNB-N300-Timing-Phytest-LDPC')
|
||||
}
|
||||
}
|
||||
post {
|
||||
@@ -654,7 +600,7 @@ pipeline {
|
||||
script {
|
||||
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||
// due to parallel-time concurrency
|
||||
phytestLDPCoffloadStatus = finalizeDownstreamJob('RAN-gNB-N300-Timing-Phytest-LDPC')
|
||||
phytestLDPCoffloadStatus = finalizeSlaveJob('RAN-gNB-N300-Timing-Phytest-LDPC')
|
||||
}
|
||||
}
|
||||
failure {
|
||||
@@ -669,7 +615,7 @@ pipeline {
|
||||
when { expression {do4Gtest} }
|
||||
steps {
|
||||
script {
|
||||
triggerDownstreamJob ('RAN-LTE-TDD-2x2-Container')
|
||||
triggerSlaveJob ('RAN-LTE-TDD-2x2-Container', 'LTE-TDD-2x2-Container')
|
||||
}
|
||||
}
|
||||
post {
|
||||
@@ -677,7 +623,7 @@ pipeline {
|
||||
script {
|
||||
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||
// due to parallel-time concurrency
|
||||
lteTDD2x2N3xxStatus = finalizeDownstreamJob('RAN-LTE-TDD-2x2-Container')
|
||||
lteTDD2x2N3xxStatus = finalizeSlaveJob('RAN-LTE-TDD-2x2-Container')
|
||||
}
|
||||
}
|
||||
failure {
|
||||
@@ -692,7 +638,7 @@ pipeline {
|
||||
when { expression {do5Gtest} }
|
||||
steps {
|
||||
script {
|
||||
triggerDownstreamJob ('RAN-SA-AW2S-CN5G')
|
||||
triggerSlaveJob ('RAN-SA-AW2S-CN5G', 'SA-AW2S-CN5G')
|
||||
}
|
||||
}
|
||||
post {
|
||||
@@ -700,7 +646,7 @@ pipeline {
|
||||
script {
|
||||
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||
// due to parallel-time concurrency
|
||||
saAW2SStatus = finalizeDownstreamJob('RAN-SA-AW2S-CN5G')
|
||||
saAW2SStatus = finalizeSlaveJob('RAN-SA-AW2S-CN5G')
|
||||
}
|
||||
}
|
||||
failure {
|
||||
@@ -711,11 +657,11 @@ pipeline {
|
||||
}
|
||||
}
|
||||
}
|
||||
stage ("SA-AERIAL-CN5G") {
|
||||
stage ("Sanity-Check OAI-CN5G") {
|
||||
when { expression {do5Gtest} }
|
||||
steps {
|
||||
script {
|
||||
triggerDownstreamJob ('RAN-SA-AERIAL-CN5G')
|
||||
triggerCN5GSlaveJob ('OAI-CN5G-COTS-UE-Test', 'OAI-CN5G-COTS-UE-Test')
|
||||
}
|
||||
}
|
||||
post {
|
||||
@@ -723,7 +669,30 @@ pipeline {
|
||||
script {
|
||||
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||
// due to parallel-time concurrency
|
||||
saAERIALStatus = finalizeDownstreamJob('RAN-SA-AERIAL-CN5G')
|
||||
cn5gCOTSUESanityCheck = finalizeSlaveJob('OAI-CN5G-COTS-UE-Test')
|
||||
}
|
||||
}
|
||||
failure {
|
||||
script {
|
||||
currentBuild.result = 'FAILURE'
|
||||
failingStages += cn5gCOTSUESanityCheck
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage ("SA-AERIAL-CN5G") {
|
||||
when { expression {do5Gtest} }
|
||||
steps {
|
||||
script {
|
||||
triggerSlaveJob ('RAN-SA-AERIAL-CN5G', 'SA-AERIAL-CN5G')
|
||||
}
|
||||
}
|
||||
post {
|
||||
always {
|
||||
script {
|
||||
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||
// due to parallel-time concurrency
|
||||
saAERIALStatus = finalizeSlaveJob('RAN-SA-AERIAL-CN5G')
|
||||
}
|
||||
}
|
||||
failure {
|
||||
@@ -738,7 +707,7 @@ pipeline {
|
||||
when { expression {do5Gtest} }
|
||||
steps {
|
||||
script {
|
||||
triggerDownstreamJob ('RAN-SA-Multi-Antenna-CN5G')
|
||||
triggerSlaveJob ('RAN-SA-Multi-Antenna-CN5G', 'SA-Multi-Antenna-CN5G')
|
||||
}
|
||||
}
|
||||
post {
|
||||
@@ -746,7 +715,7 @@ pipeline {
|
||||
script {
|
||||
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||
// due to parallel-time concurrency
|
||||
saMultiAntennaStatus = finalizeDownstreamJob('RAN-SA-Multi-Antenna-CN5G')
|
||||
saMultiAntennaStatus = finalizeSlaveJob('RAN-SA-Multi-Antenna-CN5G')
|
||||
}
|
||||
}
|
||||
failure {
|
||||
@@ -761,7 +730,7 @@ pipeline {
|
||||
when { expression {do5Gtest} }
|
||||
steps {
|
||||
script {
|
||||
triggerDownstreamJob ('RAN-SA-FHI72-CN5G')
|
||||
triggerSlaveJob ('RAN-SA-FHI72-CN5G', 'SA-FHI72-CN5G')
|
||||
}
|
||||
}
|
||||
post {
|
||||
@@ -769,7 +738,7 @@ pipeline {
|
||||
script {
|
||||
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||
// due to parallel-time concurrency
|
||||
saFHI72Status = finalizeDownstreamJob('RAN-SA-FHI72-CN5G')
|
||||
saFHI72Status = finalizeSlaveJob('RAN-SA-FHI72-CN5G')
|
||||
}
|
||||
}
|
||||
failure {
|
||||
@@ -784,7 +753,7 @@ pipeline {
|
||||
when { expression {do5Gtest} }
|
||||
steps {
|
||||
script {
|
||||
triggerDownstreamJob ('RAN-SA-FHI72-MPLANE-CN5G')
|
||||
triggerSlaveJob ('RAN-SA-FHI72-MPLANE-CN5G', 'SA-FHI72-MPLANE-CN5G')
|
||||
}
|
||||
}
|
||||
post {
|
||||
@@ -792,7 +761,7 @@ pipeline {
|
||||
script {
|
||||
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||
// due to parallel-time concurrency
|
||||
saFHI72MplaneStatus = finalizeDownstreamJob('RAN-SA-FHI72-MPLANE-CN5G')
|
||||
saFHI72MplaneStatus = finalizeSlaveJob('RAN-SA-FHI72-MPLANE-CN5G')
|
||||
}
|
||||
}
|
||||
failure {
|
||||
@@ -807,7 +776,7 @@ pipeline {
|
||||
when { expression {do5Gtest} }
|
||||
steps {
|
||||
script {
|
||||
triggerDownstreamJob ('RAN-SA-Handover-CN5G')
|
||||
triggerSlaveJob ('RAN-SA-Handover-CN5G', 'SA-Handover-CN5G')
|
||||
}
|
||||
}
|
||||
post {
|
||||
@@ -815,7 +784,7 @@ pipeline {
|
||||
script {
|
||||
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||
// due to parallel-time concurrency
|
||||
saHandoverStatus = finalizeDownstreamJob('RAN-SA-Handover-CN5G')
|
||||
saHandoverStatus = finalizeSlaveJob('RAN-SA-Handover-CN5G')
|
||||
}
|
||||
}
|
||||
failure {
|
||||
@@ -830,7 +799,7 @@ pipeline {
|
||||
when { expression {do5Gtest || do5GUeTest} }
|
||||
steps {
|
||||
script {
|
||||
triggerDownstreamJob ('RAN-SA-AERIAL-OAIUE-CN5G')
|
||||
triggerSlaveJob ('RAN-SA-AERIAL-OAIUE-CN5G', 'SA-AERIAL-OAIUE-CN5G')
|
||||
}
|
||||
}
|
||||
post {
|
||||
@@ -838,7 +807,7 @@ pipeline {
|
||||
script {
|
||||
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||
// due to parallel-time concurrency
|
||||
saAERIALOAIUEStatus = finalizeDownstreamJob('RAN-SA-AERIAL-OAIUE-CN5G')
|
||||
saAERIALOAIUEStatus = finalizeSlaveJob('RAN-SA-AERIAL-OAIUE-CN5G')
|
||||
}
|
||||
}
|
||||
failure {
|
||||
@@ -853,7 +822,7 @@ pipeline {
|
||||
when { expression {do5Gtest || do5GUeTest} }
|
||||
steps {
|
||||
script {
|
||||
triggerDownstreamJob ('RAN-SA-OAIUE-CN5G')
|
||||
triggerSlaveJob ('RAN-SA-OAIUE-CN5G', 'SA-OAIUE-CN5G')
|
||||
}
|
||||
}
|
||||
post {
|
||||
@@ -861,7 +830,7 @@ pipeline {
|
||||
script {
|
||||
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||
// due to parallel-time concurrency
|
||||
saOAIUEStatus = finalizeDownstreamJob('RAN-SA-OAIUE-CN5G')
|
||||
saOAIUEStatus = finalizeSlaveJob('RAN-SA-OAIUE-CN5G')
|
||||
}
|
||||
}
|
||||
failure {
|
||||
@@ -878,47 +847,21 @@ pipeline {
|
||||
post {
|
||||
success {
|
||||
script {
|
||||
if (env.GITHUB_PR_NUMBER) {
|
||||
if (mrValidationWarning) {
|
||||
def message = "**CI Build:** [#${env.BUILD_NUMBER}](${BUILD_URL}) | **Passed**"
|
||||
message += "\n\n**Validation:** " + mrValidationWarning
|
||||
githubPRComment comment: githubPRMessage(message)
|
||||
}
|
||||
githubNotify account: params.gitAccount,
|
||||
repo: params.gitRepo,
|
||||
credentialsId: 'github-jenkins-duranta',
|
||||
sha: env.GITHUB_PR_HEAD_SHA,
|
||||
status: 'SUCCESS',
|
||||
description: 'Build success',
|
||||
targetUrl: BUILD_URL,
|
||||
context: 'Jenkins Duranta CI'
|
||||
def message = "OAI " + JOB_NAME + " build (" + BUILD_ID + "): passed (" + BUILD_URL + ")"
|
||||
if ("MERGE".equals(env.gitlabActionType)) {
|
||||
addGitLabMRComment comment: message
|
||||
def message2 = message + " -- MergeRequest #" + env.gitlabMergeRequestIid + " (" + env.gitlabMergeRequestTitle + ")"
|
||||
}
|
||||
echo "Pipeline is SUCCESSFUL"
|
||||
}
|
||||
}
|
||||
failure {
|
||||
script {
|
||||
if (env.GITHUB_PR_NUMBER) {
|
||||
def message = "**CI Build:** [#${env.BUILD_NUMBER}](${BUILD_URL}) | **Failed** on the following stages:"
|
||||
if (failingStages) {
|
||||
message += failingStages
|
||||
} else {
|
||||
message += "\nThe pipeline may have failed due to CI, validation, or scripting error. See the build for more details."
|
||||
}
|
||||
if (mrValidationWarning) {
|
||||
message += '\n\n**Validation:** ' + mrValidationWarning
|
||||
}
|
||||
if (env.GITHUB_PR_LABELS) {
|
||||
githubPRComment comment: githubPRMessage(message)
|
||||
}
|
||||
githubNotify account: params.gitAccount,
|
||||
repo: params.gitRepo,
|
||||
credentialsId: 'github-jenkins-duranta',
|
||||
sha: env.GITHUB_PR_HEAD_SHA,
|
||||
status: 'FAILURE',
|
||||
description: 'Build failed',
|
||||
targetUrl: BUILD_URL,
|
||||
context: 'Jenkins Duranta CI'
|
||||
def message = "OAI " + JOB_NAME + " build (" + BUILD_ID + "): failed (" + BUILD_URL + ")"
|
||||
if ("MERGE".equals(env.gitlabActionType)) {
|
||||
def fullMessage = message + '\n\nList of failing test stages:' + failingStages
|
||||
addGitLabMRComment comment: fullMessage
|
||||
def message2 = message + " -- MergeRequest #" + env.gitlabMergeRequestIid + " (" + env.gitlabMergeRequestTitle + ")"
|
||||
}
|
||||
echo "Pipeline FAILED"
|
||||
}
|
||||
@@ -928,37 +871,52 @@ pipeline {
|
||||
|
||||
// ---- Slave Job functions
|
||||
|
||||
def triggerDownstreamJob (jobName) {
|
||||
// Workaround for the "cancelled" pipeline notification
|
||||
// The downstream job is triggered with the propagate false so the following commands are executed
|
||||
def triggerSlaveJob (jobName, gitlabStatusName) {
|
||||
def MR_NUMBER = "MERGE".equals(env.gitlabActionType) ? env.gitlabMergeRequestIid : 'develop'
|
||||
// Workaround for the "cancelled" GitLab pipeline notification
|
||||
// The slave job is triggered with the propagate false so the following commands are executed
|
||||
// Its status is now PASS/SUCCESS from a stage pipeline point of view
|
||||
// localStatus variable MUST be analyzed to properly assess the status
|
||||
def localStatus = build job: jobName,
|
||||
parameters: [
|
||||
string(name: 'targetRepo', value: String.valueOf(env.GIT_URL)),
|
||||
string(name: 'sourceRepo', value: String.valueOf(env.GITHUB_PR_URL ?: env.GIT_URL)),
|
||||
string(name: 'sourceBranch', value: String.valueOf(env.GITHUB_PR_SOURCE_BRANCH ?: gitLocalBranch)),
|
||||
string(name: 'sourceCommit', value: String.valueOf(env.GITHUB_PR_HEAD_SHA ?: env.GIT_COMMIT)),
|
||||
string(name: 'requestNumber', value: String.valueOf(env.GITHUB_PR_NUMBER ?: gitLocalBranch)),
|
||||
booleanParam(name: 'mergeWithTarget', value: env.GITHUB_PR_NUMBER != null),
|
||||
string(name: 'targetBranch', value: (env.GITHUB_PR_TARGET_BRANCH ?: gitLocalBranch)),
|
||||
string(name: 'repository', value: String.valueOf(params.ciRepositoryURL)),
|
||||
string(name: 'branch', value: String.valueOf(branch))
|
||||
string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)),
|
||||
string(name: 'targetRepo', value: String.valueOf(GIT_URL)),
|
||||
string(name: 'SourceRepo', value: String.valueOf(env.gitlabSourceRepoHttpUrl)),
|
||||
string(name: 'sourceRepo', value: String.valueOf(env.gitlabSourceRepoHttpUrl)),
|
||||
string(name: 'eNB_Branch', value: String.valueOf(env.gitlabSourceBranch)),
|
||||
string(name: 'sourceBranch', value: String.valueOf(env.gitlabSourceBranch)),
|
||||
string(name: 'eNB_CommitID', value: String.valueOf(env.gitlabMergeRequestLastCommit)),
|
||||
string(name: 'sourceCommit', value: String.valueOf(env.gitlabMergeRequestLastCommit)),
|
||||
string(name: 'eNB_MR', value: String.valueOf(MR_NUMBER)),
|
||||
string(name: 'requestNumber', value: String.valueOf(MR_NUMBER)),
|
||||
booleanParam(name: 'eNB_mergeRequest', value: "MERGE".equals(env.gitlabActionType)),
|
||||
booleanParam(name: 'mergeWithTarget', value: "MERGE".equals(env.gitlabActionType)),
|
||||
string(name: 'eNB_TargetBranch', value: String.valueOf(env.gitlabTargetBranch)),
|
||||
string(name: 'targetBranch', value: String.valueOf(env.gitlabTargetBranch))
|
||||
], propagate: false
|
||||
def localResult = localStatus.getResult()
|
||||
echo "${jobName} Slave Job status is ${localResult}"
|
||||
downstreamResults[jobName] = localStatus.resultIsBetterOrEqualTo('SUCCESS') ? 'SUCCESS' : 'FAILURE'
|
||||
if (localStatus.resultIsBetterOrEqualTo('SUCCESS')) {
|
||||
echo "${jobName} Slave Job is OK"
|
||||
} else {
|
||||
error "${jobName} Slave Job is KO"
|
||||
gitlabCommitStatus(name: gitlabStatusName) {
|
||||
if (localStatus.resultIsBetterOrEqualTo('SUCCESS')) {
|
||||
echo "${jobName} Slave Job is OK"
|
||||
} else {
|
||||
error "${jobName} Slave Job is KO"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
def triggerCN5GDownstreamJob (jobName) {
|
||||
def fullRanTag = params.internalRegistry + '/oai-gnb:' + "${branch}"
|
||||
def triggerCN5GSlaveJob (jobName, gitlabStatusName) {
|
||||
if ("MERGE".equals(env.gitlabActionType)) {
|
||||
shaOne = sh returnStdout: true, script: 'git log -1 --pretty=format:"%H" ' + env.gitlabMergeRequestLastCommit
|
||||
shaOne = shaOne.trim()
|
||||
fullRanTag = OAI_Registry + '/oai-gnb:' + env.gitlabSourceBranch + '-' + shaOne
|
||||
} else {
|
||||
shaOne = sh returnStdout: true, script: 'git log -1 --pretty=format:"%H" ' + env.GIT_COMMIT
|
||||
shaOne = shaOne.trim()
|
||||
fullRanTag = OAI_Registry + '/oai-gnb:develop-' + shaOne
|
||||
}
|
||||
// Workaround for the "cancelled" GitLab pipeline notification
|
||||
// The downstream job is triggered with the propagate false so the following commands are executed
|
||||
// The slave job is triggered with the propagate false so the following commands are executed
|
||||
// Its status is now PASS/SUCCESS from a stage pipeline point of view
|
||||
// localStatus variable MUST be analyzed to properly assess the status
|
||||
def localStatus = build job: jobName,
|
||||
@@ -967,30 +925,29 @@ def triggerCN5GDownstreamJob (jobName) {
|
||||
], propagate: false
|
||||
def localResult = localStatus.getResult()
|
||||
echo "${jobName} Slave Job status is ${localResult}"
|
||||
downstreamResults[jobName] = localStatus.resultIsBetterOrEqualTo('SUCCESS') ? 'SUCCESS' : 'FAILURE'
|
||||
if (localStatus.resultIsBetterOrEqualTo('SUCCESS')) {
|
||||
echo "${jobName} Slave Job is OK"
|
||||
} else {
|
||||
error "${jobName} Slave Job is KO"
|
||||
gitlabCommitStatus(name: gitlabStatusName) {
|
||||
if (localStatus.resultIsBetterOrEqualTo('SUCCESS')) {
|
||||
echo "${jobName} Slave Job is OK"
|
||||
} else {
|
||||
error "${jobName} Slave Job is KO"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
def finalizeDownstreamJob(jobName) {
|
||||
def finalizeSlaveJob(jobName) {
|
||||
lock ('Parent-Lock') {
|
||||
// In case of any non-success, we are retrieving the HTML report of the last completed
|
||||
// downstream job. The only drop-back is that we may retrieve the HTML report of a previous build
|
||||
def fileName
|
||||
// slave job. The only drop-back is that we may retrieve the HTML report of a previous build
|
||||
if (jobName == 'OAI-CN5G-COTS-UE-Test') {
|
||||
fileName = "test_results_oai_cn5g_cots_ue.html"
|
||||
} else {
|
||||
fileName = "test_results-${jobName}.html"
|
||||
}
|
||||
def artifactUrl = BUILD_URL
|
||||
artifactUrl = BUILD_URL
|
||||
if (!fileExists(fileName)) {
|
||||
copyArtifacts(projectName: jobName,
|
||||
filter: 'test_results*.html',
|
||||
selector: lastCompleted(),
|
||||
optional: true)
|
||||
selector: lastCompleted())
|
||||
if (fileExists(fileName)) {
|
||||
sh "sed -i -e 's#TEMPLATE_BUILD_TIME#${env.JOB_TIMESTAMP}#' ${fileName}"
|
||||
} else {
|
||||
@@ -1001,15 +958,6 @@ def finalizeDownstreamJob(jobName) {
|
||||
// no need to add a prefixed '/'
|
||||
artifactUrl += 'artifact/' + fileName
|
||||
}
|
||||
if (env.GITHUB_PR_NUMBER) {
|
||||
githubNotify account: params.gitAccount,
|
||||
repo: params.gitRepo,
|
||||
credentialsId: "github-jenkins-duranta",
|
||||
sha: env.GITHUB_PR_HEAD_SHA,
|
||||
status: downstreamResults.getOrDefault(jobName, 'FAILURE'),
|
||||
targetUrl: "${artifactUrl}",
|
||||
context: jobName
|
||||
}
|
||||
artifactUrl = "\n * [${jobName}](${artifactUrl})"
|
||||
return artifactUrl
|
||||
}
|
||||
@@ -23,54 +23,11 @@ pipeline {
|
||||
lock(extra: lockResources)
|
||||
}
|
||||
stages {
|
||||
stage("Job init") {
|
||||
steps {
|
||||
buildName "${params.requestNumber ?: params.targetBranch}"
|
||||
buildDescription "Branch: ${params.sourceBranch}"
|
||||
}
|
||||
}
|
||||
stage('Checkout') {
|
||||
steps {
|
||||
script {
|
||||
if (params.mergeWithTarget) {
|
||||
echo "PR triggered - checking out merge ref for PR #${params.requestNumber}"
|
||||
try {
|
||||
checkout([
|
||||
$class: 'GitSCM',
|
||||
branches: [[name: "refs/remotes/origin/pr/${params.requestNumber}/merge"]],
|
||||
userRemoteConfigs: [[
|
||||
url: params.targetRepo,
|
||||
refspec: "+refs/pull/${params.requestNumber}/merge:refs/remotes/origin/pr/${params.requestNumber}/merge",
|
||||
credentialsId: 'github-jenkins-duranta'
|
||||
]]
|
||||
])
|
||||
} catch (e) {
|
||||
error("Checkout failed for PR #${params.requestNumber} - " +
|
||||
"merge ref not found. The PR likely has a conflict with ${params.targetBranch} " +
|
||||
"that must be resolved before CI can run. (${e.message})")
|
||||
}
|
||||
} else {
|
||||
echo "Push triggered - checking out branch ${params.targetBranch}"
|
||||
try {
|
||||
checkout([
|
||||
$class: 'GitSCM',
|
||||
branches: [[name: params.targetBranch]],
|
||||
userRemoteConfigs: [[
|
||||
url: params.targetRepo,
|
||||
credentialsId: 'github-jenkins-duranta'
|
||||
]]
|
||||
])
|
||||
} catch (e) {
|
||||
error("Checkout failed for branch ${params.targetBranch} from ${params.targetRepo}. (${e.message})")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('Verify parameters') {
|
||||
steps {
|
||||
script {
|
||||
def missingParams = []
|
||||
if (!params.sourceRepo?.trim()) { missingParams << 'sourceRepo' }
|
||||
if (!params.sourceBranch?.trim()) { missingParams << 'sourceBranch' }
|
||||
if (!params.sourceCommit?.trim()) { missingParams << 'sourceCommit' }
|
||||
if (params.mergeWithTarget) {
|
||||
@@ -82,6 +39,7 @@ pipeline {
|
||||
error "Missing required parameters: ${missingParams.join(', ')}"
|
||||
}
|
||||
|
||||
echo "Source Repo : ${params.sourceRepo}"
|
||||
echo "Source Branch : ${params.sourceBranch}"
|
||||
echo "Source Commit : ${params.sourceCommit}"
|
||||
echo "Merge : ${params.mergeWithTarget}"
|
||||
@@ -95,26 +53,62 @@ pipeline {
|
||||
stage('Prepare workspace') {
|
||||
steps {
|
||||
sh """
|
||||
git config user.email "oaicicdteam@openairinterface.org"
|
||||
git config user.name "Duranta Jenkins"
|
||||
git config user.email "jenkins@openairinterface.org"
|
||||
git config user.name "OAI Jenkins"
|
||||
git remote remove source || true
|
||||
git remote remove target || true
|
||||
git remote remove internal-repo || true
|
||||
"""
|
||||
}
|
||||
}
|
||||
stage('Create testing branch for CI') {
|
||||
stage('Add source repo & fetch branches') {
|
||||
steps {
|
||||
sh """
|
||||
git remote add source ${params.sourceRepo} || true
|
||||
git fetch source ${params.sourceBranch}
|
||||
"""
|
||||
script {
|
||||
if (params.mergeWithTarget) {
|
||||
sh """
|
||||
git remote add target ${params.targetRepo} || true
|
||||
git fetch target ${params.targetBranch}
|
||||
"""
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('Create temporary branch for CI') {
|
||||
steps {
|
||||
script {
|
||||
env.NEW_BRANCH = "${params.sourceBranch}-${params.sourceCommit}"
|
||||
echo "New branch: ${env.NEW_BRANCH}"
|
||||
}
|
||||
sh """
|
||||
# Checkout source commit
|
||||
git checkout -B ${params.branch}
|
||||
git checkout -B ${env.NEW_BRANCH} ${params.sourceCommit}
|
||||
"""
|
||||
}
|
||||
}
|
||||
stage('Merge target into source') {
|
||||
when { expression { return params.mergeWithTarget } }
|
||||
steps {
|
||||
sh """
|
||||
echo "Merging target branch ${params.targetBranch} into source branch ${env.NEW_BRANCH}"
|
||||
if ! git merge --ff target/${params.targetBranch} \
|
||||
-m "Merge ${params.targetBranch} into ${params.sourceBranch} for CI"; then
|
||||
echo "Merge conflicts detected. Aborting."
|
||||
git merge --abort || true
|
||||
exit 1
|
||||
fi
|
||||
"""
|
||||
}
|
||||
}
|
||||
stage('Push merged branch to internal repository') {
|
||||
steps {
|
||||
sh """
|
||||
git remote add internal-repo ${params.repository} || true
|
||||
echo "Pushing ${params.branch} to internal repo"
|
||||
git push --force internal-repo ${params.branch}
|
||||
git remote add internal-repo ${internalRepoURL} || true
|
||||
echo "Pushing ${env.NEW_BRANCH} to internal repo"
|
||||
git push --force internal-repo ${env.NEW_BRANCH}
|
||||
"""
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,9 +46,9 @@ pipeline {
|
||||
stage ("Push to DockerHub") {
|
||||
steps {
|
||||
script {
|
||||
def WEEK_REF = sh returnStdout: true, script: 'date +"%Y.w%V"'
|
||||
WEEK_REF = sh returnStdout: true, script: 'date +"%Y.w%V"'
|
||||
WEEK_REF = WEEK_REF.trim()
|
||||
def WEEK_TAG = sh returnStdout: true, script: 'python3 ./ci-scripts/provideUniqueImageTag.py --start_tag ' + WEEK_REF
|
||||
WEEK_TAG = sh returnStdout: true, script: 'python3 ./ci-scripts/provideUniqueImageTag.py --start_tag ' + WEEK_REF
|
||||
WEEK_TAG = WEEK_TAG.trim()
|
||||
if ((params.forceTag != null) && (params.tagToUse != null)) {
|
||||
if (params.forceTag) {
|
||||
@@ -56,7 +56,7 @@ pipeline {
|
||||
echo "Forced Tag is ${WEEK_TAG}"
|
||||
}
|
||||
}
|
||||
def WEEK_SHA = sh returnStdout: true, script: 'git log -n1 --pretty=format:"%H" origin/develop'
|
||||
WEEK_SHA = sh returnStdout: true, script: 'git log -n1 --pretty=format:"%H" origin/develop'
|
||||
WEEK_SHA = WEEK_SHA.trim()
|
||||
|
||||
withCredentials([
|
||||
@@ -82,6 +82,12 @@ pipeline {
|
||||
}
|
||||
sh "docker rmi ${DH_Account}/${item}:${WEEK_TAG} ${DH_Account}/${item}:develop ${OAI_Registry}/${item}:develop-${WEEK_SHA} || true"
|
||||
}
|
||||
// Proxy is not following the same pattern.
|
||||
sh "docker image tag proxy:develop ${DH_Account}/proxy:develop"
|
||||
sh "docker image tag proxy:develop ${DH_Account}/proxy:${WEEK_TAG}"
|
||||
sh "docker push --quiet ${DH_Account}/proxy:develop"
|
||||
sh "docker push --quiet ${DH_Account}/proxy:${WEEK_TAG}"
|
||||
sh "docker rmi ${DH_Account}/proxy:develop ${DH_Account}/proxy:${WEEK_TAG}"
|
||||
// Logging out on both registries
|
||||
sh "docker logout ${OAI_Registry} > /dev/null 2>&1"
|
||||
sh "docker logout > /dev/null 2>&1"
|
||||
|
||||
@@ -1,210 +0,0 @@
|
||||
#!/bin/groovy
|
||||
/*
|
||||
* SPDX-License-Identifier: LicenseRef-CSSL-1.0
|
||||
*/
|
||||
|
||||
def pythonExecutor = params.pythonExecutor
|
||||
def testXMLFile = params.pythonTestXmlFile
|
||||
def mainPythonAllXmlFiles = ""
|
||||
def buildStageStatus = true
|
||||
def JOB_TIMESTAMP
|
||||
|
||||
// Choose test stage name or fallback default
|
||||
def testStageName = params.pipelineTestStageName != null ? params.pipelineTestStageName : 'Template Test Stage'
|
||||
|
||||
// Name of the resource
|
||||
def lockResources = []
|
||||
if (params.LockResources != null && params.LockResources.trim().length() > 0)
|
||||
params.LockResources.trim().split(",").each{lockResources += [resource: it.trim()]}
|
||||
|
||||
// Global Parameters. Normally they should be populated when the master job
|
||||
// triggers the slave job with parameters
|
||||
|
||||
def targetBranch = params.targetBranch ?: 'develop'
|
||||
def testRepository = params.repository ?: 'git@asterix:/home/git/openairinterface5g.git'
|
||||
def testBranch = params.branch ?: "latest"
|
||||
def mergeWithTarget = params.mergeWithTarget ?: false
|
||||
def sourceBranch = params.sourceBranch ?: testBranch
|
||||
|
||||
def flexricOption = ""
|
||||
def runWithOC = false
|
||||
|
||||
//-------------------------------------------------------------------------------
|
||||
// Pipeline start
|
||||
pipeline {
|
||||
agent {
|
||||
label pythonExecutor
|
||||
}
|
||||
options {
|
||||
timestamps()
|
||||
ansiColor('xterm')
|
||||
lock(extra: lockResources)
|
||||
}
|
||||
|
||||
stages {
|
||||
stage("Build Init") {
|
||||
steps {
|
||||
script {
|
||||
echo '\u2705 \u001B[94mBuild Init\u001B[0m'
|
||||
JOB_TIMESTAMP = sh(returnStdout: true, script: 'date --utc --rfc-3339=seconds | sed -e "s#+00:00##"').trim()
|
||||
}
|
||||
// update the build name and description
|
||||
buildName "${params.requestNumber}"
|
||||
buildDescription "Branch : ${sourceBranch}"
|
||||
}
|
||||
}
|
||||
stage ('Verify Parameters') {
|
||||
steps {
|
||||
script {
|
||||
echo '\u2705 \u001B[94mVerify Parameters\u001B[0m'
|
||||
def allParametersPresent = true
|
||||
|
||||
if (params.LockResources == null) {
|
||||
echo "no LockResources given"
|
||||
allParametersPresent = false
|
||||
}
|
||||
if (params.workspace == null) {
|
||||
echo "no workspace given"
|
||||
allParametersPresent = false
|
||||
}
|
||||
if (params.OC_Credentials != null) {
|
||||
echo "This pipeline is configured to run with Openshift Cluster."
|
||||
runWithOC = true
|
||||
if (params.OC_ProjectName == null) {
|
||||
echo "no OC_ProjectName given"
|
||||
allParametersPresent = false
|
||||
}
|
||||
}
|
||||
if (params.Flexric_Tag != null) {
|
||||
echo "This pipeline is configured to run with a FlexRIC deployment."
|
||||
echo "Appending FlexRicTag option to the list of options"
|
||||
flexricOption = "--FlexRicTag=${params.Flexric_Tag}"
|
||||
echo "Using new Flexric option: ${flexricOption}"
|
||||
}
|
||||
|
||||
if (testBranch == 'latest') {
|
||||
echo "Detecting latest commit and branch from repo"
|
||||
def latest_integration = sh(script: "git for-each-ref --format='%(refname:short) %(committerdate:unix)' refs/remotes/origin/integration_* | sort -k2 -nr | head -n1 | cut -d' ' -f1", returnStdout: true).trim()
|
||||
def latest_develop = sh(script: "git for-each-ref --format='%(refname:short) %(committerdate:unix)' refs/remotes/origin/develop* | sort -k2 -nr | head -n1 | cut -d' ' -f1", returnStdout: true).trim()
|
||||
def dev_date = sh(script: "git log ${latest_develop} -1 --format=%ct", returnStdout: true).trim().toInteger()
|
||||
def int_date = sh(script: "git log ${latest_integration} -1 --format=%ct", returnStdout: true).trim().toInteger()
|
||||
def selected_ref = (dev_date > int_date) ? "origin/develop" : latest_integration
|
||||
sourceBranch = selected_ref.replaceFirst("^origin/", "")
|
||||
commitID = sh(script: "git rev-parse ${selected_ref}", returnStdout: true).trim()
|
||||
echo "Found branch ${sourceBranch}, commit ${commitID}"
|
||||
testBranch = "${sourceBranch}-${commitID}"
|
||||
}
|
||||
|
||||
echo "CI executor node : ${pythonExecutor}"
|
||||
echo "Testing Repository : ${testRepository}"
|
||||
echo "Testing Branch : ${testBranch}"
|
||||
|
||||
if (allParametersPresent) {
|
||||
echo '\u2705 \u001B[94m All parameters are present\u001B[0m'
|
||||
} else {
|
||||
echo "\u274C Some parameters are missing"
|
||||
sh "./ci-scripts/fail.sh"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage ("Deploy and Test") {
|
||||
steps {
|
||||
script {
|
||||
dir ('ci-scripts') {
|
||||
echo "\u2705 \u001B[94m Deploy and Test: ${testStageName}\u001B[0m"
|
||||
String[] myXmlTestSuite = testXMLFile.split("\\r?\\n")
|
||||
for (xmlFile in myXmlTestSuite) {
|
||||
if (fileExists(xmlFile)) {
|
||||
mainPythonAllXmlFiles += "--XMLTestFile=" + xmlFile + " "
|
||||
echo "Test XML file : ${xmlFile}"
|
||||
} else {
|
||||
echo "Test XML file ${xmlFile}: no such file"
|
||||
}
|
||||
}
|
||||
sh """
|
||||
python3 main.py --mode=InitiateHtml --repository=${testRepository} \
|
||||
--branch=${testBranch} ${mainPythonAllXmlFiles}
|
||||
"""
|
||||
if (runWithOC) {
|
||||
withCredentials([usernamePassword(credentialsId: "${params.OC_Credentials}", usernameVariable: 'OC_Username', passwordVariable: 'OC_Password')]) {
|
||||
for (xmlFile in myXmlTestSuite) {
|
||||
if (fileExists(xmlFile)) {
|
||||
try {
|
||||
timeout (time: 150, unit: 'MINUTES') {
|
||||
sh """
|
||||
python3 main.py --mode=TesteNB --repository=${testRepository} \
|
||||
--branch=${testBranch} \
|
||||
--ranAllowMerge=${mergeWithTarget} --targetBranch=${targetBranch} \
|
||||
--workspace=${params.workspace} --XMLTestFile=${xmlFile} \
|
||||
--OCUserName=${OC_Username} --OCPassword=${OC_Password} --OCProjectName=${OC_ProjectName} \
|
||||
${flexricOption}
|
||||
"""
|
||||
}
|
||||
} catch (Exception e) {
|
||||
currentBuild.result = 'FAILURE'
|
||||
buildStageStatus = false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (xmlFile in myXmlTestSuite) {
|
||||
if (fileExists(xmlFile)) {
|
||||
try {
|
||||
timeout (time: 150, unit: 'MINUTES') {
|
||||
sh """
|
||||
python3 main.py --mode=TesteNB --repository=${testRepository} \
|
||||
--branch=${testBranch} \
|
||||
--ranAllowMerge=${mergeWithTarget} --targetBranch=${targetBranch} \
|
||||
--workspace=${params.workspace} --XMLTestFile=${xmlFile} \
|
||||
${flexricOption}
|
||||
"""
|
||||
}
|
||||
} catch (Exception e) {
|
||||
currentBuild.result = 'FAILURE'
|
||||
buildStageStatus = false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
sh "python3 main.py --mode=FinalizeHtml --finalStatus=${buildStageStatus}"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage ("Log Collection") {
|
||||
steps {
|
||||
script {
|
||||
echo '\u2705 \u001B[94mLog Collection\u001B[0m'
|
||||
dir ('ci-scripts') {
|
||||
// Zipping all archived log files
|
||||
sh "mkdir test_logs"
|
||||
sh "mv *.log* test_logs || true"
|
||||
// Zip all log files matching cmake_targets/{*.log*,log/*} into test_logs_XXXX.zip
|
||||
if (fileExists('../cmake_targets/log')) {
|
||||
sh "mv ../cmake_targets/log/* test_logs || true"
|
||||
}
|
||||
sh "zip -r -qq test_logs_${env.BUILD_ID}.zip *test_log*/"
|
||||
sh "rm -rf *test_log*/"
|
||||
if (fileExists("test_logs_${env.BUILD_ID}.zip")) {
|
||||
archiveArtifacts artifacts: "test_logs_${env.BUILD_ID}.zip"
|
||||
}
|
||||
if (fileExists("test_results.html")) {
|
||||
def reportName = "test_results-${env.JOB_NAME}.html"
|
||||
sh "mv test_results.html ${reportName}"
|
||||
sh """
|
||||
sed -i -e 's#TEMPLATE_BUILD_TIME#${JOB_TIMESTAMP}#' \
|
||||
-e 's#TEMPLATE_JOB_NAME#${JOB_NAME}#' \
|
||||
-e 's@build #TEMPLATE_BUILD_ID@build #${BUILD_ID}@' \
|
||||
-e 's#Build-ID: TEMPLATE_BUILD_ID#Build-ID: <a href=\"${BUILD_URL}\">${BUILD_ID}</a>#' \
|
||||
-e 's#TEMPLATE_STAGE_NAME#${testStageName}#' ${reportName}
|
||||
"""
|
||||
archiveArtifacts artifacts: "${reportName}"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -44,8 +44,11 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,CONTAINERS,HELP,CLUSTER):
|
||||
elif re.match(r'^\-\-mode=(.+)$', myArgv, re.IGNORECASE):
|
||||
matchReg = re.match(r'^\-\-mode=(.+)$', myArgv, re.IGNORECASE)
|
||||
mode = matchReg.group(1)
|
||||
elif re.match(r'^\-\-repository=(.+)$', myArgv, re.IGNORECASE):
|
||||
matchReg = re.match(r'^\-\-repository=(.+)$', myArgv, re.IGNORECASE)
|
||||
elif re.match(r'^\-\-repository=(.+)$|^\-\-ranRepository=(.+)$', myArgv, re.IGNORECASE):
|
||||
if re.match(r'^\-\-repository=(.+)$', myArgv, re.IGNORECASE):
|
||||
matchReg = re.match(r'^\-\-repository=(.+)$', myArgv, re.IGNORECASE)
|
||||
else:
|
||||
matchReg = re.match(r'^\-\-ranRepository=(.+)$', myArgv, re.IGNORECASE)
|
||||
CiTestObj.repository = matchReg.group(1)
|
||||
RAN.repository=matchReg.group(1)
|
||||
HTML.repository=matchReg.group(1)
|
||||
@@ -58,15 +61,27 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,CONTAINERS,HELP,CLUSTER):
|
||||
RAN.merge=True
|
||||
CONTAINERS.merge=True
|
||||
CLUSTER.merge=True
|
||||
elif re.match(r'^\-\-branch=(.+)$', myArgv, re.IGNORECASE):
|
||||
matchReg = re.match(r'^\-\-branch=(.+)$', myArgv, re.IGNORECASE)
|
||||
elif re.match(r'^\-\-branch=(.+)$|^\-\-ranBranch=(.+)$', myArgv, re.IGNORECASE):
|
||||
if re.match(r'^\-\-branch=(.+)$', myArgv, re.IGNORECASE):
|
||||
matchReg = re.match(r'^\-\-branch=(.+)$', myArgv, re.IGNORECASE)
|
||||
else:
|
||||
matchReg = re.match(r'^\-\-ranBranch=(.+)$', myArgv, re.IGNORECASE)
|
||||
CiTestObj.branch = matchReg.group(1)
|
||||
RAN.branch=matchReg.group(1)
|
||||
HTML.branch=matchReg.group(1)
|
||||
CONTAINERS.branch=matchReg.group(1)
|
||||
CLUSTER.branch=matchReg.group(1)
|
||||
elif re.match(r'^\-\-targetBranch=(.*)$', myArgv, re.IGNORECASE):
|
||||
matchReg = re.match(r'^\-\-targetBranch=(.*)$', myArgv, re.IGNORECASE)
|
||||
elif re.match(r'^\-\-commitID=(.*)$|^\-\-ranCommitID=(.*)$', myArgv, re.IGNORECASE):
|
||||
if re.match(r'^\-\-commitID=(.*)$', myArgv, re.IGNORECASE):
|
||||
matchReg = re.match(r'^\-\-commitID=(.*)$', myArgv, re.IGNORECASE)
|
||||
else:
|
||||
matchReg = re.match(r'^\-\-ranCommitID=(.*)$', myArgv, re.IGNORECASE)
|
||||
HTML.commitID=matchReg.group(1)
|
||||
elif re.match(r'^\-\-targetBranch=(.*)$|^\-\-ranTargetBranch=(.*)$', myArgv, re.IGNORECASE):
|
||||
if re.match(r'^\-\-targetBranch=(.*)$', myArgv, re.IGNORECASE):
|
||||
matchReg = re.match(r'^\-\-targetBranch=(.*)$', myArgv, re.IGNORECASE)
|
||||
else:
|
||||
matchReg = re.match(r'^\-\-ranTargetBranch=(.*)$', myArgv, re.IGNORECASE)
|
||||
RAN.targetBranch=matchReg.group(1)
|
||||
CONTAINERS.targetBranch=matchReg.group(1)
|
||||
CLUSTER.targetBranch=matchReg.group(1)
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
#define N_ANTENNA_UL 1
|
||||
#define TDD 1
|
||||
|
||||
log_options: "all.level=info,all.max_size=0,nas.level=debug,nas.max_size=1,rrc.level=debug,rrc.max_size=1",
|
||||
log_options: "all.level=debug,all.max_size=0,nas.level=debug,nas.max_size=1,rrc.level=debug,rrc.max_size=1",
|
||||
log_filename: "/tmp/ue.log",
|
||||
|
||||
/* Enable remote API and Web interface */
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
#define N_ANTENNA_UL 1
|
||||
#define TDD 1
|
||||
|
||||
log_options: "all.level=info,all.max_size=0,nas.level=debug,nas.max_size=1,rrc.level=debug,rrc.max_size=1",
|
||||
log_options: "all.level=debug,all.max_size=0,nas.level=debug,nas.max_size=1,rrc.level=debug,rrc.max_size=1",
|
||||
log_filename: "/tmp/ue.log",
|
||||
|
||||
/* Enable remote API and Web interface */
|
||||
|
||||
@@ -55,9 +55,8 @@ then
|
||||
IS_OAI_LICENCE_PRESENT=`grep -E -c "SPDX-License-Identifier: LicenseRef-CSSL-1.0" $FILE || true`
|
||||
IS_BSD_LICENCE_PRESENT=`grep -E -c "the terms of the BSD Licence|License-Identifier: BSD-2-Clause|License-Identifier: BSD-3-Clause" $FILE || true`
|
||||
IS_MIT_LICENCE_PRESENT=`grep -E -c "SPDX-License-Identifier: MIT" $FILE || true`
|
||||
IS_APACHE_LICENSE_PRESENT=`grep -E -c "SPDX-License-Identifier: Apache-2.0" $FILE || true`
|
||||
IS_EXCEPTION=`echo $FILE | grep -E -c "common/utils/collection/tree.h|common/utils/collection/queue.h|openair2/UTIL/OPT/packet-rohc.h|openair3/NAS/COMMON/milenage.h|openair1/PHY/CODING/crc.h|openair1/PHY/CODING/crcext.h|openair1/PHY/CODING/types.h" || true`
|
||||
if [ $IS_OAI_LICENCE_PRESENT -eq 0 ] && [ $IS_BSD_LICENCE_PRESENT -eq 0 ] && [ $IS_MIT_LICENCE_PRESENT -eq 0 ] && [ $IS_APACHE_LICENSE_PRESENT -eq 0 ]
|
||||
if [ $IS_OAI_LICENCE_PRESENT -eq 0 ] && [ $IS_BSD_LICENCE_PRESENT -eq 0 ] && [ $IS_MIT_LICENCE_PRESENT -eq 0 ]
|
||||
then
|
||||
if [ $IS_NFAPI -eq 0 ] && [ $IS_EXCEPTION -eq 0 ]
|
||||
then
|
||||
@@ -167,9 +166,8 @@ do
|
||||
IS_OAI_LICENCE_PRESENT=`grep -E -c "SPDX-License-Identifier: LicenseRef-CSSL-1.0" $FULLFILE || true`
|
||||
IS_BSD_LICENCE_PRESENT=`grep -E -c "the terms of the BSD Licence|License-Identifier: BSD-2-Clause|License-Identifier: BSD-3-Clause" $FULLFILE || true`
|
||||
IS_MIT_LICENCE_PRESENT=`grep -E -c "SPDX-License-Identifier: MIT" $FULLFILE || true`
|
||||
IS_APACHE_LICENSE_PRESENT=`grep -E -c "SPDX-License-Identifier: Apache-2.0" $FULLFILE || true`
|
||||
IS_EXCEPTION=`echo $FULLFILE | grep -E -c "common/utils/collection/tree.h|common/utils/collection/queue.h|openair2/UTIL/OPT/packet-rohc.h|openair3/NAS/COMMON/milenage.h|openair1/PHY/CODING/crc.h|openair1/PHY/CODING/crcext.h|openair1/PHY/CODING/types.h" || true`
|
||||
if [ $IS_OAI_LICENCE_PRESENT -eq 0 ] && [ $IS_BSD_LICENCE_PRESENT -eq 0 ] && [ $IS_MIT_LICENCE_PRESENT -eq 0 ] && [ $IS_APACHE_LICENSE_PRESENT -eq 0 ]
|
||||
if [ $IS_OAI_LICENCE_PRESENT -eq 0 ] && [ $IS_BSD_LICENCE_PRESENT -eq 0 ] && [ $IS_MIT_LICENCE_PRESENT -eq 0 ]
|
||||
then
|
||||
if [ $IS_NFAPI -eq 0 ] && [ $IS_EXCEPTION -eq 0 ]
|
||||
then
|
||||
|
||||
115
ci-scripts/checkGitLabMergeRequestLabels.sh
Executable file
115
ci-scripts/checkGitLabMergeRequestLabels.sh
Executable file
@@ -0,0 +1,115 @@
|
||||
#!/bin/bash
|
||||
# SPDX-License-Identifier: LicenseRef-CSSL-1.0
|
||||
|
||||
function usage {
|
||||
echo "OAI GitLab merge request applying script"
|
||||
echo ""
|
||||
echo "Usage:"
|
||||
echo "------"
|
||||
echo ""
|
||||
echo " checkGitLabMergeRequestLabels.sh [OPTIONS]"
|
||||
echo ""
|
||||
echo "Options:"
|
||||
echo "------------------"
|
||||
echo ""
|
||||
echo " --mr-id ####"
|
||||
echo " Specify the ID of the merge request."
|
||||
echo ""
|
||||
echo " --help OR -h"
|
||||
echo " Print this help message."
|
||||
echo ""
|
||||
}
|
||||
|
||||
if [ $# -ne 2 ] && [ $# -ne 1 ]
|
||||
then
|
||||
echo "Syntax Error: not the correct number of arguments"
|
||||
echo ""
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
while [[ $# -gt 0 ]]
|
||||
do
|
||||
key="$1"
|
||||
|
||||
case $key in
|
||||
-h|--help)
|
||||
shift
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
--mr-id)
|
||||
MERGE_REQUEST_ID="$2"
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
echo "Syntax Error: unknown option: $key"
|
||||
echo ""
|
||||
usage
|
||||
exit 1
|
||||
esac
|
||||
done
|
||||
|
||||
LABELS=`curl --silent "https://gitlab.eurecom.fr/api/v4/projects/oai%2Fopenairinterface5g/merge_requests/$MERGE_REQUEST_ID" | jq '.labels' || true`
|
||||
|
||||
IS_MR_DOCUMENTATION=`echo $LABELS | grep -ic documentation`
|
||||
IS_MR_BUILD_ONLY=`echo $LABELS | grep -c BUILD-ONLY`
|
||||
IS_MR_CI=`echo $LABELS | grep -c CI`
|
||||
IS_MR_4G=`echo $LABELS | grep -c 4G-LTE`
|
||||
IS_MR_5G=`echo $LABELS | grep -c 5G-NR`
|
||||
IS_MR_5G_UE=`echo $LABELS | grep -c nrUE`
|
||||
|
||||
# none is present! No CI
|
||||
if [ $IS_MR_BUILD_ONLY -eq 0 ] && [ $IS_MR_CI -eq 0 ] && [ $IS_MR_4G -eq 0 ] && [ $IS_MR_5G -eq 0 ] && [ $IS_MR_DOCUMENTATION -eq 0 ] && [ $IS_MR_5G_UE -eq 0 ]
|
||||
then
|
||||
echo "NONE"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# 4G and 5G or CI labels: run everything (4G, 5G)
|
||||
if [ $IS_MR_4G -eq 1 ] && [ $IS_MR_5G -eq 1 ] || [ $IS_MR_CI -eq 1 ]
|
||||
then
|
||||
echo "FULL"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ $IS_MR_5G_UE -eq 1 ] && [ $IS_MR_4G -eq 1 ]
|
||||
then
|
||||
echo "SHORTEN-4G-5G-UE"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# 4G is present: run only 4G
|
||||
if [ $IS_MR_4G -eq 1 ]
|
||||
then
|
||||
echo "SHORTEN-4G"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# 5G is present: run only 5G
|
||||
if [ $IS_MR_5G -eq 1 ]
|
||||
then
|
||||
echo "SHORTEN-5G"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ $IS_MR_5G_UE -eq 1 ]
|
||||
then
|
||||
echo "SHORTEN-5G-UE"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# BUILD-ONLY is present: only build stages
|
||||
if [ $IS_MR_BUILD_ONLY -eq 1 ]
|
||||
then
|
||||
echo "BUILD-ONLY"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Documentation is present: don't do anything
|
||||
if [ $IS_MR_DOCUMENTATION -eq 1 ]
|
||||
then
|
||||
echo "documentation"
|
||||
exit 0
|
||||
fi
|
||||
@@ -44,14 +44,6 @@ up2-aerial:
|
||||
IF: wwan0
|
||||
MTU: 1500
|
||||
|
||||
up3:
|
||||
Host: up3
|
||||
AttachScript: /opt/mbim/start_quectel_mbim.sh
|
||||
DetachScript: /opt/mbim/stop_quectel_mbim.sh
|
||||
NetworkScript: ip a show dev wwan0
|
||||
IF: wwan0
|
||||
MTU: 1500
|
||||
|
||||
adb_ue_1:
|
||||
Host: nano
|
||||
InitScript: /home/oaicicd/ci_ctl_adb.sh initialize R3CM40LZPHT
|
||||
@@ -125,19 +117,6 @@ oc-cn5g-00104:
|
||||
Undeploy: "! scripts/oc-cn5g-undeploy.sh /opt/oai-cn5g-fed-develop-00104 oaicicd-core-for-nvidia-aerial"
|
||||
LogCollect: "! scripts/oc-cn5g-logcollect.sh /opt/oai-cn5g-fed-develop-00104 oaicicd-core-for-nvidia-aerial %%log_dir%%"
|
||||
|
||||
oc-cn5g-20897-stonechat:
|
||||
Host: stonechat
|
||||
NetworkScript: echo "inet 172.21.6.105"
|
||||
RunIperf3Server: False
|
||||
Deploy: "! scripts/oc-cn5g-deploy.sh /opt/oai-cn5g-fed-develop-2025-jan oaicicd-core-for-fhi72"
|
||||
Undeploy: "! scripts/oc-cn5g-undeploy.sh /opt/oai-cn5g-fed-develop-2025-jan oaicicd-core-for-fhi72"
|
||||
LogCollect: "! scripts/oc-cn5g-logcollect.sh /opt/oai-cn5g-fed-develop-2025-jan oaicicd-core-for-fhi72 %%log_dir%%"
|
||||
|
||||
oc-cn5g-20899-always-on:
|
||||
Host: stonechat
|
||||
NetworkScript: echo "inet 172.21.6.12"
|
||||
RunIperf3Server: False
|
||||
|
||||
matix-cn5g:
|
||||
Host: matix
|
||||
NetworkScript: docker exec prod-trf-gen ip a show dev eth0
|
||||
@@ -217,19 +196,11 @@ amarisoft_00105_40MHz:
|
||||
InitScript: /root/lteue-linux-2025-03-15/lteue /root/oaicicd/ran_sa_fhi72_mplane_40MHz/multi-00105-40.cfg &
|
||||
TermScript: /root/lteue-linux-2025-03-15/ws.js -t 10 127.0.0.1:9002 '{"message":"quit"}' || killall -KILL lteue-avx2
|
||||
NetworkScript: ip netns exec ue1 ip a show dev pdn0
|
||||
Tracing:
|
||||
Start: '' # nothing to be done
|
||||
Stop: '' # nothing to be done
|
||||
Collect: 'cp /tmp/ue.log %%log_dir%%'
|
||||
amarisoft_00105_100MHz:
|
||||
Host: amariue
|
||||
InitScript: /root/lteue-linux-2025-03-15/lteue /root/oaicicd/ran_sa_fhi72_mplane_100MHz/multi-00105-100.cfg &
|
||||
TermScript: /root/lteue-linux-2025-03-15/ws.js -t 10 127.0.0.1:9002 '{"message":"quit"}' || killall -KILL lteue-avx2
|
||||
NetworkScript: ip netns exec ue1 ip a show dev pdn0
|
||||
Tracing:
|
||||
Start: '' # nothing to be done
|
||||
Stop: '' # nothing to be done
|
||||
Collect: 'cp /tmp/ue.log %%log_dir%%'
|
||||
amarisoft_ue_1:
|
||||
Host: amariue
|
||||
AttachScript: /root/lteue-linux-2025-03-15/ws.js 127.0.0.1:9002 '{"message":"power_on","ue_id":1}'
|
||||
|
||||
@@ -95,13 +95,13 @@ class Analysis():
|
||||
test_summary['Nbfail'] = nb_failed
|
||||
return nb_failed == 0, test_summary, test_result
|
||||
|
||||
def analyze_rt_stats(thresholds, stat_files):
|
||||
def analyze_rt_stats(thresholds, L1_stats, MAC_stats):
|
||||
with open(thresholds, 'r') as f:
|
||||
datalog_rt_stats = yaml.load(f, Loader=yaml.FullLoader)
|
||||
|
||||
rt_keys = datalog_rt_stats['Ref']
|
||||
real_time_stats = {}
|
||||
for sf in stat_files:
|
||||
for sf in [L1_stats, MAC_stats]:
|
||||
with open(sf, 'r') as f:
|
||||
for line in f.readlines():
|
||||
for k in rt_keys:
|
||||
|
||||
@@ -29,7 +29,7 @@ from cls_ci_helper import archiveArtifact
|
||||
# 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-enb-asan', 'oai-gnb-asan', 'oai-lte-ue-asan', 'oai-nr-ue-asan', 'oai-nr-cuup-asan', 'oai-gnb-aerial', 'oai-gnb-fhi72', 'oai-gnb-fhi72-t2']
|
||||
IMAGES = ['oai-enb', 'oai-lte-ru', 'oai-lte-ue', 'oai-gnb', 'oai-nr-cuup', 'oai-gnb-aw2s', 'oai-nr-ue', 'oai-enb-asan', 'oai-gnb-asan', 'oai-lte-ue-asan', 'oai-nr-ue-asan', 'oai-nr-cuup-asan', 'oai-gnb-aerial', 'oai-gnb-fhi72']
|
||||
DEFAULT_REGISTRY = "gracehopper3-oai.sboai.cs.eurecom.fr"
|
||||
|
||||
def CreateWorkspace(host, sourcePath, repository, branch):
|
||||
@@ -55,7 +55,7 @@ def AnalyzeBuildLogs(image, lf):
|
||||
committed = committed or lineHasCommit
|
||||
if re.search(r'error:|Errors|ERROR', line):
|
||||
errors.append(f"=> {line.strip()}")
|
||||
status = (committed or tagged) and len(errors) == 0
|
||||
status = (committed or tagged)
|
||||
logging.info(f"Analyzing {image}, file {lf}: {status=}, {len(errors)} errors")
|
||||
for e in errors:
|
||||
logging.info(e)
|
||||
@@ -178,9 +178,20 @@ class Containerize():
|
||||
|
||||
dockerfileprefix = '.ubuntu'
|
||||
|
||||
baseImage = 'ran-base'
|
||||
baseTag = 'develop'
|
||||
buildImage = 'ran-build'
|
||||
forceBaseImageBuild = False
|
||||
imageTag = 'develop'
|
||||
|
||||
result = re.search('native_cuda_armv8', self.imageKind)
|
||||
if result is not None:
|
||||
baseImage = 'ran-base-cuda'
|
||||
buildImage = 'ran-build-cuda'
|
||||
dockerfileprefix = '.cuda.ubuntu'
|
||||
# we always build the ran-build image with all targets
|
||||
# Creating a tupple with the imageName, the DockerFile prefix pattern, targetName and sanitized option
|
||||
imageNames = [('ran-build', 'build', 'ran-build', '')]
|
||||
imageNames = [(buildImage, 'build', f'{buildImage}', '')]
|
||||
result = re.search('eNB', self.imageKind)
|
||||
if result is not None:
|
||||
imageNames.append(('oai-enb', 'eNB', 'oai-enb', ''))
|
||||
@@ -220,17 +231,13 @@ class Containerize():
|
||||
imageNames.append(('oai-gnb', 'gNB', 'oai-gnb', ''))
|
||||
imageNames.append(('oai-nr-cuup', 'nr-cuup', 'oai-nr-cuup', ''))
|
||||
imageNames.append(('oai-nr-ue', 'nrUE', 'oai-nr-ue', ''))
|
||||
result = re.search('fhi72-t2', self.imageKind)
|
||||
result = re.search('native_cuda_armv8', self.imageKind)
|
||||
if result is not None:
|
||||
imageNames.append(('ran-build-fhi72-t2', 'build.fhi72.t2', 'ran-build-fhi72-t2', ''))
|
||||
imageNames.append(('oai-gnb', 'gNB.fhi72.t2', 'oai-gnb-fhi72-t2', ''))
|
||||
imageNames.append(('oai-gnb', 'gNB', 'oai-gnb', ''))
|
||||
imageNames.append(('oai-nr-ue', 'nrUE', 'oai-nr-ue', ''))
|
||||
|
||||
cmd.cd(lSourcePath)
|
||||
|
||||
baseImage = 'ran-base'
|
||||
baseTag = 'develop'
|
||||
forceBaseImageBuild = False
|
||||
imageTag = 'develop'
|
||||
if (self.merge):
|
||||
imageTag = 'ci-temp'
|
||||
if self.targetBranch == 'develop':
|
||||
@@ -258,17 +265,17 @@ class Containerize():
|
||||
# On when the base image docker file is being modified.
|
||||
if forceBaseImageBuild:
|
||||
cmd.run(f"docker image rm {baseImage}:{baseTag}")
|
||||
logfile = f'{lSourcePath}/cmake_targets/log/ran-base.docker.log'
|
||||
logfile = f'{lSourcePath}/cmake_targets/log/{baseImage}.docker.log'
|
||||
option = f" --build-arg UBUNTU_IMAGE={DEFAULT_REGISTRY}/{ubuntuImage}"
|
||||
cmd.run(f"docker build --target {baseImage} --tag {baseImage}:{baseTag} --file docker/Dockerfile.base{dockerfileprefix} {option} . &> {logfile}", timeout=1600)
|
||||
t = ("ran-base", archiveArtifact(cmd, ctx, logfile))
|
||||
t = (baseImage, archiveArtifact(cmd, ctx, logfile))
|
||||
log_files.append(t)
|
||||
|
||||
# First verify if the base image was properly created.
|
||||
ret = cmd.run(f"docker image inspect --format=\'Size = {{{{.Size}}}} bytes\' {baseImage}:{baseTag}")
|
||||
|
||||
allImagesSize = {}
|
||||
if ret.returncode != 0:
|
||||
logging.error('\u001B[1m Could not build properly ran-base\u001B[0m')
|
||||
logging.error(f'\u001B[1m Could not build properly {baseImage}\u001B[0m')
|
||||
# Recover the name of the failed container?
|
||||
cmd.run(f"docker ps --quiet --filter \"status=exited\" -n1 | xargs --no-run-if-empty docker rm -f")
|
||||
cmd.run(f"docker image prune --force")
|
||||
@@ -281,10 +288,10 @@ class Containerize():
|
||||
if result is not None:
|
||||
size = float(result.group("size")) / 1000000
|
||||
imageSizeStr = f'{size:.1f}'
|
||||
logging.debug(f'\u001B[1m ran-base size is {imageSizeStr} Mbytes\u001B[0m')
|
||||
allImagesSize['ran-base'] = f'{imageSizeStr} Mbytes'
|
||||
logging.debug(f'\u001B[1m {baseImage} size is {imageSizeStr} Mbytes\u001B[0m')
|
||||
allImagesSize[baseImage] = f'{imageSizeStr} Mbytes'
|
||||
else:
|
||||
logging.debug('ran-base size is unknown')
|
||||
logging.debug(f'{baseImage} size is unknown')
|
||||
|
||||
# Build the target image(s)
|
||||
status = True
|
||||
@@ -295,17 +302,13 @@ class Containerize():
|
||||
cmd.run(f'sed -i -e "s#{baseImage}:latest#{baseImage}:{baseTag}#" docker/Dockerfile.{pattern}{dockerfileprefix}')
|
||||
# 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}{dockerfileprefix}')
|
||||
cmd.run(f'sed -i -e "s#{buildImage}:latest#{buildImage}-asan:{imageTag}#" docker/Dockerfile.{pattern}{dockerfileprefix}')
|
||||
elif "fhi72" in name or name == "oai-nr-oru":
|
||||
cmd.run(f'sed -i -e "s#ran-build-fhi72:latest#ran-build-fhi72:{imageTag}#" docker/Dockerfile.{pattern}{dockerfileprefix}')
|
||||
elif image != 'ran-build':
|
||||
cmd.run(f'sed -i -e "s#ran-build:latest#ran-build:{imageTag}#" docker/Dockerfile.{pattern}{dockerfileprefix}')
|
||||
cmd.run(f'sed -i -e "s#{buildImage}:latest#{buildImage}:{imageTag}#" docker/Dockerfile.{pattern}{dockerfileprefix}')
|
||||
if image == 'oai-gnb-aerial':
|
||||
cmd.run('cp -f /opt/nvidia-ipc/nvipc_src.2026.01.07.tar.gz .')
|
||||
if image == 'ran-build-fhi72-t2':
|
||||
cmd.run('cp -f /opt/t2-patch/AMD-T2-SDFEC_25-03-1.patch .')
|
||||
if name == 'oai-gnb-fhi72-t2':
|
||||
cmd.run(f'sed -i -e "s#ran-build-fhi72-t2:latest#ran-build-fhi72-t2:{imageTag}#" docker/Dockerfile.{pattern}{dockerfileprefix}')
|
||||
logfile = f'{lSourcePath}/cmake_targets/log/{name}.docker.log'
|
||||
option = option + f" --build-arg UBUNTU_IMAGE={DEFAULT_REGISTRY}/{ubuntuImage}"
|
||||
ret = cmd.run(f'docker build --target {image} --tag {name}:{imageTag} --file docker/Dockerfile.{pattern}{dockerfileprefix} {option} . > {logfile} 2>&1', timeout=1200)
|
||||
@@ -313,8 +316,6 @@ class Containerize():
|
||||
log_files.append(t)
|
||||
if image == 'oai-gnb-aerial':
|
||||
cmd.run('rm -f nvipc_src.2026.01.07.tar.gz')
|
||||
if image == 'ran-build-fhi72-t2':
|
||||
cmd.run('rm -f AMD-T2-SDFEC_25-03-1.patch')
|
||||
# check the status of the build
|
||||
ret = cmd.run(f"docker image inspect --format=\'Size = {{{{.Size}}}} bytes\' {name}:{imageTag}")
|
||||
if ret.returncode != 0:
|
||||
@@ -401,7 +402,7 @@ class Containerize():
|
||||
# I would like to run it with --rm and mount the ctest result directory to avoid 'docker cp'
|
||||
# below, but then permissions are messed up and we can't remove the directory without sudo
|
||||
# making the next pipeline fail
|
||||
ret = cmd.run(f'docker run -a STDOUT {runtime_opt} --shm-size=2g --workdir /oai-ran/build/ --env LD_LIBRARY_PATH=/oai-ran/build/ --name ran-unittests ran-unittests:{baseTag} ctest --no-label-summary -j$(nproc) {ctest_opt}')
|
||||
ret = cmd.run(f'docker run -a STDOUT {runtime_opt} --workdir /oai-ran/build/ --env LD_LIBRARY_PATH=/oai-ran/build/ --name ran-unittests ran-unittests:{baseTag} ctest --no-label-summary -j$(nproc) {ctest_opt}')
|
||||
cmd.run('docker cp ran-unittests:/oai-ran/build/Testing/Temporary/LastTest.log .')
|
||||
archiveArtifact(cmd, ctx, f'{lSourcePath}/LastTest.log')
|
||||
cmd.run('docker cp ran-unittests:/oai-ran/build/Testing/Temporary/LastTestsFailed.log .')
|
||||
@@ -644,7 +645,7 @@ class Containerize():
|
||||
logging.error('\u001B[1m Undeploying objects Failed\u001B[0m')
|
||||
return success
|
||||
|
||||
def AnalyzeRTStatsObject(self, HTML, node, ctx, thresholds, service=None, stats_files=None):
|
||||
def AnalyzeRTStatsObject(self, HTML, node, ctx, thresholds, service=None):
|
||||
logging.info(f'Analyzing realtime stats from server: {node}')
|
||||
yaml = self.yamlPath.strip('/')
|
||||
wd = f'{self.workspace}/{yaml}'
|
||||
@@ -660,20 +661,12 @@ class Containerize():
|
||||
raise RuntimeError(f"Requested service {s} not found among services: {deployed_services}")
|
||||
logging.info(f"Analyzing deployed service '{s}'")
|
||||
# similar to BuildRunTests(), use docker cp to avoid problems with permissions
|
||||
local_files = []
|
||||
for sf in stats_files:
|
||||
basename = os.path.basename(sf)
|
||||
ret = cmd.run(f'docker compose -f {wd_yaml} cp {s}:{sf} {wd}/')
|
||||
if ret.returncode != 0:
|
||||
logging.error(f"Cannot retrieve {s}:{sf}")
|
||||
return False
|
||||
file = archiveArtifact(cmd, ctx, f"{wd}/{basename}")
|
||||
if not file:
|
||||
logging.error(f"Cannot retrieve file {basename}")
|
||||
return False
|
||||
local_files.append(file)
|
||||
cmd.run(f'docker compose -f {wd_yaml} cp {s}:/opt/oai-gnb/nrL1_stats.log {wd}/')
|
||||
l1_file = archiveArtifact(cmd, ctx, f"{wd}/nrL1_stats.log")
|
||||
cmd.run(f'docker compose -f {wd_yaml} cp {s}:/opt/oai-gnb/nrMAC_stats.log {wd}/')
|
||||
mac_file = archiveArtifact(cmd, ctx, f"{wd}/nrMAC_stats.log")
|
||||
|
||||
logging.info(f"check against thresholds from {thresholds}")
|
||||
success, datalog_rt_stats = cls_analysis.Analysis.analyze_rt_stats(thresholds, local_files)
|
||||
success, datalog_rt_stats = cls_analysis.Analysis.analyze_rt_stats(thresholds, l1_file, mac_file)
|
||||
HTML.CreateHtmlDataLogTable(datalog_rt_stats)
|
||||
return success
|
||||
|
||||
@@ -35,6 +35,7 @@ class HTMLManagement():
|
||||
|
||||
self.repository = ''
|
||||
self.branch = ''
|
||||
self.commitID = ''
|
||||
|
||||
self.nbTestXMLfiles = 0
|
||||
self.htmlTabRefs = []
|
||||
@@ -75,12 +76,12 @@ class HTMLManagement():
|
||||
self.htmlFile.write(' <tr style="border-collapse: collapse; border: none;">\n')
|
||||
self.htmlFile.write(' <td style="border-collapse: collapse; border: none;">\n')
|
||||
self.htmlFile.write(' <a href="http://www.openairinterface.org/">\n')
|
||||
self.htmlFile.write(' <img src="https://raw.githubusercontent.com/duranta-project/governance/main/logos/Duranta-Logo-Color.png" alt="" border="none" style="margin-right: 2rem;" width=150>\n')
|
||||
self.htmlFile.write(' <img src="http://www.openairinterface.org/wp-content/uploads/2016/03/cropped-oai_final_logo2.png" alt="" border="none" height=50 width=150>\n')
|
||||
self.htmlFile.write(' </img>\n')
|
||||
self.htmlFile.write(' </a>\n')
|
||||
self.htmlFile.write(' </td>\n')
|
||||
self.htmlFile.write(' <td style="border-collapse: collapse; border: none; vertical-align: center;">\n')
|
||||
self.htmlFile.write(' <b><font size = "6">TEMPLATE_JOB_NAME -- Build-ID: TEMPLATE_BUILD_ID</font></b>\n')
|
||||
self.htmlFile.write(' <b><font size = "6">Job Summary -- Job: TEMPLATE_JOB_NAME -- Build-ID: TEMPLATE_BUILD_ID</font></b>\n')
|
||||
self.htmlFile.write(' </td>\n')
|
||||
self.htmlFile.write(' </tr>\n')
|
||||
self.htmlFile.write(' </table>\n')
|
||||
@@ -99,13 +100,7 @@ class HTMLManagement():
|
||||
self.htmlFile.write(' <td bgcolor = "lightcyan" > <span class="glyphicon glyphicon-log-out"></span> Test Branch </td>\n')
|
||||
self.htmlFile.write(' <td>' + self.branch + '</td>\n')
|
||||
self.htmlFile.write(' </tr>\n')
|
||||
commit_id = subprocess.check_output("git log -n1 --pretty=format:\"%H\" ", shell=True, universal_newlines=True)
|
||||
commit_id = commit_id.strip()
|
||||
self.htmlFile.write(' <tr>\n')
|
||||
self.htmlFile.write(' <td bgcolor = "lightcyan" > <span class="glyphicon glyphicon-tag"></span> Commit ID </td>\n')
|
||||
self.htmlFile.write(' <td>' + commit_id + '</td>\n')
|
||||
self.htmlFile.write(' </tr>\n')
|
||||
commit_message = subprocess.check_output("git log -n1 --pretty=format:\"%s\" ", shell=True, universal_newlines=True)
|
||||
commit_message = subprocess.check_output("git log -n1 --pretty=format:\"%s\" " + self.commitID, shell=True, universal_newlines=True)
|
||||
commit_message = commit_message.strip()
|
||||
self.htmlFile.write(' <tr>\n')
|
||||
self.htmlFile.write(' <td bgcolor = "lightcyan" > <span class="glyphicon glyphicon-comment"></span> Commit Message </td>\n')
|
||||
|
||||
@@ -276,38 +276,6 @@ def Deploy_Physim(ctx, HTML, node, workdir, script, options):
|
||||
logging.error('\u001B[1m Physical Simulator Fail\u001B[0m')
|
||||
return test_status
|
||||
|
||||
def DeployWithScript(HTML, node, script, options, tag):
|
||||
logging.debug(f'Deploy with script {script} on node: {node}')
|
||||
opt = options.replace('%%image_tag%%', tag)
|
||||
with cls_cmd.getConnection(node) as c:
|
||||
ret = c.exec_script(script, 600, opt)
|
||||
logging.debug(f'"{script}" finished with code {ret.returncode}, output:\n{ret.stdout}')
|
||||
HTML.CreateHtmlTestRowQueue(f'on node {node}', 'OK' if ret.returncode == 0 else 'KO', [f'{ret.stdout}'])
|
||||
return ret.returncode == 0
|
||||
|
||||
def UndeployWithScript(HTML, ctx, node, script, options):
|
||||
logging.debug(f'Undeploy with script {script} on node: {node}')
|
||||
remote_dir = '/tmp/undeploy'
|
||||
opt = options.replace('%%log_dir%%', remote_dir)
|
||||
with cls_cmd.getConnection(node) as c:
|
||||
# create a directory for log collection
|
||||
c.run(f'rm -rf {remote_dir}')
|
||||
ret = c.run(f'mkdir {remote_dir}')
|
||||
if ret.returncode != 0:
|
||||
logging.error("cannot create directory for log collection")
|
||||
return False
|
||||
ret = c.exec_script(script, 600, opt)
|
||||
logging.debug(f'"{script}" finished with code {ret.returncode}, output:\n{ret.stdout}')
|
||||
ret_ls = c.run(f'ls -1 {remote_dir}')
|
||||
files = ret_ls.stdout.strip().splitlines()
|
||||
log_files = []
|
||||
for lf in files:
|
||||
name = archiveArtifact(c, ctx, f'{remote_dir}/{lf}')
|
||||
log_files.append(name)
|
||||
msg = "Log files:\n" + "\n".join([os.path.basename(lf) for lf in log_files])
|
||||
HTML.CreateHtmlTestRowQueue(f'on node {node}', 'OK' if ret.returncode == 0 else 'KO', [f'{ret.stdout}\n\n{msg}'])
|
||||
return ret.returncode == 0
|
||||
|
||||
#-----------------------------------------------------------
|
||||
# OaiCiTest Class Definition
|
||||
#-----------------------------------------------------------
|
||||
|
||||
@@ -184,8 +184,7 @@ L1s = (
|
||||
{
|
||||
num_cc = 1;
|
||||
tr_n_preference = "local_mac";
|
||||
prach_dtx_threshold = 200;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
RUs = (
|
||||
|
||||
@@ -184,8 +184,7 @@ L1s = (
|
||||
{
|
||||
num_cc = 1;
|
||||
tr_n_preference = "local_mac";
|
||||
prach_dtx_threshold = 200;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
RUs = (
|
||||
|
||||
@@ -216,7 +216,6 @@ L1s =
|
||||
{
|
||||
num_cc = 1;
|
||||
tr_n_preference = "local_mac";
|
||||
prach_dtx_threshold = 200;
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
@@ -216,7 +216,6 @@ L1s =
|
||||
{
|
||||
num_cc = 1;
|
||||
tr_n_preference = "local_mac";
|
||||
prach_dtx_threshold = 200;
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
@@ -216,7 +216,6 @@ L1s =
|
||||
{
|
||||
num_cc = 1;
|
||||
tr_n_preference = "local_mac";
|
||||
prach_dtx_threshold = 200;
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
@@ -216,7 +216,6 @@ L1s =
|
||||
{
|
||||
num_cc = 1;
|
||||
tr_n_preference = "local_mac";
|
||||
prach_dtx_threshold = 200;
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
@@ -1,240 +0,0 @@
|
||||
# SPDX-License-Identifier: LicenseRef-CSSL-1.0
|
||||
|
||||
Active_gNBs = ( "gNB-OAI-DU");
|
||||
# Asn1_verbosity, choice in: none, info, annoying
|
||||
Asn1_verbosity = "none";
|
||||
|
||||
gNBs =
|
||||
(
|
||||
{
|
||||
////////// Identification parameters:
|
||||
gNB_ID = 0xe00;
|
||||
gNB_DU_ID = 0xe00;
|
||||
gNB_name = "gNB-OAI-DU";
|
||||
|
||||
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||
tracking_area_code = 1;
|
||||
plmn_list = ({ mcc = 208; mnc = 97; mnc_length = 2; snssaiList = ( { sst = 1; }); });
|
||||
|
||||
nr_cellid = 1;
|
||||
|
||||
////////// Physical parameters:
|
||||
|
||||
pdsch_AntennaPorts_XP = 2;
|
||||
pdsch_AntennaPorts_N1 = 2;
|
||||
maxMIMO_layers = 4;
|
||||
pusch_AntennaPorts = 4;
|
||||
do_CSIRS = 1;
|
||||
do_SRS = "periodic";
|
||||
force_UL256qam_off = 1;
|
||||
|
||||
servingCellConfigCommon = (
|
||||
{
|
||||
#spCellConfigCommon
|
||||
physCellId = 0;
|
||||
# downlinkConfigCommon
|
||||
#frequencyInfoDL
|
||||
# center frequency = 4049.76 MHz
|
||||
# selected SSB frequency = 4049.76 MHz
|
||||
absoluteFrequencySSB = 669984;
|
||||
dl_frequencyBand = 77;
|
||||
# frequency point A = 4000.62 MHz
|
||||
dl_absoluteFrequencyPointA = 666708;
|
||||
#scs-SpecificCarrierList
|
||||
dl_offstToCarrier = 0;
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
dl_subcarrierSpacing = 1;
|
||||
dl_carrierBandwidth = 273;
|
||||
#initialDownlinkBWP
|
||||
#genericParameters
|
||||
initialDLBWPlocationAndBandwidth = 1099; #38.101-1 Table 5.3.2-1
|
||||
#
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
initialDLBWPsubcarrierSpacing = 1;
|
||||
#pdcch-ConfigCommon
|
||||
initialDLBWPcontrolResourceSetZero = 11;
|
||||
initialDLBWPsearchSpaceZero = 0;
|
||||
|
||||
#uplinkConfigCommon
|
||||
#frequencyInfoUL
|
||||
ul_frequencyBand = 77;
|
||||
#scs-SpecificCarrierList
|
||||
ul_offstToCarrier = 0;
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
ul_subcarrierSpacing = 1;
|
||||
ul_carrierBandwidth = 273;
|
||||
pMax = 23;
|
||||
#initialUplinkBWP
|
||||
#genericParameters
|
||||
initialULBWPlocationAndBandwidth = 1099;
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
initialULBWPsubcarrierSpacing = 1;
|
||||
#rach-ConfigCommon
|
||||
#rach-ConfigGeneric
|
||||
prach_ConfigurationIndex = 159;
|
||||
#prach_msg1_FDM
|
||||
#0 = one, 1=two, 2=four, 3=eight
|
||||
prach_msg1_FDM = 0;
|
||||
prach_msg1_FrequencyStart = 0;
|
||||
zeroCorrelationZoneConfig = 0;
|
||||
preambleReceivedTargetPower = -100;
|
||||
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
|
||||
preambleTransMax = 7;
|
||||
#powerRampingStep
|
||||
# 0=dB0,1=dB2,2=dB4,3=dB6
|
||||
powerRampingStep = 2;
|
||||
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
|
||||
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
|
||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
|
||||
#one (0..15) 4,8,12,16,...60,64
|
||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
|
||||
#ra_ContentionResolutionTimer
|
||||
#(0..7) 8,16,24,32,40,48,56,64
|
||||
ra_ContentionResolutionTimer = 7;
|
||||
rsrp_ThresholdSSB = 19;
|
||||
#prach-RootSequenceIndex_PR
|
||||
#1 = 839, 2 = 139
|
||||
prach_RootSequenceIndex_PR = 2;
|
||||
prach_RootSequenceIndex = 1;
|
||||
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
|
||||
#
|
||||
msg1_SubcarrierSpacing = 1,
|
||||
# restrictedSetConfig
|
||||
# 0=unrestricted, 1=restricted type A, 2=restricted type B
|
||||
restrictedSetConfig = 0,
|
||||
|
||||
# this is the offset between the last PRACH preamble power and the Msg3 PUSCH, 2 times the field value in dB
|
||||
msg3_DeltaPreamble = 2;
|
||||
p0_NominalWithGrant = -100;
|
||||
|
||||
# pucch-ConfigCommon setup :
|
||||
# pucchGroupHopping
|
||||
# 0 = neither, 1= group hopping, 2=sequence hopping
|
||||
pucchGroupHopping = 0;
|
||||
hoppingId = 0;
|
||||
p0_nominal = -96;
|
||||
|
||||
ssb_PositionsInBurst_Bitmap = 0x1;
|
||||
|
||||
# ssb_periodicityServingCell
|
||||
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
|
||||
ssb_periodicityServingCell = 2;
|
||||
|
||||
# dmrs_TypeA_position
|
||||
# 0 = pos2, 1 = pos3
|
||||
dmrs_TypeA_Position = 0;
|
||||
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
subcarrierSpacing = 1;
|
||||
|
||||
|
||||
#tdd-UL-DL-ConfigurationCommon
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
referenceSubcarrierSpacing = 1;
|
||||
# pattern1
|
||||
# dl_UL_TransmissionPeriodicity
|
||||
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
|
||||
dl_UL_TransmissionPeriodicity = 5;
|
||||
nrofDownlinkSlots = 3;
|
||||
nrofDownlinkSymbols = 8;
|
||||
nrofUplinkSlots = 1;
|
||||
nrofUplinkSymbols = 2;
|
||||
|
||||
ssPBCH_BlockPower = -11;
|
||||
}
|
||||
|
||||
);
|
||||
|
||||
# ------- SCTP definitions
|
||||
SCTP :
|
||||
{
|
||||
# Number of streams to use in input/output
|
||||
SCTP_INSTREAMS = 2;
|
||||
SCTP_OUTSTREAMS = 2;
|
||||
};
|
||||
}
|
||||
);
|
||||
|
||||
MACRLCs = (
|
||||
{
|
||||
tr_s_preference = "local_L1";
|
||||
tr_n_preference = "f1";
|
||||
local_n_address = "172.21.10.20";
|
||||
remote_n_address = "172.21.6.112";
|
||||
local_n_portd = 2153;
|
||||
remote_n_portd = 2153;
|
||||
pusch_TargetSNRx10 = 230;
|
||||
pucch_TargetSNRx10 = 250;
|
||||
pusch_FailureThres = 100;
|
||||
dl_min_mcs = 20;
|
||||
}
|
||||
);
|
||||
|
||||
L1s = (
|
||||
{
|
||||
tr_n_preference = "local_mac";
|
||||
prach_dtx_threshold = 130
|
||||
pucch0_dtx_threshold = 80;
|
||||
pusch_dtx_threshold = -100;
|
||||
tx_amp_backoff_dB = 3;
|
||||
L1_rx_thread_core = 11;
|
||||
L1_tx_thread_core = 12;
|
||||
phase_compensation = 0; # needs to match O-RU configuration
|
||||
}
|
||||
);
|
||||
|
||||
RUs = (
|
||||
{
|
||||
local_rf = "no";
|
||||
nb_tx = 4;
|
||||
nb_rx = 4;
|
||||
att_tx = 0;
|
||||
att_rx = 0;
|
||||
bands = [77];
|
||||
max_pdschReferenceSignalPower = -27;
|
||||
max_rxgain = 75;
|
||||
sf_extension = 0;
|
||||
eNB_instances = [0];
|
||||
ru_thread_core = 10;
|
||||
sl_ahead = 8;
|
||||
tr_preference = "raw_if4p5"; # important: activate FHI7.2
|
||||
do_precoding = 0; # needs to match O-RU configuration
|
||||
}
|
||||
);
|
||||
|
||||
log_config :
|
||||
{
|
||||
global_log_level = "info";
|
||||
};
|
||||
|
||||
fhi_72 = {
|
||||
dpdk_devices = ("0000:41:11.0", "0000:41:11.1");
|
||||
dpdk_iova_mode = "VA";
|
||||
system_core = 7;
|
||||
io_core = 8;
|
||||
worker_cores = (9);
|
||||
ru_addr = ("98:ae:71:04:83:e3", "98:ae:71:04:83:e3");
|
||||
mtu = 9600;
|
||||
fh_config = ({
|
||||
T1a_cp_dl = (285, 470);
|
||||
T1a_cp_ul = (285, 429);
|
||||
T1a_up = (125, 350);
|
||||
Ta4 = (110, 180);
|
||||
ru_config = {
|
||||
iq_width = 9;
|
||||
iq_width_prach = 9;
|
||||
};
|
||||
});
|
||||
};
|
||||
|
||||
nrLDPC_coding_aal : {
|
||||
dpdk_dev : "0000:01:00.0";
|
||||
dpdk_core_list : "18-19";
|
||||
is_t2 : 1;
|
||||
};
|
||||
@@ -25,7 +25,7 @@ gNBs =
|
||||
////////// Physical parameters:
|
||||
|
||||
min_rxtxtime = 2;
|
||||
do_SRS = "periodic";
|
||||
do_SRS = 1;
|
||||
|
||||
servingCellConfigCommon = (
|
||||
{
|
||||
|
||||
@@ -1,247 +0,0 @@
|
||||
# SPDX-License-Identifier: LicenseRef-CSSL-1.0
|
||||
|
||||
Active_gNBs = ( "gNB-OAI-DU");
|
||||
# Asn1_verbosity, choice in: none, info, annoying
|
||||
Asn1_verbosity = "none";
|
||||
gNBs =
|
||||
(
|
||||
{
|
||||
////////// Identification parameters:
|
||||
gNB_ID = 0xe00;
|
||||
gNB_DU_ID = 0xe00;
|
||||
gNB_name = "gNB-OAI-DU";
|
||||
|
||||
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||
tracking_area_code = 1;
|
||||
plmn_list = ({ mcc = 208; mnc = 97; mnc_length = 2; snssaiList = ( { sst = 1; }); });
|
||||
|
||||
nr_cellid = 1;
|
||||
|
||||
////////// Physical parameters:
|
||||
|
||||
pdsch_AntennaPorts_XP = 2;
|
||||
pdsch_AntennaPorts_N1 = 2;
|
||||
pusch_AntennaPorts = 4;
|
||||
do_CSIRS = 1;
|
||||
|
||||
servingCellConfigCommon = (
|
||||
{
|
||||
#spCellConfigCommon
|
||||
|
||||
physCellId = 1;
|
||||
# n_TimingAdvanceOffset = 0;
|
||||
# downlinkConfigCommon
|
||||
#frequencyInfoDL
|
||||
absoluteFrequencySSB = 663360;
|
||||
dl_frequencyBand = 77;
|
||||
dl_absoluteFrequencyPointA = 660084;
|
||||
#scs-SpecificCarrierList
|
||||
dl_offstToCarrier = 0;
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
dl_subcarrierSpacing = 1;
|
||||
dl_carrierBandwidth = 273;
|
||||
#initialDownlinkBWP
|
||||
#genericParameters
|
||||
initialDLBWPlocationAndBandwidth = 1099; #38.101-1 Table 5.3.2-1
|
||||
#
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
initialDLBWPsubcarrierSpacing = 1;
|
||||
#pdcch-ConfigCommon
|
||||
initialDLBWPcontrolResourceSetZero = 10;
|
||||
initialDLBWPsearchSpaceZero = 0;
|
||||
|
||||
#uplinkConfigCommon
|
||||
#frequencyInfoUL
|
||||
ul_frequencyBand = 77;
|
||||
#scs-SpecificCarrierList
|
||||
ul_offstToCarrier = 0;
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
ul_subcarrierSpacing = 1;
|
||||
ul_carrierBandwidth = 273;
|
||||
pMax = 23;
|
||||
#initialUplinkBWP
|
||||
#genericParameters
|
||||
initialULBWPlocationAndBandwidth = 1099;
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
initialULBWPsubcarrierSpacing = 1;
|
||||
#rach-ConfigCommon
|
||||
#rach-ConfigGeneric
|
||||
prach_ConfigurationIndex = 159;
|
||||
#prach_msg1_FDM
|
||||
#0 = one, 1=two, 2=four, 3=eight
|
||||
prach_msg1_FDM = 0;
|
||||
prach_msg1_FrequencyStart = 0;
|
||||
zeroCorrelationZoneConfig = 0;
|
||||
preambleReceivedTargetPower = -100;
|
||||
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
|
||||
preambleTransMax = 8;
|
||||
#powerRampingStep
|
||||
# 0=dB0,1=dB2,2=dB4,3=dB6
|
||||
powerRampingStep = 3;
|
||||
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
|
||||
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
|
||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 3;
|
||||
#oneHalf (0..15) 4,8,12,16,...60,64
|
||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
|
||||
#ra_ContentionResolutionTimer
|
||||
#(0..7) 8,16,24,32,40,48,56,64
|
||||
ra_ContentionResolutionTimer = 7;
|
||||
rsrp_ThresholdSSB = 19;
|
||||
#prach-RootSequenceIndex_PR
|
||||
#1 = 839, 2 = 139
|
||||
prach_RootSequenceIndex_PR = 2;
|
||||
prach_RootSequenceIndex = 1;
|
||||
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
|
||||
#
|
||||
msg1_SubcarrierSpacing = 1,
|
||||
# restrictedSetConfig
|
||||
# 0=unrestricted, 1=restricted type A, 2=restricted type B
|
||||
restrictedSetConfig = 0,
|
||||
|
||||
# this is the offset between the last PRACH preamble power and the Msg3 PUSCH, 2 times the field value in dB
|
||||
msg3_DeltaPreamble = 2;
|
||||
p0_NominalWithGrant = -96;
|
||||
|
||||
# pucch-ConfigCommon setup :
|
||||
# pucchGroupHopping
|
||||
# 0 = neither, 1= group hopping, 2=sequence hopping
|
||||
pucchGroupHopping = 0;
|
||||
hoppingId = 0;
|
||||
p0_nominal = -96;
|
||||
ssb_PositionsInBurst_Bitmap = 0x1;
|
||||
|
||||
# ssb_periodicityServingCell
|
||||
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
|
||||
ssb_periodicityServingCell = 2;
|
||||
|
||||
# dmrs_TypeA_position
|
||||
# 0 = pos2, 1 = pos3
|
||||
dmrs_TypeA_Position = 0;
|
||||
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
subcarrierSpacing = 1;
|
||||
|
||||
|
||||
#tdd-UL-DL-ConfigurationCommon
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
referenceSubcarrierSpacing = 1;
|
||||
# pattern1
|
||||
# dl_UL_TransmissionPeriodicity
|
||||
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
|
||||
dl_UL_TransmissionPeriodicity = 5;
|
||||
nrofDownlinkSlots = 3;
|
||||
nrofDownlinkSymbols = 6;
|
||||
nrofUplinkSlots = 1;
|
||||
nrofUplinkSymbols = 4;
|
||||
|
||||
ssPBCH_BlockPower = -11;
|
||||
}
|
||||
|
||||
);
|
||||
|
||||
|
||||
# ------- SCTP definitions
|
||||
SCTP :
|
||||
{
|
||||
# Number of streams to use in input/output
|
||||
SCTP_INSTREAMS = 2;
|
||||
SCTP_OUTSTREAMS = 2;
|
||||
};
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
MACRLCs = (
|
||||
{
|
||||
tr_s_preference = "local_L1";
|
||||
tr_n_preference = "f1";
|
||||
local_n_address = "172.21.10.20";
|
||||
remote_n_address = "172.21.6.112";
|
||||
local_n_portd = 2153;
|
||||
remote_n_portd = 2153;
|
||||
pusch_TargetSNRx10 = 250;
|
||||
pucch_TargetSNRx10 = 220;
|
||||
pusch_FailureThres = 100;
|
||||
dl_min_mcs = 20;
|
||||
}
|
||||
);
|
||||
|
||||
L1s = (
|
||||
{
|
||||
tr_n_preference = "local_mac";
|
||||
prach_dtx_threshold = 100;
|
||||
pucch0_dtx_threshold = 10;
|
||||
pusch_dtx_threshold = 10;
|
||||
max_ldpc_iterations = 15;
|
||||
tx_amp_backoff_dB = 12; # needs to match O-RU configuration
|
||||
L1_rx_thread_core = 10;
|
||||
L1_tx_thread_core = 11; # relevant after merge of l1_tx_thread
|
||||
phase_compensation = 0; # needs to match O-RU configuration
|
||||
}
|
||||
);
|
||||
|
||||
RUs = (
|
||||
{
|
||||
local_rf = "no";
|
||||
nb_tx = 4;
|
||||
nb_rx = 4;
|
||||
att_tx = 0
|
||||
att_rx = 0;
|
||||
bands = [77];
|
||||
max_pdschReferenceSignalPower = -27;
|
||||
max_rxgain = 75;
|
||||
sf_extension = 0;
|
||||
eNB_instances = [0];
|
||||
ru_thread_core = 12;
|
||||
sl_ahead = 5;
|
||||
tr_preference = "raw_if4p5"; # important: activate FHI7.2
|
||||
do_precoding = 0; # needs to match O-RU configuration
|
||||
|
||||
}
|
||||
);
|
||||
|
||||
log_config :
|
||||
{
|
||||
global_log_level ="info";
|
||||
hw_log_level ="info";
|
||||
phy_log_level ="info";
|
||||
mac_log_level ="info";
|
||||
rlc_log_level ="info";
|
||||
pdcp_log_level ="info";
|
||||
rrc_log_level ="info";
|
||||
ngap_log_level ="info";
|
||||
f1ap_log_level ="info";
|
||||
};
|
||||
|
||||
fhi_72 = {
|
||||
dpdk_devices = ("0000:41:11.0", "0000:41:11.1");
|
||||
system_core = 7;
|
||||
io_core = 8;
|
||||
worker_cores = (9);
|
||||
dpdk_iova_mode = "VA";
|
||||
ru_addr = ("8c:1f:64:d1:11:c0","8c:1f:64:d1:11:c0");
|
||||
mtu = 9216; # check if xran uses this properly
|
||||
file_prefix = "fhi_72";
|
||||
fh_config = ({
|
||||
T1a_cp_dl = (419, 470);
|
||||
T1a_cp_ul = (285, 336);
|
||||
T1a_up = (294, 345);
|
||||
Ta4 = (0, 200);
|
||||
ru_config = {
|
||||
iq_width = 9;
|
||||
iq_width_prach = 9;
|
||||
};
|
||||
});
|
||||
};
|
||||
|
||||
nrLDPC_coding_aal : {
|
||||
dpdk_dev : "0000:01:00.0";
|
||||
dpdk_core_list : "18-19";
|
||||
is_t2 : 1;
|
||||
};
|
||||
@@ -1,228 +0,0 @@
|
||||
# SPDX-License-Identifier: LicenseRef-CSSL-1.0
|
||||
|
||||
Active_gNBs = ( "gNB-OAI-DU");
|
||||
# Asn1_verbosity, choice in: none, info, annoying
|
||||
Asn1_verbosity = "none";
|
||||
|
||||
gNBs =
|
||||
(
|
||||
{
|
||||
////////// Identification parameters:
|
||||
gNB_ID = 0xe00;
|
||||
gNB_DU_ID = 0xe00;
|
||||
gNB_name = "gNB-OAI-DU";
|
||||
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||
tracking_area_code = 1;
|
||||
plmn_list = ({ mcc = 208; mnc = 97; mnc_length = 2; snssaiList = ( { sst = 1; }); });
|
||||
nr_cellid = 1;
|
||||
////////// Physical parameters:
|
||||
pdsch_AntennaPorts_XP = 2;
|
||||
pdsch_AntennaPorts_N1 = 2;
|
||||
maxMIMO_layers = 4; #2;
|
||||
pusch_AntennaPorts = 4;
|
||||
do_CSIRS = 1;
|
||||
servingCellConfigCommon = (
|
||||
{
|
||||
#spCellConfigCommon
|
||||
physCellId = 0;
|
||||
# n_TimingAdvanceOffset = 0;
|
||||
# downlinkConfigCommon
|
||||
#frequencyInfoDL
|
||||
# center frequency = 3350.01 MHz
|
||||
# selected SSB frequency = 3349.92 MHz
|
||||
absoluteFrequencySSB = 623328;
|
||||
dl_frequencyBand = 78;
|
||||
# frequency point A = 3300.87 MHz
|
||||
dl_absoluteFrequencyPointA = 620058;
|
||||
#scs-SpecificCarrierList
|
||||
dl_offstToCarrier = 0;
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
dl_subcarrierSpacing = 1;
|
||||
dl_carrierBandwidth = 273;
|
||||
#initialDownlinkBWP
|
||||
#genericParameters
|
||||
initialDLBWPlocationAndBandwidth = 1099; #38.101-1 Table 5.3.2-1
|
||||
#
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
initialDLBWPsubcarrierSpacing = 1;
|
||||
#pdcch-ConfigCommon
|
||||
initialDLBWPcontrolResourceSetZero = 11;
|
||||
initialDLBWPsearchSpaceZero = 0;
|
||||
#uplinkConfigCommon
|
||||
#frequencyInfoUL
|
||||
ul_frequencyBand = 78;
|
||||
#scs-SpecificCarrierList
|
||||
ul_offstToCarrier = 0;
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
ul_subcarrierSpacing = 1;
|
||||
ul_carrierBandwidth = 273;
|
||||
pMax = 23;
|
||||
#initialUplinkBWP
|
||||
#genericParameters
|
||||
initialULBWPlocationAndBandwidth = 1099;
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
initialULBWPsubcarrierSpacing = 1;
|
||||
#rach-ConfigCommon
|
||||
#rach-ConfigGeneric
|
||||
prach_ConfigurationIndex = 159;
|
||||
#prach_msg1_FDM
|
||||
#0 = one, 1=two, 2=four, 3=eight
|
||||
prach_msg1_FDM = 0;
|
||||
prach_msg1_FrequencyStart = 22;
|
||||
zeroCorrelationZoneConfig = 15;
|
||||
preambleReceivedTargetPower = -104;
|
||||
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
|
||||
preambleTransMax = 7;
|
||||
#powerRampingStep
|
||||
# 0=dB0,1=dB2,2=dB4,3=dB6
|
||||
powerRampingStep = 2;
|
||||
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
|
||||
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
|
||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
|
||||
#one (0..15) 4,8,12,16,...60,64
|
||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
|
||||
#ra_ContentionResolutionTimer
|
||||
#(0..7) 8,16,24,32,40,48,56,64
|
||||
ra_ContentionResolutionTimer = 7;
|
||||
rsrp_ThresholdSSB = 19;
|
||||
#prach-RootSequenceIndex_PR
|
||||
#1 = 839, 2 = 139
|
||||
prach_RootSequenceIndex_PR = 2;
|
||||
prach_RootSequenceIndex = 1;
|
||||
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
|
||||
#
|
||||
msg1_SubcarrierSpacing = 1,
|
||||
# restrictedSetConfig
|
||||
# 0=unrestricted, 1=restricted type A, 2=restricted type B
|
||||
restrictedSetConfig = 0,
|
||||
# this is the offset between the last PRACH preamble power and the Msg3 PUSCH, 2 times the field value in dB
|
||||
msg3_DeltaPreamble = 2;
|
||||
p0_NominalWithGrant = -96;
|
||||
# pucch-ConfigCommon setup :
|
||||
# pucchGroupHopping
|
||||
# 0 = neither, 1= group hopping, 2=sequence hopping
|
||||
pucchGroupHopping = 0;
|
||||
hoppingId = 0;
|
||||
p0_nominal = -96;
|
||||
ssb_PositionsInBurst_Bitmap = 0x1;
|
||||
# ssb_periodicityServingCell
|
||||
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
|
||||
ssb_periodicityServingCell = 2;
|
||||
# dmrs_TypeA_position
|
||||
# 0 = pos2, 1 = pos3
|
||||
dmrs_TypeA_Position = 0;
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
subcarrierSpacing = 1;
|
||||
#tdd-UL-DL-ConfigurationCommon
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
referenceSubcarrierSpacing = 1;
|
||||
# pattern1
|
||||
# dl_UL_TransmissionPeriodicity
|
||||
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
|
||||
dl_UL_TransmissionPeriodicity = 5;
|
||||
nrofDownlinkSlots = 3;
|
||||
nrofDownlinkSymbols = 8;
|
||||
nrofUplinkSlots = 1;
|
||||
nrofUplinkSymbols = 2;
|
||||
ssPBCH_BlockPower = -11;
|
||||
}
|
||||
);
|
||||
|
||||
# ------- SCTP definitions
|
||||
SCTP :
|
||||
{
|
||||
# Number of streams to use in input/output
|
||||
SCTP_INSTREAMS = 2;
|
||||
SCTP_OUTSTREAMS = 2;
|
||||
};
|
||||
|
||||
}
|
||||
);
|
||||
|
||||
MACRLCs = (
|
||||
{
|
||||
tr_s_preference = "local_L1";
|
||||
tr_n_preference = "f1";
|
||||
local_n_address = "172.21.10.20";
|
||||
remote_n_address = "172.21.6.112";
|
||||
local_n_portd = 2153;
|
||||
remote_n_portd = 2153;
|
||||
pusch_TargetSNRx10 = 200;
|
||||
pucch_TargetSNRx10 = 250;
|
||||
pusch_FailureThres = 100;
|
||||
dl_min_mcs = 20;
|
||||
}
|
||||
);
|
||||
|
||||
L1s = (
|
||||
{
|
||||
tr_n_preference = "local_mac";
|
||||
prach_dtx_threshold = 120
|
||||
pucch0_dtx_threshold = 80;
|
||||
pusch_dtx_threshold = 10;
|
||||
max_ldpc_iterations = 15;
|
||||
tx_amp_backoff_dB = 20; # needs to match O-RU configuration
|
||||
L1_rx_thread_core = 11;
|
||||
L1_tx_thread_core = 12;
|
||||
phase_compensation = 1; # needs to match O-RU configuration
|
||||
}
|
||||
);
|
||||
|
||||
RUs = (
|
||||
{
|
||||
local_rf = "no";
|
||||
nb_tx = 4;
|
||||
nb_rx = 4;
|
||||
att_tx = 0;
|
||||
att_rx = 0;
|
||||
bands = [78];
|
||||
max_pdschReferenceSignalPower = -27;
|
||||
max_rxgain = 75;
|
||||
sf_extension = 0;
|
||||
eNB_instances = [0];
|
||||
ru_thread_core = 10;
|
||||
sl_ahead = 8;
|
||||
tr_preference = "raw_if4p5"; # important: activate FHI7.2
|
||||
do_precoding = 0; # needs to match O-RU configuration
|
||||
}
|
||||
);
|
||||
|
||||
log_config :
|
||||
{
|
||||
global_log_level = "info";
|
||||
};
|
||||
|
||||
fhi_72 = {
|
||||
dpdk_devices = ("0000:41:11.0", "0000:41:11.1"); # one VF can be used as well
|
||||
dpdk_iova_mode = "VA";
|
||||
system_core = 7;
|
||||
io_core = 8;
|
||||
worker_cores = (9);
|
||||
ru_addr = ("e8:c7:4f:25:81:b3", "e8:c7:4f:25:81:b3");
|
||||
mtu = 9600;
|
||||
fh_config = ({
|
||||
T1a_cp_dl = (285, 429);
|
||||
T1a_cp_ul = (285, 429);
|
||||
T1a_up = (96, 196);
|
||||
Ta4 = (110, 180);
|
||||
ru_config = {
|
||||
iq_width = 9;
|
||||
iq_width_prach = 9;
|
||||
};
|
||||
prach_config = {
|
||||
kbar = 0;
|
||||
};
|
||||
});
|
||||
};
|
||||
|
||||
nrLDPC_coding_aal : {
|
||||
dpdk_dev : "0000:01:00.0";
|
||||
dpdk_core_list : "18-19";
|
||||
is_t2 : 1;
|
||||
};
|
||||
@@ -1,231 +0,0 @@
|
||||
# SPDX-License-Identifier: LicenseRef-CSSL-1.0
|
||||
|
||||
Active_gNBs = ( "gNB-OAI-DU");
|
||||
# Asn1_verbosity, choice in: none, info, annoying
|
||||
Asn1_verbosity = "none";
|
||||
|
||||
gNBs =
|
||||
(
|
||||
{
|
||||
////////// Identification parameters:
|
||||
gNB_ID = 0xe00;
|
||||
gNB_DU_ID = 0xe00;
|
||||
gNB_name = "gNB-OAI-DU";
|
||||
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||
tracking_area_code = 1;
|
||||
plmn_list = ({ mcc = 208; mnc = 97; mnc_length = 2; snssaiList = ( { sst = 1; }); });
|
||||
nr_cellid = 1;
|
||||
|
||||
////////// Physical parameters:
|
||||
pdsch_AntennaPorts_XP = 2;
|
||||
pusch_AntennaPorts = 4;
|
||||
pdsch_AntennaPorts_N1 = 2;
|
||||
maxMIMO_layers = 4;
|
||||
do_CSIRS = 1;
|
||||
do_SRS = "periodic";
|
||||
|
||||
servingCellConfigCommon = (
|
||||
{
|
||||
#spCellConfigCommon
|
||||
physCellId = 0;
|
||||
# downlinkConfigCommon
|
||||
#frequencyInfoDL
|
||||
# this is 3300.24 + 134*12*30e3 = 3348.48 MHz (5G NR GSCN: 7741)
|
||||
absoluteFrequencySSB = 649920;
|
||||
dl_frequencyBand = 78;
|
||||
# this is 3300.24 MHz
|
||||
dl_absoluteFrequencyPointA = 646724;
|
||||
#scs-SpecificCarrierList
|
||||
dl_offstToCarrier = 0;
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
dl_subcarrierSpacing = 1;
|
||||
dl_carrierBandwidth = 273;
|
||||
#initialDownlinkBWP
|
||||
#genericParameters
|
||||
# this is RBstart=0,L=162 (275*(275-L+1))+(274-RBstart))
|
||||
initialDLBWPlocationAndBandwidth = 1099;
|
||||
#
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
initialDLBWPsubcarrierSpacing = 1;
|
||||
#pdcch-ConfigCommon
|
||||
initialDLBWPcontrolResourceSetZero = 12;
|
||||
initialDLBWPsearchSpaceZero = 0;
|
||||
#uplinkConfigCommon
|
||||
#frequencyInfoUL
|
||||
ul_frequencyBand = 78;
|
||||
#scs-SpecificCarrierList
|
||||
ul_offstToCarrier = 0;
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
ul_subcarrierSpacing = 1;
|
||||
ul_carrierBandwidth = 273;
|
||||
pMax = 20;
|
||||
#initialUplinkBWP
|
||||
#genericParameters
|
||||
initialULBWPlocationAndBandwidth = 1099;
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
initialULBWPsubcarrierSpacing = 1;
|
||||
#rach-ConfigCommon
|
||||
#rach-ConfigGeneric
|
||||
prach_ConfigurationIndex = 148;
|
||||
#prach_msg1_FDM
|
||||
#0 = one, 1=two, 2=four, 3=eight
|
||||
prach_msg1_FDM = 0;
|
||||
prach_msg1_FrequencyStart = 0;
|
||||
zeroCorrelationZoneConfig = 12;
|
||||
preambleReceivedTargetPower = -96;
|
||||
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
|
||||
preambleTransMax = 6;
|
||||
#powerRampingStep
|
||||
# 0=dB0,1=dB2,2=dB4,3=dB6
|
||||
powerRampingStep = 1;
|
||||
#ra_ReponseWindow
|
||||
#1,2,4,8,10,20,40,80
|
||||
ra_ResponseWindow = 5;
|
||||
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
|
||||
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
|
||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
|
||||
#one (0..15) 4,8,12,16,...60,64
|
||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
|
||||
#ra_ContentionResolutionTimer
|
||||
#(0..7) 8,16,24,32,40,48,56,64
|
||||
ra_ContentionResolutionTimer = 7;
|
||||
rsrp_ThresholdSSB = 19;
|
||||
#prach-RootSequenceIndex_PR
|
||||
#1 = 839, 2 = 139
|
||||
prach_RootSequenceIndex_PR = 2;
|
||||
prach_RootSequenceIndex = 1;
|
||||
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
|
||||
#
|
||||
msg1_SubcarrierSpacing = 1,
|
||||
# restrictedSetConfig
|
||||
# 0=unrestricted, 1=restricted type A, 2=restricted type B
|
||||
restrictedSetConfig = 0,
|
||||
msg3_DeltaPreamble = 1;
|
||||
p0_NominalWithGrant = -90;
|
||||
# pucch-ConfigCommon setup :
|
||||
# pucchGroupHopping
|
||||
# 0 = neither, 1= group hopping, 2=sequence hopping
|
||||
pucchGroupHopping = 0;
|
||||
hoppingId = 40;
|
||||
p0_nominal = -90;
|
||||
# ssb_PositionsInBurs_BitmapPR
|
||||
# 1=short, 2=medium, 3=long
|
||||
ssb_PositionsInBurst_Bitmap = 1;
|
||||
# ssb_periodicityServingCell
|
||||
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
|
||||
ssb_periodicityServingCell = 2;
|
||||
# dmrs_TypeA_position
|
||||
# 0 = pos2, 1 = pos3
|
||||
dmrs_TypeA_Position = 0;
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
subcarrierSpacing = 1;
|
||||
#tdd-UL-DL-ConfigurationCommon
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
referenceSubcarrierSpacing = 1;
|
||||
# pattern1
|
||||
# dl_UL_TransmissionPeriodicity
|
||||
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
|
||||
dl_UL_TransmissionPeriodicity = 5;
|
||||
nrofDownlinkSlots = 3;
|
||||
nrofDownlinkSymbols = 8;
|
||||
nrofUplinkSlots = 1;
|
||||
nrofUplinkSymbols = 2;
|
||||
ssPBCH_BlockPower = -11;
|
||||
}
|
||||
);
|
||||
|
||||
# ------- SCTP definitions
|
||||
SCTP :
|
||||
{
|
||||
# Number of streams to use in input/output
|
||||
SCTP_INSTREAMS = 2;
|
||||
SCTP_OUTSTREAMS = 2;
|
||||
};
|
||||
|
||||
}
|
||||
);
|
||||
|
||||
MACRLCs = (
|
||||
{
|
||||
tr_s_preference = "local_L1";
|
||||
tr_n_preference = "f1";
|
||||
local_n_address = "172.21.10.20";
|
||||
remote_n_address = "172.21.6.112";
|
||||
local_n_portd = 2153;
|
||||
remote_n_portd = 2153;
|
||||
pusch_TargetSNRx10 = 220;
|
||||
pucch_TargetSNRx10 = 220;
|
||||
pusch_FailureThres = 100;
|
||||
dl_min_mcs = 20;
|
||||
}
|
||||
);
|
||||
|
||||
L1s = (
|
||||
{
|
||||
tr_n_preference = "local_mac";
|
||||
prach_dtx_threshold = 130;
|
||||
pucch0_dtx_threshold = 80;
|
||||
pusch_dtx_threshold = 10;
|
||||
max_ldpc_iterations = 10;
|
||||
tx_amp_backoff_dB = 10; #9; needs to match O-RU configuration # JF important to check
|
||||
L1_rx_thread_core = 11;
|
||||
L1_tx_thread_core = 12; # relevant after merge of l1_tx_thread
|
||||
phase_compensation = 0; # needs to match O-RU configuration # JF to be tested
|
||||
}
|
||||
);
|
||||
|
||||
RUs = (
|
||||
{
|
||||
local_rf = "no";
|
||||
nb_tx = 4;
|
||||
nb_rx = 4;
|
||||
att_tx = 0
|
||||
att_rx = 0;
|
||||
bands = [78];
|
||||
max_pdschReferenceSignalPower = -27;
|
||||
max_rxgain = 75;
|
||||
sf_extension = 0;
|
||||
eNB_instances = [0];
|
||||
ru_thread_core = 10;
|
||||
sl_ahead = 8;
|
||||
tr_preference = "raw_if4p5"; # important: activate FHI7.2
|
||||
do_precoding = 0; # needs to match O-RU configuration
|
||||
}
|
||||
);
|
||||
|
||||
log_config :
|
||||
{
|
||||
global_log_level ="info";
|
||||
};
|
||||
|
||||
fhi_72 = {
|
||||
dpdk_devices = ("0000:41:11.0", "0000:41:11.1");
|
||||
dpdk_iova_mode = "VA";
|
||||
system_core = 7;
|
||||
io_core = 8;
|
||||
worker_cores = (9);
|
||||
ru_addr = ("00:E0:0C:00:AE:06", "00:E0:0C:00:AE:06");
|
||||
mtu = 9000;
|
||||
fh_config = ({
|
||||
T1a_cp_dl = (285, 470);
|
||||
T1a_cp_ul = (285, 429);
|
||||
T1a_up = (125, 350);
|
||||
Ta4 = (110, 180);
|
||||
ru_config = {
|
||||
iq_width = 9;
|
||||
iq_width_prach = 9;
|
||||
};
|
||||
});
|
||||
};
|
||||
|
||||
nrLDPC_coding_aal : {
|
||||
dpdk_dev : "0000:01:00.0";
|
||||
dpdk_core_list : "18-19";
|
||||
is_t2 : 1;
|
||||
};
|
||||
@@ -1,266 +0,0 @@
|
||||
# SPDX-License-Identifier: LicenseRef-CSSL-1.0
|
||||
|
||||
Active_gNBs = ( "gNB-OAI-DU");
|
||||
# Asn1_verbosity, choice in: none, info, annoying
|
||||
Asn1_verbosity = "none";
|
||||
|
||||
gNBs =
|
||||
(
|
||||
{
|
||||
////////// Identification parameters:
|
||||
gNB_ID = 0xe00;
|
||||
gNB_DU_ID = 0xe00;
|
||||
gNB_name = "gNB-OAI-DU";
|
||||
|
||||
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||
tracking_area_code = 1;
|
||||
plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ( { sst = 1; }); });
|
||||
|
||||
nr_cellid = 1;
|
||||
|
||||
////////// Physical parameters:
|
||||
|
||||
pdsch_AntennaPorts_XP = 2;
|
||||
pdsch_AntennaPorts_N1 = 4;
|
||||
pusch_AntennaPorts = 8;
|
||||
do_CSIRS = 1;
|
||||
|
||||
servingCellConfigCommon = (
|
||||
{
|
||||
#spCellConfigCommon
|
||||
|
||||
physCellId = 0;
|
||||
# n_TimingAdvanceOffset = 0;
|
||||
# downlinkConfigCommon
|
||||
#frequencyInfoDL
|
||||
# center frequency = 3950.4 MHz
|
||||
# selected SSB frequency = 3950.4 MHz
|
||||
absoluteFrequencySSB = 663360;
|
||||
dl_frequencyBand = 77;
|
||||
# frequency point A = 3901.26 MHz
|
||||
dl_absoluteFrequencyPointA = 660084;
|
||||
#scs-SpecificCarrierList
|
||||
dl_offstToCarrier = 0;
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
dl_subcarrierSpacing = 1;
|
||||
dl_carrierBandwidth = 273;
|
||||
#initialDownlinkBWP
|
||||
#genericParameters
|
||||
initialDLBWPlocationAndBandwidth = 1099; #38.101-1 Table 5.3.2-1
|
||||
#
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
initialDLBWPsubcarrierSpacing = 1;
|
||||
#pdcch-ConfigCommon
|
||||
initialDLBWPcontrolResourceSetZero = 11;
|
||||
initialDLBWPsearchSpaceZero = 0;
|
||||
|
||||
#uplinkConfigCommon
|
||||
#frequencyInfoUL
|
||||
ul_frequencyBand = 77;
|
||||
#scs-SpecificCarrierList
|
||||
ul_offstToCarrier = 0;
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
ul_subcarrierSpacing = 1;
|
||||
ul_carrierBandwidth = 273;
|
||||
pMax = 23;
|
||||
#initialUplinkBWP
|
||||
#genericParameters
|
||||
initialULBWPlocationAndBandwidth = 1099;
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
initialULBWPsubcarrierSpacing = 1;
|
||||
#rach-ConfigCommon
|
||||
#rach-ConfigGeneric
|
||||
prach_ConfigurationIndex = 152;
|
||||
#prach_msg1_FDM
|
||||
#0 = one, 1=two, 2=four, 3=eight
|
||||
prach_msg1_FDM = 0;
|
||||
prach_msg1_FrequencyStart = 0;
|
||||
zeroCorrelationZoneConfig = 0;
|
||||
preambleReceivedTargetPower = -100;
|
||||
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
|
||||
preambleTransMax = 8;
|
||||
#powerRampingStep
|
||||
# 0=dB0,1=dB2,2=dB4,3=dB6
|
||||
powerRampingStep = 3;
|
||||
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
|
||||
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
|
||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
|
||||
#one (0..15) 4,8,12,16,...60,64
|
||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
|
||||
#ra_ContentionResolutionTimer
|
||||
#(0..7) 8,16,24,32,40,48,56,64
|
||||
ra_ContentionResolutionTimer = 7;
|
||||
rsrp_ThresholdSSB = 19;
|
||||
#prach-RootSequenceIndex_PR
|
||||
#1 = 839, 2 = 139
|
||||
prach_RootSequenceIndex_PR = 2;
|
||||
prach_RootSequenceIndex = 1;
|
||||
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
|
||||
#
|
||||
msg1_SubcarrierSpacing = 1,
|
||||
# restrictedSetConfig
|
||||
# 0=unrestricted, 1=restricted type A, 2=restricted type B
|
||||
restrictedSetConfig = 0,
|
||||
|
||||
# this is the offset between the last PRACH preamble power and the Msg3 PUSCH, 2 times the field value in dB
|
||||
msg3_DeltaPreamble = 2;
|
||||
p0_NominalWithGrant = -96;
|
||||
|
||||
# pucch-ConfigCommon setup :
|
||||
# pucchGroupHopping
|
||||
# 0 = neither, 1= group hopping, 2=sequence hopping
|
||||
pucchGroupHopping = 0;
|
||||
hoppingId = 0;
|
||||
p0_nominal = -96;
|
||||
|
||||
ssb_PositionsInBurst_Bitmap = 0x1;
|
||||
|
||||
# ssb_periodicityServingCell
|
||||
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
|
||||
ssb_periodicityServingCell = 2;
|
||||
|
||||
# dmrs_TypeA_position
|
||||
# 0 = pos2, 1 = pos3
|
||||
dmrs_TypeA_Position = 0;
|
||||
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
subcarrierSpacing = 1;
|
||||
|
||||
|
||||
#tdd-UL-DL-ConfigurationCommon
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
referenceSubcarrierSpacing = 1;
|
||||
# pattern1
|
||||
# dl_UL_TransmissionPeriodicity
|
||||
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
|
||||
dl_UL_TransmissionPeriodicity = 5;
|
||||
nrofDownlinkSlots = 3;
|
||||
nrofDownlinkSymbols = 6;
|
||||
nrofUplinkSlots = 1;
|
||||
nrofUplinkSymbols = 4;
|
||||
|
||||
ssPBCH_BlockPower = 0;
|
||||
}
|
||||
|
||||
);
|
||||
|
||||
|
||||
# ------- SCTP definitions
|
||||
SCTP :
|
||||
{
|
||||
# Number of streams to use in input/output
|
||||
SCTP_INSTREAMS = 2;
|
||||
SCTP_OUTSTREAMS = 2;
|
||||
};
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
MACRLCs = (
|
||||
{
|
||||
tr_s_preference = "local_L1";
|
||||
tr_n_preference = "f1";
|
||||
local_n_address = "172.21.10.20";
|
||||
remote_n_address = "172.21.6.92";
|
||||
local_n_portd = 2153;
|
||||
remote_n_portd = 2153;
|
||||
pusch_TargetSNRx10 = 220;
|
||||
pucch_TargetSNRx10 = 200;
|
||||
dl_bler_target_upper = .35;
|
||||
dl_bler_target_lower = .15;
|
||||
ul_bler_target_upper = .35;
|
||||
ul_bler_target_lower = .15;
|
||||
pusch_FailureThres = 100;
|
||||
}
|
||||
);
|
||||
|
||||
L1s = (
|
||||
{
|
||||
tr_n_preference = "local_mac";
|
||||
prach_dtx_threshold = 100;
|
||||
pucch0_dtx_threshold = 80;
|
||||
pusch_dtx_threshold = 10;
|
||||
max_ldpc_iterations = 10;
|
||||
tx_amp_backoff_dB = 12; # needs to match O-RU configuration
|
||||
L1_rx_thread_core = 11;
|
||||
L1_tx_thread_core = 12; # relevant after merge of l1_tx_thread
|
||||
phase_compensation = 0; # needs to match O-RU configuration
|
||||
}
|
||||
);
|
||||
|
||||
RUs = (
|
||||
{
|
||||
local_rf = "no";
|
||||
nb_tx = 8;
|
||||
nb_rx = 8;
|
||||
att_tx = 0;
|
||||
att_rx = 0;
|
||||
bands = [77];
|
||||
max_pdschReferenceSignalPower = -27;
|
||||
max_rxgain = 75;
|
||||
sf_extension = 0;
|
||||
eNB_instances = [0];
|
||||
ru_thread_core = 10;
|
||||
sl_ahead = 10;
|
||||
tr_preference = "raw_if4p5"; # important: activate FHI7.2
|
||||
do_precoding = 0; # needs to match O-RU configuration
|
||||
}
|
||||
);
|
||||
|
||||
log_config :
|
||||
{
|
||||
global_log_level = "info";
|
||||
hw_log_level = "info";
|
||||
phy_log_level = "info";
|
||||
mac_log_level = "info";
|
||||
rlc_log_level = "info";
|
||||
pdcp_log_level = "info";
|
||||
rrc_log_level = "info";
|
||||
ngap_log_level = "info";
|
||||
f1ap_log_level = "info";
|
||||
};
|
||||
|
||||
fhi_72 = {
|
||||
dpdk_devices = ("0000:41:11.0", "0000:41:11.1", "0000:41:11.2", "0000:41:11.3"); # two VFs can be used as well
|
||||
dpdk_iova_mode = "VA";
|
||||
system_core = 7;
|
||||
io_core = 8;
|
||||
worker_cores = (9);
|
||||
ru_addr = ("8c:1f:64:d1:10:46","8c:1f:64:d1:10:46","8c:1f:64:d1:10:43","8c:1f:64:d1:10:43"); # if two VFs, set two RU MAC addresses (one per RU)
|
||||
mtu = 9216;
|
||||
fh_config = (
|
||||
# RAN650 #1
|
||||
{
|
||||
T1a_cp_dl = (419, 470);
|
||||
T1a_cp_ul = (285, 336);
|
||||
T1a_up = (294, 345);
|
||||
Ta4 = (0, 200);
|
||||
ru_config = {
|
||||
iq_width = 9;
|
||||
iq_width_prach = 9;
|
||||
};
|
||||
},
|
||||
# RAN650 #2
|
||||
{
|
||||
T1a_cp_dl = (419, 470);
|
||||
T1a_cp_ul = (285, 336);
|
||||
T1a_up = (294, 345);
|
||||
Ta4 = (0, 200);
|
||||
ru_config = {
|
||||
iq_width = 9;
|
||||
iq_width_prach = 9;
|
||||
};
|
||||
});
|
||||
};
|
||||
|
||||
nrLDPC_coding_aal : {
|
||||
dpdk_dev : "0000:01:00.0";
|
||||
dpdk_core_list : "18-19";
|
||||
is_t2 : 1;
|
||||
};
|
||||
@@ -1,70 +0,0 @@
|
||||
# SPDX-License-Identifier: LicenseRef-CSSL-1.0
|
||||
|
||||
L1s = (
|
||||
{
|
||||
tr_n_preference = "nfapi";
|
||||
remote_n_address = "127.0.0.1"; // vnf addr
|
||||
local_n_address = "127.0.0.1"; // pnf addr
|
||||
local_n_portc = 50000; // pnf p5 port [!]
|
||||
remote_n_portc = 50001; // vnf p5 port
|
||||
local_n_portd = 50010; // pnf p7 port
|
||||
remote_n_portd = 50011; // vnf p7 port
|
||||
prach_dtx_threshold = 130
|
||||
pucch0_dtx_threshold = 80;
|
||||
pusch_dtx_threshold = -100;
|
||||
tx_amp_backoff_dB = 3;
|
||||
L1_rx_thread_core = 11;
|
||||
L1_tx_thread_core = 12;
|
||||
phase_compensation = 0; # needs to match O-RU configuration
|
||||
}
|
||||
);
|
||||
|
||||
RUs = (
|
||||
{
|
||||
local_rf = "no";
|
||||
nb_tx = 4;
|
||||
nb_rx = 4;
|
||||
att_tx = 0;
|
||||
att_rx = 0;
|
||||
bands = [77];
|
||||
max_pdschReferenceSignalPower = -27;
|
||||
max_rxgain = 75;
|
||||
sf_extension = 0;
|
||||
eNB_instances = [0];
|
||||
ru_thread_core = 10;
|
||||
sl_ahead = 6;
|
||||
tr_preference = "raw_if4p5"; # important: activate FHI7.2
|
||||
do_precoding = 0; # needs to match O-RU configuration
|
||||
}
|
||||
);
|
||||
|
||||
log_config :
|
||||
{
|
||||
global_log_level = "info";
|
||||
};
|
||||
|
||||
fhi_72 = {
|
||||
dpdk_devices = ("0000:41:11.0", "0000:41:11.1");
|
||||
dpdk_iova_mode = "VA";
|
||||
system_core = 7;
|
||||
io_core = 8;
|
||||
worker_cores = (9);
|
||||
ru_addr = ("98:ae:71:04:83:e3", "98:ae:71:04:83:e3");
|
||||
mtu = 9600;
|
||||
fh_config = ({
|
||||
T1a_cp_dl = (285, 470);
|
||||
T1a_cp_ul = (285, 429);
|
||||
T1a_up = (125, 350);
|
||||
Ta4 = (110, 180);
|
||||
ru_config = {
|
||||
iq_width = 9;
|
||||
iq_width_prach = 9;
|
||||
};
|
||||
});
|
||||
};
|
||||
|
||||
nrLDPC_coding_aal : {
|
||||
dpdk_dev : "0000:01:00.0";
|
||||
dpdk_core_list : "18-19";
|
||||
is_t2 : 1;
|
||||
};
|
||||
@@ -24,7 +24,7 @@ gNBs =
|
||||
pdsch_AntennaPorts_N1 = 2;
|
||||
maxMIMO_layers = 4;
|
||||
do_CSIRS = 1;
|
||||
do_SRS = "periodic";
|
||||
do_SRS = 1;
|
||||
|
||||
servingCellConfigCommon = (
|
||||
{
|
||||
|
||||
@@ -1,190 +0,0 @@
|
||||
# SPDX-License-Identifier: LicenseRef-CSSL-1.0
|
||||
|
||||
Active_gNBs = ( "gNB-OAI-DU");
|
||||
# Asn1_verbosity, choice in: none, info, annoying
|
||||
Asn1_verbosity = "none";
|
||||
|
||||
gNBs =
|
||||
(
|
||||
{
|
||||
////////// Identification parameters:
|
||||
gNB_ID = 0xe00;
|
||||
gNB_DU_ID = 0xe00;
|
||||
gNB_name = "gNB-OAI-DU";
|
||||
|
||||
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||
tracking_area_code = 1;
|
||||
plmn_list = ({ mcc = 208; mnc = 97; mnc_length = 2; snssaiList = ( { sst = 1; }); });
|
||||
|
||||
nr_cellid = 1;
|
||||
|
||||
////////// Physical parameters:
|
||||
|
||||
pdsch_AntennaPorts_XP = 2;
|
||||
pdsch_AntennaPorts_N1 = 2;
|
||||
maxMIMO_layers = 4;
|
||||
pusch_AntennaPorts = 4;
|
||||
do_CSIRS = 1;
|
||||
do_SRS = "periodic";
|
||||
force_UL256qam_off = 0;
|
||||
|
||||
servingCellConfigCommon = (
|
||||
{
|
||||
#spCellConfigCommon
|
||||
physCellId = 0;
|
||||
# downlinkConfigCommon
|
||||
#frequencyInfoDL
|
||||
# center frequency = 4049.76 MHz
|
||||
# selected SSB frequency = 4049.76 MHz
|
||||
absoluteFrequencySSB = 669984;
|
||||
dl_frequencyBand = 77;
|
||||
# frequency point A = 4000.62 MHz
|
||||
dl_absoluteFrequencyPointA = 666708;
|
||||
#scs-SpecificCarrierList
|
||||
dl_offstToCarrier = 0;
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
dl_subcarrierSpacing = 1;
|
||||
dl_carrierBandwidth = 273;
|
||||
#initialDownlinkBWP
|
||||
#genericParameters
|
||||
initialDLBWPlocationAndBandwidth = 1099; #38.101-1 Table 5.3.2-1
|
||||
#
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
initialDLBWPsubcarrierSpacing = 1;
|
||||
#pdcch-ConfigCommon
|
||||
initialDLBWPcontrolResourceSetZero = 11;
|
||||
initialDLBWPsearchSpaceZero = 0;
|
||||
|
||||
#uplinkConfigCommon
|
||||
#frequencyInfoUL
|
||||
ul_frequencyBand = 77;
|
||||
#scs-SpecificCarrierList
|
||||
ul_offstToCarrier = 0;
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
ul_subcarrierSpacing = 1;
|
||||
ul_carrierBandwidth = 273;
|
||||
pMax = 23;
|
||||
#initialUplinkBWP
|
||||
#genericParameters
|
||||
initialULBWPlocationAndBandwidth = 1099;
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
initialULBWPsubcarrierSpacing = 1;
|
||||
#rach-ConfigCommon
|
||||
#rach-ConfigGeneric
|
||||
prach_ConfigurationIndex = 159;
|
||||
#prach_msg1_FDM
|
||||
#0 = one, 1=two, 2=four, 3=eight
|
||||
prach_msg1_FDM = 0;
|
||||
prach_msg1_FrequencyStart = 0;
|
||||
zeroCorrelationZoneConfig = 0;
|
||||
preambleReceivedTargetPower = -100;
|
||||
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
|
||||
preambleTransMax = 7;
|
||||
#powerRampingStep
|
||||
# 0=dB0,1=dB2,2=dB4,3=dB6
|
||||
powerRampingStep = 2;
|
||||
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
|
||||
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
|
||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
|
||||
#one (0..15) 4,8,12,16,...60,64
|
||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
|
||||
#ra_ContentionResolutionTimer
|
||||
#(0..7) 8,16,24,32,40,48,56,64
|
||||
ra_ContentionResolutionTimer = 7;
|
||||
rsrp_ThresholdSSB = 19;
|
||||
#prach-RootSequenceIndex_PR
|
||||
#1 = 839, 2 = 139
|
||||
prach_RootSequenceIndex_PR = 2;
|
||||
prach_RootSequenceIndex = 1;
|
||||
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
|
||||
#
|
||||
msg1_SubcarrierSpacing = 1,
|
||||
# restrictedSetConfig
|
||||
# 0=unrestricted, 1=restricted type A, 2=restricted type B
|
||||
restrictedSetConfig = 0,
|
||||
|
||||
# this is the offset between the last PRACH preamble power and the Msg3 PUSCH, 2 times the field value in dB
|
||||
msg3_DeltaPreamble = 2;
|
||||
p0_NominalWithGrant = -100;
|
||||
|
||||
# pucch-ConfigCommon setup :
|
||||
# pucchGroupHopping
|
||||
# 0 = neither, 1= group hopping, 2=sequence hopping
|
||||
pucchGroupHopping = 0;
|
||||
hoppingId = 0;
|
||||
p0_nominal = -96;
|
||||
|
||||
ssb_PositionsInBurst_Bitmap = 0x1;
|
||||
|
||||
# ssb_periodicityServingCell
|
||||
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
|
||||
ssb_periodicityServingCell = 2;
|
||||
|
||||
# dmrs_TypeA_position
|
||||
# 0 = pos2, 1 = pos3
|
||||
dmrs_TypeA_Position = 0;
|
||||
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
subcarrierSpacing = 1;
|
||||
|
||||
|
||||
#tdd-UL-DL-ConfigurationCommon
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
referenceSubcarrierSpacing = 1;
|
||||
# pattern1
|
||||
# dl_UL_TransmissionPeriodicity
|
||||
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
|
||||
dl_UL_TransmissionPeriodicity = 5;
|
||||
nrofDownlinkSlots = 3;
|
||||
nrofDownlinkSymbols = 10;
|
||||
nrofUplinkSlots = 1;
|
||||
nrofUplinkSymbols = 2;
|
||||
|
||||
ssPBCH_BlockPower = -11;
|
||||
}
|
||||
|
||||
);
|
||||
|
||||
# ------- SCTP definitions
|
||||
SCTP :
|
||||
{
|
||||
# Number of streams to use in input/output
|
||||
SCTP_INSTREAMS = 2;
|
||||
SCTP_OUTSTREAMS = 2;
|
||||
};
|
||||
}
|
||||
);
|
||||
|
||||
MACRLCs = (
|
||||
{
|
||||
tr_s_preference = "nfapi";
|
||||
remote_s_address = "127.0.0.1"; // pnf addr [!]
|
||||
local_s_address = "127.0.0.1"; // vnf addr
|
||||
local_s_portc = 50001; // vnf p5 port
|
||||
remote_s_portc = 50000; // pnf p5 port [!]
|
||||
local_s_portd = 50011; // vnf p7 port [!]
|
||||
remote_s_portd = 50010; // pnf p7 port [!]
|
||||
tr_n_preference = "f1";
|
||||
local_n_address = "172.21.8.200";
|
||||
remote_n_address = "172.21.6.112";
|
||||
local_n_portd = 2153;
|
||||
remote_n_portd = 2153;
|
||||
pusch_TargetSNRx10 = 220;
|
||||
pucch_TargetSNRx10 = 250;
|
||||
ul_bler_target_upper = .35;
|
||||
ul_bler_target_lower = .15;
|
||||
pusch_FailureThres = 100;
|
||||
dl_min_mcs = 20;
|
||||
}
|
||||
);
|
||||
|
||||
log_config :
|
||||
{
|
||||
global_log_level = "info";
|
||||
};
|
||||
@@ -25,7 +25,7 @@ gNBs =
|
||||
pdsch_AntennaPorts_N1 = 2;
|
||||
pusch_AntennaPorts = 2;
|
||||
do_CSIRS = 1;
|
||||
do_SRS = "periodic";
|
||||
do_SRS = 1;
|
||||
min_rxtxtime = 2;
|
||||
uess_agg_levels = [0, 4, 2, 1, 0];
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ gNBs =
|
||||
pdsch_AntennaPorts_N1 = 2;
|
||||
pusch_AntennaPorts = 2;
|
||||
do_CSIRS = 1;
|
||||
do_SRS = "periodic";
|
||||
do_SRS = 1;
|
||||
min_rxtxtime = 2;
|
||||
force_UL256qam_off = 1;
|
||||
servingCellConfigCommon = (
|
||||
|
||||
@@ -24,6 +24,8 @@ gNBs =
|
||||
pdsch_AntennaPorts_XP = 2;
|
||||
pdsch_AntennaPorts_N1 = 2;
|
||||
pusch_AntennaPorts = 2;
|
||||
do_CSIRS = 0;
|
||||
do_SRS = 0;
|
||||
min_rxtxtime = 6;
|
||||
|
||||
servingCellConfigCommon = (
|
||||
|
||||
@@ -23,6 +23,8 @@ gNBs =
|
||||
pdsch_AntennaPorts_N1 = 2;
|
||||
maxMIMO_layers = 4;
|
||||
pusch_AntennaPorts = 4;
|
||||
do_CSIRS = 0;
|
||||
do_SRS = 0;
|
||||
|
||||
servingCellConfigCommon = (
|
||||
{
|
||||
|
||||
@@ -1,222 +0,0 @@
|
||||
# SPDX-License-Identifier: LicenseRef-CSSL-1.0
|
||||
|
||||
Active_gNBs = ( "gNB-OAI");
|
||||
# Asn1_verbosity, choice in: none, info, annoying
|
||||
Asn1_verbosity = "none";
|
||||
|
||||
gNBs =
|
||||
(
|
||||
{
|
||||
////////// Identification parameters:
|
||||
gNB_ID = 0xe00;
|
||||
gNB_name = "gNB-OAI";
|
||||
|
||||
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||
tracking_area_code = 1;
|
||||
plmn_list = ({mcc = 208; mnc = 99; mnc_length = 2;});
|
||||
|
||||
tr_s_preference = "local_mac"
|
||||
|
||||
////////// Physical parameters:
|
||||
|
||||
min_rxtxtime = 6;
|
||||
|
||||
servingCellConfigCommon = (
|
||||
{
|
||||
#spCellConfigCommon
|
||||
|
||||
physCellId = 0;
|
||||
|
||||
# downlinkConfigCommon
|
||||
#frequencyInfoDL
|
||||
# this is 4412.64 MHz
|
||||
absoluteFrequencySSB = 694176;
|
||||
dl_frequencyBand = 79;
|
||||
# this is 4400.94 MHz
|
||||
dl_absoluteFrequencyPointA = 693396;
|
||||
#scs-SpecificCarrierList
|
||||
dl_offstToCarrier = 0;
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
dl_subcarrierSpacing = 1;
|
||||
dl_carrierBandwidth = 106;
|
||||
#initialDownlinkBWP
|
||||
#genericParameters
|
||||
# this is RBstart=41,L=24 (275*(L-1))+RBstart
|
||||
initialDLBWPlocationAndBandwidth = 6368;
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
initialDLBWPsubcarrierSpacing = 1;
|
||||
#pdcch-ConfigCommon
|
||||
initialDLBWPcontrolResourceSetZero = 12;
|
||||
initialDLBWPsearchSpaceZero = 0;
|
||||
|
||||
#uplinkConfigCommon
|
||||
#frequencyInfoUL
|
||||
ul_frequencyBand = 79;
|
||||
#scs-SpecificCarrierList
|
||||
ul_offstToCarrier = 0;
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
ul_subcarrierSpacing = 1;
|
||||
ul_carrierBandwidth = 106;
|
||||
pMax = 20;
|
||||
#initialUplinkBWP
|
||||
#genericParameters
|
||||
initialULBWPlocationAndBandwidth = 6368;
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
initialULBWPsubcarrierSpacing = 1;
|
||||
#rach-ConfigCommon
|
||||
#rach-ConfigGeneric
|
||||
prach_ConfigurationIndex = 98;
|
||||
#prach_msg1_FDM
|
||||
#0 = one, 1=two, 2=four, 3=eight
|
||||
prach_msg1_FDM = 0;
|
||||
prach_msg1_FrequencyStart = 0;
|
||||
zeroCorrelationZoneConfig = 13;
|
||||
preambleReceivedTargetPower = -118;
|
||||
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
|
||||
preambleTransMax = 6;
|
||||
#powerRampingStep
|
||||
# 0=dB0,1=dB2,2=dB4,3=dB6
|
||||
powerRampingStep = 1;
|
||||
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
|
||||
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
|
||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
|
||||
#one (0..15) 4,8,12,16,...60,64
|
||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
|
||||
#ra_ContentionResolutionTimer
|
||||
#(0..7) 8,16,24,32,40,48,56,64
|
||||
ra_ContentionResolutionTimer = 7;
|
||||
rsrp_ThresholdSSB = 19;
|
||||
#prach-RootSequenceIndex_PR
|
||||
#1 = 839, 2 = 139
|
||||
prach_RootSequenceIndex_PR = 2;
|
||||
prach_RootSequenceIndex = 1;
|
||||
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
|
||||
#
|
||||
msg1_SubcarrierSpacing = 1,
|
||||
# restrictedSetConfig
|
||||
# 0=unrestricted, 1=restricted type A, 2=restricted type B
|
||||
restrictedSetConfig = 0,
|
||||
|
||||
msg3_DeltaPreamble = 1;
|
||||
p0_NominalWithGrant =-90;
|
||||
|
||||
# pucch-ConfigCommon setup :
|
||||
# pucchGroupHopping
|
||||
# 0 = neither, 1= group hopping, 2=sequence hopping
|
||||
pucchGroupHopping = 0;
|
||||
hoppingId = 40;
|
||||
p0_nominal = -90;
|
||||
|
||||
ssb_PositionsInBurst_Bitmap = 1;
|
||||
|
||||
# ssb_periodicityServingCell
|
||||
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
|
||||
ssb_periodicityServingCell = 2;
|
||||
|
||||
# dmrs_TypeA_position
|
||||
# 0 = pos2, 1 = pos3
|
||||
dmrs_TypeA_Position = 0;
|
||||
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
subcarrierSpacing = 1;
|
||||
|
||||
|
||||
#tdd-UL-DL-ConfigurationCommon
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
referenceSubcarrierSpacing = 1;
|
||||
# pattern1
|
||||
# dl_UL_TransmissionPeriodicity
|
||||
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
|
||||
dl_UL_TransmissionPeriodicity = 6;
|
||||
nrofDownlinkSlots = 7;
|
||||
nrofDownlinkSymbols = 6;
|
||||
nrofUplinkSlots = 2;
|
||||
nrofUplinkSymbols = 4;
|
||||
|
||||
ssPBCH_BlockPower = -25;
|
||||
}
|
||||
|
||||
);
|
||||
|
||||
|
||||
# ------- SCTP definitions
|
||||
SCTP :
|
||||
{
|
||||
# Number of streams to use in input/output
|
||||
SCTP_INSTREAMS = 2;
|
||||
SCTP_OUTSTREAMS = 2;
|
||||
};
|
||||
|
||||
|
||||
////////// MME parameters:
|
||||
mme_ip_address = ({ ipv4 = "192.168.12.26"; port = 36412; });
|
||||
|
||||
NETWORK_INTERFACES :
|
||||
{
|
||||
|
||||
GNB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.111/24";
|
||||
GNB_IPV4_ADDRESS_FOR_S1U = "192.168.12.111/24";
|
||||
GNB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||
};
|
||||
}
|
||||
);
|
||||
|
||||
MACRLCs = (
|
||||
{
|
||||
tr_s_preference = "local_L1";
|
||||
tr_n_preference = "local_RRC";
|
||||
});
|
||||
|
||||
L1s = (
|
||||
{
|
||||
tr_n_preference = "local_mac";
|
||||
});
|
||||
|
||||
RUs = (
|
||||
{
|
||||
local_rf = "yes"
|
||||
nb_tx = 1
|
||||
nb_rx = 1
|
||||
att_tx = 0
|
||||
att_rx = 0;
|
||||
bands = [7];
|
||||
max_pdschReferenceSignalPower = -27;
|
||||
max_rxgain = 50;
|
||||
eNB_instances = [0];
|
||||
});
|
||||
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
# the first one of the list that an UE supports in chosen
|
||||
# valid values: nea0, nea1, nea2, nea3
|
||||
ciphering_algorithms = ( "nea0" );
|
||||
|
||||
# preferred integrity algorithms
|
||||
# the first one of the list that an UE supports in chosen
|
||||
# valid values: nia0, nia1, nia2, nia3
|
||||
integrity_algorithms = ( "nia2", "nia0" );
|
||||
|
||||
# setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter
|
||||
# what 'ciphering_algorithms' configures; same thing for 'drb_integrity'
|
||||
drb_ciphering = "yes";
|
||||
drb_integrity = "no";
|
||||
};
|
||||
|
||||
log_config :
|
||||
{
|
||||
global_log_level ="info";
|
||||
hw_log_level ="info";
|
||||
phy_log_level ="info";
|
||||
mac_log_level ="info";
|
||||
rlc_log_level ="info";
|
||||
pdcp_log_level ="info";
|
||||
rrc_log_level ="info";
|
||||
};
|
||||
|
||||
@@ -44,7 +44,7 @@ gNBs =
|
||||
#initialDownlinkBWP
|
||||
#genericParameters
|
||||
# this is RBstart=0,L=32 (275*(L-1))+RBstart
|
||||
initialDLBWPlocationAndBandwidth = 17875;
|
||||
initialDLBWPlocationAndBandwidth = 6349;
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
initialDLBWPsubcarrierSpacing = 3;
|
||||
@@ -64,7 +64,7 @@ gNBs =
|
||||
pMax = 20;
|
||||
#initialUplinkBWP
|
||||
#genericParameters
|
||||
initialULBWPlocationAndBandwidth = 17875;
|
||||
initialULBWPlocationAndBandwidth = 6349;
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
initialULBWPsubcarrierSpacing = 3;
|
||||
@@ -145,6 +145,11 @@ gNBs =
|
||||
|
||||
);
|
||||
|
||||
first_active_bwp = 1;
|
||||
bwp_list = (
|
||||
{ scs = 3; bwpStart = 0; bwpSize = 66;}
|
||||
);
|
||||
|
||||
# ------- SCTP definitions
|
||||
SCTP :
|
||||
{
|
||||
|
||||
@@ -25,7 +25,7 @@ gNBs =
|
||||
pdsch_AntennaPorts_XP = 2;
|
||||
pusch_AntennaPorts = 2;
|
||||
do_CSIRS = 1;
|
||||
do_SRS = "periodic";
|
||||
do_SRS = 1;
|
||||
uess_agg_levels = [4,2,0,0,0];
|
||||
|
||||
servingCellConfigCommon = (
|
||||
|
||||
@@ -1,268 +0,0 @@
|
||||
# SPDX-License-Identifier: LicenseRef-CSSL-1.0
|
||||
|
||||
Active_gNBs = ( "gNB-OAI");
|
||||
# Asn1_verbosity, choice in: none, info, annoying
|
||||
Asn1_verbosity = "none";
|
||||
|
||||
gNBs =
|
||||
(
|
||||
{
|
||||
////////// Identification parameters:
|
||||
gNB_ID = 0xe00;
|
||||
gNB_name = "gNB-OAI";
|
||||
|
||||
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||
tracking_area_code = 1;
|
||||
plmn_list = ({ mcc = 208; mnc = 97; mnc_length = 2; snssaiList = ( { sst = 1; }); });
|
||||
|
||||
nr_cellid = 1;
|
||||
|
||||
////////// Physical parameters:
|
||||
|
||||
pdsch_AntennaPorts_XP = 2;
|
||||
pdsch_AntennaPorts_N1 = 2;
|
||||
maxMIMO_layers = 4;
|
||||
pusch_AntennaPorts = 4;
|
||||
do_CSIRS = 1;
|
||||
do_SRS = "periodic";
|
||||
force_UL256qam_off = 1;
|
||||
|
||||
servingCellConfigCommon = (
|
||||
{
|
||||
#spCellConfigCommon
|
||||
physCellId = 0;
|
||||
# downlinkConfigCommon
|
||||
#frequencyInfoDL
|
||||
# center frequency = 4049.76 MHz
|
||||
# selected SSB frequency = 4049.76 MHz
|
||||
absoluteFrequencySSB = 669984;
|
||||
dl_frequencyBand = 77;
|
||||
# frequency point A = 4000.62 MHz
|
||||
dl_absoluteFrequencyPointA = 666708;
|
||||
#scs-SpecificCarrierList
|
||||
dl_offstToCarrier = 0;
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
dl_subcarrierSpacing = 1;
|
||||
dl_carrierBandwidth = 273;
|
||||
#initialDownlinkBWP
|
||||
#genericParameters
|
||||
initialDLBWPlocationAndBandwidth = 1099; #38.101-1 Table 5.3.2-1
|
||||
#
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
initialDLBWPsubcarrierSpacing = 1;
|
||||
#pdcch-ConfigCommon
|
||||
initialDLBWPcontrolResourceSetZero = 11;
|
||||
initialDLBWPsearchSpaceZero = 0;
|
||||
|
||||
#uplinkConfigCommon
|
||||
#frequencyInfoUL
|
||||
ul_frequencyBand = 77;
|
||||
#scs-SpecificCarrierList
|
||||
ul_offstToCarrier = 0;
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
ul_subcarrierSpacing = 1;
|
||||
ul_carrierBandwidth = 273;
|
||||
pMax = 23;
|
||||
#initialUplinkBWP
|
||||
#genericParameters
|
||||
initialULBWPlocationAndBandwidth = 1099;
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
initialULBWPsubcarrierSpacing = 1;
|
||||
#rach-ConfigCommon
|
||||
#rach-ConfigGeneric
|
||||
prach_ConfigurationIndex = 159;
|
||||
#prach_msg1_FDM
|
||||
#0 = one, 1=two, 2=four, 3=eight
|
||||
prach_msg1_FDM = 0;
|
||||
prach_msg1_FrequencyStart = 0;
|
||||
zeroCorrelationZoneConfig = 0;
|
||||
preambleReceivedTargetPower = -100;
|
||||
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
|
||||
preambleTransMax = 7;
|
||||
#powerRampingStep
|
||||
# 0=dB0,1=dB2,2=dB4,3=dB6
|
||||
powerRampingStep = 2;
|
||||
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
|
||||
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
|
||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
|
||||
#one (0..15) 4,8,12,16,...60,64
|
||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
|
||||
#ra_ContentionResolutionTimer
|
||||
#(0..7) 8,16,24,32,40,48,56,64
|
||||
ra_ContentionResolutionTimer = 7;
|
||||
rsrp_ThresholdSSB = 19;
|
||||
#prach-RootSequenceIndex_PR
|
||||
#1 = 839, 2 = 139
|
||||
prach_RootSequenceIndex_PR = 2;
|
||||
prach_RootSequenceIndex = 1;
|
||||
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
|
||||
#
|
||||
msg1_SubcarrierSpacing = 1,
|
||||
# restrictedSetConfig
|
||||
# 0=unrestricted, 1=restricted type A, 2=restricted type B
|
||||
restrictedSetConfig = 0,
|
||||
|
||||
# this is the offset between the last PRACH preamble power and the Msg3 PUSCH, 2 times the field value in dB
|
||||
msg3_DeltaPreamble = 2;
|
||||
p0_NominalWithGrant = -100;
|
||||
|
||||
# pucch-ConfigCommon setup :
|
||||
# pucchGroupHopping
|
||||
# 0 = neither, 1= group hopping, 2=sequence hopping
|
||||
pucchGroupHopping = 0;
|
||||
hoppingId = 0;
|
||||
p0_nominal = -96;
|
||||
|
||||
ssb_PositionsInBurst_Bitmap = 0x1;
|
||||
|
||||
# ssb_periodicityServingCell
|
||||
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
|
||||
ssb_periodicityServingCell = 2;
|
||||
|
||||
# dmrs_TypeA_position
|
||||
# 0 = pos2, 1 = pos3
|
||||
dmrs_TypeA_Position = 0;
|
||||
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
subcarrierSpacing = 1;
|
||||
|
||||
|
||||
#tdd-UL-DL-ConfigurationCommon
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
referenceSubcarrierSpacing = 1;
|
||||
# pattern1
|
||||
# dl_UL_TransmissionPeriodicity
|
||||
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
|
||||
dl_UL_TransmissionPeriodicity = 5;
|
||||
nrofDownlinkSlots = 3;
|
||||
nrofDownlinkSymbols = 8;
|
||||
nrofUplinkSlots = 1;
|
||||
nrofUplinkSymbols = 2;
|
||||
|
||||
ssPBCH_BlockPower = -10;
|
||||
}
|
||||
);
|
||||
|
||||
# ------- SCTP definitions
|
||||
SCTP :
|
||||
{
|
||||
# Number of streams to use in input/output
|
||||
SCTP_INSTREAMS = 2;
|
||||
SCTP_OUTSTREAMS = 2;
|
||||
};
|
||||
|
||||
////////// AMF parameters:
|
||||
amf_ip_address = ({ ipv4 = "172.21.6.103"; });
|
||||
|
||||
NETWORK_INTERFACES :
|
||||
{
|
||||
GNB_IPV4_ADDRESS_FOR_NG_AMF = "172.21.10.20";
|
||||
GNB_IPV4_ADDRESS_FOR_NGU = "172.21.10.20";
|
||||
GNB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||
};
|
||||
}
|
||||
);
|
||||
|
||||
MACRLCs = (
|
||||
{
|
||||
tr_s_preference = "local_L1";
|
||||
tr_n_preference = "local_RRC";
|
||||
pusch_TargetSNRx10 = 200;
|
||||
pucch_TargetSNRx10 = 250;
|
||||
pusch_FailureThres = 100;
|
||||
}
|
||||
);
|
||||
|
||||
L1s = (
|
||||
{
|
||||
tr_n_preference = "local_mac";
|
||||
prach_dtx_threshold = 130
|
||||
pucch0_dtx_threshold = 80;
|
||||
pusch_dtx_threshold = -100;
|
||||
tx_amp_backoff_dB = 3;
|
||||
L1_rx_thread_core = 11;
|
||||
L1_tx_thread_core = 12;
|
||||
phase_compensation = 0; # needs to match O-RU configuration
|
||||
}
|
||||
);
|
||||
|
||||
RUs = (
|
||||
{
|
||||
local_rf = "no";
|
||||
nb_tx = 4;
|
||||
nb_rx = 4;
|
||||
att_tx = 0;
|
||||
att_rx = 0;
|
||||
bands = [77];
|
||||
max_pdschReferenceSignalPower = -27;
|
||||
max_rxgain = 75;
|
||||
sf_extension = 0;
|
||||
eNB_instances = [0];
|
||||
ru_thread_core = 10;
|
||||
sl_ahead = 8;
|
||||
tr_preference = "raw_if4p5"; # important: activate FHI7.2
|
||||
do_precoding = 0; # needs to match O-RU configuration
|
||||
}
|
||||
);
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
# the first one of the list that an UE supports in chosen
|
||||
# valid values: nea0, nea1, nea2, nea3
|
||||
ciphering_algorithms = ( "nea0" );
|
||||
|
||||
# preferred integrity algorithms
|
||||
# the first one of the list that an UE supports in chosen
|
||||
# valid values: nia0, nia1, nia2, nia3
|
||||
integrity_algorithms = ( "nia2", "nia0" );
|
||||
|
||||
# setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter
|
||||
# what 'ciphering_algorithms' configures; same thing for 'drb_integrity'
|
||||
drb_ciphering = "yes";
|
||||
drb_integrity = "no";
|
||||
};
|
||||
|
||||
log_config :
|
||||
{
|
||||
global_log_level = "info";
|
||||
hw_log_level = "info";
|
||||
phy_log_level = "info";
|
||||
mac_log_level = "info";
|
||||
rlc_log_level = "info";
|
||||
pdcp_log_level = "info";
|
||||
rrc_log_level = "info";
|
||||
ngap_log_level = "info";
|
||||
f1ap_log_level = "info";
|
||||
};
|
||||
|
||||
fhi_72 = {
|
||||
dpdk_devices = ("0000:41:11.0", "0000:41:11.1");
|
||||
dpdk_iova_mode = "VA";
|
||||
system_core = 7;
|
||||
io_core = 8;
|
||||
worker_cores = (9);
|
||||
ru_addr = ("98:ae:71:04:83:e3", "98:ae:71:04:83:e3");
|
||||
mtu = 9600;
|
||||
fh_config = ({
|
||||
T1a_cp_dl = (285, 470);
|
||||
T1a_cp_ul = (285, 429);
|
||||
T1a_up = (125, 350);
|
||||
Ta4 = (110, 180);
|
||||
ru_config = {
|
||||
iq_width = 9;
|
||||
iq_width_prach = 9;
|
||||
};
|
||||
});
|
||||
};
|
||||
|
||||
nrLDPC_coding_aal : {
|
||||
dpdk_dev : "0000:01:00.0";
|
||||
dpdk_core_list : "18-19";
|
||||
is_t2 : 1;
|
||||
};
|
||||
@@ -24,6 +24,7 @@ gNBs =
|
||||
maxMIMO_layers = 2;
|
||||
pusch_AntennaPorts = 4;
|
||||
do_CSIRS = 1;
|
||||
do_SRS = 0;
|
||||
force_UL256qam_off = 1;
|
||||
|
||||
servingCellConfigCommon = (
|
||||
|
||||
@@ -23,7 +23,7 @@ gNBs = (
|
||||
pdsch_AntennaPorts_XP = 2;
|
||||
pusch_AntennaPorts = 2;
|
||||
do_CSIRS = 1;
|
||||
do_SRS = "periodic";
|
||||
do_SRS = 1;
|
||||
|
||||
servingCellConfigCommon = (
|
||||
{
|
||||
|
||||
@@ -22,6 +22,7 @@ gNBs =
|
||||
////////// Physical parameters:
|
||||
|
||||
min_rxtxtime = 5;
|
||||
do_SRS = 0;
|
||||
force_256qam_off = 1;
|
||||
pdsch_AntennaPorts_N1 = 1;
|
||||
pdsch_AntennaPorts_XP = 1;
|
||||
|
||||
@@ -22,7 +22,7 @@ gNBs =
|
||||
pdsch_AntennaPorts_XP = 2;
|
||||
pusch_AntennaPorts = 2;
|
||||
do_CSIRS = 1;
|
||||
do_SRS = "periodic";
|
||||
do_SRS = 1;
|
||||
min_rxtxtime = 5;
|
||||
|
||||
servingCellConfigCommon = (
|
||||
|
||||
@@ -26,7 +26,7 @@ gNBs =
|
||||
pdsch_AntennaPorts_XP = 2;
|
||||
pusch_AntennaPorts = 2;
|
||||
do_CSIRS = 1;
|
||||
do_SRS = "periodic";
|
||||
do_SRS = 1;
|
||||
|
||||
servingCellConfigCommon = (
|
||||
{
|
||||
|
||||
@@ -29,7 +29,7 @@ gNBs =
|
||||
#pucch_TargetSNRx10 = 200;
|
||||
ul_prbblacklist = "51,52,53,54"
|
||||
min_rxtxtime = 6;
|
||||
do_SRS = "periodic";
|
||||
do_SRS = 1;
|
||||
|
||||
servingCellConfigCommon = (
|
||||
{
|
||||
|
||||
@@ -20,7 +20,7 @@ Ref :
|
||||
DL & UL scheduling timing : 8.0
|
||||
UL Indication : 3.0
|
||||
Slot Indication : 9.0
|
||||
feprx : 50.0
|
||||
feprx : 85.0
|
||||
feptx_ofdm (per port, half_slot) : 31
|
||||
feptx_total : 92
|
||||
DeviationThreshold :
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
# SPDX-License-Identifier: LicenseRef-CSSL-1.0
|
||||
|
||||
#this is a configuration file
|
||||
#used to build real time processing statistics
|
||||
#for 5G NR phy test (gNB terminate)
|
||||
Title : gNB Processing Time (us) from datalog_rt_stats.default.yaml
|
||||
ColNames :
|
||||
- Metric
|
||||
- Average; Max; Count
|
||||
- Average vs Reference Deviation (Reference Value; Acceptability Deviation Threshold)
|
||||
Ref :
|
||||
L1 Tx processing : 190.0
|
||||
DLSCH encoding : 120.0
|
||||
L1 Rx processing : 235.0
|
||||
UL segments decoding : 120.0
|
||||
PUSCH inner-receiver : 150.0
|
||||
UL Indication : 2.0
|
||||
Slot Indication : 10.0
|
||||
feprx : 40.0
|
||||
feptx_ofdm (per port, half_slot) : 30
|
||||
feptx_total : 52
|
||||
DeviationThreshold :
|
||||
L1 Tx processing : 0.25
|
||||
DLSCH encoding : 0.25
|
||||
L1 Rx processing : 0.25
|
||||
UL segments decoding : 0.25
|
||||
PUSCH inner-receiver : 0.25
|
||||
UL Indication : 1.00
|
||||
Slot Indication : 0.50
|
||||
feprx : 0.25
|
||||
feptx_ofdm (per port, half_slot) : 0.25
|
||||
feptx_total : 0.25
|
||||
@@ -1,40 +0,0 @@
|
||||
# SPDX-License-Identifier: LicenseRef-CSSL-1.0
|
||||
|
||||
#this is a configuration file
|
||||
#used to build real time processing statistics
|
||||
#for 5G NR phy test (gNB terminate)
|
||||
Title : UE Processing Time (us) from datalog_rt_stats.ue.40.vrtsim.yaml
|
||||
ColNames :
|
||||
- Metric
|
||||
- Average; Max; Count
|
||||
- Average vs Reference Deviation (Reference Value; Acceptability Deviation Threshold)
|
||||
Ref :
|
||||
RX_PDSCH_STATS : 62.0
|
||||
DLSCH_RX_PDCCH_STATS : 30.5
|
||||
RX_DFT_STATS : 5.5
|
||||
DLSCH_CHANNEL_ESTIMATION_STATS : 39.0
|
||||
DLSCH_DECODING_STATS : 178.0
|
||||
DLSCH_LDPC_DECODING_STATS : 78.0
|
||||
DLSCH_LLR_STATS : 25.0
|
||||
DLSCH_LAYER_DEMAPPING : 8.5
|
||||
DLSCH_PROCEDURES_STATS : 188.0
|
||||
PHY_PROC_TX : 158.0
|
||||
PUSCH_PROC_STATS : 167.0
|
||||
ULSCH_LDPC_ENCODING_STATS : 43.0
|
||||
ULSCH_ENCODING_STATS : 121.0
|
||||
OFDM_MOD_STATS : 44.5
|
||||
DeviationThreshold :
|
||||
RX_PDSCH_STATS : 0.25
|
||||
DLSCH_RX_PDCCH_STATS : 0.25
|
||||
RX_DFT_STATS : 0.25
|
||||
DLSCH_CHANNEL_ESTIMATION_STATS : 0.25
|
||||
DLSCH_DECODING_STATS : 0.25
|
||||
DLSCH_LDPC_DECODING_STATS : 0.25
|
||||
DLSCH_LLR_STATS : 0.25
|
||||
DLSCH_LAYER_DEMAPPING : 0.5
|
||||
DLSCH_PROCEDURES_STATS : 0.25
|
||||
PHY_PROC_TX : 0.25
|
||||
PUSCH_PROC_STATS : 0.25
|
||||
ULSCH_LDPC_ENCODING_STATS : 0.25
|
||||
ULSCH_ENCODING_STATS : 0.25
|
||||
OFDM_MOD_STATS : 0.25
|
||||
@@ -1,37 +0,0 @@
|
||||
# SPDX-License-Identifier: LicenseRef-CSSL-1.0
|
||||
|
||||
FROM ran-base:latest AS optional-base
|
||||
|
||||
RUN DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
RUN apt update && \
|
||||
apt upgrade --yes && \
|
||||
apt install --yes \
|
||||
libglfw3-dev
|
||||
|
||||
WORKDIR /oai-src
|
||||
COPY . .
|
||||
|
||||
FROM optional-base AS build-imscope
|
||||
|
||||
RUN \
|
||||
# Mount CCache cache directory
|
||||
--mount=type=cache,target=/root/.cache/ccache/,id=ccache_imscope \
|
||||
# Mount CPM package cache
|
||||
--mount=type=cache,target=/root/.cache/cpm/,id=cpmcache_imscope \
|
||||
mkdir -p /build-imscope && \
|
||||
cd /build-imscope && \
|
||||
cmake /oai-src/ -DENABLE_IMSCOPE=ON -GNinja && \
|
||||
ninja imscope nr-softmodem nr-uesoftmodem
|
||||
|
||||
FROM optional-base AS build-tracy
|
||||
|
||||
RUN \
|
||||
# Mount CCache cache directory
|
||||
--mount=type=cache,target=/root/.cache/ccache/,id=ccache_tracy \
|
||||
# Mount CPM package cache
|
||||
--mount=type=cache,target=/root/.cache/cpm/,id=cpmcache_tracy \
|
||||
mkdir -p /build-tracy && \
|
||||
cd /build-tracy && \
|
||||
cmake /oai-src/ -DTRACY_ENABLE=ON -GNinja && \
|
||||
ninja nr-softmodem nr-uesoftmodem
|
||||
@@ -10,25 +10,15 @@
|
||||
FROM ran-base:develop AS ran-tests
|
||||
|
||||
RUN apt-get update && \
|
||||
DEBIAN_FRONTEND=noninteractive apt-get install --yes --no-install-recommends \
|
||||
DEBIAN_FRONTEND=noninteractive apt-get upgrade --yes && \
|
||||
DEBIAN_FRONTEND=noninteractive apt-get install --yes \
|
||||
libgtest-dev \
|
||||
libyaml-cpp-dev \
|
||||
libzmq3-dev \
|
||||
flatbuffers-compiler \
|
||||
libnanomsg-dev \
|
||||
dpdk-dev \
|
||||
dpdk \
|
||||
curl
|
||||
libzmq3-dev
|
||||
|
||||
RUN rm -Rf /oai-ran
|
||||
WORKDIR /oai-ran
|
||||
COPY . .
|
||||
|
||||
WORKDIR /oai-ran/build
|
||||
RUN --mount=type=cache,target=/root/.cache/ccache/ \
|
||||
--mount=type=cache,target=/root/.cache/cpm/ \
|
||||
cmake .. -GNinja \
|
||||
-DENABLE_TESTS=ON -DOAI_ZMQ=ON -DCMAKE_BUILD_TYPE=Debug \
|
||||
-DSANITIZE_ADDRESS=True -DOAI_VRTSIM_TAPS_CLIENT=ON -DOAI_RU_FRONTHAUL=ON \
|
||||
&& \
|
||||
ninja
|
||||
RUN cmake -GNinja -DENABLE_TESTS=ON -DOAI_ZMQ=ON -DCMAKE_BUILD_TYPE=Debug -DSANITIZE_ADDRESS=True .. && ninja
|
||||
|
||||
@@ -27,9 +27,10 @@ def GenericHelp(vers):
|
||||
print(' --local Force local execution: rewrites the test xml script before running to always execute on localhost. Assumes')
|
||||
print(' images are available locally, will not remove any images and will run inside the current repo directory')
|
||||
|
||||
def GitSrvHelp(repository,branch,mergeallow,targetbranch):
|
||||
def GitSrvHelp(repository,branch,commit,mergeallow,targetbranch):
|
||||
print(' --repository=[OAI RAN Repository URL] -- ' + repository)
|
||||
print(' --branch=[OAI RAN Repository Branch] -- ' + branch)
|
||||
print(' --commitID=[OAI RAN Repository Commit SHA-1] -- ' + commit)
|
||||
print(' --ranAllowMerge=[Allow Merge Request (with target branch) (true or false)] -- ' + mergeallow)
|
||||
print(' --targetBranch=[Target Branch in case of a Merge Request] -- ' + targetbranch)
|
||||
|
||||
|
||||
@@ -165,15 +165,6 @@ def ExecuteActionWithParam(action, ctx, node):
|
||||
core_op = getattr(cls_oaicitest.OaiCiTest, action)
|
||||
success = core_op(cn_id, ctx, HTML)
|
||||
|
||||
elif action == 'DeployWithScript' or action == 'UndeployWithScript':
|
||||
script = test.findtext('script')
|
||||
options = test.findtext('options')
|
||||
if action == 'DeployWithScript':
|
||||
deploymentTag = RAN.branch
|
||||
success = cls_oaicitest.DeployWithScript(HTML, node, script, options, deploymentTag)
|
||||
elif action == 'UndeployWithScript':
|
||||
success = cls_oaicitest.UndeployWithScript(HTML, ctx, node, script, options)
|
||||
|
||||
elif action == 'Deploy_Object' or action == 'Undeploy_Object' or action == "Create_Workspace" or action == "Stop_Object":
|
||||
CONTAINERS.yamlPath = test.findtext('yaml_path')
|
||||
CONTAINERS.services = test.findtext('services')
|
||||
@@ -245,8 +236,7 @@ def ExecuteActionWithParam(action, ctx, node):
|
||||
elif action == 'AnalyzeRTStats_Object':
|
||||
yaml = test.findtext('stats_cfg')
|
||||
service = test.findtext('service')
|
||||
stats_files = (test.findtext('stats_file') or '').split()
|
||||
success = CONTAINERS.AnalyzeRTStatsObject(HTML, node, ctx, yaml, service, stats_files)
|
||||
success = CONTAINERS.AnalyzeRTStatsObject(HTML, node, ctx, yaml, service)
|
||||
|
||||
else:
|
||||
logging.warning(f"unknown action {action}, skip step")
|
||||
|
||||
@@ -25,6 +25,8 @@ function usage {
|
||||
SOURCE_BRANCH=$(git rev-parse --abbrev-ref HEAD)
|
||||
TARGET_BRANCH="origin/develop"
|
||||
|
||||
git fetch --quiet
|
||||
|
||||
while getopts ":s:t:h" opt; do
|
||||
case "$opt" in
|
||||
s)
|
||||
@@ -55,20 +57,11 @@ done
|
||||
# ----------------------------
|
||||
# Merged commits
|
||||
# ----------------------------
|
||||
if [[ "$SOURCE_BRANCH" =~ ^[0-9a-f]{40}$ ]]; then
|
||||
# note: if no branch could be found, it will result in "" and git rev-list
|
||||
# will use the commit ID. Exclude "HEAD detached at", then use first branch
|
||||
# name.
|
||||
BRANCH_NAME=$(git branch -a --points-at $SOURCE_BRANCH --format='%(refname:short)' | grep -v detached | head -n1)
|
||||
echo "SHA recognized in $SOURCE_BRANCH, using \"$BRANCH_NAME\" as branch name"
|
||||
else
|
||||
BRANCH_NAME="$SOURCE_BRANCH"
|
||||
fi
|
||||
if [[ ! "$BRANCH_NAME" =~ ^(origin/)?integration_[0-9]{4}_w[0-9]{2}$ ]]; then
|
||||
mergeCommits=$(git rev-list --merges --abbrev-commit "$TARGET_BRANCH".."$SOURCE_BRANCH")
|
||||
mergeCommits=$(git rev-list --merges --abbrev-commit "$TARGET_BRANCH".."$SOURCE_BRANCH")
|
||||
if [[ ! "$SOURCE_BRANCH" =~ ^(origin/)?integration_[0-9]{4}_w[0-9]{2}$ ]]; then
|
||||
if [[ -n "$mergeCommits" ]]; then
|
||||
message="Error: Following merge commits are found in the source branch history. Please rebase your branch.\n\n"
|
||||
message+="$(echo "$mergeCommits" | paste -sd ',' | sed 's/,/, /g')\n"
|
||||
message="> ERROR: Following merge commits are found in the source branch history. Please rebase your branch.\n>\n"
|
||||
message+="> $(echo "$mergeCommits" | paste -sd ',' -)\n"
|
||||
echo -e "$message"
|
||||
exit 3
|
||||
fi
|
||||
@@ -82,7 +75,7 @@ unsignedCommits=$(
|
||||
if ! git log -1 --format=%B "$c" | grep -q "Signed-off-by:"; then
|
||||
git log -1 --format='%h' "$c"
|
||||
fi
|
||||
done | paste -sd ',' | sed 's/,/, /g'
|
||||
done | paste -sd ","
|
||||
)
|
||||
|
||||
# ----------------------------
|
||||
@@ -91,13 +84,13 @@ unsignedCommits=$(
|
||||
message=""
|
||||
|
||||
if [ -n "$unsignedCommits" ]; then
|
||||
message="The following commit(s) are missing a Signed-off-by:\n\n$unsignedCommits\n\n"
|
||||
message+="Please use 'git commit -s' to sign your commits.\n"
|
||||
message+="For detailed instructions, refer to the CONTRIBUTING file at the root of this repository."
|
||||
message="> WARNING: The following commit(s) are missing a Signed-off-by:\n>\n> $unsignedCommits\n>\n"
|
||||
message+="> Please use 'git commit -s' to sign your commits.\n>\n"
|
||||
message+="> For detailed instructions, refer to the CONTRIBUTING file at the root of this repository."
|
||||
echo -e "$message"
|
||||
exit 1
|
||||
else
|
||||
message="All commits are signed off using 'git commit -s'."
|
||||
message="> All commits are signed off using 'git commit -s'."
|
||||
echo -e "$message"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
@@ -145,6 +145,6 @@ class RANManagement():
|
||||
mac_file = archiveArtifact(cmd, ctx, f"{logdir}/nrMAC_stats.log")
|
||||
|
||||
logging.info(f"check against thresholds from {thresholds}")
|
||||
success, datalog_rt_stats = cls_analysis.Analysis.analyze_rt_stats(thresholds, [l1_file, mac_file])
|
||||
success, datalog_rt_stats = cls_analysis.Analysis.analyze_rt_stats(thresholds, l1_file, mac_file)
|
||||
HTML.CreateHtmlDataLogTable(datalog_rt_stats)
|
||||
return success
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
#!/bin/bash
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
export PS4='[\D{%Y-%m-%d %H:%M:%S}] '
|
||||
|
||||
function die() { echo $@; exit 1; }
|
||||
[ $# -eq 3 ] || die "usage: $0 <path-to-dir> <namespace> <image-tag>"
|
||||
|
||||
OC_NS=${2}
|
||||
IMAGE_TAG=${3}
|
||||
OC_DIR=${1}
|
||||
OC_RELEASE=$(basename "${1}")
|
||||
|
||||
cat /opt/oc-password | oc login -u oaicicd --server https://api.oai.cs.eurecom.fr:6443 > /dev/null
|
||||
oc project ${OC_NS} > /dev/null
|
||||
set -x
|
||||
helm install --wait --timeout 120s ${OC_RELEASE} --set nfimage.version=${IMAGE_TAG} --hide-notes ${OC_DIR}/.
|
||||
status=$?
|
||||
set +x
|
||||
oc logout > /dev/null
|
||||
|
||||
[ $status -eq 0 ] || die "OC chart deployment failed"
|
||||
@@ -1,26 +0,0 @@
|
||||
#!/bin/bash
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
function die() { echo $@; exit 1; }
|
||||
[ $# -eq 3 ] || die "usage: $0 <path-to-dir> <namespace> <log-dir>"
|
||||
|
||||
export PS4='[\D{%Y-%m-%d %H:%M:%S}] '
|
||||
|
||||
OC_DIR=${1}
|
||||
OC_NS=${2}
|
||||
LOG_DIR=${3}
|
||||
OC_RELEASE=$(basename "${OC_DIR}")
|
||||
|
||||
cat ${OC_DIR}/oc-password | oc login -u oaicicd --server https://api.oai.cs.eurecom.fr:6443 > /dev/null
|
||||
oc project ${OC_NS} > /dev/null
|
||||
|
||||
oc describe pod > ${LOG_DIR}/describe-pods-post-test.log
|
||||
oc get pods.metrics.k8s &> ${LOG_DIR}/nf-resource-consumption.log
|
||||
oc logs -l app.kubernetes.io/name=${OC_RELEASE} --tail=-1 > ${LOG_DIR}/${OC_RELEASE}.log
|
||||
set -x
|
||||
helm uninstall ${OC_RELEASE} --wait
|
||||
status=$?
|
||||
set +x
|
||||
oc logout > /dev/null
|
||||
|
||||
[ $status -eq 0 ] || die "OC chart undeployment failed"
|
||||
@@ -21,7 +21,6 @@ To run individual unit tests, start them like so:
|
||||
python tests/log-analysis.py -v
|
||||
python tests/ping-iperf.py -v
|
||||
python tests/pull-clean-int-registry.py -v
|
||||
python tests/script-deployment.py -v
|
||||
|
||||
The logs will indicate if all tests passed. `tests/deployment.py` requires
|
||||
these images to be present:
|
||||
|
||||
@@ -26,7 +26,7 @@ class TestAnalysis(unittest.TestCase):
|
||||
rtsf = "datalog_rt_stats.100.2x2.yaml"
|
||||
l1f = "tests/analysis/gnb_phytest.success.nrL1.log"
|
||||
macf = "tests/analysis/gnb_phytest.success.nrMAC.log"
|
||||
status, s = cls_analysis.Analysis.analyze_rt_stats(rtsf, [l1f, macf])
|
||||
status, s = cls_analysis.Analysis.analyze_rt_stats(rtsf, l1f, macf)
|
||||
self.assertTrue(status)
|
||||
self.assertEqual(s['Title'], "Processing Time (us) from datalog_rt_stats.100.2x2.yaml")
|
||||
self.assertEqual(s['ColNames'], ["Metric", "Average; Max; Count", "Average vs Reference Deviation (Reference Value; Acceptability Deviation Threshold)"])
|
||||
|
||||
@@ -136,7 +136,7 @@ class TestDeploymentMethods(unittest.TestCase):
|
||||
|
||||
def test_create_workspace(self):
|
||||
self.cont.workspace = tempfile.mkdtemp()
|
||||
self.cont.repository = "https://github.com/duranta-project/openairinterface5g.git"
|
||||
self.cont.repository = "https://gitlab.eurecom.fr/oai/openairinterface5g.git"
|
||||
self.cont.branch = "develop"
|
||||
ws = self.cont.Create_Workspace(self.node, self.html)
|
||||
with cls_cmd.LocalCmd() as cmd:
|
||||
|
||||
@@ -1,65 +0,0 @@
|
||||
# SPDX-License-Identifier: LicenseRef-CSSL-1.0
|
||||
|
||||
import sys
|
||||
import logging
|
||||
logging.basicConfig(
|
||||
level=logging.DEBUG,
|
||||
stream=sys.stdout,
|
||||
format="[%(asctime)s] %(levelname)8s: %(message)s"
|
||||
)
|
||||
import os
|
||||
import tempfile
|
||||
|
||||
import unittest
|
||||
|
||||
sys.path.append('./') # to find OAI imports below
|
||||
import cls_oaicitest
|
||||
import cls_oai_html
|
||||
import cls_cmd
|
||||
from cls_ci_helper import TestCaseCtx
|
||||
|
||||
class TestScriptDeployment(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.tmpdir = tempfile.mkdtemp()
|
||||
self.html = cls_oai_html.HTMLManagement()
|
||||
self.node = 'localhost'
|
||||
self.tag = 'develop-12345678'
|
||||
self.ctx = TestCaseCtx.Default(self.tmpdir)
|
||||
def tearDown(self):
|
||||
with cls_cmd.LocalCmd() as c:
|
||||
c.run(f'rm -rf {self.ctx.logPath}')
|
||||
|
||||
def test_simple_deployment(self):
|
||||
script = 'tests/scripts/deploy-with-script.sh'
|
||||
options = 'WILL PASS'
|
||||
success = cls_oaicitest.DeployWithScript(self.html, self.node, script, options, self.tag)
|
||||
self.assertTrue(success)
|
||||
|
||||
def test_simple_deployment_fail(self):
|
||||
script = 'tests/scripts/deploy-with-script.sh'
|
||||
options = 'WILLFAIL'
|
||||
success = cls_oaicitest.DeployWithScript(self.html, self.node, script, options, self.tag)
|
||||
self.assertFalse(success)
|
||||
|
||||
def test_simple_undeployment(self):
|
||||
script = 'tests/scripts/undeploy-with-script.sh'
|
||||
options = '%%log_dir%% WILL PASS'
|
||||
success = cls_oaicitest.UndeployWithScript(self.html, self.ctx, self.node, script, options)
|
||||
self.assertTrue(success)
|
||||
# verify logs were created
|
||||
files = os.listdir(self.tmpdir)
|
||||
self.assertIn('112233-log1.txt', files)
|
||||
self.assertIn('112233-log2.txt', files)
|
||||
|
||||
def test_simple_undeployment_fail(self):
|
||||
script = 'tests/scripts/undeploy-with-script.sh'
|
||||
options = '%%log_dir%% WILLFAILL'
|
||||
success = cls_oaicitest.UndeployWithScript(self.html, self.ctx, self.node, script, options)
|
||||
self.assertFalse(success)
|
||||
# verify logs were created
|
||||
files = os.listdir(self.tmpdir)
|
||||
self.assertIn('112233-log1.txt', files)
|
||||
self.assertIn('112233-log2.txt', files)
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
@@ -1,10 +0,0 @@
|
||||
#!/bin/bash
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
function die() { echo $@; exit 1; }
|
||||
|
||||
echo "Deploy script executed with options: $@"
|
||||
|
||||
[ $# -lt 2 ] && die "failing"
|
||||
|
||||
exit 0
|
||||
@@ -1,15 +0,0 @@
|
||||
#!/bin/bash
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
function die() { echo $@; exit 1; }
|
||||
|
||||
echo "Undeploy script executed with options: $@"
|
||||
|
||||
LOG_DIR="$1"
|
||||
mkdir -p "$LOG_DIR"
|
||||
echo "Undeployment started" > "$LOG_DIR/log1.txt"
|
||||
echo "Undeployment finished successfully" > "$LOG_DIR/log2.txt"
|
||||
|
||||
[ $# -lt 3 ] && die "failing"
|
||||
|
||||
exit 0
|
||||
@@ -1,20 +1,21 @@
|
||||
#!/bin/bash
|
||||
#/bin/bash
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
branch=$(git rev-parse --abbrev-ref HEAD)
|
||||
commit=$(git rev-parse HEAD)
|
||||
file=../../test_results.html
|
||||
rm -f ${file}
|
||||
|
||||
cd ../../
|
||||
python3 main.py \
|
||||
--mode=InitiateHtml \
|
||||
--repository=https://github.com/duranta-project/openairinterface5g.git \
|
||||
--repository=https://gitlab.eurecom.fr/oai/openairinterface5g.git \
|
||||
--branch=${branch} \
|
||||
--XMLTestFile=tests/test-runner/test.xml
|
||||
|
||||
python3 main.py \
|
||||
--mode=TesteNB \
|
||||
--repository=https://github.com/duranta-project/openairinterface5g.git \
|
||||
--repository=https://gitlab.eurecom.fr/oai/openairinterface5g.git \
|
||||
--branch=${branch} \
|
||||
--ranAllowMerge=true \
|
||||
--targetBranch=develop \
|
||||
|
||||
@@ -33,5 +33,3 @@
|
||||
- Create_Workspace
|
||||
- AnalyzeRTStats
|
||||
- AnalyzeRTStats_Object
|
||||
- DeployWithScript
|
||||
- UndeployWithScript
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach OAI UE 1 and 2</desc>
|
||||
<id>rfsim5g_ue rfsim5g_ue2</id>
|
||||
<node>localhost</node>
|
||||
<node>carabe</node>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
@@ -98,32 +98,21 @@
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>Iperf (DL/TCP)(20 sec)</desc>
|
||||
<iperf_args>-t 20 -R</iperf_args>
|
||||
<class>Ping</class>
|
||||
<desc>Ping ext-dn from both UEs</desc>
|
||||
<id>rfsim5g_ue rfsim5g_ue2</id>
|
||||
<node>localhost</node>
|
||||
<node>carabe</node>
|
||||
<svr_id>oai_ext_dn</svr_id>
|
||||
<svr_node>localhost</svr_node>
|
||||
<iperf_tcp_rate_target>10</iperf_tcp_rate_target>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>Iperf (UL/TCP)(20 sec)</desc>
|
||||
<iperf_args>-t 20</iperf_args>
|
||||
<id>rfsim5g_ue rfsim5g_ue2</id>
|
||||
<node>localhost</node>
|
||||
<svr_id>oai_ext_dn</svr_id>
|
||||
<svr_node>localhost</svr_node>
|
||||
<iperf_tcp_rate_target>5</iperf_tcp_rate_target>
|
||||
<svr_node>carabe</svr_node>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Detach_UE</class>
|
||||
<desc>Detach OAI UE 1 and 2</desc>
|
||||
<id>rfsim5g_ue rfsim5g_ue2</id>
|
||||
<node>localhost</node>
|
||||
<node>carabe</node>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
@@ -189,7 +178,7 @@
|
||||
<yaml_path>ci-scripts/yaml_files/5g_rfsimulator_flexric</yaml_path>
|
||||
<always_exec>true</always_exec>
|
||||
<analysis>
|
||||
<service>nearRT-RIC=LastLineContains=The nearRT-RIC run SUCCESSFULLY</service>
|
||||
<service>nearRT-RIC=LastLineContains=Removing E2 Node</service>
|
||||
<service>xapp-rc-moni=LastLineContains=Test xApp run SUCCESSFULLY</service>
|
||||
<service>xapp-kpm-moni=LastLineContains=Test xApp run SUCCESSFULLY</service>
|
||||
<service>xapp-kpm-rc=LastLineContains=Test xApp run SUCCESSFULLY</service>
|
||||
|
||||
@@ -1,26 +1,28 @@
|
||||
<!-- SPDX-License-Identifier: LicenseRef-CSSL-1.0 -->
|
||||
|
||||
<testCaseList>
|
||||
<htmlTabRef>build-tab</htmlTabRef>
|
||||
<htmlTabName>Build Images with T2 support</htmlTabName>
|
||||
<htmlTabRef>build-cuda-tab</htmlTabRef>
|
||||
<htmlTabName>Build Container Images for ARM with CUDA</htmlTabName>
|
||||
<htmlTabIcon>wrench</htmlTabIcon>
|
||||
|
||||
<testCase>
|
||||
<class>Create_Workspace</class>
|
||||
<desc>Create new Workspace for server 0</desc>
|
||||
<node>stonechat</node>
|
||||
<node>jetson3-oai</node>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Build_Image</class>
|
||||
<desc>Build Images with T2</desc>
|
||||
<kind>fhi72-t2</kind>
|
||||
<node>stonechat</node>
|
||||
<desc>Build all Images</desc>
|
||||
<node>jetson3-oai</node>
|
||||
<kind>native_cuda_armv8</kind>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Push_Local_Registry</class>
|
||||
<desc>Push Images to Local Registry</desc>
|
||||
<node>stonechat</node>
|
||||
<node>jetson3-oai</node>
|
||||
<tag_prefix>armv8_cuda_</tag_prefix>
|
||||
</testCase>
|
||||
|
||||
</testCaseList>
|
||||
192
ci-scripts/xml_files/container_sa_b200_nrue_cuda_jetson.xml
Normal file
192
ci-scripts/xml_files/container_sa_b200_nrue_cuda_jetson.xml
Normal file
@@ -0,0 +1,192 @@
|
||||
<!-- SPDX-License-Identifier: LicenseRef-CSSL-1.0 -->
|
||||
|
||||
<testCaseList>
|
||||
<htmlTabRef>JETSON-5G-NRUE-CUDA</htmlTabRef>
|
||||
<htmlTabName>30 MHz TDD SA JETSON with CUDA</htmlTabName>
|
||||
<htmlTabIcon>tasks</htmlTabIcon>
|
||||
<testCase>
|
||||
<class>DeployCoreNetwork</class>
|
||||
<desc>Initialize 5G Core</desc>
|
||||
<cn_id>oc-cn5g-00104</cn_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Pull_Local_Registry</class>
|
||||
<desc>Pull Images from Local Registry</desc>
|
||||
<node>jetson2-oai</node>
|
||||
<images>oai-nr-ue</images>
|
||||
<tag_prefix>armv8_cuda_</tag_prefix>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Pull_Local_Registry</class>
|
||||
<desc>Pull Images from Local Registry</desc>
|
||||
<node>gracehopper1-oai</node>
|
||||
<images>oai-gnb-aerial</images>
|
||||
<tag_prefix>arm_</tag_prefix>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Create_Workspace</class>
|
||||
<desc>Create new Workspace</desc>
|
||||
<node>jetson2-oai</node>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Create_Workspace</class>
|
||||
<desc>Create new Workspace</desc>
|
||||
<node>gracehopper1-oai</node>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Custom_Script</class>
|
||||
<desc>Configure 30 MHz bandwidth on WNC RU</desc>
|
||||
<node>gracehopper1-oai</node>
|
||||
<script>scripts/set-wnc-bandwidth.sh</script>
|
||||
<args>30</args>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Deploy_Object</class>
|
||||
<desc>Deploy PNF/Nvidia CUBB in a container</desc>
|
||||
<node>gracehopper1-oai</node>
|
||||
<yaml_path>ci-scripts/yaml_files/sa_gnb_aerial_30MHz</yaml_path>
|
||||
<services>nv-cubb</services>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Deploy_Object</class>
|
||||
<desc>Deploy VNF in a container</desc>
|
||||
<node>gracehopper1-oai</node>
|
||||
<yaml_path>ci-scripts/yaml_files/sa_gnb_aerial_30MHz</yaml_path>
|
||||
<services>oai-gnb-aerial</services>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Deploy_Object</class>
|
||||
<desc>Deploy nrUE (TDD/Band78/40MHz/N310) in a container</desc>
|
||||
<yaml_path>ci-scripts/yaml_files/sa_b200_jetson_cuda_nrue</yaml_path>
|
||||
<node>jetson2-oai</node>
|
||||
<num_attempts>3</num_attempts>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach OAIUE</desc>
|
||||
<id>oai_ue_jetson2</id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Custom_Command</class>
|
||||
<desc>Configure IP route</desc>
|
||||
<node>jetson2-oai</node>
|
||||
<command>sudo ip route add 172.21.6.105 via 13.1.1.100 dev oaitun_ue1</command>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Ping</class>
|
||||
<desc>Ping: 20pings in 20sec</desc>
|
||||
<id>oai_ue_jetson2</id>
|
||||
<svr_id>oc-cn5g-00104</svr_id>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||
<ping_rttavg_threshold>25</ping_rttavg_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (UL/10Mbps/UDP)(30 sec)</desc>
|
||||
<iperf_args>-u -b 10M -t 30 -i 1</iperf_args>
|
||||
<id>oai_ue_jetson2</id>
|
||||
<svr_id>oc-cn5g-00104</svr_id>
|
||||
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
|
||||
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (DL/10Mbps/UDP)(30 sec)</desc>
|
||||
<iperf_args>-u -b 10M -t 30 -i 1 -R</iperf_args>
|
||||
<id>oai_ue_jetson2</id>
|
||||
<svr_id>oc-cn5g-00104</svr_id>
|
||||
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
|
||||
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (UL/30Mbps/UDP)(30 sec)</desc>
|
||||
<may_fail>true</may_fail>
|
||||
<iperf_args>-u -b 30M -t 30 -i 1</iperf_args>
|
||||
<id>oai_ue_jetson2</id>
|
||||
<svr_id>oc-cn5g-00104</svr_id>
|
||||
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
|
||||
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (DL/30Mbps/UDP)(30 sec)</desc>
|
||||
<may_fail>true</may_fail>
|
||||
<iperf_args>-u -b 30M -t 30 -i 1 -R</iperf_args>
|
||||
<id>oai_ue_jetson2</id>
|
||||
<svr_id>oc-cn5g-00104</svr_id>
|
||||
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
|
||||
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Undeploy_Object</class>
|
||||
<always_exec>true</always_exec>
|
||||
<desc>Undeploy nr UE</desc>
|
||||
<node>jetson2-oai</node>
|
||||
<yaml_path>ci-scripts/yaml_files/sa_b200_jetson_cuda_nrue</yaml_path>
|
||||
<analysis>
|
||||
<services>oai-nr-ue</services>
|
||||
</analysis>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Undeploy_Object</class>
|
||||
<always_exec>true</always_exec>
|
||||
<desc>Undeploy gNB</desc>
|
||||
<node>gracehopper1-oai</node>
|
||||
<yaml_path>ci-scripts/yaml_files/sa_gnb_aerial_30MHz</yaml_path>
|
||||
<analysis>
|
||||
<services>oai-gnb-aerial=RetxCheck=20,100,100,100 oai-gnb-aerial=EndsWithBye</services>
|
||||
</analysis>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Custom_Script</class>
|
||||
<always_exec>true</always_exec>
|
||||
<desc>Configure 100 MHz bandwidth on WNC RU</desc>
|
||||
<node>gracehopper1-oai</node>
|
||||
<script>scripts/set-wnc-bandwidth.sh</script>
|
||||
<args>100</args>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Clean_Test_Server_Images</class>
|
||||
<always_exec>true</always_exec>
|
||||
<desc>Clean Test Images on Test Server</desc>
|
||||
<node>gracehopper1-oai</node>
|
||||
<images>oai-gnb-aerial</images>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Clean_Test_Server_Images</class>
|
||||
<always_exec>true</always_exec>
|
||||
<desc>Clean Test Images on Test Server</desc>
|
||||
<node>jetson2-oai</node>
|
||||
<images>oai-nr-ue</images>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>UndeployCoreNetwork</class>
|
||||
<always_exec>true</always_exec>
|
||||
<desc>Terminate 5G Core</desc>
|
||||
<cn_id>oc-cn5g-00104</cn_id>
|
||||
</testCase>
|
||||
|
||||
</testCaseList>
|
||||
@@ -1,171 +0,0 @@
|
||||
<!-- SPDX-License-Identifier: LicenseRef-CSSL-1.0 -->
|
||||
|
||||
<testCaseList>
|
||||
<htmlTabRef>test-5g-fhi72-4x4-benetel</htmlTabRef>
|
||||
<htmlTabName>100 MHz 4x4 TDD SA Benetel</htmlTabName>
|
||||
<htmlTabIcon>tasks</htmlTabIcon>
|
||||
<testCase>
|
||||
<class>DeployCoreNetwork</class>
|
||||
<desc>Initialize 5G Core</desc>
|
||||
<cn_id>oc-cn5g-20897-stonechat</cn_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>DeployWithScript</class>
|
||||
<desc>Deploy CU</desc>
|
||||
<node>stonechat</node>
|
||||
<script>scripts/oc-chart-deploy.sh</script>
|
||||
<options>/opt/oai-cn5g-fed-develop-2025-jan/ci-scripts/charts/oai-cu/ oaicicd-core-for-fhi72 %%image_tag%%</options>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Pull_Local_Registry</class>
|
||||
<desc>Pull Images from Local Registry</desc>
|
||||
<node>stonechat</node>
|
||||
<images>oai-gnb-fhi72-t2</images>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Create_Workspace</class>
|
||||
<desc>Create new Workspace for server 0</desc>
|
||||
<node>stonechat</node>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Deploy_Object</class>
|
||||
<desc>Deploy DU (TDD/Band77/100MHz/Benetel) in a container</desc>
|
||||
<yaml_path>ci-scripts/yaml_files/sa_fhi_7.2_benetel_4x4_du</yaml_path>
|
||||
<services>oai-du</services>
|
||||
<node>stonechat</node>
|
||||
<num_attempts>2</num_attempts>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach UE</desc>
|
||||
<id>up2-fhi72</id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Ping</class>
|
||||
<desc>Ping: 100 pings in 10 sec</desc>
|
||||
<id>up2-fhi72</id>
|
||||
<svr_id>oc-cn5g-20897-stonechat</svr_id>
|
||||
<ping_args>-c 100 -i 0.1</ping_args>
|
||||
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||
<ping_rttavg_threshold>15</ping_rttavg_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (DL/600Mbps/UDP)(60 sec)</desc>
|
||||
<iperf_args>-u -b 600M -t 60 -R -l1428</iperf_args>
|
||||
<id>up2-fhi72</id>
|
||||
<iperf_packetloss_threshold>20</iperf_packetloss_threshold>
|
||||
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||
<iperf_profile>balanced</iperf_profile>
|
||||
<svr_id>oc-cn5g-20897-stonechat</svr_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (DL/800Mbps/UDP)(60 sec)</desc>
|
||||
<iperf_args>-u -b 800M -t 60 -R -l 1428</iperf_args>
|
||||
<id>up2-fhi72</id>
|
||||
<iperf_packetloss_threshold>20</iperf_packetloss_threshold>
|
||||
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||
<iperf_profile>balanced</iperf_profile>
|
||||
<svr_id>oc-cn5g-20897-stonechat</svr_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>Optional iperf (DL/1000Mbps/UDP)(60 sec)</desc>
|
||||
<may_fail>true</may_fail>
|
||||
<iperf_args>-u -b 1000M -t 60 -R -l 1428</iperf_args>
|
||||
<id>up2-fhi72</id>
|
||||
<iperf_packetloss_threshold>20</iperf_packetloss_threshold>
|
||||
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||
<iperf_profile>balanced</iperf_profile>
|
||||
<svr_id>oc-cn5g-20897-stonechat</svr_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (UL/60Mbps/UDP)(30 sec)</desc>
|
||||
<iperf_args>-u -b 60M -t 30</iperf_args>
|
||||
<id>up2-fhi72</id>
|
||||
<iperf_packetloss_threshold>20</iperf_packetloss_threshold>
|
||||
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||
<iperf_profile>balanced</iperf_profile>
|
||||
<svr_id>oc-cn5g-20897-stonechat</svr_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (DL/TCP)(30 sec)</desc>
|
||||
<iperf_args>-t 30 -R</iperf_args>
|
||||
<id>up2-fhi72</id>
|
||||
<iperf_tcp_rate_target>40</iperf_tcp_rate_target>
|
||||
<svr_id>oc-cn5g-20897-stonechat</svr_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (UL/TCP)(30 sec)</desc>
|
||||
<iperf_args>-t 30</iperf_args>
|
||||
<id>up2-fhi72</id>
|
||||
<iperf_tcp_rate_target>10</iperf_tcp_rate_target>
|
||||
<svr_id>oc-cn5g-20897-stonechat</svr_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Detach_UE</class>
|
||||
<always_exec>true</always_exec>
|
||||
<desc>Detach UE</desc>
|
||||
<id>up2-fhi72</id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>IdleSleep</class>
|
||||
<desc>Sleep</desc>
|
||||
<idle_sleep_time_in_sec>5</idle_sleep_time_in_sec>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Undeploy_Object</class>
|
||||
<always_exec>true</always_exec>
|
||||
<desc>Undeploy DU</desc>
|
||||
<yaml_path>ci-scripts/yaml_files/sa_fhi_7.2_benetel_4x4_du</yaml_path>
|
||||
<services>oai-du</services>
|
||||
<node>stonechat</node>
|
||||
<analysis>
|
||||
<services>oai-du=EndsWithBye</services>
|
||||
</analysis>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Clean_Test_Server_Images</class>
|
||||
<always_exec>true</always_exec>
|
||||
<desc>Clean Test Images on Test Server</desc>
|
||||
<node>stonechat</node>
|
||||
<images>oai-gnb-fhi72-t2</images>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>UndeployWithScript</class>
|
||||
<always_exec>true</always_exec>
|
||||
<desc>Undeploy CU on OC</desc>
|
||||
<node>stonechat</node>
|
||||
<script>scripts/oc-chart-undeploy.sh</script>
|
||||
<options>/opt/oai-cn5g-fed-develop-2025-jan/ci-scripts/charts/oai-cu/ oaicicd-core-for-fhi72 %%log_dir%%</options>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>UndeployCoreNetwork</class>
|
||||
<always_exec>true</always_exec>
|
||||
<desc>Terminate 5G Core</desc>
|
||||
<cn_id>oc-cn5g-20897-stonechat</cn_id>
|
||||
</testCase>
|
||||
|
||||
</testCaseList>
|
||||
@@ -1,108 +0,0 @@
|
||||
<!-- SPDX-License-Identifier: LicenseRef-CSSL-1.0 -->
|
||||
|
||||
<testCaseList>
|
||||
<htmlTabRef>test-5g-fhi72-8x8-benetel</htmlTabRef>
|
||||
<htmlTabName>100 MHz 8x8 TDD SA Benetel</htmlTabName>
|
||||
<htmlTabIcon>tasks</htmlTabIcon>
|
||||
|
||||
<testCase>
|
||||
<class>Pull_Local_Registry</class>
|
||||
<desc>Pull Images from Local Registry</desc>
|
||||
<node>stonechat</node>
|
||||
<images>oai-gnb-fhi72-t2</images>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Create_Workspace</class>
|
||||
<desc>Create new Workspace for server 0</desc>
|
||||
<node>stonechat</node>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Deploy_Object</class>
|
||||
<desc>Deploy DU (TDD/Band77/100MHz/Benetel/8x8) in a container</desc>
|
||||
<yaml_path>ci-scripts/yaml_files/sa_fhi_7.2_benetel_8x8_du</yaml_path>
|
||||
<services>oai-du</services>
|
||||
<node>stonechat</node>
|
||||
<num_attempts>2</num_attempts>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach UE</desc>
|
||||
<id>up3</id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>IdleSleep</class>
|
||||
<desc>Sleep</desc>
|
||||
<idle_sleep_time_in_sec>20</idle_sleep_time_in_sec>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Ping</class>
|
||||
<desc>Ping: 100 pings in 10 sec</desc>
|
||||
<id>up3</id>
|
||||
<svr_id>oc-cn5g-20899-always-on</svr_id>
|
||||
<ping_args>-c 100 -i 0.1</ping_args>
|
||||
<ping_packetloss_threshold>20</ping_packetloss_threshold>
|
||||
<ping_rttavg_threshold>15</ping_rttavg_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (DL/200Mbps/UDP)(60 sec)</desc>
|
||||
<may_fail>true</may_fail>
|
||||
<iperf_args>-u -b 200M -t 60 -R -l1428 -p 5209</iperf_args>
|
||||
<id>up3</id>
|
||||
<iperf_packetloss_threshold>20</iperf_packetloss_threshold>
|
||||
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||
<iperf_profile>balanced</iperf_profile>
|
||||
<svr_id>oc-cn5g-20899-always-on</svr_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (DL/400Mbps/UDP)(60 sec)</desc>
|
||||
<may_fail>true</may_fail>
|
||||
<iperf_args>-u -b 400M -t 60 -R -l 1428 -p 5209</iperf_args>
|
||||
<id>up3</id>
|
||||
<iperf_packetloss_threshold>20</iperf_packetloss_threshold>
|
||||
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||
<svr_id>oc-cn5g-20899-always-on</svr_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Detach_UE</class>
|
||||
<always_exec>true</always_exec>
|
||||
<desc>Detach UE</desc>
|
||||
<id>up3</id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>IdleSleep</class>
|
||||
<desc>Sleep</desc>
|
||||
<idle_sleep_time_in_sec>5</idle_sleep_time_in_sec>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Undeploy_Object</class>
|
||||
<always_exec>true</always_exec>
|
||||
<desc>Undeploy DU</desc>
|
||||
<yaml_path>ci-scripts/yaml_files/sa_fhi_7.2_benetel_8x8_du</yaml_path>
|
||||
<services>oai-du</services>
|
||||
<node>stonechat</node>
|
||||
<analysis>
|
||||
<services>oai-du=EndsWithBye</services>
|
||||
</analysis>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Clean_Test_Server_Images</class>
|
||||
<always_exec>true</always_exec>
|
||||
<desc>Clean Test Images on Test Server</desc>
|
||||
<node>stonechat</node>
|
||||
<images>oai-gnb-fhi72-t2</images>
|
||||
</testCase>
|
||||
|
||||
</testCaseList>
|
||||
@@ -1,170 +0,0 @@
|
||||
<!-- SPDX-License-Identifier: LicenseRef-CSSL-1.0 -->
|
||||
|
||||
<testCaseList>
|
||||
<htmlTabRef>test-5g-fhi72-4x4-liteon</htmlTabRef>
|
||||
<htmlTabName>100 MHz 4x4 TDD SA LiteON</htmlTabName>
|
||||
<htmlTabIcon>tasks</htmlTabIcon>
|
||||
|
||||
<testCase>
|
||||
<class>DeployCoreNetwork</class>
|
||||
<desc>Initialize 5G Core</desc>
|
||||
<cn_id>oc-cn5g-20897-stonechat</cn_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>DeployWithScript</class>
|
||||
<desc>Deploy CU</desc>
|
||||
<node>stonechat</node>
|
||||
<script>scripts/oc-chart-deploy.sh</script>
|
||||
<options>/opt/oai-cn5g-fed-develop-2025-jan/ci-scripts/charts/oai-cu/ oaicicd-core-for-fhi72 %%image_tag%%</options>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Pull_Local_Registry</class>
|
||||
<desc>Pull Images from Local Registry</desc>
|
||||
<node>stonechat</node>
|
||||
<images>oai-gnb-fhi72-t2</images>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Create_Workspace</class>
|
||||
<desc>Create new Workspace for server 0</desc>
|
||||
<node>stonechat</node>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Deploy_Object</class>
|
||||
<desc>Deploy DU (TDD/Band78/100MHz/VVDN) in a container</desc>
|
||||
<yaml_path>ci-scripts/yaml_files/sa_fhi_7.2_liteon_4x4_gnb</yaml_path>
|
||||
<node>stonechat</node>
|
||||
<num_attempts>2</num_attempts>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach UE</desc>
|
||||
<id>up2-fhi72</id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Ping</class>
|
||||
<desc>Ping: 100 pings in 10 sec</desc>
|
||||
<id>up2-fhi72</id>
|
||||
<svr_id>oc-cn5g-20897-stonechat</svr_id>
|
||||
<ping_args>-c 100 -i 0.1</ping_args>
|
||||
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||
<ping_rttavg_threshold>15</ping_rttavg_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (DL/600Mbps/UDP)(60 sec)</desc>
|
||||
<iperf_args>-u -b 600M -t 60 -R -l1428</iperf_args>
|
||||
<id>up2-fhi72</id>
|
||||
<iperf_packetloss_threshold>20</iperf_packetloss_threshold>
|
||||
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||
<iperf_profile>balanced</iperf_profile>
|
||||
<svr_id>oc-cn5g-20897-stonechat</svr_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (DL/800Mbps/UDP)(60 sec)</desc>
|
||||
<iperf_args>-u -b 800M -t 60 -R -l 1428</iperf_args>
|
||||
<id>up2-fhi72</id>
|
||||
<iperf_packetloss_threshold>20</iperf_packetloss_threshold>
|
||||
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||
<iperf_profile>balanced</iperf_profile>
|
||||
<svr_id>oc-cn5g-20897-stonechat</svr_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>Optional iperf (DL/1000Mbps/UDP)(60 sec)</desc>
|
||||
<iperf_args>-u -b 1000M -t 60 -R -l 1428</iperf_args>
|
||||
<may_fail>true</may_fail>
|
||||
<id>up2-fhi72</id>
|
||||
<iperf_packetloss_threshold>20</iperf_packetloss_threshold>
|
||||
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||
<iperf_profile>balanced</iperf_profile>
|
||||
<svr_id>oc-cn5g-20897-stonechat</svr_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (UL/60Mbps/UDP)(30 sec)</desc>
|
||||
<iperf_args>-u -b 60M -t 30</iperf_args>
|
||||
<id>up2-fhi72</id>
|
||||
<iperf_packetloss_threshold>20</iperf_packetloss_threshold>
|
||||
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||
<iperf_profile>balanced</iperf_profile>
|
||||
<svr_id>oc-cn5g-20897-stonechat</svr_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (DL/TCP)(30 sec)</desc>
|
||||
<iperf_args>-t 30 -R</iperf_args>
|
||||
<id>up2-fhi72</id>
|
||||
<iperf_tcp_rate_target>40</iperf_tcp_rate_target>
|
||||
<svr_id>oc-cn5g-20897-stonechat</svr_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (UL/TCP)(30 sec)</desc>
|
||||
<iperf_args>-t 30</iperf_args>
|
||||
<id>up2-fhi72</id>
|
||||
<iperf_tcp_rate_target>10</iperf_tcp_rate_target>
|
||||
<svr_id>oc-cn5g-20897-stonechat</svr_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Detach_UE</class>
|
||||
<always_exec>true</always_exec>
|
||||
<desc>Detach UE</desc>
|
||||
<id>up2-fhi72</id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>IdleSleep</class>
|
||||
<desc>Sleep</desc>
|
||||
<idle_sleep_time_in_sec>5</idle_sleep_time_in_sec>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Undeploy_Object</class>
|
||||
<always_exec>true</always_exec>
|
||||
<desc>Undeploy DU</desc>
|
||||
<yaml_path>ci-scripts/yaml_files/sa_fhi_7.2_liteon_4x4_gnb</yaml_path>
|
||||
<node>stonechat</node>
|
||||
<analysis>
|
||||
<services>oai-du=EndsWithBye</services>
|
||||
</analysis>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Clean_Test_Server_Images</class>
|
||||
<always_exec>true</always_exec>
|
||||
<desc>Clean Test Images on Test Server</desc>
|
||||
<node>stonechat</node>
|
||||
<images>oai-gnb-fhi72-t2</images>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>UndeployWithScript</class>
|
||||
<always_exec>true</always_exec>
|
||||
<desc>Undeploy CU on OC</desc>
|
||||
<node>stonechat</node>
|
||||
<script>scripts/oc-chart-undeploy.sh</script>
|
||||
<options>/opt/oai-cn5g-fed-develop-2025-jan/ci-scripts/charts/oai-cu/ oaicicd-core-for-fhi72 %%log_dir%%</options>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>UndeployCoreNetwork</class>
|
||||
<always_exec>true</always_exec>
|
||||
<desc>Terminate 5G Core</desc>
|
||||
<cn_id>oc-cn5g-20897-stonechat</cn_id>
|
||||
</testCase>
|
||||
|
||||
</testCaseList>
|
||||
@@ -1,169 +0,0 @@
|
||||
<!-- SPDX-License-Identifier: LicenseRef-CSSL-1.0 -->
|
||||
|
||||
<testCaseList>
|
||||
<htmlTabRef>test-5g-fhi72-4x4-metanoia</htmlTabRef>
|
||||
<htmlTabName>100 MHz 4x4 TDD SA Metanoia</htmlTabName>
|
||||
<htmlTabIcon>tasks</htmlTabIcon>
|
||||
<testCase>
|
||||
<class>DeployCoreNetwork</class>
|
||||
<desc>Initialize 5G Core</desc>
|
||||
<cn_id>oc-cn5g-20897-stonechat</cn_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>DeployWithScript</class>
|
||||
<desc>Deploy CU</desc>
|
||||
<node>stonechat</node>
|
||||
<script>scripts/oc-chart-deploy.sh</script>
|
||||
<options>/opt/oai-cn5g-fed-develop-2025-jan/ci-scripts/charts/oai-cu/ oaicicd-core-for-fhi72 %%image_tag%%</options>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Pull_Local_Registry</class>
|
||||
<desc>Pull Images from Local Registry</desc>
|
||||
<node>stonechat</node>
|
||||
<images>oai-gnb-fhi72-t2</images>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Create_Workspace</class>
|
||||
<desc>Create new Workspace for server 0</desc>
|
||||
<node>stonechat</node>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Deploy_Object</class>
|
||||
<desc>Deploy DU (TDD/Band78/100MHz/VVDN) in a container</desc>
|
||||
<yaml_path>ci-scripts/yaml_files/sa_fhi_7.2_metanoia_4x4_gnb</yaml_path>
|
||||
<node>stonechat</node>
|
||||
<num_attempts>2</num_attempts>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach UE</desc>
|
||||
<id>up2-fhi72</id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Ping</class>
|
||||
<desc>Ping: 100 pings in 10 sec</desc>
|
||||
<id>up2-fhi72</id>
|
||||
<svr_id>oc-cn5g-20897-stonechat</svr_id>
|
||||
<ping_args>-c 100 -i 0.1</ping_args>
|
||||
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||
<ping_rttavg_threshold>15</ping_rttavg_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (DL/600Mbps/UDP)(60 sec)</desc>
|
||||
<iperf_args>-u -b 600M -t 60 -R -l1428</iperf_args>
|
||||
<id>up2-fhi72</id>
|
||||
<iperf_packetloss_threshold>20</iperf_packetloss_threshold>
|
||||
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||
<iperf_profile>balanced</iperf_profile>
|
||||
<svr_id>oc-cn5g-20897-stonechat</svr_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (DL/800Mbps/UDP)(60 sec)</desc>
|
||||
<iperf_args>-u -b 800M -t 60 -R -l 1428</iperf_args>
|
||||
<id>up2-fhi72</id>
|
||||
<iperf_packetloss_threshold>20</iperf_packetloss_threshold>
|
||||
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||
<iperf_profile>balanced</iperf_profile>
|
||||
<svr_id>oc-cn5g-20897-stonechat</svr_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>Optional iperf (DL/1000Mbps/UDP)(60 sec)</desc>
|
||||
<iperf_args>-u -b 1000M -t 60 -R -l 1428</iperf_args>
|
||||
<may_fail>true</may_fail>
|
||||
<id>up2-fhi72</id>
|
||||
<iperf_packetloss_threshold>20</iperf_packetloss_threshold>
|
||||
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||
<iperf_profile>balanced</iperf_profile>
|
||||
<svr_id>oc-cn5g-20897-stonechat</svr_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (UL/100Mbps/UDP)(30 sec)</desc>
|
||||
<iperf_args>-u -b 100M -t 30</iperf_args>
|
||||
<id>up2-fhi72</id>
|
||||
<iperf_packetloss_threshold>20</iperf_packetloss_threshold>
|
||||
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||
<iperf_profile>balanced</iperf_profile>
|
||||
<svr_id>oc-cn5g-20897-stonechat</svr_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (DL/TCP)(30 sec)</desc>
|
||||
<iperf_args>-t 30 -R</iperf_args>
|
||||
<id>up2-fhi72</id>
|
||||
<iperf_tcp_rate_target>40</iperf_tcp_rate_target>
|
||||
<svr_id>oc-cn5g-20897-stonechat</svr_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (UL/TCP)(30 sec)</desc>
|
||||
<iperf_args>-t 30</iperf_args>
|
||||
<id>up2-fhi72</id>
|
||||
<iperf_tcp_rate_target>10</iperf_tcp_rate_target>
|
||||
<svr_id>oc-cn5g-20897-stonechat</svr_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Detach_UE</class>
|
||||
<always_exec>true</always_exec>
|
||||
<desc>Detach UE</desc>
|
||||
<id>up2-fhi72</id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>IdleSleep</class>
|
||||
<desc>Sleep</desc>
|
||||
<idle_sleep_time_in_sec>5</idle_sleep_time_in_sec>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Undeploy_Object</class>
|
||||
<always_exec>true</always_exec>
|
||||
<desc>Undeploy DU</desc>
|
||||
<yaml_path>ci-scripts/yaml_files/sa_fhi_7.2_metanoia_4x4_gnb</yaml_path>
|
||||
<node>stonechat</node>
|
||||
<analysis>
|
||||
<services>oai-du=EndsWithBye</services>
|
||||
</analysis>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Clean_Test_Server_Images</class>
|
||||
<always_exec>true</always_exec>
|
||||
<desc>Clean Test Images on Test Server</desc>
|
||||
<node>stonechat</node>
|
||||
<images>oai-gnb-fhi72-t2</images>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>UndeployWithScript</class>
|
||||
<always_exec>true</always_exec>
|
||||
<desc>Undeploy CU on OC</desc>
|
||||
<node>stonechat</node>
|
||||
<script>scripts/oc-chart-undeploy.sh</script>
|
||||
<options>/opt/oai-cn5g-fed-develop-2025-jan/ci-scripts/charts/oai-cu/ oaicicd-core-for-fhi72 %%log_dir%%</options>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>UndeployCoreNetwork</class>
|
||||
<always_exec>true</always_exec>
|
||||
<desc>Terminate 5G Core</desc>
|
||||
<cn_id>oc-cn5g-20897-stonechat</cn_id>
|
||||
</testCase>
|
||||
|
||||
</testCaseList>
|
||||
@@ -1,162 +0,0 @@
|
||||
<!-- SPDX-License-Identifier: LicenseRef-CSSL-1.0 -->
|
||||
|
||||
<testCaseList>
|
||||
<htmlTabRef>test-5g-fhi72-4x4-vvdn-monolithic</htmlTabRef>
|
||||
<htmlTabName>100 MHz 4x4 TDD SA VVDN Monolithic</htmlTabName>
|
||||
<htmlTabIcon>tasks</htmlTabIcon>
|
||||
<testCase>
|
||||
<class>DeployCoreNetwork</class>
|
||||
<desc>Initialize 5G Core</desc>
|
||||
<cn_id>oc-cn5g-20897-stonechat</cn_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Pull_Local_Registry</class>
|
||||
<desc>Pull Images from Local Registry</desc>
|
||||
<node>stonechat</node>
|
||||
<images>oai-gnb-fhi72-t2</images>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Create_Workspace</class>
|
||||
<desc>Create new Workspace for server 0</desc>
|
||||
<node>stonechat</node>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Deploy_Object</class>
|
||||
<desc>Deploy gNB (TDD/Band77/100MHz/VVDN) in a container</desc>
|
||||
<yaml_path>ci-scripts/yaml_files/sa_fhi_7.2_vvdn_4x4_monolithic_gnb</yaml_path>
|
||||
<services>oai-gnb-monolithic</services>
|
||||
<node>stonechat</node>
|
||||
<num_attempts>2</num_attempts>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach UE</desc>
|
||||
<id>up2-fhi72</id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Ping</class>
|
||||
<desc>Ping: 100 pings in 10 sec</desc>
|
||||
<id>up2-fhi72</id>
|
||||
<svr_id>oc-cn5g-20897-stonechat</svr_id>
|
||||
<ping_args>-c 100 -i 0.1</ping_args>
|
||||
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||
<ping_rttavg_threshold>15</ping_rttavg_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (DL/600Mbps/UDP)(60 sec)</desc>
|
||||
<iperf_args>-u -b 600M -t 60 -R -l1428</iperf_args>
|
||||
<id>up2-fhi72</id>
|
||||
<iperf_packetloss_threshold>20</iperf_packetloss_threshold>
|
||||
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||
<iperf_profile>balanced</iperf_profile>
|
||||
<svr_id>oc-cn5g-20897-stonechat</svr_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (DL/800Mbps/UDP)(60 sec)</desc>
|
||||
<iperf_args>-u -b 800M -t 60 -R -l 1428</iperf_args>
|
||||
<id>up2-fhi72</id>
|
||||
<iperf_packetloss_threshold>20</iperf_packetloss_threshold>
|
||||
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||
<iperf_profile>balanced</iperf_profile>
|
||||
<svr_id>oc-cn5g-20897-stonechat</svr_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (DL/1000Mbps/UDP)(60 sec)</desc>
|
||||
<iperf_args>-u -b 1000M -t 60 -R -l 1428</iperf_args>
|
||||
<id>up2-fhi72</id>
|
||||
<iperf_packetloss_threshold>20</iperf_packetloss_threshold>
|
||||
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||
<iperf_profile>balanced</iperf_profile>
|
||||
<svr_id>oc-cn5g-20897-stonechat</svr_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>Optional iperf (DL/1200Mbps/UDP)(60 sec)</desc>
|
||||
<may_fail>true</may_fail>
|
||||
<iperf_args>-u -b 1200M -t 60 -R -l 1428</iperf_args>
|
||||
<id>up2-fhi72</id>
|
||||
<iperf_packetloss_threshold>20</iperf_packetloss_threshold>
|
||||
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||
<iperf_profile>balanced</iperf_profile>
|
||||
<svr_id>oc-cn5g-20897-stonechat</svr_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (UL/100Mbps/UDP)(30 sec)</desc>
|
||||
<iperf_args>-u -b 100M -t 30</iperf_args>
|
||||
<id>up2-fhi72</id>
|
||||
<iperf_packetloss_threshold>20</iperf_packetloss_threshold>
|
||||
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||
<iperf_profile>balanced</iperf_profile>
|
||||
<svr_id>oc-cn5g-20897-stonechat</svr_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (DL/TCP)(30 sec)</desc>
|
||||
<iperf_args>-t 30 -R</iperf_args>
|
||||
<id>up2-fhi72</id>
|
||||
<iperf_tcp_rate_target>40</iperf_tcp_rate_target>
|
||||
<svr_id>oc-cn5g-20897-stonechat</svr_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (UL/TCP)(30 sec)</desc>
|
||||
<iperf_args>-t 30</iperf_args>
|
||||
<id>up2-fhi72</id>
|
||||
<iperf_tcp_rate_target>10</iperf_tcp_rate_target>
|
||||
<svr_id>oc-cn5g-20897-stonechat</svr_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Detach_UE</class>
|
||||
<always_exec>true</always_exec>
|
||||
<desc>Detach UE</desc>
|
||||
<id>up2-fhi72</id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>IdleSleep</class>
|
||||
<desc>Sleep</desc>
|
||||
<idle_sleep_time_in_sec>5</idle_sleep_time_in_sec>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Undeploy_Object</class>
|
||||
<always_exec>true</always_exec>
|
||||
<desc>Undeploy gNB</desc>
|
||||
<yaml_path>ci-scripts/yaml_files/sa_fhi_7.2_vvdn_4x4_monolithic_gnb</yaml_path>
|
||||
<services>oai-gnb-monolithic</services>
|
||||
<node>stonechat</node>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Clean_Test_Server_Images</class>
|
||||
<always_exec>true</always_exec>
|
||||
<desc>Clean Test Images on Test Server</desc>
|
||||
<node>stonechat</node>
|
||||
<images>oai-gnb-fhi72-t2</images>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>UndeployCoreNetwork</class>
|
||||
<always_exec>true</always_exec>
|
||||
<desc>Terminate 5G Core</desc>
|
||||
<cn_id>oc-cn5g-20897-stonechat</cn_id>
|
||||
</testCase>
|
||||
|
||||
</testCaseList>
|
||||
@@ -1,198 +0,0 @@
|
||||
<!-- SPDX-License-Identifier: LicenseRef-CSSL-1.0 -->
|
||||
|
||||
<testCaseList>
|
||||
<htmlTabRef>test-5g-fhi72-4x4-vvdn</htmlTabRef>
|
||||
<htmlTabName>100 MHz 4x4 TDD SA VVDN</htmlTabName>
|
||||
<htmlTabIcon>tasks</htmlTabIcon>
|
||||
|
||||
<testCase>
|
||||
<class>DeployCoreNetwork</class>
|
||||
<desc>Initialize 5G Core</desc>
|
||||
<cn_id>oc-cn5g-20897-stonechat</cn_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Custom_Script</class>
|
||||
<desc>Activate carriers on VVDN RU</desc>
|
||||
<node>stonechat</node>
|
||||
<script>scripts/vvdn-activate-carriers.sh</script>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>DeployWithScript</class>
|
||||
<desc>Deploy CU</desc>
|
||||
<node>stonechat</node>
|
||||
<script>scripts/oc-chart-deploy.sh</script>
|
||||
<options>/opt/oai-cn5g-fed-develop-2025-jan/ci-scripts/charts/oai-cu/ oaicicd-core-for-fhi72 %%image_tag%%</options>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Pull_Local_Registry</class>
|
||||
<desc>Pull Images from Local Registry</desc>
|
||||
<node>stonechat</node>
|
||||
<images>oai-gnb-fhi72-t2</images>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Create_Workspace</class>
|
||||
<desc>Create new Workspace for server 0</desc>
|
||||
<node>stonechat</node>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Deploy_Object</class>
|
||||
<desc>Deploy DU (TDD/Band77/100MHz/VVDN) in a container</desc>
|
||||
<yaml_path>ci-scripts/yaml_files/sa_fhi_7.2_vvdn_4x4_du</yaml_path>
|
||||
<services>oai-du</services>
|
||||
<node>stonechat</node>
|
||||
<num_attempts>2</num_attempts>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach UE</desc>
|
||||
<id>up2-fhi72</id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Ping</class>
|
||||
<desc>Ping: 100 pings in 10 sec</desc>
|
||||
<id>up2-fhi72</id>
|
||||
<svr_id>oc-cn5g-20897-stonechat</svr_id>
|
||||
<ping_args>-c 100 -i 0.1</ping_args>
|
||||
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||
<ping_rttavg_threshold>15</ping_rttavg_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (DL/600Mbps/UDP)(60 sec)</desc>
|
||||
<iperf_args>-u -b 600M -t 60 -R -l1428</iperf_args>
|
||||
<id>up2-fhi72</id>
|
||||
<iperf_packetloss_threshold>20</iperf_packetloss_threshold>
|
||||
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||
<iperf_profile>balanced</iperf_profile>
|
||||
<svr_id>oc-cn5g-20897-stonechat</svr_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (DL/800Mbps/UDP)(60 sec)</desc>
|
||||
<iperf_args>-u -b 800M -t 60 -R -l 1428</iperf_args>
|
||||
<id>up2-fhi72</id>
|
||||
<iperf_packetloss_threshold>20</iperf_packetloss_threshold>
|
||||
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||
<iperf_profile>balanced</iperf_profile>
|
||||
<svr_id>oc-cn5g-20897-stonechat</svr_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (DL/1000Mbps/UDP)(60 sec)</desc>
|
||||
<iperf_args>-u -b 1000M -t 60 -R -l 1428</iperf_args>
|
||||
<id>up2-fhi72</id>
|
||||
<iperf_packetloss_threshold>20</iperf_packetloss_threshold>
|
||||
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||
<iperf_profile>balanced</iperf_profile>
|
||||
<svr_id>oc-cn5g-20897-stonechat</svr_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>Optional iperf (DL/1200Mbps/UDP)(60 sec)</desc>
|
||||
<may_fail>true</may_fail>
|
||||
<iperf_args>-u -b 1100M -t 60 -R -l 1428</iperf_args>
|
||||
<id>up2-fhi72</id>
|
||||
<iperf_packetloss_threshold>20</iperf_packetloss_threshold>
|
||||
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||
<iperf_profile>balanced</iperf_profile>
|
||||
<svr_id>oc-cn5g-20897-stonechat</svr_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (UL/100Mbps/UDP)(30 sec)</desc>
|
||||
<iperf_args>-u -b 100M -t 30</iperf_args>
|
||||
<id>up2-fhi72</id>
|
||||
<iperf_packetloss_threshold>20</iperf_packetloss_threshold>
|
||||
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||
<iperf_profile>balanced</iperf_profile>
|
||||
<svr_id>oc-cn5g-20897-stonechat</svr_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (DL/TCP)(30 sec)</desc>
|
||||
<iperf_args>-t 30 -R</iperf_args>
|
||||
<id>up2-fhi72</id>
|
||||
<iperf_tcp_rate_target>40</iperf_tcp_rate_target>
|
||||
<svr_id>oc-cn5g-20897-stonechat</svr_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (UL/TCP)(30 sec)</desc>
|
||||
<iperf_args>-t 30</iperf_args>
|
||||
<id>up2-fhi72</id>
|
||||
<iperf_tcp_rate_target>10</iperf_tcp_rate_target>
|
||||
<svr_id>oc-cn5g-20897-stonechat</svr_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Detach_UE</class>
|
||||
<always_exec>true</always_exec>
|
||||
<desc>Detach UE</desc>
|
||||
<id>up2-fhi72</id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>IdleSleep</class>
|
||||
<desc>Sleep</desc>
|
||||
<idle_sleep_time_in_sec>5</idle_sleep_time_in_sec>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Undeploy_Object</class>
|
||||
<always_exec>true</always_exec>
|
||||
<desc>Undeploy DU</desc>
|
||||
<yaml_path>ci-scripts/yaml_files/sa_fhi_7.2_vvdn_4x4_du</yaml_path>
|
||||
<services>oai-du</services>
|
||||
<node>stonechat</node>
|
||||
<analysis>
|
||||
<services>oai-du=EndsWithBye</services>
|
||||
</analysis>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Clean_Test_Server_Images</class>
|
||||
<always_exec>true</always_exec>
|
||||
<desc>Clean Test Images on Test Server</desc>
|
||||
<node>stonechat</node>
|
||||
<images>oai-gnb-fhi72-t2</images>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>UndeployWithScript</class>
|
||||
<always_exec>true</always_exec>
|
||||
<desc>Undeploy CU on OC</desc>
|
||||
<node>stonechat</node>
|
||||
<script>scripts/oc-chart-undeploy.sh</script>
|
||||
<options>/opt/oai-cn5g-fed-develop-2025-jan/ci-scripts/charts/oai-cu/ oaicicd-core-for-fhi72 %%log_dir%%</options>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>UndeployCoreNetwork</class>
|
||||
<always_exec>true</always_exec>
|
||||
<desc>Terminate 5G Core</desc>
|
||||
<cn_id>oc-cn5g-20897-stonechat</cn_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Custom_Script</class>
|
||||
<always_exec>true</always_exec>
|
||||
<desc>Inactivate carriers on VVDN RU</desc>
|
||||
<node>stonechat</node>
|
||||
<script>scripts/vvdn-inactivate-carriers.sh</script>
|
||||
</testCase>
|
||||
|
||||
</testCaseList>
|
||||
@@ -1,190 +0,0 @@
|
||||
<!-- SPDX-License-Identifier: LicenseRef-CSSL-1.0 -->
|
||||
|
||||
<testCaseList>
|
||||
<htmlTabRef>test-5g-fhi72-4x4-vvdn-nfapi</htmlTabRef>
|
||||
<htmlTabName>100 MHz 4x4 TDD SA VVDN nFAPI</htmlTabName>
|
||||
<htmlTabIcon>tasks</htmlTabIcon>
|
||||
|
||||
<testCase>
|
||||
<class>DeployCoreNetwork</class>
|
||||
<desc>Initialize 5G Core</desc>
|
||||
<cn_id>oc-cn5g-20897-stonechat</cn_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Custom_Script</class>
|
||||
<desc>Activate carriers on VVDN RU</desc>
|
||||
<node>stonechat</node>
|
||||
<script>scripts/vvdn-activate-carriers.sh</script>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>DeployWithScript</class>
|
||||
<desc>Deploy CU</desc>
|
||||
<node>stonechat</node>
|
||||
<script>scripts/oc-chart-deploy.sh</script>
|
||||
<options>/opt/oai-cn5g-fed-develop-2025-jan/ci-scripts/charts/oai-cu/ oaicicd-core-for-fhi72 %%image_tag%%</options>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Pull_Local_Registry</class>
|
||||
<desc>Pull Images from Local Registry</desc>
|
||||
<node>stonechat</node>
|
||||
<images>oai-gnb-fhi72-t2</images>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Deploy_Object</class>
|
||||
<desc>Deploy DU-High (TDD/Band77/100MHz/VVDN) in a container</desc>
|
||||
<yaml_path>ci-scripts/yaml_files/sa_fhi_7.2_vvdn_4x4_nfapi</yaml_path>
|
||||
<services>oai-du-high</services>
|
||||
<node>stonechat</node>
|
||||
<num_attempts>2</num_attempts>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Deploy_Object</class>
|
||||
<desc>Deploy DU-Low (TDD/Band77/100MHz/VVDN) in a container</desc>
|
||||
<yaml_path>ci-scripts/yaml_files/sa_fhi_7.2_vvdn_4x4_nfapi</yaml_path>
|
||||
<services>oai-du-low</services>
|
||||
<node>stonechat</node>
|
||||
<num_attempts>2</num_attempts>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach UE</desc>
|
||||
<id>up2-fhi72</id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Ping</class>
|
||||
<desc>Ping: 100 pings in 10 sec</desc>
|
||||
<id>up2-fhi72</id>
|
||||
<svr_id>oc-cn5g-20897-stonechat</svr_id>
|
||||
<ping_args>-c 100 -i 0.1</ping_args>
|
||||
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||
<ping_rttavg_threshold>15</ping_rttavg_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (DL/800Mbps/UDP)(60 sec)</desc>
|
||||
<iperf_args>-u -b 800M -t 60 -R -l1428</iperf_args>
|
||||
<id>up2-fhi72</id>
|
||||
<iperf_packetloss_threshold>20</iperf_packetloss_threshold>
|
||||
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||
<iperf_profile>balanced</iperf_profile>
|
||||
<svr_id>oc-cn5g-20897-stonechat</svr_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (DL/1200Mbps/UDP)(60 sec)</desc>
|
||||
<iperf_args>-u -b 1200M -t 60 -R -l 1428</iperf_args>
|
||||
<id>up2-fhi72</id>
|
||||
<iperf_packetloss_threshold>20</iperf_packetloss_threshold>
|
||||
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||
<iperf_profile>balanced</iperf_profile>
|
||||
<svr_id>oc-cn5g-20897-stonechat</svr_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (DL/1400Mbps/UDP)(60 sec)</desc>
|
||||
<iperf_args>-u -b 1400M -t 60 -R -l 1428</iperf_args>
|
||||
<may_fail>true</may_fail>
|
||||
<id>up2-fhi72</id>
|
||||
<iperf_packetloss_threshold>20</iperf_packetloss_threshold>
|
||||
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||
<iperf_profile>balanced</iperf_profile>
|
||||
<svr_id>oc-cn5g-20897-stonechat</svr_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (UL/100Mbps/UDP)(30 sec)</desc>
|
||||
<iperf_args>-u -b 100M -t 30</iperf_args>
|
||||
<id>up2-fhi72</id>
|
||||
<iperf_packetloss_threshold>20</iperf_packetloss_threshold>
|
||||
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||
<iperf_profile>balanced</iperf_profile>
|
||||
<svr_id>oc-cn5g-20897-stonechat</svr_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (DL/TCP)(30 sec)</desc>
|
||||
<iperf_args>-t 30 -R</iperf_args>
|
||||
<id>up2-fhi72</id>
|
||||
<iperf_tcp_rate_target>40</iperf_tcp_rate_target>
|
||||
<svr_id>oc-cn5g-20897-stonechat</svr_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (UL/TCP)(30 sec)</desc>
|
||||
<iperf_args>-t 30</iperf_args>
|
||||
<id>up2-fhi72</id>
|
||||
<iperf_tcp_rate_target>10</iperf_tcp_rate_target>
|
||||
<svr_id>oc-cn5g-20897-stonechat</svr_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Detach_UE</class>
|
||||
<always_exec>true</always_exec>
|
||||
<desc>Detach UE</desc>
|
||||
<id>up2-fhi72</id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>IdleSleep</class>
|
||||
<desc>Sleep</desc>
|
||||
<idle_sleep_time_in_sec>5</idle_sleep_time_in_sec>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Undeploy_Object</class>
|
||||
<always_exec>true</always_exec>
|
||||
<desc>Undeploy DU</desc>
|
||||
<yaml_path>ci-scripts/yaml_files/sa_fhi_7.2_vvdn_4x4_nfapi</yaml_path>
|
||||
<services>oai-du-low oai-du-high</services>
|
||||
<node>stonechat</node>
|
||||
<analysis>
|
||||
<services>oai-du-high=EndsWithBye</services>
|
||||
</analysis>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Clean_Test_Server_Images</class>
|
||||
<always_exec>true</always_exec>
|
||||
<desc>Clean Test Images on Test Server</desc>
|
||||
<node>stonechat</node>
|
||||
<images>oai-gnb-fhi72-t2</images>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>UndeployWithScript</class>
|
||||
<always_exec>true</always_exec>
|
||||
<desc>Undeploy CU on OC</desc>
|
||||
<node>stonechat</node>
|
||||
<script>scripts/oc-chart-undeploy.sh</script>
|
||||
<options>/opt/oai-cn5g-fed-develop-2025-jan/ci-scripts/charts/oai-cu/ oaicicd-core-for-fhi72 %%log_dir%%</options>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>UndeployCoreNetwork</class>
|
||||
<always_exec>true</always_exec>
|
||||
<desc>Terminate 5G Core</desc>
|
||||
<cn_id>oc-cn5g-20897-stonechat</cn_id>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Custom_Script</class>
|
||||
<always_exec>true</always_exec>
|
||||
<desc>Inactivate carriers on VVDN RU</desc>
|
||||
<node>stonechat</node>
|
||||
<script>scripts/vvdn-inactivate-carriers.sh</script>
|
||||
</testCase>
|
||||
|
||||
</testCaseList>
|
||||
@@ -36,7 +36,6 @@
|
||||
<desc>Analyze Real-Time Stats</desc>
|
||||
<stats_cfg>datalog_rt_stats.100.4x4.fhi72.yaml</stats_cfg>
|
||||
<service>oai-gnb</service>
|
||||
<stats_file>/opt/oai-gnb/nrL1_stats.log /opt/oai-gnb/nrMAC_stats.log</stats_file>
|
||||
<node>bulbul</node>
|
||||
</testCase>
|
||||
|
||||
|
||||
@@ -44,7 +44,6 @@
|
||||
<desc>Analyze Real-Time Stats</desc>
|
||||
<stats_cfg>datalog_rt_stats.100.2x2.fhi72.cacofonix.yaml</stats_cfg>
|
||||
<service>oai-gnb</service>
|
||||
<stats_file>/opt/oai-gnb/nrL1_stats.log /opt/oai-gnb/nrMAC_stats.log</stats_file>
|
||||
<node>cacofonix</node>
|
||||
</testCase>
|
||||
|
||||
|
||||
@@ -1,82 +0,0 @@
|
||||
<!-- SPDX-License-Identifier: LicenseRef-CSSL-1.0 -->
|
||||
|
||||
<testCaseList>
|
||||
<htmlTabRef>PHY-Test-40-vrtsim</htmlTabRef>
|
||||
<htmlTabName>Timing phytest 40 MHz with vrtsim</htmlTabName>
|
||||
<htmlTabIcon>tasks</htmlTabIcon>
|
||||
|
||||
<testCase>
|
||||
<class>Pull_Cluster_Image</class>
|
||||
<desc>Pull Images from Cluster</desc>
|
||||
<images>oai-gnb oai-nr-ue</images>
|
||||
<node>caracal</node>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Create_Workspace</class>
|
||||
<desc>Create new Workspace</desc>
|
||||
<node>caracal</node>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Deploy_Object</class>
|
||||
<desc>Initialize gNB</desc>
|
||||
<node>caracal</node>
|
||||
<yaml_path>ci-scripts/yaml_files/phytest_vrtsim_40MHz</yaml_path>
|
||||
<services>oai-gnb</services>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Deploy_Object</class>
|
||||
<desc>Initialize UE</desc>
|
||||
<node>caracal</node>
|
||||
<yaml_path>ci-scripts/yaml_files/phytest_vrtsim_40MHz</yaml_path>
|
||||
<services>oai-nr-ue</services>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>IdleSleep</class>
|
||||
<desc>Sleep</desc>
|
||||
<idle_sleep_time_in_sec>60</idle_sleep_time_in_sec>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>AnalyzeRTStats_Object</class>
|
||||
<desc>Analyze Real-Time Stats on gNB</desc>
|
||||
<always_exec>true</always_exec>
|
||||
<stats_cfg>datalog_rt_stats.gnb.40.vrtsim.yaml</stats_cfg>
|
||||
<service>oai-gnb</service>
|
||||
<stats_file>/opt/oai-gnb/nrL1_stats.log /opt/oai-gnb/nrMAC_stats.log</stats_file>
|
||||
<node>caracal</node>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>AnalyzeRTStats_Object</class>
|
||||
<desc>Analyze Real-Time Stats on UE</desc>
|
||||
<always_exec>true</always_exec>
|
||||
<stats_cfg>datalog_rt_stats.ue.40.vrtsim.yaml</stats_cfg>
|
||||
<service>oai-nr-ue</service>
|
||||
<stats_file>/opt/oai-nr-ue/nrL1_UE_stats-0.log</stats_file>
|
||||
<node>caracal</node>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Undeploy_Object</class>
|
||||
<node>caracal</node>
|
||||
<always_exec>true</always_exec>
|
||||
<desc>Terminate gNB</desc>
|
||||
<yaml_path>ci-scripts/yaml_files/phytest_vrtsim_40MHz</yaml_path>
|
||||
<analysis>
|
||||
<services>oai-gnb=EndsWithBye oai-nr-ue=EndsWithBye</services>
|
||||
</analysis>
|
||||
</testCase>
|
||||
|
||||
<testCase>
|
||||
<class>Clean_Test_Server_Images</class>
|
||||
<always_exec>true</always_exec>
|
||||
<desc>Clean Test Images on Test Server</desc>
|
||||
<node>caracal</node>
|
||||
<images>oai-nr-ue oai-gnb</images>
|
||||
</testCase>
|
||||
|
||||
</testCaseList>
|
||||
@@ -1,6 +1,20 @@
|
||||
<!-- SPDX-License-Identifier: CC-BY-4.0 -->
|
||||
|
||||
OAI Full Stack 4G-LTE RF simulation with containers
|
||||
<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 Full Stack 4G-LTE RF simulation with containers</font></b>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
This page is only valid for an `Ubuntu 22` host.
|
||||
|
||||
**Table of Contents**
|
||||
|
||||
|
||||
@@ -1,6 +1,22 @@
|
||||
<!-- SPDX-License-Identifier: CC-BY-4.0 -->
|
||||
|
||||
OAI Full Stack 5G-NR RF simulation with containers
|
||||
<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 Full Stack 5G-NR RF simulation with containers</font></b>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
This page is only valid for an `Ubuntu 22` host.
|
||||
|
||||
**NOTE: this version (2023-01-27) has been updated for the `v1.5.0` version of the `OAI 5G CN`.**
|
||||
|
||||
**Table of Contents**
|
||||
|
||||
|
||||
@@ -20,8 +20,6 @@ ru_sdr:
|
||||
srate: 23.04
|
||||
tx_gain: 25
|
||||
rx_gain: 25
|
||||
amplitude_control:
|
||||
tx_gain_backoff: 22
|
||||
|
||||
cell_cfg:
|
||||
dl_arfcn: 632628
|
||||
@@ -44,8 +42,8 @@ cell_cfg:
|
||||
nof_cell_csi_res: 0
|
||||
|
||||
log:
|
||||
filename: stdout
|
||||
all_level: info
|
||||
filename: gnb.log
|
||||
all_level: debug
|
||||
|
||||
pcap:
|
||||
mac_enable: false
|
||||
|
||||
@@ -20,8 +20,6 @@ ru_sdr:
|
||||
srate: 61.44
|
||||
tx_gain: 25
|
||||
rx_gain: 25
|
||||
amplitude_control:
|
||||
tx_gain_backoff: 22
|
||||
|
||||
cell_cfg:
|
||||
dl_arfcn: 632628
|
||||
@@ -46,8 +44,8 @@ cell_cfg:
|
||||
nof_cell_csi_res: 0
|
||||
|
||||
log:
|
||||
filename: stdout
|
||||
all_level: info
|
||||
filename: gnb.log
|
||||
all_level: debug
|
||||
|
||||
pcap:
|
||||
mac_enable: false
|
||||
|
||||
@@ -1,52 +0,0 @@
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
services:
|
||||
oai-gnb:
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-gnb
|
||||
cap_drop:
|
||||
- ALL
|
||||
cap_add:
|
||||
- SYS_NICE
|
||||
environment:
|
||||
USE_ADDITIONAL_OPTIONS: --phy-test --device.name vrtsim --vrtsim.role server -q -U 768 -T 106 -t 23 -D 127 -m 28 -M 106 --log_config.global_log_options level,nocolor,time
|
||||
ASAN_OPTIONS: detect_leaks=0
|
||||
ipc: host
|
||||
volumes:
|
||||
- ../../conf_files/gnb.band79.106prb.vrtsim.phytest-dora.conf:/opt/oai-gnb/etc/gnb.conf
|
||||
- rrc.config:/opt/oai-gnb/
|
||||
- tmp_data:/tmp/
|
||||
healthcheck:
|
||||
test: /bin/bash -c "pgrep nr-softmodem"
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
oai-nr-ue:
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-nr-ue
|
||||
cap_drop:
|
||||
- ALL
|
||||
cap_add:
|
||||
- SYS_NICE
|
||||
environment:
|
||||
USE_ADDITIONAL_OPTIONS: --phy-test --reconfig-file etc/rrc/reconfig.raw --rbconfig-file etc/rrc/rbconfig.raw --device.name vrtsim --vrtsim.role client -q --log_config.global_log_options level,nocolor,time
|
||||
ASAN_OPTIONS: detect_leaks=0
|
||||
devices:
|
||||
- /dev/net/tun:/dev/net/tun
|
||||
ipc: host
|
||||
volumes:
|
||||
- ../../conf_files/nrue.uicc.conf:/opt/oai-nr-ue/etc/nr-ue.conf
|
||||
- rrc.config:/opt/oai-nr-ue/etc/rrc/
|
||||
- tmp_data:/tmp/
|
||||
depends_on:
|
||||
- oai-gnb
|
||||
healthcheck:
|
||||
test: /bin/bash -c "pgrep nr-uesoftmodem"
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
volumes:
|
||||
rrc.config:
|
||||
tmp_data:
|
||||
@@ -0,0 +1,40 @@
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
services:
|
||||
oai-nr-ue:
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
network_mode: host
|
||||
runtime: nvidia
|
||||
container_name: oai-nr-ue
|
||||
cap_drop:
|
||||
- ALL
|
||||
cap_add:
|
||||
- NET_ADMIN # for interface bringup
|
||||
- NET_RAW # for ping
|
||||
- SYS_NICE # for performance
|
||||
- IPC_LOCK # for memory locking
|
||||
devices:
|
||||
- /dev/net/tun:/dev/net/tun
|
||||
- /dev/bus/usb/:/dev/bus/usb/
|
||||
ulimits:
|
||||
core: -1 # for core dumps
|
||||
environment:
|
||||
TZ: Europe/Paris
|
||||
USE_B2XX: 'yes'
|
||||
USE_ADDITIONAL_OPTIONS: --usrp-args type=b200 -C 3350010000 -r 78 --numerology 1 --band 78 --ssb 345 --ue-fo-compensation --uicc0.imsi 001040000000001 --uicc0.pdu_sessions.[0].dnn oai.ipv4 --thread-pool 5,6,7,8,9 --ue-txgain 15 --ue-rxgain 90 --loader.ldpc.shlibversion _cuda -A 60
|
||||
cpuset: "3-11"
|
||||
volumes:
|
||||
- ../../conf_files/ue.sa.conf:/opt/oai-nr-ue/etc/nr-ue.conf
|
||||
healthcheck:
|
||||
test: /bin/bash -c "pgrep nr-uesoftmodem"
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
deploy:
|
||||
resources:
|
||||
reservations:
|
||||
devices:
|
||||
- driver: nvidia
|
||||
count: all
|
||||
capabilities: [gpu]
|
||||
|
||||
@@ -40,7 +40,7 @@ services:
|
||||
USE_B2XX: 'yes'
|
||||
USE_ADDITIONAL_OPTIONS: --RUs.[0].sdr_addrs serial=30C51D4 --continuous-tx
|
||||
--telnetsrv --telnetsrv.listenport 9091 --telnetsrv.shrmod ci
|
||||
--gNBs.[0].min_rxtxtime 2 --gNBs.[0].do_CSIRS 1 --L1s.[0].max_ldpc_iterations 20
|
||||
--gNBs.[0].min_rxtxtime 2 --gNBs.[0].do_CSIRS 1 --gNBs.[0].do_SRS 0 --L1s.[0].max_ldpc_iterations 20
|
||||
--log_config.global_log_options level,nocolor,time,line_num,function
|
||||
devices:
|
||||
- /dev/bus/usb/:/dev/bus/usb/
|
||||
|
||||
@@ -1,59 +0,0 @@
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
services:
|
||||
dpdk-init:
|
||||
image: docker.io/library/oai-dpdk-init:latest
|
||||
network_mode: host
|
||||
container_name: dpdk-init
|
||||
entrypoint: "/tmp/setup_sriov.sh"
|
||||
privileged: true
|
||||
devices:
|
||||
- /dev/vfio:/dev/vfio/
|
||||
volumes:
|
||||
- ./setup_sriov_benetel.sh:/tmp/setup_sriov.sh
|
||||
- /lib/modules:/lib/modules
|
||||
- /usr/lib/modules:/usr/lib/modules
|
||||
oai-du:
|
||||
image: ${REGISTRY-oaisoftwarealliance/}oai-gnb-fhi72-t2:${TAG:-develop}
|
||||
cap_add:
|
||||
- IPC_LOCK
|
||||
- SYS_NICE
|
||||
cap_drop:
|
||||
- ALL
|
||||
container_name: oai-gnb
|
||||
environment:
|
||||
TZ: Europe/Paris
|
||||
USE_ADDITIONAL_OPTIONS: --thread-pool 13,14,15,16,17,18,19,20 --loader.ldpc.shlibversion _aal --log_config.global_log_options level,nocolor,utc_time
|
||||
devices:
|
||||
- /dev/vfio:/dev/vfio/
|
||||
volumes:
|
||||
- ../../conf_files/gnb-du.sa.band78.273prb.fhi72.4x4-4L-benetel550.conf:/opt/oai-gnb/etc/gnb.conf
|
||||
- /dev/hugepages:/dev/hugepages
|
||||
# Please change these values based on your system
|
||||
cpuset: "7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23"
|
||||
networks:
|
||||
oai-net:
|
||||
ipv4_address: 172.21.10.20
|
||||
depends_on:
|
||||
dpdk-init:
|
||||
condition: service_completed_successfully
|
||||
healthcheck:
|
||||
test: /bin/bash -c "/opt/oai-gnb/bin/check-prach-io.sh"
|
||||
start_period: 15s
|
||||
start_interval: 500ms
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
|
||||
networks:
|
||||
oai-net:
|
||||
driver: macvlan
|
||||
name: oai-net
|
||||
ipam:
|
||||
config:
|
||||
- subnet: "172.21.8.0/22"
|
||||
ip_range: "172.21.10.20/32"
|
||||
gateway: "172.21.11.254"
|
||||
driver_opts:
|
||||
com.docker.network.bridge.name: "oai-net"
|
||||
parent: bond0
|
||||
@@ -1,31 +0,0 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
set -eu
|
||||
|
||||
IF_NAME=ens2f1
|
||||
NUM_VFs=2
|
||||
U_PLANE_MAC_ADD=00:11:22:33:44:66
|
||||
C_PLANE_MAC_ADD=00:11:22:33:44:67
|
||||
VLAN=9
|
||||
MTU=9216
|
||||
U_PLANE_PCI=41:11.0
|
||||
C_PLANE_PCI=41:11.1
|
||||
## It will be something like this --> $DPDK_INST/bin
|
||||
DPDK_DEVBIND_PREFIX=/usr/local/bin
|
||||
|
||||
ethtool -G $IF_NAME rx 8160 tx 8160
|
||||
sh -c "echo 0 > /sys/class/net/$IF_NAME/device/sriov_numvfs"
|
||||
sh -c "echo $NUM_VFs > /sys/class/net/$IF_NAME/device/sriov_numvfs"
|
||||
modprobe -r iavf
|
||||
modprobe iavf
|
||||
# this next 2 lines is for C/U planes
|
||||
ip link set $IF_NAME vf 0 mac $U_PLANE_MAC_ADD vlan $VLAN spoofchk off mtu $MTU
|
||||
ip link set $IF_NAME vf 1 mac $C_PLANE_MAC_ADD vlan $VLAN spoofchk off mtu $MTU
|
||||
sleep 1
|
||||
${DPDK_DEVBIND_PREFIX}/dpdk-devbind.py --unbind $U_PLANE_PCI
|
||||
${DPDK_DEVBIND_PREFIX}/dpdk-devbind.py --unbind $C_PLANE_PCI
|
||||
modprobe vfio-pci
|
||||
${DPDK_DEVBIND_PREFIX}/dpdk-devbind.py --bind vfio-pci $U_PLANE_PCI
|
||||
${DPDK_DEVBIND_PREFIX}/dpdk-devbind.py --bind vfio-pci $C_PLANE_PCI
|
||||
|
||||
@@ -1,59 +0,0 @@
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
services:
|
||||
dpdk-init:
|
||||
image: docker.io/library/oai-dpdk-init:latest
|
||||
network_mode: host
|
||||
container_name: dpdk-init
|
||||
entrypoint: "/tmp/setup_sriov.sh"
|
||||
privileged: true
|
||||
devices:
|
||||
- /dev/vfio:/dev/vfio/
|
||||
volumes:
|
||||
- ./setup_sriov_benetel650_650.sh:/tmp/setup_sriov.sh
|
||||
- /lib/modules:/lib/modules
|
||||
- /usr/lib/modules:/usr/lib/modules
|
||||
oai-du:
|
||||
image: ${REGISTRY-oaisoftwarealliance/}oai-gnb-fhi72-t2:${TAG:-develop}
|
||||
cap_add:
|
||||
- IPC_LOCK
|
||||
- SYS_NICE
|
||||
cap_drop:
|
||||
- ALL
|
||||
container_name: oai-gnb
|
||||
environment:
|
||||
TZ: Europe/Paris
|
||||
USE_ADDITIONAL_OPTIONS: --thread-pool 13,14,15,16,17,18,19,20 --loader.ldpc.shlibversion _aal --log_config.global_log_options level,nocolor,utc_time
|
||||
devices:
|
||||
- /dev/vfio:/dev/vfio/
|
||||
volumes:
|
||||
- ../../conf_files/gnb-du.sa.band78.273prb.fhi72.8x8-benetel650_650.conf:/opt/oai-gnb/etc/gnb.conf
|
||||
- /dev/hugepages:/dev/hugepages
|
||||
# Please change these values based on your system
|
||||
cpuset: "7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23"
|
||||
networks:
|
||||
oai-net:
|
||||
ipv4_address: 172.21.10.20
|
||||
depends_on:
|
||||
dpdk-init:
|
||||
condition: service_completed_successfully
|
||||
healthcheck:
|
||||
test: /bin/bash -c "/opt/oai-gnb/bin/check-prach-io.sh"
|
||||
start_period: 15s
|
||||
start_interval: 500ms
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
|
||||
networks:
|
||||
oai-net:
|
||||
driver: macvlan
|
||||
name: oai-net
|
||||
ipam:
|
||||
config:
|
||||
- subnet: "172.21.8.0/22"
|
||||
ip_range: "172.21.10.20/32"
|
||||
gateway: "172.21.11.254"
|
||||
driver_opts:
|
||||
com.docker.network.bridge.name: "oai-net"
|
||||
parent: bond0
|
||||
@@ -1,51 +0,0 @@
|
||||
#!/bin/sh
|
||||
#### 100G interface --> enp1s0f0 | pcie-address --> 01:00.0
|
||||
#### 25G interface (PTP) --> enp193s0f1 | pcie-address --> c1:00.1
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
set -eu
|
||||
|
||||
IF_NAME=ens2f1
|
||||
DPDK_DEVBIND_PREFIX=/usr/local/bin
|
||||
|
||||
NUM_VFs=4
|
||||
|
||||
U_PLANE_MAC_ADD_1=00:11:22:33:44:66
|
||||
C_PLANE_MAC_ADD_1=00:11:22:33:44:67
|
||||
U_PLANE_MAC_ADD_2=00:11:22:33:44:68
|
||||
C_PLANE_MAC_ADD_2=00:11:22:33:44:69
|
||||
|
||||
VLAN_1=5
|
||||
VLAN_2=6
|
||||
|
||||
MTU=9216
|
||||
|
||||
U_PLANE_PCI_1=41:11.0
|
||||
C_PLANE_PCI_1=41:11.1
|
||||
U_PLANE_PCI_2=41:11.2
|
||||
C_PLANE_PCI_2=41:11.3
|
||||
|
||||
ethtool -G $IF_NAME rx 8160 tx 8160
|
||||
sh -c "echo 0 > /sys/class/net/$IF_NAME/device/sriov_numvfs"
|
||||
sh -c "echo $NUM_VFs > /sys/class/net/$IF_NAME/device/sriov_numvfs"
|
||||
modprobe -r iavf
|
||||
modprobe iavf
|
||||
|
||||
ip link set $IF_NAME vf 0 mac $U_PLANE_MAC_ADD_1 vlan $VLAN_1 spoofchk off mtu $MTU
|
||||
ip link set $IF_NAME vf 1 mac $C_PLANE_MAC_ADD_1 vlan $VLAN_1 spoofchk off mtu $MTU
|
||||
ip link set $IF_NAME vf 2 mac $U_PLANE_MAC_ADD_2 vlan $VLAN_2 spoofchk off mtu $MTU
|
||||
ip link set $IF_NAME vf 3 mac $C_PLANE_MAC_ADD_2 vlan $VLAN_2 spoofchk off mtu $MTU
|
||||
|
||||
sleep 1
|
||||
|
||||
${DPDK_DEVBIND_PREFIX}/dpdk-devbind.py --unbind $U_PLANE_PCI_1
|
||||
${DPDK_DEVBIND_PREFIX}/dpdk-devbind.py --unbind $C_PLANE_PCI_1
|
||||
${DPDK_DEVBIND_PREFIX}/dpdk-devbind.py --unbind $U_PLANE_PCI_2
|
||||
${DPDK_DEVBIND_PREFIX}/dpdk-devbind.py --unbind $C_PLANE_PCI_2
|
||||
|
||||
modprobe vfio-pci
|
||||
|
||||
${DPDK_DEVBIND_PREFIX}/dpdk-devbind.py --bind vfio-pci $U_PLANE_PCI_1
|
||||
${DPDK_DEVBIND_PREFIX}/dpdk-devbind.py --bind vfio-pci $C_PLANE_PCI_1
|
||||
${DPDK_DEVBIND_PREFIX}/dpdk-devbind.py --bind vfio-pci $U_PLANE_PCI_2
|
||||
${DPDK_DEVBIND_PREFIX}/dpdk-devbind.py --bind vfio-pci $C_PLANE_PCI_2
|
||||
@@ -1,59 +0,0 @@
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
services:
|
||||
dpdk-init:
|
||||
image: docker.io/library/oai-dpdk-init:latest
|
||||
network_mode: host
|
||||
container_name: dpdk-init
|
||||
entrypoint: "/tmp/setup_sriov.sh"
|
||||
privileged: true
|
||||
devices:
|
||||
- /dev/vfio:/dev/vfio/
|
||||
volumes:
|
||||
- ./setup_sriov_liteon.sh:/tmp/setup_sriov.sh
|
||||
- /lib/modules:/lib/modules
|
||||
- /usr/lib/modules:/usr/lib/modules
|
||||
oai-du:
|
||||
image: ${REGISTRY-oaisoftwarealliance/}oai-gnb-fhi72-t2:${TAG:-develop}
|
||||
cap_add:
|
||||
- IPC_LOCK
|
||||
- SYS_NICE
|
||||
cap_drop:
|
||||
- ALL
|
||||
container_name: oai-gnb
|
||||
environment:
|
||||
TZ: Europe/Paris
|
||||
USE_ADDITIONAL_OPTIONS: --thread-pool 13,14,15,16,17,18,19,20 --loader.ldpc.shlibversion _aal --log_config.global_log_options level,nocolor,utc_time
|
||||
devices:
|
||||
- /dev/vfio:/dev/vfio/
|
||||
volumes:
|
||||
- ../../conf_files/gnb-du.sa.band78.273prb.fhi72.4x4-4L-liteon.conf:/opt/oai-gnb/etc/gnb.conf
|
||||
- /dev/hugepages:/dev/hugepages
|
||||
# Please change these values based on your system
|
||||
cpuset: "7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23"
|
||||
networks:
|
||||
oai-net:
|
||||
ipv4_address: 172.21.10.20
|
||||
depends_on:
|
||||
dpdk-init:
|
||||
condition: service_completed_successfully
|
||||
healthcheck:
|
||||
test: /bin/bash -c "/opt/oai-gnb/bin/check-prach-io.sh"
|
||||
start_period: 15s
|
||||
start_interval: 500ms
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
|
||||
networks:
|
||||
oai-net:
|
||||
driver: macvlan
|
||||
name: oai-net
|
||||
ipam:
|
||||
config:
|
||||
- subnet: "172.21.8.0/22"
|
||||
ip_range: "172.21.10.20/32"
|
||||
gateway: "172.21.11.254"
|
||||
driver_opts:
|
||||
com.docker.network.bridge.name: "oai-net"
|
||||
parent: bond0
|
||||
@@ -1,27 +0,0 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
set -eu
|
||||
|
||||
IF_NAME=ens2f1
|
||||
DPDK_DEVBIND_PREFIX=/usr/local/bin
|
||||
|
||||
ethtool -G $IF_NAME rx 8160
|
||||
ethtool -G $IF_NAME tx 8160
|
||||
sh -c "echo 0 > /sys/class/net/$IF_NAME/device/sriov_numvfs"
|
||||
sh -c "echo 2 > /sys/class/net/$IF_NAME/device/sriov_numvfs"
|
||||
modprobe -r iavf
|
||||
modprobe iavf
|
||||
# this next 2 lines is for C/U planes
|
||||
ip link set $IF_NAME vf 0 mac 00:11:22:33:44:66 vlan 564 spoofchk off mtu 9216
|
||||
ip link set $IF_NAME vf 1 mac 00:11:22:33:44:67 vlan 564 spoofchk off mtu 9216
|
||||
sleep 1
|
||||
# These are the DPDK bindings for C/U-planes on vlan 4
|
||||
${DPDK_DEVBIND_PREFIX}/dpdk-devbind.py --unbind 41:11.0
|
||||
${DPDK_DEVBIND_PREFIX}/dpdk-devbind.py --unbind 41:11.1
|
||||
modprobe vfio-pci
|
||||
${DPDK_DEVBIND_PREFIX}/dpdk-devbind.py --bind vfio-pci 41:11.0
|
||||
${DPDK_DEVBIND_PREFIX}/dpdk-devbind.py --bind vfio-pci 41:11.1
|
||||
# These are the DPDK bindings for T2 card
|
||||
${DPDK_DEVBIND_PREFIX}/dpdk-devbind.py -b vfio-pci 01:00.0
|
||||
exit 0
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user