Compare commits

...

678 Commits

Author SHA1 Message Date
Robert Schmidt
7343755afd Merge remote-tracking branch 'origin/develop' into simde 2022-09-22 14:09:42 +02:00
Robert Schmidt
97ea8d4636 USRP phytest build: cleanup, build physims 2022-09-22 13:59:12 +02:00
Bruno Mongazon-Cazavet
37a271a0b8 remove -j4 for kernel module build, remove --usrp-recplay deprecated in build help, clang-format-12 some files 2022-09-21 17:17:03 +02:00
Robert Schmidt
c188912c74 Add --noavx512 to legacy CI bench pipelines 2022-09-20 14:10:56 +02:00
laurent
2dc250197d fix CMakeFile error, it is not bash syntax 2022-09-20 12:50:31 +02:00
Bruno Mongazon-Cazavet
8941940162 comment verbose trace in iqplayer 2022-09-19 10:28:16 +02:00
Robert Schmidt
af04fa90c1 Merge branch 'integration_2022_wk37' into 'develop'
integration_2022_wk37

See merge request oai/openairinterface5g!1710

MR !1695 fix bug added in MR1609 improve-nr_ul_channel_estimation branch
MR !1704 remove target/SCRIPTS
MR !1708 Repair cluster-build pipeline
2022-09-19 06:07:23 +00:00
Robert Schmidt
198df43ebe Merge remote-tracking branch 'origin/build-cluster-hotfix' into integration_2022_wk37 2022-09-18 22:28:02 +02:00
Robert Schmidt
2715a705bf Merge remote-tracking branch 'origin/remove_targets_SCRIPTS' into integration_2022_wk37 2022-09-18 22:27:37 +02:00
Robert Schmidt
8d8d43fd95 Merge remote-tracking branch 'origin/regression-fix-ul_estimate' into integration_2022_wk37 2022-09-18 22:27:28 +02:00
Robert Schmidt
b6c2dd7820 Update README for OpenShift deployments using helm 2022-09-18 22:21:50 +02:00
Robert Schmidt
7d20568c09 List all OC images in registry in artifact file 2022-09-18 22:21:50 +02:00
Robert Schmidt
5cb85c3f4a Switch to RHEL8-Cluster-Image-Builder in RAN-Container-Parent 2022-09-18 22:21:50 +02:00
Robert Schmidt
28487ee223 Physim: image is already on openshift image registry 2022-09-18 22:21:50 +02:00
Robert Schmidt
ca5a6deb9d Fix timeout in wait_job_end() 2022-09-18 22:21:35 +02:00
Robert Schmidt
edfb7aca1d Recreate imagestreamtags to not lose image registry image association
Previously, the cluster-build code would recreate imagestreams, which
would drop the association of image streams to images previously
created. To avoid this, the code is updated to never delete
imagestreams, and only recreate imagestreamtags.
2022-09-18 22:21:35 +02:00
laurent
b14b9eda29 fix bug added in MR1609 improve-nr_ul_channel_estimation branch 2022-09-17 11:23:53 +02:00
Robert Schmidt
9e3d565c5d Remove tag information from image streams
The tags in the status section simply serves no purpose/is misleading,
as it is not used.
2022-09-16 10:26:24 +02:00
Robert Schmidt
eb15d7332b Remove sudo commands from cluster-related CI scripts 2022-09-16 10:25:24 +02:00
Robert Schmidt
61e65959b0 Correct physim IS filename 2022-09-16 09:17:57 +02:00
Robert Schmidt
e3a9c880e4 Revert "Physim: image is already on openshift image registry"
This reverts commit ebdbb1fc13.

Same as parent commit.
2022-09-15 12:41:22 +02:00
francescomani
b87e86fd30 remove target/SCRIPTS 2022-09-14 11:38:33 +02:00
Robert Schmidt
50dc769827 Revert "Switch to RHEL8-Cluster-Image-Builder in RAN-Container-Parent"
This reverts commit 5008eb4e38.

The RHEL8-Cluster-Image-Builder has problems and is not ready. This
commit reverts the switch, and uses RHEL8-Image-Builder instead.
2022-09-13 17:46:28 +02:00
Bruno Mongazon-Cazavet
ad7252320f merged with develop 2022-09-13 09:42:49 +02:00
Bruno Mongazon-Cazavet
932e650eb3 remove invalid assertion in iqplayer when wrapping occurs 2022-09-13 09:37:56 +02:00
Robert Schmidt
62cea0ef8c Add two file exceptions for suspect license (BSD); remove two GPL'ed files 2022-09-13 05:24:09 +02:00
Robert Schmidt
e3d712f417 Merge branch 'integration_2022_wk36b' into 'develop'
integration_2022_wk36b

See merge request oai/openairinterface5g!1696

MR !1618 update NR MAC/RLC/PDCP stats
MR !1639 NR handling of PHR (preliminary version)
MR !1676 make 5 MHz BW work in SA mode with OAI UE
MR !1687 quick fix for gnb.sa.band41.fr1.106PRB.usrpb210.conf
MR !1688 fix bug gtp-u len and robustify the gtp-u receiver
MR !1691 Fix power calculation based on CSI-RS
MR !1692 nr rlc: fix in process_control_pdu()
MR !1693 Fix to support subscribing event from another thread
MR !1681 Build RHEL8 images on Openshift Cluster
MR !1595 Sanitize NSSAI configuration in the gNB conf file
2022-09-12 20:26:52 +00:00
Robert Schmidt
3dc4736009 Reverting SD changes to make Quectel connect in CI 2022-09-12 14:21:03 +02:00
Bruno Mongazon-Cazavet
a8e2c839c5 add specific gcc options for axv512, -march=native is not sufficient 2022-09-09 18:13:45 +02:00
Bruno Mongazon-Cazavet
63333a6dec restore and fix --noavx512, remove useless comments, remove useless build_oai processor flags 2022-09-09 12:14:20 +02:00
Robert Schmidt
0a6075844a Merge remote-tracking branch 'origin/fix-sst-sd' into integration_2022_wk36b 2022-09-08 20:43:37 +02:00
Robert Schmidt
3ac2c5e6f0 Merge remote-tracking branch 'origin/ci-build-cluster' into integration_2022_wk36b 2022-09-08 20:43:25 +02:00
Robert Schmidt
963b8cc2ee Merge remote-tracking branch 'origin/itti-add-event-fix' into integration_2022_wk36b 2022-09-08 20:43:15 +02:00
Robert Schmidt
bbab65f09c Merge remote-tracking branch 'origin/bugfix-nr-rlc-2022-09-05' into integration_2022_wk36b 2022-09-08 20:43:06 +02:00
Robert Schmidt
8f5868dccf Merge remote-tracking branch 'origin/fix_calc_power_csirs' into integration_2022_wk36b 2022-09-08 20:42:54 +02:00
Robert Schmidt
2b69a717c1 Merge remote-tracking branch 'origin/fix-gtp-u-len-bug' into integration_2022_wk36b 2022-09-08 20:42:42 +02:00
Robert Schmidt
1d4d22e37e Merge remote-tracking branch 'origin/astro-develop-patch-97937' into integration_2022_wk36b 2022-09-08 20:42:35 +02:00
Robert Schmidt
8e4c7a1115 Merge remote-tracking branch 'origin/sa_conf_and_fixes_for_mu0' into integration_2022_wk36b 2022-09-08 20:42:21 +02:00
Robert Schmidt
5ee0149064 Merge remote-tracking branch 'origin/ul-phr' into integration_2022_wk36b 2022-09-08 20:16:58 +02:00
Robert Schmidt
4f402e6189 Merge remote-tracking branch 'origin/nr-mac-rlc-pdcp-stats' into integration_2022_wk36b 2022-09-08 20:06:27 +02:00
Robert Schmidt
8eaceae023 Add NSSAI_SD in docker-compose for nFAPI nrUE config 2022-09-08 15:18:52 +02:00
Raphael Defosseux
c4950f41b9 fix(ci): SMF configuration was incomplete for none-SD NSSAI
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2022-09-08 11:19:52 +02:00
Cedric Roux
3b42e46cf0 nr rlc: add enum for rlc mode (am, um, or tm) 2022-09-06 15:58:47 +02:00
Bruno Mongazon-Cazavet
b3b078ed73 Merge branch 'simde' of https://gitlab.eurecom.fr/oai/openairinterface5g into simde 2022-09-06 14:31:56 +02:00
Bruno Mongazon-Cazavet
91be04480f restore iq player behavior + set for 40MHz, fix warning 2022-09-06 14:31:21 +02:00
laurent
bcba097936 fix nrscope array size len 2022-09-06 13:51:43 +02:00
laurent
bc95466e1e fix check error in config module, for array types 2022-09-06 13:50:38 +02:00
laurent
b36a5b446f fix reject gtp-u incoming with no data 2022-09-06 13:48:00 +02:00
Robert Schmidt
1da1d50963 Add crc.h as licence exception: file is already in repo 2022-09-06 13:22:19 +02:00
Robert Schmidt
3bb312dce2 Help function for creating repository workspace 2022-09-06 12:05:24 +02:00
Robert Schmidt
d0e5786470 Improve wording in openshift/README.md 2022-09-06 12:05:24 +02:00
Robert Schmidt
c01d846a3a Reintroduce banner in README 2022-09-06 12:05:24 +02:00
Robert Schmidt
68c6a79328 Replace hard-coded (unused) password with a constant
The plan is to migrate the CI to not need any passwords. This constant
can be used to give a dummy password.
2022-09-06 12:05:24 +02:00
luis_pereira87
0cffceddb3 Address review comments and re-formatting the code using clang-format 2022-09-06 10:25:51 +01:00
Robert Schmidt
879d37b2de Enable testing for all files to force ran-base rebuild 2022-09-06 10:21:55 +02:00
Robert Schmidt
c1fb4b6c27 Run oc logout in background to avoid timeout 2022-09-06 09:40:17 +02:00
Robert Schmidt
11d24ff42c Correct copy path for ran-base logs 2022-09-06 09:39:14 +02:00
Bruno Mongazon-Cazavet
5c893c7354 merge tools_defs.h for SIMDE 2022-09-06 09:09:40 +02:00
Sakthivel Velumani
18b3189d4e Fix to support subscribing event from external thread 2022-09-05 15:51:50 -04:00
Bruno Mongazon-Cazavet
773ac12a2a merge develop 2022-09-05 18:45:46 +02:00
Bruno Mongazon-Cazavet
223e8c354a fix usage of simde for x86 platforms 2022-09-05 17:39:11 +02:00
Robert Schmidt
74c639f867 Send NAS NSSAI SD only if configured, show UICC DNN/SST/SD info 2022-09-05 16:30:28 +02:00
Robert Schmidt
015c4265f0 Remove NSSAI_SD from UE conf 2022-09-05 16:30:28 +02:00
Robert Schmidt
b3b4b6dc01 docker-compose files: no SD 2022-09-05 16:30:28 +02:00
Robert Schmidt
09db9c3022 generateTemplate.py: allow multiple replacements in a single line
- especially for plmn_list, will allow to be followed by an MCC/MNC in a
  single line
- tightens regexes to match replacements more accurately, e.g., "val =
  key" (instead of just searching for "key)
- no special rule for SD, which matches SD values (and not the SD
  field). However, currently it is not possible to specify multiple SDs
  (multiple SSTs was already not possible)
2022-09-05 16:30:28 +02:00
Cedric Roux
2c08302c89 nr rlc: fix in process_control_pdu()
the following:

         if (cur_wait_list == entity->wait_end)
           end_wait_list = prev_wait_list;

was done after cur_wait_list is updated to its new value, but the old value
has to be used in this test. So end_wait_list was not set properly.

This was leading to random crashes later on because then entity->wait_list
was NULL but entity->wait_end was not (because of the bug fixed by this
commit).

The new value for cur_wait_list is also now set using prev_wait_list->next
just before the goto, as done in other places in the code.

Also "cur" was removed, for it has no purpose and makes the code harder
to understand.
2022-09-05 16:29:51 +02:00
Robert Schmidt
46bbd3f979 CI: Check that plmn_list matching key has dict type
The loop passes over all keys. For plmn_list, there are subentries mcc,
mnc, mnc_length. The plmn_list if block assumes that the key is a dict,
which was not checked for, leading to a type error.
2022-09-05 16:09:38 +02:00
Robert Schmidt
c859c233f7 Simplify NSSAI configuration in all configuration files 2022-09-05 16:09:38 +02:00
Robert Schmidt
bf853fe3f1 Sanitize NSSAI configuration
Following changes included:
- SD is optional: when value is 0xffffff or not present in config
  (previously: needed to be set to 0)
- Checks SSTs in range [0,255]
- Checks SDs in range [0,0xffffff]
- Correct typo SST defines
2022-09-05 16:09:38 +02:00
Robert Schmidt
6ac9296a12 Update TESTBenches.doc 2022-09-05 15:42:12 +02:00
Robert Schmidt
5008eb4e38 Switch to RHEL8-Cluster-Image-Builder in RAN-Container-Parent 2022-09-05 15:42:12 +02:00
Robert Schmidt
0778367633 Add Jenkinsfile for cluster jobs 2022-09-05 15:42:12 +02:00
Robert Schmidt
41a9ac1119 Python Class for Cluster Building and Deployment 2022-09-05 15:42:12 +02:00
Robert Schmidt
ebdbb1fc13 Physim: image is already on openshift image registry 2022-09-05 15:39:34 +02:00
Robert Schmidt
0e9455b721 Update README.md 2022-09-05 15:39:34 +02:00
Robert Schmidt
01add24bee GetParametersFromXML(): simplify forced_workspace_cleanup reading 2022-09-05 15:29:33 +02:00
Robert Schmidt
668d0865b8 Simplify cls_containerize.BuildImage() and drop allImagesSize class member 2022-09-05 15:29:33 +02:00
Robert Schmidt
d78ccd64ca Help function for analyzing RAN build logs 2022-09-05 15:29:32 +02:00
Robert Schmidt
f77bf44386 Help function for copying RAN build logs to executor 2022-09-05 15:29:32 +02:00
Robert Schmidt
580b2f3263 Create physim BuildConfig and harmonize ImageStream filename 2022-09-05 15:29:32 +02:00
Robert Schmidt
d524bbb0ed Add openshift build-configs and image-streams 2022-09-05 15:29:32 +02:00
Robert Schmidt
02f97a15b4 Drop old OpenShift cluster files 2022-09-05 15:29:32 +02:00
Robert Schmidt
e62662e463 Correct entitlements in base Dockerfile 2022-09-05 15:29:32 +02:00
Robert Schmidt
e2c59441cd Dockerfile: delete artifacts using -c before building 2022-09-05 15:29:32 +02:00
francescomani
0a992c604a Merge remote-tracking branch 'origin/develop' into ul-phr 2022-09-05 14:35:50 +02:00
luis_pereira87
6e36b5405a Fix power calculation based on CSI-RS 2022-09-05 13:33:00 +01:00
Robert Schmidt
d1a36c29c2 Limit XML repeatCount to 1 2022-09-05 14:10:04 +02:00
Laurent Thomas
1ef62f5842 fix bug gtp-u len and robustify the gtp-u receiver 2022-09-05 14:10:04 +02:00
Robert Schmidt
474cde3b41 Merge branch 'integration_2022_wk35b' into 'develop'
integration_2022_wk35b

See merge request oai/openairinterface5g!1689

MR !785 Add .clang-format file
MR !1487 LDPC offload on T1 card
MR !1677 NR LBRM for UL
MR !1683 Schedule ULSCH in flexible slots in InitialBWP
MR !1674 Optimize nr_rotation
MR !1685 Fix AssertFatal in Msg3
MR !1684 Implementation of a RA timer to remove UE in the case of Msg4 not be decoded by the UE
MR !1669 Fixes when there is no spCellConfig configured
MR !1648 simplify thread pool configuration
MR !1609 improve-nr_ul_channel_estimation
2022-09-05 12:05:28 +00:00
Robert Schmidt
23459a487d Merge remote-tracking branch 'origin/improve-nr_ul_channel_estimation' into integration_2022_wk35b 2022-09-04 21:46:17 +02:00
Robert Schmidt
203ac17833 Merge remote-tracking branch 'origin/by-core-thread-pool' into integration_2022_wk35b 2022-09-04 21:46:04 +02:00
Robert Schmidt
0b970e9e63 Merge remote-tracking branch 'origin/fixes_when_no_spCellConfig' into integration_2022_wk35b 2022-09-04 21:39:51 +02:00
Robert Schmidt
f8cc843aa7 Merge remote-tracking branch 'origin/Remove_UE_when_Msg4_fails_to_be_decoded' into integration_2022_wk35b 2022-09-04 21:39:37 +02:00
Robert Schmidt
ddeaf445f0 Merge remote-tracking branch 'origin/Fix_AssertFatal_in_Msg3' into integration_2022_wk35b 2022-09-04 21:39:23 +02:00
Robert Schmidt
95dad65c9a Merge remote-tracking branch 'origin/nr_rotation_optimization' into integration_2022_wk35b 2022-09-04 21:39:09 +02:00
Robert Schmidt
c87188191d Merge remote-tracking branch 'origin/Schedule_ULSCH_in_flexible_slots_in_InitialBWP' into integration_2022_wk35b 2022-09-04 21:38:55 +02:00
Robert Schmidt
01a3f9d5f9 Merge remote-tracking branch 'origin/NR_UL_LBRM' into integration_2022_wk35b 2022-09-04 21:38:38 +02:00
Robert Schmidt
609c2716c7 Merge remote-tracking branch 'origin/ldpc_offload_t1_mr' into integration_2022_wk35b 2022-09-04 21:37:44 +02:00
Robert Schmidt
392946f0c1 Merge remote-tracking branch 'origin/feature-support-clang-format' into integration_2022_wk35b 2022-09-04 21:37:28 +02:00
Abdelrahman Astro
f06fc314c6 quick fix for gnb.sa.band41.fr1.106PRB.usrpb210.conf 2022-09-03 09:08:48 +00:00
laurent
6f862c0dfe fix a bug in itti external sockets 2022-09-02 14:25:17 +02:00
laurent
bf2b069d96 let more time for docker compose to start the container 2022-09-02 11:36:47 +02:00
laurent
223ae5c307 remove a forgotten printf() 2022-09-02 11:36:47 +02:00
laurent
9b207834e7 merge conflict fix 2022-09-02 11:36:47 +02:00
laurent
5fcd8b6f9f fix direct memory bugs in lte mbms 2022-09-02 11:36:47 +02:00
laurent
9ee917039a fix non reentrant issue in itti 2022-09-02 11:36:47 +02:00
laurent
abf6801094 fix text typos 2022-09-02 11:36:47 +02:00
laurent
aa2a36768c simplify thread pool configuration
fix segv

fix bug redeclaration of same struct in phy sim

Apply 1 suggestion(s) to 1 file(s)

code reveiw comments
2022-09-02 11:36:47 +02:00
Francesco Mani
adea216202 adding a comment 2022-09-01 15:48:31 +00:00
laurent
4c74cc6686 Improve nr_ul_channel_estimation() 2022-09-01 16:35:57 +02:00
Raphael Defosseux
8229f00d0e chore(ci): disable all the 4G Legacy LTE pipelines before we migrate the servers
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2022-09-01 16:25:49 +02:00
Thomas Schlichter
18500674df improve nr_dlsch_decoding 2022-09-01 12:14:19 +02:00
luis_pereira87
9178648902 Address review comments 2022-09-01 08:34:53 +01:00
luis_pereira87
66369a8a4c Prevent ra_timer to be enabled when running in phy-test mode
When running in this mode there is no RA that will succeed to disable the timer
2022-09-01 08:29:57 +01:00
luis_pereira87
00373ed10b Address review comments 2022-09-01 08:12:26 +01:00
luis_pereira87
8a6d09666d Fix AssertFatal in Msg3 to not Assert when there is a PUCCH (CSI report) already scheduled for that slot 2022-08-31 16:03:36 +01:00
luis_pereira87
13bdcb4743 Implementation of a RA timer to remove UE in the case of Msg4 not be decoded by the UE 2022-08-31 08:52:35 +01:00
Robert Schmidt
622e14ad4f 5G RFsim: increase PRACH threshold to 20dB to avoid misdetections 2022-08-30 17:07:00 +02:00
luis_pereira87
3ea751c3cb Schedule ULSCH in flexible slots in InitialBWP 2022-08-30 14:37:59 +01:00
Thomas Schlichter
1440807e23 increase prach_dtx_threshold to 20 dB to avoid fake PRACH detections 2022-08-30 11:17:34 +02:00
Robert Schmidt
cb3108f4e5 Merge branch 'integration_2022_wk35' into 'develop'
integration_2022_wk35

See merge request oai/openairinterface5g!1682

MR !1571 PHY procedures for SRS MIMO
MR !1666 gzip optim, links for size
MR !1668 Update core images to latest develop for CI
MR !1670 Fix initial_cyclic_shift for pucch-ConfigCommon
MR !1671 Fix unaligned channel processing with odd number of rb
MR !1672 Enable 2 Downlink layers MIMO and other minor improvements in default configuration files
MR !1680 Fix buffer overflow and division by 0 for SRS
2022-08-30 06:23:42 +00:00
Robert Schmidt
2e7533a068 CI: Fix workspace path in LDPC Test 2022-08-29 18:27:25 +02:00
luis_pereira87
e2faa154e7 Merge remote-tracking branch 'origin/develop-SRS-buffer-overflow' into integration_2022_wk35
# Conflicts:
#	openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c
2022-08-29 16:50:01 +01:00
Robert Schmidt
89a71a10e0 Create oai_rules_result.txt expected by CI 2022-08-29 17:39:37 +02:00
Robert Schmidt
a3543668f3 Merge remote-tracking branch 'origin/Update_configuration_files' into integration_2022_wk35 2022-08-29 17:25:38 +02:00
Robert Schmidt
a085522128 Merge remote-tracking branch 'origin/fix-unaligned-channel-processing-with-odd-number-of-rb' into integration_2022_wk35 2022-08-29 17:25:25 +02:00
Robert Schmidt
256483a25d Merge remote-tracking branch 'origin/BugFix_in_initial_cyclic_shift_for_pucch-ConfigCommon' into integration_2022_wk35 2022-08-29 17:25:08 +02:00
Robert Schmidt
abd5b2cf79 Merge remote-tracking branch 'origin/update_5gcn_aug2022' into integration_2022_wk35 2022-08-29 17:24:49 +02:00
Robert Schmidt
845eeae92b Merge remote-tracking branch 'origin/optimize-ci-time' into integration_2022_wk35 2022-08-29 17:24:35 +02:00
francescomani
9819268412 Merge remote-tracking branch 'origin/develop' into ul-phr 2022-08-29 17:23:43 +02:00
francescomani
cf6ac388fd addressing review comments 2022-08-29 17:10:08 +02:00
francescomani
1e39dd777d fix physical simulators 2022-08-29 16:45:14 +02:00
francescomani
8e56e14df5 phr config harmonization 2022-08-29 16:25:09 +02:00
Robert Schmidt
c3c6aa8e75 Add Cppcheck_Analysis action, make unknown action no fail 2022-08-29 14:50:57 +02:00
Thomas Schlichter
59cb602161 review changes 2022-08-29 12:43:50 +02:00
Robert Schmidt
8de2578be5 Disable T1 Offload pipeline: avra is offline 2022-08-29 11:41:26 +02:00
Robert Schmidt
e2e62e78fe CI: add unhandled action LicenceAndFormattingCheck 2022-08-29 11:41:25 +02:00
francescomani
54ed3eb4fa test NSA 2022-08-29 08:22:09 +02:00
Robert Schmidt
5ec8a11ec9 Add readme for clang-format 2022-08-28 16:21:43 +02:00
Robert Schmidt
91f2453a57 Update documentation on how to get sources 2022-08-28 16:21:43 +02:00
Robert Schmidt
f3cd2c9aca Remove astyle 2022-08-28 16:21:43 +02:00
Robert Schmidt
e87dd85db1 Bitfield colon spacing after the colon 2022-08-26 20:14:41 +02:00
Cedric Roux
af6059d4ab clang-format: open-brace at column one to start the body of a function 2022-08-26 20:14:40 +02:00
Robert Schmidt
d0079ce554 Add clang-format specific pre-commit hook 2022-08-26 20:14:40 +02:00
Robert Schmidt
030e0c40aa Add .clang-format file 2022-08-26 20:14:40 +02:00
Robert Schmidt
a4eed55cea Detect DPDK using PkgConfig 2022-08-26 13:55:07 +02:00
Robert Schmidt
da5702e3c9 Use variable for T1 Offload detection 2022-08-26 13:55:07 +02:00
Robert Schmidt
4144abcc6e Update T1 Offload scenario file after option change in ulsim 2022-08-26 13:55:07 +02:00
Roberto Louro Magueta
e026e20186 Avoid division by 0 for low noise scenario 2022-08-26 11:41:23 +01:00
Hongzhi Wang
1124b21657 fix warnings 2022-08-26 12:28:26 +02:00
Roberto Louro Magueta
4e434ecf45 Fix buffer overflow for SRS 2022-08-26 11:04:04 +01:00
Dhanuja Elizabeth Thomas
313a63f52a Update 5gcn images for CI
- in ci-scripts for l2-sim, rf-sim
- in epc.py for OTA tests
2022-08-26 11:01:22 +02:00
francescomani
51483a3223 add option for limited buffer rate-matching for UL 2022-08-26 09:01:48 +02:00
Hongzhi Wang
f1df28637a delete conf file 2022-08-25 23:23:18 +02:00
luis_pereira87
f3781c4353 Add band n77 configuration file for N300 with 100 MHz
Band n78 is widely used by mobile network operators, we want to transmit over the air without interfere with them, so we set the allocation in this configuration file outside of band n78
2022-08-25 16:48:08 +01:00
Thomas Schlichter
11693b1672 5G NR: remove hardcoded modulation order 2022-08-25 14:40:36 +02:00
Thomas Schlichter
e5fad77f47 5G NR DCI improvements 2022-08-25 14:40:36 +02:00
Thomas Schlichter
8f6d084c80 small cleanup in get_type0_PDCCH_CSS_config_parameters() 2022-08-25 14:40:36 +02:00
Thomas Schlichter
7129830555 fix Msg2 scheduling
scheduling when frame number wraps was not handled correctly
2022-08-25 14:40:36 +02:00
Thomas Schlichter
ef46fe8ba8 Add and harmonize configuration files for 5, 10, 40 MHz FDD with USRP X300 2022-08-25 14:40:36 +02:00
Thomas Schlichter
c42304a797 nr_dlsim: also dump rxdataF_ext in case of debugging 2022-08-25 14:40:36 +02:00
Thomas Schlichter
ae2e8060ea update band 66 configuration files for USRP X300 and N300 2022-08-25 14:40:36 +02:00
Thomas Schlichter
9e1edf2957 nr_phy_scope: improve x-axis scaling of channel impulse response and PUSCH LLR 2022-08-25 14:40:36 +02:00
Thomas Schlichter
ea085b5fc1 harmonize initialization of symbol- and timeshift-rotation 2022-08-25 14:40:36 +02:00
Thomas Schlichter
1e36c48cf2 fix application of measured SSS fine frequency offset 2022-08-25 14:40:36 +02:00
luis_pereira87
015a4d945b Enable 2 Downlink layers MIMO and other minor improvements in default configuration files 2022-08-25 13:27:29 +01:00
Roberto Louro Magueta
d39a772436 Remove tabs 2022-08-25 10:33:38 +01:00
Roberto Louro Magueta
432817d1d5 Merge remote-tracking branch 'origin/develop' into develop-SRS-MIMO 2022-08-25 10:26:35 +01:00
Thomas Schlichter
6310606980 fix alignment issues in case of odd number of PRBs 2022-08-25 11:05:48 +02:00
Thomas Schlichter
3c17573f34 apply nr rotation only on used PRBs instead of complete OFDM symbol 2022-08-25 11:05:48 +02:00
Thomas Schlichter
21ea2f2136 pbchsim: apply nr rotation in frequency domain, like in all other places, instead of time domain 2022-08-25 10:17:59 +02:00
Robert Schmidt
a58b3989d1 Install gdb in RAN images to have stack traces on asserts 2022-08-24 15:51:49 +02:00
Robert Schmidt
4dc26bf575 docker entrypoints: print config, log USRP loader 2022-08-24 15:51:49 +02:00
Robert Schmidt
23cf8059aa Save logs of unhealthy containers during deployment 2022-08-24 15:51:49 +02:00
Robert Schmidt
c1b448cd1a Handle errors in Copy_Image_to_Test_Server() 2022-08-24 15:51:49 +02:00
laurent
3a0a14cf7d gzip optim, links for size 2022-08-24 15:51:49 +02:00
Hongzhi Wang
ea6524c52f update cmakelists and ulsim 2022-08-24 08:27:14 +02:00
Robert Schmidt
0ccb3a2d47 Add T1 Offload test to RAN-Container-Parent 2022-08-23 17:18:07 +02:00
Robert Schmidt
5bd81ae95d Define T1 Offload scenario file 2022-08-23 17:13:03 +02:00
Robert Schmidt
b0e5b6eb9a Add Run_NRulsimTest 2022-08-23 17:13:03 +02:00
Robert Schmidt
aa1cbff597 Improve PhySim build to be shorter 2022-08-23 17:11:51 +02:00
Robert Schmidt
4d85beae73 Rename CI Run_PhySim to Run_LDPCTest 2022-08-23 17:11:48 +02:00
Chieh-Chun Chen
4e4a0b7ba3 use bool and fix indentation 2022-08-23 15:54:03 +02:00
Robert Schmidt
90d4868a43 Isolate PhySim source build XML scenario 2022-08-23 12:45:36 +02:00
Robert Schmidt
e28fccc7fb Hardcode (implicit) physim OC server to use 2022-08-23 10:36:16 +02:00
Hongzhi Wang
1d4ffe42c4 Merge branch 'develop' into ldpc_offload_t1_mr
Conflicts:
	executables/nr-softmodem.h
	executables/softmodem-common.h
	openair1/SCHED_NR/phy_procedures_nr_gNB.c
2022-08-22 20:02:34 +02:00
Roberto Louro Magueta
c6fda387e0 Fix mem_offset after merge 2022-08-22 14:23:12 +01:00
laurent
0475b78ff4 fix unaligned 2022-08-22 12:55:23 +02:00
Roberto Louro Magueta
df0f756c87 Fix build after merge 2022-08-22 11:30:06 +01:00
Roberto Louro Magueta
d04918eb9b Merge remote-tracking branch 'origin/develop' into develop-SRS-MIMO
# Conflicts:
#	openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c
#	openair2/RRC/NR/MESSAGES/asn1_msg.c
#	openair2/RRC/NR/nr_rrc_config.c
#	openair2/RRC/NR/nr_rrc_config.h
2022-08-22 10:45:56 +01:00
luis_pereira87
f9f175a6f1 Fix initial_cyclic_shift for pucch-ConfigCommon 2022-08-22 10:31:15 +01:00
luis_pereira87
5ba55a511e Fixes when there is no spCellConfig configured 2022-08-22 10:07:23 +01:00
Robert Schmidt
ad8381a66b Merge branch 'integration_2022_wk33' into 'develop'
integration_2022_wk33

See merge request oai/openairinterface5g!1667

MR !1604 RRC harmonization of multiple BWPs configuration
MR !1657 NR fixes for 100MHz and 2 layers
MR !1646 Add 4G L2simulator test
MR !1662 fix a bug: multi ues in rfsimulator 4G
MR !1559 NR UE multi SSB meas
changes to disable legacy 4G F1 test
MR !1661 fix bugs in config module and config usage
MR !1562 Correctly handle SIGINT/stop signal in nr-softmodem
MR !1659 Fix segFault in SRS for odd number of PRBs
2022-08-21 06:10:51 +00:00
Robert Schmidt
2ea9618a8d Limit function name string length for logging output 2022-08-19 18:22:23 +02:00
Robert Schmidt
8aaede906d Do not hard-code default global log level 2022-08-19 18:22:23 +02:00
Robert Schmidt
909b511ed0 Merge remote-tracking branch 'origin/develop-SRS-segFault-51PRBs' into integration_2022_wk33 2022-08-19 18:22:23 +02:00
Robert Schmidt
4674cddb71 Merge remote-tracking branch 'origin/fix-nrsoftmodem-stop' into integration_2022_wk33 2022-08-19 18:22:23 +02:00
Robert Schmidt
5ebe28565e Merge remote-tracking branch 'origin/fix-config-module' into integration_2022_wk33 2022-08-19 18:22:22 +02:00
Robert Schmidt
84f7634874 Disable legacy 4G F1 test and XML scenario files 2022-08-19 18:22:22 +02:00
Roberto Louro Magueta
a0d8009170 Address review comments 2022-08-19 14:31:13 +01:00
Robert Schmidt
f3cdc11269 Merge remote-tracking branch 'origin/NR_UE_multi_SSB_meas' into integration_2022_wk33 2022-08-18 20:53:04 +02:00
Robert Schmidt
db31ddc341 Merge remote-tracking branch 'origin/bug-rfsim-4G-multi-UEs' into integration_2022_wk33 2022-08-18 20:52:21 +02:00
Robert Schmidt
71d0e95f1f Merge remote-tracking branch 'origin/ci-test-4g-l2sim' into integration_2022_wk33 2022-08-18 20:52:04 +02:00
Robert Schmidt
70627a9953 Merge remote-tracking branch 'origin/NR_100MHz_2layers_fixes' into integration_2022_wk33 2022-08-18 20:51:23 +02:00
Robert Schmidt
e0a802df16 Remove irrelevant RU/L1/RFsim config from L2sim gNB config 2022-08-18 20:39:31 +02:00
Robert Schmidt
6c31639522 Only call NR_PHY_config_req when no (n)FAPI 2022-08-18 20:37:06 +02:00
Robert Schmidt
b712e77527 Don't block nr-softmodem in nFAPI mode, not needed 2022-08-18 20:18:18 +02:00
Robert Schmidt
238c8a62b4 Delete dead code in nr-softmodem main() 2022-08-18 20:18:18 +02:00
Robert Schmidt
6bf0f98e7f Skip scheduling of UEs if there are no free HARQs 2022-08-18 19:59:50 +02:00
Bruno Mongazon-Cazavet
d9ba6b97ec fix sse 16 bit tc without avx2, fix a mispelling in trace, add --noavx2 for further perf comparision 2022-08-18 18:03:53 +02:00
Roberto Louro Magueta
1638bbba8a Add intermediate variable 2022-08-18 17:00:21 +01:00
Hongzhi Wang
1273ad406c fix compiling issue and removing dead code 2022-08-18 17:44:19 +02:00
Hongzhi Wang
31acfdea58 Merge branch 'develop' into ldpc_offload_t1_mr
Conflicts:
	openair1/SCHED_NR/phy_procedures_nr_gNB.c
2022-08-18 17:38:55 +02:00
Cedric Roux
3e2d88907b use bool, not int 2022-08-18 17:07:04 +02:00
laurent
d6d4d87e0b code review comments 2022-08-18 16:43:26 +02:00
laurent
8b159d6ddc remove unclear function free_configmodule(), as we have end_configmodule() that do the same 2022-08-18 09:47:44 +02:00
Robert Schmidt
a08d78d79d Correctly show proxy build info 2022-08-17 23:50:23 +02:00
Robert Schmidt
c139204ce0 Make one L2sim proxy build scenario file 2022-08-17 23:50:23 +02:00
Robert Schmidt
ab5a67463a Reuse existing files from 4g_rfsimulator_fdd_05MHz 2022-08-17 17:35:44 +02:00
frtabu
983c956b77 Fix config module memory leaks 2022-08-16 17:58:55 +02:00
Bruno Mongazon-Cazavet
15a5960f29 allow centos 8 build, add --avx2 for comparison purpose, fix warning on centos8 2022-08-16 17:47:35 +02:00
Cedric Roux
0618812554 T tracer: simplify
- don't call exit() if get_message() fails, simply terminate the thread and
  disable the T tracer
- T_dont_fork disappears, monitor_and_kill() as well, so now it's only 2
  processes: the main (enb/gnb/ue) and the local tracer
2022-08-16 14:44:23 +02:00
Robert Schmidt
5cadafc154 CI: check for final 'Bye.' message 2022-08-16 14:44:23 +02:00
Robert Schmidt
6f40b6190c Stop containers before undeploying 2022-08-16 14:44:23 +02:00
Robert Schmidt
d08ef0490d Correctly call stop functions in nr-softmodem main 2022-08-16 14:44:23 +02:00
Robert Schmidt
1df60139e2 Automatically close GTP sockets at program end 2022-08-16 14:44:22 +02:00
Robert Schmidt
19d83ad21e Make GTPV1U REQ in one allocation to avoid mem leak at GTP 2022-08-16 14:44:22 +02:00
Robert Schmidt
51a7b7bd6e Remove memory leaks in FAPI PUCCH 0-4 PDU handling 2022-08-16 14:44:22 +02:00
Robert Schmidt
2465f1fb51 Don't allocate gNB rxdataF, it is managed at the RU
Removes phy_procedures_gNB_common_RX() (only used in nr_ulsim) + fixes
in pucchsim
2022-08-16 14:44:22 +02:00
Robert Schmidt
9957056f38 Drop empty logging statement 2022-08-16 14:44:22 +02:00
Robert Schmidt
61ead59d13 Check oai_exit in wait_on_condition() and friends, no volatile 2022-08-16 14:44:22 +02:00
Robert Schmidt
fffb2d14de Close rfsimulator sockets 2022-08-16 14:44:22 +02:00
Robert Schmidt
649e059f90 RFsim: Mark FD non-blocking once; show errno on problem 2022-08-16 14:44:22 +02:00
Florian Kaltenberger
7e82f2f4e8 sending small end-of-burst TX packet when exiting softmodem 2022-08-16 14:44:22 +02:00
Robert Schmidt
69cf59f32d Stop USRP write thread if necessary 2022-08-16 14:44:21 +02:00
Robert Schmidt
e28bd9ff2a Free USRP objects in trx_usrp_end() 2022-08-16 14:43:59 +02:00
Robert Schmidt
0ae3d3027d Don't call trx_end_func() at nr-softmodem, is done in ru_thread() 2022-08-16 14:41:02 +02:00
Robert Schmidt
004d6d3bab Correctly stop tx_reorder and L1_stats threads 2022-08-16 14:41:02 +02:00
Robert Schmidt
1512e39e4e Rewrite kill_NR_RU_proc() and reuse functions 2022-08-16 14:41:02 +02:00
Robert Schmidt
9ec3deb5bd Improve thread pool documentation 2022-08-16 14:41:02 +02:00
Robert Schmidt
fafed7d181 Remove unused restrictRNTI variable in Tpool 2022-08-16 14:41:02 +02:00
Robert Schmidt
31dcdf2152 Implement abortNotifiedFIFO() to unlock FIFO waits 2022-08-16 14:41:02 +02:00
Robert Schmidt
dfd9a91b50 Rename abortNotifiedFIFO() to abortNotifiedFIFOJob() 2022-08-16 14:41:02 +02:00
Robert Schmidt
d73e1a4133 Handle NULL return of pullTpool() 2022-08-16 14:41:02 +02:00
Robert Schmidt
178e2773ed Handle abortFIFO in FIFO functions 2022-08-16 14:41:02 +02:00
Robert Schmidt
e63cc03c9d Implement abortTpool()
This stops all ongoing threads (using pthread_join()), and marks FIFOs
to not block anymore. In this case, returned messages will be NULL.
2022-08-16 14:41:02 +02:00
Robert Schmidt
078d6fa15b threadCreate(): don't create detached threads
A detached thread cannot be joined with pthread_join(). However, this
is crucial for correct resetting of the nr-softmodem. Therefore, do not
create threads in detached state.
2022-08-16 14:41:02 +02:00
Robert Schmidt
fc298b77b5 Don't stop nr-softmodem on FEP thread exit cond 2022-08-16 14:41:02 +02:00
Robert Schmidt
76f399cdd6 Threading/memory improvements at nr-softmodem end
- First stop threads then free memory
- Don't call kill_NR_RU_proc() twice (is called in stop_RU())
- Memory allocation optimizations
2022-08-16 14:41:02 +02:00
luis_pereira87
604d52a431 Replace sleep by mutex in itti_wait_tasks_end() 2022-08-16 14:41:01 +02:00
Robert Schmidt
c4a657cc33 Avoid additional malloc() for queues and Tpool 2022-08-16 14:41:01 +02:00
Robert Schmidt
31d5bb6ffd Rename abortTpool() to abortTpoolJob(), fix doc 2022-08-16 14:41:01 +02:00
francescomani
df1f4381a2 fix in sib1 memcpy size 2022-08-16 11:18:00 +02:00
francescomani
166aae35ab fixes to get 100MHz working with 2 layers 2022-08-16 11:18:00 +02:00
Robert Schmidt
70bb1a3858 Add L2sim-4G to RAN-Container-Parent and documentation 2022-08-16 09:59:36 +02:00
laurent
65b399fcd7 fix bugs in config module and config usage
fix bug from this MR

fix bug from this MR

stupid-mistake
2022-08-16 09:22:15 +02:00
laurent
d46a7e40a8 fix a bug: multi ues in rfsimulator 4G 2022-08-16 08:51:37 +02:00
Robert Schmidt
793c8de2ae CI: Add L2sim-4G iperf DL&UL test 2022-08-13 15:17:42 +02:00
Robert Schmidt
71c13d85fc Add 4G L2sim XML scenario files 2022-08-13 15:17:42 +02:00
Robert Schmidt
7f8031f69a Add docker-compose.yml for l2sim-4g 2022-08-13 15:17:42 +02:00
Robert Schmidt
c7f79e71e7 Add more users for dummy CI 4G UE sim configuration 2022-08-13 15:17:42 +02:00
Robert Schmidt
df05475b6b Add eNB L2sim config file for enb container image 2022-08-13 15:17:42 +02:00
Bruno Mongazon-Cazavet
9a934dad36 after manual merge 2022-08-12 13:05:01 -04:00
francescomani
0289bb5791 SRS for multiple BWPs 2022-08-12 15:39:48 +02:00
francescomani
8403b2c6d5 Merge remote-tracking branch 'origin/develop' into NR_RRC_harmonization_after_BWP 2022-08-12 13:05:11 +02:00
francescomani
2e4f55f6f1 Merge remote-tracking branch 'origin/develop' into ul-phr 2022-08-12 12:22:48 +02:00
Cedric Roux
1b029be058 nr rlc stats: make avg time to tx optional
Introduce the function nr_rlc_activate_avg_time_to_tx() to
activate/deactivate collection of avg time to tx stats (which
may have an impact on realtime processing, so better not compute
them when not needed).

Fix a little bug in time_average_get_average() for when there is not stat.
2022-08-12 12:19:09 +02:00
Chieh-Chun Chen
c0394bc09c Add avg time to tx an sdu for RLC UM & TM mode 2022-08-12 12:19:09 +02:00
Cedric Roux
fad3f23164 Add RLC stats: avg time to tx for an RLC SDU 2022-08-12 12:19:09 +02:00
Robert Schmidt
6a23bcfb42 Add PDCP stats 2022-08-12 12:19:09 +02:00
Robert Schmidt
ec4df27a75 Add RLC stats 2022-08-12 12:19:09 +02:00
Robert Schmidt
bcbf2b38ee Add more MAC stats 2022-08-12 12:19:09 +02:00
Robert Schmidt
61312ca6e2 Merge branch 'integration_2022_wk32' into 'develop'
integration_2022_wk32

See merge request oai/openairinterface5g!1658

MR !1551 Use F1 internally: RRC Message Transfer
MR !1645 fix(ci): Fixes for the legacy LTE bench
MR !1654 Fix for NDI init at UE
MR !1656 ngap: minor fix: access the array correctly
MR !1635 Fix SDAP in RFSIM mode
MR !1643 add asn1c logs
MR !1647 Function to get sample rate and BW
2022-08-12 05:33:12 +00:00
Robert Schmidt
6a0605b000 Merge remote-tracking branch 'origin/get_samplerate_and_bw' into integration_2022_wk32 2022-08-11 18:11:15 +02:00
Robert Schmidt
9c94f86451 Merge remote-tracking branch 'origin/add-asn1c-codec-logs' into integration_2022_wk32 2022-08-11 18:10:55 +02:00
Robert Schmidt
ef526692b5 Merge remote-tracking branch 'origin/fix_sdap' into integration_2022_wk32 2022-08-11 18:04:47 +02:00
francescomani
63a9cbcc66 fixes to correctly configure and schedule CSI-RS in case of multiple BWPs 2022-08-11 15:41:46 +02:00
laurent
eba7dc5c76 Print asn1c encoding logs using OAI logging system 2022-08-11 14:00:43 +02:00
Angelo Athanassopoulos
17aef213a1 Fix: noS1 with SDAP 2022-08-11 11:19:27 +02:00
Robert Schmidt
44f363c63c Merge remote-tracking branch 'origin/minor-fix-bad-sd-flag' into integration_2022_wk32 2022-08-10 20:40:24 +02:00
Robert Schmidt
c607e5c3d6 Merge remote-tracking branch 'origin/NR_phytest_UE_ndi' into integration_2022_wk32 2022-08-10 20:40:03 +02:00
Robert Schmidt
f065de0811 Merge remote-tracking branch 'origin/ci-fix-legacy-bench' into integration_2022_wk32 2022-08-10 20:39:57 +02:00
francescomani
c0244ee68e fix for conflicting csi resources for multiple ues 2022-08-10 16:51:03 +02:00
Raphael Defosseux
888c4ead0f fix(ci): Fixes for the legacy LTE bench
- Problem with escaping chars
 - Killing properly tshark process on EPC
 - standalone Terminate eNB was failing

Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2022-08-10 15:08:52 +02:00
francescomani
5d39d8125c addressing review comment 2022-08-10 09:38:21 +02:00
Roberto Louro Magueta
0cb014f463 Fix memory alignment in nr_srs_channel_estimation 2022-08-09 17:11:12 +01:00
Robert Schmidt
f1c5378e3b Shorten 5G RFsim tab names 2022-08-09 15:05:58 +02:00
Robert Schmidt
c21f86421e Test SDAP in 5G FDD RFsim test 2022-08-09 15:05:50 +02:00
Cedric Roux
ee7aca5d05 ngap: minor fix: access the array correctly 2022-08-09 12:22:40 +02:00
francescomani
dc531588e9 addressing review comments 2022-08-09 12:01:54 +02:00
francescomani
5cfa5ad6f6 fixes for multiple BWPs 2022-08-08 18:32:39 +02:00
Angelo Athanassopoulos
5382227866 Fix SDAP, get QFI & PDUSession ID from CN 2022-08-08 18:09:59 +02:00
francescomani
b749ac12f7 hotfix for UE NDI init 2022-08-08 17:12:12 +02:00
Bruno Mongazon-Cazavet
41b527cfb3 restore --noavx512 without effect, add --avx512, do not SIMDE avx512, SIMDE for x86 avx2 2022-08-08 10:03:40 -04:00
Roberto Louro Magueta
49d60500c0 Change array size from MAX_NUM_NR_SRS_AP to 1<<srs_pdu->num_ant_ports 2022-08-08 13:49:33 +01:00
Roberto Louro Magueta
7e87265a74 Merge remote-tracking branch 'origin/develop' into develop-SRS-MIMO
# Conflicts:
#	openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c
#	openair1/SCHED_NR/phy_procedures_nr_gNB.c
2022-08-08 11:54:43 +01:00
francescomani
032879c0c1 Merge remote-tracking branch 'origin/develop' into NR_RRC_harmonization_after_BWP 2022-08-08 12:37:40 +02:00
francescomani
154571e10c Merge remote-tracking branch 'origin/develop' into ul-phr 2022-08-08 12:12:29 +02:00
Robert Schmidt
9622a56bf1 gNB RRC: handle F1AP_UL_RRC_MESSAGE 2022-08-07 20:03:05 +02:00
Robert Schmidt
18a68387c4 Transfer Initial UL RRC Message through internal F1 2022-08-07 20:03:04 +02:00
Robert Schmidt
a126cd1220 Delete ITTI-SIM 2022-08-07 19:58:35 +02:00
Robert Schmidt
52dbc6fe75 Refactor linear allocator from LTE/NR; separate LTE/NR headers 2022-08-07 19:49:08 +02:00
Robert Schmidt
0c9006ec66 Do not initialize MAC multiple times 2022-08-07 19:49:08 +02:00
Robert Schmidt
f52809a8fb Add MAC-RRC UL stubs for F1AP and direct 2022-08-07 19:49:08 +02:00
Robert Schmidt
f75cdbcad7 Use F1 DL RRC message transfer internally for RRCSetup 2022-08-07 19:49:08 +02:00
Robert Schmidt
4154e9e9d5 Merge branch 'integration_2022_wk31b' into 'develop'
integration_2022_wk31b

See merge request oai/openairinterface5g!1649

MR !1624 NR PUCCH2 fix
MR !1627 fix for pusch dtx in phytest mode
MR !1634 Minor optimization in function init_symbol_rotation
MR !1637 gtp: small fix: set E if there is an extension header
MR !1641 Resolve AMF ip address using FQDN
delete files rxsigF0.m, txsig0.m, ldpctest_BG_1_Zc_384_rate_1-3_block_length_8448_maxit_5.txt
MR !1593 Reworking of BWP handling at MAC (initial MR)
MR !1652 fix for 3-digit MNC in asn1_msg.c
2022-08-07 17:47:12 +00:00
Robert Schmidt
4f2e97d91c Merge remote-tracking branch 'origin/nr_sib1_mnc_hotfix' into integration_2022_wk31b 2022-08-07 19:39:15 +02:00
Raymond Knopp
087a97f606 fix for 3-digit MNC in asn1_msg.c 2022-08-06 16:30:59 +02:00
francescomani
d793de5700 some fixes in SSB RSRP 2022-08-06 11:27:49 +02:00
Robert Schmidt
ebc55ea206 Merge remote-tracking branch 'origin/NR_BWP_config' into integration_2022_wk31b 2022-08-04 19:13:57 +02:00
Robert Schmidt
ddc6df0bf4 Remove files accidentally added in MR 1382 2022-08-04 18:51:02 +02:00
Robert Schmidt
b0c7a3efe9 Merge remote-tracking branch 'origin/amf-fqdn-support' into integration_2022_wk31b 2022-08-04 18:49:49 +02:00
Robert Schmidt
0c29e5ea5b Merge remote-tracking branch 'origin/gtp-hotfix' into integration_2022_wk31b 2022-08-04 18:49:41 +02:00
Robert Schmidt
cb4e60eed3 Merge remote-tracking branch 'origin/init_symbol_rotation_optimization' into integration_2022_wk31b 2022-08-04 18:49:33 +02:00
Robert Schmidt
0352f98467 Merge remote-tracking branch 'origin/NR_PUSCH_phytest_DTX_fix' into integration_2022_wk31b 2022-08-04 18:49:25 +02:00
francescomani
40442d14cf adding a comment 2022-08-04 18:17:15 +02:00
francescomani
9333f53dc8 adding an assertion in configure_UE_BWP 2022-08-04 17:46:18 +02:00
Bruno Mongazon-Cazavet
f10f7c0368 restore --noavx512, add --avx512, do not SIMDE emulate avx512 2022-08-04 11:42:54 -04:00
francescomani
6e2a83856b common function to get sample rate and BW 2022-08-04 17:19:15 +02:00
francescomani
d908779c38 lowercase bwp 2022-08-04 11:34:25 +02:00
Bruno Mongazon-Cazavet
ee69161c93 Merge branch 'simde' of https://gitlab.eurecom.fr/oai/openairinterface5g into simde 2022-08-04 05:15:28 -04:00
francescomani
8c81c70de9 Fix AckNack and SR multiplexing in PUCCH2
- correctly reset HARQ structure for HARQ Ack/Nack/PUCCH0
- reduce max PUCCH2 bits to have room for SR
2022-08-04 10:53:41 +02:00
francescomani
3d804db4b3 minor code refactoring 2022-08-04 09:35:45 +02:00
Bruno Mongazon-Cazavet
66f7857831 Merge branch 'develop' of https://gitlab.eurecom.fr/oai/openairinterface5g into simde 2022-08-03 12:27:56 -04:00
Rohan
b64baf144d Resolve AMF ip address using FQDN 2022-08-03 17:27:08 +02:00
francescomani
64568b2a9d Merge remote-tracking branch 'origin/develop' into ul-phr 2022-08-03 14:57:54 +02:00
francescomani
5fc23d5864 Merge remote-tracking branch 'origin/develop' into NR_RRC_harmonization_after_BWP 2022-08-03 12:11:37 +02:00
francescomani
cbff9df713 Merge remote-tracking branch 'origin/develop' into NR_BWP_config 2022-08-03 10:59:12 +02:00
Cedric Roux
3155ec6df8 gtp: small fix: set E if there is an extension header 2022-08-03 10:34:12 +02:00
francescomani
3d93d0dfc0 fix for pusch dtx in phytest mode 2022-08-03 09:57:40 +02:00
Robert Schmidt
094ea4b98f Remove --noavx512 from Dockerfiles: not supported anymore 2022-08-03 09:44:55 +02:00
Robert Schmidt
7f910a2e36 Merge branch 'integration_2022_wk30b' into 'develop'
integration_2022_wk30b

See merge request oai/openairinterface5g!1630

MR !1594 Schedule BWP switching to the first active BWP when RA with Msg3 carrying DCCH or DTCH message
MR !1628 Fix a segmentation fault when there is no spCellConfigDedicated with maxMIMO_Layers parameter
MR !1528 CSI Feedback
MR !1631 Fix floating point for SRS
MR !1632 gtp pgu session header
MR !1633 Improve SIB1 length to support maximum value specified in 3GPP TS 38.331 section 5.2.1
MR !1463 Support arbitrary number of retransmissions (up to 8)
2022-08-03 06:42:38 +00:00
Bruno Mongazon-Cazavet
ccac390726 restore -H option in build_helper 2022-08-02 11:33:32 -04:00
Robert Schmidt
a21c31a6a5 Merge remote-tracking branch 'origin/HARQ_rv_circular_array' into integration_2022_wk30b 2022-08-02 11:04:04 +02:00
Robert Schmidt
f29fe05031 Merge remote-tracking branch 'origin/NR_MAC_SIB1_Improvements' into integration_2022_wk30b 2022-08-02 11:04:04 +02:00
Robert Schmidt
d2a784280d Merge remote-tracking branch 'origin/impl-pdu-session-header' into integration_2022_wk30b 2022-08-02 11:04:04 +02:00
Robert Schmidt
48b045b0b0 Merge remote-tracking branch 'origin/develop-SRS-fix' into integration_2022_wk30b 2022-08-02 11:04:04 +02:00
Robert Schmidt
fc6122759b Merge remote-tracking branch 'origin/develop-CSI-Measurements' into integration_2022_wk30b 2022-08-02 11:04:04 +02:00
Robert Schmidt
eb46f216b1 Upgrade path to AS lteue after simulator upgrade 2022-08-02 11:04:03 +02:00
Robert Schmidt
3e7864eb53 Merge remote-tracking branch 'origin/Fix_segfault_when_no_spCellConfigDedicated' into integration_2022_wk30b 2022-08-02 11:04:03 +02:00
Bruno Mongazon-Cazavet
567ca14f40 remove -H option in build_helper 2022-08-02 04:28:09 -04:00
Bruno Mongazon-Cazavet
7ae4bd213e restore -H option in build_helper 2022-08-02 03:33:30 -04:00
Bruno Mongazon-Cazavet
46743ece40 fix install packages for redhat, set -fno-var-tracking-assignements gcc flag 2022-08-02 02:31:28 -04:00
laurent
7a6f9659bc gtp-u pdu session extension header implementation, this extension header is mantadory in 5G 2022-08-01 22:57:52 +02:00
luis_pereira87
fdd79391e9 Call function nr_mac_update_timers when there is a Msg3 carrying a DCCH message 2022-08-01 17:57:50 +01:00
Bruno Mongazon-Cazavet
4210e0704c add simde installation in build_oai 2022-08-01 12:37:39 -04:00
Bruno Mongazon-Cazavet
8b4e8bb501 first port of Intrinsics usage to simde 2022-08-01 10:53:59 -04:00
francescomani
840cf403db Make max num of HARQ tx configurable per UL/DL
Contributors
  francescomani <email@francescomani.it>
  Robert Schmidt <robert.schmidt@openairinterface.org>
2022-08-01 16:53:43 +02:00
francescomani
4ad4edb871 Log arbitrary number of HARQ rounds
Contributors
  francescomani <email@francescomani.it>
  Robert Schmidt <robert.schmidt@openairinterface.org>
2022-08-01 16:31:01 +02:00
francescomani
989c22a46c Limit RV to interval of 0..3
Contributors
  francescomani <email@francescomani.it>
  Rodolphe Bertolini <rodolphe.bertolini@cea.fr>
2022-08-01 16:29:58 +02:00
francescomani
9e5a77e6e3 Remove max number of HARQ rounds from L1
Contributors:
  francescomani <email@francescomani.it>
  Rodolphe Bertolini <rodolphe.bertolini@cea.fr>
2022-08-01 15:59:16 +02:00
luis_pereira87
48019c33f4 Minor optimization in function init_symbol_rotation 2022-08-01 11:20:55 +01:00
luis_pereira87
47d604b41f Improve SIB1 length to support maximum value specified in 3GPP TS 38.331 section 5.2.1
The physical layer imposes a limit to the maximum size a SIB can take. The maximum SIB1 or SI message size is 2976 bits.
2022-08-01 10:35:08 +01:00
luis_pereira87
7f38019f7e Remove unused code 2022-08-01 10:26:14 +01:00
francescomani
be0fc1a982 Merge remote-tracking branch 'origin/develop' into NR_UE_multi_SSB_meas 2022-07-30 10:21:58 +02:00
francescomani
d0e68a2c88 reworking phr
adding assertion
2022-07-29 18:25:59 +02:00
Roberto Louro Magueta
6f67792993 Variable rename 2022-07-29 10:42:55 +01:00
Roberto Louro Magueta
069bebfa48 Fix floating point 2022-07-29 10:05:34 +01:00
luis_pereira87
b7b6e8a60f Merge remote-tracking branch 'origin/develop' into develop-CSI-Measurements
# Conflicts:
#	openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c
2022-07-28 16:50:04 +01:00
francescomani
e8c637cd32 Merge remote-tracking branch 'origin/develop' into NR_RRC_harmonization_after_BWP 2022-07-28 17:21:04 +02:00
francescomani
d5a086d396 Merge remote-tracking branch 'origin/develop' into NR_BWP_config 2022-07-28 16:12:27 +02:00
francescomani
f44dd6317b nr_process_mac_pdu formatting 2022-07-28 15:31:13 +02:00
francescomani
478ea7ab6c BG at MAC as part of new FAPI version 2022-07-28 15:10:03 +02:00
luis_pereira87
1a77e9ba37 Schedule BWP switching to the first active BWP (previous active BWP before RA with Msg3 carrying DCCH or DTCH message) 2022-07-28 14:49:17 +02:00
Robert Schmidt
add469e7ca Merge branch 'integration_2022_wk30' into 'develop'
integration_2022_wk30

See merge request oai/openairinterface5g!1626

MR !1616 NR SA tutorials v2
MR !1620 nr_pdcp: nia1 implementation
MR !1622 CI: do not trigger tests if nothing is tagged NSA
MR !1623 Fix for ssb subcarrier offset in case of f<3GHz
MR !1606 code maintenance
MR !1568 Add undefined behavior sanitizer in build_oai, fix some errors
MR !1587 Dynamically build L2sim proxy
2022-07-28 11:59:36 +00:00
Robert Schmidt
08e30bf4ab Merge remote-tracking branch 'origin/l2proxy-build' into integration_2022_wk30 2022-07-28 09:45:24 +02:00
Robert Schmidt
57c545d4b3 Merge remote-tracking branch 'origin/use-ubsan' into integration_2022_wk30 2022-07-28 09:45:10 +02:00
luis_pereira87
970bfc92f0 Fix a segmentation fault when there is no spCellConfigDedicated with maxMIMO_Layers parameter 2022-07-28 07:21:36 +01:00
Roberto Louro Magueta
8cd8799981 Update range for reported RSRP 2022-07-27 18:43:47 +01:00
Robert Schmidt
c663688fb2 Merge remote-tracking branch 'origin/accumulated-fixes-2022june' into integration_2022_wk30 2022-07-26 17:22:00 +02:00
laurent
b4331bf7f4 code maintenance: old errors 2022-07-26 17:20:09 +02:00
Robert Schmidt
878491334f Merge remote-tracking branch 'origin/another_SSB_bugfix' into integration_2022_wk30 2022-07-26 17:15:32 +02:00
Robert Schmidt
8b26160d4d Merge remote-tracking branch 'origin/fix-jenkins-trig-nsa' into integration_2022_wk30 2022-07-26 17:15:16 +02:00
Roberto Louro Magueta
3ca83257cc UE sends the report with the RSRP based on CSI-RS to gNB 2022-07-26 15:45:11 +01:00
Robert Schmidt
c59912d7ee Merge remote-tracking branch 'origin/nr-pdcp-nia1' into integration_2022_wk30 2022-07-26 16:39:11 +02:00
Robert Schmidt
a20a6ba431 Merge remote-tracking branch 'origin/NR_SA_Tutorials_v2' into integration_2022_wk30 2022-07-26 16:38:45 +02:00
Roberto Louro Magueta
1f818b4178 RSRP computation at UE based on CSI-RS 2022-07-26 12:45:30 +01:00
Robert Schmidt
e1798745ef Dynamically build L2sim proxy 2022-07-26 09:54:53 +02:00
francescomani
5427ec25b6 applying config_srs to all the instances 2022-07-25 15:24:58 +02:00
francescomani
56e73266cb Merge remote-tracking branch 'origin/develop' into NR_RRC_harmonization_after_BWP 2022-07-25 15:02:38 +02:00
Robert Schmidt
04a09c999c Implement delta MCS in UL Power estimation 2022-07-25 13:35:41 +02:00
Robert Schmidt
83149e5100 Base graph selection: create function in nr_common.c 2022-07-25 13:35:41 +02:00
Robert Schmidt
a840559500 Implement PUSCH RBs according to PHR 2022-07-25 13:35:41 +02:00
francescomani
228bd5f16d fix for ssb subcarrier offset in case of <3GHz 2022-07-22 17:01:47 +02:00
Robert Schmidt
3c2375eada CI: do not trigger tests if nothing is tagged NSA
The previous version would trigger sub-pipelines (LTE-2x2, ...) if no MR
had the NSA tag (without a commit, etc). Of course, this would make all
pipelines subsequently fail (as not enough arguments, such as the
commit, were given). In this commit, we read the output of `jq` from
JSON, which will result in an empty list if no MR is tagged with the NSA
label (and the output in the console will be nicer as well).
2022-07-21 17:57:26 +02:00
Cedric Roux
667b8e5eed nr_pdcp: nia1 implementation
We reuse existing code from eia1 for actual computation. Maybe not the most
efficient. To be revised if needed.

Some hacks in CMakeLists.txt were introduced to compile
phy simulators. To be removed at some point.
2022-07-21 16:59:38 +02:00
francescomani
2e4e9f6423 Merge remote-tracking branch 'origin/develop' into NR_BWP_config 2022-07-21 11:35:28 +02:00
Roberto Louro Magueta
2f3f858648 Merge remote-tracking branch 'origin/develop' into develop-SRS-MIMO 2022-07-20 20:16:00 +01:00
Roberto Louro Magueta
6ba60eb181 Merge remote-tracking branch 'origin/develop' into develop-CSI-Measurements
# Conflicts:
#	openair2/RRC/NR/nr_rrc_config.h
2022-07-20 19:59:34 +01:00
Robert Schmidt
72bf1b1d3c Merge branch 'integration_2022_wk29' into 'develop'
integration_2022_wk29

See merge request oai/openairinterface5g!1619
2022-07-20 16:30:58 +00:00
luis_pereira87
b1a3cbb068 Fix segmentation fault when changing BWP 2022-07-20 12:55:17 +01:00
laurent
ab36474811 dirty workaround in LTE get_prb(): it is not good, but keep safe in memory instead of writing outside the range 2022-07-20 10:40:32 +02:00
laurent
017fd225bc fix ubsan detected errors 2022-07-20 10:40:32 +02:00
Robert Schmidt
db7f39ba19 Use correct structure in sctp_eNB_accept_associations() 2022-07-20 10:40:32 +02:00
Robert Schmidt
6b757c5320 Correct array sizes in dlsim 2022-07-20 10:40:32 +02:00
Robert Schmidt
b07a167370 Correct indentation in nr_rx_pdsch() 2022-07-20 10:40:32 +02:00
Robert Schmidt
24b651b465 Provide build_oai option UBSan 2022-07-20 10:38:44 +02:00
Robert Schmidt
bc3600a3f9 Merge remote-tracking branch 'origin/f1-undefined' into integration_2022_wk29 2022-07-19 18:12:48 +02:00
Robert Schmidt
fcb07ef5fd Merge remote-tracking branch 'origin/NR_SSB_fix' into integration_2022_wk29 2022-07-19 18:12:40 +02:00
Robert Schmidt
82c62ecd5a Merge remote-tracking branch 'origin/rename_var_to_pusch_DTX' into integration_2022_wk29 2022-07-19 18:12:31 +02:00
Robert Schmidt
05e859b1ef Merge remote-tracking branch 'origin/fix-testbenches-doc' into integration_2022_wk29 2022-07-19 18:12:23 +02:00
Robert Schmidt
6dac7d674c Merge remote-tracking branch 'origin/develop-SRS-Measurements' into integration_2022_wk29 2022-07-19 18:12:14 +02:00
Robert Schmidt
65c9af7d48 Merge branch 'ran-sa-b200-module-sabox-container' into 'develop'
Add basic SA test to RAN-Container-Parent

See merge request oai/openairinterface5g!1615
2022-07-19 07:30:37 +00:00
Robert Schmidt
04251d5b06 Correctly initialize protocol_ctxt in F1 code
In the previous version, not all fields, and in particular the
`eNB_index`, were not initialized, leading to errors when they were used
(e.g., the PDCP code checks that eNB_index == 0).
2022-07-18 17:39:55 +02:00
Robert Schmidt
16c758ae09 CI: Drop IP check when connectiong via SSH and pubkey 2022-07-15 16:00:52 +02:00
luis_pereira87
43298fd02c Address merge request review comments 2022-07-15 13:30:45 +01:00
Robert Schmidt
ae05420c84 CI: log error if oai-amf container is not present for AMF IP addr retrieval 2022-07-15 13:35:19 +02:00
luis_pereira87
0700d5d078 Add 5G SA end-to-end, step-by-step, tutorials for OAI CN5G, OAI gNB and COTS UE 2022-07-15 11:56:44 +01:00
Robert Schmidt
52168e5201 Shut off quectel before running SA tests 2022-07-15 11:05:08 +02:00
Robert Schmidt
63daf5793b Remove useless SA test sleep 2022-07-15 11:05:08 +02:00
Robert Schmidt
0c4aa33939 Trigger SA-B200 test from RAN-Container-Parent 2022-07-14 23:57:52 +02:00
Robert Schmidt
b308cbe101 Add RAN-SA-B200-Module-SABOX-Container test 2022-07-14 23:54:53 +02:00
Robert Schmidt
4b50e4b1f6 CI: decode in getBefore() 2022-07-14 23:54:53 +02:00
Robert Schmidt
87d1a53ca3 CI: Allow publickey authentication in SSHConnection
For pubkey, checks that we are on the right machine
2022-07-14 23:53:52 +02:00
Robert Schmidt
5928d571e7 CI: Fix log message typo in UndeployObject() 2022-07-14 23:53:52 +02:00
Robert Schmidt
f1e3f7fb1f CI: Abort pipeline if DeployObject fails 2022-07-14 23:53:52 +02:00
Roberto Louro Magueta
b0bcff0da2 Fix build warnings in phy simulators 2022-07-08 11:17:28 +01:00
Roberto Louro Magueta
a574c47e9e Fix memory leak 2022-07-08 10:54:37 +01:00
Roberto Louro Magueta
03bea3150a Fix memory leak 2022-07-07 20:16:54 +01:00
Roberto Louro Magueta
70d7a6687b Merge nr_csi_rs_info_t plus nr_csi_im_info_t into nr_csi_info_t 2022-07-07 18:28:05 +01:00
Roberto Louro Magueta
3025627c06 Remove j, koverline and loverline from nr_csi_rs_info_t 2022-07-07 17:23:18 +01:00
Roberto Louro Magueta
36a9139a66 Remove N_cdm_groups, CDM_group_size, kprime and lprime from nr_csi_rs_info_t 2022-07-07 15:51:02 +01:00
Roberto Louro Magueta
e39be3917b Remove csi_rs_ls_estimated_channel and csi_rs_estimated_channel_freq from nr_csi_rs_info_t 2022-07-07 14:33:40 +01:00
Roberto Louro Magueta
acd4e39566 Remove csi_rs_received_signal from nr_csi_rs_info_t 2022-07-07 11:48:37 +01:00
Robert Schmidt
43c980d36b CI: NSA-B200-Container: no Qlog 2022-07-07 09:29:09 +02:00
francescomani
edcb1b2bf5 workaround for pbchsim 2022-07-07 08:57:37 +02:00
francescomani
79586c03f4 fix for pointa and ssboffset 2022-07-07 08:57:37 +02:00
Roberto Louro Magueta
e0e37d8215 To use cast for c16_t 2022-07-06 21:08:08 +01:00
Roberto Louro Magueta
0c2b3a1eeb Remove some variables from nr_csi_rs_info_t 2022-07-06 20:18:44 +01:00
luis_pereira87
24745eafca Rename variable from phy_procedures_errors to pusch_DTX 2022-07-06 08:45:48 +01:00
Roberto Louro Magueta
93f941ecfc Merge remote-tracking branch 'origin/develop-SRS-Measurements' into develop-SRS-MIMO
# Conflicts:
#	openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c
2022-07-05 20:11:03 +01:00
Roberto Louro Magueta
d68f7d6270 Add help string 2022-07-05 17:50:58 +01:00
Roberto Louro Magueta
dadadb7291 To use some casts to c16_t 2022-07-05 17:17:40 +01:00
Roberto Louro Magueta
e8327ffe74 Change k_0_p to stack allocation 2022-07-05 16:47:41 +01:00
Robert Schmidt
805b35643f Updates in TESTBench documentation
- Correct carabe name
- NR freq bands with "nXX"
- add amariue in figure
- minor changes
2022-07-05 16:38:52 +02:00
Roberto Louro Magueta
9a3326b63c Fixes after merge 2022-07-05 15:33:35 +01:00
francescomani
39b5d98c1e Merge remote-tracking branch 'origin/develop' into NR_BWP_config 2022-07-05 14:42:34 +02:00
Roberto Louro Magueta
06fa8c6a52 Merge remote-tracking branch 'origin/develop-SRS-Measurements' into develop-SRS-MIMO
# Conflicts:
#	openair1/PHY/INIT/nr_init.c
#	openair1/PHY/INIT/nr_init_ue.c
#	openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c
#	openair1/PHY/NR_ESTIMATION/nr_ul_estimation.h
#	openair1/PHY/defs_nr_common.h
#	openair1/SCHED_NR/phy_procedures_nr_gNB.c
2022-07-05 13:29:04 +01:00
Roberto Louro Magueta
52f6d38a34 Remove more variables from nr_srs_info_t 2022-07-05 12:58:53 +01:00
Roberto Louro Magueta
53f0773624 Merge remote-tracking branch 'origin/develop' into develop-SRS-Measurements 2022-07-05 11:07:43 +01:00
Roberto Louro Magueta
253e037fb2 Remove some variables from nr_srs_info_t 2022-07-05 11:07:01 +01:00
Roberto Louro Magueta
85802b828f Merge remote-tracking branch 'origin/develop' into develop-CSI-Measurements
# Conflicts:
#	openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c
2022-07-05 10:19:52 +01:00
Robert Schmidt
5091682551 Merge branch 'integration_2022_wk26' into 'develop'
integration_2022_wk26

See merge request oai/openairinterface5g!1605

MR !1602 Use (std) bool instead of custom bool types
MR !1600 Discard RTX if RI changed
MR !1598 Set correct master clock rate for N320
MR !1584 enablement of statistics
MR !1603 Fix decoding multiple ULSCH in the same slot in the case of a ULSCH fails to be detected
MR !1590 Improvements and AVX2 in cpx_rotate_vector()
2022-07-04 15:03:35 +00:00
Roberto Louro Magueta
2b36f2d8f2 Move nr_det_A_MF_2x2, nr_squared_matrix_element and nr_numer_2x2 to csi_rx.c 2022-07-04 14:18:04 +01:00
Roberto Louro Magueta
d864cf9457 Fix indentation 2022-07-04 11:31:33 +01:00
Roberto Louro Magueta
c2fee0520c Fix variable redefinition 2022-06-30 17:59:11 +01:00
Robert Schmidt
2cced7bdb5 Merge remote-tracking branch 'origin/optim-rotate_cpx' into integration_2022_wk26 2022-06-30 15:41:28 +02:00
Robert Schmidt
b7e026fda5 Merge remote-tracking branch 'origin/fix_decoding_multi_ulsch_in_the_same_slot' into integration_2022_wk26 2022-06-29 23:15:15 +02:00
Robert Schmidt
4662ccc46a Merge remote-tracking branch 'origin/stats' into integration_2022_wk26 2022-06-29 23:15:06 +02:00
Robert Schmidt
ae54a1bd05 Merge remote-tracking branch 'origin/fix-n320' into integration_2022_wk26 2022-06-29 23:14:51 +02:00
Robert Schmidt
94ca30e82b Merge remote-tracking branch 'origin/NR_layers_in_harq' into integration_2022_wk26 2022-06-29 23:14:42 +02:00
laurent
df1cffbc7f fix bug introduced by avx2 rotate_cpx change to c16_t 2022-06-29 16:52:47 +02:00
francescomani
38dc925e75 temporary workaround for CQI MCS table 2022-06-29 16:06:58 +02:00
francescomani
605f837eb6 hardcoding the right AL and candidates 2022-06-29 10:00:34 +02:00
Robert Schmidt
2849a81c78 Update NOTICE.md 2022-06-28 17:31:24 +02:00
Robert Schmidt
44ad2fe4ff Correct and update license exception list 2022-06-28 17:31:24 +02:00
francescomani
f76ec13b89 some fixes 2022-06-28 15:47:18 +02:00
Robert Schmidt
ff5ec94d33 Address review: drop bool defines 2022-06-28 09:38:48 +02:00
luis_pereira87
d6e58c9436 Fix decoding multiple ULSCH in the same slot in the case of a ULSCH fails to be detected 2022-06-28 07:35:06 +01:00
laurent
5894bcac22 rebase develop 2022-06-27 18:48:45 +02:00
laurent
ef469b9b51 code review remarks 2022-06-27 18:35:47 +02:00
Laurent Thomas
980bb2420b fix CI discovered bug in avx2 rotate 2022-06-27 18:35:47 +02:00
Laurent Thomas
bf219fc24f avx2 and better simd algo 2022-06-27 18:35:46 +02:00
francescomani
0196dd6dc2 Merge remote-tracking branch 'origin/develop' into NR_RRC_harmonization_after_BWP 2022-06-27 14:44:04 +02:00
Roberto Louro Magueta
c1c6e6142d Merge remote-tracking branch 'origin/develop-SRS-Measurements' into develop-SRS-MIMO 2022-06-27 11:38:28 +01:00
francescomani
e27356500e Merge remote-tracking branch 'origin/develop' into NR_BWP_config 2022-06-27 12:33:41 +02:00
Roberto Louro Magueta
86755bc495 Merge remote-tracking branch 'origin/develop' into develop-SRS-Measurements
# Conflicts:
#	openair2/RRC/NR/MESSAGES/asn1_msg.c
2022-06-27 11:06:55 +01:00
Roberto Louro Magueta
2141d6b5af Merge remote-tracking branch 'origin/develop' into develop-CSI-Measurements
# Conflicts:
#	openair2/RRC/NR/nr_rrc_config.c
#	targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band66.fr1.106PRB.usrpn300.conf
#	targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.24PRB.usrpb210.conf
2022-06-27 10:24:58 +01:00
Robert Schmidt
0b91791f67 Use (std) bool instead of custom bool types
OAI is riddled with boolean_t, FALSE, TRUE, etc. This makes no sense, as
there is a standard bool type, and could lead to nasty bugs if a
definition of a bool is non-standard (0 == false, true == !false). This
commit removes all non-standard bools in the whole project.
2022-06-27 10:07:48 +02:00
Ilario FAVERO
c5b8fa5418 New command line arg for disabling stats: --disable-stats 2022-06-24 14:32:39 +02:00
Roberto Louro Magueta
6d7d884881 Merge branch 'develop-SRS-Measurements' into develop-SRS-MIMO
# Conflicts:
#	openair1/PHY/INIT/nr_init.c
#	openair1/PHY/INIT/nr_init_ue.c
#	openair1/PHY/defs_nr_common.h
2022-06-23 18:30:31 +01:00
Roberto Louro Magueta
07a3634e45 Change some heap allocations to stack allocations 2022-06-23 18:23:23 +01:00
francescomani
1565667908 remove rtx from list 2022-06-23 17:42:55 +02:00
Roberto Louro Magueta
1a4686b021 Remove UE->Msg4_ACKed from condition in nr_schedule_srs 2022-06-23 14:52:05 +01:00
Roberto Louro Magueta
05dde0a30d Compute CQI using CSI-IM 2022-06-22 20:59:19 +01:00
Roberto Louro Magueta
a1806c92a2 Interference plus noise power computation based on CSI-IM 2022-06-22 20:41:57 +01:00
Roberto Louro Magueta
b9a207a6b4 Call nr_slot_fep for CSI-IM symbols 2022-06-22 18:38:05 +01:00
Roberto Louro Magueta
32ec53baa5 Get CSI-IM pdu at phy layer and add debug logs 2022-06-22 18:10:28 +01:00
Roberto Louro Magueta
420ce60800 Fix flag related to received CSI-IM FAPI pdu at UE 2022-06-22 17:54:34 +01:00
Hongzhi Wang
33fac86bb4 adding license exception 2022-06-22 17:46:04 +02:00
Hongzhi Wang
e8fc4da2b6 update offload decoder license and notes 2022-06-22 17:26:30 +02:00
Robert Schmidt
586aa46c2c Set correct master clock rate for N320 2022-06-22 16:54:35 +02:00
francescomani
6f481e09f6 abort rtx if RI decreased 2022-06-22 16:15:31 +02:00
Hongzhi Wang
fb9be23057 adding bbdev license 2022-06-22 10:03:55 +02:00
Hongzhi Wang
445f1d42a0 Merge branch 'develop' into ldpc_offload_t1_mr
Conflicts:
	openair1/SIMULATION/NR_PHY/ulsim.c
2022-06-22 09:26:58 +02:00
francescomani
a24be04929 initializing nrofcandidates in dlsim 2022-06-21 09:52:12 +02:00
francescomani
83a9414258 srs and csi in BWP structures 2022-06-20 18:03:40 +02:00
francescomani
4e69a10cbc change BWP when Msg3_dcch_dtch 2022-06-20 11:41:19 +02:00
francescomani
d71658d373 Merge remote-tracking branch 'origin/develop' into NR_BWP_config 2022-06-20 11:20:19 +02:00
Roberto Louro Magueta
ad5a3e8d94 Fix warning after merge 2022-06-19 03:02:19 +01:00
Roberto Louro Magueta
f4bd7c7529 Merge remote-tracking branch 'origin/develop-SRS-Measurements' into develop-SRS-MIMO
# Conflicts:
#	openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c
#	openair1/PHY/NR_ESTIMATION/nr_ul_estimation.h
#	openair1/SCHED_NR/phy_procedures_nr_gNB.c
#	openair2/RRC/NR/nr_rrc_config.c
#	openair2/RRC/NR/nr_rrc_config.h
2022-06-19 02:44:03 +01:00
Roberto Louro Magueta
8fee72e81f Merge remote-tracking branch 'origin/develop' into develop-SRS-Measurements 2022-06-19 02:16:41 +01:00
Roberto Louro Magueta
504ce6d793 Fix after merge 2022-06-19 02:13:33 +01:00
Roberto Louro Magueta
63e30e29cc Merge remote-tracking branch 'origin/develop' into develop-CSI-Measurements
# Conflicts:
#	openair2/LAYER2/NR_MAC_gNB/config.c
2022-06-19 01:59:50 +01:00
francescomani
633370ffc3 further MAC cleanup with BWPs 2022-06-17 18:50:06 +02:00
francescomani
3cd49db442 removing ul active_bwp 2022-06-17 16:34:01 +02:00
Hongzhi Wang
81c402d7ff bug fix after merge 2022-06-17 15:29:53 +02:00
Hongzhi Wang
b7295ab45f Merge branch 'develop' into ldpc_offload_t1_mr
Conflicts:
	executables/nr-gnb.c
	openair1/PHY/CODING/nrLDPC_defs.h
	openair1/PHY/INIT/nr_init.c
	openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
	openair1/SCHED_NR/phy_procedures_nr_gNB.c
	openair1/SIMULATION/NR_PHY/ulsim.c
	openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
2022-06-17 14:49:54 +02:00
francescomani
66e2810940 moving few parameters from pusch_semistatic to BWP 2022-06-17 12:18:29 +02:00
Roberto Louro Magueta
61e42ce9c6 Consider the invalid timing advance value case for SRS estimation 2022-06-16 13:29:30 +01:00
Roberto Louro Magueta
f6cbde5343 Add const qualifier in some variables 2022-06-16 12:49:13 +01:00
francescomani
40049db9c9 separate dl and ul bwp structures 2022-06-15 18:41:36 +02:00
francescomani
1be8caaf69 removing dl active_bwp 2022-06-14 18:15:42 +02:00
rmagueta
8c08e2d3ee Merge remote-tracking branch 'origin/develop-SRS-Measurements' into develop-SRS-MIMO 2022-06-13 12:52:56 +01:00
rmagueta
7b770042ad Merge remote-tracking branch 'origin/develop' into develop-SRS-Measurements
# Conflicts:
#	openair2/LAYER2/NR_MAC_gNB/main.c
#	openair2/RRC/NR/MESSAGES/asn1_msg.c
2022-06-13 12:00:11 +01:00
rmagueta
e32d55dff9 Update the feature set for the UE 2022-06-13 11:30:37 +01:00
rmagueta
607561af6c Merge remote-tracking branch 'origin/develop' into develop-CSI-Measurements
# Conflicts:
#	openair2/RRC/NR/MESSAGES/asn1_msg.c
2022-06-13 10:32:21 +01:00
francescomani
e592045d8f improvements in using genericParameters and other stuff 2022-06-10 18:18:57 +02:00
francescomani
c1c5c68e70 calling get_searchspace/coreset inside BWP function 2022-06-10 13:55:57 +02:00
francescomani
5fa3be8091 Merge remote-tracking branch 'origin/NR_RRC_MAC_CellGroup' into NR_BWP_config 2022-06-10 10:17:00 +02:00
Roberto Louro Magueta
87d69126af Merge remote-tracking branch 'origin/develop-SRS-Measurements' into develop-SRS-MIMO 2022-06-09 01:13:44 +01:00
Roberto Louro Magueta
8c577ff253 Merge remote-tracking branch 'origin/develop' into develop-SRS-Measurements
# Conflicts:
#	openair2/RRC/NR/MESSAGES/asn1_msg.c
#	targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf
2022-06-09 00:56:55 +01:00
Roberto Louro Magueta
55e943c347 Remove obsolete code after merge 2022-06-09 00:48:39 +01:00
Roberto Louro Magueta
d11705260f Merge remote-tracking branch 'origin/develop' into develop-CSI-Measurements
# Conflicts:
#	openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
#	openair2/RRC/NR/MESSAGES/asn1_msg.c
2022-06-09 00:33:12 +01:00
francescomani
9f4153b55b Merge remote-tracking branch 'origin/develop' into NR_UE_multi_SSB_meas 2022-06-08 14:10:54 +02:00
francescomani
6c69393eda genericParameters in the new structure 2022-06-08 12:22:16 +02:00
francescomani
4d4f7dd616 initial commit for MAC UE BWP structure (bwp id) 2022-06-07 12:11:37 +02:00
francescomani
b5583d47de temporary workaround for RRC passing CG to MAC (forced encoding of message at MAC) 2022-06-06 11:52:12 +02:00
Roberto Louro Magueta
b8f68c81fb Merge remote-tracking branch 'origin/develop-SRS-Measurements' into develop-SRS-MIMO 2022-06-01 17:30:33 +01:00
Roberto Louro Magueta
616927c04d Fixes after merge 2022-06-01 17:22:59 +01:00
Roberto Louro Magueta
1bb0ce90cc Merge remote-tracking branch 'origin/develop' into develop-SRS-Measurements
# Conflicts:
#	openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
#	openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_srs.c
#	openair2/LAYER2/NR_MAC_gNB/main.c
2022-06-01 15:46:37 +01:00
Roberto Louro Magueta
91189bd4f8 Fixes after merge 2022-06-01 14:30:45 +01:00
Roberto Louro Magueta
98f5478f7d Merge remote-tracking branch 'origin/develop-CSI' into develop-CSI-Measurements
# Conflicts:
#	openair2/LAYER2/NR_MAC_gNB/config.c
#	openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
#	openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c
#	openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
#	openair2/LAYER2/NR_MAC_gNB/mac_proto.h
2022-06-01 12:29:34 +01:00
rmagueta
e6446392b2 Merge remote-tracking branch 'origin/develop-SRS-Measurements' into develop-SRS-MIMO 2022-05-27 11:55:31 +01:00
rmagueta
264eebfb3f Fix build after merge 2022-05-27 11:54:53 +01:00
rmagueta
628a11cde5 Merge remote-tracking branch 'origin/develop' into develop-SRS-Measurements
# Conflicts:
#	openair2/GNB_APP/MACRLC_nr_paramdef.h
#	openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
2022-05-27 11:38:32 +01:00
rmagueta
2f3079b808 Merge remote-tracking branch 'origin/develop-CSI' into develop-CSI-Measurements
# Conflicts:
#	openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
#	openair2/RRC/NR/nr_rrc_config.c
2022-05-27 11:13:02 +01:00
Roberto Louro Magueta
e1198b3d96 Add debug logs and comment update for nrofSRS_Ports 2022-05-25 17:30:17 +01:00
Roberto Louro Magueta
17a3a796b8 Merge remote-tracking branch 'origin/develop-SRS-Measurements' into develop-SRS-MIMO 2022-05-25 11:07:59 +01:00
Roberto Louro Magueta
8d02c2c0fc Fix scheduling SRS transmission at UE when there is Dedicated BWPs 2022-05-25 11:06:55 +01:00
Roberto Louro Magueta
af95f834f1 Fix scheduling SRS reception at gNB when there is Dedicated BWPs 2022-05-25 10:36:30 +01:00
Roberto Louro Magueta
40f2f54339 Fix memory allocation for SRS 2022-05-24 17:40:55 +01:00
Roberto Louro Magueta
6e5b77baf3 Merge remote-tracking branch 'origin/develop-CSI' into develop-CSI-Measurements
# Conflicts:
#	openair2/RRC/NR/MESSAGES/asn1_msg.c
2022-05-24 14:55:22 +01:00
Roberto Louro Magueta
58102d24d8 Configuration of nrofSRS_Ports based on UE capability 2022-05-23 20:33:12 +01:00
Roberto Louro Magueta
d8dbd2159c Merge remote-tracking branch 'origin/develop-SRS-Measurements' into develop-SRS-MIMO
# Conflicts:
#	openair1/PHY/NR_TRANSPORT/srs_rx.c
2022-05-23 13:40:35 +01:00
Roberto Louro Magueta
5092eca8cb Some robustness improvements 2022-05-23 13:30:38 +01:00
Roberto Louro Magueta
0eeb174253 Add wideband SNR based on SRS in MAC stats 2022-05-23 11:43:32 +01:00
Roberto Louro Magueta
9e2086c77c Fix warning after merge 2022-05-23 11:29:59 +01:00
Roberto Louro Magueta
01c6129ee1 Merge remote-tracking branch 'origin/develop' into develop-SRS-Measurements
# Conflicts:
#	openair2/RRC/NR/MESSAGES/asn1_msg.c
2022-05-23 10:43:50 +01:00
Roberto Louro Magueta
8bc5f273bd Improve log 2022-05-21 01:24:02 +01:00
Roberto Louro Magueta
23dab34e7c Fix CSI bitlen for rank = 2 2022-05-21 01:15:26 +01:00
Roberto Louro Magueta
c67d3659f1 Fix precoded_sinr_dB computation for rank = 2 2022-05-20 21:12:06 +01:00
Roberto Louro Magueta
4eac17e1c8 Fix in RI computation 2022-05-20 20:51:22 +01:00
francescomani
b57a8622c0 fixes for RRC configuration in SA 2022-05-19 17:41:58 +02:00
Roberto Louro Magueta
7018b7c841 Fixes after merge 2022-05-19 13:38:22 +01:00
Roberto Louro Magueta
9887982e00 Merge remote-tracking branch 'origin/develop-CSI' into develop-CSI-Measurements
# Conflicts:
#	openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c
#	openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
#	openair2/RRC/NR/MESSAGES/asn1_msg.c
2022-05-19 13:21:00 +01:00
Roberto Louro Magueta
e6e6fdedf9 Free allocated variables for SRS 2022-05-17 18:53:05 +01:00
Roberto Louro Magueta
2ef5edd17c Remove sc_list_length and sc_list variables 2022-05-17 18:16:54 +01:00
Roberto Louro Magueta
86874047ac Channel estimation, channel interpolation and SNR per RB computation based on SRS up to 4 antenna ports 2022-05-17 17:42:48 +01:00
francescomani
7a26d75634 other changes required for multiple BWP CSI config 2022-05-17 18:18:15 +02:00
francescomani
075e8c6d8f Merge remote-tracking branch 'origin/develop' into NR_RRC_harmonization_after_BWP 2022-05-17 15:27:12 +02:00
francescomani
a67791d18e init ssb rsrp vector 2022-05-16 19:37:16 +02:00
Roberto Louro Magueta
997d52b71d Improvements in nr_get_srs_signal to consider multi-ports and multi-symbols 2022-05-16 18:11:01 +01:00
francescomani
ef20a5c3b2 additional fixes in multi-ssb report at UE 2022-05-16 18:09:29 +02:00
francescomani
2f81e507d7 fixes for pbch detection and measurements on multiple SSBs 2022-05-16 15:11:09 +02:00
francescomani
9277afe327 measureing RSRP on all SSBs 2022-05-16 11:59:39 +02:00
Roberto Louro Magueta
52bc76d904 Fixes and improvements in generate_srs_nr function 2022-05-14 21:01:42 +01:00
Roberto Louro Magueta
f6bc787d1e Add comments in nfapi_nr_srs_pdu_t 2022-05-14 00:38:00 +01:00
Roberto Louro Magueta
32de221553 Fix SRS mapping for multiple ports 2022-05-11 19:54:35 +01:00
Roberto Louro Magueta
ccb1e64a38 Merge branch 'bupt-ulmimo-4' into develop-SRS-MIMO 2022-05-11 18:36:50 +01:00
Roberto Louro Magueta
0ddd8c2586 Merge remote-tracking branch 'origin/develop-CSI' into develop-CSI-Measurements
# Conflicts:
#	openair2/RRC/NR/MESSAGES/asn1_msg.c
#	openair2/RRC/NR/nr_rrc_config.h
2022-05-11 14:36:21 +01:00
Roberto Louro Magueta
1c9ef67384 Merge remote-tracking branch 'origin/develop' into develop-SRS-Measurements
# Conflicts:
#	openair2/RRC/NR/MESSAGES/asn1_msg.c
#	openair2/RRC/NR/nr_rrc_config.c
#	openair2/RRC/NR/nr_rrc_config.h
2022-05-11 13:27:21 +01:00
Roberto Louro Magueta
ba5bda5c6e Fix bw_scaling 2022-05-10 15:00:43 +01:00
Roberto Louro Magueta
08975e451f Update the ul_prbblacklist based on SRS measurements and an ul_prbblack_SNR_threshold 2022-05-10 14:03:24 +01:00
Roberto Louro Magueta
5ed67b85a7 Free allocated memory 2022-05-10 13:03:41 +01:00
Roberto Louro Magueta
61a2f398db Add LOGs of SRS indication in handle_nr_srs_measurements 2022-05-10 10:43:24 +01:00
Roberto Louro Magueta
99b262d764 Compute and fill timing_advance field for SRS indication 2022-05-09 19:25:33 +01:00
Roberto Louro Magueta
bdff42cf77 Compute and fill wide_band_snr field for SRS indication 2022-05-09 18:21:04 +01:00
Roberto Louro Magueta
d914817806 Fill srs_reported_symbol_list in SRS indication 2022-05-09 17:58:42 +01:00
Roberto Louro Magueta
ab6d7afd09 Compute the SNR per RB using the SRS 2022-05-09 15:54:20 +01:00
Roberto Louro Magueta
dcf4fd1db2 Compute the noise power per RB 2022-05-06 19:07:59 +01:00
Roberto Louro Magueta
05fffa4916 Merge remote-tracking branch 'origin/develop' into develop-SRS-Measurements
# Conflicts:
#	openair2/RRC/NR/MESSAGES/asn1_msg.c
#	targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.band78.tm1.106PRB.usrpn300.gtp-itti.conf
#	targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band41.fr1.106PRB.usrpb210.conf
#	targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf
2022-05-06 13:39:45 +01:00
Roberto Louro Magueta
fc5632eeb9 Merge remote-tracking branch 'origin/develop-CSI' into develop-CSI-Measurements
# Conflicts:
#	openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c
#	openair1/PHY/NR_TRANSPORT/nr_dci.c
#	openair1/PHY/NR_TRANSPORT/pucch_rx.c
#	openair2/GNB_APP/gnb_config.c
#	openair2/GNB_APP/gnb_paramdef.h
#	openair2/LAYER2/NR_MAC_gNB/config.c
#	openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
#	openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
#	openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c
#	openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
#	openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
#	openair2/RRC/NR/MESSAGES/asn1_msg.c
#	targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
#	targets/PROJECTS/GENERIC-NR-5GC/CONF/cu_gnb.conf
2022-05-06 13:16:48 +01:00
Roberto Louro Magueta
dce83a0508 Add comments in FAPI for SRS indication 2022-05-05 19:49:06 +01:00
Roberto Louro Magueta
b106913dc0 Send SRS measurements (still empty) from PHY to MAC 2022-05-05 18:10:08 +01:00
Roberto Louro Magueta
2fb8d96f11 Move SRS config to update_cellGroupConfig() 2022-05-04 16:25:15 +01:00
Roberto Louro Magueta
70cfd057ec Add do_SRS flag in gnb.sa.band78.fr1.106PRB.usrpb210.conf 2022-05-04 15:09:59 +01:00
Roberto Louro Magueta
39ea2c936f Creation of config_srs() function 2022-05-04 15:05:23 +01:00
luis_pereira87
952a216b92 Remove sib1_tda from configuration files to use default value 2022-05-04 12:49:23 +01:00
Roberto Louro Magueta
73a1e92249 Fix memory leaks 2022-05-03 12:09:19 +01:00
rmagueta
2f753873bc Fix warning: this ‘if’ clause does not guard... [-Wmisleading-indentation] 2022-04-30 16:12:27 +01:00
rmagueta
751335765f Merge remote-tracking branch 'origin/develop-CSI' into develop-CSI-Measurements
# Conflicts:
#	openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c
#	openair1/PHY/NR_TRANSPORT/pucch_rx.c
#	openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
#	openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c
#	openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
#	openair2/RRC/NR/nr_rrc_config.c
2022-04-30 15:52:48 +01:00
francescomani
7733ac1857 bwp-based csi configuration (to be verified) 2022-04-27 19:28:22 +02:00
rmagueta
eb12cb8f10 Fix CI test for FR2 RA 2022-04-18 15:19:29 +01:00
francescomani
10b8e1b34c harmonization of uplink BWPs configuration 2022-04-18 11:59:40 +02:00
rmagueta
a4a5c6ae22 Merge remote-tracking branch 'origin/develop-CSI' into develop-CSI-Measurements 2022-04-18 10:42:04 +01:00
francescomani
28f3997ea6 Merge remote-tracking branch 'origin/NR_PUCCH_RRC_Resources' into NR_RRC_harmonization_after_BWP 2022-04-18 10:06:02 +02:00
francescomani
c791b45adc harmonization of downlink BWPs configuration 2022-04-16 14:34:00 +02:00
francescomani
b62e7be276 adding harmonization of coreset configuration to multiple BWPs 2022-04-16 10:13:02 +02:00
francescomani
6989d4ecba harmonization of coreset configuration 2022-04-16 09:53:06 +02:00
francescomani
3a0cb80469 Merge remote-tracking branch 'origin/nr_csirs_rrc_harmonization' into NR_RRC_harmonization_after_BWP 2022-04-15 13:54:25 +02:00
rmagueta
ad3253fef6 Move CSI-RS configuration from fill_initial_SpCellConfig to update_cellGroupConfig 2022-04-13 19:45:10 +01:00
rmagueta
9def6e815d Merge remote-tracking branch 'origin/develop-2x2-segFault' into develop-CSI-Measurements 2022-04-13 17:55:40 +01:00
rmagueta
27bac2f2c4 The RI, PMI and CQI estimated at the UE are sent by the UE and correctly received by the gNB 2022-04-13 15:33:37 +01:00
rmagueta
cd6ee6a01e Fix build after merge 2022-04-13 11:12:49 +01:00
rmagueta
9b1db62f38 Merge remote-tracking branch 'origin/develop-CSI' into develop-CSI-Measurements 2022-04-13 10:40:58 +01:00
rmagueta
40279dddf3 Get cri_bitlen, ri_bitlen, pmi_bitlen and cqi_bitlen at UE 2022-04-13 01:07:01 +01:00
rmagueta
04b234c878 Send CSI-RS measurements from PHY to MAC at UE 2022-04-12 19:06:02 +01:00
francescomani
1745ffa10f adapting nr_rrc_config_dl_tda for multiple BWPs 2022-04-12 17:36:52 +02:00
rmagueta
1d86347587 Merge remote-tracking branch 'origin/develop-CSI' into develop-CSI-Measurements
# Conflicts:
#	openair1/PHY/INIT/nr_init_ue.c
#	openair1/PHY/NR_TRANSPORT/nr_dci.c
#	openair2/RRC/NR/MESSAGES/asn1_msg.c
2022-04-12 14:48:08 +01:00
rmagueta
3969079fcd Merge remote-tracking branch 'origin/develop-CSI' into develop-CSI-Measurements
# Conflicts:
#	openair2/GNB_APP/gnb_paramdef.h
#	openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
2022-04-08 19:49:40 +01:00
rmagueta
8ffecf4bdf CQI computation 2022-04-07 19:58:56 +01:00
rmagueta
d6a155a803 SINR in dB 2022-04-07 19:30:33 +01:00
rmagueta
7286552aa5 Improvements in PMI computation to allow computation CQI more easily 2022-04-07 18:58:18 +01:00
rmagueta
bf56e881b2 Fix log 2022-04-06 18:43:56 +01:00
rmagueta
6e4bbe8f49 PMI computation for rank=2 case 2022-04-06 18:42:00 +01:00
rmagueta
66b3fffbf0 Minor improvements 2022-04-06 17:44:47 +01:00
rmagueta
8e58e83be6 Remove log 2022-04-06 14:52:34 +01:00
rmagueta
4ee6005a50 Merge remote-tracking branch 'origin/develop-CSI' into develop-CSI-Measurements
# Conflicts:
#	openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
2022-04-06 13:30:04 +01:00
rmagueta
886b580fac PMI computation for rank=1 case 2022-04-05 19:56:13 +01:00
rmagueta
4254d59a96 Create nr_csi_rs_pmi_estimation function for PMI computation (still almost empty) 2022-04-04 20:13:33 +01:00
rmagueta
f12c6ea65b Add log2_maxh for nr_conjch0_mult_ch1 in nr_csi_rs_ri_estimation 2022-04-04 15:55:16 +01:00
rmagueta
03f7bd3468 Remove unused input in nr_csi_rs_ri_estimation 2022-04-04 14:44:22 +01:00
rmagueta
c37e0af9b0 Change LOG levels 2022-04-04 14:42:37 +01:00
rmagueta
ef63aa45e6 Merge remote-tracking branch 'origin/develop-CSI' into develop-CSI-Measurements 2022-04-04 13:51:52 +01:00
rmagueta
e628c8c2c4 Fix build after merge 2022-04-01 20:13:06 +01:00
rmagueta
2deec7fa09 Merge remote-tracking branch 'origin/develop-CSI' into develop-CSI-Measurements
# Conflicts:
#	openair1/PHY/INIT/nr_init_ue.c
#	openair2/GNB_APP/gnb_config.c
#	openair2/GNB_APP/gnb_paramdef.h
#	openair2/RRC/NR/MESSAGES/asn1_msg.c
#	openair2/RRC/NR/rrc_gNB_reconfig.c
2022-04-01 19:36:57 +01:00
rmagueta
bc2ea375c8 Replace nr_construct_HhH_elements by nr_a_sum_b function in nr_csi_rs_ri_estimation 2022-03-31 20:30:00 +01:00
rmagueta
da1e542a31 Fix dl_antenna_ports after merge 2022-03-30 20:14:57 +01:00
rmagueta
fba2df7557 Fix config files after merge 2022-03-30 19:27:24 +01:00
rmagueta
4c0427ea6c Merge remote-tracking branch 'origin/nr_mimo_precoding_codebook_I' into develop-CSI-Measurements
# Conflicts:
#	openair1/PHY/INIT/nr_init_ue.c
#	openair2/GNB_APP/gnb_config.c
#	openair2/GNB_APP/gnb_paramdef.h
#	targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band41.fr1.106PRB.usrpb210.conf
#	targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf
#	targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.162PRB.2x2.usrpn300.conf
2022-03-30 19:23:22 +01:00
rmagueta
38d0dca0bf Minor fixes 2022-03-30 17:00:25 +01:00
rmagueta
ef4d8ab0c7 Merge remote-tracking branch 'origin/develop' into develop-CSI-Measurements 2022-03-30 16:17:17 +01:00
rmagueta
c7a54269de First version of rank indicator computation at UE 2022-03-30 16:16:58 +01:00
rmagueta
1d1aaa30e7 Merge remote-tracking branch 'origin/develop-CSI' into develop-CSI-Measurements
# Conflicts:
#	openair1/PHY/INIT/nr_init.c
#	openair1/PHY/INIT/nr_init_ue.c
#	openair1/PHY/NR_TRANSPORT/nr_csi_rs.c
#	openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
2022-03-28 15:06:23 +01:00
rmagueta
3e664b5eb7 Fix warning 2022-03-22 18:28:49 +00:00
rmagueta
e834acfaf2 Temporary commit to test CSI-RS without core 2022-03-22 18:25:29 +00:00
rmagueta
17504695f8 Fix updated configurations that was reverted in merge 2022-03-22 18:02:12 +00:00
rmagueta
184e151fde Fix build after merge 2022-03-22 17:40:06 +00:00
rmagueta
a47861628b Merge remote-tracking branch 'origin/develop-CSI' into develop-CSI-Measurements
# Conflicts:
#	openair1/PHY/INIT/nr_init.c
#	openair1/PHY/INIT/nr_init_ue.c
#	openair1/PHY/NR_REFSIG/nr_gold.c
#	openair1/PHY/NR_TRANSPORT/nr_csi_rs.c
#	openair1/PHY/defs_nr_common.h
#	openair2/LAYER2/NR_MAC_gNB/config.c
#	openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
#	openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
#	openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c
#	openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
#	openair2/RRC/NR/MESSAGES/asn1_msg.c
#	openair2/RRC/NR/nr_rrc_proto.h
#	openair2/RRC/NR/rrc_gNB_reconfig.c
#	targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
2022-03-22 17:18:22 +00:00
Hongzhi Wang
a39c972611 revert commented stats 2022-03-11 11:36:51 +01:00
Hongzhi Wang
89ac71ef25 fix warnings and revert commented logs 2022-03-11 11:31:33 +01:00
Hongzhi Wang
a289d6e2ab Revert "setting reordering to infinity and max rb 50"
This reverts commit 168edeaf73.

Conflicts:
	openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
2022-03-11 10:21:44 +01:00
Hongzhi Wang
91e9f930f4 revert max_rbsize and tpc default value 2022-03-11 00:33:12 +01:00
Hongzhi Wang
457ee6c049 bugfix build issue 2022-03-10 21:43:28 +01:00
Hongzhi Wang
bf889968f7 set default ul mcs to 9 2022-03-10 19:18:59 +01:00
Hongzhi Wang
22d387e25f bugfix dtx for offload 2022-03-10 11:55:59 +01:00
Hongzhi Wang
51251fe055 fix for loading ldpc_offload 2022-03-10 11:55:17 +01:00
Hongzhi Wang
5c1ab827f4 bugfix after cherry-pick 2022-03-10 11:34:24 +01:00
Hongzhi Wang
168edeaf73 setting reordering to infinity and max rb 50 2022-03-09 16:16:07 +01:00
Hongzhi Wang
c4cfbfc845 config file working for mwc 2022-03-09 16:15:54 +01:00
Hongzhi Wang
fc78d01508 adding sa n310 config file 2022-03-09 16:15:14 +01:00
Hongzhi Wang
5254d1d91d update offload harq buffer offset 2022-03-09 16:15:01 +01:00
Hongzhi Wang
a95ffb87de bug fix offload harq round 2022-03-09 16:14:38 +01:00
Hongzhi Wang
380a2a555f bug fix for dtx detected 2022-03-09 16:14:09 +01:00
Hongzhi Wang
1d0a7b3860 removing some log prints 2022-03-09 16:13:52 +01:00
Hongzhi Wang
638b5f7f2a adding ulsch id to offload harq buffer offset for multiple users 2022-03-09 16:13:17 +01:00
Hongzhi Wang
3df0b89525 re-activating HARQ for UL. break loop when one segment is in error 2022-03-09 16:09:50 +01:00
Hongzhi Wang
65b0e7a8ea reducing some logs and fixing some vcd traces 2022-03-09 16:09:35 +01:00
Hongzhi Wang
fe4e1bdb93 adding harq pid to harq buffer offset 2022-03-09 16:07:14 +01:00
Hongzhi Wang
6e3a87a60a Temporiraly fix for centos 2022-03-09 16:05:59 +01:00
Hongzhi Wang
e20df48b02 bug fix on calling nr_fill_indications 2022-03-09 16:03:44 +01:00
Hongzhi Wang
02048ff3c4 using one l1tx thread and changing ul parameters for testing 2022-03-09 16:00:39 +01:00
Hongzhi Wang
6cd313f545 add missing dependency condition 2022-03-09 15:37:00 +01:00
Hongzhi Wang
4f68b5aeb6 Adding a dependency condition for offload 2022-03-09 15:35:58 +01:00
Hongzhi Wang
b6b7bbbdd7 adding dependency condition for ldpc offload 2022-03-09 15:35:50 +01:00
Hongzhi Wang
1749595217 bug fixes and removing warnings 2022-03-09 15:30:54 +01:00
Hongzhi Wang
aeb987bb0a using temporarily one l1tx thread and soft ldpc for small mcs 2022-03-09 15:25:39 +01:00
Hongzhi Wang
637ca97566 add ldpc offload cmdline option for softmodem and remove crc drop flag 2022-03-09 15:17:33 +01:00
Hongzhi Wang
1216eb2e4d adding segment buffer offset and updates 2022-03-09 15:10:21 +01:00
Hongzhi Wang
8c09af6291 Split fill queue function and move mbuf allocation to init step 2022-03-09 15:01:14 +01:00
Florian Kaltenberger
bd2a27f6cc some more error checks + data collection 2022-03-09 14:53:59 +01:00
Hongzhi Wang
d91226f07f Load ldpc_offload lib in softmodem 2022-03-09 14:45:58 +01:00
Hongzhi Wang
8af206c644 adding allocation free function for offload 2022-03-09 14:39:03 +01:00
Florian Kaltenberger
2423996bba adding some error checks 2022-03-09 14:38:41 +01:00
Hongzhi Wang
00ba6b6bb1 add offload on cmdline and bugfix 2022-03-09 14:38:25 +01:00
Hongzhi Wang
a96aeff279 adding post decoding for offload 2022-03-09 14:38:08 +01:00
Hongzhi Wang
1247a02f6d Initializing the device in lib load function 2022-03-09 14:37:45 +01:00
Hongzhi Wang
7b88c36ba6 moving more init functions to device initialization 2022-03-09 14:37:27 +01:00
Hongzhi Wang
6532db1233 moving device init functions out from decoding 2022-03-09 14:36:56 +01:00
Hongzhi Wang
c739337e66 adding offload multiple segments 2022-03-09 14:36:01 +01:00
Hongzhi Wang
52450c449f code cleanup ldpc offload 2022-03-09 14:35:40 +01:00
Hongzhi Wang
4238ff04c5 moving ldpc offload to ulsch decoding function 2022-03-09 14:35:16 +01:00
Hongzhi Wang
aed61728dc removing hardcoded parameters 2022-03-09 14:34:31 +01:00
Hongzhi Wang
6639ad24fc removing test vector config file 2022-03-09 14:34:06 +01:00
Hongzhi Wang
a8bee7ae21 Update ldpc offload decoder input and output 2022-03-09 14:32:49 +01:00
Hongzhi Wang
030aa253e8 adding temporarily bbdev testsuite in ldpc_decoder_offload to check t1 card connection 2022-03-09 14:32:26 +01:00
Hongzhi Wang
ec25a03fbb adding dpdk library and ldpc offload library 2022-03-09 14:25:02 +01:00
731 changed files with 28365 additions and 146619 deletions

107
.clang-format Normal file
View File

@@ -0,0 +1,107 @@
---
Language: Cpp
# BasedOnStyle: Google
AccessModifierOffset: -1
AlignAfterOpenBracket: Align
AlignConsecutiveAssignments: false
AlignConsecutiveDeclarations: false
AlignEscapedNewlines: Left
AlignOperands: true
AlignTrailingComments: false
AllowAllParametersOfDeclarationOnNextLine: false
AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: None
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: true
AlwaysBreakTemplateDeclarations: true
BinPackArguments: false
BinPackParameters: false
BitFieldColonSpacing: After
BraceWrapping:
AfterClass: false
AfterControlStatement: false
AfterEnum: false
AfterFunction: true
AfterNamespace: false
AfterObjCDeclaration: false
AfterStruct: false
AfterUnion: false
AfterExternBlock: false
BeforeCatch: false
BeforeElse: false
IndentBraces: false
SplitEmptyFunction: true
SplitEmptyRecord: true
SplitEmptyNamespace: true
BreakBeforeBinaryOperators: NonAssignment
BreakBeforeBraces: Custom
BreakBeforeInheritanceComma: false
BreakBeforeTernaryOperators: true
BreakConstructorInitializersBeforeComma: false
BreakConstructorInitializers: BeforeColon
BreakStringLiterals: true
ColumnLimit: 200
CommentPragmas: '^ IWYU pragma:'
CompactNamespaces: false
ConstructorInitializerAllOnOneLineOrOnePerLine: true
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: true
DerivePointerAlignment: true
DisableFormat: false
ExperimentalAutoDetectBinPacking: false
FixNamespaceComments: true
ForEachMacros:
- foreach
- Q_FOREACH
- BOOST_FOREACH
IncludeBlocks: Preserve
IncludeCategories:
- Regex: '^<ext/.*\.h>'
Priority: 1
- Regex: '^<.*\.h>'
Priority: 1
- Regex: '^<.*'
Priority: 1
- Regex: '.*'
Priority: 1
IncludeIsMainRegex: '([-_](test|unittest))?$'
IndentCaseLabels: true
IndentPPDirectives: None
IndentWidth: 2
IndentWrappedFunctionNames: false
KeepEmptyLinesAtTheStartOfBlocks: false
MacroBlockBegin: ''
MacroBlockEnd: ''
MaxEmptyLinesToKeep: 1
NamespaceIndentation: None
PenaltyBreakAssignment: 2
PenaltyBreakBeforeFirstCallParameter: 1
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakString: 1000
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 200
PointerAlignment: Right
ReflowComments: true
SortIncludes: false
SortUsingDeclarations: false
SpaceAfterCStyleCast: false
SpaceAfterTemplateKeyword: true
SpaceBeforeAssignmentOperators: true
SpaceBeforeParens: ControlStatements
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 1
SpacesInAngles: false
SpacesInContainerLiterals: true
SpacesInCStyleCastParentheses: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
TabWidth: 2
UseTab: Never
...

View File

@@ -21,7 +21,6 @@ The Regents of the University of California: BSD 3-Clause Licence.
Niels Provos <provos@citi.umich.edu>: BSD 2-Clause Licence.
## Credits for source code openair3/GTPV1-U/nw-gtpv1u: ##
Amit Chawre <http://www.amitchawre.net/contact.html>: BSD 2-Clause Licence.
## Credits for source code openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder_offload.c and nrLDPC_offload.h: ##
Intel Corporation SPDX-License-Identifier: BSD-3-Clause Licence

View File

@@ -136,16 +136,16 @@ pipeline {
}
}
}
stage ("RHEL8 Build") {
stage ("RHEL8-Cluster-Image-Builder") {
steps {
script {
triggerSlaveJob ('RAN-RHEL8-Image-Builder', 'RHEL8-Images-Build')
triggerSlaveJob ('RAN-RHEL8-Cluster-Image-Builder', 'RHEL8-Cluster-Image-Builder')
}
}
post {
always {
script {
finalizeSlaveJob('RAN-RHEL8-Image-Builder')
finalizeSlaveJob('RAN-RHEL8-Cluster-Image-Builder')
}
}
failure {
@@ -238,6 +238,26 @@ pipeline {
}
}
}
stage ("4G L2 Simulators") {
when { expression {doMandatoryTests} }
steps {
script {
triggerSlaveJob ('RAN-L2-Sim-Test-4G', 'Test-L2-Sim-Container-4G')
}
}
post {
always {
script {
finalizeSlaveJob('RAN-L2-Sim-Test-4G')
}
}
failure {
script {
currentBuild.result = 'FAILURE'
}
}
}
}
stage ("5G L2 Simulators") {
when { expression {doMandatoryTests} }
steps {
@@ -278,6 +298,26 @@ pipeline {
}
}
}
stage ("SA B200 Sanity Check") {
when { expression {doMandatoryTests} }
steps {
script {
triggerSlaveJob ('RAN-SA-B200-Module-SABOX-Container', 'Test-SA-B200')
}
}
post {
always {
script {
finalizeSlaveJob('RAN-SA-B200-Module-SABOX-Container')
}
}
failure {
script {
currentBuild.result = 'FAILURE'
}
}
}
}
stage ("Test OAI NR UE - OAI gNB - TDD - Band 78 - N300") {
when { expression {doMandatoryTests} }
steps {
@@ -298,6 +338,27 @@ pipeline {
}
}
}
//avra is offline, re-enable once it is available
//stage ("Test T1 Offload") {
// when { expression {doMandatoryTests} }
// steps {
// script {
// triggerSlaveJob ('RAN-T1-Offload-Test', 'Test-T1-Offload')
// }
// }
// post {
// always {
// script {
// finalizeSlaveJob('RAN-T1-Offload-Test')
// }
// }
// failure {
// script {
// currentBuild.result = 'FAILURE'
// }
// }
// }
//}
}
}
stage ("Images Push to Registries") {

View File

@@ -0,0 +1,254 @@
#!/bin/groovy
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
// Location of the executor node
def pythonExecutor = params.pythonExecutor
// Location of the test XML file to be run
def testXMLFile = params.pythonTestXmlFile
def mainPythonAllXmlFiles = ""
def buildStageStatus = true
// Name of the test stage
def testStageName = params.pipelineTestStageName
// 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 eNB_Repository
def eNB_Branch
def eNB_CommitID
def eNB_AllowMergeRequestProcess = false
def eNB_TargetBranch
def directoryExistsGlob(fileNameWithGlob) {
/* if multiple directories match, will join their names and call fileExists() on that */
def dir = sh returnStdout: true, script: 'find . -name \'' + fileNameWithGlob + '\' -type d'
dir = dir.replaceAll("\n", "").trim()
echo "matching '" + fileNameWithGlob + "' found: '" + dir + "'"
if (dir == "")
return false
return fileExists(dir)
}
//-------------------------------------------------------------------------------
// Pipeline start
pipeline {
agent {
label pythonExecutor
}
options {
disableConcurrentBuilds()
timestamps()
ansiColor('xterm')
lock(extra: lockResources)
}
stages {
stage ('Verify Parameters') {
steps {
script {
echo '\u2705 \u001B[32mVerify Parameters\u001B[0m'
JOB_TIMESTAMP = sh returnStdout: true, script: 'date --utc --rfc-3339=seconds | sed -e "s#+00:00##"'
JOB_TIMESTAMP = JOB_TIMESTAMP.trim()
def allParametersPresent = true
// It is already to late to check it
if (params.pythonExecutor != null) {
echo "eNB CI executor node : ${pythonExecutor}"
}
// If not present picking a default Stage Name
if (params.pipelineTestStageName == null) {
// picking default
testStageName = 'Template Test Stage'
}
if (params.LockResources == null) {
echo "no LockResources given"
allParametersPresent = false
}
if (params.eNB_IPAddress == null) {
echo "no eNB_IPAddress given"
allParametersPresent = false
}
if (params.eNB_SourceCodePath == null) {
echo "no eNB_SourceCodePath given"
allParametersPresent = false
}
if (params.eNB_Credentials == null) {
echo "no eNB_Credentials given"
allParametersPresent = false
}
// the following 4 parameters should be pushed by the master trigger
// if not present, take the job GIT variables (used for developing)
if (params.eNB_Repository == null) {
eNB_Repository = env.GIT_URL
} else {
eNB_Repository = params.eNB_Repository
}
echo "eNB_Repository : ${eNB_Repository}"
if (params.eNB_Branch == null) {
eNB_Branch = env.GIT_BRANCH
} else {
eNB_Branch = params.eNB_Branch
}
echo "eNB_Branch : ${eNB_Branch}"
if (params.eNB_CommitID == null) {
eNB_CommitID = env.GIT_COMMIT
} else {
eNB_CommitID = params.eNB_CommitID
}
echo "eNB_CommitID : ${eNB_CommitID}"
if (params.eNB_mergeRequest != null) {
eNB_AllowMergeRequestProcess = params.eNB_mergeRequest
if (eNB_AllowMergeRequestProcess) {
if (params.eNB_TargetBranch != null) {
eNB_TargetBranch = params.eNB_TargetBranch
} else {
eNB_TargetBranch = 'develop'
}
echo "eNB_TargetBranch : ${eNB_TargetBranch}"
}
} else {
echo "no eNB_mergeRequest given - not merging develop"
}
if (params.EPC_IPAddress == null) {
echo "no EPC_IPAddress given"
allParametersPresent = false
}
if (params.EPC_Type == null) {
echo "no EPC_Type given"
allParametersPresent = false
}
if (params.EPC_SourceCodePath == null) {
echo "no EPC_SourceCodePath given"
allParametersPresent = false
}
if (params.EPC_Credentials == null) {
echo "no EPC_Credentials given"
allParametersPresent = false
}
if (params.ADB_IPAddress == null) {
echo "no ADB_IPAddress given"
allParametersPresent = false
}
if (params.ADB_Credentials == null) {
echo "no ADB_IPAddress given"
allParametersPresent = false
}
if (params.OC_Credentials == null) {
echo "no OC_Credentials given"
allParametersPresent = false
}
if (params.OC_ProjectName == null) {
echo "no OC_ProjectName given"
allParametersPresent = false
}
if (params.pythonTestXmlFile == null) {
echo "no pythonTestXmlFile given"
allParametersPresent = false
}
if (allParametersPresent) {
echo "All parameters are present"
if (eNB_AllowMergeRequestProcess) {
sh "git fetch"
sh "./ci-scripts/doGitLabMerge.sh --src-branch ${eNB_Branch} --src-commit ${eNB_CommitID} --target-branch ${eNB_TargetBranch} --target-commit latest"
} else {
sh "git fetch"
sh "git checkout -f ${eNB_CommitID}"
}
} else {
echo "Some parameters are missing"
sh "./ci-scripts/fail.sh"
}
}
}
}
stage ("Deploy and Test") {
steps {
script {
dir ('ci-scripts') {
echo "\u2705 \u001B[32m${testStageName}\u001B[0m"
String[] myXmlTestSuite = testXMLFile.split("\\r?\\n")
for (xmlFile in myXmlTestSuite) {
if (fileExists(xmlFile)) {
mainPythonAllXmlFiles += "--XMLTestFile=" + xmlFile + " "
echo "Test XML file : ${xmlFile}"
}
}
withCredentials([
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB_Credentials}", usernameVariable: 'eNB_Username', passwordVariable: 'eNB_Password'],
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password'],
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.ADB_Credentials}", usernameVariable: 'ADB_Username', passwordVariable: 'ADB_Password'],
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.OC_Credentials}", usernameVariable: 'OC_Username', passwordVariable: 'OC_Password']
]) {
sh "python3 main.py --mode=InitiateHtml --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} --ADBIPAddress=${params.ADB_IPAddress} --ADBUserName=${ADB_Username} --ADBPassword=${ADB_Password} ${mainPythonAllXmlFiles}"
for (xmlFile in myXmlTestSuite) {
if (fileExists(xmlFile)) {
try {
sh "python3 main.py --mode=TesteNB --eNBIPAddress=${params.eNB_IPAddress} --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath} --EPCIPAddress=${params.EPC_IPAddress} --EPCType=${params.EPC_Type} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --ADBIPAddress=${params.ADB_IPAddress} --ADBUserName=${ADB_Username} --ADBPassword=${ADB_Password} --XMLTestFile=${xmlFile} --OCUserName=${OC_Username} --OCPassword=${OC_Password} --OCProjectName=${OC_ProjectName}"
} catch (Exception e) {
currentBuild.result = 'FAILURE'
buildStageStatus = false
}
}
}
sh "python3 main.py --mode=FinalizeHtml --finalStatus=${buildStageStatus} --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password}"
}
}
}
}
}
stage ("Log Collection") {
steps {
script {
dir ('ci-scripts') {
if (directoryExistsGlob("build_log_*")) {
sh "zip -r -qq build_log_${env.BUILD_ID}.zip build_log_*/*"
sh "rm -rf build_log_*/"
archiveArtifacts artifacts: "build_log_${env.BUILD_ID}.zip"
}
if (directoryExistsGlob("test_log_*")) {
sh "zip -r -qq test_log_${env.BUILD_ID}.zip test_log_*/*"
sh "rm -rf test_log_*/"
archiveArtifacts artifacts: "test_log_${env.BUILD_ID}.zip"
}
if (fileExists("test_results.html")) {
sh "mv test_results.html test_results-${env.JOB_NAME}.html"
sh "sed -i -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}#' test_results-${JOB_NAME}.html"
archiveArtifacts artifacts: "test_results-${env.JOB_NAME}.html"
}
}
}
}
}
}
}

View File

@@ -111,17 +111,7 @@ pipeline {
sh "./ci-scripts/doGitLabMerge.sh --src-branch ${env.gitlabSourceBranch} --src-commit ${env.gitlabMergeRequestLastCommit} --target-branch ${env.gitlabTargetBranch} --target-commit ${GIT_COMMIT}"
sh "zip -r -qq localZip.zip ."
// Running astyle options on the list of modified files by the merge request
// For the moment, there is no fail criteria. Just a notification of number of files that do not follow
sh "./ci-scripts/checkCodingFormattingRules.sh --src-branch ${env.gitlabSourceBranch} --target-branch ${env.gitlabTargetBranch}"
def res=readFile('./oai_rules_result.txt').trim();
if ("0".equals(res)) {
def message = "OAI " + JOB_NAME + " build (" + BUILD_ID + "): All Changed files in Merge Request follow OAI Formatting Rules"
addGitLabMRComment comment: message
} else {
def message = "OAI " + JOB_NAME + " build (" + BUILD_ID + "): Some Changed files in Merge Request DO NOT follow OAI Formatting Rules"
addGitLabMRComment comment: message
}
// here was an astyle formatting check, with corresponding messages. The same could be done with clang-format
} else {
echo "Git Branch is ${GIT_BRANCH}"
echo "Git Commit is ${GIT_COMMIT}"
@@ -132,9 +122,6 @@ pipeline {
sh "git log -n1 --pretty=format:\"%s\" > .git/CI_COMMIT_MSG"
sh "zip -r -qq localZip.zip ."
// Running astyle options on all C/H files in the repository
// For the moment, there is no fail criteria. Just a notification of number of files that do not follow
sh "./ci-scripts/checkCodingFormattingRules.sh"
}
}
}
@@ -187,7 +174,7 @@ pipeline {
}
}
}
}
}
stage ("Variant Builds") {
parallel {
@@ -349,165 +336,6 @@ pipeline {
}
}
}
stage ("Test MONOLITHIC - FDD - Band 7 - B210") {
when {
expression {doFullTestsuite}
}
steps {
script {
triggerSlaveJob ('eNB-CI-FDD-Band7-B210', 'Test-Mono-FDD-Band7')
}
}
post {
always {
script {
finalizeSlaveJob('eNB-CI-FDD-Band7-B210')
}
}
failure {
script {
currentBuild.result = 'FAILURE'
}
}
}
}
stage ("Test MONOLITHIC - TDD - Band 40 - B210") {
when {
expression {doFullTestsuite}
}
steps {
script {
triggerSlaveJob ('eNB-CI-TDD-Band40-B210', 'Test-Mono-TDD-Band40')
}
}
post {
always {
script {
finalizeSlaveJob('eNB-CI-TDD-Band40-B210')
}
}
failure {
script {
currentBuild.result = 'FAILURE'
}
}
}
}
stage ("Test IF4p5 - FDD - Band 7 - B210") {
when {
expression {doFullTestsuite}
}
steps {
script {
sh "sleep 60"
triggerSlaveJob ('eNB-CI-IF4p5-FDD-Band7-B210', 'Test-IF4p5-FDD-Band7')
}
}
post {
always {
script {
finalizeSlaveJob('eNB-CI-IF4p5-FDD-Band7-B210')
}
}
failure {
script {
currentBuild.result = 'FAILURE'
}
}
}
}
stage ("Test F1 - FDD - Band 7 - B210") {
when {
expression {doFullTestsuite}
}
steps {
script {
sh "sleep 60"
triggerSlaveJob ('eNB-CI-F1-FDD-Band7-B210', 'Test-F1-FDD-Band7')
}
}
post {
always {
script {
finalizeSlaveJob('eNB-CI-F1-FDD-Band7-B210')
}
}
failure {
script {
currentBuild.result = 'FAILURE'
}
}
}
}
stage ("Test IF4p5 - TDD - Band 40 - B210") {
when {
expression {doFullTestsuite}
}
steps {
script {
sh "sleep 60"
triggerSlaveJob ('eNB-CI-IF4p5-TDD-Band40-B210', 'Test-IF4p5-TDD-Band40')
}
}
post {
always {
script {
finalizeSlaveJob('eNB-CI-IF4p5-TDD-Band40-B210')
}
}
failure {
script {
currentBuild.result = 'FAILURE'
}
}
}
}
stage ("Test OAI UE - FDD - Band 20 - B200") {
when {
expression {doFullTestsuite}
}
steps {
script {
triggerSlaveJobNoGitLab ('UE-CI-FDD-Band20-B200')
}
}
post {
always {
script {
finalizeSlaveJob('UE-CI-FDD-Band20-B200')
}
}
failure {
script {
currentBuild.result = 'FAILURE'
}
}
}
}
stage ("Test OAI UE - OAI eNB - FDD - Band 7 - B200") {
when {
expression {doFullTestsuite}
}
steps {
script {
// Delayed trigger on slave job, so it is always the last one to run
sh "sleep 240"
triggerSlaveJob ('eNB-UE-CI-MONO-FDD-Band7-B200', 'Test-eNB-OAI-UE-FDD-Band7')
}
}
post {
always {
script {
finalizeSlaveJob('eNB-UE-CI-MONO-FDD-Band7-B200')
}
}
failure {
script {
currentBuild.result = 'FAILURE'
}
}
}
}
}
post {
always {
@@ -583,68 +411,3 @@ OAI CI Team''',
}
}
}
// ---- Slave Job functions
def triggerSlaveJob (jobName, gitlabStatusName) {
// 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
localStatus = build job: jobName,
parameters: [
string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)),
string(name: 'eNB_Branch', value: String.valueOf(env.gitlabSourceBranch)),
string(name: 'eNB_CommitID', value: String.valueOf(env.gitlabMergeRequestLastCommit)),
booleanParam(name: 'eNB_mergeRequest', value: "MERGE".equals(env.gitlabActionType)),
string(name: 'eNB_TargetBranch', value: String.valueOf(env.gitlabTargetBranch))
], propagate: false
localResult = localStatus.getResult()
echo "${jobName} Slave Job status is ${localResult}"
gitlabCommitStatus(name: gitlabStatusName) {
if (localStatus.resultIsBetterOrEqualTo('SUCCESS')) {
echo "${jobName} Slave Job is OK"
} else {
echo "${jobName} Slave Job is KO"
sh "ci-scripts/fail.sh"
}
}
}
def triggerSlaveJobNoGitLab (jobName) {
// 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
localStatus = build job: jobName,
parameters: [
string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)),
string(name: 'eNB_Branch', value: String.valueOf(env.gitlabSourceBranch)),
string(name: 'eNB_CommitID', value: String.valueOf(env.gitlabMergeRequestLastCommit)),
booleanParam(name: 'eNB_mergeRequest', value: "MERGE".equals(env.gitlabActionType)),
string(name: 'eNB_TargetBranch', value: String.valueOf(env.gitlabTargetBranch))
], propagate: false
localResult = localStatus.getResult()
echo "${jobName} Slave Job status is ${localResult}"
if (localStatus.resultIsBetterOrEqualTo('SUCCESS')) {
echo "${jobName} Slave Job is OK"
} else {
echo "${jobName} Slave Job is KO"
sh "ci-scripts/fail.sh"
}
}
def finalizeSlaveJob(jobName) {
// In case of any non-success, we are retrieving the HTML report of the last completed
// slave job. The only drop-back is that we may retrieve the HTML report of a previous build
fileName = "test_results-${jobName}.html"
if (!fileExists(fileName)) {
copyArtifacts(projectName: jobName,
filter: 'test_results*.html',
selector: lastCompleted())
if (fileExists(fileName)) {
sh "sed -i -e 's#TEMPLATE_BUILD_TIME#${JOB_TIMESTAMP}#' ${fileName}"
archiveArtifacts artifacts: fileName
}
}
}

View File

@@ -66,7 +66,7 @@ pipeline {
withCredentials([
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.DH_Credentials}", usernameVariable: 'DH_Username', passwordVariable: 'DH_Password']
]) {
def listOfImages = ["oai-enb", "oai-gnb", "oai-lte-ue", "oai-nr-ue"]
def listOfImages = ["oai-enb", "oai-gnb", "oai-lte-ue", "oai-nr-ue", "proxy"]
sh "docker login -u ${DH_Username} -p ${DH_Password} > /dev/null 2>&1"
listOfImages.eachWithIndex { item, iindex ->
sh "docker image tag ${item}:develop ${DH_Account}/${item}:develop"

View File

@@ -36,6 +36,9 @@ def testStageName = params.pipelineTestStageName
// Name of the phone resource
def ciSmartPhoneResource = params.smartphonesResource
// Name of the phone resource
def ciEpcResource = params.epcResource
// Global Parameters. Normally they should be populated when the master job
// triggers the slave job with parameters
def eNB_Repository
@@ -51,7 +54,7 @@ pipeline {
options {
disableConcurrentBuilds()
ansiColor('xterm')
lock (ciSmartPhoneResource)
lock(extra: [[resource: ciEpcResource]], resource: ciSmartPhoneResource)
}
stages {
stage ("Verify Parameters") {
@@ -216,6 +219,76 @@ pipeline {
}
}
}
stage ("Terminate") {
parallel {
stage('Terminate UE') {
// Bypassing this stage if there are no abd server defined
when {
expression { params.ADB_IPAddress != "none" }
}
steps {
echo '\u2705 \u001B[32mTerminate UE\u001B[0m'
withCredentials([
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.ADB_Credentials}", usernameVariable: 'ADB_Username', passwordVariable: 'ADB_Password']
]) {
sh "python3 ci-scripts/main.py --mode=TerminateUE --ADBIPAddress=${params.ADB_IPAddress} --ADBUserName=${ADB_Username} --ADBPassword=${ADB_Password}"
}
}
}
stage('Terminate eNB') {
steps {
echo '\u2705 \u001B[32mTerminate eNB\u001B[0m'
withCredentials([
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB_Credentials}", usernameVariable: 'eNB_Username', passwordVariable: 'eNB_Password']
]) {
sh "python3 ci-scripts/main.py --mode=TerminateeNB --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password}"
}
}
}
stage('Terminate SPGW') {
// Bypassing this stage if EPC server is not defined
when {
expression { params.EPC_IPAddress != "none" }
}
steps {
echo '\u2705 \u001B[32mTerminate SPGW\u001B[0m'
withCredentials([
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
]) {
sh "python3 ci-scripts/main.py --mode=TerminateSPGW --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCType=${params.EPC_Type} --EPCSourceCodePath=${params.EPC_SourceCodePath}"
}
}
}
stage('Terminate MME') {
// Bypassing this stage if EPC server is not defined
when {
expression { params.EPC_IPAddress != "none" }
}
steps {
echo '\u2705 \u001B[32mTerminate MME\u001B[0m'
withCredentials([
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
]) {
sh "python3 ci-scripts/main.py --mode=TerminateMME --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCType=${params.EPC_Type} --EPCSourceCodePath=${params.EPC_SourceCodePath}"
}
}
}
stage('Terminate HSS') {
// Bypassing this stage if EPC server is not defined
when {
expression { params.EPC_IPAddress != "none" }
}
steps {
echo '\u2705 \u001B[32mTerminate HSS\u001B[0m'
withCredentials([
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
]) {
sh "python3 ci-scripts/main.py --mode=TerminateHSS --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCType=${params.EPC_Type} --EPCSourceCodePath=${params.EPC_SourceCodePath}"
}
}
}
}
}
stage('Log Collection') {
parallel {
stage('Log Collection (eNB - Build)') {
@@ -242,7 +315,7 @@ pipeline {
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB_Credentials}", usernameVariable: 'eNB_Username', passwordVariable: 'eNB_Password']
]) {
echo '\u2705 \u001B[32mLog Collection (eNB - Run)\u001B[0m'
sh "python3 ci-scripts/main.py --mode=LogCollecteNB --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath}"
sh "python3 ci-scripts/main.py --mode=LogCollecteNB --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath} --BuildId=${env.BUILD_ID}"
echo '\u2705 \u001B[32mLog Transfer (eNB - Run)\u001B[0m'
sh "sshpass -p \'${eNB_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${eNB_Username}@${params.eNB_IPAddress}:${eNB_SourceCodePath}/cmake_targets/enb.log.zip ./enb.log.${env.BUILD_ID}.zip || true"
@@ -259,6 +332,116 @@ pipeline {
}
}
}
stage('Log Collection (SPGW)') {
// Bypassing this stage if EPC server is not defined
when {
expression { params.EPC_IPAddress != "none" }
}
steps {
withCredentials([
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
]) {
echo '\u2705 \u001B[32mLog Collection (SPGW)\u001B[0m'
sh "python3 ci-scripts/main.py --mode=LogCollectSPGW --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --EPCType=${params.EPC_Type}"
echo '\u2705 \u001B[32mLog Transfer (SPGW)\u001B[0m'
sh "sshpass -p \'${EPC_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${EPC_Username}@${params.EPC_IPAddress}:${EPC_SourceCodePath}/scripts/spgw.log.zip ./spgw.log.${env.BUILD_ID}.zip || true"
}
script {
if(fileExists("spgw.log.${env.BUILD_ID}.zip")) {
archiveArtifacts "spgw.log.${env.BUILD_ID}.zip"
}
}
}
}
stage('Log Collection (MME)') {
// Bypassing this stage if EPC server is not defined
when {
expression { params.EPC_IPAddress != "none" }
}
steps {
withCredentials([
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
]) {
echo '\u2705 \u001B[32mLog Collection (MME)\u001B[0m'
sh "python3 ci-scripts/main.py --mode=LogCollectMME --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --EPCType=${params.EPC_Type}"
echo '\u2705 \u001B[32mLog Transfer (MME)\u001B[0m'
sh "sshpass -p \'${EPC_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${EPC_Username}@${params.EPC_IPAddress}:${EPC_SourceCodePath}/scripts/mme.log.zip ./mme.log.${env.BUILD_ID}.zip || true"
}
script {
if(fileExists("mme.log.${env.BUILD_ID}.zip")) {
archiveArtifacts "mme.log.${env.BUILD_ID}.zip"
}
}
}
}
stage('Log Collection (HSS)') {
// Bypassing this stage if EPC server is not defined
when {
expression { params.EPC_IPAddress != "none" }
}
steps {
withCredentials([
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
]) {
echo '\u2705 \u001B[32mLog Collection (HSS)\u001B[0m'
sh "python3 ci-scripts/main.py --mode=LogCollectHSS --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --EPCType=${params.EPC_Type}"
echo '\u2705 \u001B[32mLog Transfer (HSS)\u001B[0m'
sh "sshpass -p \'${EPC_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${EPC_Username}@${params.EPC_IPAddress}:${EPC_SourceCodePath}/scripts/hss.log.zip ./hss.log.${env.BUILD_ID}.zip || true"
}
script {
if(fileExists("hss.log.${env.BUILD_ID}.zip")) {
archiveArtifacts "hss.log.${env.BUILD_ID}.zip"
}
}
}
}
stage('Log Collection (Ping)') {
// Bypassing this stage if EPC server is not defined
when {
expression { params.EPC_IPAddress != "none" }
}
steps {
withCredentials([
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
]) {
echo '\u2705 \u001B[32mLog Collection (Ping)\u001B[0m'
sh "python3 ci-scripts/main.py --mode=LogCollectPing --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --EPCType=${params.EPC_Type}"
echo '\u2705 \u001B[32mLog Transfer (Ping)\u001B[0m'
sh "sshpass -p \'${EPC_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${EPC_Username}@${params.EPC_IPAddress}:${EPC_SourceCodePath}/scripts/ping.log.zip ./ping.log.${env.BUILD_ID}.zip || true"
}
script {
if(fileExists("ping.log.${env.BUILD_ID}.zip")) {
archiveArtifacts "ping.log.${env.BUILD_ID}.zip"
}
}
}
}
stage('Log Collection (Iperf)') {
// Bypassing this stage if EPC server is not defined
when {
expression { params.EPC_IPAddress != "none" }
}
steps {
withCredentials([
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
]) {
echo '\u2705 \u001B[32mLog Collection (Iperf)\u001B[0m'
sh "python3 ci-scripts/main.py --mode=LogCollectIperf --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --EPCType=${params.EPC_Type}"
echo '\u2705 \u001B[32mLog Transfer (Iperf)\u001B[0m'
sh "sshpass -p \'${EPC_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${EPC_Username}@${params.EPC_IPAddress}:${EPC_SourceCodePath}/scripts/iperf.log.zip ./iperf.log.${env.BUILD_ID}.zip || true"
}
script {
if(fileExists("iperf.log.${env.BUILD_ID}.zip")) {
archiveArtifacts "iperf.log.${env.BUILD_ID}.zip"
}
}
}
}
}
}
}

View File

@@ -20,6 +20,9 @@
* contact@openairinterface.org
*/
// necessary for reading JSON
import groovy.json.JsonSlurper
// Template Jenkins Declarative Pipeline script to run Test w/ RF HW
// Location of the python executor node shall be in the same subnet as the others servers
@@ -37,12 +40,12 @@ pipeline {
stages {
stage ("Launcher") {
steps {
script {
//retrieve MR that are opened nd with tag NSA
MR_LIST= sh returnStdout: true, script: 'curl --silent "https://gitlab.eurecom.fr/api/v4/projects/oai%2Fopenairinterface5g/merge_requests?state=opened&per_page=100&labels=NSA" | jq ".[].iid" || true '
echo "List of selected MR:\n${MR_LIST}"
def MR_ARRAY = MR_LIST.split('\n')
//for every selected MR, retrieve the branch name and the latest commit
script {
// retrieve MR that are opened nd with tag NSA
MR_LIST = sh returnStdout: true, script: 'curl --silent "https://gitlab.eurecom.fr/api/v4/projects/oai%2Fopenairinterface5g/merge_requests?state=opened&per_page=100&labels=NSA" | jq -cj "[.[].iid]"'
echo "List of selected MRs: ${MR_LIST.trim()}"
def MR_ARRAY = new JsonSlurper().parseText(MR_LIST.trim())
// for every selected MR, retrieve the branch name and the latest commit
for (MR in MR_ARRAY) {
SRC_BRANCH=sh returnStdout: true, script: """curl --silent "https://gitlab.eurecom.fr/api/v4/projects/oai%2Fopenairinterface5g/merge_requests/${MR}" | jq ".source_branch" || true """
SRC_BRANCH=SRC_BRANCH.trim()

View File

@@ -41,7 +41,7 @@ import constants as CONST
#-----------------------------------------------------------
def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,ldpc,CONTAINERS,HELP,SCA,PHYSIM):
def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,ldpc,CONTAINERS,HELP,SCA,PHYSIM,CLUSTER):
py_param_file_present = False
@@ -82,6 +82,7 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,ldpc,CONTAINERS,HELP,SCA,PHYSIM):
CONTAINERS.ranRepository=matchReg.group(1)
SCA.ranRepository=matchReg.group(1)
PHYSIM.ranRepository=matchReg.group(1)
CLUSTER.ranRepository=matchReg.group(1)
elif re.match('^\-\-eNB_AllowMerge=(.+)$|^\-\-ranAllowMerge=(.+)$', myArgv, re.IGNORECASE):
if re.match('^\-\-eNB_AllowMerge=(.+)$', myArgv, re.IGNORECASE):
matchReg = re.match('^\-\-eNB_AllowMerge=(.+)$', myArgv, re.IGNORECASE)
@@ -96,6 +97,7 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,ldpc,CONTAINERS,HELP,SCA,PHYSIM):
CONTAINERS.ranAllowMerge=True
SCA.ranAllowMerge=True
PHYSIM.ranAllowMerge=True
CLUSTER.ranAllowMerge=True
elif re.match('^\-\-eNBBranch=(.+)$|^\-\-ranBranch=(.+)$', myArgv, re.IGNORECASE):
if re.match('^\-\-eNBBranch=(.+)$', myArgv, re.IGNORECASE):
matchReg = re.match('^\-\-eNBBranch=(.+)$', myArgv, re.IGNORECASE)
@@ -108,6 +110,7 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,ldpc,CONTAINERS,HELP,SCA,PHYSIM):
CONTAINERS.ranBranch=matchReg.group(1)
SCA.ranBranch=matchReg.group(1)
PHYSIM.ranBranch=matchReg.group(1)
CLUSTER.ranBranch=matchReg.group(1)
elif re.match('^\-\-eNBCommitID=(.*)$|^\-\-ranCommitID=(.*)$', myArgv, re.IGNORECASE):
if re.match('^\-\-eNBCommitID=(.*)$', myArgv, re.IGNORECASE):
matchReg = re.match('^\-\-eNBCommitID=(.*)$', myArgv, re.IGNORECASE)
@@ -120,6 +123,7 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,ldpc,CONTAINERS,HELP,SCA,PHYSIM):
CONTAINERS.ranCommitID=matchReg.group(1)
SCA.ranCommitID=matchReg.group(1)
PHYSIM.ranCommitID=matchReg.group(1)
CLUSTER.ranCommitID=matchReg.group(1)
elif re.match('^\-\-eNBTargetBranch=(.*)$|^\-\-ranTargetBranch=(.*)$', myArgv, re.IGNORECASE):
if re.match('^\-\-eNBTargetBranch=(.*)$', myArgv, re.IGNORECASE):
matchReg = re.match('^\-\-eNBTargetBranch=(.*)$', myArgv, re.IGNORECASE)
@@ -132,6 +136,7 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,ldpc,CONTAINERS,HELP,SCA,PHYSIM):
CONTAINERS.ranTargetBranch=matchReg.group(1)
SCA.ranTargetBranch=matchReg.group(1)
PHYSIM.ranTargetBranch=matchReg.group(1)
CLUSTER.ranTargetBranch=matchReg.group(1)
elif re.match('^\-\-eNBIPAddress=(.+)$|^\-\-eNB[1-2]IPAddress=(.+)$', myArgv, re.IGNORECASE):
if re.match('^\-\-eNBIPAddress=(.+)$', myArgv, re.IGNORECASE):
matchReg = re.match('^\-\-eNBIPAddress=(.+)$', myArgv, re.IGNORECASE)
@@ -140,6 +145,7 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,ldpc,CONTAINERS,HELP,SCA,PHYSIM):
CONTAINERS.eNBIPAddress=matchReg.group(1)
SCA.eNBIPAddress=matchReg.group(1)
PHYSIM.eNBIPAddress=matchReg.group(1)
CLUSTER.eNBIPAddress=matchReg.group(1)
elif re.match('^\-\-eNB1IPAddress=(.+)$', myArgv, re.IGNORECASE):
matchReg = re.match('^\-\-eNB1IPAddress=(.+)$', myArgv, re.IGNORECASE)
RAN.eNB1IPAddress=matchReg.group(1)
@@ -156,6 +162,7 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,ldpc,CONTAINERS,HELP,SCA,PHYSIM):
CONTAINERS.eNBUserName=matchReg.group(1)
SCA.eNBUserName=matchReg.group(1)
PHYSIM.eNBUserName=matchReg.group(1)
CLUSTER.eNBUserName=matchReg.group(1)
elif re.match('^\-\-eNB1UserName=(.+)$', myArgv, re.IGNORECASE):
matchReg = re.match('^\-\-eNB1UserName=(.+)$', myArgv, re.IGNORECASE)
RAN.eNB1UserName=matchReg.group(1)
@@ -172,6 +179,7 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,ldpc,CONTAINERS,HELP,SCA,PHYSIM):
CONTAINERS.eNBPassword=matchReg.group(1)
SCA.eNBPassword=matchReg.group(1)
PHYSIM.eNBPassword=matchReg.group(1)
CLUSTER.eNBPassword=matchReg.group(1)
elif re.match('^\-\-eNB1Password=(.+)$', myArgv, re.IGNORECASE):
matchReg = re.match('^\-\-eNB1Password=(.+)$', myArgv, re.IGNORECASE)
RAN.eNB1Password=matchReg.group(1)
@@ -188,6 +196,7 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,ldpc,CONTAINERS,HELP,SCA,PHYSIM):
CONTAINERS.eNBSourceCodePath=matchReg.group(1)
SCA.eNBSourceCodePath=matchReg.group(1)
PHYSIM.eNBSourceCodePath=matchReg.group(1)
CLUSTER.eNBSourceCodePath=matchReg.group(1)
elif re.match('^\-\-eNB1SourceCodePath=(.+)$', myArgv, re.IGNORECASE):
matchReg = re.match('^\-\-eNB1SourceCodePath=(.+)$', myArgv, re.IGNORECASE)
RAN.eNB1SourceCodePath=matchReg.group(1)
@@ -260,12 +269,21 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,ldpc,CONTAINERS,HELP,SCA,PHYSIM):
elif re.match('^\-\-OCUserName=(.+)$', myArgv, re.IGNORECASE):
matchReg = re.match('^\-\-OCUserName=(.+)$', myArgv, re.IGNORECASE)
PHYSIM.OCUserName = matchReg.group(1)
CLUSTER.OCUserName = matchReg.group(1)
elif re.match('^\-\-OCPassword=(.+)$', myArgv, re.IGNORECASE):
matchReg = re.match('^\-\-OCPassword=(.+)$', myArgv, re.IGNORECASE)
PHYSIM.OCPassword = matchReg.group(1)
CLUSTER.OCPassword = matchReg.group(1)
elif re.match('^\-\-OCProjectName=(.+)$', myArgv, re.IGNORECASE):
matchReg = re.match('^\-\-OCProjectName=(.+)$', myArgv, re.IGNORECASE)
PHYSIM.OCProjectName = matchReg.group(1)
CLUSTER.OCProjectName = matchReg.group(1)
elif re.match('^\-\-OCUrl=(.+)$', myArgv, re.IGNORECASE):
matchReg = re.match('^\-\-OCUrl=(.+)$', myArgv, re.IGNORECASE)
CLUSTER.OCUrl = matchReg.group(1)
elif re.match('^\-\-OCRegistry=(.+)$', myArgv, re.IGNORECASE):
matchReg = re.match('^\-\-OCRegistry=(.+)$', myArgv, re.IGNORECASE)
CLUSTER.OCRegistry = matchReg.group(1)
elif re.match('^\-\-BuildId=(.+)$', myArgv, re.IGNORECASE):
matchReg = re.match('^\-\-BuildId=(.+)$', myArgv, re.IGNORECASE)
RAN.BuildId = matchReg.group(1)

View File

@@ -1,26 +0,0 @@
# OAI is using a style that is similar to the Google style
--style=google
# long options can be written without the preceding '--'
# Convert tabs to spaces
convert-tabs
# Indentation is 2 spaces
indent=spaces=2
# Indent 'switch' blocks so that the 'case X:' statements are indented in the switch block.
indent-switches
# Indent preprocessor blocks at bracket level 0.
indent-preproc-block
# Indent multi-line preprocessor #define statements.
indent-preproc-define
# Indent C++ comments beginning in column one.
indent-col1-comments
# Pad empty lines around header blocks
break-blocks
delete-empty-lines
# Attach a pointer or reference operator (*, &, or ^) to the variable name (right)
align-pointer=name
# The code line length is 200 characters/columns (this is the maximum allowed by astyle)
max-code-length=200
# If the line contains logical conditionals they will be placed first on the new line.
break-after-logical
# Force use of the linux end of line
lineend=linux

View File

@@ -24,8 +24,6 @@ function usage {
echo "OAI Coding / Formatting Guideline Check script"
echo " Original Author: Raphael Defosseux"
echo ""
echo " Requirement: astyle shall be installed"
echo ""
echo " By default (no options) the complete repository will be checked"
echo " In case of merge request, provided source and target branch,"
echo " the script will check only the modified files"
@@ -57,11 +55,10 @@ fi
if [ $# -eq 0 ]
then
echo " ---- Checking the whole repository ----"
echo ""
NB_FILES_TO_FORMAT=`astyle --dry-run --options=ci-scripts/astyle-options.txt --recursive --exclude=ci-scripts --exclude=cmake_targets *.c *.h | grep -c Formatted || true`
echo "Nb Files that do NOT follow OAI rules: $NB_FILES_TO_FORMAT"
echo $NB_FILES_TO_FORMAT > ./oai_rules_result.txt
# in this file we previously had a list of files that were not properly
# formatted. At the time of this MR, the Jenkinsfile expects this file, so
# we simply produce an empty one
touch ./oai_rules_result.txt
# Testing Circular Dependencies protection
awk '/#[ \t]*ifndef/ { gsub("^.*ifndef *",""); if (names[$1]!="") print "files with same {define ", FILENAME, names[$1]; names[$1]=FILENAME } /#[ \t]*define/ { gsub("^.*define *",""); if(names[$1]!=FILENAME) print "error in declaration", FILENAME, $1, names[$1]; nextfile }' `find openair* common targets executables -name *.h |grep -v LFDS` > header-files-w-incorrect-define.txt
@@ -77,7 +74,7 @@ then
IS_NFAPI=`echo $FILE | egrep -c "nfapi/open-nFAPI|nfapi/oai_integration/vendor_ext" || true`
IS_OAI_LICENCE_PRESENT=`egrep -c "OAI Public License" $FILE || true`
IS_BSD_LICENCE_PRESENT=`egrep -c "the terms of the BSD Licence|License-Identifier: BSD-2-Clause" $FILE || true`
IS_EXCEPTION=`echo $FILE | egrep -c "common/utils/collection/tree.h|common/utils/collection/queue.h|common/utils/itti_analyzer/common/queue.h|openair3/UTILS/tree.h|openair3/UTILS/queue.h|openair3/GTPV1-U/nw-gtpv1u|openair2/UTIL/OPT/ws_|openair2/UTIL/OPT/packet-rohc.h|openair3/NAS/COMMON/milenage.h|openair1/PHY/CODING/crc|openair1/PHY/CODING/types.h" || true`
IS_EXCEPTION=`echo $FILE | egrep -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|openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder_offload.c|openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_offload.h" || true`
if [ $IS_OAI_LICENCE_PRESENT -eq 0 ] && [ $IS_BSD_LICENCE_PRESENT -eq 0 ]
then
if [ $IS_NFAPI -eq 0 ] && [ $IS_EXCEPTION -eq 0 ]
@@ -151,10 +148,6 @@ echo ""
# Retrieve the list of modified files since the latest develop commit
MODIFIED_FILES=`git log $TARGET_INIT_COMMIT..$MERGE_COMMMIT --oneline --name-status | egrep "^M|^A" | sed -e "s@^M\t*@@" -e "s@^A\t*@@" | sort | uniq`
NB_TO_FORMAT=0
if [ -f oai_rules_result_list.txt ]
then
rm -f oai_rules_result_list.txt
fi
if [ -f header-files-w-incorrect-define.txt ]
then
rm -f header-files-w-incorrect-define.txt
@@ -178,13 +171,6 @@ do
EXT="${filename##*.}"
if [ $EXT = "c" ] || [ $EXT = "h" ] || [ $EXT = "cpp" ] || [ $EXT = "hpp" ]
then
TO_FORMAT=`astyle --dry-run --options=ci-scripts/astyle-options.txt $FULLFILE | grep -c Formatted || true`
NB_TO_FORMAT=$((NB_TO_FORMAT + TO_FORMAT))
if [ $TO_FORMAT -ne 0 ]
then
echo $FULLFILE
echo $FULLFILE >> ./oai_rules_result_list.txt
fi
# Testing if explicit GNU GPL license banner
GNU_EXCEPTION=`echo $FULLFILE | egrep -c "openair3/NAS/COMMON/milenage.h" || true`
if [ $GNU_EXCEPTION -eq 0 ]
@@ -198,7 +184,7 @@ do
IS_NFAPI=`echo $FULLFILE | egrep -c "nfapi/open-nFAPI|nfapi/oai_integration/vendor_ext" || true`
IS_OAI_LICENCE_PRESENT=`egrep -c "OAI Public License" $FULLFILE || true`
IS_BSD_LICENCE_PRESENT=`egrep -c "the terms of the BSD Licence|License-Identifier: BSD-2-Clause" $FULLFILE || true`
IS_EXCEPTION=`echo $FULLFILE | egrep -c "common/utils/collection/tree.h|common/utils/collection/queue.h|common/utils/itti_analyzer/common/queue.h|openair3/UTILS/tree.h|openair3/UTILS/queue.h|openair3/GTPV1-U/nw-gtpv1u|openair2/UTIL/OPT/ws_|openair2/UTIL/OPT/packet-rohc.h|openair3/NAS/COMMON/milenage.h|openair1/PHY/CODING/crc|openair1/PHY/CODING/types.h" || true`
IS_EXCEPTION=`echo $FULLFILE | egrep -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|openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder_offload.c|openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_offload.h" || true`
if [ $IS_OAI_LICENCE_PRESENT -eq 0 ] && [ $IS_BSD_LICENCE_PRESENT -eq 0 ]
then
if [ $IS_NFAPI -eq 0 ] && [ $IS_EXCEPTION -eq 0 ]
@@ -215,9 +201,10 @@ do
fi
done
rm -f header-files-w-incorrect-define-tmp.txt
echo ""
echo " ----------------------------------------------------------"
echo "Nb Files that do NOT follow OAI rules: $NB_TO_FORMAT"
echo $NB_TO_FORMAT > ./oai_rules_result.txt
# in this script we previously produced a list of files that were not properly
# formatted. At the time of this MR, the Jenkinsfile expects this file, so
# we simply produce an empty file
touch ./oai_rules_result.txt
exit 0

View File

@@ -50,7 +50,7 @@ amarisoft_ue_1:
WakeupScript : none
DetachScript : none
#end
Cmd : /root/NV17-12-21/ue/lteue
Cmd : /root/NV18-06-2022/ue/lteue
Config : /root/NV17-12-21/ue/config/oaicicd-ue-Ping-SATest.cfg
Duration : 60
Ping : /tmp/test_ue1.log
@@ -71,7 +71,7 @@ amarisoft_ue_2:
WakeupScript : none
DetachScript : none
#end
Cmd : /root/NV17-12-21/ue/lteue
Cmd : /root/NV18-06-2022/ue/lteue
Config : /root/NV17-12-21/ue/config/xxxxxxx.cfg #to be updated for an other scenario
Duration : 60
Ping :

377
ci-scripts/cls_cluster.py Normal file
View File

@@ -0,0 +1,377 @@
#/*
# * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
# * contributor license agreements. See the NOTICE file distributed with
# * this work for additional information regarding copyright ownership.
# * The OpenAirInterface Software Alliance licenses this file to You under
# * the OAI Public License, Version 1.1 (the "License"); you may not use this file
# * except in compliance with the License.
# * You may obtain a copy of the License at
# *
# * http://www.openairinterface.org/?page_id=698
# *
# * Unless required by applicable law or agreed to in writing, software
# * distributed under the License is distributed on an "AS IS" BASIS,
# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# * See the License for the specific language governing permissions and
# * limitations under the License.
# *-------------------------------------------------------------------------------
# * For more information about the OpenAirInterface (OAI) Software Alliance:
# * contact@openairinterface.org
# */
#---------------------------------------------------------------------
# Python for CI of OAI-eNB + COTS-UE
#
# Required Python Version
# Python 3.x
#
# Required Python Package
# pexpect
#---------------------------------------------------------------------
#-----------------------------------------------------------
# Import
#-----------------------------------------------------------
import logging
import sshconnection as SSH
import cls_oai_html
#import os
import re
import time
#import subprocess
import sys
import constants as CONST
import helpreadme as HELP
import cls_containerize
class Cluster:
def __init__(self):
self.eNBIPAddress = ""
self.eNBSourceCodePath = ""
self.forcedWorkspaceCleanup = False
self.OCUserName = ""
self.OCPassword = ""
self.OCProjectName = ""
self.OCUrl = "https://api.oai.cs.eurecom.fr:6443"
self.OCRegistry = "default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/"
self.ranRepository = ""
self.ranBranch = ""
self.ranCommitID = ""
self.ranAllowMerge = False
self.ranTargetBranch = ""
def _recreate_entitlements(self, sshSession):
# recreating entitlements, don't care if deletion fails
sshSession.command('oc delete secret etc-pki-entitlement', '\$', 5)
if re.search(r"not found", sshSession.getBefore()):
logging.warning("no secrets etc-pki-entitlement found, recreating")
sshSession.command('ls /etc/pki/entitlement/???????????????????.pem | tail -1', '\$', 5, silent=True)
regres1 = re.search(r"/etc/pki/entitlement/[0-9]+.pem", sshSession.getBefore())
sshSession.command('ls /etc/pki/entitlement/???????????????????-key.pem | tail -1', '\$', 5, silent=True)
regres2 = re.search(r"/etc/pki/entitlement/[0-9]+-key.pem", sshSession.getBefore())
if regres1 is None or regres2 is None:
logging.error("could not find entitlements")
return false
file1 = regres1.group(0)
file2 = regres2.group(0)
sshSession.command(f'oc create secret generic etc-pki-entitlement --from-file {file1} --from-file {file2}', '\$', 5)
regres = re.search(r"secret/etc-pki-entitlement created", sshSession.getBefore())
if regres is None:
logging.error("could not create secret/etc-pki-entitlement")
return False
return True
def _recreate_bc(self, sshSession, name, newTag, filename):
self._retag_image_statement(sshSession, name, name, newTag, filename)
sshSession.command(f'oc delete -f {filename}', '\$', 5)
sshSession.command(f'oc create -f {filename}', '\$', 5)
before = sshSession.getBefore()
if re.search('buildconfig.build.openshift.io/[a-zA-Z\-0-9]+ created', before) is not None:
return True
logging.error('error while creating buildconfig: ' + sshSession.getBefore())
return False
def _recreate_is_tag(self, sshSession, name, newTag, filename):
sshSession.command(f'oc describe is {name}', '\$', 5)
if sshSession.getBefore().count('NotFound') > 0:
sshSession.command(f'oc create -f {filename}', '\$', 5)
before = sshSession.getBefore()
if re.search(f'imagestream.image.openshift.io/{name} created', before) is None:
logging.error('error while creating imagestream: ' + sshSession.getBefore())
return False
else:
logging.debug(f'-> imagestream {name} found')
image = f'{name}:{newTag}'
sshSession.command(f'oc delete istag {image}', '\$', 5) # we don't care if this fails, e.g., if it is missing
sshSession.command(f'oc create istag {image}', '\$', 5)
before = sshSession.getBefore()
if re.search(f'imagestreamtag.image.openshift.io/{image} created', before) is not None:
return True
logging.error('error while creating imagestreamtag: ' + sshSession.getBefore())
return False
def _start_build(self, sshSession, name):
# will return "immediately" but build runs in background
# if multiple builds are started at the same time, this can take some time, however
ret = sshSession.command(f'oc start-build {name} --from-file={self.eNBSourceCodePath}', '\$', 300)
before = sshSession.getBefore()
regres = re.search(r'build.build.openshift.io/(?P<jobname>[a-zA-Z0-9\-]+) started', str(before))
if ret != 0 or before.count('Uploading finished') != 1 or regres is None:
logging.error("error during oc start-build: " + sshSession.getBefore())
self._delete_pod(sshSession, name)
return None
return regres.group('jobname') + '-build'
def _delete_pod(self, sshSession, shortName):
sshSession.command(f"oc get pods | grep {shortName}", '\$', 5)
regres = re.search(rf'{shortName}-[0-9]+-build', sshSession.getBefore())
if regres is not None:
sshSession.command(f"oc delete pod {regres.group(0)}", '\$', 5)
else:
logging.warning(f"no pod found with name {shortName}")
def _wait_build_end(self, sshSession, jobs, timeout_sec, check_interval_sec = 5):
logging.debug(f"waiting for jobs {jobs} to finish building")
while timeout_sec > 0:
# check status
for j in jobs:
sshSession.command(f'oc get pods | grep {j}', '\$', 10, silent = True)
if sshSession.getBefore().count('Completed') > 0: jobs.remove(j)
if sshSession.getBefore().count('Error') > 0:
logging.error(f'error for job {j}: ' + sshSession.getBefore())
return False
if jobs == []:
logging.debug('all jobs completed')
return True
time.sleep(check_interval_sec)
timeout_sec -= check_interval_sec
logging.error(f"timeout while waiting for end of build of {jobs}")
return False
def _retag_image_statement(self, sshSession, oldImage, newImage, newTag, filename):
sshSession.command(f'sed -i -e "s#{oldImage}:latest#{newImage}:{newTag}#" {filename}', '\$', 5)
def _get_image_size(self, sshSession, image, tag):
# get the SHA of the image we built using the image name and its tag
sshSession.command(f'oc describe is {image} | grep -A4 {tag}', '\$', 5)
result = re.search(f'image-registry.openshift-image-registry.svc:5000/oaicicd-ran/(?P<imageSha>{image}@sha256:[a-f0-9]+)', sshSession.getBefore())
if result is None:
return -1
imageSha = result.group("imageSha")
# retrieve the size
sshSession.command(f'oc get -o json isimage {imageSha} | jq -Mc "{{dockerImageSize: .image.dockerImageMetadata.Size}}"', '\$', 5)
result = re.search('{"dockerImageSize":(?P<size>[0-9]+)}', str(sshSession.getBefore()))
if result is None:
return -1
return int(result.group("size"))
def _deploy_pod(self, sshSession, filename, timeout = 30):
sshSession.command(f'oc create -f {filename}', '\$', 10)
result = re.search(f'pod/(?P<pod>[a-zA-Z0-9_\-]+) created', sshSession.getBefore())
if result is None:
logging.error(f'could not deploy pod: {sshSession.getBefore()}')
return None
pod = result.group("pod")
logging.debug(f'checking if pod {pod} is in Running state')
while timeout > 0:
sshSession.command(f'oc get pod {pod} -o json | jq -Mc .status.phase', '\$', 5, silent=True)
if re.search('"Running"', sshSession.getBefore()) is not None: return pod
timeout -= 1
time.sleep(1)
logging.error(f'pod {pod} did not reach Running state')
self._undeploy_pod(sshSession, filename)
return None
def _undeploy_pod(self, sshSession, filename):
# to save time we start this in the background and trust that oc stops correctly
sshSession.command(f'oc delete -f {filename} &', '\$', 5)
def BuildClusterImage(self, HTML):
if self.ranRepository == '' or self.ranBranch == '' or self.ranCommitID == '':
HELP.GenericHelp(CONST.Version)
sys.exit(f'Insufficient Parameter: ranRepository {self.ranRepository} ranBranch {ranBranch} ranCommitID {self.ranCommitID}')
lIpAddr = self.eNBIPAddress
lSourcePath = self.eNBSourceCodePath
if lIpAddr == '' or lSourcePath == '':
HELP.GenericHelp(CONST.Version)
sys.exit('Insufficient Parameter: no SSH Credentials')
ocUserName = self.OCUserName
ocPassword = self.OCPassword
ocProjectName = self.OCProjectName
if ocUserName == '' or ocPassword == '' or ocProjectName == '':
HELP.GenericHelp(CONST.Version)
sys.exit('Insufficient Parameter: no OC Credentials')
if self.OCRegistry.startswith("http") and not self.OCRegistry.endswith("/"):
sys.exit(f'ocRegistry {self.OCRegistry} should not start with http:// or https:// and end on a slash /')
logging.debug(f'Building on cluster triggered from server: {lIpAddr}')
mySSH = SSH.SSHConnection()
mySSH.open(lIpAddr, "oaicicd", "SHOULD NOT BE NECESSARY")
self.testCase_id = HTML.testCase_id
# Workaround for some servers, we need to erase completely the workspace
if self.forcedWorkspaceCleanup:
mySSH.command(f'rm -Rf {lSourcePath}', '\$', 15)
cls_containerize.CreateWorkspace(mySSH, lSourcePath, self.ranRepository, self.ranCommitID, self.ranTargetBranch, self.ranAllowMerge)
# we don't necessarily need a forced workspace cleanup, but in
# order to reduce the amount of data send to OpenShift, we
# manually delete all generated files in the workspace
mySSH.command(f'rm -rf {lSourcePath}/cmake_targets/ran_build', '\$', 30);
baseTag = 'develop'
forceBaseImageBuild = False
imageTag = 'develop'
if self.ranAllowMerge: # merging MR branch into develop -> temporary image
imageTag = 'ci-temp'
if self.ranTargetBranch == 'develop':
mySSH.command(f'git diff HEAD..origin/develop -- cmake_targets/build_oai cmake_targets/tools/build_helper docker/Dockerfile.base.rhel8.2 | grep --colour=never -i INDEX', '\$', 5)
result = re.search('index', mySSH.getBefore())
if result is not None:
forceBaseImageBuild = True
baseTag = 'ci-temp'
else:
forceBaseImageBuild = True
# logging to OC Cluster and then switch to corresponding project
mySSH.command(f'oc login -u {ocUserName} -p {ocPassword} --server {self.OCUrl}', '\$', 31)
if mySSH.getBefore().count('Login successful.') == 0:
logging.error('\u001B[1m OC Cluster Login Failed\u001B[0m')
mySSH.close()
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.OC_LOGIN_FAIL)
return False
mySSH.command(f'oc project {ocProjectName}', '\$', 30)
if mySSH.getBefore().count(f'Already on project "{ocProjectName}"') == 0 and mySSH.getBefore().count(f'Now using project "{self.OCProjectName}"') == 0:
logging.error(f'\u001B[1mUnable to access OC project {ocProjectName}\u001B[0m')
mySSH.command('oc logout', '\$', 30)
mySSH.close()
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.OC_PROJECT_FAIL)
return False
self._recreate_entitlements(mySSH)
status = True # flag to abandon compiling if any image fails
attemptedImages = []
if forceBaseImageBuild:
self._recreate_is_tag(mySSH, 'ran-base', baseTag, 'openshift/ran-base-is.yaml')
self._recreate_bc(mySSH, 'ran-base', baseTag, 'openshift/ran-base-bc.yaml')
ranbase_job = self._start_build(mySSH, 'ran-base')
attemptedImages += ['ran-base']
status = ranbase_job is not None and self._wait_build_end(mySSH, [ranbase_job], 600)
if not status: logging.error('failure during build of ran-base')
mySSH.command(f'oc logs {ranbase_job} > cmake_targets/log/ran-base.log', '\$', 10)
# recover logs by mounting image
self._retag_image_statement(mySSH, 'ran-base', 'ran-base', baseTag, 'openshift/ran-base-log-retrieval.yaml')
pod = self._deploy_pod(mySSH, 'openshift/ran-base-log-retrieval.yaml')
if pod is not None:
mySSH.command(f'mkdir -p cmake_targets/log/ran-base', '\$', 5)
mySSH.command(f'oc rsync {pod}:/oai-ran/cmake_targets/log/ cmake_targets/log/ran-base', '\$', 5)
self._undeploy_pod(mySSH, 'openshift/ran-base-log-retrieval.yaml')
else:
status = False
if status:
self._recreate_is_tag(mySSH, 'oai-physim', imageTag, 'openshift/oai-physim-is.yaml')
self._recreate_bc(mySSH, 'oai-physim', imageTag, 'openshift/oai-physim-bc.yaml')
self._retag_image_statement(mySSH, 'ran-base', 'image-registry.openshift-image-registry.svc:5000/oaicicd-ran/ran-base', baseTag, 'docker/Dockerfile.phySim.rhel8.2')
physim_job = self._start_build(mySSH, 'oai-physim')
attemptedImages += ['oai-physim']
self._recreate_is_tag(mySSH, 'ran-build', imageTag, 'openshift/ran-build-is.yaml')
self._recreate_bc(mySSH, 'ran-build', imageTag, 'openshift/ran-build-bc.yaml')
self._retag_image_statement(mySSH, 'ran-base', 'image-registry.openshift-image-registry.svc:5000/oaicicd-ran/ran-base', baseTag, 'docker/Dockerfile.build.rhel8.2')
ranbuild_job = self._start_build(mySSH, 'ran-build')
attemptedImages += ['ran-build']
wait = ranbuild_job is not None and physim_job is not None and self._wait_build_end(mySSH, [ranbuild_job, physim_job], 1200)
if not wait: logging.error('error during build of ranbuild_job or physim_job')
status = status and wait
mySSH.command(f'oc logs {ranbuild_job} > cmake_targets/log/ran-build.log', '\$', 10)
mySSH.command(f'oc logs {physim_job} > cmake_targets/log/oai-physim.log', '\$', 10)
if status:
self._recreate_is_tag(mySSH, 'oai-enb', imageTag, 'openshift/oai-enb-is.yaml')
self._recreate_bc(mySSH, 'oai-enb', imageTag, 'openshift/oai-enb-bc.yaml')
self._retag_image_statement(mySSH, 'ran-base', 'image-registry.openshift-image-registry.svc:5000/oaicicd-ran/ran-base', baseTag, 'docker/Dockerfile.eNB.rhel8.2')
self._retag_image_statement(mySSH, 'ran-build', 'image-registry.openshift-image-registry.svc:5000/oaicicd-ran/ran-build', imageTag, 'docker/Dockerfile.eNB.rhel8.2')
enb_job = self._start_build(mySSH, 'oai-enb')
attemptedImages += ['oai-enb']
self._recreate_is_tag(mySSH, 'oai-gnb', imageTag, 'openshift/oai-gnb-is.yaml')
self._recreate_bc(mySSH, 'oai-gnb', imageTag, 'openshift/oai-gnb-bc.yaml')
self._retag_image_statement(mySSH, 'ran-base', 'image-registry.openshift-image-registry.svc:5000/oaicicd-ran/ran-base', baseTag, 'docker/Dockerfile.gNB.rhel8.2')
self._retag_image_statement(mySSH, 'ran-build', 'image-registry.openshift-image-registry.svc:5000/oaicicd-ran/ran-build', imageTag, 'docker/Dockerfile.gNB.rhel8.2')
gnb_job = self._start_build(mySSH, 'oai-gnb')
attemptedImages += ['oai-gnb']
self._recreate_is_tag(mySSH, 'oai-lte-ue', imageTag, 'openshift/oai-lte-ue-is.yaml')
self._recreate_bc(mySSH, 'oai-lte-ue', imageTag, 'openshift/oai-lte-ue-bc.yaml')
self._retag_image_statement(mySSH, 'ran-base', 'image-registry.openshift-image-registry.svc:5000/oaicicd-ran/ran-base', baseTag, 'docker/Dockerfile.lteUE.rhel8.2')
self._retag_image_statement(mySSH, 'ran-build', 'image-registry.openshift-image-registry.svc:5000/oaicicd-ran/ran-build', imageTag, 'docker/Dockerfile.lteUE.rhel8.2')
lteue_job = self._start_build(mySSH, 'oai-lte-ue')
attemptedImages += ['oai-lte-ue']
self._recreate_is_tag(mySSH, 'oai-nr-ue', imageTag, 'openshift/oai-nr-ue-is.yaml')
self._recreate_bc(mySSH, 'oai-nr-ue', imageTag, 'openshift/oai-nr-ue-bc.yaml')
self._retag_image_statement(mySSH, 'ran-base', 'image-registry.openshift-image-registry.svc:5000/oaicicd-ran/ran-base', baseTag, 'docker/Dockerfile.nrUE.rhel8.2')
self._retag_image_statement(mySSH, 'ran-build', 'image-registry.openshift-image-registry.svc:5000/oaicicd-ran/ran-build', imageTag, 'docker/Dockerfile.nrUE.rhel8.2')
nrue_job = self._start_build(mySSH, 'oai-nr-ue')
attemptedImages += ['oai-nr-ue']
wait = enb_job is not None and gnb_job is not None and lteue_job is not None and nrue_job is not None and self._wait_build_end(mySSH, [enb_job, gnb_job, lteue_job, nrue_job], 600)
if not wait: logging.error('error during build of eNB/gNB/lteUE/nrUE')
status = status and wait
# recover logs
mySSH.command(f'oc logs {enb_job} > cmake_targets/log/oai-enb.log', '\$', 10)
mySSH.command(f'oc logs {gnb_job} > cmake_targets/log/oai-gnb.log', '\$', 10)
mySSH.command(f'oc logs {lteue_job} > cmake_targets/log/oai-lte-ue.log', '\$', 10)
mySSH.command(f'oc logs {nrue_job} > cmake_targets/log/oai-nr-ue.log', '\$', 10)
# split and analyze logs
imageSize = {}
for image in attemptedImages:
mySSH.command(f'mkdir -p cmake_targets/log/{image}', '\$', 5)
mySSH.command(f'python3 ci-scripts/docker_log_split.py --logfilename=cmake_targets/log/{image}.log', '\$', 5)
tag = imageTag if image != 'ran-base' else baseTag
size = self._get_image_size(mySSH, image, tag)
if size <= 0:
imageSize[image] = 'unknown -- BUILD FAILED'
status = False
else:
sizeMb = float(size) / 1000000
imageSize[image] = f'{sizeMb:.1f} Mbytes (uncompressed: ~{sizeMb*2.5:.1f} Mbytes)'
logging.info(f'\u001B[1m{image} size is {imageSize[image]}\u001B[0m')
grep_exp = "\|".join(attemptedImages)
mySSH.command(f'oc get images | grep -e \'{grep_exp}\' > cmake_targets/log/image_registry.log', '\$', 10);
build_log_name = f'build_log_{self.testCase_id}'
cls_containerize.CopyLogsToExecutor(mySSH, lSourcePath, build_log_name, lIpAddr, 'oaicicd', CONST.CI_NO_PASSWORD)
mySSH.command('for pod in $(oc get pods | tail -n +2 | awk \'{print $1}\'); do oc delete pod ${pod}; done', '\$', 60)
# logout will return eventually, but we don't care when -> start in background
mySSH.command('oc logout &', '\$', 5)
mySSH.close()
# Analyze the logs
collectInfo = cls_containerize.AnalyzeBuildLogs(build_log_name, attemptedImages, status)
for img in collectInfo:
for f in collectInfo[img]:
status = status and collectInfo[img][f]['status']
if not status:
logging.debug(collectInfo)
if status:
logging.info('\u001B[1m Building OAI Image(s) Pass\u001B[0m')
HTML.CreateHtmlTestRow('all', 'OK', CONST.ALL_PROCESSES_OK)
else:
logging.error('\u001B[1m Building OAI Images Failed\u001B[0m')
HTML.CreateHtmlTestRow('all', 'KO', CONST.ALL_PROCESSES_OK)
HTML.CreateHtmlNextTabHeaderTestRow(collectInfo, imageSize)
return status

View File

@@ -48,6 +48,107 @@ import sshconnection as SSH
import helpreadme as HELP
import constants as CONST
#-----------------------------------------------------------
# Helper functions used here and in other classes
# (e.g., cls_cluster.py)
#-----------------------------------------------------------
def CreateWorkspace(sshSession, sourcePath, ranRepository, ranCommitID, ranTargetBranch, ranAllowMerge):
# on RedHat/CentOS .git extension is mandatory
result = re.search('([a-zA-Z0-9\:\-\.\/])+\.git', ranRepository)
if result is not None:
full_ran_repo_name = ranRepository.replace('git/', 'git')
else:
full_ran_repo_name = ranRepository + '.git'
sshSession.command('mkdir -p ' + sourcePath, '\$', 5)
sshSession.command('cd ' + sourcePath, '\$', 5)
sshSession.command('if [ ! -e .git ]; then stdbuf -o0 git clone ' + full_ran_repo_name + ' .; else stdbuf -o0 git fetch --prune; fi', '\$', 600)
if sshSession.getBefore().count('done.') == 0:
logging.warning('did not find \'done.\' in git output while cloning/fetching, was not successful?')
sshSession.command('git config user.email "jenkins@openairinterface.org"', '\$', 5)
sshSession.command('git config user.name "OAI Jenkins"', '\$', 5)
sshSession.command('git clean -x -d -ff', '\$', 30)
sshSession.command('mkdir -p cmake_targets/log', '\$', 5)
# if the commit ID is provided use it to point to it
if ranCommitID != '':
sshSession.command('git checkout -f ' + ranCommitID, '\$', 30)
# if the branch is not develop, then it is a merge request and we need to do
# the potential merge. Note that merge conflicts should already been checked earlier
if ranAllowMerge:
if ranTargetBranch == '':
sshSession.command('git merge --ff origin/develop -m "Temporary merge for CI"', '\$', 5)
else:
logging.debug('Merging with the target branch: ' + ranTargetBranch)
sshSession.command('git merge --ff origin/' + ranTargetBranch + ' -m "Temporary merge for CI"', '\$', 5)
def CopyLogsToExecutor(sshSession, sourcePath, log_name, scpIp, scpUser, scpPw):
sshSession.command(f'cd {sourcePath}/cmake_targets', '\$', 5)
sshSession.command(f'rm -f {log_name}.zip', '\$', 5)
sshSession.command(f'mkdir -p {log_name}', '\$', 5)
sshSession.command(f'mv log/* {log_name}', '\$', 5)
sshSession.command(f'zip -r -qq {log_name}.zip {log_name}', '\$', 5)
# copy zip to executor for analysis
if (os.path.isfile(f'./{log_name}.zip')):
os.remove(f'./{log_name}.zip')
if (os.path.isdir(f'./{log_name}')):
shutil.rmtree(f'./{log_name}')
sshSession.copyin(scpIp, scpUser, scpPw, f'{sourcePath}/cmake_targets/{log_name}.zip', '.')
sshSession.command(f'rm -f {log_name}.zip','\$', 5)
ZipFile(f'{log_name}.zip').extractall('.')
def AnalyzeBuildLogs(buildRoot, images, globalStatus):
collectInfo = {}
for image in images:
files = {}
file_list = [f for f in os.listdir(f'{buildRoot}/{image}') if os.path.isfile(os.path.join(f'{buildRoot}/{image}', f)) and f.endswith('.txt')]
# Analyze the "sub-logs" of every target image
for fil in file_list:
errorandwarnings = {}
warningsNo = 0
errorsNo = 0
with open(f'{buildRoot}/{image}/{fil}', mode='r') as inputfile:
for line in inputfile:
result = re.search(' ERROR ', str(line))
if result is not None:
errorsNo += 1
result = re.search(' error:', str(line))
if result is not None:
errorsNo += 1
result = re.search(' WARNING ', str(line))
if result is not None:
warningsNo += 1
result = re.search(' warning:', str(line))
if result is not None:
warningsNo += 1
errorandwarnings['errors'] = errorsNo
errorandwarnings['warnings'] = warningsNo
errorandwarnings['status'] = globalStatus
files[fil] = errorandwarnings
# Analyze the target image
if os.path.isfile(f'{buildRoot}/{image}.log'):
errorandwarnings = {}
committed = False
tagged = False
with open(f'{buildRoot}/{image}.log', mode='r') as inputfile:
startOfTargetImageCreation = False # check for tagged/committed only after image created
for line in inputfile:
result = re.search(f'FROM .* [aA][sS] {image}$', str(line))
if result is not None:
startOfTargetImageCreation = True
if startOfTargetImageCreation:
lineHasTag = re.search(f'Successfully tagged {image}:', str(line)) is not None
tagged = tagged or lineHasTag
# the OpenShift Cluster builder prepends image registry URL
lineHasCommit = re.search(f'COMMIT [a-zA-Z0-9\.:/\-]*{image}', str(line)) is not None
committed = committed or lineHasCommit
errorandwarnings['errors'] = 0 if committed or tagged else 1
errorandwarnings['warnings'] = 0
errorandwarnings['status'] = committed or tagged
files['Target Image Creation'] = errorandwarnings
collectInfo[image] = files
return collectInfo
#-----------------------------------------------------------
# Class Declaration
#-----------------------------------------------------------
@@ -74,6 +175,7 @@ class Containerize():
self.eNB2SourceCodePath = ''
self.forcedWorkspaceCleanup = False
self.imageKind = ''
self.proxyCommit = None
self.eNB_instance = 0
self.eNB_serverId = ['', '', '']
self.yamlPath = ['', '', '']
@@ -90,8 +192,6 @@ class Containerize():
self.cliBuildOptions = ''
self.dockerfileprefix = ''
self.host = ''
self.allImagesSize = {}
self.collectInfo = {}
self.deployedContainers = []
self.tsharkStarted = False
@@ -114,35 +214,6 @@ class Containerize():
# Container management functions
#-----------------------------------------------------------
def _createWorkspace(self, sshSession, password, sourcePath):
# on RedHat/CentOS .git extension is mandatory
result = re.search('([a-zA-Z0-9\:\-\.\/])+\.git', self.ranRepository)
if result is not None:
full_ran_repo_name = self.ranRepository.replace('git/', 'git')
else:
full_ran_repo_name = self.ranRepository + '.git'
sshSession.command('mkdir -p ' + sourcePath, '\$', 5)
sshSession.command('cd ' + sourcePath, '\$', 5)
sshSession.command('if [ ! -e .git ]; then stdbuf -o0 git clone ' + full_ran_repo_name + ' .; else stdbuf -o0 git fetch --prune; fi', '\$', 600)
# Raphael: here add a check if git clone or git fetch went smoothly
sshSession.command('git config user.email "jenkins@openairinterface.org"', '\$', 5)
sshSession.command('git config user.name "OAI Jenkins"', '\$', 5)
sshSession.command('echo ' + password + ' | sudo -S git clean -x -d -ff', '\$', 30)
sshSession.command('mkdir -p cmake_targets/log', '\$', 5)
# if the commit ID is provided use it to point to it
if self.ranCommitID != '':
sshSession.command('git checkout -f ' + self.ranCommitID, '\$', 30)
# if the branch is not develop, then it is a merge request and we need to do
# the potential merge. Note that merge conflicts should already been checked earlier
if (self.ranAllowMerge):
if self.ranTargetBranch == '':
if (self.ranBranch != 'develop') and (self.ranBranch != 'origin/develop'):
sshSession.command('git merge --ff origin/develop -m "Temporary merge for CI"', '\$', 5)
else:
logging.debug('Merging with the target branch: ' + self.ranTargetBranch)
sshSession.command('git merge --ff origin/' + self.ranTargetBranch + ' -m "Temporary merge for CI"', '\$', 5)
def BuildImage(self, HTML):
if self.ranRepository == '' or self.ranBranch == '' or self.ranCommitID == '':
HELP.GenericHelp(CONST.Version)
@@ -210,13 +281,14 @@ class Containerize():
self.testCase_id = HTML.testCase_id
self._createWorkspace(mySSH, lPassWord, lSourcePath)
CreateWorkspace(mySSH, lSourcePath, self.ranRepository, self.ranCommitID, self.ranTargetBranch, self.ranAllowMerge)
# if asterix, copy the entitlement and subscription manager configurations
if self.host == 'Red Hat':
mySSH.command('mkdir -p tmp/ca/ tmp/entitlement/', '\$', 5)
mySSH.command('sudo cp /etc/rhsm/ca/redhat-uep.pem tmp/ca/', '\$', 5)
mySSH.command('sudo cp /etc/pki/entitlement/*.pem tmp/entitlement/', '\$', 5)
mySSH.command('mkdir -p ./etc-pki-entitlement ./rhsm-conf ./rhsm-ca', '\$', 5)
mySSH.command('sudo cp /etc/rhsm/rhsm.conf ./rhsm-conf/', '\$', 5)
mySSH.command('sudo cp /etc/rhsm/ca/redhat-uep.pem ./rhsm-ca/', '\$', 5)
mySSH.command('sudo cp /etc/pki/entitlement/*.pem ./etc-pki-entitlement/', '\$', 5)
baseImage = 'ran-base'
baseTag = 'develop'
@@ -245,32 +317,10 @@ class Containerize():
if forceBaseImageBuild:
mySSH.command(self.cli + ' build ' + self.cliBuildOptions + ' --target ' + baseImage + ' --tag ' + baseImage + ':' + baseTag + ' --file docker/Dockerfile.base' + self.dockerfileprefix + ' . > cmake_targets/log/ran-base.log 2>&1', '\$', 1600)
# First verify if the base image was properly created.
status = True
mySSH.command(self.cli + ' image inspect --format=\'Size = {{.Size}} bytes\' ' + baseImage + ':' + baseTag, '\$', 5)
allImagesSize = {}
if mySSH.getBefore().count('o such image') != 0:
logging.error('\u001B[1m Could not build properly ran-base\u001B[0m')
status = False
else:
result = re.search('Size *= *(?P<size>[0-9\-]+) *bytes', mySSH.getBefore())
if result is not None:
imageSize = float(result.group('size'))
imageSize = imageSize / 1000
if imageSize < 1000:
logging.debug('\u001B[1m ran-base size is ' + ('%.0f' % imageSize) + ' kbytes\u001B[0m')
self.allImagesSize['ran-base'] = str(round(imageSize,1)) + ' kbytes'
else:
imageSize = imageSize / 1000
if imageSize < 1000:
logging.debug('\u001B[1m ran-base size is ' + ('%.0f' % imageSize) + ' Mbytes\u001B[0m')
self.allImagesSize['ran-base'] = str(round(imageSize,1)) + ' Mbytes'
else:
imageSize = imageSize / 1000
logging.debug('\u001B[1m ran-base size is ' + ('%.3f' % imageSize) + ' Gbytes\u001B[0m')
self.allImagesSize['ran-base'] = str(round(imageSize,1)) + ' Gbytes'
else:
logging.debug('ran-base size is unknown')
# If the base image failed, no need to continue
if not status:
# Recover the name of the failed container?
mySSH.command(self.cli + ' ps --quiet --filter "status=exited" -n1 | xargs ' + self.cli + ' rm -f', '\$', 5)
mySSH.command(self.cli + ' image prune --force', '\$', 30)
@@ -280,20 +330,32 @@ class Containerize():
HTML.CreateHtmlTabFooter(False)
sys.exit(1)
else:
# Recover build logs, for the moment only possible when build is successful
mySSH.command(self.cli + ' create --name test ' + baseImage + ':' + baseTag, '\$', 5)
mySSH.command('mkdir -p cmake_targets/log/ran-base', '\$', 5)
mySSH.command(self.cli + ' cp test:/oai-ran/cmake_targets/log/. cmake_targets/log/ran-base', '\$', 5)
mySSH.command(self.cli + ' rm -f test', '\$', 5)
result = re.search('Size *= *(?P<size>[0-9\-]+) *bytes', mySSH.getBefore())
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'
else:
logging.debug('ran-base size is unknown')
# Recover build logs, for the moment only possible when build is successful
mySSH.command(self.cli + ' create --name test ' + baseImage + ':' + baseTag, '\$', 5)
mySSH.command('mkdir -p cmake_targets/log/ran-base', '\$', 5)
mySSH.command(self.cli + ' cp test:/oai-ran/cmake_targets/log/. cmake_targets/log/ran-base', '\$', 5)
mySSH.command(self.cli + ' rm -f test', '\$', 5)
# Build the target image(s)
status = True
attemptedImages = ['ran-base']
for image,pattern in imageNames:
attemptedImages += [image]
# the archived Dockerfiles have "ran-base:latest" as base image
# we need to update them with proper tag
mySSH.command('sed -i -e "s#' + baseImage + ':latest#' + baseImage + ':' + baseTag + '#" docker/Dockerfile.' + pattern + self.dockerfileprefix, '\$', 5)
mySSH.command(f'sed -i -e "s#{baseImage}:latest#{baseImage}:{baseTag}#" docker/Dockerfile.{pattern}{self.dockerfileprefix}', '\$', 5)
if image != 'ran-build':
mySSH.command('sed -i -e "s#' + "ran-build" + ':latest#' + "ran-build" + ':' + imageTag + '#" docker/Dockerfile.' + pattern + self.dockerfileprefix, '\$', 5)
mySSH.command(self.cli + ' build ' + self.cliBuildOptions + ' --target ' + image + ' --tag ' + image + ':' + imageTag + ' --file docker/Dockerfile.' + pattern + self.dockerfileprefix + ' . > cmake_targets/log/' + image + '.log 2>&1', '\$', 1200)
mySSH.command(f'sed -i -e "s#ran-build:latest#ran-build:{imageTag}#" docker/Dockerfile.{pattern}{self.dockerfileprefix}', '\$', 5)
mySSH.command(f'{self.cli} build {self.cliBuildOptions} --target {image} --tag {image}:{imageTag} --file docker/Dockerfile.{pattern}{self.dockerfileprefix} . > cmake_targets/log/{image}.log 2>&1', '\$', 1200)
# Flatten Image
if image != 'ran-build':
mySSH.command('python3 ./ci-scripts/flatten_image.py --tag ' + image + ':' + imageTag, '\$', 300)
@@ -307,120 +369,185 @@ class Containerize():
status = False
# Here we should check if the last container corresponds to a failed command and destroy it
mySSH.command(self.cli + ' ps --quiet --filter "status=exited" -n1 | xargs ' + self.cli + ' rm -f', '\$', 5)
self.allImagesSize[image] = 'N/A -- Build Failed'
allImagesSize[image] = 'N/A -- Build Failed'
break
else:
result = re.search('Size *= *(?P<size>[0-9\-]+) *bytes', mySSH.getBefore())
if result is not None:
imageSize = float(result.group('size'))
imageSize = imageSize / 1000
if imageSize < 1000:
logging.debug('\u001B[1m ' + image + ' size is ' + ('%.0f' % imageSize) + ' kbytes\u001B[0m')
self.allImagesSize[image] = str(round(imageSize,1)) + ' kbytes'
else:
imageSize = imageSize / 1000
if imageSize < 1000:
logging.debug('\u001B[1m ' + image + ' size is ' + ('%.0f' % imageSize) + ' Mbytes\u001B[0m')
self.allImagesSize[image] = str(round(imageSize,1)) + ' Mbytes'
else:
imageSize = imageSize / 1000
logging.debug('\u001B[1m ' + image + ' size is ' + ('%.3f' % imageSize) + ' Gbytes\u001B[0m')
self.allImagesSize[image] = str(round(imageSize,1)) + ' Gbytes'
size = float(result.group("size")) / 1000000
imageSizeStr = f'{size:.1f}'
logging.debug(f'\u001B[1m {image} size is {imageSizeStr} Mbytes\u001B[0m')
allImagesSize[image] = f'{imageSizeStr} Mbytes'
else:
logging.debug('ran-base size is unknown')
self.allImagesSize[image] = 'unknown'
logging.debug(f'{image} size is unknown')
allImagesSize[image] = 'unknown'
# Now pruning dangling images in between target builds
mySSH.command(self.cli + ' image prune --force', '\$', 30)
# Analyzing the logs
mySSH.command('cd ' + lSourcePath + '/cmake_targets', '\$', 5)
mySSH.command('mkdir -p build_log_' + self.testCase_id, '\$', 5)
mySSH.command('mv log/* ' + 'build_log_' + self.testCase_id, '\$', 5)
mySSH.command('cd ' + lSourcePath + '/cmake_targets', '\$', 5)
mySSH.command('rm -f build_log_' + self.testCase_id + '.zip || true', '\$', 5)
if (os.path.isfile('./build_log_' + self.testCase_id + '.zip')):
os.remove('./build_log_' + self.testCase_id + '.zip')
if (os.path.isdir('./build_log_' + self.testCase_id)):
shutil.rmtree('./build_log_' + self.testCase_id)
mySSH.command('zip -r -qq build_log_' + self.testCase_id + '.zip build_log_' + self.testCase_id, '\$', 5)
mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/build_log_' + self.testCase_id + '.zip', '.')
mySSH.command('rm -f build_log_' + self.testCase_id + '.zip','\$', 5)
# Remove all intermediate build images
# Remove all intermediate build images and clean up
if self.ranAllowMerge and forceBaseImageBuild:
mySSH.command(self.cli + ' image rm ' + baseImage + ':' + baseTag + ' || true', '\$', 30)
mySSH.command(self.cli + ' image rm ran-build:' + imageTag + ' || true','\$', 30)
# Cleaning any created tmp volume
mySSH.command(self.cli + ' volume prune --force || true','\$', 15)
mySSH.close()
ZipFile('build_log_' + self.testCase_id + '.zip').extractall('.')
mySSH.command(f'{self.cli} image rm {baseImage}:{baseTag} || true', '\$', 30)
mySSH.command(f'{self.cli} image rm ran-build:{imageTag}','\$', 30)
mySSH.command(f'{self.cli} volume prune --force','\$', 15)
#Trying to identify the errors and warnings for each built images
imageNames1 = imageNames
base = ('ran-base','ran')
imageNames1.insert(0, base)
for image,pattern in imageNames1:
files = {}
file_list = [f for f in os.listdir('build_log_' + self.testCase_id + '/' + image) if os.path.isfile(os.path.join('build_log_' + self.testCase_id + '/' + image, f)) and f.endswith('.txt')]
for fil in file_list:
errorandwarnings = {}
warningsNo = 0
errorsNo = 0
with open('build_log_{}/{}/{}'.format(self.testCase_id,image,fil), mode='r') as inputfile:
for line in inputfile:
result = re.search(' ERROR ', str(line))
if result is not None:
errorsNo += 1
result = re.search(' error:', str(line))
if result is not None:
errorsNo += 1
result = re.search(' WARNING ', str(line))
if result is not None:
warningsNo += 1
result = re.search(' warning:', str(line))
if result is not None:
warningsNo += 1
errorandwarnings['errors'] = errorsNo
errorandwarnings['warnings'] = warningsNo
errorandwarnings['status'] = status
files[fil] = errorandwarnings
# Let analyze the target image creation part
if os.path.isfile('build_log_{}/{}.log'.format(self.testCase_id,image)):
errorandwarnings = {}
with open('build_log_{}/{}.log'.format(self.testCase_id,image), mode='r') as inputfile:
startOfTargetImageCreation = False
buildStatus = False
for line in inputfile:
result = re.search('FROM .* [aA][sS] ' + image + '$', str(line))
if result is not None:
startOfTargetImageCreation = True
if startOfTargetImageCreation:
result = re.search('Successfully tagged ' + image + ':', str(line))
if result is not None:
buildStatus = True
result = re.search('COMMIT ' + image + ':', str(line))
if result is not None:
buildStatus = True
inputfile.close()
if buildStatus:
errorandwarnings['errors'] = 0
else:
errorandwarnings['errors'] = 1
errorandwarnings['warnings'] = 0
errorandwarnings['status'] = buildStatus
files['Target Image Creation'] = errorandwarnings
self.collectInfo[image] = files
# create a zip with all logs
build_log_name = f'build_log_{self.testCase_id}'
CopyLogsToExecutor(mySSH, lSourcePath, build_log_name, lIpAddr, lUserName, lPassWord)
mySSH.close()
# Analyze the logs
collectInfo = AnalyzeBuildLogs(build_log_name, attemptedImages, status)
if status:
logging.info('\u001B[1m Building OAI Image(s) Pass\u001B[0m')
HTML.CreateHtmlTestRow(self.imageKind, 'OK', CONST.ALL_PROCESSES_OK)
HTML.CreateHtmlNextTabHeaderTestRow(self.collectInfo, self.allImagesSize)
HTML.CreateHtmlNextTabHeaderTestRow(collectInfo, allImagesSize)
else:
logging.error('\u001B[1m Building OAI Images Failed\u001B[0m')
HTML.CreateHtmlTestRow(self.imageKind, 'KO', CONST.ALL_PROCESSES_OK)
HTML.CreateHtmlNextTabHeaderTestRow(self.collectInfo, self.allImagesSize)
HTML.CreateHtmlNextTabHeaderTestRow(collectInfo, allImagesSize)
HTML.CreateHtmlTabFooter(False)
sys.exit(1)
def BuildProxy(self, HTML):
if self.ranRepository == '' or self.ranBranch == '' or self.ranCommitID == '':
HELP.GenericHelp(CONST.Version)
sys.exit('Insufficient Parameter')
if self.eNB_serverId[self.eNB_instance] == '0':
lIpAddr = self.eNBIPAddress
lUserName = self.eNBUserName
lPassWord = self.eNBPassword
lSourcePath = self.eNBSourceCodePath
elif self.eNB_serverId[self.eNB_instance] == '1':
lIpAddr = self.eNB1IPAddress
lUserName = self.eNB1UserName
lPassWord = self.eNB1Password
lSourcePath = self.eNB1SourceCodePath
elif self.eNB_serverId[self.eNB_instance] == '2':
lIpAddr = self.eNB2IPAddress
lUserName = self.eNB2UserName
lPassWord = self.eNB2Password
lSourcePath = self.eNB2SourceCodePath
if lIpAddr == '' or lUserName == '' or lPassWord == '' or lSourcePath == '':
HELP.GenericHelp(CONST.Version)
sys.exit('Insufficient Parameter')
if self.proxyCommit is None:
HELP.GenericHelp(CONST.Version)
sys.exit('Insufficient Parameter (need proxyCommit for proxy build)')
logging.debug('Building on server: ' + lIpAddr)
mySSH = SSH.SSHConnection()
mySSH.open(lIpAddr, lUserName, lPassWord)
# Check that we are on Ubuntu
mySSH.command('hostnamectl', '\$', 5)
result = re.search('Ubuntu', mySSH.getBefore())
self.host = result.group(0)
if self.host != 'Ubuntu':
logging.error('\u001B[1m Can build proxy only on Ubuntu server\u001B[0m')
mySSH.close()
sys.exit(1)
self.cli = 'docker'
self.cliBuildOptions = '--no-cache'
# Workaround for some servers, we need to erase completely the workspace
if self.forcedWorkspaceCleanup:
mySSH.command('echo ' + lPassWord + ' | sudo -S rm -Rf ' + lSourcePath, '\$', 15)
oldRanCommidID = self.ranCommitID
oldRanRepository = self.ranRepository
oldRanAllowMerge = self.ranAllowMerge
self.ranCommitID = self.proxyCommit
self.ranRepository = 'https://github.com/EpiSci/oai-lte-5g-multi-ue-proxy.git'
self.ranAllowMerge = False
CreateWorkspace(mySSH, lSourcePath, self.ranRepository, self.ranCommitID, self.ranTargetBranch, self.ranAllowMerge)
# to prevent accidentally overwriting data that might be used later
self.ranCommitID = oldRanCommidID
self.ranRepository = oldRanRepository
self.ranAllowMerge = oldRanAllowMerge
# Let's remove any previous run artifacts if still there
mySSH.command(self.cli + ' image prune --force', '\$', 30)
# Remove any previous proxy image
mySSH.command(self.cli + ' image rm oai-lte-multi-ue-proxy:latest || true', '\$', 30)
tag = self.proxyCommit
logging.debug('building L2sim proxy image for tag ' + tag)
# check if the corresponding proxy image with tag exists. If not, build it
mySSH.command(self.cli + ' image inspect --format=\'Size = {{.Size}} bytes\' proxy:' + tag, '\$', 5)
buildProxy = mySSH.getBefore().count('o such image') != 0
if buildProxy:
mySSH.command(self.cli + ' build ' + self.cliBuildOptions + ' --target oai-lte-multi-ue-proxy --tag proxy:' + tag + ' --file docker/Dockerfile.ubuntu18.04 . > cmake_targets/log/proxy-build.log 2>&1', '\$', 180)
# Note: at this point, OAI images are flattened, but we cannot do this
# here, as the flatten script is not in the proxy repo
mySSH.command(self.cli + ' image inspect --format=\'Size = {{.Size}} bytes\' proxy:' + tag, '\$', 5)
if mySSH.getBefore().count('o such image') != 0:
logging.error('\u001B[1m Build of L2sim proxy failed\u001B[0m')
mySSH.close()
HTML.CreateHtmlTestRow('commit ' + tag, 'KO', CONST.ALL_PROCESSES_OK)
HTML.CreateHtmlTabFooter(False)
sys.exit(1)
else:
logging.debug('L2sim proxy image for tag ' + tag + ' already exists, skipping build')
# retag the build images to that we pick it up later
mySSH.command('docker image tag proxy:' + tag + ' oai-lte-multi-ue-proxy:latest', '\$', 5)
# no merge: is a push to develop, tag the image so we can push it to the registry
if not self.ranAllowMerge:
mySSH.command('docker image tag proxy:' + tag + ' proxy:develop', '\$', 5)
# we assume that the host on which this is built will also run the proxy. The proxy
# currently requires the following command, and the docker-compose up mechanism of
# the CI does not allow to run arbitrary commands. Note that the following actually
# belongs to the deployment, not the build of the proxy...
logging.warning('the following command belongs to deployment, but no mechanism exists to exec it there!')
mySSH.command('sudo ifconfig lo: 127.0.0.2 netmask 255.0.0.0 up', '\$', 5)
# Analyzing the logs
if buildProxy:
self.testCase_id = HTML.testCase_id
mySSH.command('cd ' + lSourcePath + '/cmake_targets', '\$', 5)
mySSH.command('mkdir -p proxy_build_log_' + self.testCase_id, '\$', 5)
mySSH.command('mv log/* ' + 'proxy_build_log_' + self.testCase_id, '\$', 5)
if (os.path.isfile('./proxy_build_log_' + self.testCase_id + '.zip')):
os.remove('./proxy_build_log_' + self.testCase_id + '.zip')
if (os.path.isdir('./proxy_build_log_' + self.testCase_id)):
shutil.rmtree('./proxy_build_log_' + self.testCase_id)
mySSH.command('zip -r -qq proxy_build_log_' + self.testCase_id + '.zip proxy_build_log_' + self.testCase_id, '\$', 5)
mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/build_log_' + self.testCase_id + '.zip', '.')
# don't delete such that we might recover the zips
#mySSH.command('rm -f build_log_' + self.testCase_id + '.zip','\$', 5)
# we do not analyze the logs (we assume the proxy builds fine at this stage),
# but need to have the following information to correctly display the HTML
files = {}
errorandwarnings = {}
errorandwarnings['errors'] = 0
errorandwarnings['warnings'] = 0
errorandwarnings['status'] = True
files['Target Image Creation'] = errorandwarnings
collectInfo = {}
collectInfo['proxy'] = files
mySSH.command('docker image inspect --format=\'Size = {{.Size}} bytes\' proxy:' + tag, '\$', 5)
result = re.search('Size *= *(?P<size>[0-9\-]+) *bytes', mySSH.getBefore())
allImagesSize = {}
if result is not None:
imageSize = float(result.group('size')) / 1000000
logging.debug('\u001B[1m proxy size is ' + ('%.0f' % imageSize) + ' Mbytes\u001B[0m')
allImagesSize['proxy'] = str(round(imageSize,1)) + ' Mbytes'
else:
logging.debug('proxy size is unknown')
allImagesSize['proxy'] = 'unknown'
# Cleaning any created tmp volume
mySSH.command(self.cli + ' volume prune --force || true','\$', 15)
mySSH.close()
logging.info('\u001B[1m Building L2sim Proxy Image Pass\u001B[0m')
HTML.CreateHtmlTestRow('commit ' + tag, 'OK', CONST.ALL_PROCESSES_OK)
HTML.CreateHtmlNextTabHeaderTestRow(collectInfo, allImagesSize)
def Copy_Image_to_Test_Server(self, HTML):
imageTag = 'develop'
if (self.ranAllowMerge):
@@ -441,9 +568,17 @@ class Containerize():
lUserName = self.eNB2UserName
lPassWord = self.eNB2Password
lSsh.open(lIpAddr, lUserName, lPassWord)
lSsh.command('docker save ' + self.imageToCopy + ':' + imageTag + ' | gzip > ' + self.imageToCopy + '-' + imageTag + '.tar.gz', '\$', 60)
lSsh.copyin(lIpAddr, lUserName, lPassWord, '~/' + self.imageToCopy + '-' + imageTag + '.tar.gz', '.')
lSsh.command('docker save ' + self.imageToCopy + ':' + imageTag + ' | gzip --fast > ' + self.imageToCopy + '-' + imageTag + '.tar.gz', '\$', 60)
ret = lSsh.copyin(lIpAddr, lUserName, lPassWord, '~/' + self.imageToCopy + '-' + imageTag + '.tar.gz', '.')
if ret != 0:
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.ALL_PROCESSES_OK)
self.exitStatus = 1
return False
lSsh.command('rm ' + self.imageToCopy + '-' + imageTag + '.tar.gz', '\$', 60)
if lSsh.getBefore().count('cannot remove'):
HTML.CreateHtmlTestRow('file not created by docker save', 'KO', CONST.ALL_PROCESSES_OK)
self.exitStatus = 1
return False
lSsh.close()
# Going to the Test Server
@@ -461,15 +596,26 @@ class Containerize():
lPassWord = self.eNB2Password
lSsh.open(lIpAddr, lUserName, lPassWord)
lSsh.copyout(lIpAddr, lUserName, lPassWord, './' + self.imageToCopy + '-' + imageTag + '.tar.gz', '~')
# copyout has no return code and will quit if something fails
lSsh.command('docker rmi ' + self.imageToCopy + ':' + imageTag, '\$', 10)
lSsh.command('docker load < ' + self.imageToCopy + '-' + imageTag + '.tar.gz', '\$', 60)
if lSsh.getBefore().count('o such file') or lSsh.getBefore().count('invalid tar header'):
logging.debug(lSsh.getBefore())
HTML.CreateHtmlTestRow('problem during docker load', 'KO', CONST.ALL_PROCESSES_OK)
self.exitStatus = 1
return False
lSsh.command('rm ' + self.imageToCopy + '-' + imageTag + '.tar.gz', '\$', 60)
if lSsh.getBefore().count('cannot remove'):
HTML.CreateHtmlTestRow('file not copied during scp?', 'KO', CONST.ALL_PROCESSES_OK)
self.exitStatus = 1
return False
lSsh.close()
if os.path.isfile('./' + self.imageToCopy + '-' + imageTag + '.tar.gz'):
os.remove('./' + self.imageToCopy + '-' + imageTag + '.tar.gz')
HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
return True
def DeployObject(self, HTML, EPC):
if self.eNB_serverId[self.eNB_instance] == '0':
@@ -495,7 +641,7 @@ class Containerize():
mySSH = SSH.SSHConnection()
mySSH.open(lIpAddr, lUserName, lPassWord)
self._createWorkspace(mySSH, lPassWord, lSourcePath)
CreateWorkspace(mySSH, lSourcePath, self.ranRepository, self.ranCommitID, self.ranTargetBranch, self.ranAllowMerge)
mySSH.command('cd ' + lSourcePath + '/' + self.yamlPath[self.eNB_instance], '\$', 5)
mySSH.command('cp docker-compose.yml ci-docker-compose.yml', '\$', 5)
@@ -518,7 +664,7 @@ class Containerize():
result = re.search('service=(?P<svc_name>[a-zA-Z0-9\_]+)', mySSH.getBefore())
if result is not None:
svcName = result.group('svc_name')
mySSH.command('docker-compose --file ci-docker-compose.yml up -d ' + svcName, '\$', 10)
mySSH.command('docker-compose --file ci-docker-compose.yml up -d ' + svcName, '\$', 15)
# Checking Status
mySSH.command('docker-compose --file ci-docker-compose.yml config', '\$', 5)
@@ -545,6 +691,9 @@ class Containerize():
logging.debug(' -- ' + str(unhealthyNb) + ' unhealthy container(s)')
logging.debug(' -- ' + str(startingNb) + ' still starting container(s)')
self.testCase_id = HTML.testCase_id
self.eNB_logFile[self.eNB_instance] = 'enb_' + self.testCase_id + '.log'
status = False
if healthyNb == 1:
cnt = 0
@@ -559,16 +708,19 @@ class Containerize():
status = True
logging.info('\u001B[1m Deploying OAI object Pass\u001B[0m')
time.sleep(10)
else:
# containers are unhealthy, so we won't start. However, logs are stored at the end
# in UndeployObject so we here store the logs of the unhealthy container to report it
mySSH.command('docker logs ' + containerName + ' > ' + lSourcePath + '/cmake_targets/' + self.eNB_logFile[self.eNB_instance], '\$', 30)
mySSH.close()
self.testCase_id = HTML.testCase_id
self.eNB_logFile[self.eNB_instance] = 'enb_' + self.testCase_id + '.log'
if status:
HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
else:
self.exitStatus = 1
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.ALL_PROCESSES_OK)
def UndeployObject(self, HTML, RAN):
if self.eNB_serverId[self.eNB_instance] == '0':
lIpAddr = self.eNBIPAddress
@@ -588,7 +740,7 @@ class Containerize():
if lIpAddr == '' or lUserName == '' or lPassWord == '' or lSourcePath == '':
HELP.GenericHelp(CONST.Version)
sys.exit('Insufficient Parameter')
logging.debug('\u001B[1m Deploying OAI Object on server: ' + lIpAddr + '\u001B[0m')
logging.debug('\u001B[1m Undeploying OAI Object from server: ' + lIpAddr + '\u001B[0m')
mySSH = SSH.SSHConnection()
mySSH.open(lIpAddr, lUserName, lPassWord)
mySSH.command('cd ' + lSourcePath + '/' + self.yamlPath[self.eNB_instance], '\$', 5)
@@ -793,12 +945,26 @@ class Containerize():
logging.debug(cmd)
subprocess.run(cmd, shell=True)
# if the containers are running, recover the logs!
# check which containers are running for log recovery later
cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml ps --all'
logging.debug(cmd)
deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30)
deployStatusLogs = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30)
# Stop the containers to shut down objects
logging.debug('\u001B[1m Stopping containers \u001B[0m')
cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml stop'
logging.debug(cmd)
try:
deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=100)
except Exception as e:
self.exitStatus = 1
logging.error('Could not stop containers')
HTML.CreateHtmlTestRow('Could not stop', 'KO', CONST.ALL_PROCESSES_OK)
logging.error('\u001B[1m Undeploying OAI Object(s) FAILED\u001B[0m')
return
anyLogs = False
for state in deployStatus.split('\n'):
for state in deployStatusLogs.split('\n'):
res = re.search('Name|----------', state)
if res is not None:
continue

View File

@@ -453,13 +453,11 @@ class HTMLManagement():
self.htmlFile.write(' <td bgcolor = "red" >' + str(parameters['warnings']) + '</td>\n')
elif (parameters['warnings'] == 0):
self.htmlFile.write(' <td bgcolor = "green" >' + str(parameters['warnings']) + '</td>\n')
elif ((parameters['warnings'] > 0) and (parameters['warnings'] <= 20)):
self.htmlFile.write(' <td bgcolor = "orange" >' + str(parameters['warnings']) + '</td>\n')
else:
self.htmlFile.write(' <td bgcolor = "red" >' + str(parameters['warnings']) + '</td>\n')
self.htmlFile.write(' <td bgcolor = "orange" >' + str(parameters['warnings']) + '</td>\n')
if (parameters['errors'] == 0) and (parameters['warnings'] == 0):
self.htmlFile.write(' <th colspan=' + str(1+self.htmlUEConnected) + ' bgcolor = "green" ><font color="white">OK </font></th>\n')
elif (parameters['errors'] == 0) and ((parameters['warnings'] > 0) and (parameters['warnings'] <= 20)):
elif (parameters['errors'] == 0):
self.htmlFile.write(' <th colspan=' + str(1+self.htmlUEConnected) + ' bgcolor = "orange" ><font color="white">OK </font></th>\n')
else:
self.htmlFile.write(' <th colspan=' + str(1+self.htmlUEConnected) + ' bgcolor = "red" > NOT OK </th>\n')

View File

@@ -1329,7 +1329,7 @@ class OaiCiTest():
SSH.open(self.ADBIPAddress, self.ADBUserName, self.ADBPassword)
if self.ADBCentralized:
SSH.command('adb devices', '\$', 15)
self.UEDevices = re.findall("\\\\r\\\\n([A-Za-z0-9]+)\\\\tdevice",SSH.getBefore())
self.UEDevices = re.findall('\r\n([A-Za-z0-9]+)\tdevice',SSH.getBefore())
#report number and id of devices found
msg = "UEDevices found by GetAllUEDevices : " + " ".join(self.UEDevices)
logging.debug(msg)
@@ -1379,8 +1379,7 @@ class OaiCiTest():
SSH.open(self.ADBIPAddress, self.ADBUserName, self.ADBPassword)
if self.ADBCentralized:
SSH.command('lsusb | egrep --colour=never "Future Technology Devices International, Ltd FT2232C" | sed -e "s#:.*##" -e "s# #_#g"', '\$', 15)
#self.CatMDevices = re.findall("\\\\r\\\\n([A-Za-z0-9_]+)",SSH.getBefore())
self.CatMDevices = re.findall("\\\\r\\\\n([A-Za-z0-9_]+)",SSH.getBefore())
self.CatMDevices = re.findall('\r\n([A-Za-z0-9_]+)',SSH.getBefore())
else:
if (os.path.isfile('./modules_list.txt')):
os.remove('./modules_list.txt')
@@ -2046,7 +2045,7 @@ class OaiCiTest():
req_bandwidth = '%.1f Gbits/sec' % req_bw
req_bw = req_bw * 1000000000
result = re.search('Server Report:\\\\r\\\\n(?:|\[ *\d+\].*) (?P<bitrate>[0-9\.]+ [KMG]bits\/sec) +(?P<jitter>[0-9\.]+ ms) +(\d+\/..\d+) +(\((?P<packetloss>[0-9\.]+)%\))', SSH.getBefore())
result = re.search('Server Report:\r\n(?:|\[ *\d+\].*) (?P<bitrate>[0-9\.]+ [KMG]bits\/sec) +(?P<jitter>[0-9\.]+ ms) +(\d+\/..\d+) +(\((?P<packetloss>[0-9\.]+)%\))', SSH.getBefore())
if result is not None:
bitrate = result.group('bitrate')
packetloss = result.group('packetloss')
@@ -2262,7 +2261,7 @@ class OaiCiTest():
def Iperf_analyzeV3Output(self, lock, UE_IPAddress, device_id, statusQueue,SSH):
result = re.search('(?P<bitrate>[0-9\.]+ [KMG]bits\/sec) +(?:|[0-9\.]+ ms +\d+\/\d+ \((?P<packetloss>[0-9\.]+)%\)) +(?:|receiver)\\\\r\\\\n(?:|\[ *\d+\] Sent \d+ datagrams)\\\\r\\\\niperf Done\.', SSH.getBefore())
result = re.search('(?P<bitrate>[0-9\.]+ [KMG]bits\/sec) +(?:|[0-9\.]+ ms +\d+\/\d+ \((?P<packetloss>[0-9\.]+)%\)) +(?:|receiver)\r\n(?:|\[ *\d+\] Sent \d+ datagrams)\r\niperf Done\.', SSH.getBefore())
if result is None:
result = re.search('(?P<error>iperf: error - [a-zA-Z0-9 :]+)', SSH.getBefore())
lock.acquire()
@@ -3865,7 +3864,7 @@ class OaiCiTest():
SSH = sshconnection.SSHConnection()
SSH.open(IPAddress, UserName, Password)
SSH.command('lsb_release -a', '\$', 5)
result = re.search('Description:\\\\t(?P<os_type>[a-zA-Z0-9\-\_\.\ ]+)', SSH.getBefore())
result = re.search('Description:\t(?P<os_type>[a-zA-Z0-9\-\_\.\ ]+)', SSH.getBefore())
if result is not None:
OsVersion = result.group('os_type')
logging.debug('OS is: ' + OsVersion)
@@ -3883,13 +3882,13 @@ class OaiCiTest():
logging.debug('OS is: ' + OsVersion)
HTML.OsVersion[idx]=OsVersion
SSH.command('uname -r', '\$', 5)
result = re.search('uname -r\\\\r\\\\n(?P<kernel_version>[a-zA-Z0-9\-\_\.]+)', SSH.getBefore())
result = re.search('uname -r\r\n(?P<kernel_version>[a-zA-Z0-9\-\_\.]+)', SSH.getBefore())
if result is not None:
KernelVersion = result.group('kernel_version')
logging.debug('Kernel Version is: ' + KernelVersion)
HTML.KernelVersion[idx]=KernelVersion
SSH.command('dpkg --list | egrep --color=never libuhd003', '\$', 5)
result = re.search('libuhd003:amd64 *(?P<uhd_version>[0-9\.]+)', SSH.getBefore())
SSH.command('dpkg --list | egrep --color=never libuhd', '\$', 5)
result = re.search('libuhd.*:amd64 *(?P<uhd_version>[0-9\.]+)', SSH.getBefore())
if result is not None:
UhdVersion = result.group('uhd_version')
logging.debug('UHD Version is: ' + UhdVersion)
@@ -3902,7 +3901,7 @@ class OaiCiTest():
logging.debug('UHD Version is: ' + UhdVersion)
HTML.UhdVersion[idx]=UhdVersion
SSH.command('echo ' + Password + ' | sudo -S uhd_find_devices', '\$', 180)
usrp_boards = re.findall('product: ([0-9A-Za-z]+)\\\\r\\\\n', SSH.getBefore())
usrp_boards = re.findall('product: ([0-9A-Za-z]+)', SSH.getBefore())
count = 0
for board in usrp_boards:
if count == 0:
@@ -3914,14 +3913,18 @@ class OaiCiTest():
logging.debug('USRP Board(s) : ' + UsrpBoard)
HTML.UsrpBoard[idx]=UsrpBoard
SSH.command('lscpu', '\$', 5)
result = re.search('CPU\(s\): *(?P<nb_cpus>[0-9]+).*Model name: *(?P<model>[a-zA-Z0-9\-\_\.\ \(\)]+).*CPU MHz: *(?P<cpu_mhz>[0-9\.]+)', SSH.getBefore())
result = re.search('CPU\(s\): *(?P<nb_cpus>[0-9]+)', SSH.getBefore())
if result is not None:
CpuNb = result.group('nb_cpus')
logging.debug('nb_cpus: ' + CpuNb)
HTML.CpuNb[idx]=CpuNb
result = re.search('Model name: *(?P<model>[a-zA-Z0-9\-\_\.\ \(\)]+)', SSH.getBefore())
if result is not None:
CpuModel = result.group('model')
logging.debug('model: ' + CpuModel)
HTML.CpuModel[idx]=CpuModel
result = re.search('CPU MHz: *(?P<cpu_mhz>[0-9\.]+)', SSH.getBefore())
if result is not None:
CpuMHz = result.group('cpu_mhz') + ' MHz'
logging.debug('cpu_mhz: ' + CpuMHz)
HTML.CpuMHz[idx]=CpuMHz

View File

@@ -56,7 +56,6 @@ class PhySim:
self.__workSpacePath=''
self.__buildLogFile='compile_phy_sim.log'
self.__runLogFile=''
self.__runResults=[]
self.__runLogPath='phy_sim_logs'
@@ -64,20 +63,20 @@ class PhySim:
#PRIVATE Methods
#-----------------
def __CheckResults_PhySim(self,HTML,CONST,testcase_id):
def __CheckResults_LDPCTest(self,HTML,CONST,testcase_id):
mySSH = sshconnection.SSHConnection()
mySSH.open(self.eNBIpAddr, self.eNBUserName, self.eNBPassWord)
#retrieve run log file and store it locally$
mySSH.copyin(self.eNBIpAddr, self.eNBUserName, self.eNBPassWord, self.__workSpacePath+self.__runLogFile, '.')
mySSH.close()
#parse results looking for Encoding and Decoding mean values
self.__runResults=[]
runResults=[]
with open(self.__runLogFile) as f:
for line in f:
if 'mean' in line:
self.__runResults.append(line)
runResults.append(line)
#the values are appended for each mean value (2), so we take these 2 values from the list
info=self.__runResults[0]+self.__runResults[1]
info = runResults[0] + runResults[1]
#once parsed move the local logfile to its folder for tidiness
os.system('mv '+self.__runLogFile+' '+ self.__runLogPath+'/.')
@@ -89,6 +88,38 @@ class PhySim:
HTML.CreateHtmlTestRowQueue(self.runargs, 'OK', 1, html_queue)
return HTML
def __CheckResults_NRulsimTest(self, HTML, CONST, testcase_id):
html_queue = SimpleQueue()
#retrieve run log file and store it locally
mySSH = sshconnection.SSHConnection()
filename = self.__workSpacePath + self.__runLogFile
ret = mySSH.copyin(self.eNBIpAddr, self.eNBUserName, self.eNBPassWord, filename, '.')
if ret != 0:
error_msg = f'could not recover test result file {filename}'
logging.error(error_msg)
html_queue.put(f'<pre style="background-color:white">{error_msg}</pre>')
HTML.CreateHtmlTestRowQueue("could not recover results", 'KO', 1, html_queue)
self.exitStatus = 1
return HTML
PUSCH_OK = False
with open(self.__runLogFile) as f:
PUSCH_OK = 'PUSCH test OK' in f.read()
# once parsed move the local logfile to its folder for tidiness
os.system(f'mv {self.__runLogFile} {self.__runLogPath}/.')
#updating the HTML with results
if PUSCH_OK:
html_queue.put('<pre style="background-color:white">succeeded</pre>')
HTML.CreateHtmlTestRowQueue(self.runargs, 'OK', 1, html_queue)
else:
error_msg = 'error: no "PUSCH test OK"'
logging.error(error_msg)
html_queue.put(f'<pre style="background-color:white">{error_msg}</pre>')
HTML.CreateHtmlTestRowQueue(self.runargs, 'KO', 1, html_queue)
self.exitStatus = 1
return HTML
def __CheckBuild_PhySim(self, HTML, CONST):
self.__workSpacePath=self.eNBSourceCodePath+'/cmake_targets/'
@@ -100,21 +131,16 @@ class PhySim:
mySSH.command('rm ' + self.__workSpacePath+self.__runLogFile, '\$', 5)
mySSH.close()
#check build result from local compile log file
buildStatus=False
with open(self.__buildLogFile) as f:
#nr_prachsim is the last compile step
if 'nr_prachsim compiled' in f.read():
buildStatus=True
#update HTML based on build status
if buildStatus:
HTML.CreateHtmlTestRow(self.buildargs, 'OK', CONST.ALL_PROCESSES_OK, 'LDPC')
self.exitStatus=0
else:
logging.error('\u001B[1m Building Physical Simulators Failed\u001B[0m')
HTML.CreateHtmlTestRow(self.buildargs, 'KO', CONST.ALL_PROCESSES_OK, 'LDPC')
HTML.CreateHtmlTabFooter(False)
#exitStatus=1 will do a sys.exit in main
self.exitStatus=1
if 'BUILD SHOULD BE SUCCESSFUL' in f.read():
HTML.CreateHtmlTestRow(self.buildargs, 'OK', CONST.ALL_PROCESSES_OK, 'PhySim')
self.exitStatus=0
return HTML
logging.error('\u001B[1m Building Physical Simulators Failed\u001B[0m')
HTML.CreateHtmlTestRow(self.buildargs, 'KO', CONST.ALL_PROCESSES_OK, 'LDPC')
HTML.CreateHtmlTabFooter(False)
#exitStatus=1 will do a sys.exit in main
self.exitStatus = 1
return HTML
@@ -163,8 +189,7 @@ class PhySim:
mySSH.command('source oaienv', '\$', 5)
mySSH.command('cd cmake_targets', '\$', 5)
mySSH.command('mkdir -p log', '\$', 5)
mySSH.command('chmod 777 log', '\$', 5)
mySSH.command('stdbuf -o0 ./build_oai ' + self.buildargs + ' 2>&1 | stdbuf -o0 tee ' + self.__buildLogFile, 'Bypassing the Tests|build have failed', 1500)
mySSH.command(f'./build_oai {self.buildargs} 2>&1 | tee {self.__buildLogFile}', '\$', 1500)
mySSH.close()
#check build status and update HTML object
@@ -173,7 +198,8 @@ class PhySim:
return lHTML
def Run_PhySim(self,htmlObj,constObj,testcase_id):
def Run_LDPCTest(self,htmlObj,constObj,testcase_id):
self.__workSpacePath = self.eNBSourceCodePath+'/cmake_targets/'
#create run logs folder locally
os.system('mkdir -p ./'+self.__runLogPath)
#log file is tc_<testcase_id>.log remotely
@@ -187,5 +213,18 @@ class PhySim:
mySSH.close()
#return updated HTML to main
lHTML = cls_oai_html.HTMLManagement()
lHTML=self.__CheckResults_PhySim(htmlObj,constObj,testcase_id)
lHTML=self.__CheckResults_LDPCTest(htmlObj,constObj,testcase_id)
return lHTML
def Run_NRulsimTest(self, htmlObj, constObj, testcase_id):
self.__workSpacePath=self.eNBSourceCodePath+'/cmake_targets/'
os.system(f'mkdir -p ./{self.__runLogPath}')
self.__runLogFile = f'physim_{testcase_id}.log'
mySSH = sshconnection.SSHConnection()
mySSH.open(self.eNBIpAddr, self.eNBUserName, self.eNBPassWord)
mySSH.command(f'cd {self.__workSpacePath}', '\$', 5)
mySSH.command(f'sudo {self.__workSpacePath}ran_build/build/nr_ulsim {self.runargs} > {self.__runLogFile} 2>&1', '\$', 30)
mySSH.close()
#return updated HTML to main
lHTML = self.__CheckResults_NRulsimTest(htmlObj, constObj, testcase_id)
return lHTML

View File

@@ -115,33 +115,9 @@ class PhySim:
mySSH.command('git merge --ff origin/' + self.ranTargetBranch + ' -m "Temporary merge for CI"', '\$', 5)
else:
imageTag = "develop"
# Check if image is exist on the Red Hat server, before pushing it to OC cluster
mySSH.command('sudo podman image inspect --format="Size = {{.Size}} bytes" oai-physim:' + imageTag, '\$', 60)
if mySSH.getBefore().count('no such image') != 0:
logging.error('\u001B[1m No such image oai-physim\u001B[0m')
mySSH.close()
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.PHYSIM_IMAGE_ABSENT)
RAN.prematureExit = True
return
else:
result = re.search('Size *= *(?P<size>[0-9\-]+) *bytes', mySSH.getBefore())
if result is not None:
imageSize = float(result.group('size'))
imageSize = imageSize / 1000
if imageSize < 1000:
logging.debug('\u001B[1m oai-physim size is ' + ('%.0f' % imageSize) + ' kbytes\u001B[0m')
else:
imageSize = imageSize / 1000
if imageSize < 1000:
logging.debug('\u001B[1m oai-physim size is ' + ('%.0f' % imageSize) + ' Mbytes\u001B[0m')
else:
imageSize = imageSize / 1000
logging.debug('\u001B[1m oai-physim is ' + ('%.3f' % imageSize) + ' Gbytes\u001B[0m')
else:
logging.debug('oai-physim size is unknown')
# logging to OC Cluster and then switch to corresponding project
mySSH.command(f'oc login -u {ocUserName} -p {ocPassword}', '\$', 30)
mySSH.command(f'oc login -u {ocUserName} -p {ocPassword} --server https://api.oai.cs.eurecom.fr:6443', '\$', 30)
if mySSH.getBefore().count('Login successful.') == 0:
logging.error('\u001B[1m OC Cluster Login Failed\u001B[0m')
mySSH.close()
@@ -161,46 +137,7 @@ class PhySim:
else:
logging.debug(f'\u001B[1m Now using project {ocProjectName}\u001B[0m')
# Tag the image and push to the OC cluster
mySSH.command('oc whoami -t | sudo podman login -u ' + ocUserName + ' --password-stdin https://default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/ --tls-verify=false', '\$', 30)
if mySSH.getBefore().count('Login Succeeded!') == 0:
logging.error('\u001B[1m Podman Login to OC Cluster Registry Failed\u001B[0m')
mySSH.command('oc logout', '\$', 30)
mySSH.close()
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.OC_LOGIN_FAIL)
RAN.prematureExit = True
return
else:
logging.debug('\u001B[1m Podman Login to OC Cluster Registry Successfully\u001B[0m')
time.sleep(2)
mySSH.command('oc create -f openshift/oai-physim-image-stream.yml || true', '\$', 30)
if mySSH.getBefore().count('(AlreadyExists):') == 0 and mySSH.getBefore().count('created') == 0:
logging.error(f'\u001B[1m Image Stream "oai-physim" Creation Failed on OC Cluster {ocProjectName}\u001B[0m')
mySSH.command('sudo podman logout https://default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/', '\$', 6)
mySSH.command('oc logout', '\$', 30)
mySSH.close()
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.OC_IS_FAIL)
RAN.prematureExit = True
return
else:
logging.debug(f'\u001B[1m Image Stream "oai-physim" created on OC project {ocProjectName}\u001B[0m')
time.sleep(2)
mySSH.command(f'sudo podman tag oai-physim:{imageTag} default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/{self.OCProjectName}/oai-physim:{imageTag}', '\$', 30)
time.sleep(2)
mySSH.command(f'sudo podman push default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/{self.OCProjectName}/oai-physim:{imageTag} --tls-verify=false', '\$', 180)
if mySSH.getBefore().count('Storing signatures') == 0:
logging.error('\u001B[1m Image "oai-physim" push to OC Cluster Registry Failed\u001B[0m')
mySSH.command('sudo podman logout https://default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/', '\$', 6)
mySSH.command('oc logout', '\$', 30)
mySSH.close()
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.OC_IS_FAIL)
RAN.prematureExit = True
return
else:
logging.debug('\u001B[1m Image "oai-physim" push to OC Cluster Registry Successfully\u001B[0m')
# Using helm charts deployment
time.sleep(5)
mySSH.command(f'grep -rl OAICICD_PROJECT ./charts/ | xargs sed -i -e "s#OAICICD_PROJECT#{ocProjectName}#"', '\$', 30)
mySSH.command(f'sed -i -e "s#TAG#{imageTag}#g" ./charts/physims/values.yaml', '\$', 6)
mySSH.command('helm install physim ./charts/physims/ 2>&1 | tee -a cmake_targets/log/physim_helm_summary.txt', '\$', 30)
@@ -213,9 +150,6 @@ class PhySim:
mySSH.command('oc get pods -l app.kubernetes.io/instance=physim', '\$', 6, resync=True)
if re.search('No resources found', mySSH.getBefore()):
isFinished1 = True
mySSH.command(f'sudo podman rmi default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/{self.OCProjectName}/oai-physim:{imageTag}', '\$', 30)
mySSH.command('oc delete is oai-physim', '\$', 30)
mySSH.command('sudo podman logout https://default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/', '\$', 6)
mySSH.command('oc logout', '\$', 30)
mySSH.close()
self.AnalyzeLogFile_phySim(HTML)
@@ -244,9 +178,6 @@ class PhySim:
mySSH.command('oc get pods -l app.kubernetes.io/instance=physim', '\$', 6, resync=True)
if re.search('No resources found', mySSH.getBefore()):
isFinished1 = True
mySSH.command(f'sudo podman rmi default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/{self.OCProjectName}/oai-physim:{imageTag}', '\$', 6)
mySSH.command('oc delete is oai-physim', '\$', 6)
mySSH.command('sudo podman logout https://default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/', '\$', 6)
mySSH.command('oc logout', '\$', 30)
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.OC_PHYSIM_DEPLOY_FAIL)
HTML.CreateHtmlTestRowPhySimTestResult(self.testSummary,self.testResult)
@@ -304,10 +235,6 @@ class PhySim:
isFinished1 = True
if isFinished1 == True:
logging.debug('\u001B[1m UnDeployed PhySim Successfully on OC Cluster\u001B[0m')
mySSH.command(f'sudo podman rmi default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/{self.OCProjectName}/oai-physim:{imageTag}', '\$', 6)
mySSH.command('oc delete is oai-physim', '\$', 6)
logging.debug('\u001B[1m Deleted the Image and ImageStream\u001B[0m')
mySSH.command('sudo podman logout https://default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/', '\$', 6)
mySSH.command('oc logout', '\$', 6)
mySSH.close()
self.AnalyzeLogFile_phySim(HTML)

View File

@@ -321,20 +321,6 @@ class StaticCodeAnalysis():
if ret is not None:
analyzed = True
if analyzed:
ret = re.search('Nb Files that do NOT follow OAI rules: (?P<nb_errors>[0-9\.]+)', str(line))
if ret is not None:
nbFilesNotFormatted = int(ret.group('nb_errors'))
if re.search('=== Files not properly formatted ===', str(line)) is not None:
listFiles = True
if listFiles:
if re.search('Removing intermediate container', str(line)) is not None:
listFiles = False
elif re.search('Running in|Files not properly formatted', str(line)) is not None:
pass
else:
listFilesNotFormatted.append(str(line).strip())
if re.search('=== Files with incorrect define protection ===', str(line)) is not None:
circularHeaderDependency = True
if circularHeaderDependency:

View File

@@ -214,7 +214,6 @@ L1s = (
{
num_cc = 1;
tr_n_preference = "local_mac";
thread_pool_size = 8;
}
);

View File

@@ -11,22 +11,7 @@ gNBs =
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 40960;
plmn_list = ({
mcc = 208;
mnc = 95;
mnc_length = 2;
snssaiList = (
{
sst = 1;
sd = 0x1; // 0 false, else true
},
{
sst = 1;
sd = 0x112233; // 0 false, else true
}
);
});
plmn_list = ({ mcc = 208; mnc = 95; mnc_length = 2; snssaiList = ({ sst = 1 }) });
nr_cellid = 12345678L;
@@ -214,52 +199,6 @@ MACRLCs = (
}
);
L1s = (
{
num_cc = 1;
tr_n_preference = "local_mac";
thread_pool_size = 8;
prach_dtx_threshold = 120;
pucch0_dtx_threshold = 150;
}
);
RUs = (
{
local_rf = "yes"
nb_tx = 1
nb_rx = 1
att_tx = 0
att_rx = 0;
bands = [78];
max_pdschReferenceSignalPower = -27;
max_rxgain = 75;
eNB_instances = [0];
#beamforming 1x4 matrix:
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
#clock_src = "external";
sdr_addrs = "mgmt_addr=172.21.19.14,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal"
}
);
THREAD_STRUCT = (
{
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config = "PARALLEL_SINGLE_THREAD";
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config = "WORKER_ENABLE";
}
);
rfsimulator :
{
serveraddr = "server";
serverport = "4043";
options = (); #("saviq"); or/and "chanmod"
modelname = "AWGN";
IQfile = "/tmp/rfsimulator.iqs";
};
security = {
# preferred ciphering algorithms
# the first one of the list that an UE supports in chosen

View File

@@ -218,16 +218,6 @@ MACRLCs = (
}
)
THREAD_STRUCT = (
{
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config = "WORKER_ENABLE";
}
);
log_config =
{
global_log_level ="info";

View File

@@ -11,22 +11,7 @@ gNBs =
// 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;
sd = 0x1; // 0 false, else true
},
{
sst = 1;
sd = 0x112233; // 0 false, else true
}
);
});
plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1 }) });
nr_cellid = 12345678L;
@@ -215,52 +200,6 @@ MACRLCs = (
}
);
L1s = (
{
num_cc = 1;
tr_n_preference = "local_mac";
thread_pool_size = 8;
prach_dtx_threshold = 120;
pucch0_dtx_threshold = 150;
}
);
RUs = (
{
local_rf = "yes"
nb_tx = 1
nb_rx = 1
att_tx = 0
att_rx = 0;
bands = [78];
max_pdschReferenceSignalPower = -27;
max_rxgain = 75;
eNB_instances = [0];
#beamforming 1x4 matrix:
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
#clock_src = "external";
sdr_addrs = "mgmt_addr=172.21.19.14,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal"
}
);
THREAD_STRUCT = (
{
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config = "PARALLEL_SINGLE_THREAD";
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config = "WORKER_ENABLE";
}
);
rfsimulator :
{
serveraddr = "server";
serverport = "4043";
options = (); #("saviq"); or/and "chanmod"
modelname = "AWGN";
IQfile = "/tmp/rfsimulator.iqs";
};
security = {
# preferred ciphering algorithms
# the first one of the list that an UE supports in chosen

View File

@@ -235,16 +235,6 @@ MACRLCs = (
}
)
THREAD_STRUCT = (
{
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config = "WORKER_ENABLE";
}
);
log_config =
{
global_log_level ="info";

View File

@@ -15,22 +15,7 @@ gNBs =
// 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;
sd = 0x010203; // 0 false, else true
},
{
sst = 1;
sd = 0x112233; // 0 false, else true
}
);
});
plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1 }) });
nr_cellid = 12345678L;

View File

@@ -14,22 +14,7 @@ gNBs =
// 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;
sd = 0x010203; // 0 false, else true
},
{
sst = 1;
sd = 0x112233; // 0 false, else true
}
);
});
plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1 }) });
nr_cellid = 12345678L;
@@ -204,8 +189,7 @@ L1s = (
{
num_cc = 1;
tr_n_preference = "local_mac";
thread_pool_size = 8;
prach_dtx_threshold = 120;
prach_dtx_threshold = 200;
pucch0_dtx_threshold = 150;
ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
}

View File

@@ -15,21 +15,7 @@ gNBs =
// 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;
sd = 0x010203; // 0 false, else true
},
{
sst = 1;
sd = 0x112233; // 0 false, else true
}
);
});
plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1 }) });
nr_cellid = 12345678L
@@ -231,7 +217,6 @@ L1s = (
{
num_cc = 1;
tr_n_preference = "local_mac";
thread_pool_size = 8;
prach_dtx_threshold = 120;
pucch0_dtx_threshold = 150;
}

View File

@@ -16,21 +16,7 @@ gNBs =
// 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;
sd = 0x010203; // 0 false, else true
},
{
sst = 1;
sd = 0x112233; // 0 false, else true
}
);
});
plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1 }) });
nr_cellid = 12345678L
@@ -228,7 +214,6 @@ L1s = (
{
num_cc = 1;
tr_n_preference = "local_mac";
thread_pool_size = 8;
prach_dtx_threshold = 120;
}
);

View File

@@ -211,7 +211,6 @@ L1s = (
{
num_cc = 1;
tr_n_preference = "local_mac";
thread_pool_size = 8;
ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
}
);

View File

@@ -181,7 +181,6 @@ L1s = (
{
num_cc = 1;
tr_n_preference = "local_mac";
thread_pool_size = 8;
ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
}
);

View File

@@ -210,7 +210,6 @@ L1s = (
{
num_cc = 1;
tr_n_preference = "local_mac";
thread_pool_size = 8;
prach_dtx_threshold = 120;
pucch0_dtx_threshold = 80;
}

View File

@@ -15,25 +15,7 @@ gNBs =
// 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;
sd = 0x1; // 0 false, else true
},
{
sst = 1;
sd = 0x010203; // 0 false, else true
},
{
sst = 1;
sd = 0x112233; // 0 false, else true
}
);
});
plmn_list = ({ mcc = 208; mnc = 97; mnc_length = 2; snssaiList = ({ sst = 1, sd = 0x010203 }) });
nr_cellid = 12345678L
@@ -237,7 +219,6 @@ L1s = (
{
num_cc = 1;
tr_n_preference = "local_mac";
thread_pool_size = 8;
prach_dtx_threshold = 120;
# pucch0_dtx_threshold = 150;
}

View File

@@ -15,21 +15,7 @@ gNBs =
// 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;
sd = 0x010203; // 0 false, else true
},
{
sst = 1;
sd = 0x112233; // 0 false, else true
}
);
});
plmn_list = ({ mcc = 208; mnc = 97; mnc_length = 2; snssaiList = ({ sst = 1 }) });
nr_cellid = 12345678L
@@ -234,7 +220,6 @@ L1s = (
{
num_cc = 1;
tr_n_preference = "local_mac";
thread_pool_size = 8;
prach_dtx_threshold = 120;
# pucch0_dtx_threshold = 150;
}

View File

@@ -15,21 +15,7 @@ gNBs =
// 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;
sd = 0x010203; // 0 false, else true
},
{
sst = 1;
sd = 0x112233; // 0 false, else true
}
);
});
plmn_list = ({ mcc = 208; mnc = 97; mnc_length = 2; snssaiList = ({ sst = 1, sd = 0x010203 }) });
nr_cellid = 12345678L
@@ -233,7 +219,6 @@ L1s = (
{
num_cc = 1;
tr_n_preference = "local_mac";
thread_pool_size = 8;
prach_dtx_threshold = 120;
# pucch0_dtx_threshold = 150;
}

View File

@@ -15,21 +15,7 @@ gNBs =
// 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;
sd = 0x010203; // 0 false, else true
},
{
sst = 1;
sd = 0x112233; // 0 false, else true
}
);
});
plmn_list = ({ mcc = 208; mnc = 97; mnc_length = 2; snssaiList = ({ sst = 1 }) });
nr_cellid = 12345678L
@@ -237,7 +223,7 @@ L1s = (
{
num_cc = 1;
tr_n_preference = "local_mac";
prach_dtx_threshold = 120;
prach_dtx_threshold = 200;
# pucch0_dtx_threshold = 150;
}
);

View File

@@ -15,21 +15,7 @@ gNBs =
// 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;
sd = 0x010203; // 0 false, else true
},
{
sst = 1;
sd = 0x112233; // 0 false, else true
}
);
});
plmn_list = ({ mcc = 208; mnc = 97; mnc_length = 2; snssaiList = ({ sst = 1, sd = 0x010203 }) });
nr_cellid = 12345678L
@@ -235,7 +221,6 @@ L1s = (
{
num_cc = 1;
tr_n_preference = "local_mac";
thread_pool_size = 8;
prach_dtx_threshold = 120;
# pucch0_dtx_threshold = 150;
}

View File

@@ -194,7 +194,6 @@ L1s = (
{
num_cc = 1;
tr_n_preference = "local_mac";
thread_pool_size = 8;
}
);

View File

@@ -210,7 +210,6 @@ L1s = (
{
num_cc = 1;
tr_n_preference = "local_mac";
thread_pool_size = 6;
ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
}
);

View File

@@ -211,7 +211,6 @@ L1s = (
{
num_cc = 1;
tr_n_preference = "local_mac";
thread_pool_size = 6;
}
);

View File

@@ -11,28 +11,14 @@ gNBs =
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
plmn_list = ({
mcc = 208;
mnc = 95;
mnc_length = 2;
snssaiList = (
{
sst = 1;
sd = 0x1; // 0 false, else true
},
{
sst = 2;
sd = 2; // 0 false, else true
}
);
});
plmn_list = ({ mcc = 208; mnc = 95; mnc_length = 2; snssaiList = ({ sst = 1 }) });
nr_cellid = 12345678L;
////////// Physical parameters:
min_rxtxtime = 6;
enable_sdap = 1;
pdcch_ConfigSIB1 = (
{
@@ -217,6 +203,7 @@ L1s = (
num_cc = 1;
tr_n_preference = "local_mac";
pusch_proc_threads = 8;
prach_dtx_threshold = 200;
ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
}
);

View File

@@ -11,33 +11,22 @@ gNBs =
// 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;
sd = 0x1; // 0 false, else true
}
);
});
plmn_list = ({ mcc = 222; mnc = 01; mnc_length = 2; snssaiList = ({ sst = 1; }) });
nr_cellid = 12345678L;
////////// Physical parameters:
pdsch_AntennaPorts_XP = 1;
pusch_AntennaPorts = 2;
do_CSIRS = 0;
ul_prbblacklist = "135,136,137,138"
min_rxtxtime = 2;
do_CSIRS = 1;
do_SRS = 1;
pdcch_ConfigSIB1 = (
pdcch_ConfigSIB1 = (
{
controlResourceSetZero = 12;
searchSpaceZero = 10;
searchSpaceZero = 0;
}
);
);
servingCellConfigCommon = (
{
@@ -47,28 +36,27 @@ gNBs =
# downlinkConfigCommon
#frequencyInfoDL
# this is 3300.24 + 134*12*30e3 = 3348.48 MHz (5G NR GSCN: 7741)
absoluteFrequencySSB = 623232;
dl_frequencyBand = 78;
# this is 3300.24 MHz
dl_absoluteFrequencyPointA = 620016;
# this is 3600 MHz + 43 PRBs@30kHz SCS (same as initial BWP)
absoluteFrequencySSB = 641280;
dl_frequencyBand = 78;
# this is 3600 MHz
dl_absoluteFrequencyPointA = 640008;
#scs-SpecificCarrierList
dl_offstToCarrier = 0;
dl_offstToCarrier = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
dl_subcarrierSpacing = 1;
dl_carrierBandwidth = 273;
dl_subcarrierSpacing = 1;
dl_carrierBandwidth = 106;
#initialDownlinkBWP
#genericParameters
# this is RBstart=0,L=162 (275*(275-L+1))+(274-RBstart))
initialDLBWPlocationAndBandwidth = 31624;
#
# this is RBstart=27,L=48 (275*(L-1))+RBstart
initialDLBWPlocationAndBandwidth = 28875; # 6366 12925 12956 28875 12952
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialDLBWPsubcarrierSpacing = 1;
initialDLBWPsubcarrierSpacing = 1;
#pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero = 12;
initialDLBWPsearchSpaceZero = 10;
initialDLBWPcontrolResourceSetZero = 12;
initialDLBWPsearchSpaceZero = 0;
#uplinkConfigCommon
#frequencyInfoUL
@@ -78,11 +66,11 @@ gNBs =
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
ul_subcarrierSpacing = 1;
ul_carrierBandwidth = 273;
ul_carrierBandwidth = 106;
pMax = 20;
#initialUplinkBWP
#genericParameters
initialULBWPlocationAndBandwidth = 31624;
initialULBWPlocationAndBandwidth = 28875;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialULBWPsubcarrierSpacing = 1;
@@ -93,8 +81,8 @@ gNBs =
#0 = one, 1=two, 2=four, 3=eight
prach_msg1_FDM = 0;
prach_msg1_FrequencyStart = 0;
zeroCorrelationZoneConfig = 12;
preambleReceivedTargetPower = -90;
zeroCorrelationZoneConfig = 13;
preambleReceivedTargetPower = -96;
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
preambleTransMax = 6;
#powerRampingStep
@@ -105,9 +93,9 @@ gNBs =
ra_ResponseWindow = 4;
#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;
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
#oneHalf (0..15) 4,8,12,16,...60,64
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 14;
#ra_ContentionResolutionTimer
#(0..7) 8,16,24,32,40,48,56,64
ra_ContentionResolutionTimer = 7;
@@ -131,7 +119,7 @@ gNBs =
# 0 = neither, 1= group hopping, 2=sequence hopping
pucchGroupHopping = 0;
hoppingId = 40;
p0_nominal = -70;
p0_nominal = -90;
# ssb_PositionsInBurs_BitmapPR
# 1=short, 2=medium, 3=long
ssb_PositionsInBurst_PR = 2;
@@ -163,22 +151,35 @@ gNBs =
nrofUplinkSlots = 2;
nrofUplinkSymbols = 4;
ssPBCH_BlockPower = -25;
ssPBCH_BlockPower = -25;
}
);
# Dedicated Serving Cell Configuration
servingCellConfigDedicated = ({
# BWP-Downlink
# BWP 1 Configuration
dl_bwp-Id_1 = 1;
dl_bwp1_locationAndBandwidth = 1099; // RBstart=0, L=273 (100 MHz BW)
dl_bwp1_locationAndBandwidth = 28875; // RBstart=0, L=106 (40 MHz BW)
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
dl_bwp1_subcarrierSpacing = 1;
# BWP 2 Configuration
dl_bwp-Id_2 = 2;
dl_bwp2_locationAndBandwidth = 13750; // RBstart=0, L=51 (20 MHz BW)
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
dl_bwp2_subcarrierSpacing = 1;
# BWP 3 Configuration
dl_bwp-Id_3 = 3;
dl_bwp3_locationAndBandwidth = 6325; // RBstart=0, L=24 (10 MHz BW)
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
dl_bwp3_subcarrierSpacing = 1;
firstActiveDownlinkBWP-Id = 1; #BWP-Id
defaultDownlinkBWP-Id = 1; #BWP-Id
@@ -191,17 +192,29 @@ servingCellConfigDedicated = ({
# BWP-Uplink
# BWP 1 Configuration
ul_bwp-Id_1 = 1;
ul_bwp1_locationAndBandwidth = 1099; // RBstart=0, L=273 (100 MHz BW)
ul_bwp1_locationAndBandwidth = 28875; // RBstart=0, L=106 (40 MHz BW)
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
ul_bwp1_subcarrierSpacing = 1;
# BWP 2 Configuration
ul_bwp-Id_2 = 2;
ul_bwp2_locationAndBandwidth = 13750; // RBstart=0, L=51 (20 MHz BW)
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
ul_bwp2_subcarrierSpacing = 1;
# BWP 3 Configuration
ul_bwp-Id_3 = 3;
ul_bwp3_locationAndBandwidth = 6325; // RBstart=0, L=24 (10 MHz BW)
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
ul_bwp3_subcarrierSpacing = 1;
firstActiveUplinkBWP-Id = 1; #BWP-Id
}
);
# ------- SCTP definitions
SCTP :
{
@@ -212,7 +225,7 @@ servingCellConfigDedicated = ({
////////// AMF parameters:
amf_ip_address = ( { ipv4 = "192.168.70.132";
amf_ip_address = ( { ipv4 = "172.21.16.136";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
@@ -223,9 +236,9 @@ servingCellConfigDedicated = ({
NETWORK_INTERFACES :
{
GNB_INTERFACE_NAME_FOR_NG_AMF = "demo-oai";
GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.70.129/24";
GNB_IPV4_ADDRESS_FOR_NG_AMF = "172.21.16.137/24";
GNB_INTERFACE_NAME_FOR_NGU = "demo-oai";
GNB_IPV4_ADDRESS_FOR_NGU = "192.168.70.129/24";
GNB_IPV4_ADDRESS_FOR_NGU = "172.21.16.137/24";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};
@@ -237,9 +250,8 @@ MACRLCs = (
num_cc = 1;
tr_s_preference = "local_L1";
tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 150;
pusch_TargetSNRx10 = 200;
pucch_TargetSNRx10 = 200;
pusch_FailureThres = 1000;
ulsch_max_frame_inactivity = 0;
}
);
@@ -247,27 +259,27 @@ MACRLCs = (
L1s = (
{
num_cc = 1;
tr_n_preference = "local_mac";
prach_dtx_threshold = 120;
pucch0_dtx_threshold = 80;
tr_n_preference = "local_mac";
prach_dtx_threshold = 120;
pucch0_dtx_threshold = 100;
ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
}
);
RUs = (
{
local_rf = "yes"
nb_tx = 2;
nb_rx = 2;
att_tx = 0;
att_rx = 0;
nb_tx = 1
nb_rx = 1
att_tx = 10;
att_rx = 10;
bands = [78];
max_pdschReferenceSignalPower = -27;
max_rxgain = 75;
max_rxgain = 114;
eNB_instances = [0];
##beamforming 1x2 matrix: 1 layer x 2 antennas
bf_weights = [0x00007fff, 0x0000];
#clock_src = "internal";
sdr_addrs = "mgmt_addr=192.168.10.2,addr=192.168.10.2,clock_source=internal,time_source=internal"
#beamforming 1x4 matrix:
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
clock_src = "internal";
}
);
@@ -318,3 +330,4 @@ log_config :
ngap_log_level ="debug";
f1ap_log_level ="debug";
};

View File

@@ -11,22 +11,7 @@ gNBs =
// 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;
sd = 0x1; // 0 false, else true
},
{
sst = 1;
sd = 0x112233; // 0 false, else true
}
);
});
plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1 }) });
nr_cellid = 12345678L;

View File

@@ -4,5 +4,4 @@ uicc0 = {
opc= "@OPC@";
dnn= "@DNN@";
nssai_sst=@NSSAI_SST@;
nssai_sd=@NSSAI_SD@;
}

View File

@@ -46,6 +46,7 @@ ENB_PROCESS_NOLOGFILE_TO_ANALYZE = -14
ENB_PROCESS_SLAVE_RRU_NOT_SYNCED = -15
ENB_REAL_TIME_PROCESSING_ISSUE = -16
ENB_RETX_ISSUE = -17
ENB_SHUTDOWN_NO_BYE = -18
HSS_PROCESS_FAILED = -2
HSS_PROCESS_OK = +2
MME_PROCESS_FAILED = -3
@@ -78,3 +79,7 @@ X2_HO_REQ_STATE__TARGET_RECEIVES_REQ = 1
X2_HO_REQ_STATE__TARGET_RRC_RECFG_COMPLETE = 2
X2_HO_REQ_STATE__TARGET_SENDS_SWITCH_REQ = 3
X2_HO_REQ_STATE__SOURCE_RECEIVES_REQ_ACK = 10
# placeholder for a "don't care" password to gradually transition to
# passwordless CI
CI_NO_PASSWORD = "CIPASSWORDDONTCARE"

View File

@@ -8,7 +8,6 @@ ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get upgrade --yes && \
DEBIAN_FRONTEND=noninteractive apt-get install --yes \
astyle \
gawk \
git
@@ -18,9 +17,6 @@ COPY . .
RUN /bin/bash -c "if [[ -v MERGE_REQUEST ]]; then echo 'Source Branch = $SRC_BRANCH'; echo 'Target Branch = $TARGET_BRANCH'; else echo 'Push to develop'; fi"
RUN /bin/bash -c "if [[ -v MERGE_REQUEST ]]; then ./ci-scripts/checkCodingFormattingRules.sh --src-branch $SRC_BRANCH --target-branch $TARGET_BRANCH; else ./ci-scripts/checkCodingFormattingRules.sh; fi"
RUN echo "=== Files not properly formatted ===" && \
/bin/bash -c "if [[ -f oai_rules_result_list.txt ]]; then cat oai_rules_result_list.txt; fi"
RUN echo "=== Files with incorrect define protection ===" && \
/bin/bash -c "if [[ -f header-files-w-incorrect-define.txt ]]; then cat header-files-w-incorrect-define.txt; fi"

View File

@@ -253,7 +253,7 @@ class EPCManagement():
logging.debug('Starting OAI CN5G')
mySSH.command('if [ -d ' + self.SourceCodePath + '/scripts ]; then echo ' + self.Password + ' | sudo -S rm -Rf ' + self.SourceCodePath + '/scripts ; fi', '\$', 5)
mySSH.command('mkdir -p ' + self.SourceCodePath + '/scripts', '\$', 5)
mySSH.command('cd /opt/oai-cn5g-fed-v1.3/docker-compose', '\$', 5)
mySSH.command('cd /opt/oai-cn5g-fed-v1.4/docker-compose', '\$', 5)
mySSH.command('python3 ./core-network.py '+self.cfgDeploy, '\$', 60)
if re.search('start-mini-as-ue', self.cfgDeploy):
dFile = 'docker-compose-mini-nrf-asue.yaml'
@@ -311,6 +311,8 @@ class EPCManagement():
tmp = str(response[0],'utf-8')
self.MmeIPAddress = tmp.rstrip()
logging.debug('AMF IP Address ' + self.MmeIPAddress)
else:
logging.error('no container with name oai-amf found, could not retrieve AMF IP address')
mySSH.close()
def CheckHSSProcess(self, status_queue):
@@ -535,7 +537,7 @@ class EPCManagement():
mySSH.command('docker logs ' + c + ' > ' + self.SourceCodePath + '/logs/' + c + '.log', '\$', 5)
logging.debug('Terminating OAI CN5G')
mySSH.command('cd /opt/oai-cn5g-fed-v1.3/docker-compose', '\$', 5)
mySSH.command('cd /opt/oai-cn5g-fed-v1.4/docker-compose', '\$', 5)
mySSH.command('python3 ./core-network.py '+self.cfgUnDeploy, '\$', 60)
mySSH.command('docker volume prune --force || true', '\$', 60)
time.sleep(2)

View File

@@ -45,6 +45,7 @@ import cls_containerize #class Containerize for all container-based oper
import cls_static_code_analysis #class for static code analysis
import cls_ci_ueinfra #class defining the multi Ue infrastrucure
import cls_physim1 #class PhySim for physical simulators deploy and run
import cls_cluster # class for building/deploying on cluster
import sshconnection
import epc
@@ -102,20 +103,17 @@ def AssignParams(params_dict):
def GetParametersFromXML(action):
if action == 'Build_eNB' or action == 'Build_Image':
if action == 'Build_eNB' or action == 'Build_Image' or action == 'Build_Proxy' or action == "Build_Cluster_Image":
RAN.Build_eNB_args=test.findtext('Build_eNB_args')
CONTAINERS.imageKind=test.findtext('kind')
forced_workspace_cleanup = test.findtext('forced_workspace_cleanup')
if (forced_workspace_cleanup is None):
RAN.Build_eNB_forced_workspace_cleanup=False
CONTAINERS.forcedWorkspaceCleanup=False
else:
if re.match('true', forced_workspace_cleanup, re.IGNORECASE):
RAN.Build_eNB_forced_workspace_cleanup=True
CONTAINERS.forcedWorkspaceCleanup=True
else:
RAN.Build_eNB_forced_workspace_cleanup=True
CONTAINERS.forcedWorkspaceCleanup=False
RAN.Build_eNB_forced_workspace_cleanup=False
CONTAINERS.forcedWorkspaceCleanup=False
CLUSTER.forcedWorkspaceCleanup = False
if forced_workspace_cleanup is not None and re.match('true', forced_workspace_cleanup, re.IGNORECASE):
RAN.Build_eNB_forced_workspace_cleanup = True
CONTAINERS.forcedWorkspaceCleanup = True
CLUSTER.forcedWorkspaceCleanup = True
eNB_instance=test.findtext('eNB_instance')
if (eNB_instance is None):
RAN.eNB_instance=0
@@ -138,6 +136,9 @@ def GetParametersFromXML(action):
RAN.backgroundBuild=True
else:
RAN.backgroundBuild=False
proxy_commit = test.findtext('proxy_commit')
if proxy_commit is not None:
CONTAINERS.proxyCommit = proxy_commit
elif action == 'WaitEndBuild_eNB':
RAN.Build_eNB_args=test.findtext('Build_eNB_args')
@@ -454,9 +455,18 @@ def GetParametersFromXML(action):
if (string_field is not None):
CONTAINERS.testSvrId = string_field
else: # ie action == 'Run_PhySim':
elif action == 'Run_LDPCTest' or action == 'Run_NRulsimTest':
ldpc.runargs = test.findtext('physim_run_args')
elif action == 'LicenceAndFormattingCheck':
pass
elif action == 'Cppcheck_Analysis':
pass
else:
logging.error(f"unknown action {action}")
#check if given test is in list
#it is in list if one of the strings in 'list' is at the beginning of 'test'
@@ -522,6 +532,7 @@ HTML = cls_oai_html.HTMLManagement()
CONTAINERS = cls_containerize.Containerize()
SCA = cls_static_code_analysis.StaticCodeAnalysis()
PHYSIM = cls_physim1.PhySim()
CLUSTER = cls_cluster.Cluster()
ldpc=cls_physim.PhySim() #create an instance for LDPC test using GPU or CPU build
@@ -531,7 +542,7 @@ ldpc=cls_physim.PhySim() #create an instance for LDPC test using GPU or CPU b
#-----------------------------------------------------------
import args_parse
py_param_file_present, py_params, mode = args_parse.ArgsParse(sys.argv,CiTestObj,RAN,HTML,EPC,ldpc,CONTAINERS,HELP,SCA,PHYSIM)
py_param_file_present, py_params, mode = args_parse.ArgsParse(sys.argv,CiTestObj,RAN,HTML,EPC,ldpc,CONTAINERS,HELP,SCA,PHYSIM,CLUSTER)
@@ -911,14 +922,29 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
HTML=ldpc.Build_PhySim(HTML,CONST)
if ldpc.exitStatus==1:
RAN.prematureExit = True
elif action == 'Run_PhySim':
HTML=ldpc.Run_PhySim(HTML,CONST,id)
elif action == 'Run_LDPCTest':
HTML=ldpc.Run_LDPCTest(HTML,CONST,id)
if ldpc.exitStatus==1:
RAN.prematureExit = True
elif action == 'Run_NRulsimTest':
HTML=ldpc.Run_NRulsimTest(HTML,CONST,id)
if ldpc.exitStatus==1:
RAN.prematureExit = True
elif action == 'Build_Cluster_Image':
if not CLUSTER.BuildClusterImage(HTML):
RAN.prematureExit = True
elif action == 'Build_Image':
CONTAINERS.BuildImage(HTML)
elif action == 'Build_Proxy':
CONTAINERS.BuildProxy(HTML)
elif action == 'Copy_Image_to_Test':
CONTAINERS.Copy_Image_to_Test_Server(HTML)
success = CONTAINERS.Copy_Image_to_Test_Server(HTML)
if not success:
RAN.prematureExit = True
elif action == 'Deploy_Object':
CONTAINERS.DeployObject(HTML, EPC)
if CONTAINERS.exitStatus==1:
RAN.prematureExit = True
elif action == 'Undeploy_Object':
CONTAINERS.UndeployObject(HTML, RAN)
elif action == 'Cppcheck_Analysis':

View File

@@ -177,7 +177,7 @@ function variant__v1__enb_usrp {
function variant__v2__basic_sim {
NB_PATTERN_FILES=11
BUILD_OPTIONS="--eNB --UE"
BUILD_OPTIONS="--eNB --UE --noavx512"
VM_MEMORY=8192
RUN_OPTIONS="complex"
}
@@ -201,28 +201,28 @@ function variant__v5__gnb_usrp {
VM_MEMORY=10240
VM_CPU=8
NB_PATTERN_FILES=6
BUILD_OPTIONS="--gNB -w USRP"
BUILD_OPTIONS="--gNB -w USRP --noavx512"
}
function variant__v6__nr_ue_usrp {
VM_MEMORY=4096
VM_CPU=4
NB_PATTERN_FILES=6
BUILD_OPTIONS="--nrUE -w USRP"
BUILD_OPTIONS="--nrUE -w USRP --noavx512"
}
function variant__v7__enb_ethernet {
VM_MEMORY=4096
ARCHIVES_LOC=enb_eth
NB_PATTERN_FILES=6
BUILD_OPTIONS="--eNB -w USRP"
BUILD_OPTIONS="--eNB -w USRP --noavx512"
}
function variant__v8__ue_ethernet {
VM_MEMORY=4096
ARCHIVES_LOC=ue_eth
NB_PATTERN_FILES=10
BUILD_OPTIONS="--UE -w USRP"
BUILD_OPTIONS="--UE -w USRP --noavx512"
}
function variant__v10__flexran_rtc {

View File

@@ -374,7 +374,7 @@ class RANManagement():
mySSH.open(lIpAddr, lUserName, lPassWord)
eth_interface = 'any'
fltr = 'sctp'
logging.debug('\u001B[1m Launching tshark on interface ' + eth_interface + ' with filter "' + fltr + '"\u001B[0m')
logging.debug('\u001B[1m Launching tshark on xNB on interface ' + eth_interface + ' with filter "' + fltr + '"\u001B[0m')
pcapfile = pcapfile_prefix + self.testCase_id + '_log.pcap'
mySSH.command('echo ' + lPassWord + ' | sudo -S rm -f /tmp/' + pcapfile , '\$', 5)
mySSH.command('echo $USER; nohup sudo -E tshark -i ' + eth_interface + ' -f "' + fltr + '" -w /tmp/' + pcapfile + ' > /dev/null 2>&1 &','\$', 5)
@@ -390,7 +390,7 @@ class RANManagement():
mySSH.open(localEpcIpAddr, localEpcUserName, localEpcPassword)
eth_interface = 'any'
fltr = 'sctp'
logging.debug('\u001B[1m Launching tshark on interface ' + eth_interface + ' with filter "' + fltr + '"\u001B[0m')
logging.debug('\u001B[1m Launching tshark on EPC on interface ' + eth_interface + ' with filter "' + fltr + '"\u001B[0m')
self.epcPcapFile = 'enb_' + self.testCase_id + '_s1log.pcap'
mySSH.command('echo ' + localEpcPassword + ' | sudo -S rm -f /tmp/' + self.epcPcapFile , '\$', 5)
mySSH.command('echo $USER; nohup sudo tshark -f "host ' + lIpAddr +'" -i ' + eth_interface + ' -f "' + fltr + '" -w /tmp/' + self.epcPcapFile + ' > /tmp/tshark.log 2>&1 &', localEpcUserName, 5)
@@ -517,7 +517,7 @@ class RANManagement():
localEpcUserName = EPC.UserName
localEpcPassword = EPC.Password
mySSH.open(localEpcIpAddr, localEpcUserName, localEpcPassword)
logging.debug('\u001B[1m Stopping tshark \u001B[0m')
logging.debug('\u001B[1m Stopping tshark on EPC \u001B[0m')
mySSH.command('echo ' + localEpcPassword + ' | sudo -S killall --signal SIGKILL tshark', '\$', 5)
if self.epcPcapFile != '':
mySSH.command('echo ' + localEpcPassword + ' | sudo -S chmod 666 /tmp/' + self.epcPcapFile, '\$', 5)
@@ -644,18 +644,16 @@ class RANManagement():
time.sleep(5)
mySSH.command('rm -f my-lte-softmodem-run' + str(self.eNB_instance) + '.sh', '\$', 5)
#stopping tshark (valid if eNB and enabled in xml, will not harm otherwise)
logging.debug('\u001B[1m Stopping tshark \u001B[0m')
logging.debug('\u001B[1m Stopping tshark on xNB \u001B[0m')
mySSH.command('echo ' + lPassWord + ' | sudo -S killall --signal SIGKILL tshark', '\$', 5)
time.sleep(1)
mySSH.close()
# If tracer options is on, stopping tshark on EPC side
result = re.search('T_stdout', str(self.Initialize_eNB_args))
if (result is not None):
if EPC.IPAddress != "none" and EPC.IPAddress != '':
localEpcIpAddr = EPC.IPAddress
localEpcUserName = EPC.UserName
localEpcPassword = EPC.Password
logging.debug('\u001B[1m Stopping tshark on EPC (' + localEpcIpAddr + ') \u001B[0m')
mySSH.open(localEpcIpAddr, localEpcUserName, localEpcPassword)
logging.debug('\u001B[1m Stopping tshark \u001B[0m')
mySSH.command('echo ' + localEpcPassword + ' | sudo -S killall --signal SIGKILL tshark', '\$', 5)
time.sleep(1)
if self.epcPcapFile != '':
@@ -814,6 +812,7 @@ class RANManagement():
ULRetxIssue = False
nrRrcRcfgComplete = 0
harqFeedbackPast = 0
showedByeMsg = False # last line is Bye. -> stopped properly
line_cnt=0 #log file line counter
for line in enb_log_file.readlines():
@@ -1026,6 +1025,12 @@ class RANManagement():
if result is not None:
gnb_markers[k].append(line_cnt)
# check whether e/gNB log finishes with "Bye." message
# Note that it is "=" not "|=" so not only is the regex
# asking for EOF (\Z) but we also only retain the last
# line's result
showedByeMsg = re.search(r'^Bye.\n\Z', str(line), re.MULTILINE) is not None
enb_log_file.close()
@@ -1210,6 +1215,13 @@ class RANManagement():
logging.debug('No real time stats found in the log file')
htmleNBFailureMsg += statMsg
if not showedByeMsg:
logging.debug('\u001B[1;37;41m ' + nodeB_prefix + 'NB did not show "Bye." message at end, it likely did not stop properly! \u001B[0m')
htmleNBFailureMsg += 'No Bye. message found, did not stop properly\n'
global_status = CONST.ENB_SHUTDOWN_NO_BYE
else:
logging.debug('"Bye." message found at end.')
else:
#Removing UE log
statMsg = '[MAC] Removing UE msg count = '+str(removing_ue)

View File

@@ -463,106 +463,75 @@ function report_build {
echo " </table>" >> ./build_results.html
echo " <h2>Build Summary</h2>" >> ./build_results.html
if [ -f ./oai_rules_result.txt ]
echo " <h3>OAI Coding / Formatting Guidelines Check</h3>" >> ./build_results.html
if [ -f ./header-files-w-incorrect-define.txt ]
then
echo " <h3>OAI Coding / Formatting Guidelines Check</h3>" >> ./build_results.html
NB_FILES=`cat ./oai_rules_result.txt`
if [ $NB_FILES = "0" ]
then
NB_FILES_IN_ERROR=`wc -l ./header-files-w-incorrect-define.txt | sed -e "s@ .*@@"`
if [ $NB_FILES_IN_ERROR -eq 0 ]
then
echo " <div class=\"alert alert-success\">" >> ./build_results.html
if [ $PU_TRIG -eq 1 ]; then echo " <strong>All files in repository follow OAI rules. <span class=\"glyphicon glyphicon-ok-circle\"></span></strong>" >> ./build_results.html; fi
if [ $MR_TRIG -eq 1 ]; then echo " <strong>All modified files in Merge-Request follow OAI rules. <span class=\"glyphicon glyphicon-ok-circle\"></span></strong>" >> ./build_results.html; fi
if [ $MR_TRIG -eq 1 ]; then echo " <strong>No Issue for CIRCULAR DEPENDENCY PROTECTION in modified files</strong>" >> ./build_results.html; fi
if [ $PU_TRIG -eq 1 ]; then echo " <strong>No Issue for CIRCULAR DEPENDENCY PROTECTION in the whole repository</strong>" >> ./build_results.html; fi
echo " </div>" >> ./build_results.html
else
echo " <div class=\"alert alert-warning\">" >> ./build_results.html
if [ $PU_TRIG -eq 1 ]; then echo " <strong>$NB_FILES files in repository DO NOT follow OAI rules. <span class=\"glyphicon glyphicon-warning-sign\"></span></strong>" >> ./build_results.html; fi
if [ $MR_TRIG -eq 1 ]; then echo " <strong>$NB_FILES modified files in Merge-Request DO NOT follow OAI rules. <span class=\"glyphicon glyphicon-warning-sign\"></span></strong>" >> ./build_results.html; fi
if [ $MR_TRIG -eq 1 ]; then echo " <strong>${NB_FILES_IN_ERROR} modified files MAY NOT HAVE CIRCULAR DEPENDENCY PROTECTION</strong>" >> ./build_results.html; fi
if [ $PU_TRIG -eq 1 ]; then echo " <strong>${NB_FILES_IN_ERROR} files in repository MAY NOT HAVE CIRCULAR DEPENDENCY PROTECTION in the whole repository</strong>" >> ./build_results.html; fi
echo " </div>" >> ./build_results.html
fi
if [ -f ./oai_rules_result_list.txt ]
then
echo " <button data-toggle=\"collapse\" data-target=\"#oai-formatting-details\">More details on formatting check</button>" >> ./build_results.html
echo " <div id=\"oai-formatting-details\" class=\"collapse\">" >> ./build_results.html
echo " <p>Please apply the following command to this(ese) file(s): </p>" >> ./build_results.html
echo " <p style=\"margin-left: 30px\"><strong><code>astyle --options=ci-scripts/astyle-options.txt filename(s)</code></strong></p>" >> ./build_results.html
echo " <button data-toggle=\"collapse\" data-target=\"#oai-circular-details\">More details on circular dependency protection check</button>" >> ./build_results.html
echo " <div id=\"oai-circular-details\" class=\"collapse\">" >> ./build_results.html
echo " <table border = 1>" >> ./build_results.html
echo " <tr>" >> ./build_results.html
echo " <th bgcolor = \"lightcyan\" >Filename</th>" >> ./build_results.html
echo " <th bgcolor = \"lightcyan\" >Potential Issue</th>" >> ./build_results.html
echo " <th bgcolor = \"lightcyan\" >Impacted File</th>" >> ./build_results.html
echo " <th bgcolor = \"lightcyan\" >Incorrect Macro</th>" >> ./build_results.html
echo " </tr>" >> ./build_results.html
awk '{print " <tr><td>"$1"</td></tr>"}' ./oai_rules_result_list.txt >> ./build_results.html
awk '{if($0 ~/error in/){print " <tr><td>error in declaration</td><td>"$4"</td><td>"$5"</td></tr>"};if($0 ~/files with same/){print " <tr><td>files with same #define</td><td>"$5"</td><td>"$6"</td></tr>"}}' ./header-files-w-incorrect-define.txt >> ./build_results.html
echo " </table>" >> ./build_results.html
echo " </div>" >> ./build_results.html
echo " <br>" >> ./build_results.html
fi
if [ -f ./header-files-w-incorrect-define.txt ]
fi
if [ -f ./files-w-gnu-gpl-license-banner.txt ]
then
NB_FILES_IN_ERROR=`wc -l ./files-w-gnu-gpl-license-banner.txt | sed -e "s@ .*@@"`
if [ $NB_FILES_IN_ERROR -ne 0 ]
then
NB_FILES_IN_ERROR=`wc -l ./header-files-w-incorrect-define.txt | sed -e "s@ .*@@"`
if [ $NB_FILES_IN_ERROR -eq 0 ]
then
echo " <div class=\"alert alert-success\">" >> ./build_results.html
if [ $MR_TRIG -eq 1 ]; then echo " <strong>No Issue for CIRCULAR DEPENDENCY PROTECTION in modified files</strong>" >> ./build_results.html; fi
if [ $PU_TRIG -eq 1 ]; then echo " <strong>No Issue for CIRCULAR DEPENDENCY PROTECTION in the whole repository</strong>" >> ./build_results.html; fi
echo " </div>" >> ./build_results.html
else
echo " <div class=\"alert alert-warning\">" >> ./build_results.html
if [ $MR_TRIG -eq 1 ]; then echo " <strong>${NB_FILES_IN_ERROR} modified files MAY NOT HAVE CIRCULAR DEPENDENCY PROTECTION</strong>" >> ./build_results.html; fi
if [ $PU_TRIG -eq 1 ]; then echo " <strong>${NB_FILES_IN_ERROR} files in repository MAY NOT HAVE CIRCULAR DEPENDENCY PROTECTION in the whole repository</strong>" >> ./build_results.html; fi
echo " </div>" >> ./build_results.html
echo " <button data-toggle=\"collapse\" data-target=\"#oai-circular-details\">More details on circular dependency protection check</button>" >> ./build_results.html
echo " <div id=\"oai-circular-details\" class=\"collapse\">" >> ./build_results.html
echo " <table border = 1>" >> ./build_results.html
echo " <tr>" >> ./build_results.html
echo " <th bgcolor = \"lightcyan\" >Potential Issue</th>" >> ./build_results.html
echo " <th bgcolor = \"lightcyan\" >Impacted File</th>" >> ./build_results.html
echo " <th bgcolor = \"lightcyan\" >Incorrect Macro</th>" >> ./build_results.html
echo " </tr>" >> ./build_results.html
awk '{if($0 ~/error in/){print " <tr><td>error in declaration</td><td>"$4"</td><td>"$5"</td></tr>"};if($0 ~/files with same/){print " <tr><td>files with same #define</td><td>"$5"</td><td>"$6"</td></tr>"}}' ./header-files-w-incorrect-define.txt >> ./build_results.html
echo " </table>" >> ./build_results.html
echo " </div>" >> ./build_results.html
echo " <br>" >> ./build_results.html
fi
echo " <div class=\"alert alert-danger\">" >> ./build_results.html
if [ $MR_TRIG -eq 1 ]; then echo " <strong>${NB_FILES_IN_ERROR} modified files HAVE a GNU GPL license banner</strong>" >> ./build_results.html; fi
if [ $PU_TRIG -eq 1 ]; then echo " <strong>${NB_FILES_IN_ERROR} files in repository HAVE a GNU GPL license banner</strong>" >> ./build_results.html; fi
echo " </div>" >> ./build_results.html
echo " <button data-toggle=\"collapse\" data-target=\"#oai-license-gpl\">More details on GNU GPL license banner issue</button>" >> ./build_results.html
echo " <div id=\"oai-license-gpl\" class=\"collapse\">" >> ./build_results.html
echo " <table border = 1>" >> ./build_results.html
echo " <tr>" >> ./build_results.html
echo " <th bgcolor = \"lightcyan\" >Filename</th>" >> ./build_results.html
echo " </tr>" >> ./build_results.html
awk '{print " <tr><td>"$1"</td></tr>"}' ./files-w-gnu-gpl-license-banner.txt >> ./build_results.html
echo " </table>" >> ./build_results.html
echo " </div>" >> ./build_results.html
echo " <br>" >> ./build_results.html
fi
if [ -f ./files-w-gnu-gpl-license-banner.txt ]
fi
if [ -f ./files-w-suspect-banner.txt ]
then
NB_FILES_IN_ERROR=`wc -l ./files-w-suspect-banner.txt | sed -e "s@ .*@@"`
if [ $NB_FILES_IN_ERROR -ne 0 ]
then
NB_FILES_IN_ERROR=`wc -l ./files-w-gnu-gpl-license-banner.txt | sed -e "s@ .*@@"`
if [ $NB_FILES_IN_ERROR -ne 0 ]
then
echo " <div class=\"alert alert-danger\">" >> ./build_results.html
if [ $MR_TRIG -eq 1 ]; then echo " <strong>${NB_FILES_IN_ERROR} modified files HAVE a GNU GPL license banner</strong>" >> ./build_results.html; fi
if [ $PU_TRIG -eq 1 ]; then echo " <strong>${NB_FILES_IN_ERROR} files in repository HAVE a GNU GPL license banner</strong>" >> ./build_results.html; fi
echo " </div>" >> ./build_results.html
echo " <button data-toggle=\"collapse\" data-target=\"#oai-license-gpl\">More details on GNU GPL license banner issue</button>" >> ./build_results.html
echo " <div id=\"oai-license-gpl\" class=\"collapse\">" >> ./build_results.html
echo " <table border = 1>" >> ./build_results.html
echo " <tr>" >> ./build_results.html
echo " <th bgcolor = \"lightcyan\" >Filename</th>" >> ./build_results.html
echo " </tr>" >> ./build_results.html
awk '{print " <tr><td>"$1"</td></tr>"}' ./files-w-gnu-gpl-license-banner.txt >> ./build_results.html
echo " </table>" >> ./build_results.html
echo " </div>" >> ./build_results.html
echo " <br>" >> ./build_results.html
fi
fi
if [ -f ./files-w-suspect-banner.txt ]
then
NB_FILES_IN_ERROR=`wc -l ./files-w-suspect-banner.txt | sed -e "s@ .*@@"`
if [ $NB_FILES_IN_ERROR -ne 0 ]
then
echo " <div class=\"alert alert-warning\">" >> ./build_results.html
if [ $MR_TRIG -eq 1 ]; then echo " <strong>${NB_FILES_IN_ERROR} modified files HAVE a suspect license banner</strong>" >> ./build_results.html; fi
if [ $PU_TRIG -eq 1 ]; then echo " <strong>${NB_FILES_IN_ERROR} files in repository HAVE a suspect license banner</strong>" >> ./build_results.html; fi
echo " </div>" >> ./build_results.html
echo " <button data-toggle=\"collapse\" data-target=\"#oai-license-suspect\">More details on suspect banner files</button>" >> ./build_results.html
echo " <div id=\"oai-license-suspect\" class=\"collapse\">" >> ./build_results.html
echo " <table border = 1>" >> ./build_results.html
echo " <tr>" >> ./build_results.html
echo " <th bgcolor = \"lightcyan\" >Filename</th>" >> ./build_results.html
echo " </tr>" >> ./build_results.html
awk '{print " <tr><td>"$1"</td></tr>"}' ././files-w-suspect-banner.txt >> ./build_results.html
echo " </table>" >> ./build_results.html
echo " </div>" >> ./build_results.html
echo " <br>" >> ./build_results.html
fi
echo " <div class=\"alert alert-warning\">" >> ./build_results.html
if [ $MR_TRIG -eq 1 ]; then echo " <strong>${NB_FILES_IN_ERROR} modified files HAVE a suspect license banner</strong>" >> ./build_results.html; fi
if [ $PU_TRIG -eq 1 ]; then echo " <strong>${NB_FILES_IN_ERROR} files in repository HAVE a suspect license banner</strong>" >> ./build_results.html; fi
echo " </div>" >> ./build_results.html
echo " <button data-toggle=\"collapse\" data-target=\"#oai-license-suspect\">More details on suspect banner files</button>" >> ./build_results.html
echo " <div id=\"oai-license-suspect\" class=\"collapse\">" >> ./build_results.html
echo " <table border = 1>" >> ./build_results.html
echo " <tr>" >> ./build_results.html
echo " <th bgcolor = \"lightcyan\" >Filename</th>" >> ./build_results.html
echo " </tr>" >> ./build_results.html
awk '{print " <tr><td>"$1"</td></tr>"}' ././files-w-suspect-banner.txt >> ./build_results.html
echo " </table>" >> ./build_results.html
echo " </div>" >> ./build_results.html
echo " <br>" >> ./build_results.html
fi
fi

View File

@@ -60,7 +60,7 @@ class SSHConnection():
count = 0
connect_status = False
while count < 4:
self.ssh = pexpect.spawn('ssh -o PubkeyAuthentication=no {}@{}'.format(username,ipaddress))
self.ssh = pexpect.spawn('ssh -o PubkeyAuthentication=yes {}@{}'.format(username,ipaddress))
# Longer timeout at connection due to asterix slowness
self.ssh.timeout = 25
self.sshresponse = self.ssh.expect(['Are you sure you want to continue connecting (yes/no)?', 'password:', 'Last login', pexpect.EOF, pexpect.TIMEOUT])
@@ -84,14 +84,11 @@ class SSHConnection():
else:
logging.debug('self.sshresponse = ' + str(self.sshresponse))
elif self.sshresponse == 2:
# Checking if we are really on the remote client defined by its IP address
self.command('stdbuf -o0 ifconfig | egrep --color=never "inet addr:|inet "', prompt, 5)
result = re.search(str(ipaddress), str(self.ssh.before))
if result is None:
self.close()
else:
count = 10
connect_status = True
# We directly ended up on the remote server because of pubkey auth
count = 10
connect_status = True
# this expect() seems to be necessary to advance the read buffer until the prompt, or getBefore() will not return the last command
self.sshresponse = self.ssh.expect([prompt])
else:
# debug output
logging.debug(str(self.ssh.before))
@@ -272,4 +269,4 @@ class SSHConnection():
sys.exit('SCP failed')
def getBefore(self):
return str(self.ssh.before)
return self.ssh.before.decode('utf-8')

View File

@@ -1,5 +1,8 @@
- Build_Proxy
- Build_Cluster_Image
- Build_PhySim
- Run_PhySim
- Run_LDPCTest
- Run_NRulsimTest
- Build_eNB
- WaitEndBuild_eNB
- Initialize_eNB

View File

@@ -24,7 +24,7 @@
<htmlTabRef>TEST-NSA-FR1-TM1</htmlTabRef>
<htmlTabName>NSA Ping DL UL with QUECTEL</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>3</repeatCount>
<repeatCount>1</repeatCount>
<TestCaseRequestedList>
030000
040000

View File

@@ -24,7 +24,7 @@
<htmlTabRef>TEST-NSA-FR1-TM1</htmlTabRef>
<htmlTabName>NSA Ping DL UL with QUECTEL</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>3</repeatCount>
<repeatCount>1</repeatCount>
<TestCaseRequestedList>
030000
040000

View File

@@ -0,0 +1,35 @@
<!--
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The OpenAirInterface Software Alliance licenses this file to You under
the OAI Public License, Version 1.1 (the "License"); you may not use this file
except in compliance with the License.
You may obtain a copy of the License at
http://www.openairinterface.org/?page_id=698
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
For more information about the OpenAirInterface (OAI) Software Alliance:
contact@openairinterface.org
-->
<testCaseList>
<htmlTabRef>build-tab</htmlTabRef>
<htmlTabName>Build Images on Cluster</htmlTabName>
<htmlTabIcon>wrench</htmlTabIcon>
<TestCaseRequestedList>000001</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase id="000001">
<class>Build_Cluster_Image</class>
<desc>Build Images on OpenShift Cluster</desc>
</testCase>
</testCaseList>

View File

@@ -0,0 +1,42 @@
<!--
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The OpenAirInterface Software Alliance licenses this file to You under
the OAI Public License, Version 1.1 (the "License"); you may not use this file
except in compliance with the License.
You may obtain a copy of the License at
http://www.openairinterface.org/?page_id=698
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
For more information about the OpenAirInterface (OAI) Software Alliance:
contact@openairinterface.org
-->
<testCaseList>
<htmlTabRef>l2sim-4glte-proxy-build</htmlTabRef>
<htmlTabName>Build L2sim proxy image</htmlTabName>
<htmlTabIcon>wrench</htmlTabIcon>
<repeatCount>1</repeatCount>
<TestCaseRequestedList>
000001
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase id="000001">
<class>Build_Proxy</class>
<desc>Build L2sim Proxy Image</desc>
<eNB_instance>1</eNB_instance>
<eNB_serverId>1</eNB_serverId>
<forced_workspace_cleanup>True</forced_workspace_cleanup>
<proxy_commit>56cfdc0</proxy_commit>
</testCase>
</testCaseList>

View File

@@ -0,0 +1,135 @@
<!--
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The OpenAirInterface Software Alliance licenses this file to You under
the OAI Public License, Version 1.1 (the "License"); you may not use this file
except in compliance with the License.
You may obtain a copy of the License at
http://www.openairinterface.org/?page_id=698
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
For more information about the OpenAirInterface (OAI) Software Alliance:
contact@openairinterface.org
-->
<testCaseList>
<htmlTabRef>l2sim-4glte-tdd</htmlTabRef>
<htmlTabName>Testing 4G LTE L2 sim - FDD eNB</htmlTabName>
<htmlTabIcon>wrench</htmlTabIcon>
<repeatCount>1</repeatCount>
<TestCaseRequestedList>
100001
000000
000001
000002
000003
000011
200000
020001
020002
030011
030012
200001
100001
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase id="000000">
<class>DeployGenObject</class>
<desc>Deploy Cassandra Database</desc>
<yaml_path>yaml_files/4g_l2sim_fdd</yaml_path>
<services>cassandra db_init</services>
<nb_healthy>1</nb_healthy>
</testCase>
<testCase id="000001">
<class>DeployGenObject</class>
<desc>Deploy OAI 4G CoreNetwork</desc>
<yaml_path>yaml_files/4g_l2sim_fdd</yaml_path>
<services>oai_hss redis magma_mme oai_spgwc oai_spgwu trf_gen</services>
<nb_healthy>7</nb_healthy>
</testCase>
<testCase id="000002">
<class>DeployGenObject</class>
<desc>Deploy OAI 4G eNB L2 sim</desc>
<yaml_path>yaml_files/4g_l2sim_fdd</yaml_path>
<services>oai_enb</services>
<nb_healthy>8</nb_healthy>
</testCase>
<testCase id="000003">
<class>DeployGenObject</class>
<desc>Deploy OAI L2 sim 4G LTE-UE 1 and Proxy</desc>
<yaml_path>yaml_files/4g_l2sim_fdd</yaml_path>
<services>proxy oai_ue1</services>
<nb_healthy>10</nb_healthy>
</testCase>
<testCase id="000011">
<class>IdleSleep</class>
<desc>Sleep</desc>
<idle_sleep_time_in_sec>10</idle_sleep_time_in_sec>
</testCase>
<testCase id="020001">
<class>PingFromContainer</class>
<desc>Ping trf-gen from LTE-UE 1</desc>
<container_name>l2sim4g-oai-lte-ue1</container_name>
<options>-I oaitun_ue1 -c 20 192.168.61.11</options>
<loss_threshold>0</loss_threshold>
</testCase>
<testCase id="020002">
<class>PingFromContainer</class>
<desc>Ping LTE-UE 1 from trf-gen</desc>
<container_name>l2sim4g-trf-gen</container_name>
<options>-c 20 12.0.0.2</options>
<loss_threshold>0</loss_threshold>
</testCase>
<testCase id="030011">
<class>IperfFromContainer</class>
<desc>Iperf UDP Downlink</desc>
<server_container_name>l2sim4g-oai-lte-ue1</server_container_name>
<client_container_name>l2sim4g-trf-gen</client_container_name>
<server_options>-B 12.0.0.2 -u -i 1 -s</server_options>
<client_options>-c 12.0.0.2 -u -i 1 -t 30 -b 1M</client_options>
</testCase>
<testCase id="030012">
<class>IperfFromContainer</class>
<desc>Iperf UDP Uplink</desc>
<server_container_name>l2sim4g-trf-gen</server_container_name>
<client_container_name>l2sim4g-oai-lte-ue1</client_container_name>
<server_options>-u -i 1 -s</server_options>
<client_options>-B 12.0.0.2 -c 192.168.61.11 -u -i 1 -t 30 -b 3M</client_options>
</testCase>
<testCase id="100001">
<class>UndeployGenObject</class>
<desc>Undeploy all OAI 4G stack</desc>
<yaml_path>yaml_files/4g_l2sim_fdd</yaml_path>
</testCase>
<testCase id="200000">
<class>StatsFromGenObject</class>
<desc>Statistics before Traffic Test</desc>
<yaml_path>yaml_files/4g_l2sim_fdd</yaml_path>
</testCase>
<testCase id="200001">
<class>StatsFromGenObject</class>
<desc>Statistics after Traffic Test</desc>
<yaml_path>yaml_files/4g_l2sim_fdd</yaml_path>
</testCase>
</testCaseList>

View File

@@ -0,0 +1,38 @@
<!--
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The OpenAirInterface Software Alliance licenses this file to You under
the OAI Public License, Version 1.1 (the "License"); you may not use this file
except in compliance with the License.
You may obtain a copy of the License at
http://www.openairinterface.org/?page_id=698
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
For more information about the OpenAirInterface (OAI) Software Alliance:
contact@openairinterface.org
-->
<testCaseList>
<htmlTabRef>l2sim-4glte-down</htmlTabRef>
<htmlTabName>CleanUp 4G L2 sim - FDD eNB</htmlTabName>
<htmlTabIcon>trash</htmlTabIcon>
<TestCaseRequestedList>
100002
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase id="100002">
<class>UndeployGenObject</class>
<desc>Undeploy all OAI 4G stack</desc>
<yaml_path>yaml_files/4g_l2sim_fdd</yaml_path>
</testCase>
</testCaseList>

View File

@@ -24,7 +24,7 @@
<htmlTabRef>rfsim-4glte-tdd05mhz</htmlTabRef>
<htmlTabName>Monolithic eNB - TDD 05MHz</htmlTabName>
<htmlTabIcon>wrench</htmlTabIcon>
<repeatCount>2</repeatCount>
<repeatCount>1</repeatCount>
<TestCaseRequestedList>
100011
000011

View File

@@ -22,7 +22,7 @@
-->
<testCaseList>
<htmlTabRef>rfsim-5gnr-f1</htmlTabRef>
<htmlTabName>Testing 5G NR RF sim in containers - CU-DU F1 split</htmlTabName>
<htmlTabName>CU-DU F1 split</htmlTabName>
<htmlTabIcon>wrench</htmlTabIcon>
<TestCaseRequestedList>
100021

View File

@@ -22,7 +22,7 @@
-->
<testCaseList>
<htmlTabRef>rfsim-5gnr-down-f1</htmlTabRef>
<htmlTabName>CleanUp 5G RF - CU-DU F1 split</htmlTabName>
<htmlTabName>CleanUp CU-DU F1 split</htmlTabName>
<htmlTabIcon>trash</htmlTabIcon>
<TestCaseRequestedList>
100022

View File

@@ -22,9 +22,9 @@
-->
<testCaseList>
<htmlTabRef>rfsim-5gnr-fdd</htmlTabRef>
<htmlTabName>Testing 5G NR RF sim - Monolithic FDD gNB</htmlTabName>
<htmlTabName>Monolithic FDD gNB with SDAP</htmlTabName>
<htmlTabIcon>wrench</htmlTabIcon>
<repeatCount>4</repeatCount>
<repeatCount>1</repeatCount>
<TestCaseRequestedList>
100011
000010

View File

@@ -22,7 +22,7 @@
-->
<testCaseList>
<htmlTabRef>rfsim-5gnr-fdd-down</htmlTabRef>
<htmlTabName>CleanUp 5G RF - Monolithic FDD gNB</htmlTabName>
<htmlTabName>CleanUp Monolithic FDD gNB with SDAP</htmlTabName>
<htmlTabIcon>trash</htmlTabIcon>
<TestCaseRequestedList>
100012

View File

@@ -24,7 +24,7 @@
<htmlTabRef>l2sim-5gnr-tdd</htmlTabRef>
<htmlTabName>Testing 5G NR L2 sim - TDD gNB</htmlTabName>
<htmlTabIcon>wrench</htmlTabIcon>
<repeatCount>2</repeatCount>
<repeatCount>1</repeatCount>
<TestCaseRequestedList>
100001
000000

View File

@@ -22,9 +22,9 @@
-->
<testCaseList>
<htmlTabRef>rfsim-5gnr-tdd</htmlTabRef>
<htmlTabName>Testing 5G NR RF sim - Monolithic TDD gNB</htmlTabName>
<htmlTabName>Monolithic TDD gNB</htmlTabName>
<htmlTabIcon>wrench</htmlTabIcon>
<repeatCount>4</repeatCount>
<repeatCount>1</repeatCount>
<TestCaseRequestedList>
100001
000000

View File

@@ -22,7 +22,7 @@
-->
<testCaseList>
<htmlTabRef>rfsim-5gnr-down</htmlTabRef>
<htmlTabName>CleanUp 5G RF - Monolithic TDD gNB</htmlTabName>
<htmlTabName>CleanUp Monolithic TDD gNB</htmlTabName>
<htmlTabIcon>trash</htmlTabIcon>
<TestCaseRequestedList>
100002

View File

@@ -0,0 +1,42 @@
<!--
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The OpenAirInterface Software Alliance licenses this file to You under
the OAI Public License, Version 1.1 (the "License"); you may not use this file
except in compliance with the License.
You may obtain a copy of the License at
http://www.openairinterface.org/?page_id=698
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
For more information about the OpenAirInterface (OAI) Software Alliance:
contact@openairinterface.org
-->
<testCaseList>
<htmlTabRef>l2sim-4glte-5gnr-proxy-build</htmlTabRef>
<htmlTabName>Build L2sim proxy image</htmlTabName>
<htmlTabIcon>wrench</htmlTabIcon>
<repeatCount>1</repeatCount>
<TestCaseRequestedList>
000001
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase id="000001">
<class>Build_Proxy</class>
<desc>Build L2sim Proxy Image</desc>
<eNB_instance>1</eNB_instance>
<eNB_serverId>1</eNB_serverId>
<forced_workspace_cleanup>True</forced_workspace_cleanup>
<proxy_commit>56cfdc0</proxy_commit>
</testCase>
</testCaseList>

View File

@@ -53,7 +53,6 @@
<class>Initialize_UE</class>
<desc>Initialize Quectel</desc>
<id>idefix</id>
<UE_Trace>yes</UE_Trace>
</testCase>

View File

@@ -0,0 +1,168 @@
<!--
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The OpenAirInterface Software Alliance licenses this file to You under
the OAI Public License, Version 1.1 (the "License"); you may not use this file
except in compliance with the License.
You may obtain a copy of the License at
http://www.openairinterface.org/?page_id=698
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
For more information about the OpenAirInterface (OAI) Software Alliance:
contact@openairinterface.org
-->
<testCaseList>
<htmlTabRef>TEST-SA-FR1-B200</htmlTabRef>
<htmlTabName>SA SanityCheck with QUECTEL</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>1</repeatCount>
<TestCaseRequestedList>
010002
030000
030101
000001
010000
000001
050000
050001
010002
000001
030201
</TestCaseRequestedList>
<!--
070001
070000
070002
050002
050003
-->
<TestCaseExclusionList></TestCaseExclusionList>
<testCase id="010000">
<class>Initialize_UE</class>
<desc>Initialize Quectel</desc>
<id>idefix</id>
</testCase>
<testCase id="010002">
<class>Terminate_UE</class>
<desc>Terminate Quectel</desc>
<id>idefix</id>
</testCase>
<testCase id="030000">
<class>Copy_Image_to_Test</class>
<desc>Copy gNB image to test server</desc>
<image_name>oai-gnb</image_name>
<registry_svr_id>1</registry_svr_id>
<test_svr_id>0</test_svr_id>
</testCase>
<testCase id="030101">
<class>Deploy_Object</class>
<desc>Deploy gNB (TDD/Band78/40MHz/B200) in a container</desc>
<yaml_path>ci-scripts/yaml_files/sa_b200_gnb</yaml_path>
<eNB_instance>0</eNB_instance>
<eNB_serverId>0</eNB_serverId>
</testCase>
<testCase id="000001">
<class>IdleSleep</class>
<desc>Sleep</desc>
<idle_sleep_time_in_sec>5</idle_sleep_time_in_sec>
</testCase>
<testCase id="000002">
<class>IdleSleep</class>
<desc>Sleep</desc>
<idle_sleep_time_in_sec>20</idle_sleep_time_in_sec>
</testCase>
<testCase id="050000">
<class>Ping</class>
<desc>Ping: 20pings in 20sec</desc>
<id>idefix</id>
<ping_args>-c 20</ping_args>
<ping_packetloss_threshold>1</ping_packetloss_threshold>
<ping_rttavg_threshold>15</ping_rttavg_threshold>
</testCase>
<testCase id="050001">
<class>Ping</class>
<desc>Ping: 100pings in 20sec</desc>
<id>idefix</id>
<ping_args>-c 100 -i 0.2</ping_args>
<ping_packetloss_threshold>1</ping_packetloss_threshold>
<ping_rttavg_threshold>15</ping_rttavg_threshold>
</testCase>
<testCase id="050002">
<class>Ping</class>
<desc>Ping: 20pings in 20sec</desc>
<id>idefix</id>
<ping_args>-c 20</ping_args>
<ping_packetloss_threshold>1</ping_packetloss_threshold>
<ping_rttavg_threshold>15</ping_rttavg_threshold>
</testCase>
<testCase id="050003">
<class>Ping</class>
<desc>Ping: 100pings in 20sec</desc>
<id>idefix</id>
<ping_args>-c 100 -i 0.2</ping_args>
<ping_packetloss_threshold>1</ping_packetloss_threshold>
<ping_rttavg_threshold>15</ping_rttavg_threshold>
</testCase>
<testCase id="070000">
<class>Iperf</class>
<desc>iperf (DL/125Mbps/UDP)(60 sec)(single-ue profile)</desc>
<iperf_args>-u -b 125M -t 60 -i 1 -fm</iperf_args>
<direction>DL</direction>
<id>idefix</id>
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
<iperf_profile>single-ue</iperf_profile>
</testCase>
<testCase id="070001">
<class>Iperf</class>
<desc>iperf (UL/8Mbps/UDP)(60 sec)(single-ue profile)</desc>
<iperf_args>-u -b 8M -t 60 -i 1 -fm</iperf_args>
<direction>UL</direction>
<id>idefix</id>
<iperf_packetloss_threshold>1</iperf_packetloss_threshold>
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
<iperf_profile>single-ue</iperf_profile>
</testCase>
<testCase id="070002">
<class>Iperf</class>
<desc>iperf (BIDIR TCP)(10 sec)(single-ue profile)</desc>
<iperf_args>-t 10 --bidir</iperf_args>
<direction>BIDIR</direction>
<id>idefix</id>
<iperf_profile>single-ue</iperf_profile>
</testCase>
<testCase id="030201">
<class>Undeploy_Object</class>
<desc>Undeploy gNB</desc>
<yaml_path>ci-scripts/yaml_files/sa_b200_gnb</yaml_path>
<eNB_instance>0</eNB_instance>
<eNB_serverId>0</eNB_serverId>
</testCase>
</testCaseList>

View File

@@ -0,0 +1,42 @@
<!--
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The OpenAirInterface Software Alliance licenses this file to You under
the OAI Public License, Version 1.1 (the "License"); you may not use this file
except in compliance with the License.
You may obtain a copy of the License at
http://www.openairinterface.org/?page_id=698
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
For more information about the OpenAirInterface (OAI) Software Alliance:
contact@openairinterface.org
-->
<testCaseList>
<htmlTabRef>TEST-SA-FR1-B200-terminate</htmlTabRef>
<htmlTabName>SA tear-down in case of problem</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>1</repeatCount>
<TestCaseRequestedList>
030201
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase id="030201">
<class>Undeploy_Object</class>
<desc>Undeploy gNB</desc>
<yaml_path>ci-scripts/yaml_files/sa_b200_gnb</yaml_path>
<eNB_instance>1</eNB_instance>
<eNB_serverId>1</eNB_serverId>
<image_tag>sa-test</image_tag>
</testCase>
</testCaseList>

View File

@@ -24,7 +24,7 @@
<htmlTabRef>test-05-tm1</htmlTabRef>
<htmlTabName>Test-05MHz-TM1</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>4</repeatCount>
<repeatCount>1</repeatCount>
<TestCaseRequestedList>
030201
040101

View File

@@ -24,7 +24,7 @@
<htmlTabRef>test-05-tm1-nos1-tunnel</htmlTabRef>
<htmlTabName>Test-05MHz-TM1-noS1-tunnel</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>4</repeatCount>
<repeatCount>1</repeatCount>
<TestCaseRequestedList>
030201 090109
030101 000001 090101 000002 040501 040502 000001 040601 040602 040641 040642 000001 090109 030201

View File

@@ -24,7 +24,7 @@
<htmlTabRef>test-05-tm1-fembms-nos1-tunnel</htmlTabRef>
<htmlTabName>Test-05MHz-FEMBMS-TM1-noS1-tunnel</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>2</repeatCount>
<repeatCount>1</repeatCount>
<TestCaseRequestedList>
030201 090109
030104 000001 090104 000002 040605 000001 090109 030201

View File

@@ -24,7 +24,7 @@
<htmlTabRef>test-05-tm1-mbms-nos1-tunnel</htmlTabRef>
<htmlTabName>Test-05MHz-MBMS-TM1-noS1-tunnel</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>2</repeatCount>
<repeatCount>1</repeatCount>
<TestCaseRequestedList>
030201 090109
030103 000001 090103 000002 040605 000001 090109 030201

View File

@@ -24,7 +24,7 @@
<htmlTabRef>test-05-tm1-tunnel</htmlTabRef>
<htmlTabName>Test-05MHz-TM1-tunnel</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>2</repeatCount>
<repeatCount>1</repeatCount>
<TestCaseRequestedList>
030201 090109
030102 000001 090102 000002 040503 000001 040603 040604 040643 040644 000001 090109 030201

View File

@@ -25,7 +25,7 @@
<htmlTabRef>test-05-tm2</htmlTabRef>
<htmlTabName>Test-05MHz-TM2</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>2</repeatCount>
<repeatCount>1</repeatCount>
<TestUnstable>True</TestUnstable>
<TestMinId>040608</TestMinId>
<TestCaseRequestedList>

View File

@@ -24,7 +24,7 @@
<htmlTabRef>test-20-tm1</htmlTabRef>
<htmlTabName>Test-20MHz-TM1</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>4</repeatCount>
<repeatCount>1</repeatCount>
<TestUnstable>True</TestUnstable>
<TestMinId>040623</TestMinId>
<TestCaseRequestedList>

View File

@@ -24,7 +24,7 @@
<htmlTabRef>test-05-tm1-rrc-no-flex</htmlTabRef>
<htmlTabName>Test-05MHz-TM1-RRC-Inactivity</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>2</repeatCount>
<repeatCount>1</repeatCount>
<TestCaseRequestedList>
030201
040101

View File

@@ -24,7 +24,7 @@
<htmlTabRef>test-05-tm1-rrc-w-flex</htmlTabRef>
<htmlTabName>Test-05MHz-TM1-RRC-Inactivity-FlexRan</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>2</repeatCount>
<repeatCount>1</repeatCount>
<TestCaseRequestedList>
030201
040101

View File

@@ -24,7 +24,7 @@
<htmlTabRef>test-10-cdrx-tm1</htmlTabRef>
<htmlTabName>Test-10MHz-CDRX-TM1</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>4</repeatCount>
<repeatCount>1</repeatCount>
<TestCaseRequestedList>
030201
040101

View File

@@ -1,111 +0,0 @@
<!--
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The OpenAirInterface Software Alliance licenses this file to You under
the OAI Public License, Version 1.1 (the "License"); you may not use this file
except in compliance with the License.
You may obtain a copy of the License at
http://www.openairinterface.org/?page_id=698
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
For more information about the OpenAirInterface (OAI) Software Alliance:
contact@openairinterface.org
-->
<testCaseList>
<htmlTabRef>test-f1-05</htmlTabRef>
<htmlTabName>Test-F1-CU-DU-05MHz</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>2</repeatCount>
<TestCaseRequestedList>
030201
040101
030142 030141 000002 040301 000002 040541 040601 040641 040401 040201 030201 030202
</TestCaseRequestedList>
<TestCaseExclusionList>
</TestCaseExclusionList>
<testCase id="000002">
<class>IdleSleep</class>
<desc>Sleep</desc>
<idle_sleep_time_in_sec>5</idle_sleep_time_in_sec>
</testCase>
<testCase id="030141">
<class>Initialize_eNB</class>
<desc>Initialize DU (FDD/Band7/5MHz)</desc>
<Initialize_eNB_args>-O ci-scripts/conf_files/du.band7.tm1.25PRB.usrpb210.conf --log_config.global_log_options level,nocolor,time</Initialize_eNB_args>
<eNB_instance>1</eNB_instance>
</testCase>
<testCase id="030142">
<class>Initialize_eNB</class>
<desc>Initialize CU (FDD/Band7/5MHz)</desc>
<Initialize_eNB_args>-O ci-scripts/conf_files/cu.band7.tm1.25PRB.conf --log_config.global_log_options level,nocolor,time</Initialize_eNB_args>
<eNB_instance>0</eNB_instance>
</testCase>
<testCase id="030201">
<class>Terminate_eNB</class>
<desc>Terminate CU</desc>
<eNB_instance>0</eNB_instance>
</testCase>
<testCase id="030202">
<class>Terminate_eNB</class>
<desc>Terminate DU</desc>
<eNB_instance>1</eNB_instance>
</testCase>
<testCase id="040101">
<class>Initialize_UE</class>
<desc>Initialize UE</desc>
</testCase>
<testCase id="040201">
<class>Terminate_UE</class>
<desc>Terminate UE</desc>
</testCase>
<testCase id="040301">
<class>Attach_UE</class>
<desc>Attach UE</desc>
</testCase>
<testCase id="040401">
<class>Detach_UE</class>
<desc>Detach UE</desc>
</testCase>
<testCase id="040541">
<class>Ping</class>
<desc>ping (5MHz - 20 sec)</desc>
<ping_args>-c 20</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
<testCase id="040601">
<class>Iperf</class>
<desc>iperf (5MHz - DL/15Mbps/UDP)(30 sec)(single-ue profile)</desc>
<iperf_args>-u -b 15M -t 30 -i 1</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>single-ue</iperf_profile>
</testCase>
<testCase id="040641">
<class>Iperf</class>
<desc>iperf (5MHz - UL/9Mbps/UDP)(30 sec)(single-ue profile)</desc>
<iperf_args>-u -b 9M -t 30 -i 1 -R</iperf_args>
<iperf_packetloss_threshold>60</iperf_packetloss_threshold>
<iperf_profile>single-ue</iperf_profile>
</testCase>
</testCaseList>

View File

@@ -1,111 +0,0 @@
<!--
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The OpenAirInterface Software Alliance licenses this file to You under
the OAI Public License, Version 1.1 (the "License"); you may not use this file
except in compliance with the License.
You may obtain a copy of the License at
http://www.openairinterface.org/?page_id=698
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
For more information about the OpenAirInterface (OAI) Software Alliance:
contact@openairinterface.org
-->
<testCaseList>
<htmlTabRef>test-f1-10</htmlTabRef>
<htmlTabName>Test-F1-CU-DU-10MHz</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>4</repeatCount>
<TestCaseRequestedList>
030201
040101
030152 030151 000002 040301 000002 040551 040611 040651 040401 040201 030201 030202
</TestCaseRequestedList>
<TestCaseExclusionList>
</TestCaseExclusionList>
<testCase id="000002">
<class>IdleSleep</class>
<desc>Sleep</desc>
<idle_sleep_time_in_sec>5</idle_sleep_time_in_sec>
</testCase>
<testCase id="030151">
<class>Initialize_eNB</class>
<desc>Initialize DU (FDD/Band7/10MHz)</desc>
<Initialize_eNB_args>-O ci-scripts/conf_files/du.band7.tm1.50PRB.usrpb210.conf --log_config.global_log_options level,nocolor,time</Initialize_eNB_args>
<eNB_instance>1</eNB_instance>
</testCase>
<testCase id="030152">
<class>Initialize_eNB</class>
<desc>Initialize CU (FDD/Band7/10MHz)</desc>
<Initialize_eNB_args>-O ci-scripts/conf_files/cu.band7.tm1.50PRB.conf --log_config.global_log_options level,nocolor,time</Initialize_eNB_args>
<eNB_instance>0</eNB_instance>
</testCase>
<testCase id="030201">
<class>Terminate_eNB</class>
<desc>Terminate CU</desc>
<eNB_instance>0</eNB_instance>
</testCase>
<testCase id="030202">
<class>Terminate_eNB</class>
<desc>Terminate DU</desc>
<eNB_instance>1</eNB_instance>
</testCase>
<testCase id="040101">
<class>Initialize_UE</class>
<desc>Initialize UE</desc>
</testCase>
<testCase id="040201">
<class>Terminate_UE</class>
<desc>Terminate UE</desc>
</testCase>
<testCase id="040301">
<class>Attach_UE</class>
<desc>Attach UE</desc>
</testCase>
<testCase id="040401">
<class>Detach_UE</class>
<desc>Detach UE</desc>
</testCase>
<testCase id="040551">
<class>Ping</class>
<desc>ping (10MHz - 20 sec)</desc>
<ping_args>-c 20</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
<testCase id="040611">
<class>Iperf</class>
<desc>iperf (10MHz - DL/32Mbps/UDP)(30 sec)(single-ue profile)</desc>
<iperf_args>-u -b 32M -t 30 -i 1</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>single-ue</iperf_profile>
</testCase>
<testCase id="040651">
<class>Iperf</class>
<desc>iperf (10MHz - UL/15Mbps/UDP)(30 sec)(single-ue profile)</desc>
<iperf_args>-u -b 15M -t 30 -i 1 -R</iperf_args>
<iperf_packetloss_threshold>60</iperf_packetloss_threshold>
<iperf_profile>single-ue</iperf_profile>
</testCase>
</testCaseList>

View File

@@ -1,111 +0,0 @@
<!--
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The OpenAirInterface Software Alliance licenses this file to You under
the OAI Public License, Version 1.1 (the "License"); you may not use this file
except in compliance with the License.
You may obtain a copy of the License at
http://www.openairinterface.org/?page_id=698
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
For more information about the OpenAirInterface (OAI) Software Alliance:
contact@openairinterface.org
-->
<testCaseList>
<htmlTabRef>test-f1-20</htmlTabRef>
<htmlTabName>Test-F1-CU-DU-20MHz</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>4</repeatCount>
<TestCaseRequestedList>
030201
040101
030162 030161 000002 040301 000002 040561 040621 040661 040401 040201 030201 030202
</TestCaseRequestedList>
<TestCaseExclusionList>
</TestCaseExclusionList>
<testCase id="000002">
<class>IdleSleep</class>
<desc>Sleep</desc>
<idle_sleep_time_in_sec>5</idle_sleep_time_in_sec>
</testCase>
<testCase id="030161">
<class>Initialize_eNB</class>
<desc>Initialize DU (FDD/Band7/20MHz)</desc>
<Initialize_eNB_args>-O ci-scripts/conf_files/du.band7.tm1.100PRB.usrpb210.conf --log_config.global_log_options level,nocolor,time</Initialize_eNB_args>
<eNB_instance>1</eNB_instance>
</testCase>
<testCase id="030162">
<class>Initialize_eNB</class>
<desc>Initialize CU (FDD/Band7/20MHz)</desc>
<Initialize_eNB_args>-O ci-scripts/conf_files/cu.band7.tm1.100PRB.conf --log_config.global_log_options level,nocolor,time</Initialize_eNB_args>
<eNB_instance>0</eNB_instance>
</testCase>
<testCase id="030201">
<class>Terminate_eNB</class>
<desc>Terminate CU</desc>
<eNB_instance>0</eNB_instance>
</testCase>
<testCase id="030202">
<class>Terminate_eNB</class>
<desc>Terminate DU</desc>
<eNB_instance>1</eNB_instance>
</testCase>
<testCase id="040101">
<class>Initialize_UE</class>
<desc>Initialize UE</desc>
</testCase>
<testCase id="040201">
<class>Terminate_UE</class>
<desc>Terminate UE</desc>
</testCase>
<testCase id="040301">
<class>Attach_UE</class>
<desc>Attach UE</desc>
</testCase>
<testCase id="040401">
<class>Detach_UE</class>
<desc>Detach UE</desc>
</testCase>
<testCase id="040561">
<class>Ping</class>
<desc>ping (20MHz - 20 sec)</desc>
<ping_args>-c 20</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
<testCase id="040621">
<class>Iperf</class>
<desc>iperf (20MHz - DL/70Mbps/UDP)(30 sec)(single-ue profile)</desc>
<iperf_args>-u -b 70M -t 30 -i 1</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>single-ue</iperf_profile>
</testCase>
<testCase id="040661">
<class>Iperf</class>
<desc>iperf (20MHz - UL/15Mbps/UDP)(30 sec)(single-ue profile)</desc>
<iperf_args>-u -b 15M -t 30 -i 1 -R</iperf_args>
<iperf_packetloss_threshold>60</iperf_packetloss_threshold>
<iperf_profile>single-ue</iperf_profile>
</testCase>
</testCaseList>

View File

@@ -0,0 +1,37 @@
<!--
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The OpenAirInterface Software Alliance licenses this file to You under
the OAI Public License, Version 1.1 (the "License"); you may not use this file
except in compliance with the License.
You may obtain a copy of the License at
http://www.openairinterface.org/?page_id=698
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
For more information about the OpenAirInterface (OAI) Software Alliance:
contact@openairinterface.org
-->
<testCaseList>
<htmlTabRef>5gc-closure</htmlTabRef>
<htmlTabName>5GC-Closure</htmlTabName>
<htmlTabIcon>log-out</htmlTabIcon>
<TestCaseRequestedList>
060000
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase id="060000">
<class>Terminate_5GCN</class>
<desc>Terminate 5GC</desc>
</testCase>
</testCaseList>

View File

@@ -0,0 +1,38 @@
<!--
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The OpenAirInterface Software Alliance licenses this file to You under
the OAI Public License, Version 1.1 (the "License"); you may not use this file
except in compliance with the License.
You may obtain a copy of the License at
http://www.openairinterface.org/?page_id=698
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
For more information about the OpenAirInterface (OAI) Software Alliance:
contact@openairinterface.org
-->
<testCaseList>
<htmlTabRef>5gc-start-tab</htmlTabRef>
<htmlTabName>5GC-Start</htmlTabName>
<htmlTabIcon>log-in</htmlTabIcon>
<TestCaseRequestedList>
000100
</TestCaseRequestedList>
<TestCaseExclusionList>
</TestCaseExclusionList>
<testCase id="000100">
<class>Initialize_5GCN</class>
<desc>Initialize 5GC</desc>
</testCase>
</testCaseList>

View File

@@ -26,6 +26,7 @@
<htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>1</repeatCount>
<TestCaseRequestedList>
010002
030000
040000
000002

View File

@@ -26,6 +26,7 @@
<htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>1</repeatCount>
<TestCaseRequestedList>
010002
031000
041000
000002

View File

@@ -26,6 +26,7 @@
<htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>1</repeatCount>
<TestCaseRequestedList>
010002
030000
040000
000002

View File

@@ -26,6 +26,7 @@
<htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>1</repeatCount>
<TestCaseRequestedList>
010002
040000
000002
010000

View File

@@ -26,6 +26,7 @@
<htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>1</repeatCount>
<TestCaseRequestedList>
010002
042000
000002
010000

View File

@@ -26,6 +26,7 @@
<htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>1</repeatCount>
<TestCaseRequestedList>
011002
041000
000002
011000

View File

@@ -24,7 +24,7 @@
<htmlTabRef>run-oai-gnb-nr-ue</htmlTabRef>
<htmlTabName>Run-gNB-and-NR-UE</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>2</repeatCount>
<repeatCount>1</repeatCount>
<TestCaseRequestedList>
090101 000001 090102 000002 090108 090109
</TestCaseRequestedList>
@@ -52,7 +52,7 @@
<testCase id="090102">
<class>Initialize_OAI_UE</class>
<desc>Initialize NR UE USRP</desc>
<Initialize_OAI_UE_args>--phy-test --usrp-args "addr=192.168.30.2,second_addr=192.168.50.2,clock_source=external,time_source=external" --ue-rxgain 50 --rrc_config_path . --dlsch-parallel 4 --log_config.global_log_options level,nocolor,time</Initialize_OAI_UE_args>
<Initialize_OAI_UE_args>--phy-test --usrp-args "addr=192.168.30.2,second_addr=192.168.50.2,clock_source=external,time_source=external" --ue-rxgain 50 --rrc_config_path . --log_config.global_log_options level,nocolor,time</Initialize_OAI_UE_args>
<air_interface>NR</air_interface>
</testCase>

View File

@@ -24,7 +24,7 @@
<htmlTabRef>run-oai-gnb-nr-ue-tx-write-thread</htmlTabRef>
<htmlTabName>Run-gNB-and-NR-UE-TX-Write-Thread</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>2</repeatCount>
<repeatCount>1</repeatCount>
<TestCaseRequestedList>
090103 000001 090104 000002 090108 090109
</TestCaseRequestedList>
@@ -52,7 +52,7 @@
<testCase id="090104">
<class>Initialize_OAI_UE</class>
<desc>Initialize NR UE USRP</desc>
<Initialize_OAI_UE_args>--phy-test --usrp-args "addr=192.168.30.2,second_addr=192.168.50.2,clock_source=external,time_source=external" --ue-rxgain 75 --rrc_config_path . --dlsch-parallel 4 --log_config.global_log_options level,nocolor,time</Initialize_OAI_UE_args>
<Initialize_OAI_UE_args>--phy-test --usrp-args "addr=192.168.30.2,second_addr=192.168.50.2,clock_source=external,time_source=external" --ue-rxgain 75 --rrc_config_path . --log_config.global_log_options level,nocolor,time</Initialize_OAI_UE_args>
<air_interface>NR</air_interface>
</testCase>

View File

@@ -24,7 +24,7 @@
<htmlTabRef>gnb-build-tab</htmlTabRef>
<htmlTabName>Build-gNB</htmlTabName>
<htmlTabIcon>wrench</htmlTabIcon>
<repeatCount>4</repeatCount>
<repeatCount>1</repeatCount>
<TestCaseRequestedList>
010101
</TestCaseRequestedList>
@@ -34,7 +34,7 @@
<mode>TesteNB</mode>
<class>Build_eNB</class>
<desc>Build gNB (USRP)</desc>
<Build_eNB_args>--gNB -w USRP --ninja --cmake-opt -DBoost_INCLUDE_DIR=/usr/include/boost169 --noavx512</Build_eNB_args>
<Build_eNB_args>--gNB -w USRP --ninja --cmake-opt -DBoost_INCLUDE_DIR=/usr/include/boost169 --noavx512 -c -P</Build_eNB_args>
<forced_workspace_cleanup>True</forced_workspace_cleanup>
</testCase>

View File

@@ -24,7 +24,7 @@
<htmlTabRef>test-10</htmlTabRef>
<htmlTabName>Test-10MHz</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>2</repeatCount>
<repeatCount>1</repeatCount>
<TestUnstable>True</TestUnstable>
<TestMinId>040612</TestMinId>
<TestCaseRequestedList>

View File

@@ -24,7 +24,7 @@
<htmlTabRef>test-20</htmlTabRef>
<htmlTabName>Test-20MHz</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>2</repeatCount>
<repeatCount>1</repeatCount>
<TestCaseRequestedList>
030201
040101

View File

@@ -24,7 +24,7 @@
<htmlTabRef>test-05-tm1-oai-ue</htmlTabRef>
<htmlTabName>Test-05MHz-TM1-OAI-UE</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>4</repeatCount>
<repeatCount>1</repeatCount>
<TestCaseRequestedList>
030201 090109
030102 000001 090102 000002 040503 000002 040603 040604 040643 040644 000002 090109 000001 030201

View File

@@ -24,7 +24,7 @@
<htmlTabRef>test-05-tm1-nos1-tunnel</htmlTabRef>
<htmlTabName>Test-05MHz-TM1-noS1-tunnel</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>4</repeatCount>
<repeatCount>1</repeatCount>
<TestCaseRequestedList>
030201 090109
030101 000001 090101 000002 040501 040502 000001 040601 040602 040641 040642 000001 090109 030201

View File

@@ -24,7 +24,7 @@
<htmlTabRef>test-x2-ho-05-tm1</htmlTabRef>
<htmlTabName>Test-X2-Handover-05MHz-TM1</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>2</repeatCount>
<repeatCount>1</repeatCount>
<TestCaseRequestedList>
040101 030201 030202
050102

View File

@@ -26,132 +26,125 @@
<htmlTabName>Test-ldpc-GPU</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>1</repeatCount>
<TestCaseRequestedList>000001 000002 000003 000004 000005 000006 000007 000008 000009 000010 000011 000012 000013 000014 000015 000016 000017 000018 000019 000020 000021</TestCaseRequestedList>
<TestCaseRequestedList>000002 000003 000004 000005 000006 000007 000008 000009 000010 000011 000012 000013 000014 000015 000016 000017 000018 000019 000020 000021</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase id="000001">
<class>Build_PhySim</class>
<desc>Build for physical simulator</desc>
<physim_build_args>--phy_simulators --ninja --noavx512</physim_build_args>
<forced_workspace_cleanup>FALSE</forced_workspace_cleanup>
</testCase>
<testCase id="000002">
<class>Run_PhySim</class>
<class>Run_LDPCTest</class>
<desc>Run LDPC Test with CPU</desc>
<physim_run_args>-l 3872 -s10 -n100</physim_run_args>
</testCase>
<testCase id="000003">
<class>Run_PhySim</class>
<class>Run_LDPCTest</class>
<desc>Run LDPC Test with GPU</desc>
<physim_run_args>-l 3872 -s10 -n100 -G 1</physim_run_args>
</testCase>
<testCase id="000004">
<class>Run_PhySim</class>
<class>Run_LDPCTest</class>
<desc>Run LDPC Test with CPU</desc>
<physim_run_args>-l 4224 -s10 -n100</physim_run_args>
</testCase>
<testCase id="000005">
<class>Run_PhySim</class>
<class>Run_LDPCTest</class>
<desc>Run LDPC Test with GPU</desc>
<physim_run_args>-l 4224 -s10 -n100 -G 1</physim_run_args>
</testCase>
<testCase id="000006">
<class>Run_PhySim</class>
<class>Run_LDPCTest</class>
<desc>Run LDPC Test with CPU</desc>
<physim_run_args>-l 4576 -s10 -n100</physim_run_args>
</testCase>
<testCase id="000007">
<class>Run_PhySim</class>
<class>Run_LDPCTest</class>
<desc>Run LDPC Test with GPU</desc>
<physim_run_args>-l 4576 -s10 -n100 -G 1</physim_run_args>
</testCase>
<testCase id="000008">
<class>Run_PhySim</class>
<class>Run_LDPCTest</class>
<desc>Run LDPC Test with CPU</desc>
<physim_run_args>-l 4928 -s10 -n100</physim_run_args>
</testCase>
<testCase id="000009">
<class>Run_PhySim</class>
<class>Run_LDPCTest</class>
<desc>Run LDPC Test with GPU</desc>
<physim_run_args>-l 4928 -s10 -n100 -G 1</physim_run_args>
</testCase>
<testCase id="000010">
<class>Run_PhySim</class>
<class>Run_LDPCTest</class>
<desc>Run LDPC Test with CPU</desc>
<physim_run_args>-l 5280 -s10 -n100</physim_run_args>
</testCase>
<testCase id="000011">
<class>Run_PhySim</class>
<class>Run_LDPCTest</class>
<desc>Run LDPC Test with GPU</desc>
<physim_run_args>-l 5280 -s10 -n100 -G 1</physim_run_args>
</testCase>
<testCase id="000012">
<class>Run_PhySim</class>
<class>Run_LDPCTest</class>
<desc>Run LDPC Test with CPU</desc>
<physim_run_args>-l 5632 -s10 -n100</physim_run_args>
</testCase>
<testCase id="000013">
<class>Run_PhySim</class>
<class>Run_LDPCTest</class>
<desc>Run LDPC Test with GPU</desc>
<physim_run_args>-l 5632 -s10 -n100 -G 1</physim_run_args>
</testCase>
<testCase id="000014">
<class>Run_PhySim</class>
<class>Run_LDPCTest</class>
<desc>Run LDPC Test with CPU</desc>
<physim_run_args>-l 6336 -s10 -n100</physim_run_args>
</testCase>
<testCase id="000015">
<class>Run_PhySim</class>
<class>Run_LDPCTest</class>
<desc>Run LDPC Test with GPU</desc>
<physim_run_args>-l 6336 -s10 -n100 -G 1</physim_run_args>
</testCase>
<testCase id="000016">
<class>Run_PhySim</class>
<class>Run_LDPCTest</class>
<desc>Run LDPC Test with CPU</desc>
<physim_run_args>-l 7040 -s10 -n100</physim_run_args>
</testCase>
<testCase id="000017">
<class>Run_PhySim</class>
<class>Run_LDPCTest</class>
<desc>Run LDPC Test with GPU</desc>
<physim_run_args>-l 7040 -s10 -n100 -G 1</physim_run_args>
</testCase>
<testCase id="000018">
<class>Run_PhySim</class>
<class>Run_LDPCTest</class>
<desc>Run LDPC Test with CPU</desc>
<physim_run_args>-l 7744 -s10 -n100</physim_run_args>
</testCase>
<testCase id="000019">
<class>Run_PhySim</class>
<class>Run_LDPCTest</class>
<desc>Run LDPC Test with GPU</desc>
<physim_run_args>-l 7744 -s10 -n100 -G 1</physim_run_args>
</testCase>
<testCase id="000020">
<class>Run_PhySim</class>
<class>Run_LDPCTest</class>
<desc>Run LDPC Test with CPU</desc>
<physim_run_args>-l 8448 -s10 -n100</physim_run_args>
</testCase>
<testCase id="000021">
<class>Run_PhySim</class>
<class>Run_LDPCTest</class>
<desc>Run LDPC Test with GPU</desc>
<physim_run_args>-l 8448 -s10 -n100 -G 1</physim_run_args>
</testCase>

Some files were not shown because too many files have changed in this diff Show More